Почему не работает отбор в СКД в режиме Предприятия и как это исправить?

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

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

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

Причина 1: Ошибка в имени варианта настроек при программном формировании

Если вы формируете внешний отчет программно, выясним причину, по которой отбор может «улетать в пустоту». Чаще всего проблема кроется в методе ЗагрузитьНастройки(), когда разработчик пытается подтянуть каркас настроек из схемы компоновки, но указывает неверное имя варианта.

Посмотрим на пример кода, который вызывает ошибку:


НовыйКомпоновщикНастроек.ЗагрузитьНастройки(ИспользуемаяСхемаКомпоновкиДанных.ВариантыНастроек["Основной"].Настройки);

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

Решение: Внимательно проверьте имя варианта настроек, прописанное в самой СКД, и убедитесь, что в коде вы обращаетесь именно к нему.

Причина 2: Игнорирование пользовательских настроек (Базовые vs Пользовательские)

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

  1. Базовые настройки (свойство Настройки) — это настройки самого варианта отчета, заданные в Конфигураторе.
  2. Пользовательские настройки (свойство ПользовательскиеНастройки) — это параметры, отборы и флажки, которые пользователь интерактивно устанавливает на форме отчета в режиме Предприятия.

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


// Правильное получение настроек с учетом пользовательских фильтров
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();

Именно этот метод собирает воедино базовый вариант отчета и все интерактивные отборы с формы.

Причина 3: Коварное кэширование внешних отчетов

Разберем еще один частый подводный камень — кэширование настроек. Платформа 1С запоминает пользовательские настройки внешнего отчета при его первом открытии.

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

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

Причина 4: Путаница между параметрами и отборами

Часто разработчики путают параметры и отборы. Рассмотрим подробнее, в чем разница, так как это принципиально разные механизмы в СКД:

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

Из-за этой особенности существует скрытая причина нерабочих отборов — Ограничения полей. Зайдите в схему компоновки данных на вкладку «Наборы данных». Проверьте колонку «Условие» для проблемного поля. Если там случайно установлена галочка, СКД запретит фильтровать данные по этому полю. Отбор можно будет вывести на форму, пользователь сможет его заполнить, но при формировании отчета платформа его просто проигнорирует без каких-либо предупреждений.

Причина 5: Неправильное программное добавление отбора

Если вам необходимо наложить отбор полностью программно (не опираясь на готовый вариант настроек), важно помнить о правильном размещении этого отбора.

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

Используя эти правила, вы сможете быстро локализовать проблему и заставить отборы СКД работать так, как это задумано.

← На главную