Кратко о том, как работать с DBF в 1С v8.3

14.07.23

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Небольшая публикация для тех, кто ни разу не работал с dbf в 1С. Далее представлен пример чтения dbf файлов.

Здоровья всем страждущим.

Если вам нужно понять, как перенести данные, например из Бухгалтерский учет 4.0 1С: Предприятие 7.7 в УПП 1.3 1С: Предприятие 8.3, то эта статья для вас.

Файлы dbf ранее в 1С служили для хранения данных объектов.

Для просмотра dbf файлов я использую dbf-viewer.

О составе файлов можете прочитать здесь: https://center-comptech.ru/st_opisanie_sostav_ib_1cv7.html

Прежде всего я получаю папку, в которую предварительно поместил все файлы, из которых необходимо загрузить данные.

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);

Далее получаю файлы dbf и их cdx. CDX - это индексные файлы. У каждой таблицы, которые я использую, есть индексы, по которым возможно получать необходимые строки для загрузки без обхода всей таблицы.

НайденныеФайлы = НайтиФайлы(Диалог.Каталог, "*.DBF");
НайденныеФайлыCDX = НайтиФайлы(Диалог.Каталог, "*.CDX");

В таблице значений по наименованию файлов в каждой строке я сопоставляю dbf и cdx для дальнейшей работы.

Далее для считывания я использую объект XBase, куда передаю dbf и cdx, пример ниже.

ПутиКЖурналу = ПолучитьПутиФайла("1SJOURN"); // Данная 
    // функция просто возвращает мне структуру из таблицы сопоставленных файлов

ФайлЖурнала = Новый XBase;
ФайлЖурнала.ОткрытьФайл(ПутиКЖурналу.ПутьDBF, ПутиКЖурналу.ПутьCDX , Истина); // дабы не 
    // повредить файл всегда ставлю чтение = истина 
ФайлЖурнала.Первая(); // позиционирует объект на первой записи, используется при необходимости
    // чтения последовательно всех строк файла

// Далее произвожу обход по строкам файла при помощи следующей конструкции
Пока НЕ ФайлЖурнала.ВКонце() Цикл

Если мне нужно получить данные шапки всех документов одного типа, я работаю в связке 1SJOURN с DH* по колонке IDDOC, если табличной части DT* также по IDDOC, пример для DH, IDDOC - внутренний идентификатор документа в dbf (не код, не наименование, не GUID).

ПутьКШапке = ПолучитьПутиФайла("DH56007");

ФайлШапки = Новый XBase;
ФайлШапки.ОткрытьФайл(ПутьКШапке.ПутьDBF, ПутьКШапке.ПутьCDX, Истина);

Внутри цикла обхода 1SJOURN я получаю данные документа через индекс, т.к. это значительно эффективнее, нежели использовать обход со сравнением значений:

ФайлШапки.ТекущийИндекс = ФайлШапки.индексы.Найти("ID");
ФайлШапки.ключ.IDDOC = ФайлЖурнала.IDDOC;
ЗаписьНайдена = ФайлШапки.НайтиПоКлючу("=");

Если ЗаписьНайдена Тогда

СтруктураЗаполнения = Новый Структура("номДок, датаДок, КонтрагентНаим"); // данную структуру можно поместить в массив, 
// чтобы в дальнейшем преобразовать в таблицу значений по которой можно произвести поиск в текущей базе через запрос и т.д. и т.п. 
СтруктураЗаполнения.номДок = СокрЛП(ФайлЖурнала.DOCNO); // номер документа
СтруктураЗаполнения.датаДок = СокрЛП(ФайлЖурнала.DATE); // дата документа

ФайлКонтрагент.ТекущийИндекс = ФайлКонтрагент.индексы.Найти("IDD"); // индексы могут называться у каждой таблицы по разному, 
// чисто эмпирическим путем находим связи между разными таблицами
ФайлКонтрагент.ключ.ID = ФайлШапки.SP5999;
ЗаписьНайдена = ФайлКонтрагент.НайтиПоКлючу("=");
Если ЗаписьНайдена Тогда
СтруктураЗаполнения.Контрагент = ФайлКонтрагент.DESCR; // сохраняем наименование контрагента для поиска в базе в дальнейшем

Если запись найдена, производим дальнейшие изыскания по файлам справочников SC* через данные шапки, в которых связь может быть, например, по колонкам SP5999 = ID файла SC133 (справочник "Контрагенты" в БУ 4.0).

Файл шапки какого-либо документа (как и файл его табличной части) служит своеобразным фильтром в таблице 1SJOURN по типу документа, т.к. я не нашел способа фильтрации всех строк файла / выгрузки всех строк без обхода.

Как уже написано в комментарии кода, получение индексов происходит эмпирически, как и установления связи между различными файлами DT - SC, DH - SC.

Какие именно файлы вам нужны можно понять открыв БУ 4.0 и внесением изменений в базу, а затем в папке базы по времени изменения смотреть, какие файлы DT, DH, SC обновились.

Если у вас есть необходимость выгружать перечисление, то оно хранится напрямую по какому-то краткому наименованию в других таблицах, со строками и числами то же самое.

Не забываем закрыть все файлы:

ФайлКонтрагент.ЗакрытьФайл();
ФайлШапки.ЗакрытьФайл();
ФайлЖурнала.ЗакрытьФайл();

Далее с прочитанными данными из dbf ищем существующие / создаем новые необходимые вам объекты.

Извиняюсь перед всеми, кто хотел конкретный пример разработки обработки по загрузке из dbf - статья не более чем подспорье для работы, нежели инструкция, старался отойти от частного случая к общему как мог. Надеюсь, кому-то да пригодится.

