titanium2008 |
---|
Вопрос - могу ли я обойтись без хранимой функции, а именно в персонализации объявить глобальную переменную а потом использовать ее в табличном наборе значений в условии where? |
Можно.
Тут только можно на такую проблему нарваться.
Допустим, в ОГП материальных транзакций создали сегмент с табличным набором значений, содержащим условие "... and table_column=:global.xx_val".
В форме "Прочие транзакции" в персонанизации прописываем значение этой глобальной переменной. При входе в ОГП переменая существует и имеет правильное значение. Список на данном сегменте в данной форме работает замечательно.
Потом заходим в форму "Просмотр транзакций" и ищем созданную транзакцию. И тут при проверке значений сегмента ОГП наш набор значений начнет "дурить", т.к. глобальная переменная не определена (или определена неправильным значением, т.к. проверка ОГП выполняется раньше персонализации, которая глобальную переменную инициализирует).
Для разруливания этой проблемы в наборе значений лучше использовать :global.xx_val:null с проверкой текущего использования:
... and table_column=decode(:system.form_name,'ПРОЧАЯ_ТРАНЗАКЦИЯ',:global.xx_val:null,'ПРОСМОТР_ТРАНЗАКЦИЙ',table_column)
Пример достаточно условный. Слепо его применять не следует. В данном случае при выполнении запроса не подцепится индекс по столбцу table_column. Если этого и не требуется, то метод можно использовать. Если мешает оптимизатору запроса, то придется извращаться по другому.