Не выводится отчет скд, если меняю текст запроса

1. aalu14 30.09.22 12:36 Сейчас в теме
Добрый день! Делаю отчет скд. В запросе есть параметр, его передаю с формы отчета. Устанавливаю параметр, отчет выводится. Необходимое условие - если в форме параметр не выбран, то нужно вывести отчет без учета параметра, как решил: просто проверяю значение если обещание = "" тогда заменяю строку в запросе. Отчет не выводится...Текст запроса с удаленной строкой переношу в консоль запросов - там результат выводится. Посоветуйте, пожалуйста, куда копать?

Запрос из набора данных скд:
ВЫБРАТЬ
	СотрудникПоДоговоруСрезПоследних.Сотрудник,
	СотрудникПоДоговоруСрезПоследних.Договор КАК Договор,
	СотрудникПоДоговоруСрезПоследних.Период  КАК Период
ПОМЕСТИТЬ Сотрудник
ИЗ
	РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Сотрудник.Сотрудник,
	СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК Долг,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сотрудник.Договор) КАК Количество,
	СУММА(ДоходыСотрудниковОбороты.СуммаОборот) КАК Сумма,
	СУММА(РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ)) КАК ДниПросрочки

ИЗ
	Сотрудник КАК Сотрудник
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
				,
				Счет.Код = "58"
					ИЛИ Счет.Код = "76",
				,
				ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов) В
					(ВЫБРАТЬ
						Сотрудник.Договор
					ИЗ
						Сотрудник КАК Сотрудник)) КАК ХозрасчетныйОстатки
		ПО (Сотрудник.Договор = (ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов)))
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ДоходыСотрудников.Обороты(
				,
				,
				,
				Договор В
					(ВЫБРАТЬ
						Сотрудник.Договор
					ИЗ
						Сотрудник КАК Сотрудник)) КАК ДоходыСотрудниковОбороты
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АнкетаКлиента КАК АнкетаКлиента
			ПО ДоходыСотрудниковОбороты.Договор.Ссылка = АнкетаКлиента.Договор.Ссылка
		ПО Сотрудник.Договор = ДоходыСотрудниковОбороты.Договор

Где Сотрудник.Период между &НачалоПериода и &КонецПериода
    И АнкетаКлиента.Обещание = &об

СГРУППИРОВАТЬ ПО
	Сотрудник.Сотрудник
Показать


Меняю текст запроса так:

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

Показать


Текст запроса меняется как надо:
ВЫБРАТЬ
	СотрудникПоДоговоруСрезПоследних.Сотрудник,
	СотрудникПоДоговоруСрезПоследних.Договор КАК Договор,
	СотрудникПоДоговоруСрезПоследних.Период  КАК Период
ПОМЕСТИТЬ Сотрудник
ИЗ
	РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Сотрудник.Сотрудник,
	СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК Долг,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сотрудник.Договор) КАК Количество,
	СУММА(ДоходыСотрудниковОбороты.СуммаОборот) КАК Сумма,
	СУММА(РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ)) КАК ДниПросрочки

ИЗ
	Сотрудник КАК Сотрудник
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
				,
				Счет.Код = "58"
					ИЛИ Счет.Код = "76",
				,
				ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов) В
					(ВЫБРАТЬ
						Сотрудник.Договор
					ИЗ
						Сотрудник КАК Сотрудник)) КАК ХозрасчетныйОстатки
		ПО (Сотрудник.Договор = (ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов)))
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ДоходыСотрудников.Обороты(
				,
				,
				,
				Договор В
					(ВЫБРАТЬ
						Сотрудник.Договор
					ИЗ
						Сотрудник КАК Сотрудник)) КАК ДоходыСотрудниковОбороты
			ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АнкетаКлиента КАК АнкетаКлиента
			ПО ДоходыСотрудниковОбороты.Договор.Ссылка = АнкетаКлиента.Договор.Ссылка
		ПО Сотрудник.Договор = ДоходыСотрудниковОбороты.Договор

Где Сотрудник.Период между &НачалоПериода и &КонецПериода

СГРУППИРОВАТЬ ПО
	Сотрудник.Сотрудник
Показать


Этот запрос прогоняю через консоль запросов и там выводится то, что нужно. Если вручную в наборе данных скд в тексте запроса убрать строку с параметром, то отчет тоже выводится. Опыта не хватает, чтобы разобраться, не знаю, куда копать. Подскажите, пожалуйста. Заранее спасибо.
По теме из базы знаний
Найденные решения
2. MuxaH 30.09.22 13:05 Сейчас в теме
(1) Что-то мне подсказывает, что сначала надо текст запроса поменять, а потом уже макет компоновки выполнять...
Что-то вроде
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    //если все
    Если Обещание = "" тогда 
        КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Ложь; 
        СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = СтрЗаменить(СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос,"И АнкетаКлиента.Обещание = &об","");
   иначе
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Обещание;
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина;
    КонецЕсли;
    
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
КонецПроцедуры
Показать


Ну или попробовать воспользоваться расширением языка запросов СКД, взять это условие в фигурные скобки, тогда если использование параметра отключено, то СКД сама условие из запроса исключает
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. MuxaH 30.09.22 13:05 Сейчас в теме
(1) Что-то мне подсказывает, что сначала надо текст запроса поменять, а потом уже макет компоновки выполнять...
Что-то вроде
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    //если все
    Если Обещание = "" тогда 
        КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Ложь; 
        СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = СтрЗаменить(СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос,"И АнкетаКлиента.Обещание = &об","");
   иначе
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Обещание;
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина;
    КонецЕсли;
    
        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
КонецПроцедуры
Показать


Ну или попробовать воспользоваться расширением языка запросов СКД, взять это условие в фигурные скобки, тогда если использование параметра отключено, то СКД сама условие из запроса исключает
3. aalu14 30.09.22 13:20 Сейчас в теме
(2)Помогло, выводятся значения, но, к сожалению, почему-то не все.
4. MuxaH 30.09.22 13:24 Сейчас в теме
(3) Через отладчик и консоль компоновки данных смотреть какой реально запрос выполняет СКД.
5. aalu14 30.09.22 13:26 Сейчас в теме
(4)Нашел свою ошибку. Спасибо Вам огромное!
Оставьте свое сообщение

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