| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		ict_2010 Участник со стажем
 
  Вступление в Клуб: 25.03.2015
  | 
		
			
				 Чт Апр 30, 2015 11:36   Дерево | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| Добрый день!Подскажите пож-та как вывести в отчете т.е. в excel инфо в виде иерархии ну или древовидной структуры. Например одна запись и все его подзаписи? | 
			 
		  | 
	 
	
		  | 
	 
	
		vtar Эксперт
 
  Вступление в Клуб: 20.03.2009
  | 
		
			
				 Чт Апр 30, 2015 14:14    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Код: | 	 		  
 
i integer;
 
begin
 
 
   EXCEL.INIT_XLS;
 
   EXCEL.OPEN_FILE('', true,false);
 
 
   i := 0;
 
   for ( select dep(dep.[ code]: dep_code, dep.[NAME]: dep_name,  level: lev) in [DEPART]
 
         connect by  dep.[HIGH] = PRIOR dep
 
         start  dep = this
 
         order by level
 
      ) loop
 
      i := i + 1;
 
      EXCEL.Put( i, 1, dep.lev);
 
      EXCEL.Put( i, 2, i);
 
      EXCEL.Put( i, 3, dep.dep_code);
 
      EXCEL.Put( i, 4, dep.dep_name);
 
   end loop;      
 
   
 
   Excel.Print_Array;
 
   EXCEL.visible;
 
    EXCEL.release;
 
 
    stdio.put_line_buf('<% CALL RUNTIME EXCEL_RUN null %>');
 
   
 
end;
 
 | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		ict_2010 Участник со стажем
 
  Вступление в Клуб: 25.03.2015
  | 
		
			
				 Вс Май 03, 2015 16:54    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | vtar пишет: | 	 		   	  | Код: | 	 		  
 
i integer;
 
begin
 
 
   EXCEL.INIT_XLS;
 
   EXCEL.OPEN_FILE('', true,false);
 
 
   i := 0;
 
   for ( select dep(dep.[ code]: dep_code, dep.[NAME]: dep_name,  level: lev) in [DEPART]
 
         connect by  dep.[HIGH] = PRIOR dep
 
         start  dep = this
 
         order by level
 
      ) loop
 
      i := i + 1;
 
      EXCEL.Put( i, 1, dep.lev);
 
      EXCEL.Put( i, 2, i);
 
      EXCEL.Put( i, 3, dep.dep_code);
 
      EXCEL.Put( i, 4, dep.dep_name);
 
   end loop;      
 
   
 
   Excel.Print_Array;
 
   EXCEL.visible;
 
    EXCEL.release;
 
 
    stdio.put_line_buf('<% CALL RUNTIME EXCEL_RUN null %>');
 
   
 
end;
 
 | 	 
  | 	  
 
 
спасибо большое, а можете теперь немного прокомментировать, то что написали, есть некоторые моменты, которые не совсем понятны,Например что за level-это реквизит, почему start - что значит?Вот этот фрагмент  connect by  dep.[HIGH] = PRIOR dep тоже ? | 
			 
		  | 
	 
	
		  | 
	 
	
		Alkov Профи
 
  Вступление в Клуб: 23.09.2010
  | 
		
			
				 Пн Май 04, 2015 15:53   Re: Дерево | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | ict_2010 пишет: | 	 		  | Добрый день!Подскажите пож-та как вывести в отчете т.е. в excel инфо в виде иерархии ну или древовидной структуры. Например одна запись и все его подзаписи? | 	  
 
Вам в Excel надо чтоб по плюсикам разворачивались дочерние,
 
или просто в один столбец вывести как выше показали ? | 
			 
		  | 
	 
	
		  | 
	 
	
		Random Эксперт
 
  Вступление в Клуб: 27.06.2011
  | 
		
			
				 Вт Май 05, 2015 07:04    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | ict_2010 пишет: | 	 		   	  | vtar пишет: | 	 		   	  | Код: | 	 		  
 
i integer;
 
begin
 
 
   EXCEL.INIT_XLS;
 
   EXCEL.OPEN_FILE('', true,false);
 
 
   i := 0;
 
   for ( select dep(dep.[ code]: dep_code, dep.[NAME]: dep_name,  level: lev) in [DEPART]
 
         connect by  dep.[HIGH] = PRIOR dep
 
         start  dep = this
 
         order by level
 
      ) loop
 
      i := i + 1;
 
      EXCEL.Put( i, 1, dep.lev);
 
      EXCEL.Put( i, 2, i);
 
      EXCEL.Put( i, 3, dep.dep_code);
 
      EXCEL.Put( i, 4, dep.dep_name);
 
   end loop;      
 
   
 
   Excel.Print_Array;
 
   EXCEL.visible;
 
    EXCEL.release;
 
 
    stdio.put_line_buf('<% CALL RUNTIME EXCEL_RUN null %>');
 
   
 
