Использование внешних таблиц значений в отчете 1С на СКД на реальном примере.

Автор: Admin.

spreadsheet  Актуально на платформе начиная с версии 8.3.17

 До данной версии использовать внешние таблицы в запросе СКД можно было только путем передачи внешнего источника данных, поля которого необходимо было описывать в схеме СКД вручную.
Теперь можно полностью создать стандартный отчет на СКД, отладить его, а при необходимости добавить в него какие-то внешние, дополнительно обработанные данные.
Относительно несложно например взять типовой 1С отчет и через объединение с внешней таблицей (а может даже и не одной) вывести в отчет дополнительные поля, не анализируя и не пытаясь изменить (иногда с риском нарушения работоспособности) изначальный текст запроса.
Т.е. польза данного нововведения в первую очередь в менее трудозатратной доработке какого-либо уже существующего решения, либо более быстрой разработе сложных отчетов, в случае если не все данных удается получить стандартным запросом.

Таблицы в Систему компоновки данных можно передавать через Менеджер временных таблиц, как и в обычный запрос. Пример: мы ходим получить данные сотрудника в виде строки (или как-то еще обработать), чтобы потом в отчете по сотрудникам вывести эти данные в отдельный столбец. Тогда в процедуре модуля ПриКомпоновкеРезультата пишем что-то типа:

МВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.Текст = "ВЫБРАТЬ
| ТекущиеКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
| ТекущиеКадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
| ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК ТекущаяДолжность
|ИЗ
| РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников";
НашаТаблица = Запрос.Выполнить().Выгрузить();

// добавили колонку под наши новые данные
НашаТаблица.Колонки.Добавить("КадровыеДанныеСтрокой", Новый ОписаниеТипов("Строка", ,Новый КвалификаторыСтроки(100)));

// здесь обрабатываем НашаТаблица
// ...
// ...

// и далее передаем в Менеджер временных таблиц через новый запрос

Запрос_2 = Новый Запрос;
Запрос_2.МенеджерВременныхТаблиц = МВТ;
Запрос_2.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ НашаТаблица ИЗ &НашаТаблица КАК НашаТаблица";
Запрос_2.УстановитьПараметр("НашаТаблица", НашаТаблица);
Запрос_2.Выполнить();
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных
,ВнешниеНаборыДанных,ДанныеРасшифровки,,,МВТ);

Все!
Теперь в тексте запроса СКД доступна выборка из нашей таблицы, например добавление к данным регистра ВидыЗанятости:

ВЫБРАТЬ
ВидыЗанятостиСотрудников.Сотрудник КАК Сотрудник,
НашаТаблица.КадровыеДанныеСтрокой,
ВидыЗанятостиСотрудников.ВидЗанятости КАК ВидЗанятости
ИЗ
РегистрСведений.ВидыЗанятостиСотрудников КАК ВидыЗанятостиСотрудников
ЛЕВОЕ СОЕДИНЕНИЕ НашаТаблица КАК НашаТаблица
ПО НашаТаблица.Сотрудник = ВидыЗанятостиСотрудников.Сотрудник