You are on page 1of 11

*&---------------------------------------------------------------------*

*& Report ZMEF_ALV_EXERCISE_FINAL


*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zmef_alv_exercise_final.
TYPE-POOLS: slis.
TABLES: vbak,likp,lips.
TYPES : BEGIN OF ty_salesorder,
wbstk
TYPE vbuk-wbstk,
vbeln
TYPE vbap-vbeln,
posnr
TYPE vbap-posnr,
auart
TYPE vbak-auart,
kwmeng
TYPE vbap-kwmeng,
vgbel
TYPE vbap-vgbel,
vgpos
TYPE vbap-vgpos,
END OF ty_salesorder,
BEGIN OF ty_del,
vbeln
TYPE
posnr
TYPE
lfdat
TYPE
vstel
TYPE
kunnr
TYPE
wadat_ist TYPE
lfimg
TYPE
meins
TYPE
vgbel
TYPE
vgpos
TYPE
END OF ty_del,

likp-vbeln,
lips-posnr,
likp-lfdat,
likp-vstel,
likp-kunnr,
likp-wadat_ist,
lips-lfimg,
lips-meins,
lips-vgbel,
lips-vgpos,

BEGIN OF ty_delivery, "folosit la afisare


vbeln_d
TYPE likp-vbeln,"Delivery
posnr_d
TYPE lips-posnr,"Delivery Item
lfdat
TYPE likp-lfdat,"Delivery date
vstel
TYPE likp-vstel,"Shipping point
kunnr
TYPE likp-kunnr,"Ship to party
wadat_ist TYPE likp-wadat_ist,"Actual Goods Mov.Date
wbstk
TYPE vbuk-wbstk, "Total goods mov status
lfimg
TYPE lips-lfimg,"Quantity
meins
TYPE lips-meins, "om
vbeln
TYPE vbak-vbeln,"Sales order
posnr
TYPE vbap-posnr,"Sales order item
auart
TYPE vbak-auart,"Sales order type
kwmeng
TYPE vbap-kwmeng,"Sales order qty
vgbel
TYPE lips-vgbel,
vgpos
TYPE lips-vgpos,
END OF ty_delivery.
TYPES: tty_delivery TYPE STANDARD TABLE OF ty_delivery,
tty_del
TYPE STANDARD TABLE OF ty_del,
tty_salesorder TYPE STANDARD TABLE OF ty_salesorder.
DATA: gt_delivery
gt_del

TYPE tty_delivery,
TYPE tty_del,

gt_salesorder TYPE tty_salesorder,


ct_delivery
TYPE tty_delivery.
DATA: gv_repid
gv_sum
gt_fieldcat
g_variant
gx_variant
g_save
g_exit

TYPE sy-repid,
TYPE lips-lfimg,
TYPE slis_t_fieldcat_alv,
TYPE disvariant,
TYPE disvariant,
TYPE c VALUE 'X',
TYPE c.

*PARAMETERS: p_var LIKE disvariant-variant.


SELECTION-SCREEN BEGIN OF BLOCK block1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: so_vbeln FOR likp-vbeln,
so_lfdat FOR likp-lfdat,
so_lfart FOR likp-lfart,
so_vstel FOR likp-vstel,
so_kunnr FOR likp-kunnr.
SELECTION-SCREEN END OF BLOCK block1.
SELECTION-SCREEN BEGIN OF BLOCK block2 WITH FRAME TITLE text-002.
PARAMETERS: p_vstel TYPE c AS CHECKBOX DEFAULT 'X',
p_lfdat TYPE c AS CHECKBOX DEFAULT 'X',
p_dv
TYPE c AS CHECKBOX DEFAULT 'X',
p_var TYPE disvariant-variant.
SELECTION-SCREEN END OF BLOCK block2.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_var.
g_variant-report = sy-repid.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = g_variant
i_save
= g_save
IMPORTING
e_exit
= g_exit
es_variant = gx_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S'
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF g_exit = space.
p_var = gx_variant-variant.
ENDIF.
ENDIF.
START-OF-SELECTION.

*** Pas 1 selectare date ;livrare


PERFORM select_delivery CHANGING gt_del.
*** Pas 2 Selectare date ordin pentru livrarile din gt_del
PERFORM select_salesorder USING gt_del
CHANGING gt_salesorder.
*** Pas 3 Prelucrare date in tabela gt_delivery
PERFORM prelucrare_date USING
gt_del
gt_salesorder
CHANGING gt_delivery.
IF NOT gt_delivery IS INITIAL.
PERFORM display.
ELSE.
"mesaj nu avem date de afisat.
ENDIF.

