Проблемы запроса по параметру

1. GoreEclipse 26.02.25 15:25 Сейчас в теме
даже если в массиве элемент один, то находит все в справочнике, делаю несколько запросов, дабы из результатов вытянуть те изделия, в которых есть ВСЕ комплектующие из массива. как мне это сделать или хотя бы чтобы запрос по параметру искал?


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	Если ТабличныйПоиск.Количество()>0 Тогда
		
		КомпоновщикНастроек.Настройки.Структура.Очистить();
		//СхемаКомпоновкиДанных.НаборыДанных.Очистить();
		
		СтрПар=Новый Массив;
		Сч=0;
		ВнешНаб=Новый Структура;
		
		Для каждого Пункт Из ТабличныйПоиск Цикл
		
			СтрПар.Добавить(Пункт);
		
		КонецЦикла;
		
		СКД=Новый СхемаКомпоновкиДанных;
		ИД = СКД.ИсточникиДанных.Добавить();
		ИД.Имя = "СхемаСКД";
		ИД.ТипИсточникаДанных = "Local";
		НД=СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
		НД.Имя="НД"+Сч;
		НД.ИмяОбъекта="НД"+Сч;
		НД.ИсточникДанных="СхемаСКД";
		
		ПНД = НД.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		ПНД.Поле = "Наименование";
		ПНД.ПутьКДанным = "Наименование";
		ПНД.Заголовок = "Наименование";
		
	    ПНД2 = НД.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
		ПНД2.Поле = "Комплектующие";
		ПНД2.ПутьКДанным = "Комплектующие";
		ПНД2.Заголовок = "Комплектующие";
		
		НК=КомпоновщикНастроек.Настройки;
		Если НК.Структура.Количество()=0 Тогда
		
			Таб=НК.Структура.Добавить(Тип("ТаблицаКомпоновкиДанных"));
		
			ГКД1 = Таб.Строки.Добавить();
			ГКД1.Использование = Истина;
			ПГКД1 = ГКД1.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
			ПГКД1.Использование = Истина;
			ПГКД1.Поле = Новый ПолеКомпоновкиДанных("Наименование");
			
			ВП1=ГКД1.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
			ВП1.Использование=Истина;
			
			ГКД2 = ГКД1.Структура.Добавить();
			ГКД2.Использование = Истина;
			ПГКД2 = ГКД2.ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
			ПГКД2.Использование = Истина;
			ПГКД2.Поле = Новый ПолеКомпоновкиДанных("Комплектующие");
			
			ВП2=ГКД2.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
			ВП2.Использование=Истина;
		
		КонецЕсли;

		Пока Сч<СтрПар.Количество() Цикл
		
			Запр=Новый Запрос;
			Запр.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
		    			|	ИзделиеСостав.Ссылка КАК Ссылка
						|ПОМЕСТИТЬ ВТ_Изделия
						|ИЗ
						|    Справочник.Изделие.Состав КАК ИзделиеСостав
						|ГДЕ
						|    ИзделиеСостав.Комплектующие = &Комплектующие;
		                |
						|ВЫБРАТЬ
						|    ВТ_Изделия.Ссылка.Наименование КАК Наименование,
						|    ИзделиеСостав.Комплектующие КАК Комплектующие
						|ИЗ
						|    ВТ_Изделия КАК ВТ_Изделия
						|        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Изделие.Состав КАК ИзделиеСостав
						|        ПО ВТ_Изделия.Ссылка = ИзделиеСостав.Ссылка";
			
			Запр.УстановитьПараметр("Комплектующие",Справочники.Комплектующее.НайтиПоНаименованию(Строка(СтрПар[Сч])));
			РезЗап=Запр.Выполнить().Выгрузить();
			ВнешНаб.Вставить("НД"+Сч,РезЗап);
				
			Сч=Сч+1
		
		КонецЦикла;
		
		КМ=Новый КомпоновщикМакетаКомпоновкиДанных;
		МКМ=КМ.Выполнить(СКД,НК);
			
		ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
		ПроцессорКомпоновки.Инициализировать(МКМ,ВнешНаб);
			
		ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
		ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
		ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
	КонецЕсли;
	

	
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Anton_new01 26.02.25 15:42 Сейчас в теме
(1)
в массиве нет параметров.

