Кратко о том, как работать с 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! 15%

Перенос данных 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 руб.

12.06.2017    142220    802    297    

423

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

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

35000 руб.

15.12.2021    24344    172    51    

131

Перенос данных 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 руб.

23.07.2020    51909    229    71    

187

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    171432    305    257    

381

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    36867    95    66    

92

Перенос данных 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 руб.

18.02.2016    187189    591    512    

529

SALE! 10%

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

Перенос данных из ERP в УПП 1.3 | из КА 2 в КА 1.1 | из КА 2 в УПП 1.3 | из КА 2 в УТ 10.3 | из ERP в КА 1.1 | из ERP в УТ 10.3 | из УТ 11 в УТ 10.3 | из УТ 11 в УПП 1.3 | из УТ 11 в КА 1.1 | Можно переносить только новые объекты, найденные в приемнике перезаписываться не будут | Есть фильтр по организации при выгрузке данных | Оперативно обновляем на новые релизы 1С

53111 47800 руб.

28.11.2015    83391    33    125    

65

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    195318    152    244    

282
Отзывы
9. Dementor 1037 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 2684 16.07.23 00:04 Сейчас в теме
3. starik-2005 3092 15.07.23 14:14 Сейчас в теме
В дохлом мамонте теплилась жизнь )))
Jimbo; lvictor58; +2 Ответить
4. Diversus 2329 15.07.23 15:20 Сейчас в теме
Повеяло 2007-ым)) Помню на тот момент, это был один из самых популярных форматов для обмена.
5. CheBurator 2684 15.07.23 23:59 Сейчас в теме
а не проще тупо по OLE из 77 вытянуть данные, а не строить догадки о взаимосвязях ;-)
Или тупо из 77 выгрузить штатными отчетами или простыми распечатками данные и тянуть из заранее подготовленных данных...
10. EvgeniuXP 21.07.23 08:19 Сейчас в теме
(5) ну там даты всякие 31.12.1899 полезут.
6. CheBurator 2684 16.07.23 00:01 Сейчас в теме
Какие именно файлы вам нужны можно понять открыв БУ 4.0 и внесением изменений в базу, а затем в папке базы по времени изменения смотреть, какие файлы DT, DH, SC обновились.
.
для этого в 77 есть словарь данных 1cv77.DD
7. CheBurator 2684 16.07.23 00:03 Сейчас в теме
короче - трэш сплошной, а не публикация ;-)
9. Dementor 1037 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 Сейчас в теме
А Эксель ДБФ разве не читает ?
Оставьте свое сообщение