Дело в том, что без полного перечисления полей 1С считает на этапе до выполнения что если поле не написано в запросе помещающем данные во временную таблицу то его нет и внутренняя проверка 1С языка запросов выдает ошибку. Примеры мест таких проблем: в конструкторе запросов или в СКД схеме при сохранении запроса или при вызове метода выполнить для компоновщика макета.
Поэтому требуется явное перечисление всех полей. Видимо по этому же конструктор запросов 1С разворачивает все получаемые через * поля если понимает что это источник из состава конфигурации (например, РН или РС или справочник и т.п.)
Есть несколько способов добавить параметр-таблицу значений в схему компоновки данных:
- добавить через параметры компоновщика КомпоновщикНастроек.ПолучитьНастройки().ПараметрыДанных.Элементы
Процедура УстановитьПараметрСКД(НастройкиСКД,Имя,Значение)
Параметры = НастройкиСКД.ПараметрыДанных;
Если Параметры.Элементы.Найти(Имя) <> Неопределено Тогда
Параметры.УстановитьЗначениеПараметра(Имя,Значение);
КонецЕсли;
КонецПроцедуры
Процедура УстановкаПараметровДляВызоваЧерез_ПриКомпоновкеРезультата(Параметры = Неопределено) Экспорт
// Получаем
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
Если ДобавитьЭтиПараметры = Неопределено Тогда
ДобавитьЭтиПараметры = ПараметрыДляЗапроса();
КонецЕсли;
Для каждого Параметр Из Параметры Цикл
УстановитьПараметрДанныхНастроекКомпоновщикаСкдПриНаличии(Настройки,Параметр.Ключ,Параметр.Значение);
КонецЦикла;
// устанавливаем
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецПроцедуры
2. Добавить в менеджер временных таблиц, а затем вызвать компоновку СКД в режиме работы с менеджером временных таблиц.
Запрос = Новый Запрос("ВЫБРАТЬ т.* ПОМЕСТИТЬ " + ИмяВТ + " ИЗ &" + ИмяВТ + "КАК т);
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр(ИмяВТ,ТЗ);
Запрос.Выполнить();
//затем присвоить через процессор выполняемому отчету СКД этот менеджер временных таблиц
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,,ДанныеРасшифровки,Истина,, Запрос.МенеджерВременныхТаблиц);
+ There are no comments
Add yours