СКД при удалении строки запрос сохраняется, при дальнейшей работе скд берет измененный запрос.

1. aalu14 07.10.22 12:24 Сейчас в теме
Добрый день. Отчет скд. При определенных условиях удаляю строку из запроса. Выполняется отчет, выводится результат. После этого если формировать отчет, то запрос берется с удаленной строкой. Приходится закрывать и открывать отчет заново. Подскажите, можно ли как-нибудь обновить настройки, чтобы не закрывать отчет каждый раз ? Заранее спасибо.

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

КонецПроцедуры

Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
7. EVKash 15 07.10.22 13:25 Сейчас в теме
(1) Зачем такие сложности? Это же СКД. Почему не написать в условиях компоновки данных? Типа
ГДЕ
	.....
{ГДЕ
	(АнкетаКлиента.Обещание В(&Обещание))}
2. Release 07.10.22 12:52 Сейчас в теме
(1) Не проще ли изменить изначальный запрос так, чтобы потом не менять его динамически?
Например как-то так:
И (&Обещание = НЕОПРЕДЕЛЕНО
ИЛИ АнкетаКлиента.Обещание В(&Обещание))

Если Обещание <> Неопределено при его незаполненности, то изменить так.
    //&Обещание
    Если  НЕ ЗначениеЗаполнено(Обещание) тогда 
        //КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина; 
        КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Неопределено;
    Иначе 
        КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Обещание;
        //КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина;
    КонецЕсли;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Release 07.10.22 12:52 Сейчас в теме
(1) Не проще ли изменить изначальный запрос так, чтобы потом не менять его динамически?
Например как-то так:
И (&Обещание = НЕОПРЕДЕЛЕНО
ИЛИ АнкетаКлиента.Обещание В(&Обещание))

Если Обещание <> Неопределено при его незаполненности, то изменить так.
    //&Обещание
    Если  НЕ ЗначениеЗаполнено(Обещание) тогда 
        //КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина; 
        КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Неопределено;
    Иначе 
        КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Обещание;
        //КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина;
    КонецЕсли;
Показать
3. aalu14 07.10.22 12:57 Сейчас в теме
(2) а после "иначе" почему закомментили? необходимо же вставить параметр
4. Release 07.10.22 13:00 Сейчас в теме
(3) Виноват, не обратил внимание, что там строки местами поменяны относительно верхнего блока.
Подсветки синтаксиса в поле ввода то нет. Исправил.
5. aalu14 07.10.22 13:12 Сейчас в теме
(4) Сделал, как вы написали, выдает ошибку

Не задано значение параметра "Обещание"
И (<<?>>&Обещание = НЕОПРЕДЕЛЕНО
6. Release 07.10.22 13:22 Сейчас в теме
(5) Ну, раскомментируйте строки, что я закомментировал в примере. Может у вас по умолчанию этот параметр не используется.
7. EVKash 15 07.10.22 13:25 Сейчас в теме
(1) Зачем такие сложности? Это же СКД. Почему не написать в условиях компоновки данных? Типа
ГДЕ
	.....
{ГДЕ
	(АнкетаКлиента.Обещание В(&Обещание))}
8. aalu14 07.10.22 13:49 Сейчас в теме
Пока работает очень глупое решение, но работает. Задаю текст запроса до изменения,
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = ТекстЗапроса;

Буду изучать предложенные выше варианты, спасибо.
Оставьте свое сообщение

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