Имя: Пароль:
1C
 
выгрузка в 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 символов.
 
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.