При оформлении кассового чека из документа Приходный кассовый ордер пользователи нередко сталкиваются с ситуацией: в форме предпросмотра электронного чека заполняется номер телефона или адрес электронной почты покупателя, однако в окне Представление (а также на самой бумажной ленте) контактные данные отсутствуют. При этом если заглянуть в регистр сведений или регистр накопления фискальных операций на вкладку XML, реквизиты CustomerPhone и CustomerEmail присутствуют и корректно передаются на ККТ.
Разберем, почему типовая конфигурация ведет себя именно так, какими нормативными актами обусловлена данная логика и как технически реализовать вывод контактов контрагента в печатный макет и на кассовую ленту.
Проанализируем архитектуру фискализации в типовых решениях на базе Библиотеки подключаемого оборудования (БПО):
Прежде чем приступать к доработке, важно проанализировать правовые последствия. Номер телефона и личный e-mail физического лица (в том числе зарегистрированного как ИП) относятся к персональным данным. Бумажный чек после покупки нередко остается на кассовом узле или выбрасывается в общедоступных местах. Печать открытых контактных данных на бумажном носителе создает прямые риски нарушения Федерального закона № 152-ФЗ «О персональных данных», так как чек может попасть в руки третьих лиц без согласия субъекта. Именно поэтому разработчики типовых решений намеренно исключили вывод тега 1008 на печать.
Если требуется скорректировать внутренний табличный документ программы (окно Представление), доработку можно выполнить в расширении конфигурации без снятия с поддержки.
Рассмотрим, где формируются данные для макета:
ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыОперацииФискализацииЧека(). В этой структуре присутствуют поля покупателя.ШаблоныФискальныхДокументовСлужебный. Точкой входа служит процедура ШаблонКассовыйЧек(), внутри которой вызывается процедура формирования шапки — ШаблонКассовыйЧекШапка().Подключим расширение и перехватим процедуру формирования шапки с помощью директивы &После:
&После("ШаблонКассовыйЧекШапка")
Процедура Расш1_ШаблонКассовыйЧекШапка(ТабличныйДокумент, ПараметрыЧека, ДанныеШаблона)
// Проверяем наличие контактных данных покупателя
НомерТелефона = "";
Если ПараметрыЧека.Свойство("CustomerPhone", НомерТелефона) И Не ПустаяСтрока(НомерТелефона) Тогда
Область = ТабличныйДокумент.ПолучитьОбласть("Строка|Колонка");
Область.Параметры.Текст = "Тел. покупателя: " + НомерТелефона;
ТабличныйДокумент.Вывести(Область);
КонецЕсли;
ЭлектроннаяПочта = "";
Если ПараметрыЧека.Свойство("CustomerEmail", ЭлектроннаяПочта) И Не ПустаяСтрока(ЭлектроннаяПочта) Тогда
Область = ТабличныйДокумент.ПолучитьОбласть("Строка|Колонка");
Область.Параметры.Текст = "E-mail покупателя: " + ЭлектроннаяПочта;
ТабличныйДокумент.Вывести(Область);
КонецЕсли;
КонецПроцедуры
Так как прошивка ККТ игнорирует тег 1008 при физической печати, стандартной передачи параметра CustomerPhone в драйвер недостаточно. Чтобы текст гарантированно напечатался на бумаге, его необходимо передать в кассу в виде нефискальной текстовой строки.
Разберем алгоритм решения:
TextString) в область подвала или клише чека. Прошивка ККТ распечатает такой блок как обычный произвольный текст, не нарушая фискальную целостность документа.Если контрагенту или руководству необходимо подтверждение наличия контактных данных в чеке, можно использовать стандартные средства: