Часто в процессах розничной торговли, особенно в сфере общественного питания, возникает необходимость распечатать предварительный чек (пречек) для клиента. Это документ, который содержит состав заказа и его стоимость, но не является фискальным и не передается в налоговую инспекцию. Рассмотрим, как реализовать такую функцию в типовых конфигурациях 1С, например, в 1С:Розница. В качестве альтернативы самостоятельной разработке можно использовать готовое расширение для печати нефискальных чеков на принтерах чеков.
Важно уяснить, что пречек — это обычный текст. Чтобы реализовать его печать, нам не нужно модифицировать типовые процедуры пробития чека, которые работают с фискальной памятью. Вместо этого мы будем использовать механизмы Библиотеки подключаемого оборудования (БПО), которые позволяют отправить на фискальный регистратор (ФР) команду прямой печати текста.
Не рекомендуется вносить изменения напрямую в конфигурацию. Мы будем использовать расширения конфигурации. Это позволит сохранить целостность основной конфигурации и упростит последующие обновления системы. Создайте расширение и добавьте в него форму РМК (рабочего места кассира).
На форме РМК разместите новую кнопку, например, с названием «Пречек». В обработчике команды этой кнопки нам предстоит собрать данные о товарах из табличной части документа и сформировать строку для вывода на печать.
Для того чтобы пречек выглядел корректно, необходимо учитывать ширину чековой ленты (обычно 32, 36 или 48 символов). Рассмотрим пример кода, который формирует содержимое пречека:
&НаКлиенте
Процедура ПречекПосле(Команда)
Если Объект.Товары.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ТекстПечати = Символы.ПС + "ПРЕДВАРИТЕЛЬНЫЙ ЧЕК" + Символы.ПС + "------------------------------" + Символы.ПС;
СуммаИтого = 0;
Для каждого Стр из Объект.Товары Цикл
СтруктураНоменклатуры = Новый Структура;
ПолучитьСтруктуруНоменклатурыНаСервере(СтруктураНоменклатуры, Стр.Номенклатура);
ТекстПечати = ТекстПечати + Стр.НомерСтроки + ". " + СтруктураНоменклатуры.Наименование + Символы.ПС;
ТекстПечати = ТекстПечати + Формат(Стр.Цена, "ЧДЦ=2") + " х " + Формат(Стр.Количество, "ЧГ=0") + " = " + Формат(Стр.Сумма, "ЧДЦ=2") + Символы.ПС;
СуммаИтого = СуммаИтого + Стр.Сумма;
КонецЦикла;
ТекстПечати = ТекстПечати + "------------------------------" + Символы.ПС;
ТекстПечати = ТекстПечати + "ИТОГО: " + Формат(СуммаИтого, "ЧДЦ=2") + " руб.";
МенеджерОборудованияКлиент.НачатьПечатьТекста(,, ТекстПечати);
КонецПроцедуры
Важным аспектом является разбиение длинных наименований товаров на строки. Используйте вспомогательную процедуру на сервере, чтобы обрезать наименование до необходимой ширины ленты и добавлять символы переноса строки Символы.ПС:
&НаСервереБезКонтекста
Процедура ПолучитьСтруктуруНоменклатурыНаСервере(СтруктураНоменклатуры, Номенклатура)
СтруктураНоменклатуры = Новый Структура;
Наименование = Номенклатура.Наименование;
// Логика разбиения строки по 32 символа для примера
Наим1 = Лев(Наименование, 32);
// Добавление оставшейся части, если она есть
СтруктураНоменклатуры.Вставить("Наименование", Наим1);
КонецПроцедуры
МенеджерОборудованияКлиент.НачатьПечатьТекста отправляет данные напрямую на устройство как на обычный принтер. Это гарантирует, что данные не попадут в отчеты ФН и налоговую базу.QR-код на пречеке. Он является обязательным атрибутом только фискального документа и формируется после его пробития на основе данных ФН.Розницу, проверьте наличие встроенных методов, таких как ВыполнитьПО10НапечататьПоследнийСлипЧек, но для формирования кастомного пречека описанный выше метод с НачатьПечатьТекста является наиболее надежным и гибким.Следуя этим шагам, вы сможете реализовать удобный инструмент для печати пречеков, не нарушая работу фискального регистратора и законодательных требований к кассовой дисциплине.