CftClub.ru
Клуб специалистов ЦФТ-Банк

Использование переменной в фильтре представления

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Авг 18, 2011 12:39   Использование переменной в фильтре представления Ответить с цитатой
Полезность: Нет оценки
Добрый день,
не могу решить, казалось бы простую задачу, использовать переменную заданную в фильтре в условии представления.

Например по кнопке фильтр запрашиваем дату P_DATE которую пользователь успешно вводит.
В колонках представления вытаскиваю дату последней операции C_DATE_LAST.
А в свойствах на вкладке условия хочу сравнить A2_1.C_DATE_LAST < P_DATE
Как передать переменную в условие? Пытался в фильтре по кнопке формулы сравнить, как это с обычными датами делал - не прокатывает их за того, что там отображается дата вот так {&C_DATE_LAST}<[P_DATE] выпадает в ошибку, говорит что ожидает тип нумбер, а передается тип дата. На попытки преобразовать [P_DATE] в число говорит неправильное число.

Может кто подскажет как использовать переменную в условии?

Заранее благодарю.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеЧт Авг 18, 2011 12:56    Ответить с цитатой
Полезность: Нет оценки
через контекст, например

фильтр

executor.set_context('DATE_BEGIN', to_char(P_DATE_BEGIN, 'dd.mm.yyyy'));

в формуле написать 1=1

представление

в условии

A2_1.C_DATE_LAST < to_date(sys_context(user_context, 'DATE_BEGIN'),'DD.MM.YYYY') [/code]
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Авг 18, 2011 13:25    Ответить с цитатой
Полезность: Нет оценки
1. В фильтре стоит P_DATE типа DATE
2. executor.set_context('DATE_BEGIN', to_char(P_DATE, 'dd.mm.yyyy')); правильно понял, это в Глобальные описания операции писать?
3. При компиляции представления выпадает ошибка:

"user_context" - недопустимый идентификатор
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеЧт Авг 18, 2011 13:31   Re: Использование переменной в фильтре представления Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
{&C_DATE_LAST}<[P_DATE] выпадает в ошибку, говорит что ожидает тип нумбер, а передается тип дата.

Мне кажется тут & лишний. Был глючок в админе, что он не к месту его подставляет иногда.
Тип колонки C_DATE_LAST - дата?
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Авг 18, 2011 13:36   Re: Использование переменной в фильтре представления Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
что там отображается дата вот так {&C_DATE_LAST}<[P_DATE] выпадает в ошибку, говорит что ожидает тип нумбер, а передается тип дата. На попытки преобразовать [P_DATE] в число говорит неправильное число.


Уберите & - это обозначении ссылки, либо в представлении настройте реквизит не как ссылку, а как дату.

executor.set_context('DATE_BEGIN', to_char(P_DATE_BEGIN, 'dd.mm.yyyy')); запускается в теле.
в настройках Компиляция - установите Расширенный синтаксис
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Авг 18, 2011 14:06    Ответить с цитатой
Полезность: Нет оценки
Написал в теле, после расширенного синтаксиса - оно откомпилировалов, спасибо.

Но в условиях представления всё равно выдаётся эта ошибка.
Я тчно там пишу его (свойство представления - вкладка условие).
Что такое [/code] на конце, при таком написании выпадает ошибка компилятора - не хватает правой скобки

В условиях написал (тут все скобки есть): A2_1.C_DATE_LAST < to_date(sys_context(user_context, 'DATE_BEGIN'),'DD.MM.YYYY') [/code]
А отладчик почему то подставляет левую скобку: AND (A2_1.C_DATE_LAST < to_date(sys_context(user_context, 'DATE_BEGIN'),'DD.MM.YYYY') [/code]

В колонках представления дата последней операции стоит как дата.
(реквизит C_DATE_LAST в финансовых счетах)
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Авг 18, 2011 14:22    Ответить с цитатой
Полезность: Нет оценки
[/code] это закрывающий тэг - он в IBSO нафиг не нужен Smile
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Авг 18, 2011 15:27    Ответить с цитатой
Полезность: Нет оценки
Не компилится представление, нашел похожий вариант, все так же, но мой ошибку выдает

1. Написал тело (скомпилилось - ОК)
begin
executor.set_context('DATE_BEGIN', P_DATE);
end;
2. В представлении в свойствах на вкладке условие написал:
sys_context(user_context, 'DATE_BEGIN') = A2_1.C_DATE_LAST
3. Выпадает ошибка:
ORA-20100: ORA-00904: "USER_CONTEXT": недопустимый идентификатор
ORA-00904: "USER_CONTEXT": недопустимый идентификатор

Что я делаю не так (это не PL+ представление (колонки собирал встроенным билдером), может в этом затык?

З.Ы. Сильно не пинайте, я первый раз систему вижу и дедуктивным методом осваиваю Smile
markoff
Участник - экстремал


Вступление в Клуб: 09.06.2009
СообщениеЧт Авг 18, 2011 15:42    Ответить с цитатой
Полезность: Нет оценки
сделайте преобразования к дате
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Авг 18, 2011 15:45    Ответить с цитатой
Полезность: Нет оценки
to_date(sys_context( user_context,'DATE_BEGIN','DD/MM/YYYY')) = A2_1.C_DATE_LAST

Пробовал - не помогает, да и ошибка не на формат.
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеЧт Авг 18, 2011 16:07    Ответить с цитатой
Полезность: Нет оценки
Всем спасибо, допёрло. Разогнал мою предыдущюю мысль. Надо вот так написать:

sys_context( /*PL+*/user_context/*PL-*/,'DATE_BEGIN') = A2_1.C_DATE_LAST
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru