Разработка и Конфигурация · 5 мин
Как создать обработку загрузки из Excel в 1С
Практическое руководство по созданию обработки загрузки данных из Excel в 1С: выбор метода чтения файла, код на встроенном языке, обработка ошибок и проверка результата.
Загрузка данных из Excel — одна из самых частых задач при внедрении и сопровождении 1С: перенос номенклатуры, цен, контрагентов, остатков и начальных данных. Универсальные обработки не всегда покрывают специфику конкретного файла, поэтому умение написать собственную загрузку экономит часы ручного ввода и снижает количество ошибок переноса.
Обработка загрузки — это внешняя обработка (.epf) или расширение конфигурации, которое читает файл Excel построчно, сопоставляет колонки с реквизитами объектов 1С и создаёт или обновляет элементы справочников, документы или записи регистров. Ключевые этапы одинаковы для любой задачи: открыть файл, пройти по строкам, проверить данные, записать объекты и показать отчёт о результатах.
Ниже разобран полный цикл создания такой обработки: от выбора способа чтения файла до типовых ошибок и проверки результата. Материал ориентирован на платформу 1С:Предприятие 8.3 и управляемые формы, но общие принципы применимы и к обычным формам.
Выбор способа чтения файла Excel
Существует три основных способа прочитать данные из Excel в 1С, и выбор зависит от формата файла, объёма и окружения, где будет работать обработка.
Чтение через табличный документ — самый простой и универсальный метод. Платформа сама открывает файлы xlsx, xls, mxl и некоторые другие форматы без установленного Excel на компьютере. Метод работает и на клиенте, и на сервере, что важно для клиент-серверных баз и веб-клиента. Ограничение: очень большие файлы (десятки тысяч строк) читаются медленно и требуют много памяти.
Чтение через COM-объект Excel.Application даёт полный контроль: можно читать формулы, форматы, скрытые листы, работать с огромными файлами порциями. Но требует установленного Microsoft Excel на том компьютере, где выполняется код, и не работает на Linux-сервере и в веб-клиенте. Дополнительный риск — «зависшие» процессы EXCEL.EXE при аварийном завершении кода.
Чтение через ADODB.Connection (Excel как источник данных) — быстрый способ для больших однородных таблиц, но капризен к типам данных: драйвер определяет тип колонки по первым строкам, и смешанные данные (числа и текст в одной колонке) могут читаться как пустые значения.
Сравнение способов чтения Excel
Подходит для большинства задач: не требует Excel, работает на сервере и в веб-клиенте. Ограничение — медленно на очень больших файлах.
Подходит для сложных файлов с формулами и несколькими листами. Требует установленный Excel и работает только на Windows-клиенте.
Подходит для быстрой выборки из больших плоских таблиц. Ограничение — проблемы со смешанными типами данных в колонках.
Создание внешней обработки и формы
Откройте конфигуратор и создайте новую внешнюю обработку через меню «Файл — Новый — Внешняя обработка». Добавьте основную форму обработки — платформа создаст управляемую форму автоматически, если конфигурация работает в режиме управляемого приложения.
На форме разместите минимальный набор элементов: строковый реквизит «ПутьКФайлу» с кнопкой выбора файла, числовые реквизиты «НомерСтрокиЗаголовка» и «ПерваяСтрокаДанных» (обычно заголовок в строке 1, данные со строки 2), реквизит «НомерЛиста» и кнопку «Загрузить». Для удобства добавьте таблицу предварительного просмотра — она позволит пользователю увидеть, что будет загружено, до записи в базу.
Диалог выбора файла в тонком клиенте работает асинхронно: используйте метод НачатьПомещениеФайла или ДиалогВыбораФайла с оповещением. Учтите, что при выполнении загрузки на сервере файл сначала нужно передать на сервер — через временное хранилище (ПоместитьВоВременноеХранилище).
Чтение данных из файла: код
Базовый вариант чтения через табличный документ выглядит так: создаёте объект ТабличныйДокумент, вызываете метод Прочитать с указанием пути к файлу, затем обращаетесь к ячейкам через область по координатам строки и колонки. Текст ячейки получают через ТабличныйДокумент.Область(Строка, Колонка).Текст.
Пример серверной процедуры чтения:
&НаСервере
Процедура ПрочитатьФайлНаСервере(АдресХранилища)
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xlsx");
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяВременногоФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
ВсегоСтрок = ТабДок.ВысотаТаблицы;
ВсегоКолонок = ТабДок.ШиринаТаблицы;
Для НомерСтроки = 2 По ВсегоСтрок Цикл
Артикул = СокрЛП(ТабДок.Область(НомерСтроки, 1).Текст);
Наименование = СокрЛП(ТабДок.Область(НомерСтроки, 2).Текст);
ЦенаСтрока = СокрЛП(ТабДок.Область(НомерСтроки, 3).Текст);
// ... преобразование и запись
КонецЦикла;
УдалитьФайлы(ИмяВременногоФайла);
КонецПроцедуры
Обратите внимание на СпособЧтенияЗначенийТабличногоДокумента.Текст — все значения приходят строками, и их нужно самостоятельно преобразовывать в числа и даты. Это надёжнее, чем чтение «как есть», потому что Excel часто хранит числа с региональными разделителями, а даты — в формате, который платформа интерпретирует неожиданно.
Числа преобразуйте с нормализацией разделителя: сначала замените запятую на точку и уберите неразрывные пробелы (Символ(160)), затем используйте конструкцию ОписаниеТипа с ПривестиЗначение или проверку через попытку преобразования. Даты из строки «ДД.ММ.ГГГГ» собирайте через функцию Дата(Год, Месяц, День) после разбора строки — так вы контролируете порядок дня и месяца.