Почему не открывается отчет Извещение о приеме или увольнении в ЗУП 3.1 и как исправить ошибку РасчетныйЛисток

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

При работе в программе 1С:Зарплата и управление персоналом 3.1 пользователи могут столкнуться с досадной проблемой: при попытке открыть стандартный отчет по воинскому учету, например, «Извещение о приеме или увольнении», программа выдает критическую ошибку. В тексте ошибки указывается: Поле объекта не обнаружено (РасчетныйЛисток), а отладка ведет в ОбщийМодуль.ЗарплатаКадрыОтчеты.Модуль(7019).

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

Выясняем причину: ошибка в типовом коде

Проанализируем программный код общего модуля ЗарплатаКадрыОтчеты. Проблема кроется в процедуре ПрименитьНастройкиКОтчету. Разработчики типового решения применили механизм «копипаста» и жестко прописали в коде обращение к варианту отчета РасчетныйЛисток, вместо того чтобы использовать переданный в функцию параметр КлючВариантаНастроек.

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

Данная ошибка официально зарегистрирована в реестре под номером 10239634 и встречается в релизах ветки 3.1.23 (например, 3.1.23.357) и ранних сборках 3.1.24.

Решение 1: Исправление через расширение (для программистов)

Это самый надежный способ, который устраняет саму причину возникновения ошибки. Нам необходимо создать расширение и перехватить процедуру ПрименитьНастройкиКОтчету в режиме &ИзменениеИКонтроль. Наша задача — заменить жесткую привязку к строке РасчетныйЛисток на использование переменной.

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


// Было:
ПараметрВарианта = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.РасчетныйЛисток.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ЭлементНастройкиВарианта.Параметр);

// Стало (правильно):
ПараметрВарианта = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек[КлючВариантаНастроек].Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ЭлементНастройкиВарианта.Параметр);

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


// Было:
ЭлементВарианта = НайтиЭлементНастройкиПоИдентификаторПользовательскойНастройки(
    ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.РасчетныйЛисток.Настройки.Отбор.Элементы, 
    ЭлементНастройкиВарианта.ИдентификаторПользовательскойНастройки);

// Стало (правильно):
ЭлементВарианта = НайтиЭлементНастройкиПоИдентификаторПользовательскойНастройки(
    ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек[КлючВариантаНастроек].Настройки.Отбор.Элементы, 
    ЭлементНастройкиВарианта.ИдентификаторПользовательскойНастройки);

После применения такого расширения все отчеты начнут открываться корректно, так как система будет обращаться к тому варианту настроек, который актуален для конкретного открываемого отчета.

Решение 2: Очистка настроек в справочнике вариантов отчетов

Если вы не хотите вносить изменения в код или база находится на строгом контроле, можно воспользоваться обходным путем. Ошибка часто инициируется наличием «битых» или некорректно сохранившихся настроек в справочнике ВариантыОтчетов.

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


ОбъектВарианта = Справочники.ВариантыОтчетов.НайтиПоНаименованию("Извещение о приеме или увольнении").ПолучитьОбъект();
Если ОбъектВарианта <> Неопределено Тогда
    ОбъектВарианта.Настройки = Неопределено;
    ОбъектВарианта.Записать();
    Сообщить("Настройки отчета успешно сброшены.");
КонецЕсли;

Важный момент: после выполнения этого кода пользователю придется заново настроить отчет (выбрать организацию, период и т.д.), но форма начнет открываться без ошибок. Этот метод помогает «разорвать» связь между текущим отчетом и ошибочно подтянутыми данными от «Расчетного листка».

Решение 3: Административный сброс пользовательских настроек

Иногда программная очистка справочника не помогает, если настройки закэшированы в пользовательском профиле. В этом случае выполним следующие действия в режиме «1С:Предприятие»:

  1. Перейдем в раздел Администрирование — Настройки пользователей и прав.
  2. Выберем пункт Пользователи и зайдем в карточку конкретного сотрудника, у которого не открывается отчет.
  3. Нажмем на гиперссылку Настройки в верхней части формы.
  4. На вкладке Внешний вид или Прочие настройки найдем упоминание проблемного отчета.
  5. Нажмем кнопку Очистить. Чтобы гарантированно решить проблему, иногда требуется выбрать Все настройки — Очистить (будьте осторожны, это сбросит все персональные настройки интерфейса пользователя).

Проанализируем эффективность этого метода: он помогает в 80% случаев, если ошибка вызвана именно пользовательским кэшем. Однако, если проблема сидит глубоко в идентификаторах метаданных, потребуется более радикальное вмешательство.

Дополнительные рекомендации

Если ни один из вышеперечисленных способов не помог, проверьте следующие моменты:

Идентификаторы объектов метаданных. Попробуйте запустить программу с параметром /C ЗапуститьОбновлениеИнформационнойБазы. Это принудительно обновит справочник идентификаторов, что может помочь, если отчет перестал «узнаваться» системой.

Установка патчей. Фирма 1С оперативно выпускает исправления (патчи) для подобных критических ошибок. Зайдите в раздел Администрирование — Обслуживание — Обновление программы и проверьте наличие установленного патча EF_10239634. Если его нет, загрузите актуальные исправления через интернет.

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

Подведем итог: мы выяснили, что ошибка носит чисто технический характер и связана с некорректным кодом в общем модуле. Самым правильным решением будет обновление конфигурации до релизов 3.1.23.458 / 3.1.24.212 или выше, где этот баг исправлен официально. Если обновление невозможно, используйте исправление через расширение или точечную очистку реквизита Настройки в справочнике вариантов отчетов.

← На главную