При переходе на форматы фискальных данных 1.05, 1.1 и 1.2 многие разработчики и системные администраторы сталкиваются со следующей проблемой: ФИО кассира успешно печатается на чеке и отправляется оператору фискальных данных (ОФД), но ИНН кассира (тег 1203) упорно не отображается в личном кабинете ОФД. При этом сама касса при пробитии чеков не выдает никаких ошибок.
В этой статье мы подробно разберем, почему возникает данная проблема, рассмотрим законодательные и технические нюансы передачи этого реквизита, а также приведем готовые примеры кода для интеграции ККТ АТТОЛ и Штрих-М с учетными системами 1С.
Первое и самое важное правило, о котором часто забывают: согласно требованиям ФНС к реквизитам фискальных документов, тег 1203 («ИНН кассира») является исключительно электронным реквизитом. Это означает следующее:
Если вы используете типовую конфигурацию 1С (например, «Розница 2.2/2.3», «Управление торговлей 11» или «Бухгалтерия предприятия 3.0») со встроенной Библиотекой подключаемого оборудования (БПО), обмен данными с ККТ идет через XML-пакеты.
В XML-схеме БПО ИНН кассира передается с помощью атрибута CashierVATIN в параметрах чека. Проанализируем критически важную уязвимость этого механизма: если в справочнике «Пользователи» (или связанных физических лицах) в 1С у текущего сотрудника не заполнен реквизит «ИНН», 1С отправляет в XML пустое значение: CashierVATIN="".
Драйвер ККТ, получая пустую строку, принудительно затирает внутренние настройки кассы. Даже если вы вручную запрограммировали ИНН кассиров во внутренние таблицы кассового аппарата (например, в таблицу паролей кассиров), пустой параметр из 1С полностью очистит эти данные в момент пробития чека. Поэтому заполнение ИНН в карточке пользователя 1С является обязательным шагом.
Рассмотрим ситуацию с самописными обработками или конфигурациями на обычных формах (например, «Управление торговлей 10.3» или «Торговля и Склад 7.7»), где подключение к АТОЛ реализовано через прямое обращение к COM-объекту драйвера.
Выясним причину, по которой ИНН кассира может не передаваться при программной отправке. Все дело в строгой последовательности вызова команд. Запись атрибутов кассира должна производиться в строго определенный момент жизненного цикла чека. Если передать тег 1203 слишком рано или слишком поздно, ККТ проигнорирует команду без генерации ошибок.
Проанализируем правильный алгоритм формирования чека для ККТ АТОЛ:
Mode = 1).NewDocument()).OpenCheck()). Это критически важный шаг! Если вызвать OpenCheck() до записи атрибутов кассира, данные затрутся или не запишутся в ФН.Registration() необходимо использовать конструкцию BeginItem() ... EndItem() для корректной передачи признака предмета расчета.Посмотрим на пример правильной программной реализации печати чека с ИНН кассира через драйвер АТОЛ:
// Подключаем устройство и переходим в режим регистрации
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С, обновили драйверы ККТ до актуальных версий, но в личном кабинете ОФД по-прежнему не видите ИНН кассира, выполните диагностику на аппаратном уровне. Для этого нам потребуется прочитать структуру конкретного чека напрямую из фискального накопителя.
Разберем по шагам, как это сделать:
1203. Если тег присутствует в структуре документа ФН — значит, касса физически записала и отправила данные, а проблема отображения кроется исключительно на стороне личного кабинета вашего ОФД.1203.AB 00 01 11 (где вместо 111 укажите номер фискального документа в шестнадцатеричном формате). На распечатанной копии чека детально отобразятся все скрытые электронные теги, включая ИНН кассира, если он был успешно передан при пробитии.Соблюдение правильного порядка вызова методов драйвера ККТ и своевременное обновление интеграционных библиотек гарантируют успешную передачу ИНН кассира и помогут избежать штрафных санкций со стороны контролирующих органов.