Выгружаем данные в DBF файл из 1С 8.2 (с примерами)

dbf

С недавних пор DBF формат считается неактуальным, но очень часто при использовании сторонних программ, разработанных 10-15 лет назад, требуется обмен данными именно через такой файл. Он представляет собой некую таблицу в которой хранятся данные. Работа с ней происходит построчно. Как же происходит выгрузка из 1С в DBF? На платформе 1с 8.2 предусмотрена работа с данным форматом при помощи объекта XBase.

Рассмотрим на примере выгрузки реестра начислений в Сбербанк на основании ведомости в конфигурации «Бухгалтерия Предприятия 8.2»

export from 1c

1. Создаем объект Xbase для работы с файлами DBF формат

  ДБФ = Новый XBase(«D:\»);

2. Описываем колонки в таблице и указываем параметры, такие как наименование, тип,длина и точность.

ДБФ.поля.Добавить(«A»,«C»,30,0);
ДБФ.поля.Добавить(«B»,«C»,30,0);
ДБФ.поля.Добавить(«C»,«C»,30,0);
ДБФ.поля.Добавить(«D»,«C»,30,0);
ДБФ.поля.Добавить(«E»,«C»,30,0);
ДБФ.поля.Добавить(«F»,«C»,30,0);
ДБФ.поля.Добавить(«G»,«C»,30,0);

3.  Создаем собственно DBF файл с указанием места его расположения и кодировкой

ДБФ.СоздатьФайл(«1548.dbf»);
  ДБФ.ЗакрытьФайл();
  ДБФ.ОткрытьФайл(«1548.dbf»);
  ДБФ.Кодировка=КодировкаXBase.OEM;

4. Пишем простенький запрос, собирающий необходимые данные для вывода необходимой информации

 ЗапросВыплата = Новый Запрос;
   ЗапросВыплата.УстановитьПараметр("ТекущийДокумент", Ведомость);
 
     ЗапросВыплата.Текст =
     "ВЫБРАТЬ
     |    ЛицевыеСчета.Банк,
     |    ЛицевыеСчета.ФизЛицо КАК Сотрудник,
     |    ЛицевыеСчета.НомерЛицевогоСчета,
     |    ЛицевыеСчета.Организация
     |ПОМЕСТИТЬ Лицевые
     |ИЗ
     |    РегистрСведений.ЛицевыеСчетаРаботниковОрганизации КАК ЛицевыеСчета
     |;
     |
     |////////////////////////////////////////////////////////////////////////////////
     |ВЫБРАТЬ
     |    Зарплата.Сумма + Зарплата.КомпенсацияЗаЗадержкуЗарплаты КАК Сумма,
     |    Лицевые.НомерЛицевогоСчета,
     |    Лицевые.Организация,
     |    Зарплата.Физлицо
     |ИЗ
     |    Документ.ЗарплатаКВыплатеОрганизаций.Зарплата КАК Зарплата
     |        ЛЕВОЕ СОЕДИНЕНИЕ Лицевые КАК Лицевые
     |        ПО Зарплата.Физлицо = Лицевые.Сотрудник
     |            И Зарплата.Ссылка.Организация = Лицевые.Организация
     |ГДЕ
     |    Зарплата.Ссылка = &ТекущийДокумент";

   ТаблицаВыплата = ЗапросВыплата.Выполнить().Выгрузить();
   ТаблицаВыплата.Сортировать("Физлицо возр");

5. Заполняем наш DBF файл (покажем программный код частично)

ДБФ.Добавить();
ДБФ.УстановитьЗначениеПоля(«A»,»ОСБ1548″);
ДБФ.Записать();ДБФ.Добавить();
ДБФ.УстановитьЗначениеПоля(«A»,»К платежному поручению #»);
ДБФ.УстановитьЗначениеПоля(«B»,Платежка);
ДБФ.УстановитьЗначениеПоля(«C»,«от»);
….
ДБФ.Добавить();
ДБФ.УстановитьЗначениеПоля(«A»,«№ п/п»);
ДБФ.УстановитьЗначениеПоля(«B»,«Номер счета»);
ДБФ.УстановитьЗначениеПоля(«C»,«Фамилия»);
ДБФ.УстановитьЗначениеПоля(«D»,«Имя»);
ДБФ.УстановитьЗначениеПоля(«E»,«Отчество»);
ДБФ.УстановитьЗначениеПоля(«F»,«Сумма»);
ДБФ.УстановитьЗначениеПоля(«G»,«Примечание»);
ДБФ.Записать();

 

6. Перебираем таблицу значений, полученную из результата запроса

Для Каждого Стр Из ТаблицаВыплата Цикл
счетчик=счетчик+1;
        ПорядковыйНомер строка(счетчик);
        Сотрудник  Стр.Физлицо;
        НомерЛицевогоСчета = Стр.НомерЛицевогоСчета;
        Сумма  Стр.Сумма;

… и.т.д

7. Вносим данные в этотм же цикле в DBF файл

ДБФ.Добавить();
ДБФ.УстановитьЗначениеПоля(«A»,строка(ном));
ДБФ.УстановитьЗначениеПоля(«B»,НомерЛицевогоСчета);          
ДБФ.УстановитьЗначениеПоля(«C»,ВРЕГ(фамилия));              
ДБФ.УстановитьЗначениеПоля(«D»,ВРег(Имя));              
ДБФ.УстановитьЗначениеПоля(«E»,ВРег(Отчество));              
ДБФ.УстановитьЗначениеПоля(«F»,Формат(Сумма,«ЧДЦ=2;ЧГ=0;ЧРД=’.'»));         
ДБФ.УстановитьЗначениеПоля(«G»,«»);
ДБФ.Записать();

Сообщить(«Создан файл «+Путь+«\»+ «1548.dbf»);

 

Создание файла в DBF формате завершено.

Скачать бесплатную обработку Выгрузка ведомости в DBF и XML файлы зарплатного проекта сбербанка

Обсуждение: 9 комментариев
  1. Евгений:

    Не смотря на свой возраст, формат DBF до сих пор не потерял своей актуальности.

    • Николай:

      Почему средствами 1С нельзя создать поле чтобы у него был префикс «_» в начале поля? Версия 1C 8.3

      • admin:

        «_» никак в префиксу не относиться. На платформе 1С 8.3 он игнорируется. Берется следующий за ним значащий символ.

        • Николай:

          Хм. Как раз он таки и не игнорируется, 1с выдает ошибку при создании поля с символом «_». Хотя обычные утилиты создают это поле нормально с таким символов.

          • admin:

            Уточните какое именно поле. В DBF файле или к примеру в справочнике или в табличной части документа. Конкретнее.

  2. Николай:

    Допустим создаем файл средствами 1С
    ИмяФайла = «test.dbf»;
    БД = Новый XBase;
    БД.Поля.Добавить(«_TestKod», «N», 15);

    Уже на этом этапе 1С вылетает с ошибкой. Точно сейчас не скажу, но если принципиально, можно показать.
    Можете сами попробовать.

    • admin:

      Действительно. За работу с DBF файлами в 1с отвечает xBase. К сожалению ни с русскими буквами ни со спец символами работать не умеет, только латиница. Если данный символ принципиален, то вместо xBase пробуйте ADODB. Она понимает русские и спец символы, насколько помню.

  3. Николай:

    И без разницы, текстовое поле или числовое или тип Дата и т.д. т.п.

Поделитесь своим мнением

Свежие записи
Советы и помощь программиста в 1с © 2018 ·   Войти   · Наверх