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