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

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

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

Подход 1: Использование COM-объекта (Классический метод)

Этот метод подходит для любых конфигураций и версий платформы. Суть его заключается в прямом обращении к приложению Excel.Application через COM-интерфейс. Рассмотрим, как считать данные напрямую при выборе файла:


Режим = РежимДиалогаВыбораФайла.Открытие;
Диалог = Новый ДиалогВыбораФайла(Режим);
Если Диалог.Выбрать() Тогда
    Ex = Новый COMОбъект("Excel.Application");
    Ex.Workbooks.Open(Диалог.ПолноеИмяФайла);
    Лист = Ex.ActiveSheet;
    ОбДок = СсылкаНаОбъект.ПолучитьОбъект();
    
    Для К = 1 По 1000 Цикл
        Если Лист.Cells(К, 1).Value = Неопределено Тогда Прервать; КонецЕсли;
        
        НоменклатураНаименование = Лист.Cells(К, 1).Value;
        Количество = Лист.Cells(К, 2).Value;
        Цена = Лист.Cells(К, 3).Value;
        
        СтрокаТЧ = ОбДок.Товары.Добавить();
        СтрокаТЧ.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураНаименование);
        СтрокаТЧ.Количество = Количество;
        СтрокаТЧ.Цена = Цена;
    КонецЦикла;
    ОбДок.Записать();
    Ex.Quit();
КонецЕсли;

Важно: При использовании COMОбъект убедитесь, что на сервере или клиентской машине установлен Microsoft Excel. Также всегда вызывайте метод Quit(), чтобы не оставлять «висящие» процессы в диспетчере задач.

Подход 2: Использование Табличного документа и Построителя отчета

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

Разберем шаги этого метода:

  1. Прочитайте файл в объект ТабличныйДокумент.
  2. Используйте ОписаниеИсточникаДанных для передачи данных в ПостроительОтчета.
  3. Выгрузите результат в ТаблицуЗначений.
  4. Загрузите полученную таблицу в табличную часть вашего документа.

ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла);
Источник = Новый ОписаниеИсточникаДанных(ТабДок.Область());
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Источник;
Построитель.Выполнить();
ТЗ = Построитель.Результат.Выгрузить();
Объект.Товары.Загрузить(ТЗ);

Рекомендации по реализации поиска данных

Одним из ключевых моментов при загрузке является поиск ссылки на справочник по наименованию. Использование НайтиПоНаименованию может привести к ошибкам, если в базе есть дубли или неточности в написании. Мы настоятельно рекомендуем:

Работа с Управляемыми формами

Если вы работаете в интерфейсе Управляемых форм, помните, что обращение к серверным методам требует передачи данных через РеквизитФормыВЗначение и обратно через ЗначениеВРеквизитФормы. Это позволяет корректно обновлять состояние формы после внесения изменений в объект.


&НаСервере
Процедура ЗагрузитьДанныеНаСервере(ДанныеТаблицы)
    ОбДок = РеквизитФормыВЗначение("Объект");
    // Логика заполнения ТЧ...
    ЗначениеВРеквизитФормы(ОбДок, "Объект");
КонецПроцедуры

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

← На главную