end;
 
 | 	 
  | 	  
 
 
спасибо большое, а можете теперь немного прокомментировать, то что написали, есть некоторые моменты, которые не совсем понятны,Например что за level-это реквизит, почему start - что значит?Вот этот фрагмент  connect by  dep.[HIGH] = PRIOR dep тоже ? | 	  
 
 
Иерархические запросы Oracle
 
 	  | Код: | 	 		  select level -- уровень иерархии
 
from table where <условие на результирующую выборку>
 
start with <условие поиска начального узла, с которого начинается строиться иерархия>
 
connect by <условие присоединения дочерних узлов>
 
 | 	  
 
В Excel иерархическая структура строится по-другому.
 
Попробуйте просто начать запись макроса, сделать пример иерархии, закончить запись макроса, а потом посмотреть, что получилось, и переписать под себя? | 
			 
		  | 
	 
	
		  | 
	 
	
		ict_2010 Участник со стажем
 
  Вступление в Клуб: 25.03.2015
  | 
		
			
				 Ср Май 06, 2015 05:42   Re: Дерево | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Alkov пишет: | 	 		   	  | ict_2010 пишет: | 	 		  | Добрый день!Подскажите пож-та как вывести в отчете т.е. в excel инфо в виде иерархии ну или древовидной структуры. Например одна запись и все его подзаписи? | 	  
 
Вам в Excel надо чтоб по плюсикам разворачивались дочерние,
 
или просто в один столбец вывести как выше показали ? | 	  
 
 
Просто в виде списка выходили в один столбец | 
			 
		  | 
	 
	
		  | 
	 
	
		ict_2010 Участник со стажем
 
  Вступление в Клуб: 25.03.2015
  | 
		
			
				 Ср Май 06, 2015 06:01    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Random пишет: | 	 		   	  | ict_2010 пишет: | 	 		   	  | vtar пишет: | 	 		   	  | Код: | 	 		  
 
i integer;
 
begin
 
 
   EXCEL.INIT_XLS;
 
   EXCEL.OPEN_FILE('', true,false);
 
 
   i := 0;
 
   for ( select dep(dep.[ code]: dep_code, dep.[NAME]: dep_name,  level: lev) in [DEPART]
 
         connect by  dep.[HIGH] = PRIOR dep
 
         start  dep = this
 
         order by level
 
      ) loop
 
      i := i + 1;
 
      EXCEL.Put( i, 1, dep.lev);
 
      EXCEL.Put( i, 2, i);
 
      EXCEL.Put( i, 3, dep.dep_code);
 
      EXCEL.Put( i, 4, dep.dep_name);
 
   end loop;      
 
   
 
   Excel.Print_Array;
 
   EXCEL.visible;
 
    EXCEL.release;
 
 
    stdio.put_line_buf('<% CALL RUNTIME EXCEL_RUN null %>');
 
   
 
end;
 
 | 	 
  | 	  
 
 
спасибо большое, а можете теперь немного прокомментировать, то что написали, есть некоторые моменты, которые не совсем понятны,Например что за level-это реквизит, почему start - что значит?Вот этот фрагмент  connect by  dep.[HIGH] = PRIOR dep тоже ? | 	  
 
 
Иерархические запросы Oracle
 
 	  | Код: | 	 		  select level -- уровень иерархии
 
from table where <условие на результирующую выборку>
 
start with <условие поиска начального узла, с которого начинается строиться иерархия>
 
connect by <условие присоединения дочерних узлов>
 
 | 	  
 
В Excel иерархическая структура строится по-другому.
 
Попробуйте просто начать запись макроса, сделать пример иерархии, закончить запись макроса, а потом посмотреть, что получилось, и переписать под себя? | 	  
 
