Как распечатать копию фискального чека на регистраторе Штрих-М в 1С?

Программист Торговля и дистрибуция
← На главную

При работе в торговых точках регулярно возникает необходимость выдать покупателю копию или дубликат ранее пробитого чека. Если в типовых или нетиповых конфигурациях 1С кнопка фискализации уже настроена, то повторная фискальная печать невозможна, так как она приведет к повторному учету выручки в фискальной памяти устройства. Разберем основные способы реализации печати копии чека на фискальных регистраторах «Штрих-М».

Способ 1. Построчный вывод произвольного нефискального документа из 1С

Это наиболее универсальный и надежный вариант. Он позволяет распечатать копию любого исторического документа из базы данных 1С за любую прошлую дату. При таком подходе из 1С на ленту регистратора отправляются обычные текстовые строки, не влияющие на фискальные счетчики и Z-отчет.

Рассмотрим алгоритм реализации:

  1. Создадим отдельную процедуру печати копии чека на основе существующей функции пробития фискального чека.
  2. Инициализируем открытие нефискального документа в драйвере устройства.
  3. Сформируем заголовок с обязательной пометкой «КОПИЯ ЧЕКА» или «ДУБЛИКАТ».
  4. В цикле выведем строки табличной части документа (наименования товаров, количество, цену и сумму) с помощью методов печати нефискального текста.
  5. Выведем итог и команду отрезки чековой ленты.

Посмотрим на пример прямого вызова методов COM-объекта драйвера «Штрих-М» (AddIn.DrvFR):


// Пример формирования нефискального документа копии чека через драйвер Штрих-М
Процедура ПечатьКопииЧека(ОбъектДрайвера, ДокументСсылка)
    
    // 1. Открываем нефискальный документ
    ОбъектДрайвера.OpenNonfiscalDocument();
    
    // 2. Печатаем заголовок чека
    ОбъектДрайвера.StringForPrinting = "================================";
    ОбъектДрайвера.PrintString();
    
    ОбъектДрайвера.StringForPrinting = "          КОПИЯ ЧЕКА            ";
    ОбъектДрайвера.PrintString();
    
    ОбъектДрайвера.StringForPrinting = "Документ: " + Строка(ДокументСсылка.Номер) + " от " + Формат(ДокументСсылка.Дата, "ДФ=dd.MM.yyyy");
    ОбъектДрайвера.PrintString();
    
    ОбъектДрайвера.StringForPrinting = "--------------------------------";
    ОбъектДрайвера.PrintString();
    
    // 3. Выводим строки товаров
    Для Каждого Стр Из ДокументСсылка.Товары Цикл
        ОбъектДрайвера.StringForPrinting = Стр.Номенклатура.Наименование;
        ОбъектДрайвера.PrintString();
        
        СтрокаПозиции = Строка(Стр.Количество) + " x " + Строка(Стр.Цена) + " = " + Строка(Стр.Сумма);
        ОбъектДрайвера.StringForPrinting = СтрокаПозиции;
        ОбъектДрайвера.PrintString();
    КонецЦикла;
    
    // 4. Печатаем итог
    ОбъектДрайвера.StringForPrinting = "================================";
    ОбъектДрайвера.PrintString();
    
    ОбъектДрайвера.StringForPrinting = "ИТОГО: " + Формат(ДокументСсылка.СуммаДокумента, "ЧДЦ=2; ЧГ=0");
    ОбъектДрайвера.PrintString();
    
    // 5. Закрываем нефискальный документ и отрезаем чек
    ОбъектДрайвера.CloseNonfiscalDocument();
    ОбъектДрайвера.CutCheck();
    
КонецПроцедуры

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

Способ 2. Использование аппаратной команды повтора чека

Проанализируем возможности самого фискального регистратора. В драйвере «Штрих-М» предусмотрена специальная команда RepeatDocument(), которая распечатывает копию чека непосредственно из внутренней памяти устройства.


// Печать последнего документа из буфера регистратора
ОбъектДрайвера.RepeatDocument();

Важные ограничения данного метода:

  1. Аппаратный повтор печатает исключительно последний закрытый фискальный документ.
  2. Если после закрытия чека кассир успел открыть новый чек, снять отчет без гашения (X-отчет), выполнить внесение/выемку или перезагрузить питание фискального регистратора, оперативная память очищается, и вызвать повтор этого документа больше не удастся.

Способ 3. Автоматическая печать копии через таблицы фискального регистратора

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

  1. Открываем утилиту «Тест драйвера ФР» и подключаемся к регистратору.
  2. Переходим в раздел «Таблицы».
  3. Находим Таблицу 1 («Настройки печати»).
  4. Устанавливаем параметр автоматической печати копий (значение 1 или 2).
  5. Сохраняем настройки в устройстве.

После применения этих параметров регистратор при каждом фискальном закрытии чека будет автоматически распечатывать дубликат с системной надписью «ПОВТОР ЧЕКА».

Рекомендации по форматированию нефискальной печати

При выводе копий через текстовые строки обратим внимание на ширину используемой чековой ленты:

  1. Для узкой ленты 57 мм длина одной строки обычно составляет от 32 до 40 символов в зависимости от установленного размера шрифта.
  2. Для широкой ленты 80 мм длина строки составляет 48–56 символов.
  3. Для формирования красивых колонок с выравниванием по правому краю (для цен и сумм) рекомендуется использовать функцию 1С Формат() или дополнять строки пробелами до фиксированной ширины ленты.
← На главную