Как вывести дополнительные свойства и сведения сотрудника в отчете СКД?

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

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

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

Причина проблемы: Метаданные против Данных

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

В режиме конфигуратора система видит только жестко заданную структуру метаданных. Свойства же создаются пользователями в режиме предприятия, поэтому конфигуратор о них ничего не знает. Чтобы они появились в отчете, нам нужно правильно настроить механизм Характеристик.

Решение 1. Настройка вкладки «Характеристики» в СКД

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

  1. Откроем схему компоновки данных и перейдем на вкладку «Характеристики».
  2. Добавим новую строку и заполним её параметры. Здесь важно учитывать специфику конфигурации (например, ЗУП 3.1, ERP или КА).
  3. Тип объекта: Часто разработчики совершают ошибку, указывая здесь СправочникСсылка.Сотрудники. Однако во многих конфигурациях образование и личные качества привязаны к физическому лицу. Поэтому в качестве типа объекта стоит выбирать СправочникСсылка.ФизическиеЛица (или оба справочника, если свойства распределены).
  4. Источник характеристик: Выберем «Таблица».
  5. Виды характеристик: Здесь указываем таблицу, где хранятся сами определения свойств. Обычно это ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.
  6. Поле ключа: Ссылка.
  7. Поле имени: Наименование.
  8. Значения характеристик: Указываем таблицу, где хранятся значения. Для справочников это обычно табличная часть ДополнительныеРеквизиты того же справочника.
  9. Поля таблицы значений: Объект — Ссылка, Вид характеристики — Свойство, Значение — Значение.

После такой настройки, если мы развернем поле ФизическоеЛицо (или Сотрудник) в доступных полях, внутри появится виртуальная папка со всеми созданными свойствами.

Решение 2. Различие между «Сотрудником» и «Физлицом»

Проанализируем структуру данных в 1С:ЗУП 3.1. Объект Сотрудник отвечает за трудовой договор и позицию в штате, в то время как ФизическоеЛицо хранит персональные данные. Если вы ищете «Образование» в сотруднике, вы его там не найдете, так как диплом выдается человеку, а не штатной единице.

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

Решение 3. Получение образования, если это табличная часть

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

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

Пример настройки ресурса:

СоединитьСтроки(ТаблицаОбразования.ВидОбразования, "; ")

Это позволит вывести все записи об обучении сотрудника в одну ячейку отчета через точку с запятой.

Решение 4. Использование «Виртуальных полей» в запросе

Если нам нужно, чтобы конкретное поле (например, «Ученая степень») всегда присутствовало в списке доступных, даже если оно еще не заполнено, мы можем прибегнуть к хитрости в тексте запроса. Выясним, как объявить такое поле принудительно:


ВЫБРАТЬ
    Сотрудники.Ссылка КАК Сотрудник,
    ВЫРАЗИТЬ(NULL КАК ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения) КАК ПолеОбразование
ИЗ
    Справочник.Сотрудники КАК Сотрудники

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

Решение 5. Сброс кэша и обновление пользовательских настроек

Часто бывает так: программист внес изменения в конфигураторе, добавил характеристики, проверил — все верно. Но пользователь открывает отчет и не видит новых полей. Выясним причину: СКД очень агрессивно кэширует структуру доступных полей в пользовательских настройках.

Рассмотрим алгоритм обновления:

  1. Зайдем в отчет в режиме «1С:Предприятие».
  2. Нажмем кнопку «Еще» (или «Все действия»).
  3. Выберем пункт «Установить стандартные настройки».

Это действие полностью очистит старое дерево полей и загрузит актуальную структуру из схемы компоновки, которую вы только что изменили в конфигураторе.

Решение 6. Проверка функциональных опций

Если вы всё настроили верно, но папка с доп. реквизитами так и не появилась, проверим функциональные опции системы. В конфигурациях на базе БСП (ЗУП, ERP, УТ) существует константа ИспользоватьДополнительныеРеквизитыИСведения. Если она выключена в настройках программы, СКД может игнорировать любые настройки на вкладке «Характеристики». Убедитесь, что в разделе «Администрирование — Общие настройки» включена соответствующая галочка.

Программный вывод характеристик

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

Посмотрим на пример правильной инициализации:


ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);

Последний параметр Истина как раз отвечает за возможность использования расширений (включая характеристики).

Подведем итог: для успешного вывода свойств сотрудника в СКД необходимо четко разделять понятия «Сотрудник» и «Физлицо», правильно сконфигурировать вкладку «Характеристики» и не забывать сбрасывать пользовательские настройки к стандартным после внесения изменений в схему.

← На главную