Вы находитесь на странице: 1из 9

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: <SOURCE_FIELDS> 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

Вам также может понравиться