Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 14:34  Владелец массива поиск по записи на которую ссылается массив |
|
Полезность: Нет оценки
|
Коллеги, добрый день!
Проблемка такая: есть некое ТБП с реквизитом типа массив ссылок на документ (DOC_REF_ARR). Документы в массиве типа Финансовое распоряжение (FIN_ORDER). Хочется от конкретного ФР (ссылка на которое существует в массиве) вычислить экземпляр ТБП?
Сама таблица Z#DOCUMENT_REF имеет колонки С_VALUE и С_COLLECTION_ID, но в Адм.словаря они не видны, соответственно из операций к ним не обратиться. Логично найти ссылку и от нее - родителя, но!
Строка
Код: | locate docref in ::[DOCUMENT_REF] collections where docref=P_FIN_ORDER |
компилится в
Код: | declare
plp$2$1 number;
cursor c_obj is
select a1.id
from Z#DOCUMENT_REF a1
where a1.COLLECTION_ID is not NULL
(a1.C_VALUE = plp$2$1);
begin
plp$2$1 := P_FIN_ORDER;
plp$ID_1 := NULL;
for plp$c_obj in c_obj loop
plp$ID_1 := plp$c_obj.id; exit;
end loop;
if plp$ID_1 is NULL then raise rtl.NO_DATA_FOUND; end if;
end; | При выполнении вываливается с необработанным исключением, т.к. в цикле по курсору ничего не находится (plp$ID_1 - NULL)
Попытка написать через pl/sql-ный блок тоже к успеху не привела.
Вот вроде тривиальный вопрос, а затык... 
Последний раз редактировалось: Alex2019 (Вт Авг 05, 2008 16:05), всего редактировалось 1 раз |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 14:59   |
|
Полезность: Нет оценки
|
можно попробовать.. хотя не проерял
Код: | for doc_1 in ::[FIN_ORDER].[DOCUMENT_REF] loop
for doc_2 in ::[MAIN_DOCUM]
where doc_1.[IN_FOLDER].[DOCS_IN_FOLD].[DOCUMENT]
=doc_2.[IN_FOLDER].[DOCS_IN_FOLD].[DOCUMENT]
loop
....
end loop;
end loop; |
правда это очень грубо.. думаю что можно оптимизировать _________________ всегда есть как минимум 2 выхода |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 15:07   |
|
Полезность: Нет оценки
|
Alexsey пишет: | можно попробовать.. хотя не проерял
| Алексей, прежде всего, спасибо
Правда не ясно, для чего цикл по ФР, ведь мы "пляшем" от конкретного экземпляра распоряжения. И что мы ищем в MAIN_DOCUM? Они тут вроде никаким боком. Требуется как минимум найти collection_id ссылки на ФР |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 15:13   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Alexsey пишет: | можно попробовать.. хотя не проерял
| Алексей, прежде всего, спасибо
Правда не ясно, для чего цикл по ФР, ведь мы "пляшем" от конкретного экземпляра распоряжения. И что мы ищем в MAIN_DOCUM? Они тут вроде никаким боком. Требуется как минимум найти collection_id ссылки на ФР |
тогда можно просто оттолкнуться от
Код: |
for doc_1 in ::[FIN_ORDER].[DOCUMENT_REF] loop |
_________________ всегда есть как минимум 2 выхода |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 15:20   |
|
Полезность: Нет оценки
|
Alexsey пишет: | тогда можно просто оттолкнуться от
Код: |
for doc_1 in ::[FIN_ORDER].[DOCUMENT_REF] loop |
|
Наверное, только от ::[FIN_ORDER].[DOCUMENT]? (т.к реквизита ..._REF вроде нет). Хорошо бы, но на что он ссылается? Я посмотрел в SQL-навигаторе, по тому ID, что прописан в этом поле вовсе ничего не находится. Ни в Z#DOCUMENT, ни в Z#DOCUMENT_REF. А в ЦФТ-навигаторе оно пустое |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 15:29   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Alexsey пишет: | тогда можно просто оттолкнуться от
Код: |
for doc_1 in ::[FIN_ORDER].[DOCUMENT_REF] loop |
|
Наверное, только от ::[FIN_ORDER].[DOCUMENT]? (т.к реквизита ..._REF вроде нет). Хорошо бы, но на что он ссылается? Я посмотрел в SQL-навигаторе, по тому ID, что прописан в этом поле вовсе ничего не находится. Ни в Z#DOCUMENT, ни в Z#DOCUMENT_REF. А в ЦФТ-навигаторе оно пустое |
да именно.. прошу прощения
а далее уже будет несложно получить ID документа
ибо это будет
doc_1.[IN_FOLDER].[DOCS_IN_FOLD].[DOCUMENT] _________________ всегда есть как минимум 2 выхода
Последний раз редактировалось: Alexsey (Вт Авг 05, 2008 15:33), всего редактировалось 1 раз |
|
 |
