С введением новых форматов фискальных данных (ФФД 1.05 и 1.2) при расчетах между организациями и индивидуальными предпринимателями стало обязательным указывать в чеке наименование покупателя и его ИНН. В старых конфигурациях, таких как 1С:Управление торговлей 10.3, эта функциональность часто отсутствует в типовом решении, даже если компоненты БПО были частично обновлены. В данной статье мы подробно разберем, как программно внести изменения в код, чтобы данные покупателя корректно передавались на фискальный регистратор.
Для начала проанализируем, как вообще происходит процесс печати. В отличие от современных конфигураций на управляемых формах, где используется БПО (Библиотека подключаемого оборудования) в чистом виде, в УТ 10.3 связь с кассовым аппаратом осуществляется через внешние обработки обслуживания или специальные модули интеграции. Процесс выглядит следующим образом: программа собирает данные из документа (например, Приходный кассовый ордер или Чек ККМ), формирует структуру XML и передает её драйверу торгового оборудования. Драйвер, в свою очередь, интерпретирует этот XML и дает команду ККТ на печать.
Главная проблема заключается в том, что в старом коде формирования XML-пакета просто отсутствуют узлы, отвечающие за реквизиты покупателя (теги 1227 и 1228). Наша задача — найти место формирования этой строки и добавить туда нужные атрибуты.
Разберем, где именно в конфигурации или во внешних файлах находятся нужные нам процедуры. Основная логика формирования чека обычно скрыта в одном из двух мест:
TradeWareEpf в каталоге установки базы или специальная папка на сервере). Ищите обработку, которая выбрана в настройках торгового оборудования.ПодключаемоеОборудованиеУниверсальныйДрайверКлиент, а именно в функции ФискализацияЧека.Рассмотрим подробнее функцию формирования XML. Нам нужно найти метод, который подготавливает текст XML-пакета. Обычно он называется СформироватьЧек или ПодготовитьДанныеДляФискализации.
Проанализируем структуру XML, которую ожидает современный драйвер (например, АТОЛ 10-й версии). Информация о покупателе должна содержаться в секции CustomerInfo. Если ваш код формирует XML вручную с помощью объекта ЗаписьXML, вам необходимо добавить запись атрибутов CustomerName и CustomerINN.
Посмотрим на пример того, как должен выглядеть фрагмент кода, отвечающий за добавление этих данных:
// Предположим, у нас есть СтруктураПараметров, куда мы передали данные контрагента
Если СтруктураПараметров.Свойство("ПокупательНаименование") Тогда
ЗаписьXML.ЗаписатьАтрибут("CustomerName", СтруктураПараметров.ПокупательНаименование);
КонецЕсли;
Если СтруктураПараметров.Свойство("ПокупательИНН") И ЗначениеЗаполнено(СтруктураПараметров.ПокупательИНН) Тогда
ЗаписьXML.ЗаписатьАтрибут("CustomerINN", СокрЛП(СтруктураПараметров.ПокупательИНН));
КонецЕсли;
Важно помнить, что ИНН покупателя должен содержать только цифры и соответствовать формату (10 или 12 знаков). Если в базе ИНН записан с пробелами или префиксами, обязательно используйте функции очистки строки перед передачей в XML.
Выясним, как данные из документа попадают в функцию печати. В УТ 10.3 при нажатии кнопки "Чек" в документе Приходный кассовый ордер вызывается процедура печати из модуля объекта. Вам необходимо убедиться, что при формировании структуры, которая передается в обработку обслуживания, заполняются поля с ИНН и наименованием.
Найдите в модуле документа место, где заполняется переменная ПараметрыЧека (или аналогичная). Добавьте туда получение данных из реквизита Контрагент:
ПараметрыЧека.Вставить("ПокупательНаименование", ДокументОбъект.Контрагент.НаименованиеПолное);
ПараметрыЧека.Вставить("ПокупательИНН", ДокументОбъект.Контрагент.ИНН);
Обратите внимание: Если вы печатаете чек из документа Чек ККМ, имейте в виду, что этот документ предназначен для розничных продаж физическим лицам. В рознице по закону ИНН покупателя не печатается. Если вам нужно отразить продажу между юрлицами, используйте связку Реализация товаров и услуг + Приходный кассовый ордер.
Даже если программный код написан верно, данные могут не появиться в чеке по техническим причинам. Проанализируем состояние оборудования:
Если ваша УТ 10.3 использует интеграцию через БПО, то основная работа по формированию XML ложится на общий модуль МенеджерОборудованияВызовСервера. В нем есть функция СформироватьОбъектФискализации. В этой функции необходимо найти формирование таблицы ДанныеОПокупателе.
Рассмотрим пример заполнения данных в формате БПО:
ДанныеОПокупателе = Новый Структура;
ДанныеОПокупателе.Вставить("Наименование", СокрЛП(Объект.Контрагент.Наименование));
ДанныеОПокупателе.Вставить("ИНН", СокрЛП(Объект.Контрагент.ИНН));
ПараметрыФискализации.Вставить("Покупатель", ДанныеОПокупателе);
После внесения изменений обязательно выполните тестовую продажу на 1 рубль (или используйте эмулятор), чтобы убедиться, что теги корректно попадают в электронную форму чека. Проверить это можно, открыв Личный кабинет ОФД — там данные покупателя должны отобразиться в подробной информации о чеке, даже если на бумажной ленте они настроены на краткое отображение.
Подведем итоги. Чтобы добавить ИНН покупателя в чек в УТ 10.3, необходимо:
CustomerName и CustomerINN.Такой системный подход гарантирует соответствие ваших кассовых операций актуальному законодательству даже на старых конфигурациях 1С.