Как найти все документы, в движениях которых использовался объект метаданных ПВХ Статья Расходов?

1. Mechanik21 24 29.11.22 12:50 Сейчас в теме
в динамический список нужно вывести все документы, в движениях которых есть ПВХ статья расходов.
Как составить запрос?
По теме из базы знаний
Найденные решения
3. beldieff 29.11.22 15:35 Сейчас в теме
(1) Он точно отработает этот запрос в списке? Я вот написал этот текст запроса для списка
	ТипыЗнченияПВХ = Метаданные.ПланыВидовХарактеристик.СтатьиРасходов.Тип;
	
	ИменаРегистров = Новый СписокЗначений;
	Для Каждого Рег Из Метаданные.РегистрыНакопления Цикл 
		Для Каждого Изм Из Рег.Измерения Цикл 
			ТипыЗначенияИзмерения = Изм.Тип.Типы();
			
			Если ИменаРегистров.НайтиПоЗначению(Рег.Имя) <> Неопределено Тогда 
				Прервать;
			КонецЕсли;
			
			Для Каждого Тип Из ТипыЗначенияИзмерения Цикл 
				Если ТипыЗнченияПВХ.СодержитТип(Тип) Тогда 
					ИменаРегистров.Добавить(Рег.Имя);
					Прервать;
				КонецЕсли;
			КонецЦикла;
			
		КонецЦикла;
	КонецЦикла;
	
	Всего = ИменаРегистров.Количество();
	
	Если Всего > 0 Тогда 
		ТекстЗапроса = "ВЫБРАТЬ ТаблицаРегистра.Регистратор КАК Регистратор ПОМЕСТИТЬ ВТ ИЗ РегистрНакопления."+ ИменаРегистров.Получить(0).Значение + " КАК ТаблицаРегистра";
		
		Если Всего > 1 Тогда 
			
			Для й = 1 По Всего - 1 Цикл 
				ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + "ВЫБРАТЬ ТаблицаРегистра.Регистратор КАК Регистратор  ИЗ РегистрНакопления."+ ИменаРегистров.Получить(й).Значение + " КАК ТаблицаРегистра";
			КонецЦикла;
			
		КонецЕсли;
	КонецЕсли;
	
	ТекстЗапроса = ТекстЗапроса + ";" + Символы.ПС + "ВЫБРАТЬ ВТ.Регистратор КАК Регистратор ИЗ ВТ КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Регистратор" 
Показать
Но его даже конструктор запроса хавал несколько десятков секунд. У меня в ерп получилось объединение 185 таблиц
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TokarevV 30 29.11.22 14:45 Сейчас в теме
Как вариант, через поиск ссылок на объект в конфигураторе найти все реквизиты в документах. Ну а потом запрос к ним написать.
3. beldieff 29.11.22 15:35 Сейчас в теме
(1) Он точно отработает этот запрос в списке? Я вот написал этот текст запроса для списка
	ТипыЗнченияПВХ = Метаданные.ПланыВидовХарактеристик.СтатьиРасходов.Тип;
	
	ИменаРегистров = Новый СписокЗначений;
	Для Каждого Рег Из Метаданные.РегистрыНакопления Цикл 
		Для Каждого Изм Из Рег.Измерения Цикл 
			ТипыЗначенияИзмерения = Изм.Тип.Типы();
			
			Если ИменаРегистров.НайтиПоЗначению(Рег.Имя) <> Неопределено Тогда 
				Прервать;
			КонецЕсли;
			
			Для Каждого Тип Из ТипыЗначенияИзмерения Цикл 
				Если ТипыЗнченияПВХ.СодержитТип(Тип) Тогда 
					ИменаРегистров.Добавить(Рег.Имя);
					Прервать;
				КонецЕсли;
			КонецЦикла;
			
		КонецЦикла;
	КонецЦикла;
	
	Всего = ИменаРегистров.Количество();
	
	Если Всего > 0 Тогда 
		ТекстЗапроса = "ВЫБРАТЬ ТаблицаРегистра.Регистратор КАК Регистратор ПОМЕСТИТЬ ВТ ИЗ РегистрНакопления."+ ИменаРегистров.Получить(0).Значение + " КАК ТаблицаРегистра";
		
		Если Всего > 1 Тогда 
			
			Для й = 1 По Всего - 1 Цикл 
				ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + "ВЫБРАТЬ ТаблицаРегистра.Регистратор КАК Регистратор  ИЗ РегистрНакопления."+ ИменаРегистров.Получить(й).Значение + " КАК ТаблицаРегистра";
			КонецЦикла;
			
		КонецЕсли;
	КонецЕсли;
	
	ТекстЗапроса = ТекстЗапроса + ";" + Символы.ПС + "ВЫБРАТЬ ВТ.Регистратор КАК Регистратор ИЗ ВТ КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Регистратор" 
