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

Цикл по представлению
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
Alexander
Участник со стажем


Вступление в Клуб: 25.10.2008
СообщениеСр Авг 19, 2009 16:00   Цикл по представлению Ответить с цитатой
Полезность: Нет оценки
Здравствуйте! Нет ли у кого-нибудь возможности помочь разобраться в следующем вопросе.
С помощью конструктора я сделал некое представление. При необходимости пользователь накладывает на него фильтр. Необходимо создать операцию, в которой работал бы цикл и бежал бы по строкам представления. При этом необходимо записывать данные из полей представления в файл. Хочется разобраться именно в механизме обращения к строкам, которые в данный момент выбраны (с учетом наложенного пользователем фильтра) и как работать с данными в полях. Буду премного благодарен. Знаю, что конкретно эту задачу можно решить через печать, но мне важен пример на PL/PLUS как это сделать, чтобы понять и использовать данный механизм в дальнейшем.

Спасибо.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеСр Авг 19, 2009 16:28    Ответить с цитатой
Полезность: Нет оценки
Если Вы имеете в виду обращение в программном коде к отфильтрованным записям, то это ИМХО невозможно. А вот если пользователь выделит интересующие его записи (с помощью ctrl+A или ctrl), то к ним сможет обращаться списочная операция.
В списочной операции под this понимается pl/sql таблица, по которой можно написать цикл.
Но! Все равно не получится добраться до полей представления без дополнительного запроса из этой вьюхи. Но такой подход практически не используется. Обычно операции отталкиваются от объекта некоторого типа.
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Авг 20, 2009 05:03    Ответить с цитатой
Полезность: Нет оценки
Как вариант, сохранять критерии фильтра в глобальных переменных (в операции фильтра) и в операции использовать цикл по экземплярам класса с использованием в условии where этих переменных.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеЧт Авг 20, 2009 07:28    Ответить с цитатой
Полезность: 1
timochev пишет:
Но! Все равно не получится добраться до полей представления без дополнительного запроса из этой вьюхи.


Уточнение. Это в случаях, когда во вьюхе выводится не просто значение реквизита, а какое-то вычисляемое значение. Если же вьюха просто отображает реквизиты экземпялра, то по ссылке из массива this в списочной операции можно напрямую обращаться к полям данного экземпляра. И здесь списочная операция - "то, что доктор прописал"

Цитата:
Как вариант, сохранять критерии фильтра в глобальных переменных (в операции фильтра) и в операции использовать цикл по экземплярам класса с использованием в условии where этих переменных.

В качестве простого примера - представление VW_CRIT_DOCUM_DECL_PROCESSED в Платежных документах.
Установка контекста - в теле операции-фильтра этого представления.
PS Обратите внимание в поле Формула операции-фильтра Smile
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Авг 20, 2009 07:36    Ответить с цитатой
Полезность: Нет оценки
lexus пишет:
И здесь списочная операция - "то, что доктор прописал"

При условии, что выборку попали ВСЕ записи, а не первые 200 (или сколько установлено по умолчанию в настройках Навигатора), либо у представления стоит признак "Не ограничивать выброку". Rolling Eyes
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеЧт Авг 20, 2009 08:02    Ответить с цитатой
Полезность: 3
А если все-таки есть желание написать запрос из представления, то это выглядит так:
Код:
      for (select x(   x.[C_MAIN_DOCUM]   : C_MAIN_DOCUM,
                  x.[C_VID_OPER]      : C_VID_OPER,
                  ...)
               in (VW_RPT_VED_47416%RowType : x)
where ...)

Запросы из представлений для отчета VW_RPT получаются более читабельными, чем из представлений для просмотра VW_CRIT, но можно делать выборки и из последних.

Хороший пример - операция MAIN_DOCUM.VED_47416. Там на ЭФ задаются параметры, затем устанавливается контекст, а затем идет выборка из VW_RPT_VED_47416, где и анализируется контекст.
lexus
Профи


Вступление в Клуб: 28.09.2007
СообщениеЧт Авг 20, 2009 08:10    Ответить с цитатой
Полезность: Нет оценки
Вот и поговорили Laughing
Осталось друг другу полезностей наставить Very Happy
lexoos
Участник - экстремал


Вступление в Клуб: 06.11.2007
СообщениеПн Авг 24, 2009 06:28    Ответить с цитатой
Полезность: Нет оценки
В свое время делал следующее: есть представление, на которое пользователь может наложить всякого рода фильтры, отсортировать его. Создана списочная операция, которая отрабатывает по выбранным строкам представлениям, при этом обращение к текущему экземпляру идет через this, и, в моем случае, заполняет временную табличку, которая после обработки последней выделенной строки, вываливается в ексель. Колличество выбранных строк тупо определяется через заголовок формы списочной операции.
vladk1973
Участник


