Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
German Профи
Вступление в Клуб: 25.06.2007
|
Вт Авг 05, 2008 16:09   |
|
Полезность: 1
|
Попробуйте
Код: | locate docref in ::[DOCUMENT_REF] collections where docref.[DOCUMENT] = P_FIN_ORDER |
_________________ Homo homini |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 16:10   |
|
Полезность: Нет оценки
|
поставил несколько экспериментов в SQL стало работать следующее
Код: | -- begin pl/sql
select s.C_VALUE, s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = '12148507'
-- end pl/sql
|
правда доменя так и не доперло на что C_VALUE ссылается, хотя ее можно получить следующим образом
Код: | -- begin pl/sql
select s.C_VALUE
from
IBS.Z#DOCUMENT_REF s where
COLLECTION_ID = P_FIN_ORDER
-- end pl/sql |
и далее с C_VALUE можно делать все что хочется _________________ всегда есть как минимум 2 выхода
Последний раз редактировалось: Alexsey (Вт Авг 05, 2008 16:17), всего редактировалось 2 раз(а) |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 16:12   |
|
Полезность: Нет оценки
|
German пишет: | Попробуйте
Код: | locate docref in ::[DOCUMENT_REF] collections where docref.[DOCUMENT] = P_FIN_ORDER |
|
Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT] |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 16:18   |
|
Полезность: Нет оценки
|
Alexsey пишет: | поставил несколько экспериментов в SQL стало работать следующее |
Алексей, у меня ощущение, что вы не совсем правильно поняли задачку, извините уж... Давайте еще раз? Есть финраспоряжение. Есть ссылка на него (не ref [FIN_ORDER],а [DOCUNENT_REF], у которого в колонке C_VALUE лежит айдишник распоряжения. У этой ссылки в поле COLLECTION_ID записан ID ссылки на массив документов искомого ТБП. Требуется в задаче имея распоряжение, найти экз. ТБП или хотя бы остальные экземпляры массива |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Вт Авг 05, 2008 16:21   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT] |
Тогда только медленное Код: | locate x in [НЕКИЙ ТБП] where exists элемент массива со ссылкой на P_FIN_ORDER |
_________________ Homo homini |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 16:23   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Alexsey пишет: | поставил несколько экспериментов в SQL стало работать следующее |
Алексей, у меня ощущение, что вы не совсем правильно поняли задачку, извините уж... Давайте еще раз? Есть финраспоряжение. Есть ссылка на него (не ref [FIN_ORDER],а [DOCUNENT_REF], у которого в колонке C_VALUE лежит айдишник распоряжения. У этой ссылки в поле COLLECTION_ID записан ID ссылки на массив документов искомого ТБП. Требуется в задаче имея распоряжение, найти экз. ТБП или хотя бы остальные экземпляры массива |
тогда все упрощается
пишем
Код: | -- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = P_FIN_ORDER --при условии что в P_FIN_ORDER ID
-- end pl/sql |
получем искомые циферки ссылки _________________ всегда есть как минимум 2 выхода |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 16:28   |
|
Полезность: Нет оценки
|
Alexsey пишет: | поставил несколько экспериментов в SQL стало работать следующее |
Alexsey пишет: | тогда все упрощается
пишем
Код: | -- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = P_FIN_ORDER
-- end pl/sql |
получем искомые циферки ссылки |
Алексей, если вы посмотрите на мой самый первый пост, то увидите почти такой же код. И в SQL он исправно работает. А написанный в ЦФТ-шной операции нет |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 16:32   |
|
Полезность: Нет оценки
|
German пишет: | Alex2019 пишет: | Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT] |
Тогда только медленное Код: | locate x in [НЕКИЙ ТБП] where exists элемент массива со ссылкой на P_FIN_ORDER |
|
Вы будете смеяться, но результат аналогичный. Поверьте, массив есть, элементы в массиве есть. И в том числе тот, от которого я ищу. Мистика! |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Вт Авг 05, 2008 16:37   |
|
Полезность: 1
|
Alex2019 пишет: | German пишет: | Alex2019 пишет: | Ожидаемо при компиляции вываливается: у типа [DOCUMENT] нет реквизита или операции [DOCUMENT] |
Тогда только медленное Код: | locate x in [НЕКИЙ ТБП] where exists элемент массива со ссылкой на P_FIN_ORDER |
|
Вы будете смеяться, но результат аналогичный. Поверьте, массив есть, элементы в массиве есть. И в том числе тот, от которого я ищу. Мистика! |
Выводите в отладку чему равен P_FIN_ORDER _________________ Homo homini |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Вт Авг 05, 2008 16:38   |
|
Полезность: Нет оценки
|
Alexsey пишет: | пишем
Код: | -- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
C_VALUE = P_FIN_ORDER --при условии что в P_FIN_ORDER ID
-- end pl/sql |
получем искомые циферки ссылки |
Код заведомо неверный - нет into _________________ Homo homini |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 16:41   |
|
Полезность: Нет оценки
|
German пишет: |
Выводите в отладку чему равен P_FIN_ORDER |
Блин!!!
Это оно.... Спасибо!!! |
|
 |
Admin Site Admin
Вступление в Клуб: 09.06.2007
|
Вт Авг 05, 2008 16:56   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Alex2019 пишет: | Вы будете смеяться, но результат аналогичный. Поверьте, массив есть, элементы в массиве есть. И в том числе тот, от которого я ищу. Мистика! |
German пишет: |
Выводите в отладку чему равен P_FIN_ORDER |
Блин!!!
Это оно.... Спасибо!!! |
Одно из золотых правил - программист не должен верить в чудеса (по крайней мере на работе) |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 16:58   |
|
Полезность: Нет оценки
|
Admin пишет: | Одно из золотых правил - программист не должен верить в чудеса (по крайней мере на работе) |
И не поспоришь! Остается только оправдываться тем, что в жизни все не так, как на самом деле  |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Ср Авг 06, 2008 08:42   |
|
Полезность: Нет оценки
|
В качестве резюме. Кому-то это наверняка известно, но кому-то возможно поможет обойти подобные грабли.
Собака заключалась в том, что операция вызывалась через PLPCALL.
Фрагмент кода содержался в проверке в секции DEFAULT. При таком вызове вначале отрабатывает именно эта секция (p_message='DEFAULT', p_info='%PLPCALL%'), но при этом, как выяснилось, реквизиты в операцию еще не переданы. Затем, видимо, происходит инициализация параметров и производится повторный вызов проверки в режиме p_message='VALIDATE', p_info='%PLPCALL%'.
Так вот, глюк был связан с тем, что операция падала при первом проходе, еще до передачи параметров.
Огромное спасибо всем отозвавшимся! |
|
 |
lexus Профи
Вступление в Клуб: 28.09.2007
|
Ср Авг 06, 2008 10:28   |
|
Полезность: 2
|
Честно говоря, просмотрел тему мельком... Да и опоздал уже с ответом, но.
В пакете RTL есть
Цитата: | function OBJECT_PARENT(p_object_id IN reference
p_class IN string default null) return reference -
возвращает ccылку на экземпляр, коллекции которого принадлежит
экземпляр p_object_id. |
Может с ней будет проще решить задачу? |
|
 |
|