Выгружаем данные в 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 файлы зарплатного проекта сбербанка

Понравилась статья? Поделиться с друзьями:
Комментариев: 10
  1. anonim

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

  2. Николай

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

  3. admin

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

  4. Николай
  5. Николай

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

  6. admin

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

  7. Николай

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

  8. admin

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

  9. Николай

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

  10. Евгений

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

Добавить комментарий