При работе в программе «1С:Зарплата и управление персоналом», редакция 3.1 (3.1.10.376) и более ранних релизах ветки 3.1.10, пользователи часто сталкиваются с критической ошибкой при попытке сформировать печатную форму «Справка для пособия по безработице». Ошибка возникает в модуле менеджера отчета и полностью блокирует возможность получения документа. Давайте разберем природу этой проблемы, проанализируем причины ее возникновения и рассмотрим все доступные способы решения — от простых настроек до технических патчей.
Ошибка проявляется следующим образом: при нажатии на кнопку печати справки из справочника Сотрудники или из документа Увольнение система выдает сообщение:
{Отчет.ПечатнаяФормаСправкаОСреднемЗаработке.МодульМенеджера(175)}: Поле объекта не обнаружено (РаботаГрафикРаботыСуммированныйУчетРабочегоВремени)
Проанализируем ситуацию: данная ошибка чаще всего затрагивает сотрудников, у которых установлен сменный график работы или используется суммированный учет рабочего времени. Однако корень проблемы лежит глубже — в логике построения динамических запросов в программном коде 1С.
Выясним причину: в коде МодульМенеджера отчета происходит обращение к результату запроса. Алгоритм программы таков, что если в настройках состава начислений и удержаний не включена опция почасовой оплаты, программный код «считает», что поле РаботаГрафикРаботыСуммированныйУчетРабочегоВремени не требуется в выборке, и исключает его из текста запроса. Тем не менее, ниже по коду (в строке 175 или аналогичных) программа все равно пытается обратиться к этому полю для проверки условий сменности графика. В итоге возникает конфликт: код пытается прочитать данные из поля, которого физически нет в структуре полученного результата запроса.
Эта ошибка была официально зарегистрирована фирмой «1С» под номером 30171526.
Самый надежный и правильный метод — это переход на релизы, в которых ошибка была официально исправлена разработчиками. Рассмотрим подробнее:
Если справку нужно выдать «здесь и сейчас», а времени на обновление нет, мы можем воспользоваться «хитростью» в настройках. Поскольку ошибка связана с отсутствием поля в запросе из-за отключенной почасовой оплаты, мы можем временно её включить.
Разберем по шагам этот алгоритм:
РаботаГрафикРаботыСуммированныйУчетРабочегоВремени будет принудительно включено в запрос, и ошибка исчезнет.Для конфигураций на управляемых формах (ЗУП 3.1) существует механизм оперативного исправления ошибок без полного обновления конфигурации — патчи (файлы расширений .cfe).
Проанализируем ситуацию с патчами:
Если ваша база подключена к поддержке через интернет, программа может сама предложить установить исправление с кодом EF_30171526. Чтобы проверить наличие патча вручную, выполним следующие действия:
Если база находится на доработке и вы имеете доступ к конфигуратору, можно внести исправление в модуль менеджера отчета. Посмотрим на пример того, как логически должно выглядеть исправление.
Проблема заключается в том, что обращение к свойству ДанныеДетальныхЗаписей.РаботаГрафикРаботыСуммированныйУчетРабочегоВремени происходит без проверки на существование этого свойства в структуре. Мы можем обернуть этот участок в проверку или гарантировать наличие поля в запросе.
В МодульМенеджера отчета ПечатнаяФормаСправкаОСреднемЗаработке найдем текст запроса (обычно это функция ТекстЗапросаПечатьСправки) и убедимся, что выбор поля не зависит от функциональных опций. Либо в месте возникновения ошибки заменим прямое обращение на безопасное:
// Вместо:
// Если ДанныеДетальныхЗаписей.РаботаГрафикРаботыСуммированныйУчетРабочегоВремени Тогда
// Используем безопасный подход:
СуммированныйУчет = Ложь;
Попытка
СуммированныйУчет = ДанныеДетальныхЗаписей.РаботаГрафикРаботыСуммированныйУчетРабочегоВремени;
Исключение
// Поле отсутствует в структуре, значит суммированный учет не используется или не определен
КонецПопытки;
Если СуммированныйУчет Тогда
// Ваша логика для сменного графика
КонецЕсли;
Однако помните, что внесение изменений непосредственно в конфигурацию снимает объект с поддержки. Рекомендуется использовать механизм Расширений для переопределения запроса или процедуры печати.
Иногда ошибка проявляется только при печати из справочника Сотрудники, но обходится при печати из документа-основания. Рассмотрим этот вариант:
Увольнение по данному сотруднику.Мы проанализировали ошибку, связанную с отсутствием поля РаботаГрафикРаботыСуммированныйУчетРабочегоВремени. Выяснилось, что это типовой баг версии 3.1.10.
Краткий план действий: