При работе в торговых точках регулярно возникает необходимость выдать покупателю копию или дубликат ранее пробитого чека. Если в типовых или нетиповых конфигурациях 1С кнопка фискализации уже настроена, то повторная фискальная печать невозможна, так как она приведет к повторному учету выручки в фискальной памяти устройства. Разберем основные способы реализации печати копии чека на фискальных регистраторах «Штрих-М».
Это наиболее универсальный и надежный вариант. Он позволяет распечатать копию любого исторического документа из базы данных 1С за любую прошлую дату. При таком подходе из 1С на ленту регистратора отправляются обычные текстовые строки, не влияющие на фискальные счетчики и Z-отчет.
Рассмотрим алгоритм реализации:
Посмотрим на пример прямого вызова методов 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С, аналогичную операцию выполняем через обработку обслуживания с помощью метода НапечататьСтроки(), передавая массив подготовленных текстовых строк.
Проанализируем возможности самого фискального регистратора. В драйвере «Штрих-М» предусмотрена специальная команда RepeatDocument(), которая распечатывает копию чека непосредственно из внутренней памяти устройства.
// Печать последнего документа из буфера регистратора
ОбъектДрайвера.RepeatDocument();
Важные ограничения данного метода:
Если специфика торговой точки требует обязательной выдачи копии при каждой операции продажи, настраивать программный код 1С не требуется. Эту задачу можно решить на уровне прошивки фискального аппарата:
1 или 2).После применения этих параметров регистратор при каждом фискальном закрытии чека будет автоматически распечатывать дубликат с системной надписью «ПОВТОР ЧЕКА».
При выводе копий через текстовые строки обратим внимание на ширину используемой чековой ленты:
Формат() или дополнять строки пробелами до фиксированной ширины ленты.