Показать
Но его даже конструктор запроса хавал несколько десятков секунд. У меня в ерп получилось объединение 185 таблиц
4. Mechanik21 24 29.11.22 15:40 Сейчас в теме
(3) я пробовал так, таблиц получилось 8. КА 2
тут, наверное, у меня косяк где-то
МассивИменРегистров = Новый Массив;
	ПодчинениеРегистратору = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору;
	Для каждого РегистрС Из Метаданные.РегистрыСведений Цикл
		Если РегистрС.РежимЗаписи = ПодчинениеРегистратору Тогда
			Для Каждого ИзмеренияС Из РегистрС.Измерения Цикл
				Если ИзмеренияС.Тип.ПривестиЗначение() = ПланыВидовХарактеристик.СтатьиРасходов.ПустаяСсылка() Тогда
					//Сообщить(РегистрС.ПолноеИмя());
					//СчетчикРегистров = СчетчикРегистров + 1; 
					Если СтрНайти(РегистрС.ПолноеИмя(), "далить") = 0 Тогда
						МассивИменРегистров.Добавить(РегистрС.ПолноеИмя());    
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;
			
			Для каждого РесурсС Из РегистрС.Ресурсы Цикл
				Если РесурсС.Тип.ПривестиЗначение() = ПланыВидовХарактеристик.СтатьиРасходов.ПустаяСсылка() Тогда
					//Сообщить(РегистрС.ПолноеИмя());
					//СчетчикРегистров = СчетчикРегистров + 1;
					Если СтрНайти(РегистрС.ПолноеИмя(), "далить") = 0 Тогда
						МассивИменРегистров.Добавить(РегистрС.ПолноеИмя()); 
					КонецЕсли;
				КонецЕсли;	
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;  
	
	Для каждого РегистрН Из Метаданные.РегистрыНакопления Цикл
		//Если РегистрН.РежимЗаписи = ПодчинениеРегистратору Тогда
			Для Каждого ИзмеренияН Из РегистрН.Измерения Цикл
				Если ИзмеренияН.Тип.ПривестиЗначение() = ПланыВидовХарактеристик.СтатьиРасходов.ПустаяСсылка() Тогда
					//Сообщить(РегистрН.ПолноеИмя());
					//СчетчикРегистров = СчетчикРегистров + 1;
					МассивИменРегистров.Добавить(РегистрН.ПолноеИмя());
				КонецЕсли;
			КонецЦикла;
			
			Для каждого РесурсН Из РегистрН.Ресурсы Цикл
				Если РесурсН.Тип.ПривестиЗначение() = ПланыВидовХарактеристик.СтатьиРасходов.ПустаяСсылка() Тогда
					//Сообщить(РегистрН.ПолноеИмя());
					//СчетчикРегистров = СчетчикРегистров + 1;
					МассивИменРегистров.Добавить(РесурсН.ПолноеИмя());
				КонецЕсли;	
			КонецЦикла;                                             
		//КонецЕсли;		
	КонецЦикла;
	МассивИменРегистров = УдалитьПовторяющиесяЭлементыМассива(МассивИменРегистров);
	Сообщить(МассивИменРегистров.Количество());
Показать
5. Zevzm 29.11.22 15:51 Сейчас в теме
(4)
МассивИменРегистров.Добавить(РесурсН.ПолноеИмя());
тут не "РегистрН" должно быть в последнем цикле?
Mechanik21; +1 Ответить
7. beldieff 29.11.22 15:56 Сейчас в теме
(5)Да и зачем вообще проверять ресурсы РНов, Или это я до сих пор сижу на такой древней платформе что в ней у ресурса не может быть другого типа кроме числа?
8. Mechanik21 24 29.11.22 15:58 Сейчас в теме
(7) нет, вы правы, это лишнее
9. Mechanik21 24 29.11.22 15:58 Сейчас в теме
6. beldieff 29.11.22 15:52 Сейчас в теме
(4)Может я не так понял задачу, но ИзмеренияС.Тип.ПривестиЗначение() это будет Справочники.Организации.ПустаяСсылка(), например, а этот тип входит в ПВХ. Надо чтоб прям тип значения должен быть ПВХ или чтоб тип значения был одним из типов, входящих в ПВХ?
10. Mechanik21 24 29.11.22 16:00 Сейчас в теме
(6) задача - вывести в динамический список документы, в движении которых использована статья расходов (тип ПВХ.ссылка)
Мне кажется, что тут прям тип значения должен быть ПВХ
11. beldieff 29.11.22 16:08 Сейчас в теме
(10)
//ТипыЗнченияПВХ = Метаданные.ПланыВидовХарактеристик.СтатьиРасходов.Тип;
	
	Мас = Новый Массив;
	Мас.Добавить(Тип("ПланВидовХарактеристикСсылка.СтатьиРасходов"));
	ТипыЗнченияПВХ = Новый ОписаниеТипов(Мас);


Так получилось 16 РНов
Mechanik21; +1 Ответить
12. Mechanik21 24 29.11.22 17:09 Сейчас в теме
(11) а можно как-то в (3) условие по конкретной статье засунуть, чтоб сократить выборку?
Оставьте свое сообщение

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