В процессе автоматизации розничной торговли часто возникает задача разделения потоков печати. Например, когда часть товаров должна проходить через фискальный регистратор (онлайн-кассу), а часть — оформляться как внутренний документ или товарный чек без фиксации в налоговой. Рассмотрим подробнее, как реализовать возможность выбора устройства печати в конфигурации 1С:Розница 2.
Для начала разберем, что предлагает типовой функционал 1С:Розница. В режиме Рабочего места кассира (РМК) программа ориентирована на строгое соблюдение законодательства (ФЗ-54), поэтому при нажатии кнопки оплаты система автоматически инициирует процесс фискализации чека на подключенном оборудовании. Однако существуют обходные пути:
Проанализируем ситуацию, когда нам нужно использовать обычный принтер чеков. Если вы не хотите вносить изменения в программный код, можно воспользоваться печатью товарного чека. Для этого в настройках оборудования необходимо добавить принтер чеков как «Принтер документов».
При оформлении продажи кассир может выйти из интерфейса РМК (если это разрешено правами доступа), найти текущий чек и нажать кнопку «Печать». В появившемся списке нужно выбрать «Товарный чек». Если принтер чеков настроен в системе Windows как принтер по умолчанию для этого типа документов, печать уйдет на него. Это решение рабочее, но крайне неудобное для потоковых продаж, так как требует лишних кликов и переключения интерфейсов.
Для реализации ручного выбора устройства непосредственно в окне РМК потребуется помощь программиста. Разберем по шагам, как это можно реализовать с помощью механизма расширений, не снимая основную конфигурацию с поддержки.
Основная задача — перехватить процедуру закрытия чека. Нам необходимо добавить в интерфейс РМК (форму ФормаРМК) дополнительную кнопку или переключатель (флаг), который будет определять режим работы: Фискальный или Нефискальный.
Рассмотрим пример логики, которую можно внедрить в процедуру печати:
&НаКлиенте
Процедура Расш1_ПриПечатиЧекаПеред(Команда)
// Проверяем состояние нашего переключателя на форме
Если Объект.РежимПечати = "Нефискальный" Тогда
// Отменяем стандартную фискализацию
Отказ = Истина;
// Вызываем процедуру печати на обычный принтер
ПечатьНаПринтерЧеков(Объект.Ссылка);
КонецЕсли;
КонецПроцедуры
При таком подходе, если выбран нефискальный режим, 1С не будет обращаться к драйверу ККТ для открытия фискального чека, а просто отправит сформированный макет на Windows-принтер.
Если вы хотите использовать только одно устройство (ККТ АТОЛ) для обоих видов задач, нужно задействовать методы драйвера для печати текста. Современные драйверы позволяют выводить информацию на чековую ленту без записи в фискальный накопитель (ФН).
Выясним причину, почему это сложно сделать в стандарте: типовой модуль МенеджерОборудованияВызовСервера всегда формирует XML-пакет для фискализации. Чтобы напечатать «просто текст», нужно программно сформировать объект драйвера и использовать метод printText.
Пример структуры кода для печати нефискального текста через драйвер АТОЛ 10:
// Пример инициализации драйвера и печати текста
ОбъектДрайвера = Новый ("AddIn.Atol_KKM_10");
ОбъектДрайвера.set_DeviceEnabled(Истина);
// Начинаем нефискальный документ
ОбъектДрайвера.beginNonfiscalDocument();
// Печатаем строки
ОбъектДрайвера.set_Text("ТОВАРНЫЙ ЧЕК (НЕФИСКАЛЬНЫЙ)");
ОбъектДрайвера.printText();
ОбъектДрайвера.set_Text("Товар: Сигареты");
ОбъектДрайвера.printText();
// Завершаем и отрезаем ленту
ОбъектДрайвера.endNonfiscalDocument();
ОбъектДрайвера.cut();
Важно: При использовании этого метода данные о продаже не попадут в ОФД, но кассовая смена в 1С все равно должна быть открыта, чтобы документ «Чек ККМ» мог быть проведен в системе для учета остатков.
Проанализируем ситуацию с точки зрения законодательства. Если речь идет о сигаретах или других маркированных товарах, использование принтера чеков вместо ККТ влечет за собой серьезные риски:
Если задача стоит остро и вы готовы к техническим изменениям, наиболее стабильным решением будет создание расширения, которое добавляет в РМК кнопку «Печать нефискального чека». Эта кнопка должна:
Чек ККМ в базе 1С (для списания остатков).При этом банковские операции, как и требовалось, всегда должны инициировать стандартный процесс оплаты через эквайринговый терминал, который жестко связан с фискализацией на ККТ АТОЛ в типовых настройках 1С. Помните, что в конце смены документ «Отчет о розничных продажах» соберет все чеки (и фискальные, и нефискальные), что позволит видеть общую картину продаж в управленческом учете.