Как исправить ошибку «Поле не найдено ФизическоеЛицо» при печати доверенности в 1С:БГУ?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет Сфера услуг, туризм и социальный сектор
← На главную

После проведения очередного обновления конфигурации «1С:Бухгалтерия государственного учреждения» пользователи могут столкнуться с неприятной ситуацией: при попытке распечатать типовую форму доверенности (например, форму М-2) система завершает операцию аварийно с ошибкой выполнения запроса. При этом печать может успешно выполняться, если очистить поле сотрудника, но выбор любого физического лица приводит к отказу.

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

Симптомы и анализ ошибки выполнения запроса

В момент формирования печатной формы доверенности платформа выдает сообщение следующего вида:


Ошибка при вызове метода контекста (Выполнить)
{Справочник.Контрагенты.МодульМенеджера(253)}: Результат = Запрос.Выполнить;
{Документ.Доверенность.МодульМенеджера(280)}: Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ТребуемыеДанные);
...
по причине:
{(8, 83)}: Поле не найдено "ФизическоеЛицо"
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(&Период, >ФизическоеЛицо = &ФизическоеЛицо) КАК ДокументыФизическихЛицСрезПоследних

Выясним причину такого поведения. При формировании печатной формы доверенности вызывается процедура Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ТребуемыеДанные). Внутри этого метода текст запроса к базе данных собирается динамически на основании тех реквизитов, которые переданы в структуре ТребуемыеДанные. Если в документе указан сотрудник, программе требуется получить его паспортные данные и ФИО.

В типовой конфигурации в различных регистрах сведений ключевые измерения названы неодинаково:

  1. В регистре сведений РегистрСведений.ДокументыФизическихЛиц ключевое измерение имеет имя Физлицо (или ФизЛицо).
  2. В регистре сведений РегистрСведений.ФИОФизическихЛиц ключевое измерение называется ФизическоеЛицо.

В программном коде релиза разработчики допустили неточность: в параметрах виртуальной таблицы среза последних для регистра ДокументыФизическихЛиц было ошибочно прописано условие по полю ФизическоеЛицо, которого в этом регистре просто нет. Из-за этого платформа сообщает об ошибке отсутствия поля. Если попытаться исправить это место простым переименованием переменной условия для обоих регистров, возникает зеркальная ошибка уже для регистра ФИО:


{(11, 77)}: Поле не найдено "ФизЛицо"
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизическихЛиц.СрезПоследних(&Период, >ФизЛицо = &ФизическоеЛицо) КАК ФИОФизическихЛицСрезПоследних

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

Способ 1. Установка официального патча (исправления)

Фирма «1С» оперативно выпустила официальное исправление данной проблемы. Для устранения ошибки зарегистрирован патч с кодом EF_00_00929324.

Разберем по шагам, как применить данное исправление в информационной базе:

  1. Если база подключена к сервису «1С:Интернет-поддержка пользователей», перейдем в раздел Администрирование, затем выберем пункт Обслуживание, далее раскроем блок Обновление программы и нажмем Установка обновлений и исправлений (патчей). Система найдет и установит нужный патч автоматически.
  2. Если информационная база работает в закрытом контуре или доступ в интернет ограничен, скачаем файл патча EF_00_00929324.cfe вручную с официального портала обновлений 1С.
  3. Для ручной загрузки откроем форму управления расширениями (раздел Администрирование -> Печатные формы, отчеты и обработки -> Расширения либо через пункт меню установки обновлений) и загрузим файл патча.
  4. Перезапустим сеанс программы «1С:Предприятие» и проверим формирование печатной формы доверенности.

Способ 2. Исправление через собственное расширение конфигурации

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

Рассмотрим, как правильно скорректировать логику формирования динамического запроса в методе ПолучитьДанныеКонтрагента:

  1. Создадим новое расширение конфигурации в режиме совместимости, соответствующем основной конфигурации.
  2. Добавим в расширение справочник Контрагенты и перехватим метод ПолучитьДанныеКонтрагента с помощью аннотации &Вместо.
  3. В алгоритме формирования текста запроса разделим условия для виртуальных таблиц двух регистров:
    
    // Для регистра документов физических лиц используем правильное имя измерения Физлицо:
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса, 
        "ДокументыФизическихЛиц.СрезПоследних(&Период, ФизическоеЛицо = &ФизическоеЛицо)", 
        "ДокументыФизическихЛиц.СрезПоследних(&Период, Физлицо = &ФизическоеЛицо)");
    
    // Для регистра ФИО проверяем, чтобы осталось обращение к полю ФизическоеЛицо:
    // ФИОФизическихЛиц.СрезПоследних(&Период, ФизическоеЛицо = &ФизическоеЛицо)
    
  4. Применим расширение и выполним проверку печати документа с заполненным сотрудником.

Способ 3. Подключение внешней печатной формы

В организациях с жестким регламентом согласования установки патчей и правок конфигурации удобным временным решением является подключение внешней печатной формы доверенности:

  1. Выгрузим модуль формирования печатной формы М-2 из документа Доверенность во внешнюю обработку стандарта БСП.
  2. В модуле объекта внешней обработки заменим вызов Справочники.Контрагенты.ПолучитьДанныеКонтрагента на прямой точечный запрос к регистру сведений ДокументыФизическихЛиц с корректным условием ГДЕ Физлицо = &ФизическоеЛицо.
  3. Зарегистрируем внешнюю форму в справочнике Дополнительные отчеты и обработки. Это позволит пользователям выводить доверенность на печать в штатном режиме без задержек в рабочем процессе.
← На главную