Всем доброго.
Пытаюсь научиться писать на ABAP отчеты. Пишу всего пару дней, поэтому прошу не бить и не закидывать...
Хочу написать отчет, который бы проверял пользователей систем САП на признак "Уволен" Переведен и т.д. в HR. Цель: Проверять системы на отсутствие пользователей, которые не работают в компании.
Так вот что у меня получилось:
Code:
TABLES PA0298.
TABLES PA0002.
TABLES ADRP.
TABLES USR21.
TABLES USR02.
TABLES T529T.
PARAMETERS:
P_MASSN LIKE PA0298-MASSN.
SELECT-OPTIONS DateENT FOR PA0298-AEDTM.
DATA: LN(40) VALUE 'Фамилия', FN(40) VALUE 'Имя',PERN(8) VALUE 'Таб №', LogPer(12) VALUE 'Пользователь', LockSt(6) VALUE 'Статус'.
*===============================================================
*Выборка из таблиц HR системы
*WRITE / 'Пользователи из системы HR '.
*-------------------
* Структура
*TYPES: BEGIN OF ADRPTABLE.
* TYPES: NAME_LAST TYPE ADRP-NAME_LAST.
* TYPES: NAME_FIRST TYPE ADRP-NAME_FIRST.
*TYPES: PERNR TYPE PA0002-PERNR.
*TYPES: BNAME TYPE USR21-BNAME.
*TYPES: END OF ADRPTABLE.
*DATA: BEGIN OF ADRPTABLE OCCURS 0,
* NAME_LAST TYPE ADRP-NAME_LAST,
* NAME_FIRST TYPE ADRP-NAME_FIRST,
* PERNR TYPE PA0002-PERNR,
* BNAME TYPE USR21-BNAME,
* UFLAG Type USR02-UFLAG,
*END OF ADRPTABLE.
*-------------------
*DATA: T_ALLTABLERESULT TYPE TABLE OF ADRP.
*
*DATA: R_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
* R_GRID TYPE REF TO CL_GUI_ALV_GRID.
*-------------------
DATA srch_str(20) TYPE C.
DATA MSM_T529T LIKE T529T OCCURS 10 WITH HEADER LINE.
SELECT * FROM T529T INTO TABLE MSM_T529T WHERE MASSN = P_MASSN AND SPRSL = 'R'.
DATA: All_HUMAN LIKE PA0002 OCCURS 100 WITH HEADER LINE,
ALL_PERNUM LIKE PA0298 OCCURS 100 WITH HEADER LINE.
DATA: All_HUMANSAPADRP LIKE ADRP OCCURS 100 WITH HEADER LINE,
ALL_PERNUMSAPUSR21 LIKE USR21 OCCURS 100 WITH HEADER LINE.
DATA: UFLAGUSR02 LIKE USR02 OCCURS 100 WITH HEADER LINE.
SELECT * FROM PA0002 INTO TABLE ALL_HUMAN.
SELECT * FROM PA0298 INTO TABLE ALL_PERNUM
FOR ALL ENTRIES IN ALL_HUMAN
WHERE PERNR = ALL_HUMAN-PERNR
AND MASSN = P_MASSN AND AEDTM IN DateENT.
LOOP AT ALL_HUMAN.
LOOP AT ALL_PERNUM
WHERE PERNR = ALL_HUMAN-PERNR.
srch_str = ALL_HUMAN-VORNA.
CONCATENATE srch_str '%' INTO srch_str.
* WRITE: / ALL_HUMAN-NACHN,ALL_HUMAN-VORNA,ALL_HUMAN-MIDNM.
SELECT * FROM ADRP INTO TABLE All_HUMANSAPADRP WHERE NAME_LAST = ALL_HUMAN-NACHN AND NAME_FIRST LIKE srch_str.
SELECT * FROM USR21 INTO TABLE ALL_PERNUMSAPUSR21
FOR ALL ENTRIES IN All_HUMANSAPADRP
WHERE PERSNUMBER = All_HUMANSAPADRP-PERSNUMBER.
LOOP AT All_HUMANSAPADRP.
LOOP AT ALL_PERNUMSAPUSR21
WHERE PERSNUMBER = All_HUMANSAPADRP-PERSNUMBER.
SELECT * FROM USR02 INTO TABLE UFLAGUSR02 WHERE BNAME = ALL_PERNUMSAPUSR21-BNAME.
LOOP AT UFLAGUSR02.
IF UFLAGUSR02-UFLAG = 0.
WRITE: / All_HUMANSAPADRP-NAME_LAST COLOR COL_HEADING, All_HUMANSAPADRP-NAME_FIRST COLOR COL_KEY, ALL_HUMAN-PERNR COLOR COL_POSITIVE, ALL_PERNUMSAPUSR21-BNAME COLOR COL_TOTAL,UFLAGUSR02-UFLAG COLOR COL_HEADING.
ELSE.
WRITE: / All_HUMANSAPADRP-NAME_LAST COLOR COL_HEADING, All_HUMANSAPADRP-NAME_FIRST COLOR COL_KEY, ALL_HUMAN-PERNR COLOR COL_POSITIVE, ALL_PERNUMSAPUSR21-BNAME COLOR COL_TOTAL,UFLAGUSR02-UFLAG COLOR COL_KEY.
ENDIF.
* ADRPTABLE-NAME_LAST = All_HUMANSAPADRP-NAME_LAST.
* ADRPTABLE-NAME_FIRST = All_HUMANSAPADRP-NAME_FIRST.
* ADRPTABLE-PERNR = ALL_HUMAN-PERNR.
* ADRPTABLE-BNAME = ALL_PERNUMSAPUSR21-BNAME.
* ADRPTABLE-UFLAG = UFLAGUSR02-UFLAG.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
ENDLOOP.
*CALL SCREEN 100.
TOP-OF-PAGE.
LOOP AT MSM_T529T.
WRITE: / 'Список пользователей SAP, проведенных в HR по мероприятию: ', MSM_T529T-MNTXT.
ENDLOOP.
WRITE: / LN COLOR COL_HEADING,FN COLOR COL_KEY,PERN COLOR COL_POSITIVE,LogPer COLOR COL_TOTAL,LockSt COLOR COL_KEY.
Вроде все выполняет как надо (Ну так я думаю), вот теперь как мне отобразить это
Code:
WRITE: / All_HUMANSAPADRP-NAME_LAST COLOR COL_HEADING, All_HUMANSAPADRP-NAME_FIRST COLOR COL_KEY, ALL_HUMAN-PERNR COLOR COL_POSITIVE, ALL_PERNUMSAPUSR21-BNAME COLOR COL_TOTAL,UFLAGUSR02-UFLAG COLOR COL_KEY.
в ALV GRID. Я совершенно не понимаю как работать с этим контролом.
Посмотрел множество вариантов на форуме, но истина где то рядом.... Не могу понять как привязать данные.
Пытался засунуть все в список (структуру), но дальше как ?
Вот моя структура
Code:
DATA: BEGIN OF ADRPTABLE OCCURS 0,
NAME_LAST TYPE ADRP-NAME_LAST,
NAME_FIRST TYPE ADRP-NAME_FIRST,
PERNR TYPE PA0002-PERNR,
BNAME TYPE USR21-BNAME,
UFLAG Type USR02-UFLAG,
END OF ADRPTABLE.
*-------------------
вернее внутренняя таблица наверное.
А вот ее я запоняю
Code:
ADRPTABLE-NAME_LAST = All_HUMANSAPADRP-NAME_LAST.
ADRPTABLE-NAME_FIRST = All_HUMANSAPADRP-NAME_FIRST.
ADRPTABLE-PERNR = ALL_HUMAN-PERNR.
ADRPTABLE-BNAME = ALL_PERNUMSAPUSR21-BNAME.
ADRPTABLE-UFLAG = UFLAGUSR02-UFLAG.
Знаю, что есть неверное представление, но если поможете направлением, еще более примером, буууду просто рад и благодарен.