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

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

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

Анализ механизма расшифровки в СКД

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

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

Решение 1: Настройка выбранных полей на уровне «Отчет»

Самый простой и зачастую самый эффективный способ — это определить состав ресурсов на самом верхнем уровне настроек. Рассмотрим этот процесс по шагам:

  1. Откроем схему компоновки данных и перейдем на закладку Настройки.
  2. В левом дереве выберем самый верхний элемент — Отчет.
  3. На вкладке Выбранные поля добавим все ресурсы, которые должны быть доступны во всех вариантах расшифровки.
  4. В самих группировках (ниже по дереву) убедимся, что в выбранных полях стоит флаг Авто или добавлены нужные поля.

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

Решение 2: Явное указание ресурсов в подчиненных группировках

Если специфика отчета не позволяет указать поля на уровне всего отчета (например, когда данные разных наборов выводятся в разных частях отчета и не должны перемешиваться), воспользуемся методом явного определения. Выясним причину: расшифровка — это, по сути, переход к подчиненной группировке Детальные записи или к конкретному полю, такому как Регистратор.

Чтобы ресурсы отобразились, выполним следующие действия:

  1. Найдем группировку, из которой вызывается расшифровка.
  2. Если расшифровка идет по конкретному полю (например, Регистратор), нам необходимо убедиться, что для этой «будущей» группировки также заданы выбранные поля.
  3. В настройках выбранных полей для текущей группировки обязательно должен присутствовать элемент Авто. Если вы удалили Авто и вручную перечислили поля, расшифровка «потеряет» связь с ресурсами, так как вы жестко ограничили состав колонок только этим уровнем.

Особенности работы с несколькими наборами данных

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

Проверьте следующие моменты в схеме:

Использование поля «Авто» в настройках

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

В списке Выбранные поля группировки это должно выглядеть так:

  1. Подразделение
  2. СуммаОборот
  3. Авто (или включенные в него поля)

Именно наличие элемента Авто позволяет системе пробрасывать настройки выбранных полей сверху вниз по иерархии расшифровки. Если его нет, то при открытии детальных записей из этой группировки состав колонок будет ограничен только тем, что вы указали явно для текущего уровня.

Программный контроль расшифровки

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


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

Этот метод позволяет гарантированно увидеть нужные колонки, даже если структура отчета крайне запутана. Однако в 90% случаев проблема решается правильной расстановкой флагов Авто и указанием ресурсов на уровне группировок, где ожидается детализация.

Резюме

Подводя итог, если у вас пропадают ресурсы при расшифровке:

Соблюдение этих правил позволит создавать надежные и информативные отчеты, в которых пользователи всегда смогут увидеть детальные данные по каждой цифре.

← На главную