Использование "Выражение" для параметров СКД
Добрый день! Имеется отчет (описанный очень схематично), который, в зависимости от вычисленных значений параметров, должен брать данные либо из первой таблицы, либо из второй, либо объединение из обеих таблиц. Набор данных один (запрос). По параметрам имеем следующее (имена параметров и выражений упрощены):
П1. &ПериодОтчета - тип СтандартныйПериод
П2. &ДатаНачала - тип Дата, Выражение: &ПериодОтчета.ДатаНачала
П3. &ДатаОкончания - тип Дата, Выражение: &ПериодОтчета.ДатаОкончания
П4. &ДатаГраница- тип Дата, Выражение: (функция, возвращающая значение константы, которая также имеет тип Дата)
П5. &Флаг_ТребуютсяДанныеИзПервойТаблицы - тип Булево, Выражение:
П6. &Флаг_ТребуетсяДанныеИзВторойТаблицы - тип Булево, Выражение:
Интерактивно доступен только параметр с периодом отчета. у всех параметров стоит использовать "Всегда".
В самом наборе имеются пакеты вида:
и соответствующий пакет для второй таблицы.
Все исходные данные в выше обозначенных регистрах есть/подготовлены.
И вот при всех этих вводных при формировании в отчет попадают данные только из второй таблицы в одном случае (хотя должны быть либо только из первой, либо и из первой и из второй). Изменение выражения для параметра-флага (перестановка параметров в выражении с изменением операции сравнения конечно же) может дать другой результат. Ощущение какого то рандома. В каких то случаях можно словить ошибку вида "Не указан параметр "ДатаНачала".". А вот если заменить &ДатаГраница в выражениях на явное получение константы (ОбщийМодуль.ДатаГраница()), то все встает на свои места (ну и множественное получение значения из бд, что логично).
Отсюда вытекает вопрос: каким образом происходит вычисление выражений для параметров? имеется ли какой-либо порядок этих вычислений (например, исходя из порядка на закладке "Параметры" в конструкторе макета СКД или он всегда случайный, или СКД вообще может в каких то случаях игнорировать вычисление выражения и брать значение "по умолчанию" для типа параметра). Может каких то нюансов не знаю/не понимаю (да и включившейся режим "в панике нажимаем и пробуем все подряд" мог внести свою лепту :) ), может баг какой словил.
П1. &ПериодОтчета - тип СтандартныйПериод
П2. &ДатаНачала - тип Дата, Выражение: &ПериодОтчета.ДатаНачала
П3. &ДатаОкончания - тип Дата, Выражение: &ПериодОтчета.ДатаОкончания
П4. &ДатаГраница- тип Дата, Выражение:
ОбщийМодуль.ДатаГраница()
П5. &Флаг_ТребуютсяДанныеИзПервойТаблицы - тип Булево, Выражение:
ВЫБОР КОГДА &ДатаГраница= ДАТАВРЕМЯ(1, 1, 1) ТОГДА Ложь ИНАЧЕ &ДатаОкончания >= &ДатаГраница КОНЕЦ
П6. &Флаг_ТребуетсяДанныеИзВторойТаблицы - тип Булево, Выражение:
ВЫБОР КОГДА &ДатаГраница= ДАТАВРЕМЯ(1, 1, 1) ТОГДА Истина ИНАЧЕ &ДатаГраница > &ДатаНачала КОНЕЦ
Интерактивно доступен только параметр с периодом отчета. у всех параметров стоит использовать "Всегда".
В самом наборе имеются пакеты вида:
ВЫБРАТЬ
ПерваяТаблица.Период,
ПерваяТаблица.КакиеТоДанные1,
ПерваяТаблица.КакиеТоДанные2,
...
ПОМЕСТИТЬ ДанныеПервойТаблицы
ИЗ
РегистрСведений.ПерваяТаблица КАК ПерваяТаблица
ГДЕ
&Флаг_ТребуютсяДанныеИзПервойТаблицы
И ПерваяТаблица.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
Показатьи соответствующий пакет для второй таблицы.
Все исходные данные в выше обозначенных регистрах есть/подготовлены.
И вот при всех этих вводных при формировании в отчет попадают данные только из второй таблицы в одном случае (хотя должны быть либо только из первой, либо и из первой и из второй). Изменение выражения для параметра-флага (перестановка параметров в выражении с изменением операции сравнения конечно же) может дать другой результат. Ощущение какого то рандома. В каких то случаях можно словить ошибку вида "Не указан параметр "ДатаНачала".". А вот если заменить &ДатаГраница в выражениях на явное получение константы (ОбщийМодуль.ДатаГраница()), то все встает на свои места (ну и множественное получение значения из бд, что логично).
Отсюда вытекает вопрос: каким образом происходит вычисление выражений для параметров? имеется ли какой-либо порядок этих вычислений (например, исходя из порядка на закладке "Параметры" в конструкторе макета СКД или он всегда случайный, или СКД вообще может в каких то случаях игнорировать вычисление выражения и брать значение "по умолчанию" для типа параметра). Может каких то нюансов не знаю/не понимаю (да и включившейся режим "в панике нажимаем и пробуем все подряд" мог внести свою лепту :) ), может баг какой словил.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот