Текущее время: Пн, авг 04 2025, 10:48

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Иерархические признаки
СообщениеДобавлено: Ср, апр 02 2008, 14:38 
Специалист
Специалист

Зарегистрирован:
Ср, дек 27 2006, 19:19
Сообщения: 230
Подскажите пожалуйста, как выбирать иерархические признаки

Обычные одноуровневые выбираются обычно через select
Code:
* Выбираем признак PM_001 (одно значение)
  SELECT SINGLE
      cawn~atwrt
    FROM
      cabn
      JOIN cawn ON ( cabn~atinn = cawn~atinn )
    INTO
      cawn-atwrt
    WHERE
      ( cabn~atnam = 'PM_001' ).
* Если несколько значений - в таблицу


А как это будет для иерархического признака (создал с пом CT04 двухуровневый признак)
Подскажите, может ФМ есть какой?

Заранее спасибо.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, апр 03 2008, 13:51 
Специалист
Специалист

Зарегистрирован:
Ср, дек 27 2006, 19:19
Сообщения: 230
Уже решил, может кому этот примерчик пригодится:
Code:
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Report  ZTEST7
*&---------------------------------------------------------------------*
*& Иерархический признак
*&---------------------------------------------------------------------*
REPORT  ZTEST7.

DATA:
  atinn TYPE cabn-atinn,
  atzhl TYPE cawn-atzhl,
  BEGIN OF it_tab OCCURS 0,
    atwrt TYPE cawn-atwrt,
  END OF it_tab.

*break 001239.

CLEAR atinn.
SELECT SINGLE
    cabn~atinn
  FROM
    cabn
  INTO
    atinn " Код признака
  WHERE
    ( cabn~atnam = 'PM_023' ).  " Признак

* Находим корневую запись
CLEAR atzhl.
SELECT SINGLE
    cawn~atzhl
  FROM
    cawn
  INTO
    atzhl " Индекс записи
  WHERE
    ( cawn~atinn = atinn ) AND      " Код признака
    ( cawn~atwrt = 'PA' ) AND       " Подпризнак
    ( cawn~atzhh = 0 ).             " Ссылка на вышестоящий (в данном случае Root)

* Выбираем значения из ссылающихся на нее записей
REFRESH it_tab.
SELECT
    cawn~atwrt
  FROM
    cawn
  INTO TABLE
    it_tab
  WHERE
    ( cawn~atinn = atinn ) AND   " Код признака
    ( cawn~atzhh = atzhl ).

LOOP AT it_tab.
  WRITE / it_tab-atwrt.
ENDLOOP.
ULINE.


* Все то же самое но одним селектом
REFRESH it_tab.
SELECT
    cawn2~atwrt
  FROM
    cabn
    JOIN cawn          ON ( cabn~atinn = cawn~atinn  )
    JOIN cawn as cawn2 ON ( cawn~atinn = cawn2~atinn  ) AND
                          ( cawn~atzhl = cawn2~atzhh )
  INTO TABLE
    it_tab
  WHERE
    ( cabn~atnam = 'PM_023' ) AND   " Код признака
    ( cawn~atzhh = 0 ) AND          " Ссылки на вышестоящий (в данном случае Root)
    ( cawn~atwrt = 'PA' ).

LOOP AT it_tab.
  WRITE / it_tab-atwrt.
ENDLOOP.
ULINE.

* ФМ для доставания признаков:
*CALL FUNCTION 'CLAF_CLASSIFICATION_OF_OBJECTS'.
*CALL FUNCTION 'CLFM_SELECT_AUSP'.
*CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'.


Последний раз редактировалось organmusic Ср, апр 23 2008, 17:21, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, апр 07 2008, 09:47 
Специалист
Специалист

Зарегистрирован:
Ср, дек 27 2006, 19:19
Сообщения: 230
И еще уточнение - система требует чтобы значение признаков было уникально (независимо от положения в иерархии)
Так что такая иерархия признаков
Code:
PA
  T001
  T002
PL
  T002
  T003

не получится (дублируется значение T002)

Пришлось сделать составные значения признаков
Code:
PA
  T001-PA
  T002-PA
PL
  T002-PL
  T003-PL



Вообще для развязки, достаточно дополнять хвостовиком только совпадающие значения признаков. А при выборке значений признака можно брать только первые (значащие, в данном случае 4) символа.
тогда пример будет выглядеть так
Code:
PA
  T001
  T002-PA
PL
  T002-PL
  T003

и все будет OK


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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


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

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


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

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