В процессе автоматизации розничной торговли часто возникает задача дублирования информации о продаже на несколько печатающих устройств. Например, когда необходимо выдать покупателю фискальный чек, а для внутреннего учета, кухни или склада распечатать копию чека (пречек или товарный чек) на обычном термопринтере. В программе 1С:Розница 2.2 стандартный механизм РМК (Рабочего места кассира) обычно ориентирован на работу с одним устройством печати фискальных документов. В этой статье мы подробно разберем, как реализовать одновременную или последовательную печать на Viki Print 57F и нефискальный принтер чеков.
Прежде всего, давайте разберем технический аспект понятия «одновременно». В архитектуре 1С и операционной системы Windows команды на устройства передаются последовательно. Таким образом, мы будем реализовывать алгоритм, при котором после успешного пробития чека на ККТ (контрольно-кассовой технике) система автоматически посылает команду печати на второе устройство.
Рассмотрим основные способы решения этой задачи:
Проанализируем возможности системы без внесения изменений в программный код. В 1С:Розница предусмотрен механизм печати товарных чеков. Если настроить обычный принтер чеков как «Принтер чеков» в справочнике подключаемого оборудования, можно добиться желаемого результата.
Разберем по шагам настройку оборудования:
Viki Print 57F в категорию ККТ с передачей данных.1С:Принтер чеков (NativeApi) или настроим его как Windows-принтер через Generic/Text Only драйвер.Печать товарного чека.При такой настройке, после закрытия чека на фискальном регистраторе, система предложит или автоматически (в зависимости от настроек) отправит документ на печать на второе устройство. Это наиболее безопасный способ, не требующий работы программиста.
Если нам требуется строгая автоматизация, чтобы кассир не нажимал лишних кнопок, нам придется поработать с кодом. Рассмотрим, как это сделать правильно, используя механизм расширений, чтобы сохранить конфигурацию на поддержке.
Основная логика должна быть сосредоточена в обработке события завершения печати фискального чека. Выясним причину, почему это важно: печать на нефискальный принтер должна происходить только после того, как ККТ подтвердила успешную запись операции. Если мы сначала распечатаем «копию», а ККТ выдаст ошибку (например, «Исчерпан ресурс ФН»), у нас возникнет расхождение между реальной выручкой и бумажными носителями.
Рассмотрим примерную схему кода:
Нам необходимо перехватить процедуру в модуле МенеджерОборудованияВызовСервера или непосредственно в форме РМК. Чаще всего интересующая нас функция — ПечатьЧека.
&После("ПечатьЧека")
Процедура Расш_ПечатьЧекаПосле(Отказ, ПараметрыЧека, Оповещение)
// Проверяем, что фискальный чек пробит успешно
Если Не Отказ Тогда
// Находим наше нефискальное устройство
ПринтерЧеков = НайтиПринтерПоНаименованию("МойПринтерЧеков");
// Формируем данные для печати на принтер чеков
// Можно использовать типовой механизм шаблонов
ДанныеПечати = СформироватьТекстЧекаПоШаблону(ПараметрыЧека);
// Отправляем на печать
МенеджерОборудованияКлиент.ВыполнитьКомандуПечати(ПринтерЧеков, ДанныеПечати);
КонецЕсли;
КонецПроцедуры
В данном примере мы используем аннотацию &После, которая позволяет выполнить наш код сразу после завершения основной логики системы.
Выясним, как использовать справочник ШаблоныЧековККМ для нашей задачи. В 1С:Розница печать на нефискальные принтеры часто опирается на текстовые шаблоны.
Разберем алгоритм создания дубликата:
ПодключитьШаблон(), подставляя туда объект Документ.ЧекККМ.Проанализируем важные детали, без которых стабильная работа двух устройств невозможна:
Viki Print 57F подключен через USB-эмуляцию COM-порта (например, COM3), а принтер чеков также использует виртуальный COM-порт, обязательно разнесите их на разные номера в диспетчере устройств Windows.Если печать на принтер чеков не происходит, проанализируем следующие моменты:
Мы рассмотрели несколько подходов к решению задачи. Для тех, кто не хочет изменять код, оптимальным будет путь настройки товарного чека. Для более тонкой настройки и полной автоматизации (например, печать заказов на разные принтеры в зависимости от категории товара) следует использовать расширение конфигурации с перехватом процедур модуля МенеджерОборудования.
Помните, что любая работа с торговым оборудованием требует предварительного тестирования на копии базы, чтобы избежать задержек в обслуживании реальных покупателей на торговой точке.