Почему ИНН кассира (тег 1203) не передается в ОФД и как это настроить в 1С?

Программист 1С v7.7 1С:Управление торговлей Торговля и дистрибуция
← На главную

При переходе на форматы фискальных данных 1.05, 1.1 и 1.2 многие разработчики и системные администраторы сталкиваются со следующей проблемой: ФИО кассира успешно печатается на чеке и отправляется оператору фискальных данных (ОФД), но ИНН кассира (тег 1203) упорно не отображается в личном кабинете ОФД. При этом сама касса при пробитии чеков не выдает никаких ошибок.

В этой статье мы подробно разберем, почему возникает данная проблема, рассмотрим законодательные и технические нюансы передачи этого реквизита, а также приведем готовые примеры кода для интеграции ККТ АТТОЛ и Штрих-М с учетными системами 1С.

Законодательные нюансы: почему ИНН кассира не видно на бумаге?

Первое и самое важное правило, о котором часто забывают: согласно требованиям ФНС к реквизитам фискальных документов, тег 1203 («ИНН кассира») является исключительно электронным реквизитом. Это означает следующее:

  1. ИНН кассира по закону не должен печататься на бумажном чеке. На бумаге выводятся только должность и ФИО лица, осуществившего расчет (тег 1021).
  2. В ОФД и налоговую службу этот тег передаваться обязан (если у физического лица-кассира вообще имеется ИНН).
  3. Большинство ОФД в стандартном интерфейсе личного кабинета показывают визуальную копию чека, имитирующую бумажную ленту. Соответственно, в этом шаблоне ИНН кассира не выводится. Чтобы убедиться в его наличии, необходимо переключить режим просмотра чека в личном кабинете ОФД на «Теги», «Свойства» или скачать JSON/XML-версию документа.

Техническая особенность работы через 1С и БПО

Если вы используете типовую конфигурацию 1С (например, «Розница 2.2/2.3», «Управление торговлей 11» или «Бухгалтерия предприятия 3.0») со встроенной Библиотекой подключаемого оборудования (БПО), обмен данными с ККТ идет через XML-пакеты.

В XML-схеме БПО ИНН кассира передается с помощью атрибута CashierVATIN в параметрах чека. Проанализируем критически важную уязвимость этого механизма: если в справочнике «Пользователи» (или связанных физических лицах) в 1С у текущего сотрудника не заполнен реквизит «ИНН», 1С отправляет в XML пустое значение: CashierVATIN="".

Драйвер ККТ, получая пустую строку, принудительно затирает внутренние настройки кассы. Даже если вы вручную запрограммировали ИНН кассиров во внутренние таблицы кассового аппарата (например, в таблицу паролей кассиров), пустой параметр из 1С полностью очистит эти данные в момент пробития чека. Поэтому заполнение ИНН в карточке пользователя 1С является обязательным шагом.

Решение проблемы для ККТ АТОЛ (ДТО 8 и ДТО 10)

Рассмотрим ситуацию с самописными обработками или конфигурациями на обычных формах (например, «Управление торговлей 10.3» или «Торговля и Склад 7.7»), где подключение к АТОЛ реализовано через прямое обращение к COM-объекту драйвера.

Выясним причину, по которой ИНН кассира может не передаваться при программной отправке. Все дело в строгой последовательности вызова команд. Запись атрибутов кассира должна производиться в строго определенный момент жизненного цикла чека. Если передать тег 1203 слишком рано или слишком поздно, ККТ проигнорирует команду без генерации ошибок.

Проанализируем правильный алгоритм формирования чека для ККТ АТОЛ:

  1. Устанавливаем режим регистрации (Mode = 1).
  2. Вызываем команду начала нового документа (NewDocument()).
  3. Записываем реквизиты кассира (ФИО — тег 1021 и ИНН — тег 1203).
  4. Вызываем команду открытия чека (OpenCheck()). Это критически важный шаг! Если вызвать OpenCheck() до записи атрибутов кассира, данные затрутся или не запишутся в ФН.
  5. Регистрируем позиции чека. При использовании ФФД 1.05 вместо устаревшего метода Registration() необходимо использовать конструкцию BeginItem() ... EndItem() для корректной передачи признака предмета расчета.
  6. Проводим оплату и закрываем чек. Обратите внимание, что даже при оплате картой в метод закрытия чека необходимо принудительно передавать сумму оплаты, иначе касса сбросит параметры чека на дефолтного «Кассира 01» без ИНН.

Посмотрим на пример правильной программной реализации печати чека с ИНН кассира через драйвер АТОЛ:


// Подключаем устройство и переходим в режим регистрации
ECR.Password = "1";
ECR.Mode = 1;
ECR.SetMode();

// Инициализируем новый документ
ECR.NewDocument();

// Записываем ФИО кассира (Тег 1021)
ECR.AttrNumber = 1021;
ECR.AttrValue = СокрЛП(ИмяКассира);
ECR.WriteAttribute();

// Записываем ИНН кассира (Тег 1203) - обязательно строка из 12 цифр
Если ПустаяСтрока(ИННКассира) = 0 Тогда
    ECR.AttrNumber = 1203;
    ECR.AttrValue = СокрЛП(ИННКассира);
    ECR.WriteAttribute();
КонецЕсли;

