Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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 Обратите внимание в поле Формула операции-фильтра  |
|
 |
dnk_dz Эксперт
Вступление в Клуб: 19.09.2007
|
Чт Авг 20, 2009 07:36   |
|
Полезность: Нет оценки
|
lexus пишет: | И здесь списочная операция - "то, что доктор прописал"
|
При условии, что выборку попали ВСЕ записи, а не первые 200 (или сколько установлено по умолчанию в настройках Навигатора), либо у представления стоит признак "Не ограничивать выброку".  |
|
 |
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   |
|
Полезность: Нет оценки
|
Вот и поговорили
Осталось друг другу полезностей наставить  |
|
 |
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   |
|
Полезность: Нет оценки
|
Это печально  |
|
 |
Васильев Николай Профи
Вступление в Клуб: 29.06.2007
|
Чт Окт 08, 2009 11:59   |
|
Полезность: Нет оценки
|
vladk1973 пишет: | timochev пишет: | Если Вы имеете в виду обращение в программном коде к отфильтрованным записям, то это ИМХО невозможно. А вот если пользователь выделит интересующие его записи (с помощью ctrl+A или ctrl), то к ним сможет обращаться списочная операция.
В списочной операции под this понимается pl/sql таблица, по которой можно написать цикл.
Но! Все равно не получится добраться до полей представления без дополнительного запроса из этой вьюхи. Но такой подход практически не используется. Обычно операции отталкиваются от объекта некоторого типа. |
Хочется все-таки вернуться к нашим баранам.
Неужели невозможно получить значение полей текущей строки, например, из клиент-скрипта формы? |
Давненько не посещал, все дела
операция печать представления бежит по отфильтрованным записям и может записывать данные в файл. Это разве не устроит? |
|
 |
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   |
|
Полезность: Нет оценки
|
Васильев Николай пишет: | Я могу подсказать такой вариант, в поле "дополнительно" в представлении
можно вызывать функцию. Пусть она и вставляет строки в файл.
Собсно функции можно и жестко зашить фильтре представления -формула. |
Не совсем поняла как там можно прописать функцию  |
|
 |
|