Вступление в Клуб: 28.09.2009
СообщениеПн Сен 28, 2009 14:03    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Если Вы имеете в виду обращение в программном коде к отфильтрованным записям, то это ИМХО невозможно. А вот если пользователь выделит интересующие его записи (с помощью ctrl+A или ctrl), то к ним сможет обращаться списочная операция.
В списочной операции под this понимается pl/sql таблица, по которой можно написать цикл.
Но! Все равно не получится добраться до полей представления без дополнительного запроса из этой вьюхи. Но такой подход практически не используется. Обычно операции отталкиваются от объекта некоторого типа.

Хочется все-таки вернуться к нашим баранам.
Неужели невозможно получить значение полей текущей строки, например, из клиент-скрипта формы?
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПн Сен 28, 2009 14:14    Ответить с цитатой
Полезность: Нет оценки
vladk1973 пишет:
timochev пишет:
Если Вы имеете в виду обращение в программном коде к отфильтрованным записям, то это ИМХО невозможно. А вот если пользователь выделит интересующие его записи (с помощью ctrl+A или ctrl), то к ним сможет обращаться списочная операция.
В списочной операции под this понимается pl/sql таблица, по которой можно написать цикл.
Но! Все равно не получится добраться до полей представления без дополнительного запроса из этой вьюхи. Но такой подход практически не используется. Обычно операции отталкиваются от объекта некоторого типа.

Хочется все-таки вернуться к нашим баранам.
Неужели невозможно получить значение полей текущей строки, например, из клиент-скрипта формы?

Нет.
vladk1973
Участник


Вступление в Клуб: 28.09.2009
СообщениеПн Сен 28, 2009 14:25    Ответить с цитатой
Полезность: Нет оценки
dnk_dz пишет:
Нет.

Это печально Sad
Васильев Николай
Профи


Вступление в Клуб: 29.06.2007
СообщениеЧт Окт 08, 2009 11:59    Ответить с цитатой
Полезность: Нет оценки
vladk1973 пишет:
timochev пишет:
Если Вы имеете в виду обращение в программном коде к отфильтрованным записям, то это ИМХО невозможно. А вот если пользователь выделит интересующие его записи (с помощью ctrl+A или ctrl), то к ним сможет обращаться списочная операция.
В списочной операции под this понимается pl/sql таблица, по которой можно написать цикл.
Но! Все равно не получится добраться до полей представления без дополнительного запроса из этой вьюхи. Но такой подход практически не используется. Обычно операции отталкиваются от объекта некоторого типа.

Хочется все-таки вернуться к нашим баранам.
Неужели невозможно получить значение полей текущей строки, например, из клиент-скрипта формы?


Давненько не посещал, все дела Sad

операция печать представления бежит по отфильтрованным записям и может записывать данные в файл. Это разве не устроит?
InNesKA
Участник со стажем


Вступление в Клуб: 05.06.2008
СообщениеВт Ноя 02, 2010 11:19    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
А если все-таки есть желание написать запрос из представления, то это выглядит так:
Код:
      for (select x(   x.[C_MAIN_DOCUM]   : C_MAIN_DOCUM,
                  x.[C_VID_OPER]      : C_VID_OPER,
                  ...)
               in (VW_RPT_VED_47416%RowType : x)
where ...)

Запросы из представлений для отчета VW_RPT получаются более читабельными, чем из представлений для просмотра VW_CRIT, но можно делать выборки и из последних.

Хороший пример - операция MAIN_DOCUM.VED_47416. Там на ЭФ задаются параметры, затем устанавливается контекст, а затем идет выборка из VW_RPT_VED_47416, где и анализируется контекст.


А если случай такой. Надо вывести в файл (не стандартной операцией - Печать) записи по выписке. Т.е. из фин. счетов вызывается операция на конкретном счете и нужно вывести данные по представлению, которое находиться в структуре Выписка по счету?
Васильев Николай
Профи


Вступление в Клуб: 29.06.2007
СообщениеВт Ноя 02, 2010 11:34    Ответить с цитатой
Полезность: Нет оценки
Я могу подсказать такой вариант, в поле "дополнительно" в представлении
можно вызывать функцию. Пусть она и вставляет строки в файл.
Собсно функции можно и жестко зашить фильтре представления -формула.
InNesKA
Участник со стажем


Вступление в Клуб: 05.06.2008
СообщениеВт Ноя 02, 2010 11:57    Ответить с цитатой
Полезность: Нет оценки
Васильев Николай пишет:
Я могу подсказать такой вариант, в поле "дополнительно" в представлении
можно вызывать функцию. Пусть она и вставляет строки в файл.
Собсно функции можно и жестко зашить фильтре представления -формула.


Не совсем поняла как там можно прописать функцию Sad
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

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