Не выводится отчет скд, если меняю текст запроса
Добрый день! Делаю отчет скд. В запросе есть параметр, его передаю с формы отчета. Устанавливаю параметр, отчет выводится. Необходимое условие - если в форме параметр не выбран, то нужно вывести отчет без учета параметра, как решил: просто проверяю значение если обещание = "" тогда заменяю строку в запросе. Отчет не выводится...Текст запроса с удаленной строкой переношу в консоль запросов - там результат выводится. Посоветуйте, пожалуйста, куда копать?
Запрос из набора данных скд:
Меняю текст запроса так:
Текст запроса меняется как надо:
Этот запрос прогоняю через консоль запросов и там выводится то, что нужно. Если вручную в наборе данных скд в тексте запроса убрать строку с параметром, то отчет тоже выводится. Опыта не хватает, чтобы разобраться, не знаю, куда копать. Подскажите, пожалуйста. Заранее спасибо.
Запрос из набора данных скд:
ВЫБРАТЬ
СотрудникПоДоговоруСрезПоследних.Сотрудник,
СотрудникПоДоговоруСрезПоследних.Договор КАК Договор,
СотрудникПоДоговоруСрезПоследних.Период КАК Период
ПОМЕСТИТЬ Сотрудник
ИЗ
РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Сотрудник.Сотрудник,
СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК Долг,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сотрудник.Договор) КАК Количество,
СУММА(ДоходыСотрудниковОбороты.СуммаОборот) КАК Сумма,
СУММА(РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ)) КАК ДниПросрочки
ИЗ
Сотрудник КАК Сотрудник
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
,
Счет.Код = "58"
ИЛИ Счет.Код = "76",
,
ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов) В
(ВЫБРАТЬ
Сотрудник.Договор
ИЗ
Сотрудник КАК Сотрудник)) КАК ХозрасчетныйОстатки
ПО (Сотрудник.Договор = (ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов)))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ДоходыСотрудников.Обороты(
,
,
,
Договор В
(ВЫБРАТЬ
Сотрудник.Договор
ИЗ
Сотрудник КАК Сотрудник)) КАК ДоходыСотрудниковОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АнкетаКлиента КАК АнкетаКлиента
ПО ДоходыСотрудниковОбороты.Договор.Ссылка = АнкетаКлиента.Договор.Ссылка
ПО Сотрудник.Договор = ДоходыСотрудниковОбороты.Договор
Где Сотрудник.Период между &НачалоПериода и &КонецПериода
И АнкетаКлиента.Обещание = &об
СГРУППИРОВАТЬ ПО
Сотрудник.Сотрудник
ПоказатьМеняю текст запроса так:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.ПолучитьНастройки(),ДанныеРасшифровки);
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(2).Значение = НачалоДня(ТекущаяДата());
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(2).Использование = Истина;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(0).Значение = НачалоДня(НачалоПериода);
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(0).Использование = Истина;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(1).Значение = КонецДня(КонецПериода);
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(1).Использование = Истина;
//если все
Если Обещание = "" тогда
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Ложь;
МакетКомпоновки.НаборыДанных.НаборДанных1.Запрос=СтрЗаменить(МакетКомпоновки.НаборыДанных.НаборДанных1.Запрос,"И АнкетаКлиента.Обещание = &об","");
иначе
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Обещание;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина;
КонецЕсли;
КонецПроцедуры
ПоказатьТекст запроса меняется как надо:
ВЫБРАТЬ
СотрудникПоДоговоруСрезПоследних.Сотрудник,
СотрудникПоДоговоруСрезПоследних.Договор КАК Договор,
СотрудникПоДоговоруСрезПоследних.Период КАК Период
ПОМЕСТИТЬ Сотрудник
ИЗ
РегистрСведений.СотрудникПоДоговору.СрезПоследних(, ) КАК СотрудникПоДоговоруСрезПоследних
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
Сотрудник.Сотрудник,
СУММА(ХозрасчетныйОстатки.СуммаОстатокДт) КАК Долг,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Сотрудник.Договор) КАК Количество,
СУММА(ДоходыСотрудниковОбороты.СуммаОборот) КАК Сумма,
СУММА(РАЗНОСТЬДАТ(АнкетаКлиента.Договор.ДатаОкончания, &Сегодня, ДЕНЬ)) КАК ДниПросрочки
ИЗ
Сотрудник КАК Сотрудник
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(
,
Счет.Код = "58"
ИЛИ Счет.Код = "76",
,
ВЫРАЗИТЬ(Субконто2 КАК Справочник.ДоговорыКонтрагентов) В
(ВЫБРАТЬ
Сотрудник.Договор
ИЗ
Сотрудник КАК Сотрудник)) КАК ХозрасчетныйОстатки
ПО (Сотрудник.Договор = (ВЫРАЗИТЬ(ХозрасчетныйОстатки.Субконто2 КАК Справочник.ДоговорыКонтрагентов)))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ДоходыСотрудников.Обороты(
,
,
,
Договор В
(ВЫБРАТЬ
Сотрудник.Договор
ИЗ
Сотрудник КАК Сотрудник)) КАК ДоходыСотрудниковОбороты
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АнкетаКлиента КАК АнкетаКлиента
ПО ДоходыСотрудниковОбороты.Договор.Ссылка = АнкетаКлиента.Договор.Ссылка
ПО Сотрудник.Договор = ДоходыСотрудниковОбороты.Договор
Где Сотрудник.Период между &НачалоПериода и &КонецПериода
СГРУППИРОВАТЬ ПО
Сотрудник.Сотрудник
ПоказатьЭтот запрос прогоняю через консоль запросов и там выводится то, что нужно. Если вручную в наборе данных скд в тексте запроса убрать строку с параметром, то отчет тоже выводится. Опыта не хватает, чтобы разобраться, не знаю, куда копать. Подскажите, пожалуйста. Заранее спасибо.
По теме из базы знаний
- Выгрузка-загрузка любых данных из 1С (и измененных) в XML между похожими конфигурациями (ФАЙЛ, HTTP, COM) ЛЮБЫХ баз 1С 8.1-8.3 с обработкой и поиском данных по произвольным полям поиска
- Разные хм... неожиданности при работе с УТ 11 и платформой
- Программная корректировка при выводе отчета СКД
- Отчеты по учету проектов для 1С:Бухгалтерии 3.0
- Печать таблицы значений или таблиц запроса через СКД
Найденные решения
(1) Что-то мне подсказывает, что сначала надо текст запроса поменять, а потом уже макет компоновки выполнять...
Что-то вроде
Ну или попробовать воспользоваться расширением языка запросов СКД, взять это условие в фигурные скобки, тогда если использование параметра отключено, то СКД сама условие из запроса исключает
Что-то вроде
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//если все
Если Обещание = "" тогда
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Ложь;
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = СтрЗаменить(СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос,"И АнкетаКлиента.Обещание = &об","");
иначе
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Обещание;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина;
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
КонецПроцедуры
ПоказатьНу или попробовать воспользоваться расширением языка запросов СКД, взять это условие в фигурные скобки, тогда если использование параметра отключено, то СКД сама условие из запроса исключает
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Что-то мне подсказывает, что сначала надо текст запроса поменять, а потом уже макет компоновки выполнять...
Что-то вроде
Ну или попробовать воспользоваться расширением языка запросов СКД, взять это условие в фигурные скобки, тогда если использование параметра отключено, то СКД сама условие из запроса исключает
Что-то вроде
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
//если все
Если Обещание = "" тогда
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Ложь;
СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос = СтрЗаменить(СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Запрос,"И АнкетаКлиента.Обещание = &об","");
иначе
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Значение = Обещание;
КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Получить(3).Использование = Истина;
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
КонецПроцедуры
ПоказатьНу или попробовать воспользоваться расширением языка запросов СКД, взять это условие в фигурные скобки, тогда если использование параметра отключено, то СКД сама условие из запроса исключает
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот