Как реализовать печать фамилии и реквизитов покупателя в чеке на 1С 8.2

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

С вступлением в силу изменений в Федеральный закон № 54-ФЗ (в частности, согласно 192-ФЗ), требования к оформлению кассовых чеков существенно ужесточились. Если ранее кассовый чек рассматривался преимущественно как документ для расчетов с физическими лицами, то теперь при осуществлении расчетов между организациями и индивидуальными предпринимателями наличными или с предъявлением электронных средств платежа, в чеке обязательно должны присутствовать реквизиты покупателя. Рассмотрим подробно, как технически реализовать эту задачу в старых конфигурациях на платформе 1С 8.2 (таких как «Управление торговлей 10.3») и самописных решениях.

Законодательная база: почему это необходимо

Проанализируем ситуацию с точки зрения закона. Согласно пункту 6.1 статьи 4.7 закона № 54-ФЗ, при расчетах между юридическими лицами и ИП обязательными реквизитами являются:

  1. Наименование покупателя (название организации или ФИО индивидуального предпринимателя).
  2. ИНН покупателя.
  3. Сведения о стране происхождения товара (для импортных товаров).
  4. Регистрационный номер таможенной декларации (ГТД).
  5. Сумма акциза (если применимо).

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

Техническая реализация через XML-пакет (БПО)

Большинство современных решений 1С используют Библиотеку подключаемого оборудования (БПО). В этом случае взаимодействие с драйвером ККТ происходит путем передачи XML-пакета, описывающего состав чека. Давайте разберем, какие атрибуты отвечают за данные покупателя.

Для передачи ФИО или названия организации используется тег 1227, а для ИНН — тег 1228. В структуре XML, которую формирует 1С, эти параметры должны располагаться в блоке описания общих параметров чека.

Рассмотрим пример формирования структуры XML в коде 1С:


// Формирование структуры параметров для печати чека
ДанныеЧека = Новый Структура;
ДанныеЧека.Вставить("CustomerName", "Иванов Иван Иванович"); // Тег 1227
ДанныеЧека.Вставить("CustomerINN", "771234567890");         // Тег 1228

// Пример формирования фрагмента XML через ЗаписьXML
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
ЗаписьXML.ЗаписатьАтрибут("CustomerName", СокрЛП(Объект.Контрагент.НаименованиеПолное));
ЗаписьXML.ЗаписатьАтрибут("CustomerINN", СокрЛП(Объект.Контрагент.ИНН));
ЗаписьXML.ЗаписатьКонецЭлемента();

Важно помнить: если вы передаете CustomerName, крайне желательно передавать и CustomerINN. Некоторые драйверы ККТ (например, старые версии Атол) могут игнорировать наименование, если ИНН не прошел проверку на валидность (контрольное число).

Реализация через прямой вызов методов драйвера (COM-объект)

Если ваша конфигурация на 8.2 настолько старая, что не использует БПО, а работает напрямую через COM-объект драйвера (например, AddIn.FPrnM45 для Атола), то подход будет иным. Нам потребуется использовать метод setTag для передачи низкоуровневых тегов в фискальный накопитель перед закрытием чека.

Разберем последовательность действий по шагам:

  1. Открываем чек (метод OpenCheck или аналогичный).
  2. Регистрируем позиции (товары/услуги).
  3. Перед формированием итогов и закрытием чека вызываем методы записи тегов.
  4. Закрываем чек.

Пример кода для прямой работы с драйвером:


// Предположим, ОбъектДрайвера уже инициализирован и чек открыт
// Устанавливаем Тег 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. Версия ФФД (Формат фискальных данных): Передача тегов 1227 и 1228 полноценно поддерживается в ФФД версии 1.05, 1.1 и 1.2. Если касса работает на старом формате 1.0 (который сейчас практически не встречается), данные переданы не будут.
  2. Прошивка ККТ: Даже если 1С корректно передает данные, старая прошивка самого кассового аппарата может не знать о существовании таких тегов. Убедитесь, что прошивка актуальна.
  3. Длина строки: Тег 1227 имеет ограничение по длине (обычно до 256 символов). Однако ширина кассовой ленты (57мм или 80мм) накладывает свои ограничения на читаемость. Старайтесь сокращать длинные наименования организаций до общепринятых (например, «Общество с ограниченной ответственностью» заменять на «ООО»).
  4. Версия компоненты 1С: В конфигурациях на 8.2 часто используются внешние компоненты связи с кассой. Если компонента была написана до 2018 года, она может просто «вырезать» незнакомые ей атрибуты XML. Потребуется обновление обработки обслуживания или самой компоненты драйвера.

Таким образом, для реализации печати фамилии покупателя в 1С 8.2 нам необходимо определить цель: если это расчеты между компаниями — используем теги 1227 и 1228 в XML-пакете. Если это информационное поле для физлица — используем печать текстовых строк. Это обеспечит соответствие законодательству и удобство работы для сотрудников сервиса.

← На главную