С вступлением в силу изменений в 54-ФЗ, требования к реквизитам кассового чека ужесточились. Одним из важных параметров стал ИНН кассира (Тег 1203). В старых конфигурациях, таких как 1С:Управление торговлей 10.3, работающих на обычных формах, этот функционал зачастую отсутствует в типовом решении или работает некорректно. Пользователи часто сталкиваются с ситуацией, когда в Личном кабинете ОФД в поле "ИНН кассира" отображается ИНН самой организации. Это происходит потому, что драйвер кассового аппарата, не получая данных о кассире от 1С, подставляет данные владельца кассы по умолчанию. Чтобы избежать подобных сложностей с устаревшей платформой, можно выполнить переход с УТ 10.3 на современную редакцию УТ 11 с полной поддержкой актуальных требований законодательства.
В данной статье мы разберем, как программно обеспечить передачу ИНН кассира из 1С в торговое оборудование, чтобы данные корректно уходили в ОФД.
Проанализируем ситуацию: в УТ 10.3 механизмы взаимодействия с ККТ реализованы через внешние обработки обслуживания (файлы .epf). Даже если вы обновили саму конфигурацию 1С, ваша обработка обслуживания (например, ATOLkkt.epf или ShtrihMkkt.epf) может быть устаревшей и не содержать команд для передачи тега 1203. Кроме того, в структуре данных, которую документ (Чек ККМ) передает в торговое оборудование, может просто отсутствовать поле ИНН.
Если вы используете внешнюю обработку для связи с кассой, нам необходимо найти место, где формируется XML-пакет данных для фискализации чека. Рассмотрим пример кода, который нужно внедрить в логику формирования атрибутов кассира.
Нам необходимо найти фрагмент кода, отвечающий за запись атрибутов CashierName и добавить туда CashierVATIN. Разберем пример:
// Находим место формирования XML-структуры чека
ЗаписьXML.ЗаписатьАтрибут("CashierName", XMLСтрока(ОбщиеПараметры.Кассир));
// Добавляем условие для передачи ИНН кассира (Тег 1203)
Если Не ПустаяСтрока(ОбщиеПараметры.КассирИНН) Тогда
ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", XMLСтрока(ОбщиеПараметры.КассирИНН));
КонецЕсли;
Важно помнить, что CashierVATIN должен содержать ровно 12 цифр для физического лица. Если передать пустую строку или некорректное значение, касса может выдать ошибку или проигнорировать поле.
Прежде чем обработка обслуживания сможет передать ИНН, этот ИНН должен быть передан в саму обработку из документа 1С. Для этого нам нужно вмешаться в процесс подготовки параметров фискализации. В УТ 10.3 это чаще всего происходит в процедуре ПодготовитьДанныеДляФискализацииЧека.
Рассмотрим по шагам, как добавить передачу ИНН кассира, привязав его к текущему пользователю системы:
ФизическиеЛица, связанный с пользователем.ЧекККМ) найдем процедуру формирования параметров.КассирИНН.Пример программного кода для вставки в модуль:
Процедура ПодготовитьДанныеДляФискализацииЧека(ЧекККМ, ОбщиеПараметры, ДопДанные, ТО)
// ... существующий код подготовки параметров ...
// Указываем кассира из документа
ОбщиеПараметры.Кассир = ЧекККМ.Ответственный.Наименование;
// Добавляем получение ИНН из карточки физического лица ответственного
Если ЗначениеЗаполнено(ЧекККМ.Ответственный.ФизЛицо) Тогда
ОбщиеПараметры.Вставить("КассирИНН", ЧекККМ.Ответственный.ФизЛицо.ИНН);
Иначе
ОбщиеПараметры.Вставить("КассирИНН", "");
КонецЕсли;
КонецПроцедуры
Обратите внимание: если в структуре ОбщиеПараметры изначально нет поля КассирИНН, его нужно добавить методом Вставить, чтобы не вызвать ошибку обращения к несуществующему свойству в дальнейшем.
Если вы используете интеграцию через Библиотеку Подключаемого Оборудования (БПО), встроенную в поздние релизы УТ 10.3, вам может потребоваться правка функции ФискализироватьЧек в модуле обработки. Проанализируем пример доработки этой функции:
Функция ФискализироватьЧек(Объект, ПараметрыЧека) Экспорт
ПолучитьПараметрыККТ(Объект);
// Передаем параметры регистрации в объект драйвера
мПараметрыПодключения.Вставить("ПараметрыРегистрации", Объект.ВыходныеПараметры);
// Явно передаем ИНН кассира в структуру параметров, если он заполнен
// ПараметрыЧека.КассирИНН должен быть заполнен на стороне документа
Если ПараметрыЧека.Свойство("КассирИНН") Тогда
// Логика передачи в драйвер зависит от версии API драйвера (АТОЛ 8/9/10 или Штрих)
// Для АТОЛ 10 это может быть установка свойства CashierVATIN
КонецЕсли;
// ... дальнейшая логика пробития чека ...
КонецФункции
После внесения изменений выполним следующие действия для проверки:
Важный нюанс: некоторые старые модели ККТ требуют, чтобы кассир был предварительно зарегистрирован в таблицах самой кассы (через драйвер). Однако современные драйверы (например, АТОЛ 10 версии) позволяют передавать данные кассира "на лету" в каждом чеке, что и реализует вышеописанный код.
Таким образом, мы выяснили причину отсутствия данных в ОФД и рассмотрели два способа решения проблемы: через правку внешней обработки обслуживания и через модификацию логики подготовки данных в самой конфигурации 1С. Выбор метода зависит от того, насколько типовой является ваша конфигурация и используете ли вы внешние файлы .epf для работы с торговым оборудованием.