Start Routine

download Start Routine

If you can't read please download the document

description

SAP

Transcript of Start Routine

PROGRAM trans_routine. *---------------------------------------------------------------------* * CLASS routine DEFINITION *---------------------------------------------------------------------* * *---------------------------------------------------------------------* CLASS lcl_transform DEFINITION. PUBLIC SECTION. * Attributs DATA: p_check_master_data_exist TYPE RSODSOCHECKONLY READ-ONLY, *Instance for getting request runtime attributs; * Available information: Refer to methods of * interface 'if_rsbk_request_admintab_view' p_r_request TYPE REF TO if_rsbk_request_admintab_view READ-ONLY. PRIVATE SECTION. TYPE-POOLS: rsd, rstr. * * * * * * * * * * * * * * * * Rule specific types TYPES: BEGIN OF _ty_s_SC_1, Field: MBLNR Material Doc.. MBLNR TYPE C LENGTH Field: MJAHR Mat. Doc. Year. MJAHR TYPE N LENGTH Field: ZEILE Item. ZEILE TYPE N LENGTH Field: BSART Document Type. BSART TYPE C LENGTH Field: PSTYP Item category. PSTYP TYPE C LENGTH Field: EBELN Purchasing Doc.. EBELN TYPE C LENGTH Field: EBELP Item. EBELP TYPE N LENGTH Field: WERKS Plant. WERKS TYPE C LENGTH Field: BUDAT Posting Date. BUDAT TYPE D, Field: BWART Movement Type. BWART TYPE C LENGTH Field: LIFNR Vendor. LIFNR TYPE C LENGTH Field: KUNNR Customer. KUNNR TYPE C LENGTH Field: XAUTO Auto. created. XAUTO TYPE C LENGTH Field: MATNR Material. MATNR TYPE C LENGTH Field: CHARG Batch. CHARG TYPE C LENGTH

10, 4, 4, 4, 1, 10, 5, 4,

3, 10, 10, 1, 18, 10,

* * * * * * * * * * * * * * * * * * * * * * * * *

Field: SHKZG Debit/Credit. SHKZG TYPE C LENGTH 1, Field: RESWK Supplying plant. RESWK TYPE C LENGTH 4, Field: WEMPF Recipient. WEMPF TYPE C LENGTH 12, Field: MENGE Quantity. MENGE TYPE P LENGTH 7 DECIMALS 3, Field: MEINS Base Unit. MEINS TYPE C LENGTH 3, Field: DMBTR Amount in LC. DMBTR TYPE P LENGTH 7 DECIMALS 2, Field: WAERS Currency. WAERS TYPE C LENGTH 5, Field: SMBLN Material Doc.. SMBLN TYPE C LENGTH 10, Field: SMBLP Item. SMBLP TYPE N LENGTH 4, Field: SJAHR Mat. Doc. Year. SJAHR TYPE N LENGTH 4, Field: LINE_ID Line ID. LINE_ID TYPE N LENGTH 6, Field: PARENT_ID Parent ID. PARENT_ID TYPE N LENGTH 6, Field: QTY_BEY_90 Quantity. QTY_BEY_90 TYPE P LENGTH 7 DECIMALS 3, Field: QTY_WTN_90 Quantity. QTY_WTN_90 TYPE P LENGTH 7 DECIMALS 3, Field: CLAIM_AMT Amount in LC. CLAIM_AMT TYPE P LENGTH 7 DECIMALS 2, Field: DES_AMOUNT Amount in LC. DES_AMOUNT TYPE P LENGTH 7 DECIMALS 2, Field: REC_AMOUNT Amount in LC. REC_AMOUNT TYPE P LENGTH 7 DECIMALS 2, Field: DES_QTY Quantity. DES_QTY TYPE P LENGTH 7 DECIMALS 3, Field: REC_QTY Quantity. REC_QTY TYPE P LENGTH 7 DECIMALS 3, Field: REC_DATE Posting Date. REC_DATE TYPE D, Field: DES_DATE Posting Date. DES_DATE TYPE D, Field: UMWRK Receiving plant. UMWRK TYPE C LENGTH 4, Field: PRCTR Profit Center. PRCTR TYPE C LENGTH 10, Field: PPRCTR Partner pr.ctr. PPRCTR TYPE C LENGTH 10, Field: RECORD Record Number. RECORD TYPE RSARECORD, END OF _ty_s_SC_1. TYPES: _ty_t_SC_1 TYPE STANDARD TABLE OF _ty_s_SC_1 WITH NON-UNIQUE DEFAULT KEY.

