Откуда берутся скрытые параметры выбора в отборах СКД и как их убрать?

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

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

Проанализируем ситуацию

Допустим, мы работаем с отчетом ПричиныОтменыЗаказовКлиентов. Включена функциональная опция Причины отмены заказов клиентов, а опция для поставщиков отключена. При подборе клиентов в поле отбора открывается форма подбора справочника Партнеры, но с уже установленным параметром Поставщик = Истина. Из-за этого мы не можем выбрать нужных клиентов.

Если мы проанализируем отладчиком форму отчета, например, в процедуре ПриСозданииНаСервере, и вычислим выражение:


Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[7].ДоступныеПоляОтбора.Элементы[1].ПолучитьПараметрыВыбора();

То увидим, что параметр отбора по поставщикам уже установлен. При этом, если открыть саму схему СКД в конфигураторе, у поля Партнер параметры выбора пусты. Выясним причину такого поведения.

Дело в том, что отчет использует общую форму настроек БСП ФормаНастроекОтчета. Перед открытием формы подбора эта форма лезет в пользовательские настройки, находит доступное поле, считывает его параметры выбора с помощью метода ПолучитьПараметрыВыбора() и передает их в открываемую форму. Откуда же в настройках берется этот параметр? Рассмотрим основные архитектурные причины.

1. Наследование свойств из метаданных (Автозаполнение СКД)

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

2. Особенности запросов с объединением (UNION)

Проанализируем источник данных отчета. Если в СКД используется запрос с объединением нескольких таблиц (оператор ОБЪЕДИНИТЬ) и случайно задеты таблицы, касающиеся поставщиков, возникает следующий нюанс. СКД формирует итоговые свойства поля по первому запросу в блоке объединения. Если в первой выборке поле ссылается на таблицу, где есть системный отбор по поставщику, этот параметр выбора будет применен ко всему полю отчета целиком.

3. «Залипание» пользовательских настроек БСП

Даже если вы исправили схему или выгрузили отчет во внешний файл, старые настройки могут продолжать применяться. Пользовательские настройки (где и «осел» наш злополучный параметр) сохраняются в объекте ХранилищеСистемныхНастроек платформы. Обновление справочника вариантов отчета обновляет общие схемы, но не сбрасывает индивидуальный кэш пользователя.

Что нужно сделать: В открытом отчете в режиме предприятия нажмите кнопку «Еще», затем выберите «Установить стандартные настройки». Только после этого пользовательские настройки будут сброшены и перечитают дефолтную схему СКД без зависшего параметра.

4. Влияние расширений конфигурации и патчей

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

5. Программное вмешательство алгоритмов БСП

Параметры выбора могут программно модифицироваться до отрисовки формы подбора. Библиотека стандартных подсистем (БСП) имеет набор переопределяемых обработчиков. Проверим модуль менеджера и модуль объекта самого отчета. Обратим внимание на процедуры:

  1. СобытияПриЗагрузкеПользовательскихНастроекНаСервере
  2. ПриКомпоновкеРезультата

Алгоритм может анализировать включенные функциональные опции и программно внедрять параметр выбора прямо в компоновщик настроек в момент подготовки отчета к выводу.

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

← На главную