Как настроить чередование разных макетов при печати этикеток в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с типовыми конфигурациями 1С, такими как Управление торговлей 11.4, ERP или Комплексная автоматизация, пользователи часто сталкиваются с особенностью работы подсистемы печати этикеток и ценников. Если в табличную часть обработки добавлены разные макеты для одной номенклатуры, система по умолчанию выводит все этикетки одного типа, а затем переходит к другому. Рассмотрим, почему это происходит и как программно реализовать чередование.

Анализ причины проблемы

Стандартный механизм обработки ПечатьЭтикетокИЦенников устроен таким образом, что он последовательно перебирает строки в табличной части. Для каждой строки система считывает количество копий и отправляет их на принтер (или в табличный документ) подряд. Для 1С это выглядит как выполнение цикла по количеству экземпляров для конкретной записи. В итоге, если у вас 5 штук макета «А» и 5 штук макета «Б», принтер получит инструкцию сначала напечатать пять первых, а затем пять вторых.

Важно понимать, что настройки принтера, такие как «группировка» или «коллатирование», здесь не помогут. Они работают с многостраничными документами (например, когда принтер понимает, что нужно повторить набор страниц 1-2-3 несколько раз). В нашем же случае 1С формирует один «длинный» макет, где все этикетки идут друг за другом, поэтому для принтера это просто последовательность графических образов.

Решение задачи: Программный подход

Чтобы добиться чередования (макет А, макет Б, макет А, макет Б...), необходимо вмешаться в процесс формирования табличного документа. Разберем основные стратегии решения.

Вариант 1: Формирование единого табличного документа

Самый надежный способ — переписать процедуру вывода на печать. Вместо стандартного цикла, который «штампует» копии одну за другой, мы создадим алгоритм, который будет «собирать» этикетки в нужном нам порядке в один итоговый документ.

Шаги реализации:

  1. Создайте собственную команду печати в модуле обработки.
  2. Вместо штатного обхода строк организуйте цикл, который будет работать до тех пор, пока не будут распечатаны все запланированные этикетки.
  3. На каждой итерации цикла берите по одной этикетке из каждого доступного макета.
  4. Присоединяйте сформированные макеты к общему объекту ТабличныйДокумент.

Примерная логика заполнения документа может выглядеть следующим образом:


// Псевдокод алгоритма формирования документа
ОбщийТабДок = Новый ТабличныйДокумент;
СписокМакетА = ПолучитьСписокЭтикеток(ТипМакетА);
СписокМакетБ = ПолучитьСписокЭтикеток(ТипМакетБ);

Пока (СписокМакетА.Количество() > 0) Или (СписокМакетБ.Количество() > 0) Цикл
    Если СписокМакетА.Количество() > 0 Тогда
        ВывестиМакетВДокумент(ОбщийТабДок, СписокМакетА.Удалить(0));
    КонецЕсли;
    Если СписокМакетБ.Количество() > 0 Тогда
        ВывестиМакетВДокумент(ОбщийТабДок, СписокМакетБ.Удалить(0));
    КонецЕсли;
КонецЦикла;

Таким образом, в ОбщийТабДок попадут этикетки строго в чередующемся порядке, и при отправке на печать принтер физически не сможет их перепутать.

Вариант 2: Прямая печать (Raw printing)

Если вы используете специализированные принтеры этикеток (например, Zebra), можно уйти от графического формирования документов 1С. Большинство таких принтеров работают на языках описания страниц, таких как ZPL.

Почему это эффективно:

Для реализации этого метода используйте объект ТекстовыйДокумент или ЗаписьТекста, куда вы будете записывать ZPL-код, а затем отправляйте этот поток напрямую через метод КомандаПечати или системную утилиту печати.

Важные рекомендации по доработке

При внедрении данных изменений в конфигурации УТ 11 или ERP, помните следующее:

Используя предложенный алгоритм создания общего табличного документа, вы сможете гибко управлять порядком вывода этикеток, обеспечивая именно ту последовательность, которая необходима вашим сотрудникам на складе или в торговом зале.

← На главную