Кратко о том, как работать с 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 Загрузка

См. также

Перенос данных 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.21.x).

35000 руб.

23.07.2020    56858    264    75    

219

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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    146307    861    300    

442

SALE! 10%

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

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    74680    202    156    

140

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

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

35000 руб.

15.12.2021    26541    190    56    

145

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    38671    108    70    

102

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

16260 руб.

18.02.2016    189615    618    534    

537

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:ERP Управление предприятием 2.5 и 1С:Комплексную автоматизацию 2.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.244.x), ERP 2.5 (2.5.21.x), КА 2.5 (2.5.21.x).

35000 руб.

24.06.2020    65136    82    28    

95

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

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 26.03.2025, версия 9.10 - 9.16)

18000 руб.

20.11.2015    160427    395    383    

521
Отзывы
9. Dementor 1048 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 3139 16.07.23 00:04 Сейчас в теме
3. starik-2005 3171 15.07.23 14:14 Сейчас в теме
В дохлом мамонте теплилась жизнь )))
Jimbo; lvictor58; +2 Ответить
4. Diversus 2334 15.07.23 15:20 Сейчас в теме
Повеяло 2007-ым)) Помню на тот момент, это был один из самых популярных форматов для обмена.
5. CheBurator 3139 15.07.23 23:59 Сейчас в теме
а не проще тупо по OLE из 77 вытянуть данные, а не строить догадки о взаимосвязях ;-)
Или тупо из 77 выгрузить штатными отчетами или простыми распечатками данные и тянуть из заранее подготовленных данных...
10. EvgeniuXP 21.07.23 08:19 Сейчас в теме
(5) ну там даты всякие 31.12.1899 полезут.
6. CheBurator 3139 16.07.23 00:01 Сейчас в теме
Какие именно файлы вам нужны можно понять открыв БУ 4.0 и внесением изменений в базу, а затем в папке базы по времени изменения смотреть, какие файлы DT, DH, SC обновились.
.
для этого в 77 есть словарь данных 1cv77.DD
7. CheBurator 3139 16.07.23 00:03 Сейчас в теме
короче - трэш сплошной, а не публикация ;-)
9. Dementor 1048 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 138 21.07.23 15:50 Сейчас в теме
Для переноса данных из 7.7 в 8.Х отлично подходит типовая 1С Конвертация данных 2.0. И не надо народ мутить подобной хренью.
12. Jimbo 13 17.08.23 15:32 Сейчас в теме
Мы точно в 2023 году, а не 2004-2005 ?
13. brunet 40 21.11.23 21:24 Сейчас в теме
кроме типовой конвертации 2.0 можно выгрузить из 7.7 в excel стандартными срествами
15. Tarlich 118 21.01.24 21:43 Сейчас в теме
А Эксель ДБФ разве не читает ?
Оставьте свое сообщение