Professional Documents
Culture Documents
Code
Code
*
*& Report ZTEST_14FEB
*&
*&---------------------------------------------------------------------
*
*&
*&
*&---------------------------------------------------------------------
*
REPORT ZTEST_14FEB_17FEB.
TABLES: afko, aufm, aufk, makt, jest, stpo, stko .
TYPE-POOLS :slis.
*Data Declaration
*----------------
TYPES: BEGIN OF t_afko,
aufnr TYPE afko-aufnr, "Order no common in AUFK also
stlnr TYPE afko-stlnr, "Bill of material
stlbez TYPE afko-stlbez, "Header Materail for each order no
gamng TYPE afko-gamng, "Target Qty
igmng TYPE afko-igmng, "Confirm Qty
gmein TYPE afko-gmein, "Unit
END OF t_afko.
TYPES: BEGIN OF t_makt,
matnr TYPE makt-matnr,
maktx TYPE makt-maktx,
END OF t_makt.
TYPES: BEGIN OF t_stpo,
stlnr TYPE stpo-stlnr, "Bill of material
menge TYPE stpo-menge, "Component Qty
idnrk TYPE stpo-idnrk, "Child material
END OF t_stpo.
TYPES: BEGIN OF t_stko,
stlnr TYPE stko-stlnr, "bill of material
bmeng TYPE stko-bmeng, "base qty
END OF t_stko.
TYPES: BEGIN OF t_aufm,
aufnr TYPE aufm-aufnr, "to make condition
matnr TYPE aufm-matnr, "used in child data
meins TYPE aufm-meins,
bwart TYPE aufm-bwart, "used in condition to making sum
menge TYPE aufm-menge, "used in issue Qty
budat TYPE aufm-budat, "used to calculate date
werks TYPE aufm-werks, "used in plant
consume(10) TYPE p DECIMALS 3,
balance(10) TYPE p DECIMALS 3,
dmbtr TYPE aufm-dmbtr, "value column
waers TYPE aufm-waers,
END OF t_aufm.
TYPES: BEGIN OF t_final,
aufnr TYPE afko-aufnr,
stlbez TYPE afko-stlbez,
gamng TYPE afko-gamng,
igmng TYPE afko-igmng,
gmein TYPE afko-gmein,
matnr TYPE aufm-matnr, "used in child data
menge TYPE aufm-menge, "used in issue Qty
meins TYPE aufm-meins,
budat TYPE aufm-budat, "used to calculate date
bwart TYPE aufm-bwart, "used in condition to making sum
werks TYPE aufm-werks, "used in plant
consume(10) TYPE p DECIMALS 3,
balance(10) TYPE p DECIMALS 3,
dmbtr TYPE aufm-dmbtr, "value column
waers TYPE aufm-waers, "currency
maktx TYPE makt-maktx,
maktx1 TYPE makt-maktx,
END OF t_final,
BEGIN OF t_aufk,
aufnr TYPE aufk-aufnr,
objnr TYPE aufk-objnr,
END OF t_aufk.
* SELECT AUFNR MATNR MENGE BUDAT BWART DMTR from AUFM
* INTO CORRESPONDING FIELDS OF TABLE IT_FINAL where BWART between 261
and 262 and AUFNR = IT_FINAL-AUFNR
* " UP TO 10 ROWS
* FROM MBEW
* INTO CORRESPONDING FIELDS OF TABLE IT_MBEW WHERE MATNR = IT_AFKO
-MATNR.
DATA: it_afko TYPE STANDARD TABLE OF t_afko INITIAL SIZE 0,
wa_afko TYPE t_afko.
DATA: it_makt TYPE STANDARD TABLE OF t_makt INITIAL SIZE 0,
wa_makt TYPE t_makt.
DATA: it_aufm TYPE STANDARD TABLE OF t_aufm INITIAL SIZE 0,
wa_aufm TYPE t_aufm.
DATA: it_final TYPE STANDARD TABLE OF t_final INITIAL SIZE 0,
wa_final TYPE t_final,
it_aufk TYPE STANDARD TABLE OF t_aufk,
wa_aufk TYPE t_aufk,
it_stpo TYPE STANDARD TABLE OF t_stpo,
wa_stpo TYPE t_stpo,
it_stko TYPE STANDARD TABLE OF t_stko,
wa_stko TYPE t_stko.
* WA_AUFM-CONSUME = WA_AUFM-MENGE * WA_AFKO-IGMNG / WA_AFKO-GAMNG.
SELECT-OPTIONS: material FOR afko-stlbez,
period FOR aufm-budat,
order FOR afko-aufnr,
plant FOR aufm-werks.
*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid,
gt_events TYPE slis_t_event,
gd_prntparams TYPE slis_print_alv.
DATA : it_jest TYPE STANDARD TABLE OF jest,
wa_jest TYPE jest.
***********************************************************************
*
*Start-of-selection.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
period-sign = 'I'.
period-option = 'EQ'.
period-high = sy-datum.
APPEND period.
ENDLOOP.
START-OF-SELECTION.
PERFORM data_retrieval.
PERFORM build_fieldcatalog.
PERFORM build_layout.
PERFORM build_events.
PERFORM build_print_params.
PERFORM display_alv_report.
*&---------------------------------------------------------------------
*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------
*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------
*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------
*
FORM build_fieldcatalog .
* There are a number of ways to create a fieldcat.
* For the purpose of this example i will build the fieldcatalog manual
y
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but
can
* also allow you more control of the final product.
* Beware though, you need to ensure that all fields required are
* populated. When using some of functionality available via ALV, such
as
* total. You may need to provide more information than if you were
* simply displaying the result
* I.e. Field type may be required in-order for
* the 'TOTAL' function to work.
fieldcatalog-fieldname = 'AUFNR'.
fieldcatalog-seltext_m = 'Order No.'.
fieldcatalog-col_pos = 0.
fieldcatalog-outputlen = 10.
fieldcatalog-emphasize = 'X'.
fieldcatalog-key = 'X'.
* fieldcatalog-do_sum = 'X'.
* fieldcatalog-no_zero = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'STLBEZ'.
fieldcatalog-seltext_m = 'Header Material'.
fieldcatalog-col_pos = 1.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MAKTX'.
fieldcatalog-seltext_m = 'Material Description'.
fieldcatalog-col_pos = 2.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'GAMNG'.
fieldcatalog-seltext_m = 'Target Qty'.
fieldcatalog-col_pos = 3.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'IGMNG'.
fieldcatalog-seltext_m = 'Confirm Qty'.
fieldcatalog-col_pos = 4.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'GMEIN'.
fieldcatalog-seltext_m = 'Unit'.
fieldcatalog-col_pos = 5.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MATNR'.
fieldcatalog-seltext_m = 'Component'.
fieldcatalog-col_pos = 6.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MAKTX1'.
fieldcatalog-seltext_m = 'Material Description'.
fieldcatalog-col_pos = 7.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MENGE'.
fieldcatalog-seltext_m = 'Issue Qty'.
fieldcatalog-col_pos = 8.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'MEINS'.
fieldcatalog-seltext_m = 'Unit'.
fieldcatalog-col_pos = 9.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CONSUME'.
fieldcatalog-seltext_m = 'Consume Qty'.
fieldcatalog-col_pos = 10.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'BALANCE'.
fieldcatalog-seltext_m = 'Balance Qty'.
fieldcatalog-col_pos = 11.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'DMBTR'.
fieldcatalog-seltext_m = 'Value'.
fieldcatalog-col_pos = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'WAERS'.
fieldcatalog-seltext_m = 'Currency'.
fieldcatalog-col_pos = 13.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------
*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------
*
* Build layout for ALV grid report
*----------------------------------------------------------------------
*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------
*
FORM build_layout .
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-totals_text = 'Totals'(201).
* gd_layout-totals_only = 'X'.
* gd_layout-f2code = 'DISP'. "Sets fcode for when doubl
e
* "click(press f2)
* gd_layout-zebra = 'X'.
* gd_layout-group_change_edit = 'X'.
* gd_layout-header_text = 'helllllo'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------
*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------
*
* text
*----------------------------------------------------------------------
*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------
*
FORM display_alv_report .
gd_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = gd_repid
* I_CALLBACK_PF_STATUS_SET = ' '
i_callback_user_command = 'USER_COMMAND'
i_callback_top_of_page = 'TOP-OF-PAGE' "see FORM '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
* I_GRID_TITLE =
* I_GRID_SETTINGS =
is_layout = gd_layout
it_fieldcat = fieldcatalog[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = 'X'
* IS_VARIANT =
it_events = gt_events
* IT_EVENT_EXIT =
is_print = gd_prntparams
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = it_final
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_ALV_REPORT
*&---------------------------------------------------------------------
*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------
*
* Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------
*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------
*
FORM data_retrieval .
DATA :cons_fact TYPE afko-gamng,
val_fact TYPE aufm-menge,
wa_aufm1 LIKE wa_aufm,
v_last TYPE char1,
it_aufm1 TYPE STANDARD TABLE OF t_aufm,
it_makt1 TYPE STANDARD TABLE OF t_makt.
SELECT aufnr stlnr stlbez gamng igmng gmein
" UP TO 10 ROWS
FROM afko
INTO CORRESPONDING FIELDS OF TABLE it_afko
WHERE stlbez IN material.
.
DELETE it_afko WHERE stlbez IS INITIAL.
DELETE it_afko WHERE aufnr IS INITIAL.
* DELETE it_afko WHERE stlnr IS INITIAL.
select stlnr menge FROM stpo
INTO TABLE it_stpo
FOR ALL ENTRIES IN it_afko
where stlnr = it_afko-stlnr.
IF sy-subrc IS INITIAL.
SELECT stlnr bmeng FROM stko INTO TABLE it_stko
FOR ALL ENTRIES IN it_stpo
WHERE stlnr = it_stpo-stlnr.
ENDIF.
SELECT aufnr objnr FROM aufk
INTO TABLE it_aufk
FOR ALL ENTRIES IN it_afko
WHERE aufnr = it_afko-aufnr.
IF sy-subrc IS INITIAL.
SELECT * FROM jest INTO TABLE it_jest
FOR ALL ENTRIES IN it_aufk
WHERE objnr = it_aufk-objnr.
* AND stat NOT IN ('10012', '10045').
* AND stat NOT IN ('I0012', 'I0045').
*delete it_jest where stat = 'I0012'.
*delete it_jest where stat = 'I0045'.
ENDIF.
SELECT * FROM makt INTO CORRESPONDING FIELDS OF TABLE it_makt
FOR ALL ENTRIES IN it_afko
WHERE matnr = it_afko-stlbez
AND spras = 'E'.
SELECT aufnr matnr menge meins budat bwart dmbtr werks waers
FROM aufm
INTO CORRESPONDING FIELDS OF TABLE it_aufm
FOR ALL ENTRIES IN it_afko
WHERE aufnr = it_afko-aufnr
AND budat IN period
AND werks IN plant
AND aufnr IN ORDER
AND bwart IN ('261', '262').
SELECT * FROM makt INTO CORRESPONDING FIELDS OF TABLE it_makt1
FOR ALL ENTRIES IN it_aufm
WHERE matnr = it_aufm-matnr
AND spras = 'E'.
it_aufm1[] = it_aufm[].
CLEAR: it_aufm[].
SORT it_aufm1 BY aufnr matnr bwart.
LOOP AT it_aufm1 INTO wa_aufm.
IF wa_aufm-bwart = '261'.
wa_aufm1-menge = wa_aufm1-menge + wa_aufm-menge.
wa_aufm1-dmbtr = wa_aufm1-dmbtr + wa_aufm-dmbtr.
ELSEIF wa_aufm-bwart = '262'.
wa_aufm1-menge = wa_aufm1-menge - wa_aufm-menge.
wa_aufm1-dmbtr = wa_aufm1-dmbtr - wa_aufm-dmbtr.
ENDIF.
AT END OF matnr.
v_last = 'X'.
ENDAT.
IF v_last IS NOT INITIAL.
wa_aufm-menge = wa_aufm1-menge.
wa_aufm-dmbtr = wa_aufm1-dmbtr.
APPEND wa_aufm TO it_aufm.
CLEAR : wa_aufm1, v_last.
ENDIF.
ENDLOOP.
SORT it_afko BY aufnr.
SORT it_aufm BY aufnr.
Loop at it_jest into wa_jest.
If wa_jest-stat = 'I0012' and wa_jest-inact = '' OR
wa_jest-stat = 'I0045' and wa_jest-inact = '' .
Read table it_aufk into wa_aufk
With key objnr = wa_jest-objnr.
If sy-subrc is initial.
Delete it_aufm where aufnr = wa_aufk-aufnr.
Endif.
Endif.
Endloop.
LOOP AT it_aufm INTO wa_aufm .
READ TABLE it_afko INTO wa_afko
WITH KEY aufnr = wa_aufm-aufnr.
IF sy-subrc IS INITIAL.
CLEAR : cons_fact, wa_final.
wa_final-aufnr = wa_aufm-aufnr.
wa_final-stlbez = wa_afko-stlbez.
READ TABLE it_makt INTO wa_makt
WITH KEY matnr = wa_afko-stlbez.
IF sy-subrc IS INITIAL.
wa_final-maktx = wa_makt-maktx.
CLEAR : wa_makt.
ENDIF.
wa_final-igmng = wa_afko-igmng .
wa_final-gamng = wa_afko-gamng.
wa_final-gmein = wa_afko-gmein.
IF NOT wa_afko-gamng IS INITIAL.
cons_fact = wa_afko-igmng / wa_afko-gamng.
ENDIF.
ENDIF.
wa_final-matnr = wa_aufm-matnr.
READ TABLE it_makt1 INTO wa_makt
WITH KEY matnr = wa_aufm-matnr.
IF sy-subrc IS INITIAL.
wa_final-maktx1 = wa_makt-maktx.
CLEAR : wa_makt.
ENDIF.
wa_final-menge = wa_aufm-menge.
wa_final-meins = wa_aufm-meins.
wa_final-werks = wa_aufm-werks.
wa_final-waers = wa_aufm-waers.
wa_final-consume = wa_aufm-menge * cons_fact.
wa_final-balance = wa_aufm-menge - wa_final-consume.
* IF NOT wa_final-consume EQ 0.
* val_fact = wa_final-balance / wa_final-consume.
* ENDIF.
IF NOT wa_final-menge EQ 0.
val_fact = wa_final-balance / wa_final-menge.
ENDIF.
wa_final-dmbtr = wa_aufm-dmbtr * val_fact.
APPEND wa_final TO it_final.
CLEAR : val_fact.
ENDLOOP.
ENDFORM. " DATA_RETRIEVAL
*-------------------------------------------------------------------*
* Form TOP-OF-PAGE
*
*-------------------------------------------------------------------*
* ALV Report Header
*
*-------------------------------------------------------------------*
FORM top-of-page.
*ALV Header declarations
DATA: t_header TYPE slis_t_listheader,
wa_header TYPE slis_listheader,
t_line LIKE wa_header-info,
ld_lines TYPE i,
ld_linesc(10) TYPE c.
* Title
wa_header-typ = 'H'.
wa_header-info = 'WIP Quantity & Value Report'.
APPEND wa_header TO t_header.
CLEAR wa_header.
* Date
wa_header-typ = 'S'.
wa_header-key = 'Date: '.
CONCATENATE sy-datum+6(2) '.'
sy-datum+4(2) '.'
sy-datum(4) INTO wa_header-info. "todays date
APPEND wa_header TO t_header.
CLEAR: wa_header.
* Total No. of Records Selected
DESCRIBE TABLE it_final LINES ld_lines.
ld_linesc = ld_lines.
CONCATENATE 'Total No. of Records Selected: ' ld_linesc
INTO t_line SEPARATED BY space.
wa_header-typ = 'A'.
wa_header-info = t_line.
APPEND wa_header TO t_header.
CLEAR: wa_header, t_line.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = t_header.
* i_logo = 'Z_LOGO'.
ENDFORM. "TOP-OF-PAGE
*&---------------------------------------------------------------------
*
*& Form BUILD_EVENTS
*&---------------------------------------------------------------------
*
* Build events table
*----------------------------------------------------------------------
*
FORM build_events.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_events[].
READ TABLE gt_events WITH KEY name = slis_ev_end_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE 'END_OF_PAGE' TO ls_event-form.
APPEND ls_event TO gt_events.
ENDIF.
READ TABLE gt_events WITH KEY name = slis_ev_end_of_list
INTO ls_event.
IF sy-subrc = 0.
MOVE 'END_OF_LIST' TO ls_event-form.
APPEND ls_event TO gt_events.
ENDIF.
ENDFORM. " BUILD_EVENTS
*&---------------------------------------------------------------------
*
*& Form BUILD_PRINT_PARAMS
*&---------------------------------------------------------------------
*
* Setup print parameters
*----------------------------------------------------------------------
*
FORM build_print_params.
gd_prntparams-reserve_lines = '3'. "Lines reserved for footer
gd_prntparams-no_coverpage = 'X'.
ENDFORM. " BUILD_PRINT_PARAMS
*&---------------------------------------------------------------------
*
*& Form END_OF_PAGE
*&---------------------------------------------------------------------
*
FORM end_of_page.
DATA: listwidth TYPE i,
ld_pagepos(10) TYPE c,
ld_page(10) TYPE c.
WRITE: sy-uline(50).
SKIP.
WRITE:/40 'Page:', sy-pagno .
ENDFORM. "END_OF_PAGE
*&---------------------------------------------------------------------
*
*& Form END_OF_LIST