Автоматизация · 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/ADO | Excel → 1С | Разработчики | Зависит от провайдера и разрядности, нюансы с типами данных |
| Внешние обработки и расширения | Оба направления | Внедренцы, продвинутые пользователи | Нужна установка и контроль версий |
Критерий выбора простой: разовая задача без доступа к конфигуратору — типовые средства; регулярный обмен по расписанию — программный метод; массовые загрузки сотен тысяч строк — OLEDB или прямое чтение файла без автоматизации Excel, потому что COM-интерфейс на таких объёмах работает очень медленно.
Как выбрать действие
Загрузка данных из Excel через типовую обработку
В конфигурациях на базе Библиотеки стандартных подсистем (УТ, ERP, УНФ, Бухгалтерия) обработка уже встроена. Она находится в разделе «Администрирование» → «Перенос данных» → «Загрузка данных из файла», либо доступна из карточки справочника по кнопке «Загрузить».
- 1Подготовьте файл: первая строка — заголовки колонок, без объединённых ячеек, итоговых строк и пустых строк в середине данных
- 2Откройте обработку загрузки и выберите объект загрузки (например, справочник «Номенклатура»)
- 3Укажите файл Excel — обработка прочитает лист и покажет колонки
- 4Сопоставьте каждую колонку файла с реквизитом объекта 1С; колонки без соответствия пометьте «Не загружать»
- 5Задайте правило поиска существующих элементов: по коду, наименованию или артикулу
- 6Нажмите «Загрузить» и дождитесь протокола: сколько создано, обновлено, пропущено с ошибками
- 7Проверьте несколько загруженных элементов вручную — цены, единицы измерения, принадлежность к группам
Ключевой момент — правило поиска существующих элементов. Если искать по наименованию, а в файле и базе оно отличается пробелами или регистром, обработка создаст дубли. Надёжнее искать по уникальному признаку: артикулу, штрихкоду, ИНН для контрагентов. Перед загрузкой большого справочника сделайте тестовый прогон на 10–20 строках и проверьте результат.
Если конфигурация не содержит типовой обработки (старые версии, самописные решения), используйте универсальную обработку «Загрузка данных из табличного документа» с диска ИТС или аналогичные внешние обработки. Принцип работы тот же: открытие файла, сопоставление колонок, запись с протоколом.
Программное подключение через COM-объект
Классический способ для разработчика — создать COM-объект Excel.Application и работать с книгой как с объектом: открывать листы, читать и писать ячейки. Это работает в толстом и тонком клиенте, но требует установленного Microsoft Excel на той машине, где выполняется код.
Попытка
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 на больших файлах и стабильнее на сервере.
СтрокаПодключения = "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–1С связаны не с самим подключением, а с подготовкой данных и окружением. Ниже — то, что встречается чаще всего.
Отдельно отметим кодировки и форматы дат. Дата в 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 решается сохранением табличного документа. Перед каждой загрузкой проверяйте результат на контрольных строках: количество записей, дубли, корректность чисел.