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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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