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