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

Автоматизация · 12 мин

Как подключить Excel к 1С: способы обмена данными

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

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

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

Важно понимать направление обмена заранее. Загрузка в 1С требует контроля дублей и прав сопоставления, выгрузка в Excel — корректной настройки запроса и форматов ячеек. Ошибки в первом случае портят учётные данные, во втором — приводят лишь к неудобному отчёту. Поэтому загрузку всегда начинают с копии базы и тестового прогона на небольшом фрагменте файла.

Какие способы подключения существуют и как выбрать

Механизмов обмена между Excel и 1С несколько, и они различаются по сложности настройки, надёжности и требованиям к окружению. Ниже — основные варианты с практической точки зрения.

СпособНаправлениеКому подходитОграничения
Типовая обработка загрузкиExcel → 1СПользователи без программированияНужна конфигурация с БСП, ручное сопоставление колонок
Сохранение табличного документа1С → ExcelЛюбой пользовательТолько выгрузка, без автоматизации
COM-объект Excel.ApplicationОба направленияРазработчикиТребует установленного Excel, медленный на больших объёмах
OLEDB/ADOExcel → 1СРазработчикиЗависит от провайдера и разрядности, нюансы с типами данных
Внешние обработки и расширенияОба направленияВнедренцы, продвинутые пользователиНужна установка и контроль версий

Критерий выбора простой: разовая задача без доступа к конфигуратору — типовые средства; регулярный обмен по расписанию — программный метод; массовые загрузки сотен тысяч строк — OLEDB или прямое чтение файла без автоматизации Excel, потому что COM-интерфейс на таких объёмах работает очень медленно.

Маршрут решения

Как выбрать действие

Нужно один раз загрузить прайс или справочникИспользуйте типовую обработку «Загрузка данных из табличного документа»
Нужно регулярно выгружать отчёты в Excel по расписаниюНастройте формирование табличного документа и сохранение в XLSX через регламентное задание
Файл содержит сотни тысяч строкИспользуйте OLEDB или чтение XLSX как архива, COM-объект будет работать неприемлемо долго
На сервере не установлен ExcelCOM-объект недоступен — применяйте OLEDB или библиотеку чтения OpenXML

Загрузка данных из Excel через типовую обработку

В конфигурациях на базе Библиотеки стандартных подсистем (УТ, ERP, УНФ, Бухгалтерия) обработка уже встроена. Она находится в разделе «Администрирование» → «Перенос данных» → «Загрузка данных из файла», либо доступна из карточки справочника по кнопке «Загрузить».

Порядок загрузки через типовую обработку
  1. 1
    Подготовьте файл: первая строка — заголовки колонок, без объединённых ячеек, итоговых строк и пустых строк в середине данных
  2. 2
    Откройте обработку загрузки и выберите объект загрузки (например, справочник «Номенклатура»)
  3. 3
    Укажите файл Excel — обработка прочитает лист и покажет колонки
  4. 4
    Сопоставьте каждую колонку файла с реквизитом объекта 1С; колонки без соответствия пометьте «Не загружать»
  5. 5
    Задайте правило поиска существующих элементов: по коду, наименованию или артикулу
  6. 6
    Нажмите «Загрузить» и дождитесь протокола: сколько создано, обновлено, пропущено с ошибками
  7. 7
    Проверьте несколько загруженных элементов вручную — цены, единицы измерения, принадлежность к группам

Ключевой момент — правило поиска существующих элементов. Если искать по наименованию, а в файле и базе оно отличается пробелами или регистром, обработка создаст дубли. Надёжнее искать по уникальному признаку: артикулу, штрихкоду, ИНН для контрагентов. Перед загрузкой большого справочника сделайте тестовый прогон на 10–20 строках и проверьте результат.

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

Программное подключение через COM-объект

Классический способ для разработчика — создать COM-объект Excel.Application и работать с книгой как с объектом: открывать листы, читать и писать ячейки. Это работает в толстом и тонком клиенте, но требует установленного Microsoft Excel на той машине, где выполняется код.

1c
Попытка
    Excel = Новый COMОбъект("Excel.Application");