*&---------------------------------------------------------------------*
*&
Form catalog
*&---------------------------------------------------------------------*
FORM catalog.
DATA: ls_fieldcat

TYPE slis_fieldcat_alv.

ls_fieldcat-fieldname = 'VBELN_D'.
ls_fieldcat-tabname = 'GT_DELIVERY'.
ls_fieldcat-seltext_m = 'DELIVERY '.
ls_fieldcat-emphasize = 'C111'.
ls_fieldcat-fix_column = 'X'.
APPEND ls_fieldcat TO gt_fieldcat.
CLEAR ls_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'POSNR_D'.
'GT_DELIVERY'.
= 'DELIVERY ITEM'.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'LFDAT'.
'GT_DELIVERY'.
= 'DELIVERY DATE '.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'VSTEL'.
'GT_DELIVERY'.
= 'SHIPPING POINT'.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'KUNNR'.
'GT_DELIVERY'.
= ' SHIP-TO PARTY '.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'WADAT_IST'.
'GT_DELIVERY'.
= 'ACTUAL GOODS MOVEMENT DATE '.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'WBSTK'.
'GT_DELIVERY'.
= '
TOTAL GOODS MOVEMENT STATUS '.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
ls_fieldcat-do_sum
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'LFIMG'.
'GT_DELIVERY'.
= 'QUANTITY'.
= 'X'.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'MEINS'.
'GT_DELIVERY'.
= 'UoM'.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'VBELN'.
'GT_DELIVERY'.
= 'SALES ORDER'.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'POSNR'.
'GT_DELIVERY'.
= '
SALES ORDER ITEM '.
gt_fieldcat.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.

= 'AUART'.
'GT_DELIVERY'.
= '
SALES ORDER TYPE
gt_fieldcat.

'.

ls_fieldcat-fieldname
ls_fieldcat-tabname =
ls_fieldcat-seltext_m
APPEND ls_fieldcat TO
CLEAR ls_fieldcat.
ENDFORM.

= 'KWMENG'.
'GT_DELIVERY'.
= ' SALES ORDER QUANTITY
gt_fieldcat.

'.

"catalog

*&---------------------------------------------------------------------*
*&
Form handle_user_command
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->R_UCOMM
text
*
-->RS_SELFIELD text
*----------------------------------------------------------------------*
* LOOP AT gt_fieldcat INTO gs_fieldcat .
*
IF ls_fieldcat-fieldname = 'VBELN'.
*
ls_fieldcat-hotspot = 'X'.
*
MODIFY gt_fieldcat FROM ls_fieldcat.
*
ENDIF.
* ENDLOOP.
FORM usercommand USING r_ucomm

TYPE sy-ucomm
rs_selfield TYPE slis_selfield.

CASE r_ucomm.
WHEN '&IC1'.

CASE rs_selfield-fieldname.
WHEN 'VBELN'.
SET PARAMETER ID 'VBE' FIELD rs_selfield-value.
SET parameter id 'WRK' field '0001'.
CALL TRANSACTION 'VL03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.

ENDFORM.

"handle_user_command

*&---------------------------------------------------------------------*
*&
Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM top_of_page.
DATA: lt_header TYPE slis_t_listheader,
wa_header
TYPE slis_listheader,
lt_line
TYPE slis_entry,

ld_lines
TYPE i,
ld_linesc(10) TYPE c,
lv_sum_c
TYPE char17.
wa_header-typ = 'H'.
wa_header-info = 'DELIVERY Table Report'.
APPEND wa_header TO lt_header.
CLEAR wa_header.
wa_header-typ = 'S'.
wa_header-key = 'Date: '.
CONCATENATE sy-datum+6(2) '.'
sy-datum+4(2) '.'
sy-datum(4) INTO wa_header-info.
APPEND wa_header TO lt_header.
CLEAR: wa_header.
* Total No. of Records Selected
DESCRIBE TABLE gt_delivery LINES ld_lines.
ld_linesc = ld_lines.
CONCATENATE 'Total No. of Records Selected: ' ld_linesc
INTO lt_line SEPARATED BY space.
wa_header-typ = 'A'.
wa_header-info = lt_line.
APPEND wa_header TO lt_header.
CLEAR: wa_header, lt_line.
WRITE gv_sum TO lv_sum_c.
CONCATENATE 'Total Quantity ' lv_sum_c
INTO lt_line SEPARATED BY space.
wa_header-typ = 'A'.
wa_header-info = lt_line.
APPEND wa_header TO lt_header.
CLEAR: wa_header, lt_line.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = lt_header.
ENDFORM.