где вас учат так изуверски ставить вопросы?

90% решения - это просто и ясно сформулированный вопрос.
3. GoreEclipse 26.02.25 16:02 Сейчас в теме
(2) даже если в массиве один элемент для параметра одного запроса соответственно, находит все элементы справочника, даже те, которые к параметру по данным не относятся. Как мне это исправить? А лучше чтобы находил те изделия, в которых есть ВСЕ элементы из массива. Как это организовать? Так лучше?
4. GoreEclipse 26.02.25 16:03 Сейчас в теме
(3) под элементами изделия подразумеваются комплектующие.
5. Anton_new01 26.02.25 16:10 Сейчас в теме
(3)
Нужен запрос который находит из Справочника.Изделие - только те элементы, у которых табличная часть Состав полностью соответствует заданному массиву Комплектующих?

вы это хотите получить?
6. GoreEclipse 26.02.25 16:16 Сейчас в теме
(5) Именно!!! И запихнуть в отчет.
7. antz 26.02.25 16:18 Сейчас в теме
8. GoreEclipse 26.02.25 16:24 Сейчас в теме
9. antz 26.02.25 16:32 Сейчас в теме
(8) имею в виду принцип, по которому можно найти элементы справочника, в тч которых находятся все элементы из переданного массива.
10. Anton_new01 26.02.25 17:38 Сейчас в теме
(6)
махинации с отчетом - дальше сам.

			//1. выбрать все комплектующие из Подбора (ТабличныйПоиск) и поместить в втКомплект
			//2. Отбираем все изделия где хоть что-то совпало по комплектующим
			//3. Отбираем Те изделия у которых есть лишние(втКомплект.Ссылка is null) или недостающие комплектующие (ИзделиеСостав.Комплектующие is null)
			//4. Из тех у которых хоть что-то совпало убираем те у которых не комплект(ЛишниеИзделия.Ссылка is null). 
			
			Запрос = Новый Запрос;
			Запрос.УстановитьПараметр("Комплект", МассивКомплектующих);
			Запрос.Текст = 
			"ВЫБРАТЬ 
			| Комплектующее.Ссылка КАК Ссылка
			|ПОМЕСТИТЬ втКомплект
			|ИЗ
			| Справочник.Комплектующее КАК Комплектующее
			|ГДЕ
			| Комплектующее.Ссылка В (&Комплект)
			|;
			|/////////////////////////
			|ВЫБРАТЬ различные
			|    ИзделиеСостав.Ссылка КАК Ссылка
			| ПОМЕСТИТЬ втИзделияСовпадающиеПоОднойСоставлящией
			|ИЗ
			|    Справочник.Изделие.Состав КАК ИзделиеСостав
			|ГДЕ
			|    ИзделиеСостав.Комплектующие В (&Комплектующие)
			|;
			|
			|/////////////////////////
			|
			|ВЫБРАТЬ различные
			|    втИзделия.Ссылка КАК Ссылка
			| ПОМЕСТИТЬ втИзделияСНедостающимЛибоЛишнимиКомплектующими
			|ИЗ
			|     втИзделияСовпадающиеПоОднойСоставлящией как втИзделия
			|		Соединение Справочник.Изделие.Состав КАК ИзделиеСостав
			|     	  Полное Соединение втКомплект как втКомплект
			|    		По ИзделиеСостав.Комплектующие = втКомплект.Ссылка
			|     	По ИзделиеСостав.Ссылка = втИзделия.Ссылка
			|ГДЕ
			|   ИзделиеСостав.Комплектующие is null
			|   Или втКомплект.Ссылка is null
			|;
			|/////////////////////////
			|ВЫБРАТЬ 
			|    ВсеИзделия.Ссылка КАК Ссылка
			| 
			|ИЗ
			|   втИзделияСовпадающиеПоОднойСоставлящией Как ВсеИзделия
			|    Левое Соединение втИзделияСНедостающимЛибоЛишнимиКомплектующими Как ЛишниеИзделия
			|    По ВсеИзделия.Ссылка = ЛишниеИзделия.Ссылка
			|ГДЕ
			|   ЛишниеИзделия.Ссылка is null
			|";
			МассивИзделийСоответствующийКомплекту = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Показать
