Top.Mail.Ru

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

Заказчик
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


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

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

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


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

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


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

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

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


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

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

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


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


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

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

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


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

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

  • извлекать существующие стили из XML;

  • копировать их для сохранения визуальных свойств;

  • создавать модифицированные копии с требуемыми форматами;

  • присваивать эти стили именно тем колонкам, где они нужны.

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

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


Результат

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

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

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

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

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


Другие кейсы

Потребительские товары
1С:ЗУП
Закрытие обособленного подразделения в 1С:ЗУП без ручных операций
2,5 месяца
NDA
Сельское хозяйство и продукты питания
1С:КА
Отказ от COM-объектов: разработка механизма обмена данными с Excel встроенными средствами 1С:КА 2.5
1 неделя
NDA
Электроника
1С:ERP
Новый способ расчета себестоимости для импортеров: распределение расходов по весу брутто и таможенной стоимости в 1С:ERP 2.5
110 часов
NDA
Потребительские товары
1С:ERP
Автоматическое закрытие частично отгруженных заказов в 1С:ERP 2.5: два клика вместо часа ручного труда
2 недели
NDA
У вас есть вопросы?
Давайте обсудим проект более предметно
Многие проекты под NDA, поэтому вы можете оставить заявку, и мы расскажем чуть больше
Свяжитесь с нами