Программное создание набора данных в СКД

1. GoreEclipse 25.02.25 20:58 Сейчас в теме
при формировании отчета выдает данную ошибку "Ошибка при вызове метода контекста (Выполнить)
{Отчет.ИзделияСКомплектующими.МодульОбъекта(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",РезЗап);
	КМ=Новый КомпоновщикМакетаКомпоновкиДанных;
	МКМ=КМ.Выполнить(СКД,НК);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МКМ,ВнешНаб);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Показать


Наименование - наименование справочника "Изделие", Комплектующие - Данные из табличной части ранее названного справочника.
По теме из базы знаний
Найденные решения
4. SlavaKron 26.02.25 11:10 Сейчас в теме
(1) Переписать запрос на плоский. Примерно такой, как я понимаю:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ИзделиеСостав.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Изделия
ИЗ
	Справочник.Изделие.Состав КАК ИзделиеСостав
ГДЕ
	ИзделиеСостав.Комплектующие = &Комплектующие;

ВЫБРАТЬ
	ВТ_Изделия.Ссылка.Наименование КАК Наименование,
	ИзделиеСостав.Комплектующие КАК Комплектующие
ИЗ
	ВТ_Изделия КАК ВТ_Изделия
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Изделие.Состав КАК ИзделиеСостав
		ПО ВТ_Изделия.Ссылка = ИзделиеСостав.Ссылка
Показать
Поменять
ПНД2.ПутьКДанным = "Состав.Комплектующие";
на
ПНД2.ПутьКДанным = "Комплектующие";
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. vladimir_korshun 87 26.02.25 09:28 Сейчас в теме
(1)
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ВнешнийНаборДанных1",ВнешнийНаборДанных1);
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
Результат = ЭлементыФормы.Результат;
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
Показать

ВнешнийНаборДанных1 - это Таблица значений (можно из запроса Выгрузить)
4. SlavaKron 26.02.25 11:10 Сейчас в теме
(1) Переписать запрос на плоский. Примерно такой, как я понимаю:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ИзделиеСостав.Ссылка КАК Ссылка
ПОМЕСТИТЬ ВТ_Изделия
ИЗ
	Справочник.Изделие.Состав КАК ИзделиеСостав
ГДЕ
	ИзделиеСостав.Комплектующие = &Комплектующие;

ВЫБРАТЬ
	ВТ_Изделия.Ссылка.Наименование КАК Наименование,
	ИзделиеСостав.Комплектующие КАК Комплектующие
ИЗ
	ВТ_Изделия КАК ВТ_Изделия
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Изделие.Состав КАК ИзделиеСостав
		ПО ВТ_Изделия.Ссылка = ИзделиеСостав.Ссылка
Показать
Поменять
ПНД2.ПутьКДанным = "Состав.Комплектующие";
на
ПНД2.ПутьКДанным = "Комплектующие";
3. user1936660 26.02.25 10:42 Сейчас в теме
Традиционная смесь ссылок и строк, милота!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот