СКД. Использование Менеджера временных таблиц в системе компоновки
Мой глаз зацепился за этот анонс еще в стадии бета-версии, уж больно заманчиво выглядела возможность компоновать отчет с использованием внешних данных.
Напомню, раньше при попытке подцепить временную таблицу, не описанную в запросе, СКД выдавала ошибку.

И для использования внешних источников данных приходилось использовать Набор данных объект.

Нельзя сказать, что он не выполнял свои задачи, нет. Но вручную набивать все поля набора, прописывать роли и типы значений было весьма утомительно.
С выходом платформы 8.3.17 ситуация в корне поменялась.

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



Да, да, я знаю, что данные надо выбирать не из всех этих регистров, но позвольте нагнать немного саспенса)
Либо воспользоваться механизмом представлений, который тоже имеет свои ограничения и нюансы. И да, временные таблицы в запросе все равно пришлось бы описывать.
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
Сотрудники.Ссылка КАК Сотрудник,
&Период КАК Период
ПОМЕСТИТЬ ВТСотрудники
ИЗ
Справочник.Сотрудники КАК Сотрудники
{ГДЕ
Сотрудники.Ссылка.* КАК Сотрудник,
(&Период) КАК Период,
Сотрудники.ФизическоеЛицо.*,
Сотрудники.ГоловнаяОрганизация.* КАК Организация,
Сотрудники.ФизическоеЛицо.ДатаРождения КАК ДатаРождения,
Сотрудники.ФизическоеЛицо.Пол.* КАК Пол,
Сотрудники.ФизическоеЛицо.ИНН КАК ИНН,
Сотрудники.ФизическоеЛицо.СтраховойНомерПФР КАК СтраховойНомерПФР}
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 0
ДАТАВРЕМЯ(1, 1, 1) КАК Период,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка) КАК ГрафикРаботы,
ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка) КАК ВидыЗанятости
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТСотрудники КАК ВТСотрудники
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
И "ВключатьЗаписиНаНачалоПериода" = ИСТИНА
Теперь в запросе можно использовать данные временных таблиц, не описанных в самом наборе данных.
ВЫБРАТЬ РАЗРЕШЕННЫЕ
Начисления.Сотрудник КАК Сотрудник,
Начисления.НачислениеУдержание КАК ВидРасчета,
Начисления.Сумма КАК Сумма,
ЕСТЬNULL(КадровыеДанные.Подразделение, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК Подразделение,
ЕСТЬNULL(КадровыеДанные.Должность, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка)) КАК Должность,
ЕСТЬNULL(КадровыеДанные.ГрафикРаботы, ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)) КАК ГрафикРаботы,
ЕСТЬNULL(КадровыеДанные.ВидЗанятости, ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ПустаяСсылка)) КАК ВидЗанятости
ИЗ
РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК Начисления
ЛЕВОЕ СОЕДИНЕНИЕ ВТКадровыеДанныеСотрудников КАК КадровыеДанные
ПО Начисления.Сотрудник = КадровыеДанные.Сотрудник
И Начисления.Период = КадровыеДанные.Период
ГДЕ
Начисления.Период = &МесяцНачисления
Как можно заметить, таблица ВТКадровыеДанныеСотрудников в запросе появляется сразу в соединении с основной таблицей, без ее предварительного объявления. Для того, чтобы компоновщик настроек мог понять, с каким типами данных из временной таблицы он имеет дело, желательно прописать это в тексте запроса, используя выражения языка запросов ВЫРАЗИТЬ(ВТ.ЗначениеПоля КАК <Описание типа>) или ЕСТЬNULL(ВТ.ЗначениеПоля, <Пустое значение такого же типа>). Для составных типов можно будет использовать выражение ВЫБОР КОГДА с последовательным описанием типов.
Затем в предопределенной процедуре ПриКомпоновкеРезультата модуля отчета, инициализируем менеджер временных таблиц с требуемыми данными. В результате инициализации в МВТ должа быть сформирована временная таблица с именем, идентичным объявленному в наборе данных.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
МесяцНачисления = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра("МесяцНачисления").Значение;
// Создаем МВТ
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
// Здесь наполняем МВТ данными
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина,, "Подразделение, Должность, ГрафикРаботы, ВидЗанятости", МесяцНачисления);
ЗарплатаКадры.СоздатьВТПоТаблицеЗначений(МенеджерВременныхТаблиц, КадровыеДанные, "ВТКадровыеДанныеСотрудников", Истина);
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанных"));
// Здесь его используем
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,, ДанныеРасшифровки, Истина,, МенеджерВременныхТаблиц);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
Само получение данных и помещение их в менеджер временных таблиц занимает ровно две строки
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина,, "Подразделение, Должность, ГрафикРаботы, ВидЗанятости", МесяцНачисления);
ЗарплатаКадры.СоздатьВТПоТаблицеЗначений(МенеджерВременныхТаблиц, КадровыеДанные, "ВТКадровыеДанныеСотрудников", Истина);
Таким образом можно получать данные любой структуры и сложности и использовать их в наборе данных схемы компоновки. Как по мне - отличная новость. Скорость разработки увеличивается на порядок. Можно помещать в МВТ свои таблицы значений, собранных по сложному алгоритму с обходом их в цикле. Можно, как в моем примере, использовать типовые функции получения данных. Можно использовать результат формирования других отчетов, скомпонованных в таблицу значений. Можно... Впрочем, оставлю простор для ваших фантазий)
Данный механизм работает в том числе и в режиме совместимости (я проверял на 8.3.14).
Пример взят предельно упрощенный, лишь для того, чтобы продемонстрировать работу механизма. На практике я уже применил этот метод работы СКД при разработке отчета, в котором начисления выводились вместе с численностью по штатному расписанию, фактической и среднесписочной численностью.
За рамками статьи остались некоторые вопросы вроде производительности и нагрузки на сервер.
Всем удачного кодинга!
P.S. Кратко не получилось )
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285492 1606 423
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Как решить проблему с отборами по полям СКД, когда с одинаковым отбором Отчет показывает одно, а Консоль запросов другое.
16.06.2026 6358 sapervodichka 45
Инструментарий разработчика СКД Разработчик 1С 8.3 Бесплатно (free)
В этой статье представлен ПовелительОтчетов — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.
29.01.2026 9425 454 shapa_pro 31
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.
29.10.2025 26995 ovetgana 112
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).
01.07.2025 15754 krasnoshchekovpavel 7
СКД Разработчик Стажер 1С:Предприятие 8 Россия Бесплатно (free)
Несколько способов управления формами выбора параметров и отборов СКД.
10.04.2025 15195 Neti 0
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.
27.02.2025 19813 ovetgana 50
СКД Разработчик 1С:Предприятие 8 Бесплатно (free)
СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.
24.12.2024 17734 Akcium 17
ВЫБРАТЬ
Хозрасчетный.Код КАК Код,
ВЫРАЗИТЬ(вт.пппп КАК Справочник.Валюты) КАК пппп
ИЗ
ПланСчетов.Хозрасчетный КАК Хозрасчетный
левое соединение вт по истина
ВЫБРАТЬ
ПОДСТРОКА(Хозрасчетный.Код,20) КАК Код,
ВЫБОР КОГДА вт.пппп ССылка Справочник.Валюты Тогда ВЫРАЗИТЬ(вт.пппп КАК Справочник.Валюты)
КОГДА вт.пппп ССылка Справочник.моиВалюты Тогда ВЫРАЗИТЬ(вт.пппп КАК Справочник.моиВалюты)
КОНЕЦ КАК ппп
ИЗ
ПланСчетов.Хозрасчетный КАК Хозрасчетный
левое соединение вт по истина
Показать(1)
1. В первой строке ты ошибся =) Функция Подстрока требует 3 параметра.
2. Очень замороченный способ для полей составного типа. Можно проще и короче
ВЫБРАТЬ
ПОДСТРОКА(Хозрасчетный.Код, 1, 20) КАК Код,
ВЫБОР КОГДА Ложь Тогда ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)
КОГДА Ложь ТОГДА ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)
ИНАЧЕ вт.пп
КОНЕЦ КАК ппп
ИЗ
ПланСчетов.Хозрасчетный КАК Хозрасчетный
левое соединение вт по истина ПоказатьКОГДА Ложь ТОГДА ЗНАЧЕНИЕ(Справочник.МестаХранения.ПустаяСсылка)
ИНАЧЕ вт.пп
КОНЕЦ КАК ппп
Вопрос: это есть такой синтаксис для ВЫБОР? Не встречал такого.
Теперь прояснилось, спасибо!
Буквально на прошлой неделе была проблема
с запросом Объектом так хотелось его проанализировать.
Тогда сразу же вопрос а объект можно каким то образом описать через данный механизм?
-наборы записей регистров,
-таблицы значений,
-табличная часть,
-результат запроса,
-область ячеек табличного документа,
-прикладной объект
Про менеджер ВТ ничего не сказано. Хотя логика подталкивает к такому его применению.
Надо будет на досуге попробовать.
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Период", НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период")));
СтруктураПараметров.Вставить("Организация", НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Организация")));
ДанныеОтражения = ЗаполнитьДанныеОтражения(СтруктураПараметров);
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ДанныеОтражения", ДанныеОтражения); Показатьэто передача Объекта
а с менеджером временных таблиц правильно как написать?
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,, ДанныеРасшифровки, Истина,, МенеджерВременныхТаблиц);Похоже, пример актуален лишь для ЗУП, только там такие извращения уместны.
ПроцессорКомпоновкиДанных.Инициализировать( МакетКомпоновки, ,,,, МВТ);
в МВТ должны остаться временные таблицы ) ?
иногда может возникнуть ситуация, когда хотелось бы продолжить работу с ними... хотя это неочевидный видимо вариант, но темне менее.
у меня там пусто (
В примере процедуры ПриКомпоновкеРезультата я бы еще добавил:
СтандартнаяОбработка = Ложь;- периодически про это забываю и вместо одного скомпанованного отчета получаю два :-)
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.ИсточникДанных = "ИсточникДанных";
НаборДанных.Имя = "НаборДанных";
НаборДанных.Запрос = ТекстЗапроса;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); ПоказатьДобавлю что для полей составного типа не обязательно использовать конструкцию
Выбрать когда .. выразить, можно в настройках поля указать Тип, установив галку составной, см. вложения
Да в таком варианте нельзя настроить отбор или поля методом нащёлкать мышкой, но можно установить программно.
В моё конкретном случае, этого хватило чтоб настроить отборы и структуру программно по полям менеджера таблиц
Проверил, МВТ пустая на выходе (на входе тоже передавал пустую), но мб я что-то делаю не так
Рейтинг: 2177
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1229680
Создание 29.04.20 06:00
Обновление 03.11.21 09:15
Просмотры 43047
Загрузки 0
Рейтинг
148
Комментарии 64
Код открыт Да
Рубрики СКД
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)