Исключение
    Сообщить("Excel не установлен: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;
Книга = Excel.Workbooks.Open("C:\Данные\прайс.xlsx");
Лист = Книга.Worksheets(1);
Для Строка = 2 По Лист.UsedRange.Rows.Count Цикл
    Артикул = Лист.Cells(Строка, 1).Value;
    Цена = Лист.Cells(Строка, 3).Value;
    // ... запись в 1С
КонецЦикла;
Excel.Quit();

Обязательные правила при работе через COM: всегда закрывайте Excel методом Quit() и освобождайте объект, иначе в диспетчере задач копятся зависшие процессы EXCEL.EXE. Оборачивайте код в попытку/исключение — при сбое без Quit процесс останется висеть. Не читайте ячейки по одной в цикле на больших файлах: выгоднее считать диапазон целиком через UsedRange.Value и обработать массив в памяти.

На сервере 1С этот способ применяют с осторожностью: Microsoft не рекомендует автоматизацию Office в серверных сценариях, возможны диалоговые окна, блокирующие выполнение. Если код выполняется на сервере, убедитесь, что у учётной записи службы есть права на запуск COM-компонента, или перенесите обмен на клиентскую машину.

Чтение Excel через OLEDB и без установленного Office

Подключение через OLEDB рассматривает файл Excel как источник данных: вы выполняете SQL-подобный запрос к листу и получаете набор записей. Excel при этом устанавливать не нужно — достаточно провайдера Microsoft ACE OLEDB. Это существенно быстрее COM на больших файлах и стабильнее на сервере.

1c
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Данные\прайс.xlsx;Extended Properties=""Excel 12.0;HDR=YES""";
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open(СтрокаПодключения);
Набор = Соединение.Execute("SELECT * FROM [Лист1$]");
Пока НЕ Набор.EOF Цикл
    Артикул = Набор.Fields(0).Value;
    Набор.MoveNext();
КонецЦикла;
Соединение.Close();

Типичные подводные камни OLEDB: параметр HDR=YES означает, что первая строка — заголовки; провайдер определяет тип колонки по первым строкам, и если в числовой колонке встретится текст, значения могут читаться как пустые. Разрядность провайдера должна совпадать с разрядностью процесса 1С — 32-битный клиент не увидит 64-битный ACE и наоборот.

Альтернатива без внешних компонентов — чтение XLSX как ZIP-архива с XML внутри. Платформа 1С умеет работать с ZIP и XML штатно, поэтому можно распарсить лист напрямую. Способ трудоёмкий, но полностью независим от установленного ПО и работает на Linux-сервере.

Выгрузка данных из 1С в Excel

Обратная задача решается проще. Любой табличный документ в 1С (результат отчёта, печатная форма) сохраняется в Excel через «Файл → Сохранить как» с выбором формата XLSX. Программно это делается методом Записать объекта ТабличныйДокумент с типом файла ТипФайлаТабличногоДокумента.XLSX.

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

Если данные нужны в Excel «вживую» с возможностью обновления, рассмотрите обратный подход: Excel подключается к опубликованной базе 1С через веб-сервис или OData (в конфигурациях на управляемых формах есть стандартный OData-интерфейс). Тогда обновление данных выполняется кнопкой «Обновить» в самом Excel без выгрузок вручную.

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

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

Количество загруженных строк
Норма

Совпадает с числом строк данных в файле (минус заголовок и пустые)

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

Часть строк пропущена без записи в протоколе

Дубли в справочнике
Норма

Поиск по уникальному реквизиту не даёт повторов

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

Один и тот же элемент создан несколько раз с разными наименованиями

Числовые значения (цены, остатки)
Норма

Числа загружены как числа, итоги сходятся с файлом

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

Числа стали строками, разделитель разрядов исказил значения

Открытый в Excel файл после выгрузки
Норма

Файл открывается без предупреждений о повреждении

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

Excel сообщает о восстановлении содержимого

Типичные ошибки и как их избежать

Большинство проблем при обмене Excel–1С связаны не с самим подключением, а с подготовкой данных и окружением. Ниже — то, что встречается чаще всего.

Типичные ошибки
01
Загрузка без резервной копии — неверное сопоставление колонок портит рабочие данные без возможности быстрого отката
02
Поиск элементов по наименованию — различия в пробелах и регистре создают массовые дубли справочника
03
Не закрыт COM-объект Excel — процессы EXCEL.EXE накапливаются в памяти и подвешивают сервер
04
Объединённые ячейки и многострочные шапки в файле — обработка читает смещённые данные или пустые значения
05
Разделитель дробной части в файле отличается от региональных настроек — цены 1 250,50 превращаются в 125050 или текст
06
Загрузка файла, открытого в Excel — блокировка файла приводит к ошибке доступа, особенно при обмене по сети

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

Часто задаваемые вопросы

Можно ли подключить Excel к 1С без установленного Microsoft Office?

Да. Используйте чтение через OLEDB с провайдером Microsoft ACE, который распространяется отдельно от Office, либо разбирайте XLSX как ZIP-архив с XML средствами платформы. Типовая обработка загрузки в конфигурациях на БСП также часто умеет читать файл без установленного Excel через встроенный механизм чтения табличных документов.

Почему при загрузке создаются дубли номенклатуры?

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

Какой способ выбрать для регулярного обмена по расписанию?

Оптимально — внешняя обработка, запускаемая регламентным заданием на сервере: OLEDB или чтение XLSX как архива для загрузки, формирование табличного документа с сохранением в XLSX для выгрузки. COM-объект на сервере использовать нежелательно из-за требования установленного Excel и риска зависших процессов.

Почему числа из Excel загружаются как текст или искажаются?

Две основные причины: региональные настройки (разделитель дробной части запятая вместо точки или наоборот) и то, что OLEDB определил тип колонки по первым строкам. Лечится явным преобразованием значений в коде с учётом разделителя и предварительной очисткой файла от смешанных типов в одной колонке.

Как выгрузить данные из 1С в Excel без программирования?

Сформируйте нужный отчёт, затем сохраните табличный документ: меню «Файл» → «Сохранить как» → формат «Лист Excel (*.xlsx)». В управляемых формах также доступна команда «Вывести список» для списков справочников и документов — она выводит данные в табличный документ, который дальше сохраняется тем же способом.

Что делать, если обработка не видит файл Excel по сети?

Проверьте, не открыт ли файл у другого пользователя — сетевые блокировки частая причина ошибок доступа. Используйте полный UNC-путь вместо подключённого сетевого диска, особенно если код выполняется на сервере под другой учётной записью. Надёжнее всего сначала скопировать файл во временный локальный каталог и работать с копией.

Итог

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

Разовую загрузку выполняйте типовой обработкой с поиском по уникальному реквизиту и обязательной резервной копией. Регулярный обмен автоматизируйте через OLEDB или чтение XLSX, избегая COM-объекта на сервере. Выгрузка из 1С в Excel решается сохранением табличного документа. Перед каждой загрузкой проверяйте результат на контрольных строках: количество записей, дубли, корректность чисел.