Как настроить передачу ИНН кассира в 1С:Управление торговлей 10.3 для чеков ККТ?

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

С вступлением в силу изменений в 54-ФЗ, требования к реквизитам кассового чека ужесточились. Одним из важных параметров стал ИНН кассира (Тег 1203). В старых конфигурациях, таких как 1С:Управление торговлей 10.3, работающих на обычных формах, этот функционал зачастую отсутствует в типовом решении или работает некорректно. Пользователи часто сталкиваются с ситуацией, когда в Личном кабинете ОФД в поле "ИНН кассира" отображается ИНН самой организации. Это происходит потому, что драйвер кассового аппарата, не получая данных о кассире от 1С, подставляет данные владельца кассы по умолчанию. Чтобы избежать подобных сложностей с устаревшей платформой, можно выполнить переход с УТ 10.3 на современную редакцию УТ 11 с полной поддержкой актуальных требований законодательства.

В данной статье мы разберем, как программно обеспечить передачу ИНН кассира из 1С в торговое оборудование, чтобы данные корректно уходили в ОФД.

Почему ИНН кассира не передается по умолчанию?

Проанализируем ситуацию: в УТ 10.3 механизмы взаимодействия с ККТ реализованы через внешние обработки обслуживания (файлы .epf). Даже если вы обновили саму конфигурацию 1С, ваша обработка обслуживания (например, ATOLkkt.epf или ShtrihMkkt.epf) может быть устаревшей и не содержать команд для передачи тега 1203. Кроме того, в структуре данных, которую документ (Чек ККМ) передает в торговое оборудование, может просто отсутствовать поле ИНН.

Способ 1: Модификация обработки обслуживания (уровень драйвера)

Если вы используете внешнюю обработку для связи с кассой, нам необходимо найти место, где формируется XML-пакет данных для фискализации чека. Рассмотрим пример кода, который нужно внедрить в логику формирования атрибутов кассира.

Нам необходимо найти фрагмент кода, отвечающий за запись атрибутов CashierName и добавить туда CashierVATIN. Разберем пример:


// Находим место формирования XML-структуры чека
ЗаписьXML.ЗаписатьАтрибут("CashierName", XMLСтрока(ОбщиеПараметры.Кассир));

// Добавляем условие для передачи ИНН кассира (Тег 1203)
Если Не ПустаяСтрока(ОбщиеПараметры.КассирИНН) Тогда
    ЗаписьXML.ЗаписатьАтрибут("CashierVATIN", XMLСтрока(ОбщиеПараметры.КассирИНН));
КонецЕсли;

Важно помнить, что CashierVATIN должен содержать ровно 12 цифр для физического лица. Если передать пустую строку или некорректное значение, касса может выдать ошибку или проигнорировать поле.

Способ 2: Подготовка данных в модуле документа или общем модуле

Прежде чем обработка обслуживания сможет передать ИНН, этот ИНН должен быть передан в саму обработку из документа 1С. Для этого нам нужно вмешаться в процесс подготовки параметров фискализации. В УТ 10.3 это чаще всего происходит в процедуре ПодготовитьДанныеДляФискализацииЧека.

Рассмотрим по шагам, как добавить передачу ИНН кассира, привязав его к текущему пользователю системы:

  1. Выясним, где в конфигурации хранится ИНН кассира. Обычно это справочник ФизическиеЛица, связанный с пользователем.
  2. В модуле документа (например, ЧекККМ) найдем процедуру формирования параметров.
  3. Добавим заполнение свойства КассирИНН.

Пример программного кода для вставки в модуль:


Процедура ПодготовитьДанныеДляФискализацииЧека(ЧекККМ, ОбщиеПараметры, ДопДанные, ТО)
    // ... существующий код подготовки параметров ...

    // Указываем кассира из документа
    ОбщиеПараметры.Кассир = ЧекККМ.Ответственный.Наименование;

    // Добавляем получение ИНН из карточки физического лица ответственного
    Если ЗначениеЗаполнено(ЧекККМ.Ответственный.ФизЛицо) Тогда
        ОбщиеПараметры.Вставить("КассирИНН", ЧекККМ.Ответственный.ФизЛицо.ИНН);
    Иначе
        ОбщиеПараметры.Вставить("КассирИНН", "");
    КонецЕсли;
КонецПроцедуры

Обратите внимание: если в структуре ОбщиеПараметры изначально нет поля КассирИНН, его нужно добавить методом Вставить, чтобы не вызвать ошибку обращения к несуществующему свойству в дальнейшем.

Где еще может потребоваться правка?

Если вы используете интеграцию через Библиотеку Подключаемого Оборудования (БПО), встроенную в поздние релизы УТ 10.3, вам может потребоваться правка функции ФискализироватьЧек в модуле обработки. Проанализируем пример доработки этой функции:


Функция ФискализироватьЧек(Объект, ПараметрыЧека) Экспорт
    ПолучитьПараметрыККТ(Объект);
    
    // Передаем параметры регистрации в объект драйвера
    мПараметрыПодключения.Вставить("ПараметрыРегистрации", Объект.ВыходныеПараметры);
    
    // Явно передаем ИНН кассира в структуру параметров, если он заполнен
    // ПараметрыЧека.КассирИНН должен быть заполнен на стороне документа
    Если ПараметрыЧека.Свойство("КассирИНН") Тогда
        // Логика передачи в драйвер зависит от версии API драйвера (АТОЛ 8/9/10 или Штрих)
        // Для АТОЛ 10 это может быть установка свойства CashierVATIN
    КонецЕсли;
    
    // ... дальнейшая логика пробития чека ...
КонецФункции

Проверка результата

После внесения изменений выполним следующие действия для проверки:

  1. Убедимся, что у пользователя 1С, под которым пробивается чек, заполнено поле Физ. лицо, а в карточке физического лица корректно заполнен ИНН (12 цифр).
  2. Пробьем тестовый чек.
  3. Зайдем в личный кабинет ОФД и найдем этот чек.
  4. Проверим поле "ИНН кассира". Если все сделано верно, там должен отобразиться ИНН сотрудника, а не организации.

Важный нюанс: некоторые старые модели ККТ требуют, чтобы кассир был предварительно зарегистрирован в таблицах самой кассы (через драйвер). Однако современные драйверы (например, АТОЛ 10 версии) позволяют передавать данные кассира "на лету" в каждом чеке, что и реализует вышеописанный код.

Таким образом, мы выяснили причину отсутствия данных в ОФД и рассмотрели два способа решения проблемы: через правку внешней обработки обслуживания и через модификацию логики подготовки данных в самой конфигурации 1С. Выбор метода зависит от того, насколько типовой является ваша конфигурация и используете ли вы внешние файлы .epf для работы с торговым оборудованием.

← На главную