Как в СКД реализовать детализацию по регистраторам внутри одного отчета через «плюсик»

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

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

Анализ проблемы: почему расшифровка открывается в новом окне

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

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

Способ 1. Связь нескольких наборов данных

Этот метод считается наиболее «правильным» и производительным, когда нужно объединить агрегированные данные (итоги) и детальные записи (документы). Разберем его по шагам:

  1. Создание наборов данных: В схеме компоновки создадим два набора данных — типа «Запрос». Первый запрос (НаборДанныхИтоги) будет получать общие суммы затрат в разрезе магазинов и статей. Второй запрос (НаборДанныхДетали) будет выбирать документы-регистраторы и конкретные суммы по ним.
  2. Настройка связей: Перейдем на закладку «Связи наборов данных». Здесь мы укажем, что НаборДанныхДетали является подчиненным. В колонке «Источник связи» выберем НаборДанныхИтоги, а в колонке «Приемник» — НаборДанныхДетали. Обязательно настроим связь по полям Магазин и СтатьяЗатрат.
  3. Настройка параметров связи: Чтобы второй запрос не выбирал лишние данные, в параметрах связи можно передать значения полей в параметры подчиненного запроса.
  4. Настройка структуры: Это критически важный этап. На закладке «Настройки» в дереве группировок нужно создать иерархию. Сначала идет группировка по Магазину, затем вложенная группировка по СтатьеЗатрат, и уже внутрь нее мы добавляем группировку <Детальные записи> или группировку по полю Регистратор.

Благодаря такой структуре СКД автоматически выведет «плюсик» рядом со статьей затрат, и при его нажатии отобразятся документы из второго набора данных.

Способ 2. Использование вложенных схем компоновки

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

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

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

Этот метод чуть сложнее в отладке, но незаменим, когда отчеты должны работать как независимые модули.

Способ 3. Один запрос с настройкой периодичности

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

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

  1. В конструкторе запроса выберем виртуальную таблицу Обороты.
  2. В параметрах таблицы (нажать на кнопку «Параметры виртуальной таблицы») установим значение Периодичность = Регистратор.
  3. Добавим поле Регистратор в выбранные поля запроса.
  4. В настройках СКД создадим иерархию группировок: Магазин -> Статья -> Регистратор.

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

Технические детали для конфигураций на обычных формах (УТ 10.3)

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


// Пример настройки программного вывода, если вы не используете стандартную форму отчета
ТабДок = ЭлементыФормы.Результат;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.ИспользоватьРасшифровку = Истина;

Если свойство ТолькоПросмотр установлено в Ложь, «плюсики» (группировки строк) могут не работать на сворачивание/разворачивание. Также проверьте свойство «Отображать группировки» у табличного документа.

Как избежать дублирования итогов (Роли полей)

Часто при связи наборов данных или получении детальных записей возникают ошибки в расчете итогов. Разберем, как это исправить через Роли полей на закладке «Наборы данных»:

Если поле является остатком, в колонке «Роль» необходимо указать тип Остаток, а также задать «Имя» для связи начального и конечного остатка. Для оборотных данных (затрат) убедитесь, что поле Регистратор помечено как обязательное для детализации, но не влияет на расчет итогов по вышестоящим уровням, если записи в базе дублируются из-за различных измерений.

Резюме

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

← На главную