|
выгрузка в DBF файл Ø |
☑ | ||
|---|---|---|---|---|
|
0
red rat
03.07.06
✎
08:30
|
Люди добрые, помогите!
Необходимо выгрузить данные из 1С 7.7 (рел. 25) в dbf-файл определенной структуры. Никогда проблем не было, но по структуре длина наименования некоторых полей файла доходит до 50 символов. А 1С при формировании допускает длину только до 10 (остальное обрезает). Что делать? |
|||
|
1
Sasha
03.07.06
✎
08:32
|
Все работает.
Код покажи, как делаешь |
|||
|
2
Мимохожий Однако
03.07.06
✎
08:33
|
(0)Для начала точнее опиши проблему. Желательно фрагмент кода показать
|
|||
|
3
red rat
03.07.06
✎
08:36
|
ДБФ_Wbh=СоздатьОбъект("XBase");
ДБФ_Wbh.ДобавитьПоле("wb_ID",2,100,0);//идентификатор (всегда) ДБФ_Wbh.ДобавитьПоле("wb_Number",2,50,0);//номер накал (всегда) ДБФ_Wbh.ДобавитьПоле("wb_Date",3,8,0);//дата накладной (всегда) ДБФ_Wbh.ДобавитьПоле("wb_OutDate",3,8,0);//дата отгрузки (всегда) ДБФ_Wbh.ДобавитьПоле("taLClients_SenderWbSenderClientFullName",2,255,0); //отправитель (всегда) ДБФ_Wbh.ДобавитьПоле("taLClients_RecepientWbRecipientClientFullName",2,255,0); //получатель (всегда) ДБФ_Wbh.ДобавитьПоле("taLClients_SupplierWbSupplierClientFullName",2,255,0); //поставщик (всегда) ДБФ_Wbh.ДобавитьПоле("taLClients_PayerWbPayerClientFullName",2,255,0); //плательщик (всегда) ДБФ_Wbh.ДобавитьПоле("wb_Basis",2,200,0);// ДБФ_Wbh.ДобавитьПоле("wb_DocType",1,1,0);//тип накладной (всегда) ДБФ_Wbh.ДобавитьПоле("wb_StructuralDivision",2,200,0);// ДБФ_Wbh.ДобавитьПоле("wb_InDate",3,8,0);//дата прихода ДБФ_Wbh.ДобавитьПоле("wb_PriceNDS",1,1,0);//НДС в сумме (1 - в сумме, 0 - не в сумме) (всегда) ДБФ_Wbh.ДобавитьПоле("IsIncludeNDS",2,50,0);// ДБФ_Wbh.СоздатьФайл("wbh.dbf"); ДБФ_Wbh.ЗакрытьФайл(); ДБФ_Wbh.ОткрытьФайл("wbh.dbf"); ДБФ_Wbh.Добавить(); ДБФ_Wbh.wb_ID=""; ДБФ_Wbh.wb_Number=Док.НомерДок; ДБФ_Wbh.wb_Date=Док.ДатаДок; Если глЕстьРеквизитШапки("ДатаДокВходящий", Док.Вид()) = 1 Тогда ДБФ_Wbh.wb_OutDate=Док.ДатаДокВходящий;//дата отгрузки (всегда) Иначе ДБФ_Wbh.wb_OutDate=Док.ДатаДок;//дата отгрузки (всегда) КонецЕсли; ДБФ_Wbh.taLClients_Sen derWbSenderClientFullName=Док.Контрагент; //отправитель (всегда) ДБФ_Wbh.taLClients_RecepientWbRecipientClientFullName=Док.Фирма; //получатель (всегда) ДБФ_Wbh.taLClients_SupplierWbSupplierClientFullName=Док.Контрагент; //поставщик (всегда) ДБФ_Wbh.taLClients_PayerWbPayerClientFullName=Док.Фирма; //плательщик (всегда) ДБФ_Wbh.wb_Basis="";// ДБФ_Wbh.wb_DocType=ВернутьТипНакладной(Док);//тип накладной (всегда) ДБФ_Wbh.wb_StructuralDivision="";// ДБФ_Wbh.wb_InDate=Док.ДатаДок;//дата прихода ДБФ_Wbh.wb_PriceNDS=?(Док.СуммаВклНДС=1,1,0);//НДС в сумме (1 - в сумме, 0 - не в сумме) (всегда) ДБФ_Wbh.IsIncludeNDS="";// ДБФ_Wbh.Записать(); ДБФ_Wbh.ЗакрытьФайл(); По первому же длинному наименованию отладчик говорит: ДБФ_Wbh.taLClients_SenderWbSenderClientFullName=Док.Контрагент; //отправитель (всегда) Поле агрегатного объекта не обнаружено (taLClients_SenderWbSenderClientFullName) |
|||
|
4
Tinamu
03.07.06
✎
08:46
|
Может литиницу с кирилицей перепутал...
Попробуй обращаться не по имени поля а по номеру |
|||
|
5
dronis
03.07.06
✎
08:49
|
не Док.Контрагент надо .. а Док.Контрагент.Наименование ..
ты чего агрегатный тип то в дбф суешь .. |
|||
|
6
red rat
03.07.06
✎
08:52
|
(5) Согласен. Только проблемы это не решает.
|
|||
|
7
Морозов Александр
03.07.06
✎
09:00
|
как там оно называется ADO? чтоли...
|
|||
|
8
red rat
03.07.06
✎
09:03
|
Через ДБФ_Wbh.УстановитьЗначениеПоля() тоже не получается.
|
|||
|
9
Пим Сибирский
03.07.06
✎
09:04
|
Зачем люди пишут выгрузку в DBF?
Практически любые данные в любом виде можно представить с помощью универсальных интрументов в виде таблицы MXL, которую хоть в XLS, хоть в DBF можно преобразовывать без проблем. На собственном опыте говорю, 99,9% всех задач, которые требуют выгрузки в DBF решаются без программирования. |
|||
|
10
Tinamu
03.07.06
✎
09:05
|
А файл создался с правильным названием поля?
|
|||
|
11
BigHarry
03.07.06
✎
09:07
|
Странно, что никогда проблем не было. Имхо - в DBF название поля - максимум десять символов.
|
|||
|
12
red rat
03.07.06
✎
09:10
|
(9) Этот файл будет использован для загрузки в другую программу. И требуется именно такая структура. Это не мой каприз.
(10) Нет. Файл структуры создается с НЕ полным наименованием полей, а уже обрезанным. |
|||
|
13
Tinamu
03.07.06
✎
09:12
|
Может тебе его создать один раз и использовать как шаблон. А записывать данные в файл будешь не наименованию поля а через его номер
|
|||
|
14
red rat
03.07.06
✎
09:14
|
(13) Попробую. Похоже это единственный выход.
|
|||
|
15
Морозов Александр
03.07.06
✎
09:27
|
подождемс...
|
|||
|
16
Vladis
03.07.06
✎
11:35
|
Действительно, 1с не "понимает" длинные имена полей. Не мучься. Или делай через АДО. Или отрывай Эксель через оле, пиши туда свои данные и уже его средствами сохраняй в ДБФ.
|
|||
|
17
Берсеркер
03.07.06
✎
11:46
|
(0) А разьве сам формат DBF позволяет создавать поля с длиной наименования больше 10 символов?
Там в заголовке DBF файла места отведено только под 10 символов на поле Длинные наименования для полей хранятся в отдельной таблице - словаре БД Кто тебе вообще такое ТЗ дал? |
|||
|
18
VZ
03.07.06
✎
11:48
|
Имя поля до 10 символов. Жалобы не принимаются.
Тип поля только простой: строка, число, дата. Жалобы не принимаются. Но если не формировать файл в 1С, а взять готовенький (сформированный где-то в другой проге), то 1С несколько смягчается... Таким образом мне удавалось работать с ДБФ, содержащими мемо-поля (не обращаясь к ним) штатными методами. Но как поведет себя с длинными именами полей - не пробовал. |
|||
|
19
USSR
03.07.06
✎
11:57
|
Foxpro точно не понимает имена полей внешних таблиц длиннее 10 символов.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |