С вступлением в силу изменений в Федеральный закон № 54-ФЗ (в частности, согласно 192-ФЗ), требования к оформлению кассовых чеков существенно ужесточились. Если ранее кассовый чек рассматривался преимущественно как документ для расчетов с физическими лицами, то теперь при осуществлении расчетов между организациями и индивидуальными предпринимателями наличными или с предъявлением электронных средств платежа, в чеке обязательно должны присутствовать реквизиты покупателя. Рассмотрим подробно, как технически реализовать эту задачу в старых конфигурациях на платформе 1С 8.2 (таких как «Управление торговлей 10.3») и самописных решениях.
Проанализируем ситуацию с точки зрения закона. Согласно пункту 6.1 статьи 4.7 закона № 54-ФЗ, при расчетах между юридическими лицами и ИП обязательными реквизитами являются:
Если мы не передадим эти данные в кассовый аппарат, чек будет считаться оформленным с нарушением, что может повлечь за собой штрафные санкции. Для обычных физических лиц (B2C) эти поля не являются обязательными, однако их можно печатать для внутренних нужд предприятия, например, для упрощения работы с гарантией и возвратами.
Большинство современных решений 1С используют Библиотеку подключаемого оборудования (БПО). В этом случае взаимодействие с драйвером ККТ происходит путем передачи XML-пакета, описывающего состав чека. Давайте разберем, какие атрибуты отвечают за данные покупателя.
Для передачи ФИО или названия организации используется тег 1227, а для ИНН — тег 1228. В структуре XML, которую формирует 1С, эти параметры должны располагаться в блоке описания общих параметров чека.
Рассмотрим пример формирования структуры XML в коде 1С:
// Формирование структуры параметров для печати чека
ДанныеЧека = Новый Структура;
ДанныеЧека.Вставить("CustomerName", "Иванов Иван Иванович"); // Тег 1227
ДанныеЧека.Вставить("CustomerINN", "771234567890"); // Тег 1228
// Пример формирования фрагмента XML через ЗаписьXML
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
ЗаписьXML.ЗаписатьАтрибут("CustomerName", СокрЛП(Объект.Контрагент.НаименованиеПолное));
ЗаписьXML.ЗаписатьАтрибут("CustomerINN", СокрЛП(Объект.Контрагент.ИНН));
ЗаписьXML.ЗаписатьКонецЭлемента();
Важно помнить: если вы передаете CustomerName, крайне желательно передавать и CustomerINN. Некоторые драйверы ККТ (например, старые версии Атол) могут игнорировать наименование, если ИНН не прошел проверку на валидность (контрольное число).
Если ваша конфигурация на 8.2 настолько старая, что не использует БПО, а работает напрямую через COM-объект драйвера (например, AddIn.FPrnM45 для Атола), то подход будет иным. Нам потребуется использовать метод setTag для передачи низкоуровневых тегов в фискальный накопитель перед закрытием чека.
Разберем последовательность действий по шагам:
OpenCheck или аналогичный).Пример кода для прямой работы с драйвером:
// Предположим, ОбъектДрайвера уже инициализирован и чек открыт
// Устанавливаем Тег 1227 (Наименование покупателя)
ОбъектДрайвера.TagNumber = 1227;
ОбъектДрайвера.TagType = 7; // Тип данных - строка
ОбъектДрайвера.TagValue = "ИП Сидоров Петр Сергеевич";
ОбъектДрайвера.WriteTag();
// Устанавливаем Тег 1228 (ИНН покупателя)
ОбъектДрайвера.TagNumber = 1228;
ОбъектДрайвера.TagType = 7; // Тип данных - строка
ОбъектДрайвера.TagValue = "500123456789";
ОбъектДрайвера.WriteTag();
// Только после записи тегов производим оплату и закрытие
ОбъектДрайвера.Payment();
ОбъектДрайвера.CloseCheck();
Выясним причину, по которой многие программисты опасаются печатать фамилии обычных покупателей. Если покупатель — физическое лицо, и вы печатаете его фамилию в чеке просто «для красоты» или сервиса, вы начинаете оперировать персональными данными. В сочетании с номером телефона или историей покупок это накладывает на организацию обязательства по соблюдению закона о ПД (152-ФЗ).
Если задача стоит именно в визуальном отображении фамилии на бумажной ленте, а не в передаче данных в налоговую (ОФД), можно воспользоваться методом печати нефискальной строки. Это гораздо проще и не требует поддержки тегов ФФД 1.05/1.2.
Рассмотрим, как это сделать:
// Печать произвольного текста в теле чека
ОбъектДрайвера.Caption = "Покупатель: " + ФамилияКлиента;
ОбъектДрайвера.PrintString();
Этот текст будет напечатан на чековой ленте, но не будет передан в электронном виде в налоговую инспекцию. Это идеальное решение для гарантийных отделов.
Проанализируем возможные препятствия, с которыми можно столкнуться при внедрении этой функциональности:
Таким образом, для реализации печати фамилии покупателя в 1С 8.2 нам необходимо определить цель: если это расчеты между компаниями — используем теги 1227 и 1228 в XML-пакете. Если это информационное поле для физлица — используем печать текстовых строк. Это обеспечит соответствие законодательству и удобство работы для сотрудников сервиса.