Как массово загрузить список реализаций из файла Excel в 1С:Бухгалтерия 3.0?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет Торговля и дистрибуция
← На главную

Зачастую перед специалистами 1С встает задача по импорту большого объема данных из внешних файлов. Когда речь заходит о загрузке нескольких документов Реализация товаров и услуг из одного Excel-файла, стандартные инструменты могут потребовать адаптации. Разберем, как подойти к решению этой задачи системно и эффективно.

Этап 1: Анализ структуры файла и проектирование решения

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

  1. Плоская таблица: каждая строка файла содержит данные о документе (номер, дата, контрагент) и конкретную позицию номенклатуры. В этом случае данные о шапке документа будут дублироваться для каждой строки с товарами.
  2. Структурированный список: данные о документе указаны один раз, а далее следуют строки с товарами до начала следующего документа.

Для разработки надежного механизма мы рекомендуем сначала считать все данные из файла в промежуточную структуру, например, в ТаблицаЗначений. Это позволит избежать лишних обращений к объектам метаданных в процессе чтения файла.

Этап 2: Чтение данных из файла Excel

Для чтения файлов Excel в 1С:Бухгалтерия 3.0 существует два основных подхода. Мы рекомендуем использовать метод ТабличныйДокумент.Прочитать(), так как он не требует установленного пакета Microsoft Office на сервере, что значительно повышает скорость и стабильность работы.

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


// Создаем объект для чтения файла
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);

// Загружаем данные в таблицу значений для удобного перебора
ТЗ = Новый ТаблицаЗначений;
// Добавляем необходимые колонки
ТЗ.Колонки.Добавить("НомерДокумента");
ТЗ.Колонки.Добавить("ДатаДокумента");
// ... остальные поля

Этап 3: Алгоритм загрузки списка документов

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

  1. Группировка: если в файле несколько строк относятся к одной реализации, используйте колонку с номером документа или ключом (сочетание контрагента и даты) для сортировки таблицы.
  2. Циклическая обработка: проходим по отсортированной таблице в цикле. На каждой итерации, при изменении номера документа, мы создаем новый объект ДокументОбъект.РеализацияТоваровУслуг.
  3. Поиск существующих данных: если необходимо обновлять уже созданные документы, используйте Документы.РеализацияТоваровУслуг.НайтиПоНомеру() или запрос к базе данных для проверки наличия документа в системе.

Пример логики заполнения табличной части:


// В цикле перебора таблицы значений
Если НомерДокумента <> ТекущийНомер Тогда
    // Записываем предыдущий документ, если он был создан
    Если ДокументОбъект <> Неопределено Тогда
        ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
    КонецЕсли;
    
    // Создаем новый документ
    ДокументОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    ДокументОбъект.Дата = ДатаДокумента;
    // Заполняем реквизиты шапки
КонецЕсли;

// Заполняем табличную часть Товары
НоваяСтрока = ДокументОбъект.Товары.Добавить();
НоваяСтрока.Номенклатура = НайтиНоменклатуру(НаименованиеИзExcel);
НоваяСтрока.Количество = Количество;

Этап 4: Важные технические рекомендации

При реализации собственного кода для импорта обязательно учитывайте следующие аспекты:

Помните, что универсального «готового» решения под все форматы файлов не существует, так как каждый клиент предоставляет данные в своем уникальном виде. Написав собственную обработку на основе ТаблицаЗначений, вы получите гибкий инструмент, который можно легко адаптировать под изменения форматов в будущем.

← На главную