| Предыдущая тема :: Следующая тема   | 
	
	
	
		| Автор | 
		Сообщение | 
	
	
		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 работает, в ЦФТ - нет   | 
			 
		  | 
	
	
		  | 
	
	
		 |