// Указываем тип чека (1 - Приход) и открываем чек
ECR.CheckType = 1;
ECR.CheckMode = 1;
ECR.OpenCheck();

// Передаем систему налогообложения (Тег 1055), например, УСН доход - 2
ECR.AttrNumber = 1055;
ECR.AttrValue = 2;
ECR.WriteAttribute();

// Цикл по строкам табличной части документа
ТЧ.ВыбратьСтроки();
Пока ТЧ.ПолучитьСтроку() = 1 Цикл
    ECR.BeginItem();
    
    ECR.Name = Строка(СокрЛП(ТЧ.Номенклатура.Наименование));
    ECR.Price = ТЧ.Цена;
    ECR.Quantity = ТЧ.Количество;
    ECR.Summ = ТЧ.Сумма;
    ECR.Department = 1;
    
    // Передаем признак предмета расчета (Тег 1212), например, 1 - Товар
    ECR.ItemType = 1; 
    
    ECR.EndItem();
КонецЦикла;

// Закрытие чека с оплатой (например, наличные - тип 0)
ECR.TypeClose = 0;
ECR.Summ = ИтогЧека;
ECR.Payment();
ECR.CloseCheck();

Решение проблемы для ККТ Штрих-М

Для кассовых аппаратов семейства Штрих-М (использующих драйверы DrvFR.dll или smdrvfr.dll) логика работы с тегами ФФД имеет свои особенности. Передача произвольных тегов в фискальный накопитель осуществляется через метод FNSendTag() или FNSendTagOperation().

Важно помнить, что в прошивках Штрих-М передача тега 1203 («ИНН кассира») воспринимается корректно только при открытом чеке. Перед открытием чека передавать данный тег бесполезно. Также крайне важно использовать актуальную версию библиотеки драйвера (рекомендуется smDrvFR1CLib20.dll вместо устаревшей smDrvFR1CLib.dll), иначе новые теги ФФД 1.05 не будут обрабатываться корректно.

Рассмотрим пример кода для ККТ Штрих-М, демонстрирующий отправку ИНН кассира:


// Входим в режим регистрации чека
Объект.Password = ПарольКассира;
// Открываем чек продажи
Объект.OpenReceipt(); 

// Передача ИНН кассира через FNSendTag осуществляется СТРОГО после открытия чека
Объект.Password = ПарольКассира;
Объект.НомерТега = 1203;         // TagNumber для ИНН кассира
Объект.ТипТега = 7;              // TagType (7 - Строка)     
Объект.ЗначениеТегаСтрока = СокрЛП(ИННКассира);      
Объект.FNSendTag();              // Выполняем отправку тега в ФН

// Далее идет стандартная регистрация позиций и закрытие чека
Объект.Quantity = Количество;
Объект.Price = Цена;
Объект.StringForPrinting = НаименованиеТовара;
Объект.Summ1 = СуммаНаличные;
Объект.CloseReceipt();

Если вы хотите передать ИНН кассира при операции открытия смены, последовательность команд будет аналогичной. Данные отправляются сразу перед вызовом основного метода открытия сессии:


Если Объект.РежимККМ = 4 Тогда // Смена закрыта
    Объект.Password = ПарольАдминистратора;
    Объект.НомерТега = 1203;
    Объект.ТипТега = 7;
    Объект.ЗначениеТегаСтрока = СокрЛП(ИННКассира);
    Объект.FNSendTag(); 
    
    // Вызываем команду открытия смены
    Объект.ОткрытьСмену();
КонецЕсли;

Как гарантированно проверить, уходит ли ИНН кассира в ОФД?

Если вы внесли все необходимые изменения в код 1С, обновили драйверы ККТ до актуальных версий, но в личном кабинете ОФД по-прежнему не видите ИНН кассира, выполните диагностику на аппаратном уровне. Для этого нам потребуется прочитать структуру конкретного чека напрямую из фискального накопителя.

Разберем по шагам, как это сделать:

  1. Для ККТ АТОЛ: откройте стандартную утилиту «Тест драйвера ККТ» (версии 10.x). Перейдите в раздел «ФН» -> вкладка «Документы». Введите номер фискального документа (номер чека из ОФД или бумажного чека) и нажмите кнопку «Прочитать документ». В полученном логе найдите строку с тегом 1203. Если тег присутствует в структуре документа ФН — значит, касса физически записала и отправила данные, а проблема отображения кроется исключительно на стороне личного кабинета вашего ОФД.
  2. Для ККТ Штрих-М: откройте «Тест драйвера ФР». Перейдите в раздел «ФН» -> «Данные». Запросите данные по номеру фискального документа. Драйвер выведет полную структуру XML/JSON со списком всех записанных тегов, где вы сможете наглядно увидеть тег 1203.
  3. Также на кассах АТОЛ можно распечатать копию чека из ФН с помощью подачи низкоуровневой команды через тест драйвера: AB 00 01 11 (где вместо 111 укажите номер фискального документа в шестнадцатеричном формате). На распечатанной копии чека детально отобразятся все скрытые электронные теги, включая ИНН кассира, если он был успешно передан при пробитии.

Соблюдение правильного порядка вызова методов драйвера ККТ и своевременное обновление интеграционных библиотек гарантируют успешную передачу ИНН кассира и помогут избежать штрафных санкций со стороны контролирующих органов.

← На главную