DBF Загрузка

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141508    798    297    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    24012    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51238    228    69    

185

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36584    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    56207    59    105    

61

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171171    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186873    589    509    

526

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194971    150    243    

280
Отзывы
9. Dementor 1035 18.07.23 10:16 Сейчас в теме
Кратко о том, как работать с DBF в 1С v8.3

Стоит начать с того, что к сожалению механика работы с DBF-файлами не менялась и не развивалась со времен 1С8.0
И как верно заметили в (1) - если не хотите терять данные, то идеально использовать драйвер Фокспро.

CDX - это индексные файлы.

CDX - это файлы кластерных индексов. А еще есть обычные индексы (по одному полю), которые хранятся в файлах с расширением IDX. Редко, но встречаются MDX-файлы для хранения множественных индексов. И для завершения темы стоит упомянуть файлы DBT для хранения содержимого MEMO-полей (бинарные данные или строки неограниченной длинны).

В дополнение статьи хочется отметить, что DBF - это просто файлы, а не формат. Это важно помнить, так как было несколько форматов, которые традиционно сохранялись в DBF-файлы, самым популярным из которых был dBase IV

Для тех, кто хочет погрузится в тему, предлагаю поработать с DBF как с бинарными файлами. Структура довольно простая - признак диалекта, метаданные (описание структуры, количество записей, дата модификации) и далее сами данные (без MEMO-полей). Работа с бинарным файлом решит ряд популярных проблем, которые тянутся у стандартного 1С-кого механизма для работы с DBF
Somebody1; V.Nikonov; Mattakushi; +3 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. agentz 40 15.07.23 00:12 Сейчас в теме
А еще можно работать через ADO используя Visual Foxpro 6.0 драйвер. Будет
1. Быстро
2. Можно делать sql запросы
3. Если платформа 64 разряда - танцы с бубном обеспечены
Dementor; +1 Ответить
2. aSHA-1 15.07.23 08:45 Сейчас в теме
+ за ссылку на описание файлов
8. CheBurator 2712 16.07.23 00:04 Сейчас в теме
3. starik-2005 3088 15.07.23 14:14 Сейчас в теме
В дохлом мамонте теплилась жизнь )))
Jimbo; lvictor58; +2 Ответить
4. Diversus 2329 15.07.23 15:20 Сейчас в теме
Повеяло 2007-ым)) Помню на тот момент, это был один из самых популярных форматов для обмена.
5. CheBurator 2712 15.07.23 23:59 Сейчас в теме
а не проще тупо по OLE из 77 вытянуть данные, а не строить догадки о взаимосвязях ;-)
Или тупо из 77 выгрузить штатными отчетами или простыми распечатками данные и тянуть из заранее подготовленных данных...
10. EvgeniuXP 21.07.23 08:19 Сейчас в теме
(5) ну там даты всякие 31.12.1899 полезут.
6. CheBurator 2712 16.07.23 00:01 Сейчас в теме
Какие именно файлы вам нужны можно понять открыв БУ 4.0 и внесением изменений в базу, а затем в папке базы по времени изменения смотреть, какие файлы DT, DH, SC обновились.
.
для этого в 77 есть словарь данных 1cv77.DD
7. CheBurator 2712 16.07.23 00:03 Сейчас в теме
короче - трэш сплошной, а не публикация ;-)
9. Dementor 1035 18.07.23 10:16 Сейчас в теме
Кратко о том, как работать с DBF в 1С v8.3

Стоит начать с того, что к сожалению механика работы с DBF-файлами не менялась и не развивалась со времен 1С8.0
И как верно заметили в (1) - если не хотите терять данные, то идеально использовать драйвер Фокспро.

CDX - это индексные файлы.

CDX - это файлы кластерных индексов. А еще есть обычные индексы (по одному полю), которые хранятся в файлах с расширением IDX. Редко, но встречаются MDX-файлы для хранения множественных индексов. И для завершения темы стоит упомянуть файлы DBT для хранения содержимого MEMO-полей (бинарные данные или строки неограниченной длинны).

В дополнение статьи хочется отметить, что DBF - это просто файлы, а не формат. Это важно помнить, так как было несколько форматов, которые традиционно сохранялись в DBF-файлы, самым популярным из которых был dBase IV

Для тех, кто хочет погрузится в тему, предлагаю поработать с DBF как с бинарными файлами. Структура довольно простая - признак диалекта, метаданные (описание структуры, количество записей, дата модификации) и далее сами данные (без MEMO-полей). Работа с бинарным файлом решит ряд популярных проблем, которые тянутся у стандартного 1С-кого механизма для работы с DBF
Somebody1; V.Nikonov; Mattakushi; +3 Ответить
14. Somebody1 69 29.11.23 09:38 Сейчас в теме
(9) Тот случай, когда комментарий ценнее статьи))
11. lvictor58 137 21.07.23 15:50 Сейчас в теме
Для переноса данных из 7.7 в 8.Х отлично подходит типовая 1С Конвертация данных 2.0. И не надо народ мутить подобной хренью.
12. Jimbo 10 17.08.23 15:32 Сейчас в теме
Мы точно в 2023 году, а не 2004-2005 ?
13. brunet 40 21.11.23 21:24 Сейчас в теме
кроме типовой конвертации 2.0 можно выгрузить из 7.7 в excel стандартными срествами
15. Tarlich 116 21.01.24 21:43 Сейчас в теме
А Эксель ДБФ разве не читает ?
Оставьте свое сообщение