Как настроить выбор принтера и автоматизировать печать этикеток в 1С:WMS

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

В складских системах управления (WMS) вопрос оперативной и гибкой печати этикеток стоит особенно остро. Кладовщики работают на разных участках, используют разные принтеры (стационарные или переносные), и система должна четко понимать, на какое устройство отправить задание. Разберем подробно, как реализовать программный выбор принтера и настроить автоматическую печать при выполнении операций на ТСД (терминале сбора данных).

Метод 1. Программная установка принтера через свойства табличного документа

Рассмотрим стандартную ситуацию: пользователь хочет выбрать принтер из списка в интерфейсе 1С, и программа должна применить этот выбор без вывода диалогового окна настроек печати Windows. Для этого в платформе 1С предусмотрено специальное свойство объекта ТабличныйДокумент.

Проанализируем алгоритм реализации этого механизма:

  1. Создание справочника или настройки: Для начала нам нужно где-то хранить соответствие пользователя (или рабочего места) и имени принтера. Рекомендуется использовать регистр сведений или добавить реквизит в справочник "Рабочие места".
  2. Получение имени принтера: Важно понимать, что 1С работает с сетевым или локальным именем принтера так, как оно прописано в операционной системе.
  3. Присвоение значения в коде: Перед тем как вызвать метод Напечатать(), мы должны передать строку с именем принтера в свойство ИмяПринтера.

Посмотрим на пример кода, который реализует эту логику:


// Предположим, ВыбранныйПринтер — это строковая переменная с точным сетевым именем принтера
ТабДок = Новый ТабличныйДокумент;
// Заполняем ТабДок данными этикетки...
ТабДок.ИмяПринтера = ВыбранныйПринтер;
ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать);

Выясним важный нюанс: если указанное имя принтера не будет найдено в системе, 1С отправит документ на принтер по умолчанию. Поэтому крайне важно обеспечить идентичность имен принтеров на всех рабочих станциях.

Метод 2. Организация печати с ТСД через очередь печати

Ситуация с мобильными терминалами (ТСД) сложнее. ТСД работает через мобильный клиент или веб-интерфейс, и он не имеет прямого доступа к драйверам принтеров, установленным на сервере или локальных ПК. Разберем, как решается эта задача в современных редакциях 1С:WMS.

Вместо прямой отправки на печать используется механизм очереди печати. Процесс выглядит следующим образом:

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

Проанализируем, как программно создать такое задание из модуля ТСД:


// Код выполняется на стороне ТСД (Сервер)
Процедура СоздатьЗаданиеНаПечать(ДанныеЭтикетки, ПринтерНазначения)
    НоваяЗапись = РегистрыСведений.ОчередьПечати.СоздатьМенеджерЗаписи();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.ИдентификаторПринтера = ПринтерНазначения;
    НоваяЗапись.ДанныеПечати = Новый ХранилищеЗначения(ДанныеЭтикетки);
    НоваяЗапись.Статус = Перечисления.СтатусыПечати.ВТрабте;
    НоваяЗапись.Записать();
КонецПроцедуры

Метод 3. Автоматическая печать при сканировании ячейки

Часто возникает задача: как только кладовщик ввел (отсканировал) номер ячейки при отборе, должна сразу вылезти этикетка. Разберем, куда именно нужно интегрировать код для реализации этой функции.

В конфигурации 1С:WMS работа ТСД обычно строится на обработках, реализующих логику шагов бизнес-процесса. Вам необходимо найти процедуру, отвечающую за обработку завершения ввода данных. Чаще всего это ОбработкаСобытияТСД или специализированный метод в модуле формы мобильного клиента.

Рассмотрим пример логики в обработчике события:


// В обработчике события ввода данных на ТСД
Если ИмяСобытия = "ПодтверждениеЯчейки" Тогда
    // Проверяем, что ввод успешен
    Если ЗначениеЗаполнено(ТекущаяЯчейка) Тогда
        // Формируем параметры этикетки
        ПараметрыПечати = Новый Структура("Товар, Количество, Ячейка", ТекущийТовар, КолВо, ТекущаяЯчейка);
        // Вызываем функцию отправки в очередь, описанную в Методе 2
        ОтправитьВОчередьПечати(ПараметрыПечати);
        // Продолжаем выполнение процесса на ТСД
    КонецЕсли;
КонецЕсли;

Метод 4. Прямая печать на языке принтера (ZPL/EPL)

Для высоконагруженных складов формирование графического ТабличногоДокумента может быть слишком медленным. В таких случаях мы используем прямую отправку команд на языке принтера (например, ZPL для принтеров Zebra).

Этот способ позволяет отправлять текстовые пакеты данных напрямую на IP-адрес принтера через сокеты или HTTP-запросы. Посмотрим, как может выглядеть формирование такой команды:


ТекстКомандыZPL = "^XA^FO50,50^A0N,36,36^FD" + АртикулТовара + "^FS^XZ";
// Далее используем объект НТТРЗапрос или внешнюю компоненту для отправки на IP принтера

Важные преимущества этого метода:

Рекомендации по настройке рабочих мест

Проанализируем ситуацию, когда кладовщики постоянно меняются местами. Привязывать принтер к конкретному пользователю — неэффективно. Лучше всего использовать привязку "Рабочее место (ТСД) -> Принтер" или "Складской участок -> Принтер".

В коде 1С мы можем определить текущее рабочее место через параметры сеанса или идентификатор устройства. Таким образом, программа автоматически определит, что если сотрудник работает в зоне "А", то печать этикеток должна идти на принтер, находящийся физически в этой же зоне.

Рассмотрим, как это реализовать через БСП (Библиотеку стандартных подсистем), используя функцию УправлениеПечатьюКлиент.ПечатьДокументов(). Она позволяет передавать настройки печати в параметрах, что дает возможность гибко управлять выводом без вмешательства в типовые механизмы формирования макетов.

Подведем итог: для реализации качественной печати в 1С:WMS мы должны сочетать удобный интерфейс выбора принтера для офисных сотрудников и автоматизированную очередь печати для мобильных сотрудников. Использование свойства ИмяПринтера в сочетании с регистром очереди печати позволит закрыть 99% потребностей склада.

← На главную