Отчет на СКД: не использовать фильтры по параметрам, которые не заданы (несколько независимых параметров)

1. native-api 16.01.23 14:07 Сейчас в теме
Необходимо иметь возможность создавать отчет с необязательной фильтрацией по параметрам. В имеющемся отчете задана только схема компоновки данных.

Для параметров заданы соотв. типы. Значения по умолчанию пробовал задавать или не задавать -- как в "Параметры", так и "Настройки->Параметры" (илл. 1,2). Для поля подразделенния значение по умолчанию выбирал либо "ПустаяСсылка" соотв. справочника, либо ничего.

При выборе в форме только одного параметра (илл. 3), в зависимости от варианта ниже, либо отчет получается пустым, либо возникает ошибка "Не задано значение параметра <параметр>".

---

Найденная информация и опробованные варианты:
* https://www.mykib.org/article/1s8-primenenie-neobyazatelnyh-parametrov-otcheta-v-skd-isklyuchenie-oshibki-pri-ispolnenii, http://forum.infostart.ru/forum9/topic122169/message1270859/#message1270859 -- заключать всё условие фильтрации по параметрам в фигурные скобки.

{ГДЕ
	(Сотрудники.Подразделение В ИЕРАРХИИ (&ГоловноеПодразделение)),
	(ГОД(ЗаданиеНаРаботу.ДатаВыполненияРабот) = &Год)}


Такое условие исключается только если ВСЕ параметры не заданы. Задание своего блока "{ГДЕ}" для каждого параметра ничего не меняет.

* https://wiki.programstore.ru/1s-skd-parametry-i-neobyazatelnye-parametry/ -- не указывать "Псевдоним" в конструкторе отчета в "Компоновка данных->Условия" (нужно удалить псевдонимы, сгенерированные UI конструктора) -- в варианте выше убирает ошибку "поле не заполнено", если какой-то из параметров не выбран, но на применение/неприменение условий не влияет.

* http://forum.infostart.ru/forum9/topic122169/message1270946/#message1270946 -- short-circuit условие

ГДЕ
	ВЫБОР КОГДА &ГоловноеПодразделение = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
		ТОГДА ИСТИНА ИНАЧЕ Сотрудники.Подразделение В ИЕРАРХИИ (&ГоловноеПодразделение) КОНЕЦ


или

ГДЕ
	(&ГоловноеПодразделение = ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)
			ИЛИ Сотрудники.Подразделение В ИЕРАРХИИ (&ГоловноеПодразделение))


ошибка "Не задано значение параметра".

* Выбирать в запросе всё, а фильтрацию делать в настройках отбора.

Невозможно. В отборе нельзя сравнивать с параметром, а только с явно заданным конкретным значением (илл. 4).

* http://forum.infostart.ru/forum9/topic122169/message1270969/#message1270969 -- редактировать программную логику формирования отчета: менять схему компоновки в зависимости от параметров. В сообщении предлагается добавлять отбор, но, видимо, можно и изменить текст запроса.

Не смог это попробовать, т.к.

* в "голом" отчете на СКД нет никакого кода, нечего редактировать. (Эта тема, видимо, обширная, достаточно ссылки на релевантный материал, как кастомизировать отчеты на СКД.)
* У отчета, сгенерированного по СКД, вообще нет ни форм, ни модулей, ни даже обработчиков в св-вах, редактировать/переопределять нечего. Каких-то примеров переопределения логики для вставки в модуль объекта также не нагуглил.
* Насколько вижу, в моем случае для "голого" отчета используется общая форма "ФормаОтчета" из БСП, указанная в "Конфигурация->Свойства->Основная форма отчета", и логика формирования находится в модуле этой формы. Из логики этого модуля я также не могу ничего переопределить в своем отчете, т.к. при создании в отчете своей формы создается совсем другая, независимая форма, никак не связанная с общей. Более того, у стандартных кнопок командной панели этой новой формы нет никаких св-в, и у формы нет никаких релевантных генерации отчета событий и никаких команд -- опять переопределять нечего!
* Непонятно, как проверять, что параметр не выбран. "ЗначениеЗаполнено(<Реквизит формы>)" проверяет, что указано в соотв. поле ввода, но меня интересует не оно, а галка рядом с ним. В форме названия полей/реквизитов посмотреть не могу, т.к. эти поля автогенерируемые.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
5. native-api 18.01.23 16:51 Сейчас в теме
Сработал вариант

{ГДЕ
    (Сотрудники.Подразделение В ИЕРАРХИИ (&ГоловноеПодразделение)),
    (ГОД(ЗаданиеНаРаботу.ДатаВыполненияРабот) = &Год)}


Когда я в "Параметры" для подразделения выбрал значением по умолчанию не ничего и не ПустаяСсылка, а пустую строку (отображается как "<Пустое значение>") (см. илл.)
(4)
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DBV 16.01.23 15:10 Сейчас в теме
(1) а если сделать так:
в запрос добавить условие
{ГДЕ
    Сотрудники.Подразделение,
    (ГОД(ЗаданиеНаРаботу.ДатаВыполненияРабот)) КАК ГодДатыВыполненияРабот}

затем в настройках СКД добавить в отбор эти поля
для подразделения ВидСравнения = В группе
для года - Равно
и ещё в наборе данных для поля ГодДатыВыполненияРабот установить формат редактирования ЧГ=0
после этого включить эти отборы в пользовательские настройки
3. native-api 16.01.23 16:41 Сейчас в теме
Попробовав, вспомнил, что через настройки отбора я тоже уже пробовал.

В настройках отбора нельзя сравнивать с параметром, только с константой (см. илл.).

(Добавил эту инфу в исходное сообщение.)
Прикрепленные файлы:
4. SlavaKron 17.01.23 10:33 Сейчас в теме
(1)
Задание своего блока "{ГДЕ}" для каждого параметра ничего не меняет.
Проверьте еще раз, это должно работать.
5. native-api 18.01.23 16:51 Сейчас в теме
Сработал вариант

{ГДЕ
    (Сотрудники.Подразделение В ИЕРАРХИИ (&ГоловноеПодразделение)),
    (ГОД(ЗаданиеНаРаботу.ДатаВыполненияРабот) = &Год)}


Когда я в "Параметры" для подразделения выбрал значением по умолчанию не ничего и не ПустаяСсылка, а пустую строку (отображается как "<Пустое значение>") (см. илл.)
(4)
Прикрепленные файлы:
Оставьте свое сообщение

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