*$*$ begin of global - insert your declaration only below this line *-* ... "insert your code here TYPES : BEGIN OF ITABTYPE, MBLNR TYPE /BI0/OIMAT_DOC, MJAHR TYPE /BI0/OIDOC_YEAR,

ZEILE TYPE /BI0/OIMAT_ITEM, SMBLN TYPE /BI0/OIREF_DOC_NR, SMBLP TYPE /BIC/OIZREFITEM, SJAHR TYPE /BIC/OIZREFYEAR, SHKZG TYPE /BI0/OIDCINDIC, BWART TYPE /BI0/OIMOVE_TYPE, DEL_IND(1) TYPE C, END OF ITABTYPE. * * * * * * TYPES : BEGIN OF _ty_s_TG_1, /BI0/0ISSVALSTCK TYPE /BI0/OIISSVALSTCK, /BI0/0RECVALSTCK TYPE /BI0/OIRECVALSTCK, END OF _ty_s_TG_1. TYPES: _ty_t_TG_1 TYPE STANDARD TABLE OF _ty_s_TG_1 WITH NON-UNIQUE DEFAULT KEY. DATA : ITAB TYPE STANDARD TABLE OF ITABTYPE WITH KEY MBLNR MJAHR ZEILE, WA_ITAB1 LIKE LINE OF ITAB, WA_ITAB2 LIKE LINE OF ITAB, V_SYTABIX1 TYPE SY-TABIX, V_SYTABIX2 TYPE SY-TABIX. *$*$ end of global - insert your declaration only before this line METHODS start_routine IMPORTING request type rsrequest datapackid type rsdatapid segid type rsbk_segid EXPORTING monitor type rstr_ty_t_monitors CHANGING SOURCE_PACKAGE type _ty_t_SC_1 RAISING cx_rsrout_abort cx_rsbk_errorcount. METHODS inverse_start_routine IMPORTING i_th_fields_outbound TYPE rstran_t_field_inv I_R_SELSET_OUTBOUND TYPE REF TO CL_RSMDS_SET i_is_main_selection TYPE rs_bool i_r_selset_outbound_complete TYPE REF TO cl_rsmds_set i_r_universe_inbound TYPE REF TO CL_RSMDS_UNIVERSE CHANGING c_th_fields_inbound TYPE rstran_t_field_inv c_r_selset_inbound TYPE REF TO CL_RSMDS_SET c_exact TYPE rs_bool. ENDCLASS. "routine DEFINITION *$*$ begin of 2nd part global - insert your code only below this line * ... "insert your code here *-*

*$*$ end of 2nd part global - insert your code only before this line

*

*---------------------------------------------------------------------* * CLASS routine IMPLEMENTATION *---------------------------------------------------------------------* * *---------------------------------------------------------------------* CLASS lcl_transform IMPLEMENTATION. *----------------------------------------------------------------------* * Method start_routine *----------------------------------------------------------------------* * Calculation of source package via start routine *----------------------------------------------------------------------* * source package *----------------------------------------------------------------------* METHOD start_routine. *=== Segments === FIELD-SYMBOLS: DATA: MONITOR_REC TYPE _ty_s_SC_1. TYPE rstmonitor. *-*

