Механизм «Представлений» в 1С:ЗУП 3.1 — это архитектурный паттерн, который часто вызывает вопросы у разработчиков, так как он не является документированным API. По сути, это способ унификации получения данных для системы компоновки данных (СКД) и отчетов, который позволяет системе «подменять» простые структуры на сложные запросы к данным в зависимости от контекста выполнения.
Рассмотрим подробнее, что происходит при работе с Представления_.... В коде конфигурации часто используются так называемые «болванки». Это временные таблицы, которые содержат типизированные поля с пустыми значениями. Их цель — не получение данных, а объявление структуры, которую СКД увидит и сможет обработать.
Разберем типичную «болванку» на примере Представления_КадровыеДанныеСотрудников:
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
ДАТАВРЕМЯ(1, 1, 1) КАК Период,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ЗНАЧЕНИЕ(Справочник.РазрядыКатегорииДолжностей.ПустаяСсылка) КАК РазрядКатегория,
ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка) КАК ВидЗанятости,
"" КАК Фамилия,
"" КАК Имя,
"" КАК Отчество,
0 КАК ТарифнаяСтавка,
0 КАК ТекущаяТарифнаяСтавка,
ДАТАВРЕМЯ(1, 1, 1) КАК ДатаУвольнения
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
Мы видим, что здесь нет реального источника данных в блоке ИЗ. Это объявление полей, необходимых для настройки отчета. При старте компоновки, если этот отчет является стандартным, система заменяет этот «пустой» запрос на «боевой», который извлекает реальные данные из регистров.
Чтобы успешно использовать представления в своих разработках, важно понимать, что вы работаете с временными таблицами. Рассмотрим пошагово, как подготовить данные для отчета:
ВТ), которые будут содержать нужные вам срезы данных (например, ВТСотрудники или ВТВсяКадроваяИстория).ГДЕ "ТолькоРазрешенные" = ИСТИНА. Это служебный маркер. Система 1С при выполнении запроса программно подменяет эту строку на реальные условия ограничения прав доступа (RLS). Если вы используете эти представления в своем коде, убедитесь, что правильно передаете параметры контекста.ВТОстаткиИОборотыВзаиморасчетыССотрудниками и последующих временных таблиц.Проанализируем пример для Представления_ОтработанноеВремя. Этот код показывает, как на основе регистра НачисленияУдержанияПоСотрудникам формируется итоговая таблица представления:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
НАЧАЛОПЕРИОДА(НачисленияИУдержания.Период, МЕСЯЦ) КАК МесяцНачисления,
НачисленияИУдержания.Период КАК Период,
НачисленияИУдержания.ФизическоеЛицо КАК ФизическоеЛицо,
// ... (дополнительные поля)
СУММА(НачисленияИУдержания.Сумма) КАК Сумма
ПОМЕСТИТЬ ВТНачисленияИУдержанияБезКадровыхДанных
ИЗ РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияИУдержания
ГДЕ НачисленияИУдержания.Период МЕЖДУ &НачалоПериода И &КонецПериода
СГРУППИРОВАТЬ ПО ...
После формирования ВТ, вы делаете итоговый выбор из неё, заполняя структуру представления. Это позволяет избежать дублирования кода и использовать мощные инструменты ЗУП по сбору данных.
При работе с этим механизмом придерживайтесь следующих правил:
&НачалоПериода, &КонецПериода) не были переданы или фильтр "ТолькоРазрешенные" отсекает все записи из-за настроек RLS.Работа с представлениями требует внимания к деталям и понимания того, как устроена подсистема учета в ЗУП. Рассматривайте эти конструкции не как статические таблицы, а как динамический интерфейс взаимодействия с данными, который 1С предоставляет для создания сложных отчетов.