Отказ от COM-объектов: разработка механизма обмена данными с Excel встроенными средствами 1С:КА 2.5
Ситуация
Компания работает в 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С метод табличного документа — «Прочитать()». Процесс теперь выглядит так:
-
Файл Excel загружается напрямую в табличный документ без внешних программ.
-
Код просматривает области документа — определяет количество строк и колонок, вычисляет нужные диапазоны.
-
Данные извлекаются построчно: для каждой ячейки считывается значение, и оно записывается в соответствующую структуру или таблицу в 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С.