1с скд таблица значений как параметр
Добрый день.
Нужно передать таблицу значений в СКД как параметр, чтобы потом ее содержимое поместить во временную таблицу и далее сделать пакетный запрос с внутренним соединением с этой временной таблицей.
Обычный способ передачи таблицы значений в набор данных для СКД не подходит, т к мне нужно делать внутренне соединение с этим набором, а СКД делает только левое.
Возьми левое, выкинь все что получилось Null при соединении, не вариант?
Долго работать будет, выполняя соединение. Очень много строк в том что справа.
Я в подобных случаях делаю набор данных сам, вообще не в СКД, а потом уже готовый для вывода туда запихиваю.
а почему просто тупо не присвоить ТЗ параметру СКД?
Дело в том, что если в запросе есть 1 такой запрос из пакета
то при сохранении отчета и при открытии одинаково рунается так
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
<(16, 2)>: Неверные параметры «ТаблЗн»
>&ТаблЗн КАК ВремТабл
(5) Формируй сразу источник данных и отдавай его СКД
(6) Что именно Вы имеете ввиду?
В смысле выполнить весь пакетный запрос обычным объектом запрос, и результитрующую таблицу значений выдать в СКД как набор данных?
Но тогда у меня не будет возможности отбирать данные на этапе запроса с целью повыения быстродействия, фильтр уже будет только на конечный результат ложиться.
(0) На сколько я понял СКД — никак. Можно ТЗ передать в СКД только как независимый источник данных, но использовать его тут же в запросе этого же СКД нельзя.
(8) для фильтрации можно использовать колонку этой таблицы. Колонка — это массив. А массив можно передать как параметр.
(2) а так он что без соединения работает или внутреннее соединение быстрее левого? При выводе Отбор и все.
Использование внешних таблиц значений в отчете 1С на СКД на реальном примере.
До данной версии использовать внешние таблицы в запросе СКД можно было только путем передачи внешнего источника данных, поля которого необходимо было описывать в схеме СКД вручную.
Теперь можно полностью создать стандартный отчет на СКД, отладить его, а при необходимости добавить в него какие-то внешние, дополнительно обработанные данные.
Относительно несложно например взять типовой 1С отчет и через объединение с внешней таблицей (а может даже и не одной) вывести в отчет дополнительные поля, не анализируя и не пытаясь изменить (иногда с риском нарушения работоспособности) изначальный текст запроса.
Т.е. польза данного нововведения в первую очередь в менее трудозатратной доработке какого-либо уже существующего решения, либо более быстрой разработе сложных отчетов, в случае если не все данных удается получить стандартным запросом.
Таблицы в Систему компоновки данных можно передавать через Менеджер временных таблиц, как и в обычный запрос. Пример: мы ходим получить данные сотрудника в виде строки (или как-то еще обработать), чтобы потом в отчете по сотрудникам вывести эти данные в отдельный столбец. Тогда в процедуре модуля ПриКомпоновкеРезультата пишем что-то типа:
МВТ = Новый МенеджерВременныхТаблиц;
Запрос = Новый Запрос;
Запрос. МенеджерВременныхТаблиц = МВТ;
Запрос.Текст color: #3366ff;»>ВЫБРАТЬ
| ТекущиеКадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
| ТекущиеКадровыеДанныеСотрудников.ДатаПриема КАК ДатаПриема,
| ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК ТекущаяДолжность
| ИЗ
| РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников»;
НашаТаблица = Запрос. Выполнить() . Выгрузить() ;
// добавили колонку под наши новые данные
НашаТаблица. Колонки . Добавить( «КадровыеДанныеСтрокой», Новый ОписаниеТипов( «Строка», , Новый КвалификаторыСтроки( 100 ))) ;
// здесь обрабатываем НашаТаблица
// .
// .
// и далее передаем в Менеджер временных таблиц через новый запрос
Запрос_2 = Новый Запрос ;
Запрос_2. МенеджерВременныхТаблиц = МВТ;
Запрос_2.Текст color: #3366ff;»>ВЫБРАТЬ * ПОМЕСТИТЬ НашаТаблица ИЗ &НашаТаблица КАК НашаТаблица»;
Запрос_2. УстановитьПараметр( «НашаТаблица», НашаТаблица ) ;
Запрос_2. Выполнить() ;
ПроцессорКомпоновкиДанных . Инициализировать( МакетКомпоновкиДанных
,ВнешниеНаборыДанных,ДанныеРасшифровки. МВТ ) ;
Все!
Теперь в тексте запроса СКД доступна выборка из нашей таблицы, например добавление к данным регистра ВидыЗанятости:
ВЫБРАТЬ
ВидыЗанятостиСотрудников.Сотрудник КАК Сотрудник,
НашаТаблица.КадровыеДанныеСтрокой,
ВидыЗанятостиСотрудников.ВидЗанятости КАК ВидЗанятости
ИЗ
РегистрСведений.ВидыЗанятостиСотрудников КАК ВидыЗанятостиСотрудников
ЛЕВОЕ СОЕДИНЕНИЕ НашаТаблица КАК НашаТаблица
ПО НашаТаблица.Сотрудник = ВидыЗанятостиСотрудников.Сотрудник
1с скд таблица значений как параметр
Открываем модуль объекта и создаем предопределенную процедуру ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

Внутри этой процедуры будем собирать данные и формировать отчет.
В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку. СтандартнаяОбработка = Ложь;
Затем формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с будущими полями набора данных в СКД.:
Для примера добавим три строки данных. Далее по шагам создаем вывод отчета.
- Из схемы получаем настройки по умолчанию.
- В соответствующую переменную отправляем данные о расшифровке.
- Формируем макет с помощью компоновщика макета.
- Передаём в макет компоновки схему, настройки и данные расшифровки.
- Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных , значение — сформированная таблица значений), данные расшифровки.
- Очищаем поле табличного документа.
- Выводим результат в табличный документ.
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); //Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; // - Если сделать так, как показано выше(рекомендуют на некоторых ресурсах), то при изменении настроек в режиме клиента // этих изменений Вы не увидите, потому что настройки всегда будут по умолчанию. Как правильно - вариант ниже Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ВнешнийНаборДанных = Новый Структура("ПримерТаблицыЗначений", ТЗВывод); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки); ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
Добавляем макет схемы компоновки. Название можем оставить по умолчанию.

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

Добавляем ресурсы, если это необходимо. По ним будут считаться итоги. В нашем случае это поля Количество и Сумма.

В закладке Настройки с помощью конструктора настроек формируем вариант отчета по умолчанию

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

Вот и все. Достаточно просто, не правда ли?
Получившийся отчет для примера можно скачать тут
Таблица значений в параметрах СКД

Понадобилось построить отчет на СКД, где в качестве параметра необходимо передать таблицу значений с примитивными типами данных.
Сама таблица значений получается из другой системы.
Если кратко, то в двух системах имеются некоторые данные по сотрудникам. У сотрудников есть некий реквизит, по которому справочники синхронизированы в обеих системах. В нашем случае это была строка. Необходимо было построить отчет, используя данные обеих систем.
Задача была реализована модификацией текста запроса набора данных.
Т.е. в запросе описывается таблица, которая будет использована как параметр, а при компоновке результата текст запроса изменяется.
Как модифицировать текст запроса, показано во вложенном шаблоне.
Таблица там создана программно для примера.
Писалось на релизе 8.3.10.хххх.
