HI,
Thanks Ivan, I use the same concept here.
To Describe it in Real world example I have One Program to clear "At END".
To count GRN in respect to gate entery first it depands on exise than on challan
and at last it depend on PO number.
REPORT PROGRAM
REPORT ZMM_GRN_DOC_PRINT.
********************************
* STRUCTURES *
********************************
TYPES : BEGIN OF ty_head,
genum TYPE zgenum1,
crdat TYPE erdat,
crzet TYPE zrzet,
dname TYPE zdname,
truck TYPE ztruck,
END OF ty_head,
BEGIN OF ty_makt,
matnr TYPE matnr,
maktx TYPE maktx,
END OF ty_makt,
BEGIN OF ty_marm,
matnr TYPE matnr,
meinh TYPE meinh,
END OF ty_marm,
BEGIN OF ty_ekko,
ebeln TYPE ebeln,
aedat TYPE aedat,
END OF ty_ekko ,
BEGIN OF ty_final,
* exinv TYPE j_1irdoc1,
chlno TYPE zchalno,
ebeln TYPE ebeln,
exinv TYPE j_1irdoc1,
matnr TYPE matnr,
chmen TYPE zchmen,
invno TYPE vbeln_vf,
ebelp TYPE ebelp,
exstu TYPE zexstu,
remge TYPE zremge,
maktx TYPE maktx,
meinh TYPE meinh,
aedat TYPE aedat,
sr_no type sy-tabix,
wbill type zwbill,
chldt type zchldt,
END OF ty_final.
********************************
* WORK AREA *
********************************
DATA : wa_head TYPE zmm_head_ge,
it_makt TYPE STANDARD TABLE OF ty_makt,
wa_makt TYPE ty_makt,
it_marm TYPE STANDARD TABLE OF ty_marm,
wa_marm TYPE ty_marm,
it_ekko TYPE STANDARD TABLE OF ty_ekko,
wa_ekko TYPE ty_ekko,
it_item TYPE STANDARD TABLE OF zgate_item with header line,
wa_item TYPE zgate_item ,
it_final TYPE STANDARD TABLE OF ty_final with header line,
wa_final TYPE ty_final ,
it_final1 type STANDARD TABLE of zmm_item_ge with header line,
wa_final1 type zmm_item_ge,
* it_final1 type standard table of ty_final1 with header line,
* wa_final1 type ty_final1,
lv_adr1 TYPE zadr1,
lv_adr2 TYPE zadr1,
lv_adr3 TYPE zadr1,
gv_fm_name TYPE rs38l_fnam.
********************************
* SELECTION-SCREEN *
********************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS : p_gate TYPE zgenum1 OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b1.
START-OF-SELECTION .
PERFORM fetch_data.
PERFORM display_data.
*&---------------------------------------------------------------------*
*& Form FETCH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM fetch_data .
************ HEADER LEVEL DATA
SELECT SINGLE genum
crdat
crzet
dname
truck
gesid
FROM zgate_head
INTO wa_head
WHERE genum EQ p_gate .
IF sy-subrc EQ 0.
SELECT SINGLE adr1
adr2
adr1 INTO (lv_adr1,
lv_adr2,
lv_adr3)
FROM zsys_res
WHERE zsysipadd = wa_head-gesid .
************ ITEM LEVEL DATA
SELECT * FROM zgate_item
INTO TABLE it_item
WHERE genum EQ p_gate .
IF sy-subrc EQ 0.
************ MATERIAL DESCRIPTION
SELECT matnr maktx FROM makt
INTO TABLE it_makt
FOR ALL ENTRIES IN it_item
WHERE matnr EQ it_item-matnr .
************ UOM ON THE BASIS OF MATERIAL
SELECT matnr meinh FROM marm
INTO TABLE it_marm
FOR ALL ENTRIES IN it_item
WHERE matnr EQ it_item-matnr .
*********** DATE FROM EKKO
SELECT ebeln aedat FROM ekko
INTO TABLE it_ekko
FOR ALL ENTRIES IN it_item
WHERE ebeln EQ it_item-ebeln .
********** EXTRACT DATA FROM ALL TABLES AND PUT INTO A SINGLE TABLE
LOOP AT it_item INTO wa_item.
wa_final-sr_no = sy-tabix .
MOVE-CORRESPONDING wa_item TO wa_final.
READ TABLE it_makt INTO wa_makt WITH KEY matnr = wa_item-matnr .
IF sy-subrc EQ 0.
wa_final-maktx = wa_makt-maktx.
ENDIF.
READ TABLE it_marm INTO wa_marm WITH KEY matnr = wa_item-matnr.
IF sy-subrc EQ 0.
wa_final-meinh = wa_marm-meinh.
ENDIF.
READ TABLE it_ekko INTO wa_ekko WITH KEY ebeln = wa_item-ebeln .
IF sy-subrc EQ 0.
wa_final-aedat = wa_ekko-aedat.
ENDIF.
APPEND wa_final TO it_final.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " FETCH_DATA
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_data .
data: control type ssfctrlop,
ls_output TYPE ssfcompop,
ls_param type SSFCTRLOP.
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
formname = 'ZMM_GRN_DOC_PRINT'
* VARIANT = ' '
* DIRECT_CALL = ' '
IMPORTING
FM_NAME = GV_FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3
.
if sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF.
control-no_dialog = 'X'.
control-preview = 'X'.
control-no_open = 'X'.
control-no_close = 'X'.
* ls_out_control-TDNOPREV = 'X'.
* ls_out_control-TDIEXIT = 'X'.
* ls_out_control-TDIMMED = 'X'.
* ls_out_control-TDNEWID = 'X'.
* ls_param-NO_DIALOG = 'X'.
CALL FUNCTION 'SSF_OPEN'
EXPORTING
* ARCHIVE_PARAMETERS =
* USER_SETTINGS = 'X'
* MAIL_SENDER =
* MAIL_RECIPIENT =
* MAIL_APPL_OBJ =
* OUTPUT_OPTIONS =
CONTROL_PARAMETERS = CONTROL
* IMPORTING
* JOB_OUTPUT_OPTIONS =
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
LOOP AT IT_FINAL.
MOVE-CORRESPONDING IT_FINAL TO IT_FINAL1.
APPEND IT_FINAL1.
* AT END OF : ebeln, chlno , exinv.
AT END OF : exinv, chlno , ebeln.
* CALL FUNCTION '/1BCDWB/SF00000268'
CALL FUNCTION GV_FM_NAME
EXPORTING
CONTROL_PARAMETERS = CONTROL
OUTPUT_OPTIONS = ls_output
wa_head = wa_head
lv_adr1 = lv_adr1
lv_adr2 = lv_adr2
lv_adr3 = lv_adr3
TABLES
it_final = it_final1[]
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
ENDIF.
REFRESH IT_FINAL1."
ENDAT.
ENDAT.
ENDAT.
ENDLOOP.
***********************************JHA******
* LOOP AT IT_FINAL.
* MOVE-CORRESPONDING IT_FINAL TO IT_FINAL1.
* APPEND IT_FINAL1.
*
* AT END OF ebeln.", chlno , ebelp.
*
**AT END OF chlno.
** CALL FUNCTION '/1BCDWB/SF00000268'
* CALL FUNCTION GV_FM_NAME
* EXPORTING
* CONTROL_PARAMETERS = CONTROL
* OUTPUT_OPTIONS = ls_output
* wa_head = wa_head
* lv_adr1 = lv_adr1
* lv_adr2 = lv_adr2
* lv_adr3 = lv_adr3
* TABLES
* it_final = it_final1[]
*
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* USER_CANCELED = 4
* OTHERS = 5
* .
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .
* ENDIF.
*
* REFRESH IT_FINAL1."
*
*
**ENDAT.
** ENDAT.
******************
CALL FUNCTION 'SSF_CLOSE'
* IMPORTING
* JOB_OUTPUT_INFO =
* EXCEPTIONS
* FORMATTING_ERROR = 1
* INTERNAL_ERROR = 2
* SEND_ERROR = 3
* OTHERS = 4
.
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.
Here I use the method of Ivan
Best
Abhijeet Kankani