Ошибка "Неверные параметры НовыйНабор" при проведении приема на работу в ЗУП 3.1

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

После обновления конфигурации "Зарплата и управление персоналом" (например, до версии 3.1.35.47) пользователи могут столкнуться с критической ошибкой при попытке провести документ "Прием на работу", особенно если установлен флаг "Отразить в трудовой книжке". Ошибка прерывает проведение документа и указывает на проблему в модуле набора записей регистра сведений.

В этой статье мы подробно разберем, почему возникает сообщение "Неверные параметры" для параметра запроса типа ТаблицаЗначений, как это связано с расширениями конфигурации и как устранить неисправность.

Симптомы и анализ ошибки

При проведении документа возникает исключение со следующим текстом:


{РегистрСведений.МероприятияТрудовойДеятельности.МодульНабораЗаписей(159)}: РезультатЗапроса = Запрос.Выполнить;
{(101, 2)}: Неверные параметры "НовыйНабор"
>&НовыйНабор КАК Мероприятия

Давайте проанализируем, что происходит в коде. Ошибка возникает в типовом механизме регистрации мероприятий трудовой деятельности (для отчетов ЕФС-1/СЗВ-ТД). В модуле набора записей регистра МероприятияТрудовойДеятельности формируется пакетный запрос.

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


// Код инициализации параметра
ТекущийНабор = ТаблицаЗаписываемогоНабора.Скопировать(Новый Структура("Регистратор", Регистратор));
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НовыйНабор", ТекущийНабор);

В параметре &НовыйНабор передается объект типа ТаблицаЗначений, полученный копированием набора записей. Колонки таблицы полностью соответствуют структуре регистра.

Сам текст запроса выглядит примерно так (упрощенно):


ВЫБРАТЬ
    ...
ПОМЕСТИТЬ ВТТекущийНабор
ИЗ
    РегистрСведений.МероприятияТрудовойДеятельности КАК Мероприятия
ГДЕ
    Мероприятия.Регистратор = &Регистратор;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ...
ПОМЕСТИТЬ ВТНовыйНабор
ИЗ
    &НовыйНабор КАК Мероприятия;

Визуально код корректен, и параметр определен. Однако платформа выдает ошибку. Давайте разберем причины и методы решения.

Временное решение: Разделение запроса

Если вам необходимо срочно восстановить работоспособность базы, можно применить программный обход проблемы ("костыль"). Опытным путем установлено, что ошибка возникает при одновременном выполнении пакетного запроса, где смешиваются выборка из базы данных и выборка из внешней таблицы значений.

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

Суть изменения:

  1. Сначала выполнить запрос формирования временной таблицы ВТТекущийНабор.
  2. Затем выполнить оставшуюся часть запроса с ВТНовыйНабор.

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

Истинная причина: Проблемные расширения конфигурации

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

Ситуация развивается следующим образом:

  1. В базе установлено расширение, которое заимствует регистр сведений МероприятияТрудовойДеятельности.
  2. При запуске системы Библиотека Стандартных Подсистем (БСП) проверяет применимость расширений.
  3. Если в расширении есть ошибки (например, несовпадение длины наследуемого реквизита или типа данных в другом объекте), БСП может программно отключить логику этого расширения (режим "Безопасный" или аналогичный).
  4. Важный нюанс: Даже если расширение помечено как "отключенное" или "ошибочное", платформа уже построила кэш метаданных с учетом того, что регистр захвачен в расширение.

Из-за несоответствия метаданных в "битом" расширении платформа не может корректно сопоставить типы колонок передаваемой ТаблицыЗначений (&НовыйНабор) с ожидаемой структурой таблицы в схеме запроса.

Также это часто сопровождается ошибками RLS (Ограничения доступа на уровне записей). Платформа пытается наложить шаблоны ограничений доступа на выборку из &НовыйНабор, но из-за поврежденной схемы метаданных в расширении не может скомпилировать запрос доступа.

Пошаговое решение проблемы

Чтобы исправить ошибку раз и навсегда, выполним следующие действия:

  1. Проверка расширений.

    Откройте список расширений конфигурации. Обратите внимание на те, у которых могут быть проблемы с применимостью (красные значки, ошибки при запуске).

  2. Анализ журнала регистрации.

    Посмотрите журнал регистрации в момент запуска программы. БСП часто пишет туда сообщения вида "Расширение ХХХ отключено из-за ошибки...".

  3. Исправление расширения.

    Если найдено проблемное расширение, которое заимствует регистр МероприятияТрудовойДеятельности (или связанные с ним объекты), его необходимо исправить.

    Частая причина: изменилась длина строкового реквизита в основной конфигурации после обновления, а в расширении осталась старая длина. Откройте расширение в конфигураторе и обновите заимствованные объекты, чтобы их типы соответствовали основной конфигурации.

  4. Удаление лишнего.

    Если расширение не используется или регистр в нем заимствован "про запас" (без реальных изменений), удалите этот регистр из расширения или удалите само расширение.

  5. Очистка кэша.

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

Техническое пояснение для разработчиков

Почему параметр &НовыйНабор вызывает ошибку именно в таком контексте?

В современных версиях платформы (8.3.24 и новее) оптимизатор запросов стал строже относиться к типизации временных таблиц, создаваемых из внешних источников данных. Когда мы выполняем конструкцию:


... ИЗ &НовыйНабор КАК Мероприятия

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

Вывод: При возникновении ошибки "Неверные параметры" для ТаблицыЗначений в типовых запросах, первым делом проверяйте корректность всех подключенных расширений и их влияние на участвующие в запросе объекты метаданных.

← На главную