- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
//часть текста запроса
                               |ИЗ
		               |	ЭтапыОплатыИсходник КАК ЭтапыОплаты
		       		   |//ТекстОтбора
		               |{ГДЕ
.................
		//Добавляем поля если используется отбор
		ТекстОтбора="ГДЕ ";
		ТекстОтбора=ТекстОтбора+" ИСТИНА";		
		НомерПеременнойОтбора=1;
		Для каждого  СтрокаТекущегоОтбора Из ПостроительОтчета.Отбор Цикл
			if НЕ СтрокаТекущегоОтбора.Использование then
				continue;
			endif;
			СложноеИмяПоля=ПолучитьИмяПоляБезТочек(СтрокаТекущегоОтбора.ПутьКДанным);
			Если  ПостроительОтчета.Отбор.Найти(СложноеИмяПоля)=Неопределено Тогда
				Если СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Больше Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" > &ПеременнаяОтбора"+НомерПеременнойОтбора;	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.БольшеИлиРавно Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" >= &ПеременнаяОтбора"+НомерПеременнойОтбора;	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии или 
					СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСписке или 
					СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВСпискеПоИерархии Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")";	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.ВИерархии Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")";	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Меньше Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" < &ПеременнаяОтбора"+НомерПеременнойОтбора;	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.МеньшеИлиРавно Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <= &ПеременнаяОтбора"+НомерПеременнойОтбора;	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСписке или 
					СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВСпискеПоИерархии Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В (&ПеременнаяОтбора"+НомерПеременнойОтбора+")";	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеВИерархии  Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И НЕ "+"ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" В ИЕРАРХИИ(&ПеременнаяОтбора"+НомерПеременнойОтбора+")";	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.НеРавно Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" <> &ПеременнаяОтбора"+НомерПеременнойОтбора;	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				ИначеЕсли СтрокаТекущегоОтбора.ВидСравнения=ВидСравнения.Равно Тогда
					ТекстОтбора=ТекстОтбора+Символы.ПС+" И ЭтапыОплаты."+СтрокаТекущегоОтбора.ПутьКДанным+" = &ПеременнаяОтбора"+НомерПеременнойОтбора;	
					Запрос.УстановитьПараметр("ПеременнаяОтбора"+НомерПеременнойОтбора,СтрокаТекущегоОтбора.Значение);
					НомерПеременнойОтбора=НомерПеременнойОтбора+1
				КонецЕсли; 
			КонецЕсли; 
		КонецЦикла; 
		Если НомерПеременнойОтбора>1 Тогда
			Запрос.Текст=СтрЗаменить(Запрос.Текст,"//ТекстОтбора",ТекстОтбора);
		КонецЕсли;
                                     
        
            При этом при всем,  в отчете используется 2 построителя ( на одном не смог построить , одного видимо было было мало для стратегии заложенной в голове:)  ) + между ними используется куча запросов , в которых выгружаются таблицы (РезультатЗапроса.Выполнить().Выгрузить(  )) и передаются в следующие запросы как параметры. 
От себя добавлю: Добавлял элементарные вещи, чтобы вывести пару дополнительных колонок -  убить 1 час , тоже самое, что ничего не сделать..... Да и к тому же отчет рисуется через "ТабДок.Присоеденить".