*$*$ begin of routine - insert your code only below this line ... "insert your code here *-- fill table "MONITOR" with values of structure "MONITOR_REC" *- to make monitor entries ... "to cancel the update process * raise exception type CX_RSROUT_ABORT. DATA : * RESULT_PACKAGE TYPE _TY_t_TG_1, SOURCE_PACKAGE1 TYPE _ty_t_SC_1, SOURCE_PACKAGE2 TYPE _ty_t_SC_1, SOURCE_PACKAGE3 TYPE _ty_t_SC_1, SOURCE_PACKAGE4 TYPE _ty_t_SC_1, WA_SOURCE_PACKAGE TYPE _TY_S_SC_1, WA_SOURCE_PACKAGE1 TYPE _TY_S_SC_1, WA_SOURCE_PACKAGE2 TYPE _TY_S_SC_1, WA_SOURCE_PACKAGE3 TYPE _TY_S_SC_1, WA_SOURCE_PACKAGE4 TYPE _TY_S_SC_1, V_ISSUE_RATE TYPE P LENGTH 7 DECIMALS 2, * WA_RESULT_PACKAGE TYPE _TY_S_TG_1, V_SYTABIX TYPE SY-TABIX, V_DATE TYPE D, V_DATE1 TYPE D. DATA : V_DAYS TYPE TFMATAGE. ** ** ** ** ** ** ** ** ** ** ** DELETE SOURCE_PACKAGE WHERE ( BWART = '101' OR BWART = '102' ) AND ( RESWK = 'DP39' OR RESWK = 'DP15' OR RESWK = 'DP27' OR RESWK = 'DP41' OR RESWK = 'UN01' OR RESWK = 'KOSM' OR RESWK = 'HO00' ). DELETE SOURCE_PACKAGE WHERE ( BWART = '641' OR BWART = '642' OR BWART = '643' OR BWART = '644' ) AND RESWK 'DP39' AND RESWK 'DP15' AND RESWK 'DP27' AND RESWK 'DP41' AND RESWK 'UN01' AND RESWK 'KOSM' AND RESWK 'HO00'.

DELETE SOURCE_PACKAGE WHERE CHARG = SPACE OR LIFNR SPACE. SORT SOURCE_PACKAGE BY MJAHR WERKS WEMPF BUDAT MATNR CHARG ZEILE BWART DESCENDING BWART. LOOP AT SOURCE_PACKAGE INTO WA_SOURCE_PACKAGE. V_SYTABIX = SY-TABIX. IF ( WA_SOURCE_PACKAGE-SHKZG = 'S' OR WA_SOURCE_PACKAGE-SHKZG = 'H' ) AND WA_SOURCE_PACKAGE-SMBLN SPACE. DELETE SOURCE_PACKAGE WHERE MBLNR = WA_SOURCE_PACKAGE-SMBLN AND MJAHR = WA_SOURCE_PACKAGE-SJAHR AND ZEILE = WA_SOURCE_PACKAGE-SMBLP. DELETE SOURCE_PACKAGE INDEX V_SYTABIX. CONTINUE. ENDIF. IF WA_SOURCE_PACKAGE-SHKZG = 'S' AND WA_SOURCE_PACKAGE-WEMPF = ''. WA_SOURCE_PACKAGE-WEMPF = WA_SOURCE_PACKAGE-WERKS. ENDIF. IF ( WA_SOURCE_PACKAGE-RESWK = 'DP39' OR WA_SOURCE_PACKAGE-RESWK = 'DP15' OR WA_SOURCE_PACKAGE-RESWK = 'DP27' OR WA_SOURCE_PACKAGE-RESWK = 'DP41' OR WA_SOURCE_PACKAGE-RESWK = 'UN01' OR WA_SOURCE_PACKAGE-RESWK = 'KOSM' OR WA_SOURCE_PACKAGE-RESWK = 'HO00' ) AND ( WA_SOURCE_PACKAGE-WEMPF = 'DP39' OR WA_SOURCE_PACKAGE-WEMPF = 'DP15' OR WA_SOURCE_PACKAGE-WEMPF = 'DP27' OR WA_SOURCE_PACKAGE-WEMPF = 'DP41' OR WA_SOURCE_PACKAGE-WEMPF = 'UN01' OR WA_SOURCE_PACKAGE-WEMPF = 'KOSM' OR WA_SOURCE_PACKAGE-WEMPF = 'HO00' ). DELETE SOURCE_PACKAGE INDEX V_SYTABIX. CONTINUE. ENDIF. IF WA_SOURCE_PACKAGE-SHKZG = 'S'. WA_SOURCE_PACKAGE-REC_QTY = WA_SOURCE_PACKAGE-REC_QTY. WA_SOURCE_PACKAGE-REC_AMOUNT = WA_SOURCE_PACKAGE-REC_AMOUNT. WA_SOURCE_PACKAGE-REC_DATE = WA_SOURCE_PACKAGE-REC_DATE. WA_SOURCE_PACKAGE-DES_QTY = 0. WA_SOURCE_PACKAGE-DES_AMOUNT = 0. WA_SOURCE_PACKAGE-DES_DATE = '00000000'. WA_SOURCE_PACKAGE-QTY_BEY_90 = 0. WA_SOURCE_PACKAGE-QTY_WTN_90 = 0. WA_SOURCE_PACKAGE-CLAIM_AMT = 0. ELSE. WA_SOURCE_PACKAGE-DES_QTY = WA_SOURCE_PACKAGE-DES_QTY. WA_SOURCE_PACKAGE-DES_AMOUNT = WA_SOURCE_PACKAGE-DES_AMOUNT. WA_SOURCE_PACKAGE-DES_DATE = WA_SOURCE_PACKAGE-DES_DATE. WA_SOURCE_PACKAGE-REC_QTY = 0. WA_SOURCE_PACKAGE-QTY_BEY_90 = 0. WA_SOURCE_PACKAGE-QTY_WTN_90 = 0. WA_SOURCE_PACKAGE-CLAIM_AMT = 0. WA_SOURCE_PACKAGE-REC_AMOUNT = 0. WA_SOURCE_PACKAGE-REC_DATE = '00000000'.

