Как загрузить данные из DBF-файла в табличную часть документа 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с внешними базами данных часто возникает задача автоматической загрузки информации из файлов формата DBF в документы платформы 1С. Для этого встроенный язык 1С предоставляет специализированный объект XBase, который позволяет открывать файлы таблицы, обходить их по строкам и считывать значения полей.

Рассмотрим по шагам, как правильно построить алгоритм загрузки данных, избежав распространенных ошибок с циклом создания документов и обработкой типов данных.

Основные этапы загрузки данных из DBF

  1. Выбор файла или каталога: использование диалога выбора файла ДиалогВыбораФайла для получения пути к внешнему файлу DBF.
  2. Инициализация объекта XBase: создание нового объекта XBase и открытие файла методом ОткрытьФайл().
  3. Проверка содержимого: проверка наличия записей в файле с помощью метода КоличествоЗаписей().
  4. Создание или получение документа-приемника: инициализация объекта документа (например, Документы.ДоговорНаПоставкуГаза.СоздатьДокумент()). Важно выполнять создание объекта до входа в цикл обхода строк, если все данные из файла должны попасть в один документ.
  5. Обход записей в цикле: последовательное считывание значений полей DBF-файла и создание новых строк в табличной части документа методом Добавить().
  6. Запись документа и закрытие файла: вызов метода Записать() у документа и ЗакрытьФайл() у объекта XBase.

Разбор практического примера кода

Разберем готовый пример процедуры, которая считывает сведения из DBF-файла и заполняет табличную часть Реестр нового документа ДоговорНаПоставкуГаза.


Процедура ДействияФормыЗагрузить(Кнопка)

    // 1. Выбор каталога или файла
    Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогОткрытия = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытия.Каталог = "";
    ДиалогОткрытия.МножественныйВыбор = Ложь;
    ДиалогОткрытия.Заголовок = "Выберите каталог";
    
    Если Не ДиалогОткрытия.Выбрать() Тогда
        Возврат;
    КонецЕсли;

    // 2. Инициализация и открытие DBF
    ДБФ = Новый XBase;
    ДБФ.ОткрытьФайл("D:\281117.DBF");

    // 3. Проверка на наличие записей
    Если ДБФ.КоличествоЗаписей() = 0 Тогда
        Сообщить("Файл данных пуст");
        ДБФ.ЗакрытьФайл();
        Возврат;
    КонецЕсли;

    // 4. Переход к первой строке файла
    ДБФ.Первая();

    // 5. Создание нового документа перед циклом
    Док = Документы.ДоговорНаПоставкуГаза.СоздатьДокумент(); 
    Док.Дата = ТекущаяДата();

    // 6. Обход записей файла DBF
    Пока Истина Цикл

        // Добавляем новую строку в табличную часть "Реестр"
        НоваяСтрока = Док.Реестр.Добавить();
        
        // Заполняем реквизиты строки значениями из полей DBF
        НоваяСтрока.ЛицевойСчет = ДБФ.LS;
        НоваяСтрока.ФИО = ДБФ.FIO;
        НоваяСтрока.ПочтовыйИндекс = ДБФ.INDEX;
        НоваяСтрока.УчастокОбслуживания = ДБФ.RAION;
        НоваяСтрока.НаселенныйПункт = ДБФ.NASPUNKT;
        НоваяСтрока.Улица = ДБФ.UL;
        НоваяСтрока.НомерДома = ДБФ.DOM;
        НоваяСтрока.НомерКвартиры = ДБФ.KV;
        НоваяСтрока.НомерКомнаты = ДБФ.KOMNATA;
        НоваяСтрока.ДатаЗаключенияДоговораНаПоставкуГаза = ДБФ.DDOG;   
        НоваяСтрока.НомерДоговораНаПоставкуГаза = ДБФ.NDOG;
        НоваяСтрока.ДатаВыдачиДоговораНаРуки = ДБФ.DVID;
        НоваяСтрока.НомерМобильногоТелефона = ДБФ.T_SOT;
        НоваяСтрока.НомерДомашнегоТелефона = ДБФ.T_DOM;
        НоваяСтрока.КодАдресаПоФИАС = ДБФ.KOD;
        
        // Переходим к следующей записи
        Если Не ДБФ.Следующая() Тогда
            // Если записи закончились, выходим из цикла
            Прервать;
        КонецЕсли;

    КонецЦикла;
    
    // 7. Сохранение документа и закрытие DBF-файла
    Док.Записать();
    ДБФ.ЗакрытьФайл();
    
    Сообщить("Загрузка успешно завершена!");

КонецПроцедуры

Частые ошибки при загрузке из DBF и способы их устранения

Проанализируем ключевые нюансы, с которыми сталкиваются разработчики при обработке DBF-файлов:

  1. Создание документа внутри цикла: Если конструкцию СоздатьДокумент() поместить внутрь цикла Пока, программа будет создавать новый документ на каждую прочитанную строку DBF-файла. Чтобы все записи попали в один документ, объект создается строго до входа в цикл обхода.
  2. Проблемы с типом данных «Дата»: Поля дат в DBF-файлах (например, DDOG, DVID) должны корректно считываться объектом XBase. Если даты не отображаются в табличной части, необходимо убедиться, что тип реквизита табличной части совпадает с типом данных источника (тип Дата), а также проверить корректность отображения элемента на форме документа. В некоторых случаях требуется пересоздание элемента формы или явное приведение типов.
  3. Ограничение имен полей DBF: Объект XBase поддерживает имена полей длиной не более 10 латинских символов (например, NASPUNKT, KOMNATA). Обращение к полям происходит через точку от объекта (ДБФ.FIO).
  4. Закрытие файла: Всегда закрывайте файл методом ЗакрытьФайл() после завершения работы, иначе файл останется заблокированным в системе.
← На главную