При работе с типовыми конфигурациями 1С, такими как Управление торговлей 11.4, ERP или Комплексная автоматизация, пользователи часто сталкиваются с особенностью работы подсистемы печати этикеток и ценников. Если в табличную часть обработки добавлены разные макеты для одной номенклатуры, система по умолчанию выводит все этикетки одного типа, а затем переходит к другому. Рассмотрим, почему это происходит и как программно реализовать чередование.
Стандартный механизм обработки ПечатьЭтикетокИЦенников устроен таким образом, что он последовательно перебирает строки в табличной части. Для каждой строки система считывает количество копий и отправляет их на принтер (или в табличный документ) подряд. Для 1С это выглядит как выполнение цикла по количеству экземпляров для конкретной записи. В итоге, если у вас 5 штук макета «А» и 5 штук макета «Б», принтер получит инструкцию сначала напечатать пять первых, а затем пять вторых.
Важно понимать, что настройки принтера, такие как «группировка» или «коллатирование», здесь не помогут. Они работают с многостраничными документами (например, когда принтер понимает, что нужно повторить набор страниц 1-2-3 несколько раз). В нашем же случае 1С формирует один «длинный» макет, где все этикетки идут друг за другом, поэтому для принтера это просто последовательность графических образов.
Чтобы добиться чередования (макет А, макет Б, макет А, макет Б...), необходимо вмешаться в процесс формирования табличного документа. Разберем основные стратегии решения.
Самый надежный способ — переписать процедуру вывода на печать. Вместо стандартного цикла, который «штампует» копии одну за другой, мы создадим алгоритм, который будет «собирать» этикетки в нужном нам порядке в один итоговый документ.
Шаги реализации:
ТабличныйДокумент.Примерная логика заполнения документа может выглядеть следующим образом:
// Псевдокод алгоритма формирования документа
ОбщийТабДок = Новый ТабличныйДокумент;
СписокМакетА = ПолучитьСписокЭтикеток(ТипМакетА);
СписокМакетБ = ПолучитьСписокЭтикеток(ТипМакетБ);
Пока (СписокМакетА.Количество() > 0) Или (СписокМакетБ.Количество() > 0) Цикл
Если СписокМакетА.Количество() > 0 Тогда
ВывестиМакетВДокумент(ОбщийТабДок, СписокМакетА.Удалить(0));
КонецЕсли;
Если СписокМакетБ.Количество() > 0 Тогда
ВывестиМакетВДокумент(ОбщийТабДок, СписокМакетБ.Удалить(0));
КонецЕсли;
КонецЦикла;
Таким образом, в ОбщийТабДок попадут этикетки строго в чередующемся порядке, и при отправке на печать принтер физически не сможет их перепутать.
Если вы используете специализированные принтеры этикеток (например, Zebra), можно уйти от графического формирования документов 1С. Большинство таких принтеров работают на языках описания страниц, таких как ZPL.
Почему это эффективно:
ТабличныйДокумент, что экономит память сервера.Для реализации этого метода используйте объект ТекстовыйДокумент или ЗаписьТекста, куда вы будете записывать ZPL-код, а затем отправляйте этот поток напрямую через метод КомандаПечати или системную утилиту печати.
При внедрении данных изменений в конфигурации УТ 11 или ERP, помните следующее:
ПечатьЭтикетокИЦенников является довольно сложным инструментом, который интегрирован во многие подсистемы. Внесение изменений в типовой код модуля объекта может затруднить последующие обновления конфигурации.ТабличногоДокумента.Используя предложенный алгоритм создания общего табличного документа, вы сможете гибко управлять порядком вывода этикеток, обеспечивая именно ту последовательность, которая необходима вашим сотрудникам на складе или в торговом зале.