Перенос данных из электронных таблиц Excel в документы 1С — это одна из наиболее часто встречающихся задач в практике разработчика и опытного пользователя. Часто возникает необходимость не просто перенести весь файл, а скопировать конкретные столбцы в определенные колонки табличной части, такие как Заказ клиента, Поступление товаров или Коммерческое предложение. Рассмотрим подробно все доступные способы: от использования стандартных инструментов до написания собственного программного кода.
Если нам необходимо быстро загрузить данные без написания кода, воспользуемся проверенным инструментом, который часто входит в состав поставки платформы или ИТС. Разберем алгоритм работы с этой обработкой:
РеализацияТоваровУслуг) и его конкретный экземпляр.Номенклатура). Мы можем настроить поиск номенклатуры по Артикулу, Наименованию или Штрихкоду.В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), таких как УТ 11, ERP 2.0 или БП 3.0, реализован нативный механизм вставки. Проанализируем, как им пользоваться:
В верхней части многих документов над табличной частью присутствует кнопка «Загрузить из файла». При её нажатии открывается помощник, который предлагает либо загрузить внешний файл, либо просто вставить данные из буфера обмена (нажав Ctrl+C в Excel и Ctrl+V в окне 1С). Система автоматически предложит сопоставить колонки. Преимущество этого метода в том, что он выполняет все необходимые проверки «на лету» и подсвечивает ошибки, если товар не найден в справочнике.
Когда требуется автоматизировать процесс или создать специфическую обработку «под себя», мы используем программные методы. Рассмотрим пример кода, который взаимодействует с установленным на компьютере приложением Microsoft Excel через COMОбъект.
Этот метод позволяет полностью контролировать процесс чтения. Проанализируем пример реализации:
// Создаем подключение к Excel
Попытка
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось инициализировать Excel. Возможно, он не установлен.");
Возврат;
КонецПопытки;
ИмяФайла = "C:\Files\Price.xls";
ExcelПриложение.DisplayAlerts = Ложь;
Попытка
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
ExcelЛист = ExcelФайл.Sheets(1); // Работаем с первым листом
Исключение
Сообщить("Ошибка открытия файла!");
ExcelПриложение.Quit();
Возврат;
КонецПопытки;
// Определяем последнюю заполненную строку
xlCellTypeLastCell = 11;
ПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
Для НомерСтроки = 1 По ПоследняяСтрока Цикл
// Читаем данные из конкретных колонок (например, 2 и 5)
Артикул = СокрЛП(ExcelЛист.Cells(НомерСтроки, 2).Value);
Количество = ExcelЛист.Cells(НомерСтроки, 5).Value;
// Здесь должна быть логика поиска номенклатуры и добавления в ТЧ
// НоваяСтрока = Объект.Товары.Добавить();
// НоваяСтрока.Количество = Количество;
КонецЦикла;
ExcelПриложение.Quit();
Важно помнить, что данный метод требует наличия установленного Excel на стороне клиента или сервера (в зависимости от того, где выполняется код). Также стоит учитывать, что работа через COM может быть медленной на больших объемах данных.
Если на сервере не установлен Microsoft Office (например, при работе на Linux), мы можем воспользоваться встроенным объектом 1С ТабличныйДокумент. Этот метод работает быстрее и надежнее. Разберем его по шагам:
ТабличныйДокумент.Прочитать().
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ИмяФайла);
Исключение
Сообщить("Ошибка чтения файла: " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Высота = ТабДок.ВысотаТаблицы;
// Начинаем со второй строки, если первая — заголовок
Для НомерСтроки = 2 По Высота Цикл
// Обращаемся к области ячейки
ЗначениеАртикула = ТабДок.Область(НомерСтроки, 1).Текст;
ЗначениеЦены = ТабДок.Область(НомерСтроки, 3).Текст;
// Выполняем поиск в базе 1С
// СсылкаНоменклатура = Справочники.Номенклатура.НайтиПоАртикулу(ЗначениеАртикула);
КонецЦикла;
Этот способ является наиболее универсальным для платформы 1С 8.3, так как он не зависит от стороннего ПО и корректно обрабатывает современные форматы .xlsx.
При реализации вставки данных важно проанализировать несколько критических моментов, которые могут привести к ошибкам:
СокрЛП() и при необходимости функцию СтрЗаменить() для очистки текста.Число(), предварительно удалив лишние пробелы.Таким образом, мы выяснили, что задача вставки из Excel решается множеством способов. Для разовых задач идеально подходят штатные обработки или механизмы БСП, а для сложной автоматизации лучше написать свой алгоритм на базе ТабличногоДокумента.