Skip to Content
0
Sep 14, 2007 at 03:45 AM

hierarchy alv

32 Views

HI gurus,

I need to convert the data into hierarchy method. This is code.

Thanks

siva.

REPORT zsdr_arnl50 NO STANDARD PAGE HEADING.

************************************************************************

  • TABLES *

************************************************************************

TABLES: kna1,

adrc,

bsid,

vbpa,

knvk.

************************************************************************

  • Data Declaration *

************************************************************************

DATA: it_vbak LIKE vbak OCCURS 0 WITH HEADER LINE.

DATA: it_bsid LIKE bsid OCCURS 0 WITH HEADER LINE.

DATA: it_zvbak LIKE zvbak OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF it_head OCCURS 0,

addrnumber TYPE adrc-addrnumber,

kunnr TYPE kna1-kunnr,

name1 TYPE kna1-name1,

name2 TYPE adrc-name2,

END OF it_head.

DATA: BEGIN OF it_body OCCURS 0,

adrnr type vbpa-adrnr,

parnr TYPE vbpa-parnr,

name1 TYPE knvk-name1,

erdat TYPE vbak-erdat,

pspid TYPE zvbak-pspid,

outst TYPE c,

END OF it_body.

DATA: BEGIN OF it_kna1 OCCURS 0,

kunnr TYPE kna1-kunnr,

name1 TYPE kna1-name1,

adrnr TYPE kna1-adrnr,

END OF it_kna1.

DATA: BEGIN OF it_knvk OCCURS 0,

parnr TYPE knvk-parnr,

name1 TYPE knvk-name1,

erdat TYPE knvk-erdat,

END OF it_knvk.

DATA: BEGIN OF it_adrc OCCURS 0,

addrnumber TYPE adrc-addrnumber,

name2 TYPE adrc-name2,

END OF it_adrc.

DATA: BEGIN OF it_vbpa OCCURS 0,

parvw TYPE vbpa-parvw,

kunnr TYPE vbpa-kunnr,

parnr TYPE vbpa-parnr,

adrnr LIKE vbpa-adrnr,

END OF it_vbpa.

DATA: v_date1 LIKE bseg-zfbdt.

DATA: v_days(10) TYPE n.

DATA: amt(3) TYPE n.

************************************************************************

  • ALV Declaration

************************************************************************

TYPE-POOLS: slis.

DATA: v_repid LIKE sy-repid.

DATA : it_fieldcat TYPE slis_t_fieldcat_alv,

it_header TYPE slis_tabname,

it_item TYPE slis_tabname. " table to store item data

DATA : ty_fieldcat TYPE slis_fieldcat_alv, " field catalog type

ty_keyinfo TYPE slis_keyinfo_alv. " key information type

************************************************************************

  • Selection Screen

************************************************************************

SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-001.

SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-000.

SELECT-OPTIONS: c_no FOR kna1-kunnr OBLIGATORY. "Customer Number

SELECTION-SCREEN: END OF BLOCK b.

SELECTION-SCREEN: END OF BLOCK a.

*****************************************************************

  • TOP OF PAGE.

****************************************************************

*TOP-OF-PAGE.

*****************************************************************

  • Initialazation

*****************************************************************

v_repid = sy-repid.

it_header = 'IT_head'.

it_item = 'IT_body'.

CLEAR ty_keyinfo.

*ty_keyinfo-header01 = 'addrnumber'.

*ty_keyinfo-item01 = 'adrnr'.

*ty_keyinfo-header02 = space.

*ty_keyinfo-item02 = 'PARNR'.

*****************************************************************

  • Start-of-selection

*****************************************************************

START-OF-SELECTION.

PERFORM get_data.

PERFORM disp.

PERFORM field_catalog.

PERFORM output.

&----


*& Form get_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM get_data .

*************************Customer Number & Customer name*********************

