Как добавить символ раскрытия («плюсик») к вычисляемым полям в отчетах 1С на СКД?

Программист 1С v8.3 (Управляемые формы)
← К списку

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

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

Понимание механизма раскрытия в СКД

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

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

Решение 1: Типизация вычисляемых полей с помощью функции ВЫРАЗИТЬ()

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


Документ.ЗаказПоставщику
,

Документ.РеализацияТоваровУслуг
и т.д.).

Функция ВЫРАЗИТЬ(Выражение КАК Тип) позволяет нам указать СКД, к какому конкретному типу относится значение в данном поле. Это дает следующие преимущества:

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

Рассмотрим пример, предложенный в обсуждении. Если у нас есть поле РасчетныйДокумент, которое может быть документом разных типов, и мы хотим получить его Статус, мы можем использовать ВЫРАЗИТЬ():


Выразить(РасчетныйДокумент КАК Документ.ЗаказПоставщику)

Или, чтобы сразу получить реквизит:


(Выразить(РасчетныйДокумент КАК Документ.ЗаказПоставщику)).Статус

Важный момент: Само по себе использование функции ВЫРАЗИТЬ() не добавляет символ «плюсик» для раскрытия. Оно лишь делает вычисляемое поле типизированным, позволяя нам работать с его внутренними реквизитами. Символ раскрытия появляется благодаря другой настройке, которую мы рассмотрим далее.

Решение 2: Настройка иерархических группировок для вычисляемых полей

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

Разберем по шагам, как настроить раскрытие для вычисляемого поля:

  1. Создайте вычисляемое поле: Перейдите на закладку «Вычисляемые поля» в конструкторе СКД. Создайте новое поле. Если поле имеет составной тип и вы хотите обращаться к его реквизитам, обязательно используйте функцию ВЫРАЗИТЬ() для явной типизации. Например, если наше вычисляемое поле называется ДокументОснование, и мы хотим, чтобы оно было конкретно Документ.ЗаказПоставщику:

    
    ВЫРАЗИТЬ(ДокументОснование КАК Документ.ЗаказПоставщику)
    

    Назовем это вычисляемое поле, например, ОснованиеЗаказПоставщику.

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

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

  4. Добавьте необходимые реквизиты для отображения: Теперь, когда вычисляемое поле является группировкой, вы можете добавить его реквизиты для отображения в детализации этой группировки. В списке доступных полей для группировки вы увидите реквизиты вашего типизированного вычисляемого поля (например, ОснованиеЗаказПоставщику.Дата, ОснованиеЗаказПоставщику.Номер, ОснованиеЗаказПоставщику.Контрагент и т.д.). Выберите те, которые хотите видеть при раскрытии.

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

Дополнительные аспекты и частые заблуждения

Рассмотрим некоторые дополнительные моменты, которые могут вызывать вопросы:

Заключение

Итак, чтобы добавить символ раскрытия («плюсик») к вычисляемым полям в отчетах 1С на СКД, нам необходимо выполнить две основные задачи:

  1. Типизировать вычисляемое поле с помощью функции ВЫРАЗИТЬ(), если оно имеет составной тип и мы хотим обращаться к его реквизитам.
  2. Использовать это вычисляемое поле в качестве группировки в настройках отчета и установить для этой группировки соответствующий Тип иерархии.

Эти действия позволят СКД корректно интерпретировать вычисляемое поле как иерархический элемент и предоставить пользователю возможность раскрывать его для просмотра подчиненных реквизитов. Мы рассмотрели подробные шаги и выяснили причину такого поведения СКД, что поможет вам эффективно решать подобные задачи в будущем.

← К списку