"TOP_OF_PAGE

*&---------------------------------------------------------------------*
*&
Form display
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM display .
DATA:

ls_sort
TYPE slis_sortinfo_alv,
lt_sort
TYPE slis_t_sortinfo_alv,
ls_layout TYPE slis_layout_alv.

gv_repid = sy-repid.
g_variant-variant = p_var.
ls_layout-colwidth_optimize = 'X'.
ls_layout-zebra = 'X'.

PERFORM catalog.
REFRESH lt_sort.
IF p_lfdat = 'X'.
CLEAR ls_sort.
ls_sort-fieldname = 'VSTEL'.
ls_sort-spos = '1'.
ls_sort-up = 'X'.
APPEND ls_sort TO lt_sort.
ENDIF.
IF p_lfdat = 'X'.
CLEAR ls_sort.
ls_sort-fieldname = 'LFDAT'.
ls_sort-spos = '2'.
ls_sort-up = 'X'.
APPEND ls_sort TO lt_sort.
ENDIF.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'


EXPORTING
i_callback_program
= gv_repid
*
I_CALLBACK_PF_STATUS_SET
= ' '
i_callback_user_command
= 'USERCOMMAND'
i_callback_top_of_page
= 'TOP_OF_PAGE'
is_layout
= ls_layout
it_fieldcat
= gt_fieldcat
it_sort
= lt_sort
i_default
= 'X'
i_save
= 'A'
is_variant
= g_variant
TABLES
t_outtab
= gt_delivery
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.

"display

"DISPLAY_ALV
*&---------------------------------------------------------------------*
*&
Form SELECT_DELIVERY
*&---------------------------------------------------------------------*
FORM select_delivery CHANGING ct_del TYPE tty_del.

TYPES: BEGIN OF ty_likp,


vbeln
TYPE
lfdat
TYPE
vstel
TYPE
kunnr
TYPE
wadat_ist TYPE
END OF ty_likp,
BEGIN OF ty_lips,
vbeln
TYPE
posnr
TYPE
lfimg
TYPE
meins
TYPE
vgbel
TYPE
vgpos
TYPE
END OF ty_lips.

likp-vbeln,
likp-lfdat,
likp-vstel,
likp-kunnr,
likp-wadat_ist,

DATA: lt_likp
ls_likp
lt_lips
ls_lips
ls_del

TYPE
TYPE
TYPE
TYPE
TYPE

lips-vbeln,
lips-posnr,
lips-lfimg,
lips-meins,
lips-vgbel,
lips-vgpos,

STANDARD TABLE OF ty_likp,


ty_likp,
STANDARD TABLE OF ty_lips,
ty_lips,
ty_del.

*** selectie date de header ale livrarilor


REFRESH lt_likp.
SELECT vbeln lfdat vstel kunnr wadat_ist
INTO CORRESPONDING FIELDS OF TABLE lt_likp
FROM likp
WHERE vbeln IN so_vbeln
AND lfdat IN so_lfdat
AND lfart IN so_lfart
AND vstel IN so_vstel
AND kunnr IN so_kunnr.
SORT lt_likp BY vbeln. "obligatorio pt read cu binary search
IF NOT lt_likp IS INITIAL. "If sy-subrc = 0
SELECT vbeln posnr lfimg meins vgbel vgpos
INTO CORRESPONDING FIELDS OF TABLE lt_lips
FROM lips
FOR ALL ENTRIES IN lt_likp
WHERE vbeln = lt_likp-vbeln.
ENDIF.
REFRESH ct_del.
LOOP AT lt_lips INTO ls_lips.
CLEAR ls_del. "structura cu info de livrari
CLEAR ls_likp.
READ TABLE lt_likp
WITH KEY vbeln =
BINARY SEARCH.
IF sy-subrc = 0.
ls_del-vbeln
ls_del-lfdat
ls_del-vstel
ls_del-kunnr
ls_del-wadat_ist

INTO ls_likp
ls_lips-vbeln
=
=
=
=
=

ls_likp-vbeln.
ls_likp-lfdat.
ls_likp-vstel.
ls_likp-kunnr.
ls_likp-wadat_ist.