SELECT kunnr name1 adrnr FROM kna1 INTO CORRESPONDING FIELDS OF TABLE it_kna1

WHERE kunnr IN c_no.

************************Customer Address************************************

SELECT addrnumber name2 FROM adrc INTO CORRESPONDING FIELDS OF TABLE it_adrc

FOR ALL ENTRIES IN it_kna1 WHERE addrnumber = it_kna1-adrnr.

***********************Contact ID*******************************************

SELECT parnr parvw kunnr adrnr FROM vbpa INTO CORRESPONDING FIELDS OF TABLE it_vbpa

FOR ALL ENTRIES IN it_adrc WHERE adrnr = it_adrc-addrnumber. " AND parvw = 'AP'.

***********************Contact Person***************************************

SELECT name1 parnr erdat FROM knvk INTO CORRESPONDING FIELDS OF TABLE it_knvk

FOR ALL ENTRIES IN it_vbpa WHERE parnr = it_vbpa-parnr.

************************Project ID *******************************

SELECT pspid kunnr FROM zvbak INTO CORRESPONDING FIELDS OF TABLE it_zvbak

FOR ALL ENTRIES IN it_kna1 WHERE kunnr = it_kna1-kunnr.

SELECT kunnr FROM bsid INTO CORRESPONDING FIELDS OF TABLE it_bsid

FOR ALL ENTRIES IN it_kna1 WHERE kunnr = it_kna1-kunnr..

ENDFORM. " get_data

&----


*& Form disp

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM disp .

LOOP AT it_kna1.

LOOP AT it_adrc WHERE addrnumber = it_kna1-adrnr.

it_head-kunnr = it_kna1-kunnr.

it_head-name1 = it_kna1-name1.

it_head-name2 = it_adrc-name2.

APPEND it_head.

LOOP AT it_vbpa WHERE adrnr = it_adrc-addrnumber.

LOOP AT it_knvk WHERE parnr = it_vbpa-parnr.

SELECT erdat kunnr FROM vbak INTO CORRESPONDING FIELDS OF TABLE it_vbak

FOR ALL ENTRIES IN it_knvk WHERE erdat = it_knvk-erdat.

SORT it_vbak BY erdat DESCENDING.

READ TABLE it_vbak INDEX 1.

IF sy-subrc = 0.

it_body-erdat = it_vbak-erdat.

ENDIF.

LOOP AT it_zvbak WHERE kunnr = it_kna1-kunnr.

LOOP AT it_bsid WHERE kunnr = it_kna1-kunnr.

CLEAR : v_date1, v_days.

CALL FUNCTION 'J_1A_SD_CI_DUEDATE_GET' "TO GET OVERDUE DATE

EXPORTING

iv_vbeln = it_bsid-vbeln

iv_zterm = it_bsid-zterm

IMPORTING

ev_netdate = v_date1

EXCEPTIONS

fi_document_not_found = 1

payment_terms_incomplete = 2

invoice_not_found = 3.

CALL FUNCTION 'DAYS_BETWEEN_TWO_DATES' " CALCULATING THE OUTSTANDING DAYS

EXPORTING

i_datum_bis = sy-datum

i_datum_von = v_date1

IMPORTING

e_tage = v_days

EXCEPTIONS

days_method_not_defined = 1

OTHERS = 2.

IF v_days >= 1 AND v_days <= 30.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 30 AND v_days <= 60.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 60 AND v_days <= 90.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 60 AND v_days <= 90.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 90 AND v_days <= 150.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 150 AND v_days <= 180.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 180 AND v_days <= 210.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 210 AND v_days <= 240.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 240 AND v_days <= 280.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 280 AND v_days <= 310.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 310 AND v_days <= 340.

MOVE it_bsid-dmbtr TO amt.

ELSEIF v_days > 340 AND v_days <= 365.

MOVE it_bsid-dmbtr TO amt.

ENDIF.

IF sy-subrc <> 0.