ENDIF. MODIFY SOURCE_PACKAGE FROM WA_SOURCE_PACKAGE. CLEAR V_SYTABIX. ENDLOOP. SOURCE_PACKAGE1[] = SOURCE_PACKAGE[]. SOURCE_PACKAGE2[] = SOURCE_PACKAGE[]. DELETE SOURCE_PACKAGE1 WHERE SHKZG = 'S'. "Issue DELETE SOURCE_PACKAGE2 WHERE SHKZG = 'H'. "Temporary Receipt SOURCE_PACKAGE3[] = SOURCE_PACKAGE2[]. "Original Receipt SOURCE_PACKAGE4[] = SOURCE_PACKAGE1[]. "Temporary Original Issue SORT SOURCE_PACKAGE3 BY RESWK WEMPF MATNR CHARG BUDAT. SORT SOURCE_PACKAGE4 BY RESWK WEMPF MATNR CHARG BUDAT. LOOP AT SOURCE_PACKAGE3 INTO WA_SOURCE_PACKAGE3. READ TABLE SOURCE_PACKAGE4 INTO WA_SOURCE_PACKAGE4 WITH KEY RESWK = WA_SOURCE_PACKAGE3-RESWK WEMPF = WA_SOURCE_PACKAGE3-WEMPF MATNR = WA_SOURCE_PACKAGE3-MATNR CHARG = WA_SOURCE_PACKAGE3-CHARG. IF SY-SUBRC = 0. V_SYTABIX = SY-TABIX. IF WA_SOURCE_PACKAGE3-MENGE < WA_SOURCE_PACKAGE4-MENGE. WA_SOURCE_PACKAGE4-MENGE = WA_SOURCE_PACKAGE4-MENGE WA_SOURCE_PACKAGE3-MENGE. WA_SOURCE_PACKAGE3-REC_AMOUNT = ( WA_SOURCE_PACKAGE4-DES_AMOUNT / WA_SOURCE_PACKAGE4-DES_QTY ) * WA_SOURCE_PACKAGE3-REC_QTY. WA_SOURCE_PACKAGE4-DES_AMOUNT = WA_SOURCE_PACKAGE4-DES_AMOUNT WA_SOURCE_PACKAGE3-REC_AMOUNT. MODIFY SOURCE_PACKAGE4 FROM WA_SOURCE_PACKAGE4 INDEX V_SYTABIX TRANSPORTING MENGE DES_AMOUNT. ELSE. DELETE SOURCE_PACKAGE4 INDEX V_SYTABIX. ENDIF. IF WA_SOURCE_PACKAGE3-REC_AMOUNT > 0. WA_SOURCE_PACKAGE3-CLAIM_AMT = ( WA_SOURCE_PACKAGE3-REC_AMOUNT * ( 1 / 100 ) ). ENDIF. MODIFY SOURCE_PACKAGE3 FROM WA_SOURCE_PACKAGE3 TRANSPORTING REC_AMOUNT CLAIM_AMT. ENDIF. ENDLOOP. SORT SOURCE_PACKAGE1 BY RESWK MATNR CHARG BUDAT. SORT SOURCE_PACKAGE2 BY WEMPF MATNR CHARG BUDAT. LOOP AT SOURCE_PACKAGE1 INTO WA_SOURCE_PACKAGE1.