ENDIF.
ls_del-posnr = ls_lips-posnr.
ls_del-lfimg = ls_lips-lfimg.
ls_del-meins = ls_lips-meins.
ls_del-vgbel = ls_lips-vgbel.
ls_del-vgpos = ls_lips-vgpos.
APPEND ls_del TO ct_del.
ENDLOOP.
SORT ct_del BY vbeln posnr.
ENDFORM.
" SELECT_DELIVERY
*&---------------------------------------------------------------------*
*&
Form SELECT_SALESORDER
*&---------------------------------------------------------------------*
FORM select_salesorder USING
ut_del
TYPE tty_del
CHANGING ct_salesorder TYPE tty_salesorder.
TYPES: BEGIN OF ty_vbak,
vbeln TYPE vbak-vbeln,
auart TYPE vbak-auart,
END OF ty_vbak,
BEGIN OF ty_vbap,
vbeln TYPE vbap-vbeln,
posnr TYPE vbap-posnr,
kwmeng TYPE vbap-kwmeng,
vgbel TYPE vbap-vgbel,
vgpos TYPE vbap-vgpos,
END OF ty_vbap.
DATA:

lt_vbak TYPE STANDARD TABLE OF ty_vbak,


ls_vbak TYPE ty_vbak,
lt_vbap TYPE STANDARD TABLE OF ty_vbap,
ls_vbap TYPE ty_vbap,
ls_salesorder TYPE ty_salesorder.

IF NOT ut_del IS INITIAL.


SELECT vbeln posnr kwmeng
INTO CORRESPONDING FIELDS OF TABLE lt_vbap
FROM vbap
FOR ALL ENTRIES IN ut_del
WHERE vbeln = ut_del-vgbel
AND posnr = ut_del-vgpos.
SORT lt_vbak BY vbeln.
IF sy-subrc = 0.
SELECT vbeln auart
INTO CORRESPONDING FIELDS OF TABLE lt_vbak
FROM vbak
FOR ALL ENTRIES IN lt_vbap
WHERE vbeln = lt_vbap-vbeln.
ENDIF.
ENDIF.

REFRESH ct_salesorder.
LOOP AT lt_vbap INTO ls_vbap.
CLEAR ls_salesorder. "structura cu informatii de order
CLEAR ls_vbak.
READ TABLE lt_vbak INTO ls_vbak
WITH KEY vbeln = ls_vbap-vbeln
BINARY SEARCH.
IF sy-subrc = 0.
ls_salesorder-auart = ls_vbak-auart.
ENDIF.
ls_salesorder-vbeln = ls_vbap-vbeln.
ls_salesorder-posnr = ls_vbap-posnr.
ls_salesorder-kwmeng = ls_vbap-kwmeng.
APPEND ls_salesorder TO ct_salesorder.
ENDLOOP.
ENDFORM.
" SELECT_SALESORDAR
*&---------------------------------------------------------------------*
*&
Form PRELUCRARE_DATE
*&---------------------------------------------------------------------*
FORM prelucrare_date USING
ut_del
TYPE tty_del "delivery
ut_salesorder TYPE tty_salesorder "sales order
CHANGING ct_delivery
TYPE tty_delivery. "output
DATA: ls_delivery TYPE ty_delivery,
ls_del
TYPE ty_del,
ls_salesorder TYPE ty_salesorder.
REFRESH ct_delivery.
CLEAR gv_sum.
LOOP AT ut_del INTO ls_del.
CLEAR ls_delivery.
ls_delivery-vbeln_d = ls_del-vbeln.
ls_delivery-posnr_d = ls_del-posnr.
ls_delivery-lfdat = ls_del-lfdat.
ls_delivery-vstel = ls_del-vstel.
ls_delivery-kunnr = ls_del-kunnr.
ls_delivery-wadat_ist = ls_del-wadat_ist.
ls_delivery-lfimg = ls_del-lfimg.
gv_sum = gv_sum + ls_delivery-lfimg.
ls_delivery-meins = ls_del-meins.
CLEAR ls_salesorder.
READ TABLE ut_salesorder INTO ls_salesorder
WITH KEY vbeln = ls_del-vgbel
posnr = ls_del-vgpos
BINARY SEARCH.

IF sy-subrc = 0.
ls_delivery-vbeln = ls_salesorder-vbeln.
ls_delivery-posnr = ls_salesorder-posnr.
ls_delivery-auart = ls_salesorder-auart.
ls_delivery-kwmeng = ls_salesorder-kwmeng.
ls_delivery-wbstk = ls_salesorder-wbstk.
ENDIF.
APPEND ls_delivery TO ct_delivery.
ENDLOOP.

ENDFORM.

" PRELUCRARE_DATE

You might also like