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