Текущее время: Вт, июл 22 2025, 11:06

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Как создать дерево
СообщениеДобавлено: Вс, мар 20 2005, 16:50 
Гость
Народ, надо написать программу, которое бы выводило дерево.
Я новичок в этом деле, но моя идея такова:

Данные хранятся в таблице в виде:

2501
2501-01
2502-01
2501-02
2502
2501-01-001
и т.д.

после сортировки получаем:
2501
2501-01
2501-01-001
2502
2502-01
(хм, а может он отсортирует по длине..... - я не пробовал просто пока)

У меня мысль какая, раньше хотел по strlen узнавать какая запись длиннее, но это не совсем практично.
Потом в голову пришло сделать колонку level в моем itab. И туда помещать номер уровня следующим образом:
если строка не содержит "-", то уровень 1
если содержит один "-", то уровень 2
если два - уровень два.
Только вот незнаю, можно ли это как-то узнать?
команда search находит вроде бы первый символ, а не их количество.
Находить и удалять символ и делать пока не кончатся все "-" тоже неправильно ;)
А быть может можно узнать сколько всего заданных символов содержится в конкретной строке?
Или может это вообще стоит по другому делать...
Просто слышал что стандартное дерево поддерживает максимум 3 уровня, а мне надо 4, быть может и 5. Поэтому сам подумал сделать. Идею описал. Посоветуйте плиз как и чего. ( я про поиск символов в строке или про иной подход к делу с атого рода данными.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс, мар 20 2005, 17:40 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Сб, сен 25 2004, 16:30
Сообщения: 1368
Откуда: Москва
Пол: Мужской
А может того-с, велосипед-то не изобретать? Есть дерево в виде класса (искать по маске cl*tree*), есть группа функций для вывода дерева в список (искать по маске RS*TREE*). Насчет трех уровней это вам не подумавши ляпнули..

_________________
С уважением, Сергей Королев


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, мар 21 2005, 17:30 
Гость
Потестируй этот фрагмент построения дерева по pspid
из таблицы proj

PERFORM fill_objects_in_hierarchy
CHANGING l_objects_in_hierarchy.

CALL FUNCTION 'CNPB_H_PROJ_HIER_SELECT'
EXPORTING
i_objects_in_hierarchy = l_objects_in_hierarchy
i_pspid = pspid
i_flg_enqueue = 'X'
i_expand_levels = '99'
i_drag_drop_handle = l_drag_drop_handle
i_hier_col_is_key = ' ' "l_hier_col_is_key
IMPORTING
et_treeitm = p_item_table
et_treev_node = p_node_table
e_flg_enqueue = l_enqueue
e_objects_in_hierarchy = g_objects_in_tree.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

FORM fill_objects_in_hierarchy
CHANGING p_objects_in_hierarchy TYPE cnpb_h_objects_in_hierarchy.
p_objects_in_hierarchy-proj = 'X'. "g_options-project.
p_objects_in_hierarchy-prps = 'X'. "g_options-wbselement.
p_objects_in_hierarchy-aufk_ps = space. "g_options-network.
p_objects_in_hierarchy-vallc = space. "g_options-network.
p_objects_in_hierarchy-afvg_ps = space. "g_options-activity.
p_objects_in_hierarchy-afvg_ps_uvo = space. "g_options-element.
p_objects_in_hierarchy-resb = space. "g_options-material.
p_objects_in_hierarchy-mlst = space. "g_options-milestone.
p_objects_in_hierarchy-pstx = space. "g_options-pstext.
p_objects_in_hierarchy-affh = space.
p_objects_in_hierarchy-drad = space. "g_options-document.
p_objects_in_hierarchy-afab = space. "g_options-relation.

ENDFORM. " FILL_OBJECTS_IN_HIERARCHY


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 22 2005, 02:34 
Гость
Вот этот кусок выводит замечательное дерево, содержимое и внешность дерева настраивается в таблице p_it_tree :

Code:
data: p_it_tree like snodetext occurs 0 with header line.
...
заполнение p_it_tree
...
  CALL FUNCTION 'RS_TREE_CONSTRUCT'
       TABLES
            NODETAB            = P_IT_TREE
       EXCEPTIONS
            TREE_FAILURE       = 1
            ID_NOT_FOUND       = 2
            WRONG_RELATIONSHIP = 3
            OTHERS             = 4.

  CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
       EXPORTING
            CALLBACK_PROGRAM      = 'Имя текущей программы'
            CALLBACK_USER_COMMAND = 'имя формы для обработки всяких нажатий'
            STATUS                = 'OWN'
       EXCEPTIONS
            OTHERS                = 1.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 22 2005, 10:12 
Гость
С построением более менее разобрался.
Никак не могу понять каким образом заполняется таблица с деревом.

То есть: у меня есть на входе таблица с данными (вид данных я писал) + всякие их определения соответсвенно и тексты.
на выходе должен получить дерево

как заполнить таблицу?
Не пойму никак...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 22 2005, 10:19 
Гость
просто в структуре таблицы p_it_tree аж 98 элементов
Я конечно понимаю что больше половины из них для настройки.
Но ведь ID и ROOT и TYPE вроде автоматом проставляться должны. и еще какие-то.
не пойму как ее заполнить, имея всего:

2501 тест1
2501-01 подтест1
2501-01-001 подтест2
2502 тест2
2502-01 подтест2


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 22 2005, 11:02 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 16:09
Сообщения: 202
а чем тебе наборы не дерево ?

GS01 - создание набора


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 22 2005, 11:14 
Гость
rodendron написал(а):
не пойму как ее заполнить, имея всего:

2501 тест1
2501-01 подтест1
2501-01-001 подтест2
2502 тест2
2502-01 подтест2


вот пример, разбирайся:
Code:
 
  IT_TREE-NAME = 'Список документов:'.
  IT_TREE-TYPE = 'ROOT'.
  IT_TREE-NLENGTH = 18.
  IT_TREE-TLEVEL = 1.
  IT_TREE-COLOR = '1'.
  IT_TREE-INTENSIV = '1'.
  IT_TREE-TEXT = 'Выбрано документов:'.
  IT_TREE-TPOS = 26.
  IT_TREE-TLENGTH = 19.
  IT_TREE-TCOLOR = 3.
  IT_TREE-TINTENSIV = '1'.
  IT_TREE-TPOS1 = 45.
  IT_TREE-TEXT1+0(10) = COUNT_DOC.
  IT_TREE-TLENGTH1 = 10.
  IT_TREE-TCOLOR1 = '3'.
  IT_TREE-TINTENSIV1 = '0'.
  append it_tree. clear it_tree.
* Выводим заголовки документов
  LOOP AT IT_HEAD.
    IT_TREE-TLEVEL = 2.
    IT_TREE-TYPE = 'DOC'.   "название сами придумываем
    IT_TREE-NLENGTH = 20.
    IT_TREE-NAME = IT_HEAD-NUM_D.
    IT_TREE-COLOR = '4'.
    IT_TREE-INTENSIV = '1'.
    IT_TREE-TEXT = IT_HEAD-TYPE_D.
    IT_TREE-TPOS = 30.
    IT_TREE-TLENGTH = 15.
    IT_TREE-TCOLOR = 4.
    IT_TREE-TINTENSIV = '0'.
   append it_tree. clear it_tree.
* выводим позиции документа (это уже следующий уровень)
    LOOP AT IT_OBOR WHERE ID_DOC = IT_HEAD-ID.
      IT_TREE-TLEVEL = 3.
      IT_TREE-TYPE = 'OBOR'.  "название сами придумываем
      IT_TREE-TLENGTH = 60.
      IT_TREE-TEXT = IT_OBOR-NAME_OBOR.
      IT_TREE-TCOLOR = '5'.
      IT_TREE-TINTENSIV = '0'.
      IT_TREE-TEXT1 = 'Цена за единицу:'.
      IT_TREE-TPOS1 = 75.
      IT_TREE-TLENGTH1 = 17.
      IT_TREE-TPOS2 = 91.
      IT_TREE-TEXT2+0(20) = IT_OBOR-PRICE.
      IT_TREE-TLENGTH2 = 20.
      IT_TREE-TCOLOR2 = '5'.
      IT_TREE-TINTENSIV2 = '0'.append it_tree. clear it_tree.
   endloop.
endloop.


и так можно этих вложенных циклов создать сколько тебе нужно ...


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 22 2005, 11:53 
Гость
надо рекурсию использовать, как можо предусмотреть количество вложенных циклов


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, мар 22 2005, 15:29 
Гость
А после того как я постоил дерево по примеру от EHOT,
Как мне сделать чтобы папки с плюсиками разварачивались?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 23 2005, 02:07 
Гость
Anonymous написал(а):
надо рекурсию использовать, как можо предусмотреть количество вложенных циклов


ну это понятно, но в большинстве случаев все же известно количество уровней


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 23 2005, 02:16 
Гость
rodendron написал(а):
А после того как я постоил дерево по примеру от EHOT,
Как мне сделать чтобы папки с плюсиками разварачивались?


в начале программы пишешь
set pf-status 'MAIN'.
и в него в "строку кнопок" добавляешь кнопки с кодами TREP (это для разворачивания) и TRCM (для сворачивания) ... если надо в каком-то уровне обрабатывать даблклик, то добавляешь TRSL ...
а в "присвоении кнопок" делаешь слияние функций списка ... (ну это для удобства)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 23 2005, 09:58 
Гость
EHOT написал(а):
rodendron написал(а):
А после того как я постоил дерево по примеру от EHOT,
Как мне сделать чтобы папки с плюсиками разварачивались?


в начале программы пишешь
set pf-status 'MAIN'.
и в него в "строку кнопок" добавляешь кнопки с кодами TREP (это для разворачивания) и TRCM (для сворачивания) ... если надо в каком-то уровне обрабатывать даблклик, то добавляешь TRSL ...
а в "присвоении кнопок" делаешь слияние функций списка ... (ну это для удобства)


Друг. спасибо, все работает.
Только можно опконкретнее про даблик.
Чего-то не обрабатывается двойной щелчок ((
Может надо еще чего-то прописывать в
Code:
CALLBACK_USER_COMMAND = 'имя формы для обработки всяких нажатий'


Я там написал USER_COMMAND (где-то так увидел)
Или чего еще может быть?


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 23 2005, 10:32 
Гость
Разобрался.
Надо было вместо PICK повесить TRSL.
А вот двойной щелчек по самому названию как обработать? (надо его редактировать просто)


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, мар 23 2005, 19:17 
Гость
В общем если конкретизировать, то в R3 есть программа стандартная Raimhier вроде или Raimher

у нас она вызывается транзакцией im22

Смысл такой, что в ней выводится дерево - в него можно добавлять и редактировать, но там все это только для одной выбранной позиции (ROOT)

А мне надо со всеми. Переписать заного прогу нереально вроде как я понял. А вот детали из нее придется брать. В том числе это редактирование и т.д.


Принять этот ответ
Вернуться к началу
  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB