При разработке сложных отчетов в системе компоновки данных (СКД), особенно когда используется несколько наборов данных, разработчики часто сталкиваются с неприятной ситуацией: в основном отчете все цифры и колонки на месте, но стоит пользователю нажать на расшифровку (например, чтобы посмотреть детальные записи по Регистратору), как открывшееся окно показывает только ключевые поля, а колонки с суммами, количеством и другими ресурсами бесследно исчезают. Разберем детально, почему так происходит и как заставить СКД выводить ресурсы в окне расшифровки.
Прежде чем переходить к настройкам, давайте проанализируем, как работает механизм расшифровки. Когда пользователь делает двойной клик на ячейке отчета, система формирует новый контекст компоновки. Если расшифровка выполняется стандартными средствами, 1С создает временную схему и настройки на основе тех, что были в исходном отчете. Проблема заключается в наследовании настроек Выбранные поля.
В СКД существует строгая иерархия. Настройки могут быть заданы на уровне Отчет, а могут быть переопределены для каждой конкретной Группировки. Если на уровне Отчет список выбранных полей пуст, а все ресурсы добавлены только в настройки конкретной группировки (например, Подразделение), то при попытке «провалиться» глубже в расшифровку, система не находит ресурсов в родительском списке и не понимает, что их нужно тащить в детализацию.
Самый простой и зачастую самый эффективный способ — это определить состав ресурсов на самом верхнем уровне настроек. Рассмотрим этот процесс по шагам:
Авто или добавлены нужные поля.Почему это работает: Когда мы указываем ресурсы на уровне отчета, они становятся «доступными по умолчанию» для всех дочерних элементов и любых динамически создаваемых расшифровок.
Если специфика отчета не позволяет указать поля на уровне всего отчета (например, когда данные разных наборов выводятся в разных частях отчета и не должны перемешиваться), воспользуемся методом явного определения. Выясним причину: расшифровка — это, по сути, переход к подчиненной группировке Детальные записи или к конкретному полю, такому как Регистратор.
Чтобы ресурсы отобразились, выполним следующие действия:
Регистратор), нам необходимо убедиться, что для этой «будущей» группировки также заданы выбранные поля.Авто. Если вы удалили Авто и вручную перечислили поля, расшифровка «потеряет» связь с ресурсами, так как вы жестко ограничили состав колонок только этим уровнем.Ситуация усложняется, когда в отчете присутствуют несколько наборов данных (например, объединение данных из регистра бухгалтерии и регистра накопления). Проанализируем ситуацию: если ресурс СуммаОстаток принадлежит НаборуДанных1, а поле расшифровки Регистратор принадлежит НаборуДанных2, то без правильно настроенных связей расшифровка не поймет, как сопоставить эти данные.
Проверьте следующие моменты в схеме:
Регистратор в наборе данных должна быть правильно указана роль. Желательно, чтобы он был отмечен как период.Многие начинающие разработчики совершают ошибку, полностью очищая список выбранных полей и добавляя туда только нужные колонки. Посмотрим на пример правильной настройки:
В списке Выбранные поля группировки это должно выглядеть так:
ПодразделениеСуммаОборотАвто (или включенные в него поля)Именно наличие элемента Авто позволяет системе пробрасывать настройки выбранных полей сверху вниз по иерархии расшифровки. Если его нет, то при открытии детальных записей из этой группировки состав колонок будет ограничен только тем, что вы указали явно для текущего уровня.
В исключительных случаях, когда стандартные настройки СКД не справляются (например, при сложной динамической замене наборов данных), можно прибегнуть к программному формированию расшифровки в модуле формы отчета. Рассмотрим пример того, как можно принудительно добавить поля в обработчик:
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Создаем обработчик расшифровки
Обработка = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
// Получаем текущие настройки
Настройки = Обработка.Выполнить(Расшифровка, , , Ложь);
// Принудительно добавляем ресурс в выбранные поля, если его там нет
ПолеСумма = Новый ПолеКомпоновкиДанных("Сумма");
Если Настройки.ВыбранныеПоля.Элементы.Найти(ПолеСумма) = Неопределено Тогда
НовоеПоле = Настройки.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
НовоеПоле.Поле = ПолеСумма;
НовоеПоле.Использование = Истина;
КонецЕсли;
// Выводим отчет в новое окно или текущее
// ... дальнейшая логика вывода ...
КонецПроцедуры
Этот метод позволяет гарантированно увидеть нужные колонки, даже если структура отчета крайне запутана. Однако в 90% случаев проблема решается правильной расстановкой флагов Авто и указанием ресурсов на уровне группировок, где ожидается детализация.
Подводя итог, если у вас пропадают ресурсы при расшифровке:
Соблюдение этих правил позволит создавать надежные и информативные отчеты, в которых пользователи всегда смогут увидеть детальные данные по каждой цифре.