Как исправить ошибку «Поле не найдено Ответственный.ФизЛицо.ИНН» при пробитии чека в УТ 10.3

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

При работе с релизами конфигурации «Управление торговлей», редакция 10.3 (в частности, начиная с версии 10.3.54.1), многие пользователи и разработчики столкнулись с неприятной проблемой. При попытке пробить кассовый чек из документов «Приходный кассовый ордер» (ПКО), «Расходный кассовый ордер» (РКО) или других платежных документов система аварийно завершает работу, выдавая ошибку СУБД о том, что поле Ответственный.ФизЛицо.ИНН не найдено.

В этой статье мы подробно проанализируем, почему возникает данная ошибка, рассмотрим законодательный контекст передачи ИНН кассира и разберем по шагам несколько практических способов устранения этой проблемы — от быстрого исправления кода вручную до корректного обновления системы.

Выясняем причину возникновения ошибки

Для того чтобы понять природу сбоя, обратимся к изменениям в законодательстве о применении контрольно-кассовой техники (54-ФЗ). Согласно требованиям ФНС к форматам фискальных документов (ФФД), при фискализации чека необходимо передавать новые обязательные реквизиты. Одним из таких реквизитов является ИНН кассира (тег 1203), который осуществляет расчет с покупателем.

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

ЕСТЬNULL(ДанныеДокумента.Ответственный.ФизЛицо.ИНН, "") КАК КассирИНН

Однако здесь была допущена критическая техническая ошибка. В современных конфигурациях (таких как «Управление торговлей 11», «ERP» или «Комплексная автоматизация 2») справочник ФизическиеЛица изначально содержит реквизит ИНН. Но в устаревшей архитектуре метаданных УТ 10.3 в справочнике ФизическиеЛица такого реквизита по умолчанию никогда не было (ИНН физических лиц в этой редакции хранится в других регистрах или свойствах, либо не ведется вовсе).

В результате при попытке выполнить запрос платформа 1С обращается к таблице СУБД, не находит там колонки с именем ИНН и прекращает выполнение операции фискализации с ошибкой.

Способ 1. Быстрое исправление кода (для измененных конфигураций)

Если ваша конфигурация «Управление торговлей 10.3» сильно кастомизирована, находится не на поддержке или имеет значительные изменения, быстрое обновление до актуального релиза может быть затруднено. В этом случае мы можем применить быстрое исправление кода («костыль»), заменив обращение к несуществующему реквизиту на пустую строку.

Рассмотрим подробнее, как это сделать:

  1. Откройте базу данных в режиме Конфигуратор.
  2. Найдите в дереве метаданных общий модуль ДенежныеСредстваСервер и откройте его.
  3. Воспользуйтесь поиском по тексту (сочетание клавиш Ctrl + F) и найдите функцию ПараметрыОперацииФискализацииЧека.
  4. Проанализируем текст запроса. В нескольких местах (для ПКО, РКО, Оплаты платежной картой и т.д.) встречается обращение к ИНН физлица.
  5. Замените ошибочную конструкцию на пустую строку.

Ниже приведен пример того, как должен выглядеть исправленный фрагмент запроса для ПКО и РКО:


// БЫЛО:
|    ЕСТЬNULL(ДанныеДокумента.Ответственный.ФизЛицо.Наименование, """") КАК Кассир,
|    ЕСТЬNULL(ДанныеДокумента.Ответственный.ФизЛицо.ИНН, """") КАК КассирИНН,

// СТАЛО:
|    ЕСТЬNULL(ДанныеДокумента.Ответственный.ФизЛицо.Наименование, """") КАК Кассир,
|    """" КАК КассирИНН,

Эту замену необходимо произвести во всех частях пакета запросов (после операторов ОБЪЕДИНИТЬ ВСЕ), где фигурирует получение ИНН кассира. После внесения изменений сохраните конфигурацию и обновите базу данных (клавиша F7). Ошибка исчезнет, и чеки начнут успешно пробиваться.

Обязателен ли ИНН кассира с точки зрения закона?

У вас может возникнуть закономерный вопрос: не нарушаем ли мы правила применения ККТ, передавая пустую строку вместо реального ИНН кассира? Проанализируем требования ФНС.

Реквизит «ИНН кассира» (тег 1203) имеет признак обязательности «7». Согласно методическим указаниям, это означает, что данный параметр является обязательным к передаче только при его наличии у физического лица. Если у кассира официально нет ИНН, или работодатель им не располагает, закон разрешает не заполнять данный тег в фискальном документе. Оператор фискальных данных (ОФД) и налоговая служба примут такой чек как абсолютно корректный.

Способ 2. Добавление реквизита в метаданные справочника

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

Разберем этот процесс по шагам:

  1. В окне конфигуратора разверните ветку Справочники.
  2. Найдите справочник ФизическиеЛица и откройте его свойства.
  3. Перейдите на вкладку Данные.
  4. Добавьте новый Реквизит с именем ИНН.
  5. Установите для него тип данных Строка и задайте длину 12 символов (для ИНН физического лица).
  6. Обновите конфигурацию базы данных.

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

Способ 3. Использование механизма расширений (без снятия с поддержки)

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

Создадим расширение для корректировки общего модуля:

  1. В меню конфигуратора выберите Конфигурация — Расширения конфигурации.
  2. Добавьте новое расширение, укажите назначение (например, «Адаптация»).
  3. В основном дереве метаданных найдите общий модуль ДенежныеСредстваСервер, нажмите на него правой кнопкой мыши и выберите Добавить в расширение.
  4. В модуле расширения создайте процедуру-перехватчик с директивой &Вместо для функции ПараметрыОперацииФискализацииЧека.

Пример кода в расширении:


&Вместо("ПараметрыОперацииФискализацииЧека")
Функция Расш_ПараметрыОперацииФискализацииЧека(ДокументСсылка, СуммаПредоплатыКорректировка = Неопределено, ВерсияФФД = Неопределено)
    
    // Здесь размещаем полностью скопированный текст оригинальной функции, 
    // но с исправленным запросом, где вместо "ФизЛицо.ИНН" используется пустая строка.
    
КонецФункции

Этот способ позволяет сохранить конфигурацию полностью типовой, что значительно облегчит последующие плановые обновления программы.

Способ 4. Официальное обновление конфигурации

Фирма «1С» оперативно отреагировала на жалобы пользователей и выпустила исправления в последующих релизах.

Поэтому, если у вас есть техническая возможность, мы рекомендуем выполнить последовательное обновление вашей конфигурации до релиза 10.3.54.4 или более актуального.

← На главную