При работе с торговым оборудованием в конфигурации «1С:Управление торговлей, редакция 10.3» пользователи часто сталкиваются с жесткими требованиями законодательства по передаче фискальных данных. Одним из таких реквизитов является ИНН кассира (тег 1203). В типовом решении УТ 10.3, особенно в старых релизах, штатный механизм автоматического заполнения и передачи этого тега отсутствует. Из-за этого при проверке чеков в ОФД или налоговой могут возникать предупреждения.
В этой статье мы подробно разберем требования законодательства к тегу 1203, выясним причины технического ограничения в 1С и рассмотрим практические способы решения этой проблемы — от настройки кассового аппарата до изменения программного кода.
Прежде чем приступать к технической реализации, проанализируем нормативные требования:
Если мы проанализируем структуру конфигурации УТ 10.3, то увидим, что справочник Пользователи связан со справочником ФизическиеЛица. Даже если в карточке физического лица заполнить реквизит ИНН, программа «из коробки» не передает эти данные в кассу.
В коде интеграции с ККТ (в общих модулях фискализации или внутри внешних обработок обслуживания, таких как ATOL_kkt.epf, ShtrihM_kkt.epf) параметры операции фискализации формируются программно. Зачастую в запросе формирования данных чека поле ИНН кассира жестко заполнено пустой строкой:
// Пример фрагмента кода формирования параметров чека
СтруктураПараметров.Вставить("Кассир", ОтветственныйФизЛицо.Наименование);
СтруктураПараметров.Вставить("КассирИНН", ""); // ИНН передается пустым
По этой причине, какие бы настройки мы ни делали в пользовательском режиме 1С, ККТ не получит ИНН сотрудника. Разберем три практических способа решения этой проблемы.
Это самый популярный метод, который идеально подходит для базовых версий УТ 10.3 (где программный код закрыт для изменений) или в случаях, когда конфигурация находится на поддержке и менять ее нежелательно.
Суть метода заключается в том, что мы заносим данные кассиров непосредственно в память фискального регистратора, а программа 1С передает только текстовое имя кассира. Касса сама сопоставляет текст и подставляет ИНН.
Разберем алгоритм настройки по шагам на примере ККТ АТОЛ:
Иванов И.И. или Иванов Иван Иванович).При пробитии чека из 1С ККТ получит текстовое имя кассира, найдет совпадение в своей внутренней таблице, автоматически подставит ИНН этого сотрудника в тег 1203 и отправит данные в ОФД.
Если ваша конфигурация является ПРОФ-версией, но вы не хотите вносить изменения в саму структуру метаданных (справочники, документы), можно воспользоваться механизмом дополнительных свойств 1С и доработать внешнюю обработку обслуживания ККТ.
Разберем по шагам, как реализовать этот вариант:
ИНН (тип значения — Строка).ИНН.ATOL_kkt.epf).ПодготовитьДанныеДляФискализации или аналогичная).
// Функция получения дополнительного свойства ИНН у ФизЛица
Функция ПолучитьИННФизическогоЛица(ФизЛицо) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Значение КАК ИНН
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Объект = &ФизЛицо
| И ЗначенияСвойствОбъектов.Свойство.Наименование = ""ИНН""";
Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат СокрЛП(Выборка.ИНН);
КонецЕсли;
Возврат "";
КонецФункции
После этого в месте формирования структуры чека замените пустую строку передачи ИНН на вызов созданной функции:
// Передаем ИНН кассира из свойств физлица
ИННКассира = ПолучитьИННФизическогоЛица(ОтветственныйФизЛицо);
СтруктураПараметров.Вставить("КассирИНН", ИННКассира);
Если база данных уже снята с поддержки или активно кастомизируется, наиболее надежным решением будет прямое использование реквизита ИНН справочника ФизическиеЛица (если этот реквизит присутствует в вашей версии конфигурации) и доработка общего модуля фискализации.
Проанализируем ситуацию в конфигураторе и выполним следующие действия:
ФизическиеЛица есть стандартный реквизит ИНН. Если его нет, добавим реквизит ИНН с типом Строка (длина 12) на уровне метаданных.ФизическиеЛица, чтобы пользователи могли его заполнять.ПолучениеОбъектовТорговогоОборудования или модуль работы с фискальными регистраторами).
// Получаем ИНН кассира напрямую из реквизита справочника ФизическиеЛица
Если ЗначениеЗаполнено(ДокументОбъект.Ответственный) Тогда
ФизЛицоСсылка = ДокументОбъект.Ответственный.ФизЛицо;
Если ЗначениеЗаполнено(ФизЛицоСсылка) Тогда
ИмяКассира = ФизЛицоСсылка.Наименование;
ИННКассира = ФизЛицоСсылка.ИНН;
КонецЕсли;
КонецЕсли;
// Заполнение параметров для ККТ
СтруктураКассира = Новый Структура;
СтруктураКассира.Вставить("Name", ИмяКассира);
СтруктураКассира.Вставить("INN", ИННКассира);
При таком подходе данные будут динамически считываться из карточки сотрудника в момент печати каждого чека, что исключает необходимость настройки таблиц внутри самой ККТ при приеме на работу новых кассиров.
Мы рассмотрели различные варианты обхода ограничений платформы «1С:Управление торговлей 10.3» по передаче ИНН кассира. Выбор метода зависит от ваших технических возможностей: