При реализации агентских схем (комиссионная торговля, прием платежей в пользу третьих лиц) перед разработчиком 1С встает задача корректного отображения данных поставщика в кассовом чеке. Просто включить "галочку" в драйвере недостаточно — необходимо обеспечить передачу специфических тегов в соответствии с ФФД (форматом фискальных данных) для каждой позиции чека. В этой статье мы разберем, как правильно настроить программный вывод агента для ККТ АТОЛ.
Прежде чем приступать к написанию кода в 1С, проанализируем состояние самой кассы. Если при первичной регистрации или перерегистрации ККТ в фискальном накопителе не был установлен признак «Агент» (или конкретный тип: комиссионер, поверенный), касса будет игнорировать любые данные об агенте, передаваемые программно. Это приведет либо к печати обычного чека без агентских реквизитов, либо к ошибке «Некорректное состояние ККТ».
Для проверки выполним следующие действия в утилите "Тест драйвера ККТ" (АТОЛ 10):
Если флаг отсутствует, потребуется перерегистрация кассы без замены ФН с установкой нужного признака деятельности.
Выясним, какие именно данные мы должны передать на кассу. Согласно требованиям ФФД (особенно для версий 1.05, 1.1 и 1.2), для агентских продаж критически важны следующие теги:
Рассмотрим, как подготовить данные в 1С для передачи в драйвер. Современные конфигурации используют объект МенеджерОборудованияКлиент и структуру ПараметрыЧека. Основная ошибка заключается в попытке передать данные агента в "шапку" чека. На самом деле, если чек содержит хотя бы одну не агентскую позицию (смешанный чек), данные должны передаваться внутри массива ПозицииЧека.
Проанализируем пример кода для формирования структуры данных одной позиции:
// Создаем структуру для данных поставщика
ДанныеПоставщика = Новый Структура;
ДанныеПоставщика.Вставить("Наименование", "ООО Поставщик Плюс");
ДанныеПоставщика.Вставить("Телефон", "88005553535");
// Создаем структуру данных агента
ДанныеАгента = Новый Структура;
ДанныеАгента.Вставить("ПризнакАгента", 6); // 6 - значение для комиссионера по ФФД
ДанныеАгента.Вставить("ДанныеПоставщика", ДанныеПоставщика);
ДанныеАгента.Вставить("ИННПоставщика", "770000000000");
// Добавляем данные в строку чека
СтрокаЧека = Новый Структура;
СтрокаЧека.Вставить("Наименование", "Агентский товар");
СтрокаЧека.Вставить("Количество", 1);
СтрокаЧека.Вставить("Цена", 100);
СтрокаЧека.Вставить("Сумма", 100);
СтрокаЧека.Вставить("СтавкаНДС", "20");
СтрокаЧека.Вставить("AgentData", ДанныеАгента); // ВАЖНО: Ключ должен соответствовать стандарту БСП
ПозицииЧека.Добавить(СтрокаЧека);
Обратите внимание, что для драйверов АТОЛ версии 10 ключи внутри структуры могут называться AgentData и SupplierData. Если вы используете интеграционную компоненту, соответствующую стандартам 1С, система сама преобразует эти структуры в нужные теги.
Если ваша интеграция реализована через прямую отправку JSON-заданий в драйвер (обходя стандартные механизмы БСП), структура объекта items должна выглядеть следующим образом. Разберем по шагам наполнение объекта:
{
"type": "position",
"name": "Комиссионный товар",
"price": 500.0,
"quantity": 1,
"amount": 500.0,
"tax": {
"type": "none"
},
"agentInfo": {
"type": "commissioner",
"supplierInfo": {
"phones": ["+79991234567"],
"name": "ООО Склад-Опт",
"inn": "1234567890"
}
}
}
В данном примере поле agentInfo.type принимает строковое значение (например, commissioner, none, agent), которое драйвер автоматически конвертирует в цифровой код тега 1222 для ФН.
Проанализируем ситуацию, когда код написан верно, но данные в чеке не появляются. Выделим основные причины:
FiscalString) не поддерживают передачу тегов. Всегда используйте методы формирования чека через XML-пакет или JSON-задание.Посмотрим на ситуацию со стороны ОФД. После пробития чека обязательно зайдите в личный кабинет вашего оператора фискальных данных. Проверьте, появились ли в карточке чека реквизиты поставщика. Если в бумажном чеке данных нет, а в электронном они присутствуют — задача выполнена корректно с точки зрения закона, а отсутствие на бумаге связано с экономией места в шаблоне чека ККТ.
Выясним причину, если касса выдает ошибку «Ошибка 0x34». Это часто означает попытку передать ИНН поставщика некорректной длины (например, с лишними пробелами или в неверном формате для физлица/юрлица). Всегда очищайте строку ИНН от лишних символов перед отправкой.
Таким образом, мы выяснили, что для вывода агента необходимо: правильно фискализировать кассу, сформировать вложенную структуру данных для каждой позиции в 1С и передать обязательный набор тегов (тип агента, ИНН и телефон поставщика).