После проведения очередного обновления конфигурации «1С:Бухгалтерия государственного учреждения» пользователи могут столкнуться с неприятной ситуацией: при попытке распечатать типовую форму доверенности (например, форму М-2) система завершает операцию аварийно с ошибкой выполнения запроса. При этом печать может успешно выполняться, если очистить поле сотрудника, но выбор любого физического лица приводит к отказу.
Проанализируем техническую причину возникновения этой неполадки, разберем текст ошибки, а также рассмотрим по шагам методы её устранения.
В момент формирования печатной формы доверенности платформа выдает сообщение следующего вида:
Ошибка при вызове метода контекста (Выполнить)
{Справочник.Контрагенты.МодульМенеджера(253)}: Результат = Запрос.Выполнить;
{Документ.Доверенность.МодульМенеджера(280)}: Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ТребуемыеДанные);
...
по причине:
{(8, 83)}: Поле не найдено "ФизическоеЛицо"
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(&Период, >ФизическоеЛицо = &ФизическоеЛицо) КАК ДокументыФизическихЛицСрезПоследних
Выясним причину такого поведения. При формировании печатной формы доверенности вызывается процедура Справочники.Контрагенты.ПолучитьДанныеКонтрагента(ТребуемыеДанные). Внутри этого метода текст запроса к базе данных собирается динамически на основании тех реквизитов, которые переданы в структуре ТребуемыеДанные. Если в документе указан сотрудник, программе требуется получить его паспортные данные и ФИО.
В типовой конфигурации в различных регистрах сведений ключевые измерения названы неодинаково:
РегистрСведений.ДокументыФизическихЛиц ключевое измерение имеет имя Физлицо (или ФизЛицо).РегистрСведений.ФИОФизическихЛиц ключевое измерение называется ФизическоеЛицо.В программном коде релиза разработчики допустили неточность: в параметрах виртуальной таблицы среза последних для регистра ДокументыФизическихЛиц было ошибочно прописано условие по полю ФизическоеЛицо, которого в этом регистре просто нет. Из-за этого платформа сообщает об ошибке отсутствия поля. Если попытаться исправить это место простым переименованием переменной условия для обоих регистров, возникает зеркальная ошибка уже для регистра ФИО:
{(11, 77)}: Поле не найдено "ФизЛицо"
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизическихЛиц.СрезПоследних(&Период, >ФизЛицо = &ФизическоеЛицо) КАК ФИОФизическихЛицСрезПоследних
Посмотрим, почему в некоторых смежных базах на том же релизе печать может проходить без сбоев. Во-первых, если включена автоматическая загрузка патчей через интернет-поддержку, исправление могло установиться в фоновом режиме регламентным заданием. Во-вторых, ошибка проявляется только при наличии заполненного сотрудника, когда алгоритм инициализирует получение паспортных данных через соединение с регистром документов.
Фирма «1С» оперативно выпустила официальное исправление данной проблемы. Для устранения ошибки зарегистрирован патч с кодом EF_00_00929324.
Разберем по шагам, как применить данное исправление в информационной базе:
EF_00_00929324.cfe вручную с официального портала обновлений 1С.Если официальный патч по каким-либо причинам недоступен или требуется решить проблему немедленно без снятия типовой конфигурации с полной поддержки, напишем собственное расширение конфигурации.
Рассмотрим, как правильно скорректировать логику формирования динамического запроса в методе ПолучитьДанныеКонтрагента:
Контрагенты и перехватим метод ПолучитьДанныеКонтрагента с помощью аннотации &Вместо.
// Для регистра документов физических лиц используем правильное имя измерения Физлицо:
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,
"ДокументыФизическихЛиц.СрезПоследних(&Период, ФизическоеЛицо = &ФизическоеЛицо)",
"ДокументыФизическихЛиц.СрезПоследних(&Период, Физлицо = &ФизическоеЛицо)");
// Для регистра ФИО проверяем, чтобы осталось обращение к полю ФизическоеЛицо:
// ФИОФизическихЛиц.СрезПоследних(&Период, ФизическоеЛицо = &ФизическоеЛицо)
В организациях с жестким регламентом согласования установки патчей и правок конфигурации удобным временным решением является подключение внешней печатной формы доверенности:
Доверенность во внешнюю обработку стандарта БСП.Справочники.Контрагенты.ПолучитьДанныеКонтрагента на прямой точечный запрос к регистру сведений ДокументыФизическихЛиц с корректным условием ГДЕ Физлицо = &ФизическоеЛицо.Дополнительные отчеты и обработки. Это позволит пользователям выводить доверенность на печать в штатном режиме без задержек в рабочем процессе.