Автоматизация загрузки данных из файлов Excel — частая задача в разработке на 1С. Однако при переносе этого функционала из «клиентской» обработки в регламентное задание многие разработчики сталкиваются с ошибками доступа к файлам и невозможностью инициализации COMОбъект. Рассмотрим, почему это происходит и как выстроить архитектуру решения правильно.
Главная ошибка заключается в попытке использовать COMОбъект("Excel.Application") внутри серверного контекста. Рассмотрим, почему это не рекомендуется:
COM-сервер Excel просто отсутствует.USR1CV8. У этой учетной записи нет прав на интерактивное взаимодействие с рабочим столом и запуск графических приложений.COM вызывает утечки памяти и зависания службы 1С, так как Excel не предназначен для работы в многопоточном режиме серверных вызовов.В регламентных заданиях мы работаем на сервере. Это значит, что любые пути к файлам должны быть доступны серверу 1С. Если вы используете локальные пути, например F:\Files, сервер их не увидит, так как диск F: — это локальный ресурс вашего рабочего компьютера, а не сервера.
Рекомендация: Используйте сетевые пути формата UNC (например, \\ServerName\SharedFolder\File.xlsx). При этом важно, чтобы у пользователя, от имени которого работает служба 1С, были полные права на чтение этой папки.
Проверяйте наличие файла перед началом обработки, используя объект Файл:
ПутьКФайлу = "\\Server\Share\data.xlsx";
ФайлДанных = Новый Файл(ПутьКФайлу);
Если Не ФайлДанных.Существует() Тогда
// Запись в журнал регистрации
Возврат;
КонецЕсли;
Если ваша задача — просто считать данные из таблицы, попробуйте использовать объект ТабличныйДокумент. Он позволяет прочитать файл формата XLS (старый формат Excel) напрямую:
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.Прочитать(Стр.ПолноеИмя);
// Дальше обходим области ячеек ТабДокумента
Важно: Метод Прочитать() работает не со всеми форматами. Современные файлы XLSX и особенно XLSM (с макросами) могут потребовать использования сторонних библиотек, так как встроенный парсер 1С имеет ограничения.
Самый надежный способ автоматизации — исключить зависимость от формата Excel. Если есть возможность повлиять на отправителей файлов, переведите их на формат CSV (текстовый файл с разделителями).
Чтение CSV в 1С выполняется максимально быстро и не требует никаких внешних компонент:
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
Для НомерСтроки = 1 По ТекстовыйДокумент.КоличествоСтрок() Цикл
СтрокаДанных = ТекстовыйДокумент.ПолучитьСтроку(НомерСтроки);
// Разбор строки по разделителю (например, ";")
КонецЦикла;
Если логика внутри XLSM-файла критична (в нем работают макросы, рассчитывающие итоговые данные), учтите:
Python или VBScript, который выполняется в среде, где есть Excel, сохраняет данные в CSV или JSON, а затем 1С забирает уже готовые к загрузке данные./Execute, используя полноценную клиентскую сессию, где доступен COM.Итог: Проанализируйте, действительно ли вам нужно именно COM-соединение. В 90% случаев переход на чтение через ТабличныйДокумент или перевод файлов в формат CSV решает проблему автоматизации раз и навсегда, избавляя вас от ошибок доступа и необходимости поддерживать специфическое ПО на сервере.