German Профи
Вступление в Клуб: 25.06.2007
|
Вт Авг 05, 2008 15:30  Re: Работа со ссылками на документ |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Строка
Код: | locate docref in ::[DOCUMENT_REF] collections where docref=P_FIN_ORDER |
компилится в
Код: | declare
plp$2$1 number;
cursor c_obj is
select a1.id
from Z#DOCUMENT_REF a1
where a1.COLLECTION_ID is not NULL
(a1.C_VALUE = plp$2$1);
begin
plp$2$1 := Z#FIN_ORDER#INTERFACE.get_ref(P_FIN_ORDER,'IN_FOLDER');
plp$ID_1 := NULL;
for plp$c_obj in c_obj loop
plp$ID_1 := plp$c_obj.id; exit;
end loop;
if plp$ID_1 is NULL then raise rtl.NO_DATA_FOUND; end if;
end; | При выполнении вываливается с необработанным исключением, т.к. в цикле по курсору ничего не находится (plp$ID_1 - NULL) |
А финраспоряжение, которое передано в P_FIN_ORDER, точно содержится хотя бы в одном массиве "некого ТБП" ? Курсор-то вроде корректный... _________________ Homo homini |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 15:33   |
|
Полезность: Нет оценки
|
Alexsey пишет: | ID в ТБП Z#DOCUMENT можно получить так
Код: | for doc_1 in ::[FIN_ORDER].[DOCUMENT_REF] loop
doc_1.[IN_FOLDER].[DOCS_IN_FOLD].[DOCUMENT] --id из Z#DOCUMENT |
по другому никак | Стоп! Я чего-то недопонял. Для экземпляра финордера ID в Z#DOCUMENT и FIN_ORDER совпадают, т.к. второе - подкласс первого. Мне нужен ID экземпляра в DOCUMENT_REF, у которого C_VALUE=ID финордера |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 15:36  Re: Работа со ссылками на документ |
|
Полезность: Нет оценки
|
German пишет: |
А финраспоряжение, которое передано в P_FIN_ORDER, точно содержится хотя бы в одном массиве "некого ТБП" ? Курсор-то вроде корректный... |
Абсолютно точно. Вручную в SQL-навигаторе проверял. В том-то и дело, что все вроде правильно, а результат кривой... |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 15:36   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Alexsey пишет: | ID в ТБП Z#DOCUMENT можно получить так
Код: | for doc_1 in ::[FIN_ORDER].[DOCUMENT_REF] loop
doc_1.[IN_FOLDER].[DOCS_IN_FOLD].[DOCUMENT] --id из Z#DOCUMENT |
по другому никак | Стоп! Я чего-то недопонял. Для экземпляра финордера ID в Z#DOCUMENT и FIN_ORDER совпадают, т.к. второе - подкласс первого. Мне нужен ID экземпляра в DOCUMENT_REF, у которого C_VALUE=ID финордера |
тогда надо смотреть только через папку.. ибо там есть и сам фин ордер и документ им порожденный _________________ всегда есть как минимум 2 выхода |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 15:39   |
|
Полезность: Нет оценки
|
Alexsey пишет: | тогда надо смотреть только через папку.. ибо там есть и сам фин ордер и документ им порожденный |
Алексей, документы мне совершенно незачем, они-то находятся без проблем. Посмотрите еще раз текст исходного вопроса, требуется найти ссылку на ссылку. Может тут какой-то хитрый синтаксис существует? |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 15:52   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Alexsey пишет: | тогда надо смотреть только через папку.. ибо там есть и сам фин ордер и документ им порожденный |
Алексей, документы мне совершенно незачем, они-то находятся без проблем. Посмотрите еще раз текст исходного вопроса, требуется найти ссылку на ссылку. Может тут какой-то хитрый синтаксис существует? |
тогда можно можно запустить скрипт,у меня отработал в "Жабе"
Код: |
-- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF where
COLLECTION_ID = '47941267' --, где '47941267' ID записи
-- end pl/sql
|
а если боть совсем точным то
Код: |
-- begin pl/sql
select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF where
COLLECTION_ID = P_FIN_ORDER
-- end pl/sql |
_________________ всегда есть как минимум 2 выхода |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 15:59   |
|
Полезность: Нет оценки
|
Alexsey пишет: | тогда можно можно запустить скрипт,у меня отработал в "Жабе"
Код: | select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
COLLECTION_ID = '47941267' --, где '47941267' ID записи |
|
Опять не понял. В запросе хотим вернуть collection_id, тот же который мы задаем в условиях? Может быть имелось в виду where
s.VALUE = '47941267' ? Так практически такой же код и отрабатывает (см.выше) Но ничего не находит...
А в SQL-нав. у меня тоже все отрабатывает и находит. А в ЦФТ - нет |
|
 |
Alexsey Эксперт
Вступление в Клуб: 06.09.2007
|
Вт Авг 05, 2008 16:01   |
|
Полезность: Нет оценки
|
Alex2019 пишет: | Alexsey пишет: | тогда можно можно запустить скрипт,у меня отработал в "Жабе"
Код: | select s.COLLECTION_ID
from
IBS.Z#DOCUMENT_REF s where
COLLECTION_ID = '47941267' --, где '47941267' ID записи |
|
Опять не понял. В запросе хотим вернуть collection_id, тот же который мы задаем в условиях? Может быть имелось в виду where
s.VALUE = '47941267' ? Так практически такой же код и отрабатывает (см.выше) Но ничего не находит... |
если хочеш получить значение VALUE то код у меня был
Код: | select s.VALUE
from
IBS.Z#DOCUMENT_REF s where
COLLECTION_ID = '47941267' --, где '47941267' ID записи |
_________________ всегда есть как минимум 2 выхода
Последний раз редактировалось: Alexsey (Вт Авг 05, 2008 16:05), всего редактировалось 1 раз |
|
 |
Alex2019 Профи
Вступление в Клуб: 02.07.2007
|
Вт Авг 05, 2008 16:02   |
|
Полезность: Нет оценки
|
Alexsey пишет: | если поставить s.VALUE то скрипт не отрабатывает |
В SQL работает, в ЦФТ - нет  |
|
 |
|