Как исправить ошибку определения КлючВарианта в типовых и внешних отчетах 1С

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

При доработке типовых отчетов в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как Зарплата и управление персоналом 3.1 или Зарплата и кадры государственного учреждения, программисты часто сталкиваются с неприятной особенностью: при добавлении нового варианта отчета или сохранении его как внешнего, параметр КлючВарианта начинает возвращать некорректное значение или вовсе Неопределено. Это критично, если логика печатной формы или компоновки результата завязана на конкретный вариант в процедуре ПриКомпоновкеРезультата. Разберем подробно, почему это происходит и как решить проблему несколькими способами.

Анализируем причину возникновения ошибки

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

Рассмотрим стандартную функцию получения ключа, которая обычно присутствует в модулях типовых отчетов:


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

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

Способ 1: Настройка параметров в СКД (без программирования)

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

  1. Откроем конфигуратор и перейдем в Схему компоновки данных нужного отчета.
  2. Перейдем на закладку Параметры. Найдем там параметр с именем КлючВарианта.
  3. Обратим внимание на свойства этого параметра. Часто он скрыт из пользовательских настроек. Чтобы система корректно обновляла его при смене варианта, нам нужно убедиться, что он доступен для механизмов БСП.
  4. Перейдем на закладку Настройки в нижней части окна СКД.
  5. Выберем в списке вариантов тот, который работает неправильно.
  6. В нижней части (настройки выбранного варианта) перейдем на вкладку Параметры.
  7. Если мы видим там параметр КлючВарианта с установленной галочкой использования и каким-то значением — снимем эту галочку. Именно она заставляет отчет всегда использовать один и тот же ключ, игнорируя реальный выбор пользователя.
  8. Если параметр не отображается, нажмем на кнопку "Отображать недоступные параметры" (иконка с перечеркнутым глазом или соответствующий пункт меню). После этого снимаем флаг использования.

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

Способ 2: Исправление проблемы во внешних отчетах

Если мы разрабатываем внешний отчет на базе типового (например, АнализНачисленийУдержаний), ситуация усложняется. Внешний отчет не всегда правильно связывается со справочником ВариантыОтчетов. В этом случае программный код может не находить параметр в КомпоновщикНастроек.Настройки.

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


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

    // Если мы во внешнем отчете, и ключ все равно не определен
    Если ТекущийКлюч = Неопределено Тогда
         // Логика определения для внешнего отчета
         // Можно использовать имя текущей схемы или настройки по умолчанию
    КонецЕсли;
КонецПроцедуры

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

Иногда настройки отчета "залипают" в системном хранилище. Даже если вы изменили СКД и убрали лишние галочки, у пользователя, который уже открывал этот отчет, настройки могут подгрузиться из его личного кэша (ХранилищеВариантовОтчетов).

Для решения этой проблемы выполним следующие действия:

  1. Зайдем в режиме "1С:Предприятие" под правами администратора.
  2. Перейдем в раздел Администрирование — Обслуживание — Управление настройками пользователей.
  3. Выберем нужного пользователя и найдем в списке настроек наш отчет.
  4. Очистим настройки для этого отчета.

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

Подведем итоги

Мы проанализировали проблему определения КлючВарианта в типовых решениях. Основная причина кроется в жесткой фиксации значения параметра внутри настроек конкретного варианта в СКД.

Помните:

Применяя эти методы, вы сможете корректно дорабатывать печатные формы типовых отчетов, не опасаясь, что программный код "потеряет" ваш новый вариант.

← На главную