it_body-outst = 'O'.

ENDIF.

it_body-pspid = it_zvbak-pspid.

it_body-parnr = it_vbpa-parnr.

it_body-name1 = it_knvk-name1.

APPEND it_body.

ENDLOOP.

ENDLOOP.

ENDLOOP.

ENDLOOP.

ENDLOOP.

ENDLOOP.

ENDFORM. " disp

********************************************************************

*FORM FOR ALV LAYOUT STRUCTURE

********************************************************************

&----


*& Form FIELD_CATALOG

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM field_catalog .

ty_fieldcat-tabname = 'IT_HEAD'.

ty_fieldcat-fieldname = 'KUNNR'.

ty_fieldcat-seltext_l = 'CUSTOMER NO'.

ty_fieldcat-col_pos = 1.

ty_fieldcat-outputlen = 10.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ty_fieldcat-tabname = 'IT_HEAD'.

ty_fieldcat-fieldname = 'NAME1'.

ty_fieldcat-seltext_l = 'CUSTOMER NAME'.

ty_fieldcat-col_pos = 2.

ty_fieldcat-outputlen = 10.

ty_fieldcat-datatype = 'DATS'.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ty_fieldcat-tabname = 'IT_HEAD'.

ty_fieldcat-fieldname = 'NAME2'.

ty_fieldcat-seltext_l = 'CUSTOMER ADDRESS'.

ty_fieldcat-col_pos = 3.

ty_fieldcat-outputlen = 15.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ty_fieldcat-tabname = 'IT_BODY'.

ty_fieldcat-fieldname = 'PARNR'.

ty_fieldcat-seltext_l = 'CONTACT ID'.

ty_fieldcat-outputlen = 10.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ty_fieldcat-tabname = 'IT_BODY'.

ty_fieldcat-fieldname = 'NAME1'.

ty_fieldcat-seltext_l = 'CONTACT NAME'.

ty_fieldcat-outputlen = 10.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ty_fieldcat-tabname = 'IT_BODY'.

ty_fieldcat-fieldname = 'ERDAT'.

ty_fieldcat-seltext_l = 'LAST PURCHASE DATE'.

ty_fieldcat-outputlen = 10.

ty_fieldcat-datatype = 'SY-DATUM'.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ty_fieldcat-tabname = 'IT_BODY'.

ty_fieldcat-fieldname = 'PSPID'.

ty_fieldcat-seltext_l = 'PROJECT ID'.

ty_fieldcat-outputlen = 10.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ty_fieldcat-tabname = 'IT_BODY'.

ty_fieldcat-fieldname = 'OUTST'.

ty_fieldcat-seltext_l = 'UNITS'.

ty_fieldcat-outputlen = 3.

ty_fieldcat-datatype = 'CHAR'.

APPEND ty_fieldcat TO it_fieldcat.

CLEAR ty_fieldcat.

ENDFORM. " FIELD_CATALOG

&----


*& Form OUTPUT

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM output .

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING

  • I_INTERFACE_CHECK = ' '

i_callback_program = v_repid

  • I_CALLBACK_PF_STATUS_SET = ' '

  • I_CALLBACK_USER_COMMAND = ' '

  • IS_LAYOUT =

it_fieldcat = it_fieldcat

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_DEFAULT = 'X'

  • I_SAVE = ' '

  • IS_VARIANT =

  • IT_EVENTS =

  • IT_EVENT_EXIT =

i_tabname_header = it_header

i_tabname_item = it_item

  • I_STRUCTURE_NAME_HEADER =

  • I_STRUCTURE_NAME_ITEM =

is_keyinfo = ty_keyinfo

  • IS_PRINT =

  • IS_REPREP_ID =

  • I_BYPASSING_BUFFER =

  • I_BUFFER_ACTIVE =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

TABLES

t_outtab_header = it_head

t_outtab_item = it_body

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. "OUTPUT