Использование "Выражение" для параметров СКД

1. Kir_Plastelinin 19.09.23 13:33 Сейчас в теме
Добрый день! Имеется отчет (описанный очень схематично), который, в зависимости от вычисленных значений параметров, должен брать данные либо из первой таблицы, либо из второй, либо объединение из обеих таблиц. Набор данных один (запрос). По параметрам имеем следующее (имена параметров и выражений упрощены):

П1. &ПериодОтчета - тип СтандартныйПериод

П2. &ДатаНачала - тип Дата, Выражение: &ПериодОтчета.ДатаНачала

П3. &ДатаОкончания - тип Дата, Выражение: &ПериодОтчета.ДатаОкончания

П4. &ДатаГраница- тип Дата, Выражение:
ОбщийМодуль.ДатаГраница()
(функция, возвращающая значение константы, которая также имеет тип Дата)

П5. &Флаг_ТребуютсяДанныеИзПервойТаблицы - тип Булево, Выражение:
ВЫБОР КОГДА &ДатаГраница= ДАТАВРЕМЯ(1, 1, 1) ТОГДА Ложь ИНАЧЕ &ДатаОкончания >= &ДатаГраница КОНЕЦ


П6. &Флаг_ТребуетсяДанныеИзВторойТаблицы - тип Булево, Выражение:
ВЫБОР КОГДА &ДатаГраница= ДАТАВРЕМЯ(1, 1, 1) ТОГДА Истина ИНАЧЕ &ДатаГраница > &ДатаНачала КОНЕЦ


Интерактивно доступен только параметр с периодом отчета. у всех параметров стоит использовать "Всегда".

В самом наборе имеются пакеты вида:

ВЫБРАТЬ
	ПерваяТаблица.Период,
	ПерваяТаблица.КакиеТоДанные1,
        ПерваяТаблица.КакиеТоДанные2,
                              ...

ПОМЕСТИТЬ ДанныеПервойТаблицы
ИЗ
	РегистрСведений.ПерваяТаблица КАК ПерваяТаблица
ГДЕ
	&Флаг_ТребуютсяДанныеИзПервойТаблицы 
	И ПерваяТаблица.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
Показать


и соответствующий пакет для второй таблицы.
Все исходные данные в выше обозначенных регистрах есть/подготовлены.

И вот при всех этих вводных при формировании в отчет попадают данные только из второй таблицы в одном случае (хотя должны быть либо только из первой, либо и из первой и из второй). Изменение выражения для параметра-флага (перестановка параметров в выражении с изменением операции сравнения конечно же) может дать другой результат. Ощущение какого то рандома. В каких то случаях можно словить ошибку вида "Не указан параметр "ДатаНачала".". А вот если заменить &ДатаГраница в выражениях на явное получение константы (ОбщийМодуль.ДатаГраница()), то все встает на свои места (ну и множественное получение значения из бд, что логично).

Отсюда вытекает вопрос: каким образом происходит вычисление выражений для параметров? имеется ли какой-либо порядок этих вычислений (например, исходя из порядка на закладке "Параметры" в конструкторе макета СКД или он всегда случайный, или СКД вообще может в каких то случаях игнорировать вычисление выражения и брать значение "по умолчанию" для типа параметра). Может каких то нюансов не знаю/не понимаю (да и включившейся режим "в панике нажимаем и пробуем все подряд" мог внести свою лепту :) ), может баг какой словил.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. lmnlmn 69 19.09.23 14:24 Сейчас в теме
(1) А оно вам надо, с выражениями разбираться? Можно установить нужные параметры и наборы данных программно в событии ПриКомпоновкеРезультата
3. Kir_Plastelinin 19.09.23 14:29 Сейчас в теме
(2) для общего развития хотелось бы. так то уже три варианта обхода есть, включая Ваш.
Оставьте свое сообщение

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