К статье
Практический материал

Разработка и Конфигурация · 12 мин

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

Пошаговая инструкция: как в 1С загрузить файл Excel в табличный документ через COM-объект, метод Прочитать и типовые обработки. Примеры кода и разбор ошибок.

Загрузка данных из Excel — одна из самых частых задач при работе с 1С: прайсы поставщиков, номенклатура, остатки, заявки почти всегда приходят в формате XLS или XLSX. Платформа 1С:Предприятие позволяет прочитать такой файл напрямую в табличный документ — объект, который уже умеет отображать данные, сохраняться и передаваться в дальнейшую обработку.

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

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

Какой способ загрузки выбрать

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

Метод Прочитать() работает на платформе без дополнительного ПО и подходит в большинстве случаев. COM-подключение к Excel даёт полный контроль над книгой (листы, формулы, скрытые строки), но требует установленного Office и прав на создание COM-объектов. Типовые обработки — вариант для пользователей без программирования.

Сравнение способов загрузки

ТабличныйДокумент.Прочитать()

Не требует Excel, работает на сервере и клиенте. Ограничение: читает только первый лист и не даёт доступа к формулам и настройкам книги.

COM-объект Excel.Application

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

Типовая обработка загрузки

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

Загрузка методом ТабличныйДокумент.Прочитать()

Самый быстрый способ — встроенный метод платформы. Он читает файлы XLS, XLSX, MXL, а также ODS, и заполняет табличный документ содержимым первого листа книги. Никаких внешних компонентов не требуется.

1c
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать("C:\Данные\Прайс.xlsx", СпособЧтенияЗначенийТабличногоДокумента.Значение);

Для Строка = 2 По ТабДок.ВысотаТаблицы Цикл
    Наименование = ТабДок.Область(Строка, 1).Текст;
    Цена = ТабДок.Область(Строка, 3).Текст;
    // дальнейшая обработка строки
КонецЦикла;

Обратите внимание на параметр СпособЧтенияЗначенийТабличногоДокумента. Значение Значение подставляет в ячейки уже вычисленные результаты формул, а Текст переносит отображаемое представление. Для числовых колонок, которые дальше преобразуются через Число(), предпочтительнее режим «Значение» — так меньше проблем с разделителями и пробелами.

После чтения данные доступны через коллекцию областей: ТабДок.Область(НомерСтроки, НомерКолонки).Текст. Размеры заполненной части возвращают свойства ВысотаТаблицы и ШиринаТаблицы — по ним строят цикл обхода. Если документ нужно просто показать пользователю, достаточно привязать его к элементу формы «Поле табличного документа».

Чтение через COM-объект Excel.Application

Когда нужно прочитать конкретный лист, обойти скрытые строки или файл не открывается методом Прочитать() корректно, используют прямое подключение к Excel через COM. Этот способ работает только там, где установлен Microsoft Excel: на толстом клиенте или на сервере с развёрнутым Office.

1c
Попытка
    Excel = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Excel не установлен: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Open("C:\Данные\Прайс.xlsx");
Лист = Книга.Worksheets(1);

ТабДок = Новый ТабличныйДокумент;
ПоследняяСтрока = Лист.UsedRange.Rows.Count;
Для Строка = 2 По ПоследняяСтрока Цикл
    ТабДок.Область(Строка, 1).Текст = Строка(Лист.Cells(Строка, 1).Value);
КонецЦикла;

Книга.Close(0);
Excel.Quit();
Excel = Неопределено;

Критически важно корректно завершать работу: закрыть книгу, вызвать Quit() и обнулить переменную. Иначе процесс EXCEL.EXE остаётся висеть в памяти, и после нескольких загрузок сервер или клиентский компьютер начинает тормозить, а повторное открытие файла блокируется.

Свойство DisplayAlerts = Ложь подавляет диалоги Excel о сохранении и совместимости форматов — без этого код может «зависнуть», ожидая нажатия кнопки в невидимом окне. На сервере такие диалоги особенно опасны, потому что их никто не увидит.

Загрузка через типовые обработки

Во многих конфигурациях (Управление торговлей, Комплексная автоматизация, ERP, Бухгалтерия с подсистемой обмена данными) есть встроенная обработка «Загрузка данных из табличного документа» или «Загрузка данных из файла». Она открывает Excel-файл в табличный документ, позволяет пользователю сопоставить колонки реквизитам и переносит данные в справочники или табличные части.

Для бухгалтерских конфигураций характерен другой путь: файл открывается через «Файл → Открыть» прямо в клиенте 1С — платформа сама распознаёт XLSX и показывает содержимое как табличный документ. Оттуда данные копируют в обработку загрузки или в табличную часть документа через буфер обмена.

Типовой маршрут предпочтителен, когда загрузку выполняет пользователь без навыков программирования и формат файла относительно стабилен. Если же структура файла от поставщика меняется от раза к разу, надёжнее собственная обработка с явной логикой разбора.

Проверка результата после загрузки

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

Контрольные точки

Как проверить результат

ВысотаТаблицы после Прочитать()
Норма

Значение соответствует числу строк в исходном файле

Тревожный признак

0 или 1 строка — файл не прочитался, неверный формат или пустой первый лист

Содержимое числовых колонок
Норма

Текст ячейки преобразуется функцией Число() без ошибки

Тревожный признак

Числа с пробелами-разделителями или в текстовом формате Excel — требуется очистка строки

Даты
Норма

Дата распознаётся или парсится из строки ДД.ММ.ГГГГ

Тревожный признак

Даты пришли как числа вида 45000 — это внутреннее представление даты Excel, нужно преобразование