** ** ** **

IF WA_SOURCE_PACKAGE1-DES_QTY > 0. V_ISSUE_RATE = WA_SOURCE_PACKAGE1-DES_AMOUNT / WA_SOURCE_PACKAGE1-DES_QTY. ENDIF. V_DATE = WA_SOURCE_PACKAGE1-BUDAT. READ TABLE SOURCE_PACKAGE2 INTO WA_SOURCE_PACKAGE2 WITH KEY WEMPF = WA_SOURCE_PACKAGE1-RESWK MATNR = WA_SOURCE_PACKAGE1-MATNR CHARG = WA_SOURCE_PACKAGE1-CHARG. IF SY-SUBRC = 0. V_SYTABIX = SY-TABIX. V_DATE1 = WA_SOURCE_PACKAGE2-BUDAT. WA_SOURCE_PACKAGE1-REC_DATE = V_DATE1. IF WA_SOURCE_PACKAGE1-MENGE < WA_SOURCE_PACKAGE2-MENGE. WA_SOURCE_PACKAGE2-MENGE = WA_SOURCE_PACKAGE2-MENGE WA_SOURCE_PACKAGE1-MENGE. MODIFY SOURCE_PACKAGE2 FROM WA_SOURCE_PACKAGE2 INDEX V_SYTABIX TRANSPORTING MENGE. ELSE. DELETE SOURCE_PACKAGE2 INDEX V_SYTABIX. ENDIF. CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS' EXPORTING I_DATE_FROM = V_DATE I_DATE_TO = V_DATE1 IMPORTING E_DAYS = V_DAYS.

