Skip to main content

Формирование текста для поля составного типа в запросе по списку типов

В качестве оптимизации запроса при выборе в запросе поля составного типа или типа, включающего ВСЕ ссылки (например, ДокументСсылка) исходя из логики запроса можно наложить на поле ограничение по типам:

ВЫБОР КОГДА Регистратор ССЫЛКА Документ.ОтчетПроизводстваЗаСмену ТОГДА ВЫРАЗИТЬ(Регистратор КАК Документ.ОтчетПроизводстваЗаСмену)).

Это может дать существенный прирост по производительности запроса.

Если известен список типов, который может быть выбран в запросе, то текст запроса для данного поля можно получить следующим кодом:

//ДоступныеТипы = Метаданные.РегистрыБухгалтерии.Хозрасчетный.СтандартныеРеквизиты.Регистратор.Тип.Типы();
ДоступныеТипы = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей().Отбор.Регистратор.ТипЗначения.Типы();

ПутьКПолю        = "Регистратор";
РазделительПолей = "";
ТекстСПолем      = "";
Для Каждого Тип Из ДоступныеТипы Цикл

	ДокументСсылка = Новый(Тип);
	ИмяТипа = "Документ." + ДокументСсылка.Метаданные().Имя;
	ТекстСПолем = ТекстСПолем + РазделительПолей + СтрШаблон("ВЫБОР КОГДА %1 ССЫЛКА %2 
		|	ТОГДА ВЫРАЗИТЬ(%1 КАК %2)", ПутьКПолю, ИмяТипа);
	
	РазделительПолей = Символы.ПС;	
КонецЦикла;

Если ЗначениеЗаполнено(ТекстСПолем) Тогда
	ТекстСПолем = СтрШаблон("%1%2КОНЕЦ", ТекстСПолем, Символы.ПС);
КонецЕсли;