Как реализовать печать нефискального пречека из 1С на ККТ?

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

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

Понимание принципа работы пречека

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

Шаг 1: Подготовка к разработке

Не рекомендуется вносить изменения напрямую в конфигурацию. Мы будем использовать расширения конфигурации. Это позволит сохранить целостность основной конфигурации и упростит последующие обновления системы. Создайте расширение и добавьте в него форму РМК (рабочего места кассира).

Шаг 2: Создание кнопки «Пречек»

На форме РМК разместите новую кнопку, например, с названием «Пречек». В обработчике команды этой кнопки нам предстоит собрать данные о товарах из табличной части документа и сформировать строку для вывода на печать.

Шаг 3: Программная реализация формирования текста

Для того чтобы пречек выглядел корректно, необходимо учитывать ширину чековой ленты (обычно 32, 36 или 48 символов). Рассмотрим пример кода, который формирует содержимое пречека:


&НаКлиенте
Процедура ПречекПосле(Команда)
    Если Объект.Товары.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;

    ТекстПечати = Символы.ПС + "ПРЕДВАРИТЕЛЬНЫЙ ЧЕК" + Символы.ПС + "------------------------------" + Символы.ПС;
    СуммаИтого = 0;
    
    Для каждого Стр из Объект.Товары Цикл
        СтруктураНоменклатуры = Новый Структура;
        ПолучитьСтруктуруНоменклатурыНаСервере(СтруктураНоменклатуры, Стр.Номенклатура);
        
        ТекстПечати = ТекстПечати + Стр.НомерСтроки + ". " + СтруктураНоменклатуры.Наименование + Символы.ПС;
        ТекстПечати = ТекстПечати + Формат(Стр.Цена, "ЧДЦ=2") + " х " + Формат(Стр.Количество, "ЧГ=0") + " = " + Формат(Стр.Сумма, "ЧДЦ=2") + Символы.ПС;
        СуммаИтого = СуммаИтого + Стр.Сумма;
    КонецЦикла;

    ТекстПечати = ТекстПечати + "------------------------------" + Символы.ПС;
    ТекстПечати = ТекстПечати + "ИТОГО: " + Формат(СуммаИтого, "ЧДЦ=2") + " руб.";
    
    МенеджерОборудованияКлиент.НачатьПечатьТекста(,, ТекстПечати);
КонецПроцедуры

Шаг 4: Форматирование наименований

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


&НаСервереБезКонтекста
Процедура ПолучитьСтруктуруНоменклатурыНаСервере(СтруктураНоменклатуры, Номенклатура)
    СтруктураНоменклатуры = Новый Структура;
    Наименование = Номенклатура.Наименование;
    // Логика разбиения строки по 32 символа для примера
    Наим1 = Лев(Наименование, 32);
    // Добавление оставшейся части, если она есть
    СтруктураНоменклатуры.Вставить("Наименование", Наим1);
КонецПроцедуры

Важные замечания

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

← На главную