11. GoreEclipse 26.02.25 19:41 Сейчас в теме
(10) Теперь это выдает"Ошибка компоновки данных
по причине:
Ошибка инициализации
по причине:
Ошибка создания набора данных "НД1"
по причине:
Не найден внешний набор данных "НД1"
" может чего по дороге поломал?
причем восстанавливаю к прежней версии- все равно выдает.
12. user2107191 26.02.25 20:30 Сейчас в теме
(11) Как это относится к запросу, который тебе дали? Запрос рабочий?
13. GoreEclipse 26.02.25 20:35 Сейчас в теме
(12) не позволяет выполнить запрос, выше смотри.
14. user2107191 26.02.25 20:38 Сейчас в теме
(13) Мозги нам не трахай! То что ты не умеешь использовать запрос в СКД - это не означает, что запрос не рабочий!
Не в курсе, что запрос вообще является самостоятельным объектом, и к СКД никакого отношения не имеет?
15. GoreEclipse 26.02.25 20:42 Сейчас в теме
(14) я разве говорил, что запрос не рабочий? просто данная проблема тупо препятствует выполнению запроса, поскольку программа не находит набор данных с тем же именем, с которым прога и ищет.
16. user2107191 26.02.25 20:56 Сейчас в теме
(15) Слушай, ты пришел и спросил - как правильно почистить картошку. Тебе помогли.
Теперь ты говоришь - я не могу этим воспользоваться, поскольку я не умею варить борщ и поэтому не могу оценить правильно ли почищена картошка.
19. Anton_new01 03.03.25 09:09 Сейчас в теме
(11)

эта ошибка связана с данной строкой:

РезЗап=Запр.Выполнить().Выгрузить();
ВнешНаб.Вставить("НД"+Сч,РезЗап);


подозреваю, что при вставке запроса - она пропала. и система не понимает где ей получить параметр НД1
17. GoreEclipse 26.02.25 22:44 Сейчас в теме
(10) теперь такую ошибку:"Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'v':
форма: Элемент
имя: {http://v8.1c.ru/8.2/uobjects}v
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'settings':
форма: Элемент
имя: {http://v8.1c.ru/8.1/data-composition-system/settings}settings
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'item':
форма: Элемент
имя: {http://v8.1c.ru/8.1/data-composition-system/core}item
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'value':
форма: Элемент
имя: {http://v8.1c.ru/8.1/data-composition-system/core}value
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'Value':
форма: Элемент
имя: {http://v8.1c.ru/8.1/data/core}Value
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ОтчетТабличнаяЧастьСтрока.ИзделияСКомплектующими.ТабличныйПоиск'
"
20. Anton_new01 03.03.25 09:13 Сейчас в теме
(17)
ОтчетТабличнаяЧастьСтрока.ИзделияСКомплектующими.ТабличныйПоиск


значение недопустимого типа...
низя ТаблицуЗначений передавать на клиент.
массив можно. поищи обходные пути передачи нужных тебе данных с клиента на сервер и обратно.
18. GoreEclipse 27.02.25 12:21 Сейчас в теме
(10) если проверять через отладку, то пустоту возвращает.
Оставьте свое сообщение

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