Почему в отчете из расширения исчезла вкладка «Параметры» и возникает ошибка «Значение не является значением объектного типа (Дата)»?

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

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

Анализ причин сбоя

Проанализируем механизм работы отчета и выясним, почему возникает такое поведение системы:

  1. Специфика архитектуры отчета «ОтчетыПоСотрудникам»: данный отчет в ЗУП 3 не извлекает данные напрямую простым текстом запроса СКД. Он построен на механизме представлений кадровых данных. В самой схеме заложены шаблоны запросов с фиктивными временными таблицами (например, ВТСотрудники, Представления_КадровыеДанныеСотрудников). В модуле объекта в процедуре ИнициализироватьОтчет() программно выполняется перехват и замена этих шаблонов реальными запросами к регистрам. Алгоритм жестко завязан на состав и структуру параметров компоновки данных.
  2. Повреждение параметров СКД при ручной правке запроса: когда текст запроса редактируется в схеме компоновки вручную (без использования конструктора или при некорректном сохранении), платформа может автоматически переопределить список параметров. Если у служебных параметров (например, Период, ДатаНачала, ДатаОкончания или ДатаАктуальности) сбрасывается тип с СтандартныйПериод на пустой, очищаются выражения расчета или значение инициализируется как Неопределено, программный код БСП падает при попытке прочитать поля периода:
    
    // Пример проблемного участка в модуле объекта:
    ПараметрПериод = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));
    // Если тип или структура параметра повреждены, обращение к датам вызывает исключение:
    ДатаСреза = ПараметрПериод.Значение.ДатаОкончания; 
    
  3. Сбой формирования интерфейса БСП: вкладка «Параметры» в общей форме отчета формируется динамически в процедуре ОбновитьЭлементыФормыНастроекНаСервере. Если вызов события ПередЗагрузкойНастроекВКомпоновщик падает с ошибкой, инициализация формы настроек прерывается, и страница параметров вообще не отрисовывается в пользовательском интерфейсе. Также вкладка скрывается, если у всех параметров включено ограничение доступности либо платформа потеряла их привязку к пользовательским настройкам.

Способ 1. Откат изменений и аккуратная повторная модификация запроса

Разберем прямое решение, которое позволяет быстро восстановить работоспособность отчета, если при ручном редактировании текста запроса в расширении произошел сбой метаданных схемы:

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

Способ 2. Проверка и ручное восстановление параметров СКД в расширении

Если откат назад нежелателен, проверим схему компоновки вручную по шагам:

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

Способ 3. Очистка кэша и сохраненных настроек пользователя

Иногда после исправления схемы компоновки данных ошибка продолжает воспроизводиться из-за того, что платформа пытается применить старые некорректные пользовательские настройки, сохраненные в информационной базе:

  1. В режиме «1С:Предприятие» в окне отчета нажмем кнопку Еще и выберем пункт Стандартные настройки, чтобы сбросить структуру компоновщика к значениям по умолчанию из схемы.
  2. Если отчет вообще аварийно завершает работу и не дает открыть командную панель, перейдем в раздел Администрирование → Настройки пользователей и прав → Очистка настроек. Выберем проблемного пользователя и удалим сохраненные настройки для отчета ОтчетыПоСотрудникам.
  3. Перезапустим клиентское приложение с ключом командной строки /ClearCache, чтобы обновить структуры метаданных и кэш схемы компоновки данных расширения.

Альтернативный подход: программная доработка без заимствования СКД

Рассмотрим альтернативный вариант решения задачи, если в отчет требуется всего лишь добавить новые кадровые сведения. Заимствование тяжелых типовых СКД отчетов ЗУП 3 часто приводит к проблемам совместимости при последующих обновлениях программы.

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

← На главную