При обновлении конфигурации 1С:Зарплата и управление персоналом до релиза 3.1.9.187 (или аналогичного релиза ЗКГУ 3.1.9.187) многие пользователи столкнулись с критической ошибкой при попытке сформировать «Справку для расчета пособия по безработице» (справка для биржи труда). Ошибка сопровождается системным сообщением: Поле агрегатного объекта не обнаружено "РаботаСотрудникГоловнаяОрганизация". Рассмотрим подробно, почему возникает этот сбой и какими способами его можно устранить.
Проанализируем техническую сторону вопроса. В версии 3.1.9.187 разработчики внесли изменения в механизмы формирования кадровых данных для печатных форм. Ошибка напрямую связана с использованием системы компоновки данных (СКД) в модуле менеджера отчета ПечатьСправкиОСреднемЗаработке. Проблема кроется в том, что программа пытается обратиться к полю ГоловнаяОрганизация, которое не инициализируется в структуре данных, если в информационной базе отключена функциональная опция «Использовать несколько организаций».
В коде запроса системы кадрового учета проверка головной организации добавлена без учета сценария, когда организация в базе всего одна. В этом случае поле просто отсутствует в выборке, что и приводит к падению программы. Данная ошибка официально зарегистрирована под номером 10211151.
Разберем самый простой способ, который позволяет обойти ошибку без внесения изменений в конфигурацию. Этот метод подойдет бухгалтерам и пользователям, у которых нет возможности оперативно привлечь программиста.
Поскольку ошибка возникает из-за отключенной опции многофирменного учета, нам необходимо временно ее активировать. Выполним следующие шаги:
Увольнение) и попробуем снова сформировать справку. Она должна сформироваться без ошибок.Важный нюанс: включение этой опции изменит интерфейс программы — во всех журналах документов и самих документах появится поле Организация. Если вам это мешает, вы можете включать галочку только на время печати справки, а затем снимать её. Однако, как отмечают пользователи, иногда после снятия галочки ошибка возвращается, поэтому до выхода исправления от 1С опцию лучше оставить включенной.
Рассмотрим ситуацию с точки зрения разработчика, если использование расширений или изменение настроек интерфейса нежелательно. Нам потребуется внести изменения в модуль менеджера отчета ПечатьСправкиОСреднемЗаработке. Проанализируем участок кода, начиная со строки 95.
В процедуре формирования данных происходит заполнение коллекции КадровыеДанные из результатов запроса. Нам необходимо закомментировать строку, вызывающую обращение к отсутствующему полю. Посмотрим на пример исправления:
// В модуле менеджера отчета ПечатьСправкиОСреднемЗаработке
НоваяСтрока = КадровыеДанные.Добавить;
// Эту строку необходимо закомментировать, так как поле не обнаружено в СКД
// НоваяСтрока.ГоловнаяОрганизация = ДанныеДетальныхЗаписей.РаботаСотрудникГоловнаяОрганизация;
// Остальные поля заполняются в штатном режиме
НоваяСтрока.Сотрудник = ДанныеДетальныхЗаписей.РаботаСотрудник;
НоваяСтрока.ДатаПриема = ДанныеДетальныхЗаписей.РаботаДатаПриема;
НоваяСтрока.ДатаУвольнения = ДанныеДетальныхЗаписей.РаботаДатаУвольнения;
НоваяСтрока.ПриказОбУвольнении = ДанныеДетальныхЗаписей.РаботаПриказОбУвольнении;
После внесения этих изменений печатная форма начнет работать корректно, так как для формирования справки в базе с одной организацией значение ГоловнаяОрганизация не является критически важным — программа подтянет данные основной организации.
Если ваша база находится на поддержке и вы не хотите снимать её с «замка», правильным решением будет использование механизма расширений. Мы можем переопределить метод формирования данных. Рассмотрим, как это реализовать профессионально.
Создадим новое расширение и добавим в него метод Сформировать с аннотацией &Вместо. Однако, как заметили участники обсуждения, простая подмена функции может вызвать конфликт имен. Правильнее будет использовать следующий подход:
&Вместо("НаименованиеПроцедуры").ДанныеДетальныхЗаписей.РаботаСотрудникГоловнаяОрганизация отсутствует, мы просто игнорируем его заполнение или подставляем значение основной организации.Пример логики для расширения:
&Вместо("ЗаполнитьКадровыеДанные")
Процедура Расш1_ЗаполнитьКадровыеДанные(КадровыеДанные, ДанныеДетальныхЗаписей)
НоваяСтрока = КадровыеДанные.Добавить;
// Проверяем наличие свойства, чтобы избежать ошибки агрегатного объекта
Если ДанныеДетальныхЗаписей.Свойство("РаботаСотрудникГоловнаяОрганизация") Тогда
НоваяСтрока.ГоловнаяОрганизация = ДанныеДетальныхЗаписей.РаботаСотрудникГоловнаяОрганизация;
КонецЕсли;
// Заполнение остальных реквизитов
ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеДетальныхЗаписей);
КонецПроцедуры
Проанализируем еще один важный аспект, упомянутый пользователями. В этом же релизе изменилась сама форма справки. Многие бухгалтеры жалуются, что выводится «не та форма». Разберемся, в чем дело.
С 2019 года действует Письмо Минтруда России от 10.01.2019 № 16-5/В-5, которым была введена новая рекомендованная форма справки о среднем заработке. Специалисты 1С привели отчет в соответствие с этими рекомендациями.
Важные моменты:
Для окончательного решения проблемы мы рекомендуем выполнить обновление конфигурации до релизов 3.1.9.188 или 3.1.10.78 и выше, где данная ошибка была исправлена разработчиками официально. Если же оперативное обновление невозможно, используйте включение опции Использовать несколько организаций как самый быстрый временный костыль.
Помните, что внесение правок непосредственно в код конфигурации (Способ 2) потребует от вас внимательности при последующих обновлениях, чтобы не затереть свои изменения до того, как официальный фикс вступит в силу. Использование расширений в данном случае является наиболее технологичным и безопасным способом решения задачи для программиста.