При работе с системой маркировки «Честный Знак» (ГИС МТ) многие компании сталкиваются с серьезными проблемами производительности, когда речь заходит о больших объемах данных. Стандартные инструменты 1С и веб-интерфейс личного кабинета ГИС МТ зачастую не рассчитаны на обработку миллионов кодов одновременно. В данной статье мы разберем практический кейс по вводу в оборот 2 000 000 кодов маркировки обуви, проанализируем узкие места системы и предложим архитектурные решения для оптимизации процесса.
Рассмотрим основные сложности, с которыми сталкивается разработчик при попытке обработать миллионные тиражи этикеток. Во-первых, стандартные механизмы 1С для работы с текстовыми файлами и XML могут работать крайне медленно при переборе строк по индексу. Во-вторых, стандартная подсистема печати создает колоссальную нагрузку на оперативную память, пытаясь сформировать графические макеты для тысяч страниц. Выясним причину: при формировании табличного документа 1С хранит каждый объект в памяти, что при объемах в сотни тысяч позиций неизбежно приводит к аварийному завершению работы программы.
Первым делом проанализируем стратегию обработки полученных из ГИС МТ кодов. Невозможно и неэффективно пытаться напечатать 2 миллиона кодов одним заданием. Мы рекомендуем разбивать весь массив данных на файлы с фиксированным количеством записей. Оптимальное число — 970 штук. Это обусловлено физическими параметрами расходных материалов: стандартная катушка этикеток для термотрансферного принтера содержит чуть меньше 1000 этикеток, и небольшой запас необходим на случай брака или технологического склея ленты.
Для эффективного разделения массива данных в 1С следует использовать специализированные функции работы со строками. Разберем пример оптимизации: вместо медленного построчного чтения текстового документа с использованием индекса, применим функцию СтрРазделить. Это позволит превратить массив данных в коллекцию, работа с которой в разы быстрее.
// Оптимизированный разбор файла маркировки
ТекстДокумента = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);
СтрокаДанных = ТекстДокумента.Прочитать();
МассивСтрок = СтрРазделить(СтрокаДанных, Символы.ПС, Ложь);
// Теперь мы можем быстро перебирать массив по индексам
Для Каждого ТекущийКод Из МассивСтрок Цикл
// Обработка кода маркировки
КонецЦикла;
Стандартная форма печати 1С — это «бутылочное горлышко» при работе с большими тиражами. Чтобы избежать зависаний, проанализируем альтернативный подход: использование прямой передачи данных в буфер и формирование макета с минимальным количеством графических элементов. Разберем структуру данных для печати, которая включает три ключевых компонента:
Проанализируем техническую особенность: поскольку 1С часто не может корректно распознать полный код маркировки с криптохвостом в макете, мы выводим его в специфическом режиме. Для ускорения процесса создадим дополнительную форму печати, которая работает в командном режиме и очищает логи после каждой успешно напечатанной пачки. Это позволяет контролировать совпадение исходных файлов и фактически напечатанных этикеток через сверку CSV-логов.
Для профессионального решения задачи печати 2 млн этикеток рекомендуется полностью отказаться от формирования ТабличногоДокумента. Вместо этого рассмотрим использование языков программирования принтеров, таких как ZPL (для принтеров Zebra) или TSPL (для Godex/TSC). В этом случае 1С отправляет на принтер не картинку, а текстовые команды. Это ускоряет процесс в десятки раз, так как принтер сам генерирует изображение штрихкода из переданной строки.
Загрузка файлов через веб-интерфейс личного кабинета при объемах в 2 млн кодов — это путь к ошибкам. Система часто сообщает об «успешной загрузке», но по факту документы могут обрабатываться некорректно или требовать повторной отправки. Мы рекомендуем использовать прямое взаимодействие через API ГИС МТ.
Разберем алгоритм работы автоматизированной выгрузки:
Важный нюанс: при формировании XML необходимо корректно обрабатывать Group Separator (символ GS, код 29), который отделяет идентификатор применения от данных. В 1С это реализуется через Символ(29).
При вводе в оборот миллионов единиц товара критически важно использовать механизмы агрегации. Невозможно эффективно управлять логистикой, если каждая пара обуви учитывается отдельно. Мы рекомендуем объединять коды маркировки в транспортные упаковки с присвоением кодов SSCC. Это позволит в дальнейшем передавать данные через ЭДО целыми паллетами или коробами, что значительно снижает нагрузку на базу данных 1С:Предприятие и ускоряет процессы отгрузки.
Также стоит обратить внимание на хранение «криптохвостов». Хранить их в основной базе 1С в открытом виде после ввода в оборот не всегда целесообразно из-за раздувания размера таблиц БД (SQL или 1CD). Рациональнее использовать внешние хранилища или специализированные регистры сведений с очисткой после завершения цикла маркировки.
Подведем итоги нашего анализа. Для успешного ввода в оборот 2 млн кодов маркировки необходимо:
СтрРазделить) для ускорения парсинга данных.Соблюдение этих технических требований позволит избежать «зависаний» системы и обеспечит стабильную работу склада при переходе на обязательную маркировку товаров.