Sie sind auf Seite 1von 13

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

*
*& 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 a
nd 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 manualy
* by populating the internal table fields individually and then
* appending the rows. This method can be the most time consuming but ca
n
* 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 a
s
* 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 double
* "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