Как исправить ошибку «Поле агрегатного объекта не обнаружено "РаботаСотрудникГоловнаяОрганизация"» в 1С:ЗУП

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

При обновлении конфигурации 1С:Зарплата и управление персоналом до релиза 3.1.9.187 (или аналогичного релиза ЗКГУ 3.1.9.187) многие пользователи столкнулись с критической ошибкой при попытке сформировать «Справку для расчета пособия по безработице» (справка для биржи труда). Ошибка сопровождается системным сообщением: Поле агрегатного объекта не обнаружено "РаботаСотрудникГоловнаяОрганизация". Рассмотрим подробно, почему возникает этот сбой и какими способами его можно устранить.

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

Проанализируем техническую сторону вопроса. В версии 3.1.9.187 разработчики внесли изменения в механизмы формирования кадровых данных для печатных форм. Ошибка напрямую связана с использованием системы компоновки данных (СКД) в модуле менеджера отчета ПечатьСправкиОСреднемЗаработке. Проблема кроется в том, что программа пытается обратиться к полю ГоловнаяОрганизация, которое не инициализируется в структуре данных, если в информационной базе отключена функциональная опция «Использовать несколько организаций».

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

Способ 1. Изменение настроек программы (без программирования)

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

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

  1. Перейдем в раздел Настройка, далее выберем пункт Предприятие.
  2. Установим флаг (галочку) напротив константы «Использовать несколько организаций».
  3. Если программа потребует, добавим вторую «фиктивную» организацию (просто указав название), хотя зачастую достаточно просто включения самой опции.
  4. После этого вернемся в документ (например, Увольнение) и попробуем снова сформировать справку. Она должна сформироваться без ошибок.

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

Способ 2. Исправление программного кода в модуле

Рассмотрим ситуацию с точки зрения разработчика, если использование расширений или изменение настроек интерфейса нежелательно. Нам потребуется внести изменения в модуль менеджера отчета ПечатьСправкиОСреднемЗаработке. Проанализируем участок кода, начиная со строки 95.

В процедуре формирования данных происходит заполнение коллекции КадровыеДанные из результатов запроса. Нам необходимо закомментировать строку, вызывающую обращение к отсутствующему полю. Посмотрим на пример исправления:


// В модуле менеджера отчета ПечатьСправкиОСреднемЗаработке
НоваяСтрока = КадровыеДанные.Добавить;

// Эту строку необходимо закомментировать, так как поле не обнаружено в СКД
// НоваяСтрока.ГоловнаяОрганизация = ДанныеДетальныхЗаписей.РаботаСотрудникГоловнаяОрганизация; 

// Остальные поля заполняются в штатном режиме
НоваяСтрока.Сотрудник = ДанныеДетальныхЗаписей.РаботаСотрудник;
НоваяСтрока.ДатаПриема = ДанныеДетальныхЗаписей.РаботаДатаПриема;
НоваяСтрока.ДатаУвольнения = ДанныеДетальныхЗаписей.РаботаДатаУвольнения;
НоваяСтрока.ПриказОбУвольнении = ДанныеДетальныхЗаписей.РаботаПриказОбУвольнении;

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

Способ 3. Использование расширения конфигурации

Если ваша база находится на поддержке и вы не хотите снимать её с «замка», правильным решением будет использование механизма расширений. Мы можем переопределить метод формирования данных. Рассмотрим, как это реализовать профессионально.

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

  1. Использовать аннотацию &Вместо("НаименованиеПроцедуры").
  2. Внутри расширения добавить проверку на наличие поля в структуре ДанныеДетальныхЗаписей.
  3. Если поле РаботаСотрудникГоловнаяОрганизация отсутствует, мы просто игнорируем его заполнение или подставляем значение основной организации.

Пример логики для расширения:


&Вместо("ЗаполнитьКадровыеДанные")
Процедура Расш1_ЗаполнитьКадровыеДанные(КадровыеДанные, ДанныеДетальныхЗаписей)
    НоваяСтрока = КадровыеДанные.Добавить;
    // Проверяем наличие свойства, чтобы избежать ошибки агрегатного объекта
    Если ДанныеДетальныхЗаписей.Свойство("РаботаСотрудникГоловнаяОрганизация") Тогда
        НоваяСтрока.ГоловнаяОрганизация = ДанныеДетальныхЗаписей.РаботаСотрудникГоловнаяОрганизация;
    КонецЕсли;
    // Заполнение остальных реквизитов
    ЗаполнитьЗначенияСвойств(НоваяСтрока, ДанныеДетальныхЗаписей);
КонецПроцедуры

Проблема с новой формой справки (Письмо Минтруда)

Проанализируем еще один важный аспект, упомянутый пользователями. В этом же релизе изменилась сама форма справки. Многие бухгалтеры жалуются, что выводится «не та форма». Разберемся, в чем дело.

С 2019 года действует Письмо Минтруда России от 10.01.2019 № 16-5/В-5, которым была введена новая рекомендованная форма справки о среднем заработке. Специалисты 1С привели отчет в соответствие с этими рекомендациями.

Важные моменты:

Подведем итоги и рекомендации

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

Помните, что внесение правок непосредственно в код конфигурации (Способ 2) потребует от вас внимательности при последующих обновлениях, чтобы не затереть свои изменения до того, как официальный фикс вступит в силу. Использование расширений в данном случае является наиболее технологичным и безопасным способом решения задачи для программиста.

← На главную