При работе с ККТ-онлайн в конфигурации Управление торговлей 10.3 (УТ 10.3) часто возникает специфическая задача: передать в фискальный чек данные платежного агента. Это требование продиктовано федеральным законом 54-ФЗ и форматами фискальных данных (ФФД), согласно которым, если организация выступает в роли агента, комиссионера или поверенного, в чеке должны быть указаны контактные данные агента и поставщика, а также ИНН поставщика. Разберем подробно, как это реализовать на уровне кода 1С, и почему стандартные инструменты тестирования могут вводить в заблуждение.
Для начала разберем, как происходит процесс формирования чека. В современных реалиях 1С:УТ 10.3 (с установленными обновлениями под 54-ФЗ) не просто посылает команды на построчную печать текста, а формирует структурированный XML-пакет. Этот пакет содержит все данные чека: от кассира и системы налогообложения до каждой товарной позиции с ее налогами и признаками способа расчета.
Проанализируем программную цепочку вызовов. Основная логика фискализации обычно сосредоточена в общем модуле МенеджерОборудованияКлиент или специализированных обработках обслуживания. Ключевым моментом является вызов метода драйвера СформироватьЧек. Рассмотрим пример кода, который инициирует этот процесс:
Результат = ОбъектДрайвера.СформироватьЧек(
ПараметрыПодключения.ИДУстройства,
Кассир,
Электронно,
ДанныеЧека,
НомерЧека,
НомерСмены,
ФискальныйПризнак,
АдресСайтаПроверки
);
Здесь переменная ДанныеЧека является критически важной. Она представляет собой строку в формате XML. Если вы пытаетесь добавить данные агента, просто редактируя макет текстового товарного чека, вы не добьетесь результата, так как фискальный накопитель (ФН) игнорирует нефискальные строки макета при формировании признака расчета. Все данные должны быть строго типизированы внутри XML-структуры.
Чтобы ККТ восприняла информацию об агенте, параметры должны соответствовать определенным тегам ФФД. Выясним, какие именно теги нам необходимы:
Рассмотрим подробнее, как должна выглядеть структура внутри блока FiscalString (для каждой позиции) или в общих параметрах чека. Если мы используем формат ФФД 1.05 и выше, данные могут передаваться для каждой позиции отдельно, что позволяет пробивать в одном чеке товары разных поставщиков. Проанализируем пример фрагмента XML, который должен попасть в переменную ДанныеЧека:
<AgentData>
<AgentType>PAYMENT_AGENT</AgentType>
<PaymentAgentPhone>+79991112233</PaymentAgentPhone>
</AgentData>
<SupplierData>
<SupplierINN>7700000000</SupplierINN>
<SupplierName>ООО Поставщик</SupplierName>
<SupplierPhone>+74950000000</SupplierPhone>
</SupplierData>
Важный нюанс: если вы передаете телефон агента, но не передаете AgentType (Признак агента), драйвер ККТ, скорее всего, проигнорирует эти данные, так как они будут считаться неполными или некорректными для данного типа операции.
Многие разработчики сталкиваются с ситуацией: код написан, XML сформирован верно, но при использовании стандартного Эмулятора ККТ из состава 1С данные об агенте в чеке не появляются. Выясним причину этого поведения.
Стандартный эмулятор 1С предназначен для базовой проверки логики работы программы: открывается ли смена, передаются ли суммы, печатаются ли строки товаров. Он часто не обучен визуализировать специфические теги, такие как 1057 или 1073. Это не означает, что код работает неверно. Это ограничение самого инструмента визуализации эмулятора.
Для полноценного тестирования рекомендуется использовать:
Разберем по шагам, как внести изменения в конфигурацию УТ 10.3:
Шаг 1. Поиск места формирования XML. Найдите функцию СформироватьДанныеЧека (название может варьироваться в зависимости от релиза, часто находится в общих модулях, связанных с подключаемым оборудованием). Именно здесь происходит обход табличной части товаров и заполнение структуры параметров.
Шаг 2. Расширение структуры позиции. При обходе товаров необходимо добавить заполнение данных об агенте. В коде это может выглядеть так:
// В цикле обхода товаров
ДанныеПозиции = Новый Структура();
// ... заполнение базовых полей (Наименование, Цена, Количество) ...
Если ЭтоАгентскаяСхема Тогда
ДанныеПозиции.Вставить("ПризнакАгента", Перечисления.ПризнакиАгента.ПлатежныйАгент);
ДанныеПозиции.Вставить("ДанныеПоставщика", Новый Структура("ИНН, Наименование, Телефон", ИННПоставщика, НаимПоставщика, ТелПоставщика));
ДанныеПозиции.Вставить("ТелефонПлатежногоАгента", КонтактныйТелефонАгента);
КонецЕсли;
Шаг 3. Передача в драйвер. Убедитесь, что используемая обработка обслуживания (драйвер) поддерживает версию ФФД 1.05 или 1.2. Если вы используете старые обработки ATOL_kkt.epf, их может потребоваться обновить или доработать, чтобы они корректно упаковывали новые поля структуры в итоговый XML-пакет.
Проанализируем ситуацию, когда код верен, XML сформирован правильно, используется реальная касса, но данные все равно не печатаются. Причина может крыться в настройках самой ККТ.
Регистрация ККТ: При фискализации кассы (через утилиту регистрации производителя) обязательно должны быть установлены флажки соответствующих видов деятельности. Если касса не зарегистрирована как "Платежный агент" или "Агент", она может блокировать печать соответствующих тегов на аппаратном уровне, даже если драйвер их передает.
Версия прошивки: Для корректной работы с агентскими схемами прошивка кассы должна поддерживать актуальные форматы фискальных данных. Старые версии прошивок часто игнорируют теги поставщика внутри позиции чека.
Подводя итог, отметим, что решение задачи кроется не в правке макета чека, а в формировании корректной XML-структуры, передаваемой методу СформироватьЧек. Помните о важности заполнения ИНН поставщика (тег 1226) — без него большинство драйверов просто отбросят остальные агентские теги как невалидные.