По вашему примеру у меня не совсем правильно выходит, дело в том что все данные у меня хранятся в одной ТБП "All problems" где она в свою очередь имеет реквизиты "MainName"(типа как родитель) и "Name"(типа как потомок). Реквизит "MainName" ссылается на саму себя, т.е. на ТБП "All problems". Например я создаю запись  с помощью операции "Добавить". Первоначально реквизит "MainName" будет пуст, а в реквизит "Name" пишу там "Создать форм". Далее выбираю данную запись с какой то операцией эту запись "Создать форм" отправляю там на тестирование или на проверку например с операцией "Отправить на тест". Так вот этом случае у меня  создается новая запись и там в качестве родителя автоматически указывается "Создать Форм", а в качестве потомка в реквизите "Name" записывается автоматически -  "На тестирование "Создать форм"". Так вот у этой записи могут и быть другие потомки такие как на проверку или рассмотрение и мне необходимо чтоб выводились все потомки вот этой "Создать форм" ну и сама запись это "Создать форм" тоже выводился. | 
			 
		  | 
	 
	
		  | 
	 
	
		Random Эксперт
 
  Вступление в Клуб: 27.06.2011
  | 
		
			
				 Ср Май 06, 2015 10:13    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | ict_2010 пишет: | 	 		  | По вашему примеру у меня не совсем правильно выходит, дело в том что все данные у меня хранятся в одной ТБП "All problems" где она в свою очередь имеет реквизиты "MainName"(типа как родитель) и "Name"(типа как потомок). Реквизит "MainName" ссылается на саму себя, т.е. на ТБП "All problems". Например я создаю запись  с помощью операции "Добавить". Первоначально реквизит "MainName" будет пуст, а в реквизит "Name" пишу там "Создать форм". Далее выбираю данную запись с какой то операцией эту запись "Создать форм" отправляю там на тестирование или на проверку например с операцией "Отправить на тест". Так вот этом случае у меня  создается новая запись и там в качестве родителя автоматически указывается "Создать Форм", а в качестве потомка в реквизите "Name" записывается автоматически -  "На тестирование "Создать форм"". Так вот у этой записи могут и быть другие потомки такие как на проверку или рассмотрение и мне необходимо чтоб выводились все потомки вот этой "Создать форм" ну и сама запись это "Создать форм" тоже выводился. | 	  
 
 
Извините, я ничего не понял.
 
В приведённом vtar и мною примере имеется справочник, как-то заполненный на момент выполнения запроса.
 
Этот срез выводится в иерархическом виде.
 
Постройте ваш справочник хотя бы на бумаге - как он должен быть связан, какие значения у каких записей в каких реквизитах должны быть. | 
			 
		  | 
	 
	
		  | 
	 
	
		ict_2010 Участник со стажем
 
  Вступление в Клуб: 25.03.2015
  | 
		
			
				 Чт Май 07, 2015 07:25    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | Random пишет: | 	 		   	  | ict_2010 пишет: | 	 		  | По вашему примеру у меня не совсем правильно выходит, дело в том что все данные у меня хранятся в одной ТБП "All problems" где она в свою очередь имеет реквизиты "MainName"(типа как родитель) и "Name"(типа как потомок). Реквизит "MainName" ссылается на саму себя, т.е. на ТБП "All problems". Например я создаю запись  с помощью операции "Добавить". Первоначально реквизит "MainName" будет пуст, а в реквизит "Name" пишу там "Создать форм". Далее выбираю данную запись с какой то операцией эту запись "Создать форм" отправляю там на тестирование или на проверку например с операцией "Отправить на тест". Так вот этом случае у меня  создается новая запись и там в качестве родителя автоматически указывается "Создать Форм", а в качестве потомка в реквизите "Name" записывается автоматически -  "На тестирование "Создать форм"". Так вот у этой записи могут и быть другие потомки такие как на проверку или рассмотрение и мне необходимо чтоб выводились все потомки вот этой "Создать форм" ну и сама запись это "Создать форм" тоже выводился. | 	  
 
 
Извините, я ничего не понял.
 
В приведённом vtar и мною примере имеется справочник, как-то заполненный на момент выполнения запроса.
 
Этот срез выводится в иерархическом виде.
 
Постройте ваш справочник хотя бы на бумаге - как он должен быть связан, какие значения у каких записей в каких реквизитах должны быть. | 	  
 
Высылаю в word документе справочник и то как необходимо отображать в Excel. | 
			 
		  | 
	 
	
		  | 
	 
	
		Damir Участник - экстремал
 
  Вступление в Клуб: 29.03.2013
  | 
		
			
				 Чт Май 07, 2015 08:12    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				
 
в Oracle есть еще
 
 	  | Цитата: | 	 		  | ORDER SIBLINGS BY | 	  
 
- 'деревянная' сортировка дерева | 
			 
		  | 
	 
	
		  | 
	 
	
		Random Эксперт
 
  Вступление в Клуб: 27.06.2011
  | 
		
			
				 Чт Май 07, 2015 10:36    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | ict_2010 пишет: | 	 		  | Высылаю в word документе справочник и то как необходимо отображать в Excel. | 	  
 
 
Ну неужели вы не обращаете внимание на некоторое сходство вашего справочника со справочником depart ?
 
 
depart:
 
id - текущая запись.
 
high - вышестоящая запись. | 
			 
		  | 
	 
	
		  | 
	 
	
		ict_2010 Участник со стажем
 
  Вступление в Клуб: 25.03.2015
  | 
		
			
				 Чт Май 07, 2015 13:43    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| тема закрыта, проблема решена | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |