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

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


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

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


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

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