ENDIF. IF V_DAYS LE 10. WA_SOURCE_PACKAGE1-QTY_BEY_90 = WA_SOURCE_PACKAGE1-DES_QTY. ******IF WA_SOURCE_PACKAGE1-WEMPF = 'DP15' OR WA_SOURCE_PACKAGE1-WEMPF ****** = 'DP39' OR ******WA_SOURCE_PACKAGE1-WEMPF = 'DP27' OR WA_SOURCE_PACKAGE1-WEMPF ****** = 'UN01' OR ****** WA_SOURCE_PACKAGE1-WEMPF = 'KOSM'. ****** WA_SOURCE_PACKAGE1-CLAIM_AMT = 0. ****** ELSE. IF WA_SOURCE_PACKAGE1-DES_AMOUNT > 0. WA_SOURCE_PACKAGE1-CLAIM_AMT = ( WA_SOURCE_PACKAGE1-DES_AMOUNT * ( 1 / 100 ) ) * -1. ENDIF. ELSE. WA_SOURCE_PACKAGE1-QTY_WTN_90 = WA_SOURCE_PACKAGE1-DES_QTY. WA_SOURCE_PACKAGE1-CLAIM_AMT = 0. ENDIF. MODIFY SOURCE_PACKAGE1 FROM WA_SOURCE_PACKAGE1 TRANSPORTING QTY_BEY_90 QTY_WTN_90 CLAIM_AMT REC_DATE. ** ** ** ** ** ** ** ** ** ** READ TABLE SOURCE_PACKAGE3 INTO WA_SOURCE_PACKAGE3 WITH KEY WEMPF = WA_SOURCE_PACKAGE1-RESWK MATNR = WA_SOURCE_PACKAGE1-MATNR CHARG = WA_SOURCE_PACKAGE1-CHARG. IF SY-SUBRC = 0. V_SYTABIX = SY-TABIX. WA_SOURCE_PACKAGE3-REC_AMOUNT = V_ISSUE_RATE * WA_SOURCE_PACKAGE3-REC_QTY. IF WA_SOURCE_PACKAGE3-REC_AMOUNT > 0. WA_SOURCE_PACKAGE3-CLAIM_AMT = (

** ** ** ** ** **

WA_SOURCE_PACKAGE3-REC_AMOUNT * ( 1 / 100 ) ). ENDIF. MODIFY SOURCE_PACKAGE3 FROM WA_SOURCE_PACKAGE3 INDEX V_SYTABIX TRANSPORTING REC_AMOUNT CLAIM_AMT. ENDIF. CLEAR : WA_SOURCE_PACKAGE1, WA_SOURCE_PACKAGE2, WA_SOURCE_PACKAGE3 , V_ISSUE_RATE. ENDLOOP. APPEND LINES OF SOURCE_PACKAGE1 TO SOURCE_PACKAGE3. REFRESH SOURCE_PACKAGE[]. SOURCE_PACKAGE[] = SOURCE_PACKAGE3[]. REFRESH SOURCE_PACKAGE1[]. REFRESH SOURCE_PACKAGE2[]. SOURCE_PACKAGE1[] = SOURCE_PACKAGE[]. SOURCE_PACKAGE2[] = SOURCE_PACKAGE[]. DELETE SOURCE_PACKAGE1 WHERE WEMPF AND WEMPF AND WEMPF AND WEMPF AND WEMPF AND WEMPF AND WEMPF DELETE SOURCE_PACKAGE2 WHERE AND AND AND AND AND AND RESWK RESWK RESWK RESWK RESWK RESWK RESWK

'DP39' 'DP15' 'DP27' 'DP41' 'UN01' 'KOSM' 'HO00'. 'DP39' 'DP15' 'DP27' 'DP41' 'UN01' 'KOSM' 'HO00'.

APPEND LINES OF SOURCE_PACKAGE1 TO SOURCE_PACKAGE2. REFRESH SOURCE_PACKAGE[]. SOURCE_PACKAGE[] = SOURCE_PACKAGE2[]. *$*$ end of routine - insert your code only before this line *-* ENDMETHOD. "start_routine *----------------------------------------------------------------------* * Inverse method inverse_start_routine *----------------------------------------------------------------------* * This subroutine needs to be implemented only for direct access * (for better performance) and for the Report/Report Interface * (drill through). * The inverse routine should transform a projection and * a selection for the target to a projection and a selection * for the source, respectively. * If the implementation remains empty all fields are filled and * all values are selected. *----------------------------------------------------------------------* * Customer comment: *----------------------------------------------------------------------* METHOD inverse_start_routine. * IMPORTING

* * * * * * * *

i_r_selset_outbound i_th_fields_outbound i_r_selset_outbound_complete i_r_universe_inbound CHANGING c_r_selset_inbound c_th_fields_inbound c_exact

TYPE TYPE TYPE TYPE

REF TO HASHED REF TO REF TO

cl_rsmds_set TABLE cl_rsmds_set cl_rsmds_universe

TYPE REF TO cl_rsmds_set TYPE HASHED TABLE TYPE rs_bool

*$*$ begin of inverse routine - insert your code only below this line*-* ... "insert your code here *$*$ end of inverse routine - insert your code only before this line *-* ENDMETHOD. ENDCLASS. "inverse_start_routine "routine IMPLEMENTATION