Кратко о том, как работать с 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С:Предприятие 8 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" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

52967 руб.

25.02.2015    180101    343    281    

406

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27180 руб.

12.06.2017    156458    927    306    

473

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

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

38000 руб.

15.12.2021    31649    229    61    

173

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

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

38000 руб.

23.07.2020    64208    303    81    

243

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

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

61356 руб.

15.04.2019    81041    218    168    

157

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

Перенос данных из ЗУП 3 в ЗУП 3 | из ЗУП 3 в КА 2 | из ЗУП 3 в ERP | Оперативно обновляется при выходе новых релизов 1С | Готовые правила конвертации (КД 2) для перехода с "ЗУП 3" на "УП ред. 3" / "КА, ред. 2" / "ERP, ред. 2" |Переносится нормативно-справочная информация и документы с движениями

58422 руб.

11.01.2021    36706    32    55    

34

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

Перенос данных из КА 1.1 в КА 2 | из КА 1.1 в УТ 11 | Воспользовались более 367 компаний! | Переносятся все возможные виды документов, начальных остатков и вся справочная информация из "1С:КА 1.1" в "1С:КА 2.х" / "1С:УТ 11" | Разработан в формате КД 2 (правила конвертации данных) | Фильтр по организациям при выгрузке | Выбор разных алгоритмов выгрузки начальных остатков | Можно проверить перенос до покупки!

61356 руб.

04.12.2015    197724    260    354    

413

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

Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

61356 руб.

10.07.2018    76796    53    143    

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