Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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   |
|
Полезность: Нет оценки
|
тема закрыта, проблема решена |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|