Отказ от 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С метод табличного документа — «Прочитать()». Процесс теперь выглядит так:
- Файл Excel загружается напрямую в табличный документ без внешних программ.
- Код просматривает области документа — определяет количество строк и колонок, вычисляет нужные диапазоны.
- Данные извлекаются построчно: для каждой ячейки считывается значение, и оно записывается в соответствующую структуру или таблицу в 1С.
Загрузка документов стала быстрее, стабильнее и независимой от Excel, установленного на сервере. В результате процесс стал проще для поддержки, а риск ошибок снизился, так как все происходит внутри 1С.
Разработали механизм сохранения форматов при выгрузке
В процессе формирования отчета записываем в структуру области, которые хотим дополнительно обработать. В структуре хранятся номер строки для начала и конца области. Далее, проходя по областям форматирования, формируем соответствие форматов ячеек. По каждой строке, записывается информация о номере ячейки и формате данных. Полученное соответствие передаем в процедуру, которая установит в указанных ячейках корректные форматы данных.
После формирования отчета в 1С файл сначала сохраняется как временный в стандартном формате, но без нужных стилей — все ячейки по умолчанию имеют общий текстовый формат. Чтобы исправить это, файл обрабатывается как ZIP-архив: с помощью встроенных средств 1С извлекаем внутренние XML-файлы стилей и листов данных. Эти XML далее парсятся с использованием объекта чтения документа «ПостроительDOM».
Сначала берутся стандартные настройки ячеек, включая зависимости от визуальных элементов вроде цвета фона, рамок или обводки. Затем создаются копии существующих стилей, и в них вносятся изменения. Добавляются новые форматы: для чисел устанавливается точность до нужного количества знаков после с запятой, для дат рассчитывается специальное числовое значение из текстового представления, чтобы Excel отображал их правильно, а не как строки.
Обновленные XML-файлы упаковываются обратно в ZIP, и на выходе получается полноценный Excel-файл с сохраненными форматами. Это упрощает дальнейшую редактуру файлов: форматы сохраняются автоматически, числа суммируются, даты сортируются правильно.
В итоге выгрузка данных в Excel стала быстрее и стабильнее — без ошибок от COM-объектов и без задержек на запуск Excel в фоне.
Адаптировали макеты и обработки
Макеты раньше представляли собой Excel-файлы, загруженные в 1С как двоичные данные. Их использовали как шаблоны для реестров и отчетов — с шапками, колонками цен, объемов и дат.
Мы адаптировали эти макеты под новый подход: перенесли их в табличные макеты непосредственно в 1С. Так удалось полностью избавиться от зависимости от внешних Excel-файлов и COM-объектов.
Теперь при формировании документов на основе макета данные сначала заполняются в табличном документе 1С — подставляются значения в нужные ячейки, строки и колонки, включая шапку с датами. Затем применяется та же логика обработки: файл сохраняется, извлекаются XML, и корректируются стили для конкретных элементов. Это гарантирует, что даже в сложных макетах с визуальным оформлением рамками и цветами форматы сохраняются корректно.
В существующих обработках старый код с COM-объектами закомментировали, чтобы сохранить историю, и реализовали альтернативу с использованием табличного документа. Это позволило интегрировать изменения без перестройки всей системы — пользователи продолжают работать как раньше, только быстрее и проще.
Непредвиденные трудности
Главная сложность была связана с внутренней структурой XLSX-файлов. Такой файл — это ZIP-архив, содержащий несколько XML-документов, которые отвечают за структуру книги, список листов, стили ячеек, значения и формулы.
Стили в Excel определяются не только типом значения (число, дата, текст), но и визуальными характеристиками ячейки — цветом фона, рамками, обводкой, жирным шрифтом и другими элементами оформления. Из-за этого даже колонки с одинаковыми данными могли иметь разные стили. Простое добавление нового формата не срабатывало: Excel не применял его ко всем нужным ячейкам, и часть форматов терялась.
Чтобы добиться нужного результата, пришлось:
- извлекать существующие стили из XML;
- копировать их для сохранения визуальных свойств;
- создавать модифицированные копии с требуемыми форматами;
- присваивать эти стили именно тем колонкам, где они нужны.
Разбор этой взаимосвязи стилей и отладка механизма заняли основное время.
В итоге все заработало предсказуемо и без сюрпризов: файлы сохраняют исходные форматы и внешний вид макетов, без потерь и искажений.
Результат
Теперь загрузка и выгрузка данных в Excel работают стабильно, без зависимости от внешних программ и неожиданных сбоев.
Пользователи получают файлы с правильными форматами сразу — числа суммируются, даты сортируются корректно. Редактировать их стало проще и быстрее.
Ручная правка форматов ушла в прошлое, а формирование отчетов и реестров ускорилось. В итоге компания получила надежный механизм для загрузки и выгрузки данных, который легко поддерживать и развивать дальше.
Длительность. Доработки заняли 1 неделю, включая анализ структуры Excel-файлов, разработку и тестирование.
Команда. Со стороны implecs задачу выполнял разработчик 1С. Со стороны заказчика согласовывал работы и принимал результат аналитик 1С.
под соглашением о неразглашении (NDA),
поэтому вы можете оставить заявку,
и мы расскажем чуть больше
Услуги
Внедрение и переходы
Внедряем конфигурации, исправляем ошибки, настраиваем обмены с внешними системами
Доработка 1С
Автоматизируем рабочие процессы под требования бизнеса
Усиление команды 1С
Подключаем специалистов 1С на нужное количество часов. Вы управляете ими, как своими сотрудниками
Обслуживание 1С
для стабильной работы информационной системы предприятия
Сопровождение 1С:ИТС
Комплексная поддержка пользователей программ "1С:Предприятие"
Разработка и сопровождение 1С
Оцениваем и выполняем задачи с техзаданием или без него
Битрикс разработчики