*&---------------------------------------------------------------------*
*& Progarm : ZMM_OSPO_MONTH Author : Jimmy Wong
*& Created : 18 Jan 2013 App : MM
*& Title : Open PO Monthly
*& Description : Open PO Monthly
*&---------------------------------------------------------------------*
*& Version Author Date description
*& Jimmy 18 Jan 2013 the first version
*& the last update time 2013.01.18 18:00
*&---------------------------------------------------------------------*
REPORT ZMM_OSPO_MONTH NO STANDARD PAGE HEADING .
***********************************************************************
* TYPE-POOLS
***********************************************************************
TYPE-POOLS : SLIS.
************************************************************************
* T A B L E S
************************************************************************
TABLES: EKKO,
EKPO,
EKET,
EKES,
LFA1,
EBAN.
************************************************************************
* D A T A
************************************************************************
DATA: BEGIN OF PO_ITAB OCCURS 0,
WERKS TYPE EKPO-WERKS,
EBELN TYPE EKKO-EBELN,
EBELP TYPE EKPO-EBELP,
ETENR TYPE EKET-ETENR,
MATNR TYPE EKPO-MATNR,
MENGE TYPE EKPO-MENGE,
WEMNG TYPE EKET-WEMNG,
MEINS TYPE EKPO-MEINS,
EINDT TYPE EKET-EINDT,
WAERS LIKE EKKO-WAERS,
NETPR LIKE EKPO-NETPR,
PEINH LIKE EKPO-NETPR,
WKURS LIKE EKKO-WKURS,
END OF PO_ITAB.
DATA: BEGIN OF OA_ITAB OCCURS 0,
EBTYP TYPE EKES-EBTYP,
EBELN TYPE EKES-EBELN,
EBELP TYPE EKES-EBELP,
ETENS TYPE EKES-ETENS,
EINDT TYPE EKES-EINDT,
MENGE TYPE EKES-MENGE,
DABMG TYPE EKES-DABMG,
ERDAT TYPE EKES-ERDAT,
XBLNR TYPE EKES-XBLNR,
END OF OA_ITAB.
DATA: BEGIN OF VC_ITAB OCCURS 0,
EBTYP TYPE EKES-EBTYP,
EBELN TYPE EKES-EBELN,
EBELP TYPE EKES-EBELP,
ETENS TYPE EKES-ETENS,
EINDT TYPE EKES-EINDT,
MENGE TYPE EKES-MENGE,
DABMG TYPE EKES-DABMG,
ERDAT TYPE EKES-ERDAT,
XBLNR TYPE EKES-XBLNR,
END OF VC_ITAB.
DATA: BEGIN OF PO_RECORD OCCURS 0,
WERKS TYPE EKPO-WERKS,
EBELN TYPE EKKO-EBELN,
EBELP TYPE EKPO-EBELP,
ETENR TYPE EKET-ETENR,
MATNR TYPE EKPO-MATNR,
MENGE TYPE EKPO-MENGE,
WEMNG TYPE EKET-WEMNG,
MEINS TYPE EKPO-MEINS,
EINDT TYPE EKET-EINDT,
OAENS TYPE EKES-ETENS,
OADAT TYPE EKES-EINDT,
OAQTY TYPE EKES-MENGE,
OAREF TYPE EKES-XBLNR,
VCENS TYPE EKES-ETENS,
VCDAT TYPE EKES-EINDT,
VCQTY TYPE EKES-MENGE,
VCREF TYPE EKES-XBLNR,
WAERS LIKE EKKO-WAERS,
NETPR LIKE EKPO-NETPR,
PEINH LIKE EKPO-NETPR,
WKURS LIKE EKKO-WKURS,
END OF PO_RECORD.
DATA:BEGIN OF IT_DEL OCCURS 50,
LFGJA LIKE ZPOOPEN-LFGJA,
LFMON LIKE ZPOOPEN-LFMON,
WERKS LIKE ZPOOPEN-WERKS,
END OF IT_DEL.
DATA: WA_RECORD LIKE PO_RECORD.
DATA:IT_ZPOOPEN LIKE ZPOOPEN OCCURS 0 WITH HEADER LINE .
DATA:IT_ZPROPEN LIKE ZPROPEN OCCURS 0 WITH HEADER LINE.
DATA:IT_ZPROPEN1 LIKE ZPROPEN OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF IT_MBEW OCCURS 0,
MATNR LIKE MBEW-MATNR,
BWKEY LIKE MBEW-BWKEY ,
VPRSV LIKE MBEW-VPRSV,
VERPR LIKE MBEW-VERPR ,
STPRS LIKE MBEW-STPRS ,
PEINH LIKE MBEW-PEINH ,
END OF IT_MBEW.
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
GD_LAYOUT TYPE SLIS_LAYOUT_ALV,
GD_REPID LIKE SY-REPID,
G_SAVE TYPE C VALUE 'X',
G_VARIANT TYPE DISVARIANT,
GX_VARIANT TYPE DISVARIANT,
G_EXIT TYPE C,
LV_LFGJA LIKE BAPI0002_4-FISCAL_YEAR,
LV_LFMON LIKE BAPI0002_4-FISCAL_PERIOD .
DATA:LV_TOTAL_LINE TYPE I,
LV_LINE TYPE P DECIMALS 3.
DATA:LV_SUBRC LIKE SY-SUBRC.
************************************************************************
* S E L E C T O P T I O N S
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK SEL1 WITH FRAME TITLE TEXT-001.
PARAMETERS : P_BUDAT LIKE MKPF-BUDAT OBLIGATORY .
SELECT-OPTIONS : S_WERKS FOR EKPO-WERKS , "Plant
S_MATNR FOR EKPO-MATNR.
SELECTION-SCREEN END OF BLOCK SEL1.
SELECTION-SCREEN BEGIN OF BLOCK SEL2 WITH FRAME TITLE TEXT-002.
SELECT-OPTIONS : S_EKGRP FOR EKKO-EKGRP , "Pur Group
S_LIFNR FOR EKKO-LIFNR , "Vendor
S_EBELN FOR EKKO-EBELN . "PO Number
SELECTION-SCREEN END OF BLOCK SEL2.
SELECTION-SCREEN BEGIN OF BLOCK SEL5 WITH FRAME TITLE TEXT-005.
SELECT-OPTIONS : S_BANFN FOR EBAN-BANFN . "Pur Group
SELECTION-SCREEN END OF BLOCK SEL5.
SELECTION-SCREEN BEGIN OF BLOCK SEL3 WITH FRAME TITLE TEXT-003.
PARAMETERS : P_SAVE AS CHECKBOX.
PARAMETERS : P_SAVEPR AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK SEL3.
INITIALIZATION.
CONCATENATE SY-DATUM+0(4) SY-DATUM+4(2) '01' INTO P_BUDAT .
P_BUDAT = P_BUDAT - 1.
************************************************************************
* S T A R T O F S E L E C T I O N
************************************************************************
START-OF-SELECTION.
PERFORM GET_PERIOD CHANGING LV_SUBRC.
IF LV_SUBRC NE 0.
MESSAGE 'Get period Error.' TYPE 'I'.
EXIT.
ENDIF.
IF P_SAVE = 'X'.
PERFORM GET_DATA . "Select data
PERFORM GET_CF_DATA.
PERFORM GROUP_DATA.
PERFORM SAVE_DATA.
FREE: PO_ITAB, OA_ITAB, VC_ITAB, PO_RECORD.
ENDIF.
IF P_SAVEPR = 'X'.
PERFORM GET_PR_DATA .
PERFORM SAVE_PR_DATA.
ENDIF.
* perform prepare_alv . "Prepare_ALV
* perform call_alv . "Print
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* Get Outstanding PO
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
REFRESH: PO_ITAB, OA_ITAB, VC_ITAB, PO_RECORD.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = 'Get Data........'.
SELECT C~WERKS A~EBELN C~EBELP C~MATNR C~MENGE D~WEMNG
C~MEINS D~EINDT D~ETENR A~WKURS A~WAERS C~NETPR C~PEINH
INTO CORRESPONDING FIELDS OF TABLE PO_ITAB
FROM EKKO AS A
INNER JOIN EKPO AS C ON A~EBELN = C~EBELN
INNER JOIN EKET AS D ON C~EBELN = D~EBELN AND C~EBELP = D~EBELP
WHERE C~WERKS IN S_WERKS
AND A~EKGRP IN S_EKGRP
AND A~LIFNR IN S_LIFNR
AND A~EBELN IN S_EBELN
AND C~MATNR IN S_MATNR
AND C~MENGE > D~WEMNG
AND C~LOEKZ = ''.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form get_cf_data
*&---------------------------------------------------------------------*
* Get Confirmation Record
*----------------------------------------------------------------------*
FORM GET_CF_DATA.
SELECT EBTYP EBELN EBELP ETENS EINDT MENGE DABMG ERDAT XBLNR
INTO CORRESPONDING FIELDS OF TABLE OA_ITAB
FROM EKES
FOR ALL ENTRIES IN PO_ITAB
WHERE EBELN = PO_ITAB-EBELN AND
EBELP = PO_ITAB-EBELP AND
EBTYP = 'OA'.
LOOP AT OA_ITAB.
IF OA_ITAB-MENGE <= OA_ITAB-DABMG.
DELETE OA_ITAB.
ENDIF.
ENDLOOP.
SELECT EBTYP EBELN EBELP ETENS EINDT MENGE DABMG ERDAT XBLNR
INTO CORRESPONDING FIELDS OF TABLE VC_ITAB
FROM EKES
FOR ALL ENTRIES IN PO_ITAB
WHERE EBELN = PO_ITAB-EBELN AND
EBELP = PO_ITAB-EBELP AND
( EBTYP = 'FI' OR EBTYP = 'VC' ).
ENDFORM. "get_cf_data
*&---------------------------------------------------------------------*
*& Form GROUP_DATA
*&---------------------------------------------------------------------*
* Combine records
*----------------------------------------------------------------------*
FORM GROUP_DATA.
DATA : VC_REF TYPE EKES-ETENS.
SORT PO_ITAB BY WERKS EBELN EBELP.
SORT OA_ITAB BY EBELN EBELP ETENS.
SORT VC_ITAB BY EBELN EBELP ETENS.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = 'Processing Data........'.
LOOP AT PO_ITAB.
MOVE-CORRESPONDING PO_ITAB TO WA_RECORD.
" wa_record-wemng = wa_record-menge - wa_record-wemng.
READ TABLE OA_ITAB WITH KEY EBELN = WA_RECORD-EBELN EBELP = WA_RECORD-EBELP .
IF SY-SUBRC EQ 0.
LOOP AT OA_ITAB WHERE EBELN = WA_RECORD-EBELN AND EBELP = WA_RECORD-EBELP.
WA_RECORD-OAENS = OA_ITAB-ETENS.
WA_RECORD-OADAT = OA_ITAB-EINDT.
WA_RECORD-OAQTY = OA_ITAB-MENGE - OA_ITAB-DABMG.
WA_RECORD-OAREF = OA_ITAB-XBLNR.
LOOP AT VC_ITAB WHERE EBELN = WA_RECORD-EBELN AND EBELP = WA_RECORD-EBELP.
VC_REF = VC_ITAB-XBLNR+0(4).
IF VC_REF = WA_RECORD-OAENS.
WA_RECORD-VCENS = VC_ITAB-ETENS.
WA_RECORD-VCDAT = VC_ITAB-EINDT.
WA_RECORD-VCQTY = VC_ITAB-MENGE.
WA_RECORD-VCREF = VC_ITAB-XBLNR.
ENDIF.
ENDLOOP.
MOVE-CORRESPONDING WA_RECORD TO PO_RECORD.
APPEND PO_RECORD.
CLEAR: PO_RECORD,WA_RECORD-VCENS,WA_RECORD-VCDAT,WA_RECORD-VCQTY,WA_RECORD-VCREF.
ENDLOOP.
ELSE.
READ TABLE VC_ITAB WITH KEY EBELN = WA_RECORD-EBELN
EBELP = WA_RECORD-EBELP
EBTYP = 'FI'.
IF SY-SUBRC = 0.
WA_RECORD-VCENS = VC_ITAB-ETENS.
WA_RECORD-VCDAT = VC_ITAB-EINDT.
WA_RECORD-VCQTY = VC_ITAB-MENGE.
WA_RECORD-VCREF = VC_ITAB-XBLNR.
ENDIF.
MOVE-CORRESPONDING WA_RECORD TO PO_RECORD.
APPEND PO_RECORD.
ENDIF.
CLEAR: PO_RECORD,WA_RECORD-OAENS,WA_RECORD-OADAT,WA_RECORD-OAQTY,WA_RECORD-OAREF,
WA_RECORD-VCENS,WA_RECORD-VCDAT,WA_RECORD-VCQTY,WA_RECORD-VCREF.
ENDLOOP.
SORT PO_RECORD BY WERKS EBELN EBELP ETENR OAENS.
ENDFORM. "GROUP_DATA
*&---------------------------------------------------------------------*
*& Form PREPARE_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM PREPARE_ALV .
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'WERKS'.
FIELDCATALOG-SELTEXT_M = 'Plant'.
FIELDCATALOG-COL_POS = 1.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'EBELN'.
FIELDCATALOG-SELTEXT_M = 'PO#'.
FIELDCATALOG-COL_POS = 2.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'EBELP'.
FIELDCATALOG-SELTEXT_M = 'Line'.
FIELDCATALOG-COL_POS = 3.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'ETENR'.
FIELDCATALOG-SELTEXT_M = 'Sep No.'.
FIELDCATALOG-COL_POS = 4.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'MATNR'.
FIELDCATALOG-SELTEXT_M = 'Material'.
FIELDCATALOG-REF_TABNAME = 'MARA'.
FIELDCATALOG-REF_FIELDNAME = 'MATNR'.
FIELDCATALOG-COL_POS = 5.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'MENGE'.
FIELDCATALOG-SELTEXT_M = 'Order Qty'.
FIELDCATALOG-COL_POS = 6.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'WEMNG'.
FIELDCATALOG-SELTEXT_M = 'O/S Qty'.
FIELDCATALOG-COL_POS = 7.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'MEINS'.
FIELDCATALOG-SELTEXT_M = 'U/M'.
FIELDCATALOG-REF_TABNAME = 'EKPO'.
FIELDCATALOG-REF_FIELDNAME = 'MEINS'.
FIELDCATALOG-COL_POS = 8.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'EINDT'.
FIELDCATALOG-SELTEXT_M = 'Due Date'.
FIELDCATALOG-COL_POS = 9.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'OAENS'.
FIELDCATALOG-SELTEXT_M = 'OA Line'.
FIELDCATALOG-COL_POS = 10.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'OADAT'.
FIELDCATALOG-SELTEXT_M = 'OA Date'.
FIELDCATALOG-COL_POS = 11.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'OAQTY'.
FIELDCATALOG-SELTEXT_M = 'OA Qty'.
FIELDCATALOG-COL_POS = 12.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'OAREF'.
FIELDCATALOG-SELTEXT_M = 'Org OA Line'.
FIELDCATALOG-COL_POS = 13.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'VCENS'.
FIELDCATALOG-SELTEXT_M = 'VC Line'.
FIELDCATALOG-COL_POS = 14.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'VCDAT'.
FIELDCATALOG-SELTEXT_M = 'VC Date'.
FIELDCATALOG-COL_POS = 15.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'VCQTY'.
FIELDCATALOG-SELTEXT_M = 'VC Qty'.
FIELDCATALOG-COL_POS = 16.
APPEND FIELDCATALOG TO FIELDCATALOG.
CLEAR FIELDCATALOG.
FIELDCATALOG-FIELDNAME = 'VCREF'.
FIELDCATALOG-SELTEXT_M = 'VC Reference'.
FIELDCATALOG-COL_POS = 17.
APPEND FIELDCATALOG TO FIELDCATALOG.
ENDFORM. " PREPARE_ALV
*&---------------------------------------------------------------------*
*& Form CALL_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CALL_ALV .
GD_REPID = SY-REPID.
GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = GD_REPID
* I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE' "see FORM
* I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = FIELDCATALOG[]
I_SAVE = 'X'
IS_VARIANT = G_VARIANT
IS_LAYOUT = GD_LAYOUT
TABLES
T_OUTTAB = PO_RECORD
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. " CALL_ALV
*&---------------------------------------------------------------------*
*& Form SAVE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_DATA .
CHECK PO_RECORD[] IS NOT INITIAL.
PERFORM DELETE_DATA.
LOOP AT PO_RECORD.
MOVE-CORRESPONDING PO_RECORD TO IT_ZPOOPEN.
IT_ZPOOPEN-OMENG = IT_ZPOOPEN-MENGE - IT_ZPOOPEN-WEMNG.
CHECK IT_ZPOOPEN-OMENG > 0.
IF IT_ZPOOPEN-OAQTY = 0.
IT_ZPOOPEN-OAQTY = IT_ZPOOPEN-OMENG .
ENDIF.
IF IT_ZPOOPEN-OADAT = '00000000'.
IT_ZPOOPEN-OADAT = IT_ZPOOPEN-EINDT.
ENDIF.
IT_ZPOOPEN-LFGJA = LV_LFGJA.
IT_ZPOOPEN-LFMON = LV_LFMON.
IT_ZPOOPEN-PEINH = PO_RECORD-PEINH.
IT_ZPOOPEN-NETPR = PO_RECORD-NETPR.
IT_ZPOOPEN-WKURS = PO_RECORD-WKURS.
IT_ZPOOPEN-WAERS = PO_RECORD-WAERS.
PERFORM CONVERT_AMOUNT USING PO_RECORD-WAERS CHANGING IT_ZPOOPEN-NETPR.
IF PO_RECORD-WAERS = 'JPY'.
IF IT_ZPOOPEN-PEINH NE 0 AND IT_ZPOOPEN-WKURS NE 0.
IT_ZPOOPEN-NETWR = IT_ZPOOPEN-OAQTY * IT_ZPOOPEN-NETPR * IT_ZPOOPEN-WKURS / IT_ZPOOPEN-PEINH / 100.
ENDIF.
ELSE.
IF IT_ZPOOPEN-PEINH NE 0 AND IT_ZPOOPEN-WKURS NE 0.
IT_ZPOOPEN-NETWR = IT_ZPOOPEN-OAQTY * IT_ZPOOPEN-NETPR * IT_ZPOOPEN-WKURS / IT_ZPOOPEN-PEINH.
ENDIF.
ENDIF.
APPEND IT_ZPOOPEN.
CLEAR: IT_ZPOOPEN.
ENDLOOP.
IF NOT IT_ZPOOPEN[] IS INITIAL.
SORT IT_ZPOOPEN BY EBELN EBELP ETENR OAENS LFGJA LFMON.
MODIFY ZPOOPEN FROM TABLE IT_ZPOOPEN.
* write: 'Excute Successed.'.
REFRESH IT_ZPOOPEN.
FREE:IT_ZPOOPEN.
ENDIF.
ENDFORM. " SAVE_DATA
*&---------------------------------------------------------------------*
*& Form CONVERT_AMOUNT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CONVERT_AMOUNT USING PI_WAERK
CHANGING PE_NETWR.
DATA : LV_NETWR TYPE BAPICURR-BAPICURR.
CHECK PI_WAERK <> 'HKD'.
CHECK PI_WAERK <> 'USD'.
CHECK PI_WAERK <> 'EUR'.
CHECK PI_WAERK <> 'CNY'.
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
EXPORTING
CURRENCY = PI_WAERK
AMOUNT_INTERNAL = PE_NETWR
IMPORTING
AMOUNT_EXTERNAL = LV_NETWR.
PE_NETWR = LV_NETWR.
ENDFORM. " CONVERT_AMOUNT
*&---------------------------------------------------------------------*
*& Form GET_PERIOD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LV_SUBRC text
*----------------------------------------------------------------------*
FORM GET_PERIOD CHANGING P_SUBRC.
DATA:LV_DATE LIKE BAPI0002_4-POSTING_DATE,
IT_RETURN LIKE BAPIRETURN1.
LV_DATE = P_BUDAT .
CALL FUNCTION 'BAPI_COMPANYCODE_GET_PERIOD'
EXPORTING
COMPANYCODEID = '8000'
POSTING_DATE = LV_DATE
IMPORTING
FISCAL_YEAR = LV_LFGJA
FISCAL_PERIOD = LV_LFMON
RETURN = IT_RETURN.
P_SUBRC = SY-SUBRC .
ENDFORM. " GET_PERIOD
*&---------------------------------------------------------------------*
*& Form DELETE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DELETE_DATA .
CLEAR:IT_DEL,IT_DEL[].
SELECT DISTINCT LFGJA LFMON WERKS
INTO CORRESPONDING FIELDS OF TABLE IT_DEL
FROM ZPOOPEN
WHERE LFGJA = LV_LFGJA
AND LFMON = LV_LFMON
AND WERKS IN S_WERKS.
IF IT_DEL[] IS NOT INITIAL.
LOOP AT IT_DEL.
DELETE FROM ZPOOPEN WHERE LFGJA = IT_DEL-LFGJA AND LFMON = IT_DEL-LFMON AND WERKS = IT_DEL-WERKS .
COMMIT WORK AND WAIT.
ENDLOOP.
FREE:IT_DEL.
ENDIF.
ENDFORM. " DELETE_DATA
*&---------------------------------------------------------------------*
*& Form GET_PR_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_PR_DATA .
SELECT BANFN BNFPO WERKS MATNR MENGE MEINS BSMNG LFDAT
INTO CORRESPONDING FIELDS OF TABLE IT_ZPROPEN1
FROM EBAN
WHERE BANFN IN S_BANFN
AND MATNR IN S_MATNR
AND WERKS IN S_WERKS
AND LOEKZ = SPACE.
IF IT_ZPROPEN1[] IS NOT INITIAL.
SELECT DISTINCT MATNR BWKEY VPRSV VERPR STPRS PEINH
INTO CORRESPONDING FIELDS OF TABLE IT_MBEW
FROM MBEW
FOR ALL ENTRIES IN IT_ZPROPEN1
WHERE MATNR = IT_ZPROPEN1-MATNR
AND BWKEY = IT_ZPROPEN1-WERKS.
SORT IT_MBEW BY MATNR BWKEY.
LOOP AT IT_ZPROPEN1.
MOVE-CORRESPONDING IT_ZPROPEN1 TO IT_ZPROPEN.
IF IT_ZPROPEN-MENGE > IT_ZPROPEN-BSMNG.
IT_ZPROPEN-OMENG = IT_ZPROPEN-MENGE - IT_ZPROPEN-BSMNG.
IT_ZPROPEN-LFGJA = LV_LFGJA.
IT_ZPROPEN-LFMON = LV_LFMON.
READ TABLE IT_MBEW WITH KEY MATNR = IT_ZPROPEN-MATNR BWKEY = IT_ZPROPEN-WERKS BINARY SEARCH.
IF SY-SUBRC EQ 0.
IT_ZPROPEN-PEINH = IT_MBEW-PEINH.
IF IT_MBEW-VPRSV = 'V'.
IT_ZPROPEN-VERPR = IT_MBEW-VERPR.
ELSE.
IT_ZPROPEN-VERPR = IT_MBEW-STPRS.
ENDIF.
IF IT_ZPROPEN-PEINH NE 0.
IT_ZPROPEN-NETWR = IT_ZPROPEN-VERPR * IT_ZPROPEN-OMENG / IT_ZPROPEN-PEINH.
ENDIF.
ENDIF.
APPEND IT_ZPROPEN.
CLEAR:IT_ZPROPEN.
ENDIF.
ENDLOOP.
FREE:IT_ZPROPEN1.
ENDIF.
ENDFORM. " GET_PR_DATA
*&---------------------------------------------------------------------*
*& Form SAVE_PR_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_PR_DATA .
PERFORM DELETE_PR_DATA.
IF NOT IT_ZPROPEN[] IS INITIAL.
SORT IT_ZPROPEN BY BANFN BNFPO LFGJA LFMON.
MODIFY ZPROPEN FROM TABLE IT_ZPROPEN.
* write: 'Excute Successed.'.
REFRESH IT_ZPROPEN.
FREE:IT_ZPROPEN.
ENDIF.
ENDFORM. " SAVE_PR_DATA
*&---------------------------------------------------------------------*
*& Form DELETE_PR_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DELETE_PR_DATA .
CLEAR:IT_DEL,IT_DEL[].
SELECT DISTINCT LFGJA LFMON WERKS
INTO CORRESPONDING FIELDS OF TABLE IT_DEL
FROM ZPROPEN
WHERE LFGJA = LV_LFGJA
AND LFMON = LV_LFMON
AND WERKS IN S_WERKS.
IF IT_DEL[] IS NOT INITIAL.
LOOP AT IT_DEL.
DELETE FROM ZPROPEN WHERE LFGJA = IT_DEL-LFGJA AND LFMON = IT_DEL-LFMON AND WERKS = IT_DEL-WERKS .
COMMIT WORK AND WAIT.
ENDLOOP.
ENDIF.
ENDFORM. " DELETE_PR_DATA