Кириллица и спецсимволы
Норма

Текст читается без замен символов

Тревожный признак

Крякозябры — файл на самом деле CSV с другой кодировкой, а не настоящий XLSX

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

Типичные ошибки и их причины

Типичные ошибки
01
Ошибка «Метод объекта не обнаружен» или падение на COMОбъект("Excel.Application") — на компьютере не установлен Excel либо код выполняется на сервере без Office. Решение: перейти на ТабличныйДокумент.Прочитать() или выполнять код на клиенте с Excel.
02
Файл «занят другим процессом» — Excel-файл открыт у пользователя или остался захвачен предыдущим сеансом COM. Решение: закрыть файл, снять зависшие процессы EXCEL.EXE.
03
Пустой табличный документ после Прочитать() — данные находятся не на первом листе книги. Решение: пересохранить файл с данными на первом листе или читать через COM с указанием листа.
04
Зависание кода без ошибки — Excel показал модальный диалог (защищённый просмотр, запрос на обновление связей). Решение: DisplayAlerts = Ложь, отключение обновления связей при открытии книги.
05
Числа превращаются в даты или наоборот — неявное преобразование типов. Решение: читать значения как текст и выполнять явное преобразование с контролем формата.

Отдельного внимания заслуживают файлы, полученные из сторонних систем: часто под расширением XLS скрывается HTML-таблица или CSV. Метод Прочитать() такие файлы либо не откроет, либо прочитает с ошибками. Проверить можно, открыв файл в блокноте: если виден читаемый текст или разметка вместо бинарных данных — это не настоящий Excel.

Если загрузка из Excel выполняется регулярно и файл приходит от одного и того же контрагента, договоритесь о выгрузке в CSV или XLSX со стабильной структурой и зафиксируйте номера колонок в коде через константы. Это снимает большинство проблем с форматами, объединёнными ячейками и «плавающими» шапками.
ПЗ
Практическое замечание

Ограничения и безопасная работа с данными

Загрузка в табличный документ сама по себе не меняет данные базы — риск появляется на следующем шаге, когда содержимое переносится в справочники и документы. Перед записью выполняйте поиск существующих элементов по ключевым полям (код, артикул, ИНН), чтобы не создавать дубли, и обрабатывайте данные в транзакции, чтобы при ошибке на середине файла база не осталась в полузаполненном состоянии.

Файлы из внешних источников могут содержать макросы. Метод Прочитать() платформы макросы не выполняет, а вот открытие книги через COM с настройками Excel по умолчанию — потенциально опасно. Не понижайте уровень безопасности макросов ради загрузки и не открывайте через COM файлы из недоверенных источников.

Перед первой промышленной загрузкой сделайте резервную копию базы или отработайте на копии. Для файлов большого объёма заранее оцените время выполнения и выводите индикатор прогресса — пользователь, не видящий реакции системы, часто прерывает операцию, что для COM-сценария означает зависший процесс Excel.

Итог

Что важно запомнить

Для большинства задач достаточно ТабличныйДокумент.Прочитать() — он не требует Excel и работает везде. COM-подключение нужно для сложных файлов и требует установленного Office и обязательного освобождения объекта. После загрузки всегда проверяйте типы данных, а перед записью в базу — защищайтесь от дублей и используйте транзакции.

Частые вопросы

Можно ли загрузить Excel в 1С без установленного Microsoft Office?

Да. Метод ТабличныйДокумент.Прочитать() встроен в платформу и читает форматы XLS и XLSX самостоятельно, без Office. Ограничение — читается только первый лист книги и нет доступа к настройкам Excel. Без установленного Office не работает только вариант с COM-объектом Excel.Application.

Почему после чтения табличный документ пустой?

Наиболее частые причины: данные находятся не на первом листе книги, файл фактически является CSV или HTML с расширением XLS, либо указан неверный путь к файлу. Проверьте свойство ВысотаТаблицы сразу после чтения и откройте файл в Excel, чтобы убедиться, где расположены данные.

Как прочитать не первый, а нужный лист книги Excel?

Метод Прочитать() читает только первый лист. Для выбора листа используйте COM-объект: откройте книгу через Excel.Workbooks.Open и обратитесь к нужному листу по индексу или имени — Книга.Worksheets(\"Лист2\"). Альтернатива без COM — попросить поставщика файла размещать данные на первом листе.

Числа из Excel загружаются как текст с пробелами. Что делать?

Excel часто хранит числа с неразрывными пробелами-разделителями разрядов. Перед преобразованием очищайте строку: удалите пробелы и неразрывные пробелы через СтрЗаменить, затем применяйте Число(). Для надёжности оборачивайте преобразование в Попытка/Исключение и логируйте строки, которые не удалось распознать.

Можно ли выполнять загрузку на сервере 1С?

Через ТабличныйДокумент.Прочитать() — да, это штатный сценарий: файл передаётся на сервер во временное хранилище и читается серверным кодом. COM-вариант на сервере возможен только если на сервере установлен Excel и учётная запись агента имеет права на создание COM-объектов, но такая схема считается рискованной из-за зависших процессов и обычно не рекомендуется.

Как загрузить очень большой файл, если Прочитать() работает медленно?

Табличный документ хранит форматирование каждой ячейки, поэтому на файлах с десятками тысяч строк расход памяти и время растут заметно. Варианты: попросить источник данных в формате CSV и читать его построчно через ЧтениеТекста, разбить файл на части или читать через COM порциями строк. Для разового переноса иногда проще сохранить лист из Excel в CSV вручную.