Отказ от COM-объектов: разработка механизма обмена данными с Excel встроенными средствами 1С:КА 2.5

Сельское хозяйство и продукты питания Продукты питания Торговля 1С:КА
Заказчик NDA. Компания занимается закупкой и реализацией сельскохозяйственной продукции
Задача Отказаться от использования COM-объектов и реализовать стабильную загрузку и выгрузку Excel-файлов встроенными средствами 1С с сохранением форматов данных
Результат Обмен данными в формате Excel работает без зависимости от установленного офисного ПО, а выгружаемые файлы сразу содержат корректные форматы чисел и дат

Ситуация

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

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

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

Задача

Заказчик обратился в implecs, чтобы разработать механизм загрузки и выгрузки данных в Excel без COM-объектов, используя встроенные средства 1С.

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

При этом необходимо сохранить удобство для пользователей и минимизировать влияние доработок на их привычный стиль работы.

Решение

Мы поэтапно переработали код, заменив COM-объекты на надежную альтернативу в 1С, чтобы обеспечить стабильность процессов и сохранить удобство для сотрудников.

Исследовали код и перешли на табличный документ для загрузки

Сначала провели анализ кода, где использовались COM-объекты для загрузки данных из Excel-файлов. Выявили все места загрузки данных в обработках и отчетах — например, в реестрах или списках, где файлы обрабатывались построчно и по колонкам для последующей загрузки в 1С.

Чтобы устранить зависимость от запуска Excel в фоне, перешли на встроенный в 1С метод табличного документа — «Прочитать()». Процесс теперь выглядит так:

  1. Файл Excel загружается напрямую в табличный документ без внешних программ.
  2. Код просматривает области документа — определяет количество строк и колонок, вычисляет нужные диапазоны.
  3. Данные извлекаются построчно: для каждой ячейки считывается значение, и оно записывается в соответствующую структуру или таблицу в 1С.

Загрузка документов стала быстрее, стабильнее и независимой от Excel, установленного на сервере. В результате процесс стал проще для поддержки, а риск ошибок снизился, так как все происходит внутри 1С.

Разработали механизм сохранения форматов при выгрузке

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

Пример кода форматирования колонок в Excel
Пример кода, который задает форматирование колонок в файле Excel

После формирования отчета в 1С файл сначала сохраняется как временный в стандартном формате, но без нужных стилей — все ячейки по умолчанию имеют общий текстовый формат. Чтобы исправить это, файл обрабатывается как ZIP-архив: с помощью встроенных средств 1С извлекаем внутренние XML-файлы стилей и листов данных. Эти XML далее парсятся с использованием объекта чтения документа «ПостроительDOM».

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

Пример кода замены текстового представления даты на числовое
Пример кода, который заменяет текстовое представление даты на числовое

Обновленные XML-файлы упаковываются обратно в ZIP, и на выходе получается полноценный Excel-файл с сохраненными форматами. Это упрощает дальнейшую редактуру файлов: форматы сохраняются автоматически, числа суммируются, даты сортируются правильно.

В итоге выгрузка данных в Excel стала быстрее и стабильнее — без ошибок от COM-объектов и без задержек на запуск Excel в фоне.

Адаптировали макеты и обработки

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

Исходный макет Excel-таблицы
Исходный макет Excel-таблицы, которым пользовался заказчик

Мы адаптировали эти макеты под новый подход: перенесли их в табличные макеты непосредственно в 1С. Так удалось полностью избавиться от зависимости от внешних Excel-файлов и COM-объектов.

Теперь при формировании документов на основе макета данные сначала заполняются в табличном документе 1С — подставляются значения в нужные ячейки, строки и колонки, включая шапку с датами. Затем применяется та же логика обработки: файл сохраняется, извлекаются XML, и корректируются стили для конкретных элементов. Это гарантирует, что даже в сложных макетах с визуальным оформлением рамками и цветами форматы сохраняются корректно.

Макет табличного документа в 1С
Макет табличного документа в 1С

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

Непредвиденные трудности

Главная сложность была связана с внутренней структурой XLSX-файлов. Такой файл — это ZIP-архив, содержащий несколько XML-документов, которые отвечают за структуру книги, список листов, стили ячеек, значения и формулы.

XML-файл со значениями и ссылкой на формат ячеек в Excel
Так выглядит XML-файл, который содержит значения и ссылку на формат ячеек внутри документа Excel

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

Чтобы добиться нужного результата, пришлось:

Разбор этой взаимосвязи стилей и отладка механизма заняли основное время.

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

Результат

Теперь загрузка и выгрузка данных в Excel работают стабильно, без зависимости от внешних программ и неожиданных сбоев.

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

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

Длительность. Доработки заняли 1 неделю, включая анализ структуры Excel-файлов, разработку и тестирование.

Команда. Со стороны implecs задачу выполнял разработчик 1С. Со стороны заказчика согласовывал работы и принимал результат аналитик 1С.

Многие проекты
под соглашением о неразглашении (NDA),
поэтому вы можете оставить заявку,
и мы расскажем чуть больше

Услуги

2015
Год основания компании
150+
Специалистов в штате
650+
Клиентов, которым мы помогли
950+
Реализованных проектов

Нам доверяют

Все клиенты
Все клиенты
Нужна помощь, но не знаете, с чего начать?

Напиште нам - мы поможем. Выслушаем Ваши задачи для бизнеса и подберём вариант развития

Лидия Алимова
Руководитель отдела продаж implecs
Иконка стрелки вверх