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