При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда основной отчет формируется корректно, разделяя данные по группировкам, но при попытке «провалиться» в показатель (выполнить расшифровку по регистратору или другому полю) открывается список, содержащий абсолютно все записи из базы, без учета контекста строки. Рассмотрим причины возникновения этой проблемы и разберем по шагам способы ее решения.
Представим типичную задачу: мы создаем отчет на основе регистра накопления (например, используя виртуальную таблицу Обороты). В структуре настроек у нас есть несколько вложенных группировок и числовые ресурсы. На первый взгляд все работает отлично: цифры сходятся, иерархия соблюдается. Однако при двойном клике на сумму и выборе поля расшифровки Документ (или Регистратор), система выдает полный перечень документов за весь период, игнорируя тот факт, что мы кликнули на конкретную номенклатуру или конкретный склад.
Проанализируем ситуацию: почему штатный механизм 1С «теряет» фильтры группировок при переходе к детальным записям? Чаще всего это происходит из-за тонких настроек набора данных и компоновщика настроек.
Это самая распространенная причина. В СКД на закладке «Набор данных» есть флаг «Автозаполнение». Если этот флаг снят, разработчик берет на себя полную ответственность за описание всех доступных полей, параметров и — что критично — полей отбора.
Разберем подробнее: когда мы выполняем расшифровку, СКД формирует новый запрос к базе данных. Чтобы этот запрос был ограничен контекстом текущей ячейки, система должна наложить фильтры по всем измерениям, которые присутствуют в вышестоящих группировках. Если для поля (например, Номенклатура или Склад) в схеме не разрешено использование в качестве отбора, компоновщик просто не сможет передать это значение в запрос расшифровки.
Как исправить:
Ссылка документа), также доступно для отбора.Если мы работаем с отключенным автозаполнением, нам необходимо явно указать СКД, в какие места запроса она может подставлять условия. Для этого используются расширения языка запросов — фигурные скобки {...}.
Посмотрим на пример запроса, который может вызвать проблемы при расшифровке:
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.Регистратор КАК Документ
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПродажиОбороты
В данном случае, если мы попытаемся сделать расшифровку, система может не понять, куда именно вставить условие ГДЕ Номенклатура = &ЗначениеИзГруппировки. Правильным подходом будет использование секции ГДЕ с описанием доступных полей отбора в фигурных скобках.
Рассмотрим правильный вариант оформления секции условий:
ВЫБРАТЬ
ПродажиОбороты.Номенклатура КАК Номенклатура,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.Регистратор КАК Документ
ИЗ
РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ПродажиОбороты
{ГДЕ
ПродажиОбороты.Номенклатура.*,
ПродажиОбороты.Регистратор.*}
Синтаксис Поле.* сообщает системе компоновки, что данное поле (и все его реквизиты) может быть использовано для динамического наложения фильтров при выполнении расшифровки.
Выясним еще одну важную деталь. Чтобы СКД понимала, как связаны ресурсы с измерениями, у каждого поля должна быть правильно настроена Роль. Для виртуальных таблиц оборотов крайне важно, чтобы измерения регистра имели роль «Измерение».
Если вы используете временные таблицы в запросе, проанализируем ситуацию: СКД не всегда может автоматически проследить связь между итоговой временной таблицей и исходными таблицами БД. Если поле Документ выбирается из временной таблицы, убедитесь, что в настройках поля на закладке «Набор данных» указано, что это поле является обязательным для отбора или имеет правильные роли связей.
Если вы разрабатываете отчет для конфигурации «1С:Бухгалтерия предприятия 3.0» или любой другой на базе БСП, помните, что расшифровка там часто обрабатывается программно. В модуле формы типового отчета может присутствовать процедура РезультатОбработкаРасшифровки.
Если вы вносили изменения в программную часть, проверьте следующие моменты:
НастройкиКомпоновкиДанных без копирования текущих настроек отчета.ДанныеРасшифровки в обработчик.СтандартнаяОбработка = Истина).В большинстве случаев для внешних отчетов с типовой формой достаточно просто правильно настроить схему (снять/поставить автозаполнение или настроить доступные поля отбора), и штатный механизм БСП сам подхватит контекст группировок.
Если ваша расшифровка вываливает «всю выборку», пройдитесь по этому списку:
{ГДЕ...} с указанием всех значимых полей.&НачалоПериода и &КонецПериода установлены корректно и доступны для СКД.Соблюдение этих правил гарантирует, что Система компоновки данных сможет однозначно идентифицировать контекст каждой ячейки и сформировать точный запрос для расшифровки, экономя время пользователя и ресурсы сервера.