Что делать, если в отчете СКД работает отбор, которого нет в настройках?

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

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

Разберем подробно причины возникновения таких «фантомных» отборов и выясним, как их диагностировать и устранять, опираясь на механизмы Системы компоновки данных (СКД).

Поймем структуру настроек СКД

Для начала проанализируем, где физически может «прятаться» отбор. В платформе 1С 8.3 компоновщик настроек оперирует тремя независимыми уровнями, которые накладываются друг на друга последовательно:

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

Если в вашем отчете, как в рассматриваемом случае, в заголовке выводится текст «Склад в группе из списка...», это означает, что компоновщик видит этот элемент в своей итоговой структуре, но визуализатор (форма настроек) по какой-то причине его скрывает.

Проанализируем режим отображения отбора

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

Перейдем в режим Изменить вариант. В открывшемся окне выберем вкладку Отбор. Обратим внимание на колонку, которая часто скрыта по умолчанию или игнорируется — «Режим отображения». Существует три режима:

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

Выясним влияние программных механизмов типовых решений

В типовых конфигурациях (КА, ERP, УТ 11) отчеты часто строятся не «напрямую» через СКД, а через подсистему «Варианты отчетов». Рассмотрим подробнее ситуацию с Рассылкой отчетов.

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

Посмотрим на пример кода, который позволяет в отладчике «увидеть» все реально действующие отборы, включая фиксированные:


// Вставьте точку останова в процедуру ПриКомпоновкеРезультата
// или используйте внешнюю обработку для анализа объекта КомпоновщикНастроек

НастройкиИтого = КомпоновщикНастроек.ПолучитьНастройки();
Для Каждого ЭлементОтбора Из НастройкиИтого.Отбор.Элементы Цикл
    Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
        Сообщить("Поле: " + ЭлементОтбора.ЛевоеЗначение + " | Значение: " + ЭлементОтбора.ПравоеЗначение);
    КонецЕсли;
КонецЦикла;

Проблема серверного кэширования и «фантомных» данных

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

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

Проанализируем последовательность действий для исправления ситуации без перезапуска всего сервера:

  1. Попробуем нажать в отчете кнопку Еще — Установить стандартные настройки. Это принудительно перезапишет текущий компоновщик настройками из схемы XML.
  2. Если это не помогло, создадим новый вариант отчета (не копированием старого, а «с нуля») и перенесем в него настройки вручную. Это исключит перенос «битого» XML-кода из старого варианта.
  3. Проверим наличие Расширений. Если в системе установлены расширения, они могут перехватывать процедуру ПриКомпоновкеРезультата и программно добавлять фиксированные настройки.

Использование Консоли СКД для глубокой диагностики

Если отбор все еще не найден, воспользуемся консолью системы компоновки данных. Это мощный инструмент, который позволяет загрузить схему и текущие настройки, а затем выгрузить их в XML. Проанализируем полученный XML-файл: ищем теги <filter> и <item>. Если в XML вы видите узел с полем «Склад», но в интерфейсе 1С его нет — значит, дело либо в свойстве ViewMode (РежимОтображения), либо в том, что поле помечено как недоступное для использования в настройках на уровне метаданных схемы, но физически присутствует в сохраненном варианте.

Важный момент: В типовых отчетах ERP/КА поле может стать недоступным из-за изменения Функциональных опций. Например, если в какой-то момент было отключено ведение учета по нескольким складам, поле «Склад» может исчезнуть из доступных полей компоновщика, но если в старом варианте отчета отбор по нему был установлен — он продолжит влиять на результат, превратившись в «невидимку».

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

← На главную