0% found this document useful (0 votes)
67 views22 pages

SAP ABAP Class for Data Transformation

This document defines a class routine for a transformation program. It includes definitions for data structures and types used by the class, including structures for storing information objects and fields relevant to the rule context. The class will utilize these structures and types to perform transformations as part of the program.

Uploaded by

Ega Adityawan
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
67 views22 pages

SAP ABAP Class for Data Transformation

This document defines a class routine for a transformation program. It includes definitions for data structures and types used by the class, including structures for storing information objects and fields relevant to the rule context. The class will utilize these structures and types to perform transformations as part of the program.

Uploaded by

Ega Adityawan
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

PROGRAM trans_routine.

*---------------------------------------------------------------------*
*
CLASS routine DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS lcl_transform DEFINITION.
PUBLIC SECTION.
* Attributs
DATA:
*Rule context
p_curr_rule
TYPE cl_rstran_runtime_exe=>ty_s_rule_context READ-ONLY,
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,
InfoObject: 0FISCPER Fiscal year / period.
FISCPER
TYPE /BI0/OIFISCPER,
InfoObject: 0FISCVARNT Fiscal year variant.
FISCVARNT
TYPE /BI0/OIFISCVARNT,
InfoObject: 0FISCYEAR Fiscal year.
FISCYEAR
TYPE /BI0/OIFISCYEAR,
InfoObject: 0FISCPER3 Posting period.
FISCPER3
TYPE /BI0/OIFISCPER3,
InfoObject: 0CURRENCY Currency key.
CURRENCY
TYPE /BI0/OICURRENCY,
InfoObject: 0UNIT Unit of measure.
UNIT
TYPE /BI0/OIUNIT,
InfoObject: 0COSTCENTER Cost Center.
COSTCENTER
TYPE /BI0/OICOSTCENTER,
InfoObject: 0COSTELMNT Cost Element.
COSTELMNT
TYPE /BI0/OICOSTELMNT,
InfoObject: 0CO_AREA Controlling area.
CO_AREA
TYPE /BI0/OICO_AREA,
InfoObject: 0CURTYPE Currency Type.
CURTYPE
TYPE /BI0/OICURTYPE,
InfoObject: 0METYPE Key Figure Type.
METYPE
TYPE /BI0/OIMETYPE,
InfoObject: 0VERSION Version.
VERSION
TYPE /BI0/OIVERSION,
InfoObject: 0VTDETAIL Detailing the value type.
VTDETAIL
TYPE /BI0/OIVTDETAIL,
InfoObject: 0VTYPE Value Type for Reporting.

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

VTYPE
TYPE /BI0/OIVTYPE,
InfoObject: 0DB_CR_IND Sender/Receiver Indicator.
DB_CR_IND
TYPE /BI0/OIDB_CR_IND,
InfoObject: 0VALUATION Valuation view.
VALUATION
TYPE /BI0/OIVALUATION,
InfoObject: 0PIOBJSV Partner Object Type.
PIOBJSV
TYPE /BI0/OIPIOBJSV,
InfoObject: 0PIOVALUE Partner object.
PIOVALUE
TYPE /BI0/OIPIOVALUE,
InfoObject: 0VTSTAT Statistics indicator for value type.
VTSTAT
TYPE /BI0/OIVTSTAT,
InfoObject: 0PART_ACTTY Activity Type of Partner Cost Center.
PART_ACTTY
TYPE /BI0/OIPART_ACTTY,
InfoObject: 0PART_CCTR Partner Cost Center.
PART_CCTR
TYPE /BI0/OIPART_CCTR,
InfoObject: 0PART_COORD Partner Order.
PART_COORD
TYPE /BI0/OIPART_COORD,
InfoObject: 0CHRT_ACCTS Chart of accounts.
CHRT_ACCTS
TYPE /BI0/OICHRT_ACCTS,
InfoObject: 0CREDITOR Account number of supplier/vendor.
CREDITOR
TYPE /BI0/OICREDITOR,
InfoObject: 0DEBITOR Customer Number.
DEBITOR
TYPE /BI0/OIDEBITOR,
InfoObject: 0GL_ACCOUNT G/L Account.
GL_ACCOUNT
TYPE /BI0/OIGL_ACCOUNT,
InfoObject: 0PART_WBSEL Partner WBS Element.
PART_WBSEL
TYPE /BI0/OIPART_WBSEL,
InfoObject: 0PART_ABCPR Partner Business Process.
PART_ABCPR
TYPE /BI0/OIPART_ABCPR,
InfoObject: 0DATAORIGIN Data Source.
DATAORIGIN
TYPE /BI0/OIDATAORIGIN,
InfoObject: 0CO_REPLINE Report Row (Cost Element).
CO_REPLINE
TYPE /BI0/OICO_REPLINE,
InfoObject: 0FM_AREA Financial Management Area.
FM_AREA
TYPE /BI0/OIFM_AREA,
InfoObject: 0FUND Fund.
FUND
TYPE /BI0/OIFUND,
InfoObject: 0FUNC_AREA Functional area.
FUNC_AREA
TYPE /BI0/OIFUNC_AREA,
InfoObject: 0GRANT_NBR Grant.
GRANT_NBR
TYPE /BI0/OIGRANT_NBR,
InfoObject: 0PFUNC_AREA Partner Functional Area.
PFUNC_AREA
TYPE /BI0/OIPFUNC_AREA,
InfoObject: 0PFUND Partner Fund.
PFUND
TYPE /BI0/OIPFUND,
InfoObject: 0PGRANT_NBR Partner Grant.
PGRANT_NBR
TYPE /BI0/OIPGRANT_NBR,
InfoObject: 0AMOUNT Amount.
AMOUNT
TYPE /BI0/OIAMOUNT,
InfoObject: 0QUANTITY Quantity.
QUANTITY
TYPE /BI0/OIQUANTITY,
InfoObject: 0PU_BDGTID Budget Period.
PU_BDGTID
TYPE /BI0/OIPU_BDGTID,
InfoObject: 0PBDGTID Partner Budget Period.
PBDGTID
TYPE /BI0/OIPBDGTID,
Field: RECORD.
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.


TYPES:
BEGIN OF _ty_s_TG_1,
InfoObject: 0CHNGID Change run ID.
CHNGID
TYPE /BI0/OICHNGID,
InfoObject: 0RECORDTP Record type.
RECORDTP
TYPE /BI0/OIRECORDTP,
InfoObject: 0REQUID Request ID.
REQUID
TYPE /BI0/OIREQUID,
InfoObject: 0CUSTOMER Customer number.
CUSTOMER
TYPE /BI0/OICUSTOMER,
InfoObject: 0COMP_CODE Company code.
COMP_CODE
TYPE /BI0/OICOMP_CODE,
InfoObject: 0COORDER Order Number.
COORDER
TYPE /BI0/OICOORDER,
InfoObject: 0CO_AREA Controlling area.
CO_AREA
TYPE /BI0/OICO_AREA,
InfoObject: 0CURTYPE Currency Type.
CURTYPE
TYPE /BI0/OICURTYPE,
InfoObject: 0DISTR_CHAN Distribution Channel.
DISTR_CHAN
TYPE /BI0/OIDISTR_CHAN,
InfoObject: 0DIVISION Division.
DIVISION
TYPE /BI0/OIDIVISION,
InfoObject: 0DOC_NUMBER Sales document.
DOC_NUMBER
TYPE /BI0/OIDOC_NUMBER,
InfoObject: 0G_AVV111 Pendapatan.
G_AVV111
TYPE /BI0/OIG_AVV111,
InfoObject: 0G_AVV112 Retur.
G_AVV112
TYPE /BI0/OIG_AVV112,
InfoObject: 0G_AVV113 Potongan.
G_AVV113
TYPE /BI0/OIG_AVV113,
InfoObject: 0G_AVV211 BPL Pegawai.
G_AVV211
TYPE /BI0/OIG_AVV211,
InfoObject: 0G_AVV212 BPL [Link].
G_AVV212
TYPE /BI0/OIG_AVV212,
InfoObject: 0CURRENCY Currency key.
CURRENCY
TYPE /BI0/OICURRENCY,
InfoObject: 0FISCPER Fiscal year / period.
FISCPER
TYPE /BI0/OIFISCPER,
InfoObject: 0FISCVARNT Fiscal year variant.
FISCVARNT
TYPE /BI0/OIFISCVARNT,
InfoObject: 0FISCYEAR Fiscal year.
FISCYEAR
TYPE /BI0/OIFISCYEAR,
InfoObject: 0G_AVV213 BPL Persediaan.
G_AVV213
TYPE /BI0/OIG_AVV213,
InfoObject: 0G_AVV214 BPL Sewa.
G_AVV214
TYPE /BI0/OIG_AVV214,
InfoObject: 0G_AVV215 BPL Umum.
G_AVV215
TYPE /BI0/OIG_AVV215,
InfoObject: 0G_AVV216 BPL [Link].
G_AVV216
TYPE /BI0/OIG_AVV216,
InfoObject: 0G_AVV217 BPL [Link].
G_AVV217
TYPE /BI0/OIG_AVV217,
InfoObject: 0G_AVV218 BPL Amortisasi.
G_AVV218
TYPE /BI0/OIG_AVV218,
InfoObject: 0G_AVV219 BPL Lain.
G_AVV219
TYPE /BI0/OIG_AVV219,
InfoObject: 0G_AVV221 BPTL Pegawai.
G_AVV221
TYPE /BI0/OIG_AVV221,
InfoObject: 0G_AVV222 BPTL [Link].

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

G_AVV222
InfoObject:
G_AVV223
InfoObject:
G_AVV224
InfoObject:
G_AVV225
InfoObject:
G_AVV226
InfoObject:
G_AVV227
InfoObject:
G_AVV228
InfoObject:
G_AVV229
InfoObject:
G_AVV311
InfoObject:
G_AVV312
InfoObject:
G_AVV313
InfoObject:
G_AVV314
InfoObject:
G_AVV315
InfoObject:
G_AVV316
InfoObject:
G_AVV410
InfoObject:
G_AVV411
InfoObject:
G_AVV412
InfoObject:
G_AVV413
InfoObject:
G_AVV414
InfoObject:
G_CWW001
InfoObject:
G_CWW002
InfoObject:
G_CWW003
InfoObject:
G_CWW004
InfoObject:
G_CWW005
InfoObject:
G_CWW006
InfoObject:
G_CWW007
InfoObject:
G_CWW008
InfoObject:
G_CWW009
InfoObject:
G_QVV100
InfoObject:
G_UVV100
InfoObject:

TYPE /BI0/OIG_AVV222,
0G_AVV223 BPTL Persediaan.
TYPE /BI0/OIG_AVV223,
0G_AVV224 BPTL Sewa.
TYPE /BI0/OIG_AVV224,
0G_AVV225 BPTL Umum.
TYPE /BI0/OIG_AVV225,
0G_AVV226 BPTL [Link].
TYPE /BI0/OIG_AVV226,
0G_AVV227 BPTL [Link].
TYPE /BI0/OIG_AVV227,
0G_AVV228 BPTL Amortisasi.
TYPE /BI0/OIG_AVV228,
0G_AVV229 BPTL Lain.
TYPE /BI0/OIG_AVV229,
0G_AVV311 GA Pegawai.
TYPE /BI0/OIG_AVV311,
0G_AVV312 GA Pem. Aset.
TYPE /BI0/OIG_AVV312,
0G_AVV313 GA Persediaan.
TYPE /BI0/OIG_AVV313,
0G_AVV314 GA Sewa.
TYPE /BI0/OIG_AVV314,
0G_AVV315 GA Umum.
TYPE /BI0/OIG_AVV315,
0G_AVV316 GA Peny Aset & Amort.
TYPE /BI0/OIG_AVV316,
0G_AVV410 Overhead Ktr Pusat.
TYPE /BI0/OIG_AVV410,
0G_AVV411 Pendapatan Lain.
TYPE /BI0/OIG_AVV411,
0G_AVV412 Beban Lain.
TYPE /BI0/OIG_AVV412,
0G_AVV413 Income/Expense Tax.
TYPE /BI0/OIG_AVV413,
0G_AVV414 Beban Project.
TYPE /BI0/OIG_AVV414,
0G_CWW001 ZChannel.
TYPE /BI0/OIG_CWW001,
0G_CWW002 ZBusiness Unit.
TYPE /BI0/OIG_CWW002,
0G_CWW003 ZBusiness Product.
TYPE /BI0/OIG_CWW003,
0G_CWW004 ZBusiness Line.
TYPE /BI0/OIG_CWW004,
0G_CWW005 ZConcession line.
TYPE /BI0/OIG_CWW005,
0G_CWW006 ZLocation ID.
TYPE /BI0/OIG_CWW006,
0G_CWW007 ZTipe Pesawat.
TYPE /BI0/OIG_CWW007,
0G_CWW008 ZFlight Number.
TYPE /BI0/OIG_CWW008,
0G_CWW009 ZFrom_To.
TYPE /BI0/OIG_CWW009,
0G_QVV100 Jumlah Produksi.
TYPE /BI0/OIG_QVV100,
0G_UVV100 Un Jumlah Produksi.
TYPE /BI0/OIG_UVV100,
0MATERIAL Material.

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

MATERIAL
TYPE /BI0/OIMATERIAL,
InfoObject: 0PROFIT_CTR Profit Center.
PROFIT_CTR
TYPE /BI0/OIPROFIT_CTR,
InfoObject: 0REC_TYPE Transaction Type.
REC_TYPE
TYPE /BI0/OIREC_TYPE,
InfoObject: 0VALUATION Valuation view.
VALUATION
TYPE /BI0/OIVALUATION,
InfoObject: 0VERSION Version.
VERSION
TYPE /BI0/OIVERSION,
InfoObject: 0VTYPE Value Type for Reporting.
VTYPE
TYPE /BI0/OIVTYPE,
InfoObject: 0SALESORG Sales Organization.
SALESORG
TYPE /BI0/OISALESORG,
InfoObject: 0CALMONTH Calendar year/month.
CALMONTH
TYPE /BI0/OICALMONTH,
InfoObject: 0CALYEAR Calendar year.
CALYEAR
TYPE /BI0/OICALYEAR,
InfoObject: 0CALQUARTER Calendar year/quarter.
CALQUARTER
TYPE /BI0/OICALQUARTER,
InfoObject: 0CALQUART1 Quarter.
CALQUART1
TYPE /BI0/OICALQUART1,
InfoObject: 0FISCPER3 Posting period.
FISCPER3
TYPE /BI0/OIFISCPER3,
InfoObject: 0CO_DOC_NO CO Document Number.
CO_DOC_NO
TYPE /BI0/OICO_DOC_NO,
InfoObject: ZVV220 BPL Pajak.
/BIC/ZVV220
TYPE /BIC/OIZVV220,
InfoObject: 0COSTELMNT Cost Element.
COSTELMNT
TYPE /BI0/OICOSTELMNT,
InfoObject: 0COSTCENTER Cost Center.
COSTCENTER
TYPE /BI0/OICOSTCENTER,
InfoObject: 0GL_ACCOUNT G/L Account.
GL_ACCOUNT
TYPE /BI0/OIGL_ACCOUNT,
InfoObject: 0CHRT_ACCTS Chart of accounts.
CHRT_ACCTS
TYPE /BI0/OICHRT_ACCTS,
InfoObject: ZREVLINE ZRevenue Line.
/BIC/ZREVLINE
TYPE /BIC/OIZREVLINE,
InfoObject: 0RE_FLW_TP Flow Type.
RE_FLW_TP
TYPE /BI0/OIRE_FLW_TP,
InfoObject: ZSOURCEDT Source AP1.
/BIC/ZSOURCEDT
TYPE /BIC/OIZSOURCEDT,
InfoObject: 0RENTOBJECT Rental Object.
RENTOBJECT
TYPE /BI0/OIRENTOBJECT,
InfoObject: 0RECONTRACT Contract.
RECONTRACT
TYPE /BI0/OIRECONTRACT,
InfoObject: 0BUSENTITY Business Entity.
BUSENTITY
TYPE /BI0/OIBUSENTITY,
InfoObject: ZLUAS01 Luas Unit.
/BIC/ZLUAS01
TYPE /BIC/OIZLUAS01,
InfoObject: 0MAINUSAGE Main Usage Type.
MAINUSAGE
TYPE /BI0/OIMAINUSAGE,
InfoObject: ZPRO_TYPE Property Type.
/BIC/ZPRO_TYPE
TYPE /BIC/OIZPRO_TYPE,
InfoObject: 0USAGETYPE Usage Type of Rental Unit.
USAGETYPE
TYPE /BI0/OIUSAGETYPE,
InfoObject: 0LOCFLOOR Location in Floor.
LOCFLOOR
TYPE /BI0/OILOCFLOOR,
InfoObject: 0PART_BLDG Part of Building.
PART_BLDG
TYPE /BI0/OIPART_BLDG,
InfoObject: 0AC_LEDGER Ledger.

*
*
*
*
*

AC_LEDGER
TYPE /BI0/OIAC_LEDGER,
InfoObject: 0AC_DOC_TYP Document type.
AC_DOC_TYP
TYPE /BI0/OIAC_DOC_TYP,
InfoObject: 0POST_KEY Posting key.
POST_KEY
TYPE /BI0/OIPOST_KEY,
InfoObject: 0HC_PCSCNT Number of Cases (PCS/DRG/LDF, etc.).
HC_PCSCNT
TYPE /BI0/OIHC_PCSCNT,
InfoObject: 0CRMA_IS_IC Indicator Interaction Record.
CRMA_IS_IC
TYPE /BI0/OICRMA_IS_IC,
Field: RECORD.
RECORD
TYPE RSARECORD,
END OF _ty_s_TG_1.
TYPES:
_ty_t_TG_1
TYPE STANDARD TABLE OF _ty_s_TG_1
WITH NON-UNIQUE DEFAULT KEY.

*$*$ begin of global - insert your declaration only below this line *-*
... "insert your code here
*$*$ end of global - insert your declaration only before this line *-*
METHODS
new_record__expert_routine
IMPORTING
log
type ref to cl_rsbm_log_cursor_step
source_segid
type rstran_segid
source_record
type sytabix
target_segid
type rstran_segid
EXPORTING
record_new
type sytabix.
METHODS
expert_routine
IMPORTING
request
datapackid
log
EXPORTING
RESULT_PACKAGE
CHANGING
SOURCE_PACKAGE

type rsrequest
type rsdatapid
type ref to cl_rsbm_log_cursor_step

METHODS
inverse_expert_routine
IMPORTING
i_th_fields_outbound
i_r_selset_outbound
i_r_universe_inbound
CHANGING
c_th_fields_inbound
c_r_selset_inbound
c_exact
ENDCLASS.
"routine

type _ty_t_TG_1
type _ty_t_SC_1.

TYPE rstran_t_field_inv
TYPE REF TO cl_rsmds_set
TYPE REF TO cl_rsmds_universe
TYPE rstran_t_field_inv
TYPE REF TO cl_rsmds_set
TYPE rs_bool.
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 expert_routine
*----------------------------------------------------------------------*
*
Calculation of result package via expert routine
*----------------------------------------------------------------------*
* -> package of source segments
* <- result package
*----------------------------------------------------------------------*
METHOD expert_routine.
*=== Segments ===
FIELD-SYMBOLS:
<SOURCE_FIELDS>

TYPE _ty_s_SC_1.

DATA:
RESULT_FIELDS

TYPE _ty_s_TG_1.

*$*$ begin of routine - insert


TYPES: BEGIN OF ty_data,
ZFISCPER
TYPE
ZPROFIT_CTR TYPE
ZRE_FLW_TP
TYPE
ZRENTOBJECT TYPE
ZCUSTOMER
TYPE
ZFISCYEAR
TYPE
ZCFORIGIN
TYPE
ZG_CWW001
TYPE
ZG_CWW002
TYPE
ZG_CWW003
TYPE
ZG_CWW004
TYPE
ZG_CWW005
TYPE
ZREVLINE
TYPE
ZCURRENCY
TYPE
ZUNITPROD
TYPE
ZQTYPROD
TYPE
ZVALUE_LC
TYPE
END OF ty_data,
BEGIN OF ty_data2,
ZFISCYEAR
TYPE
ZFISCPER
TYPE
ZPROFIT_CTR TYPE
ZCURTYPE
TYPE
ZVTYPE
TYPE
ZRE_FLW_TP
TYPE
ZCUSTOMER
TYPE
ZG_CWW001
TYPE
ZG_CWW002
TYPE
ZG_CWW003
TYPE
ZG_CWW004
TYPE
ZG_CWW005
TYPE
ZREVLINE
TYPE
ZCURRENCY
TYPE
ZG_UVV100
TYPE
ZG_AVV111
TYPE
ZG_QVV100
TYPE
END OF ty_data2.

your code only below this line


/BI0/OIFISCPER,
/BI0/OIPROFIT_CTR,
/BI0/OIRE_FLW_TP,
/BI0/OIRENTOBJECT,
/BI0/OICUSTOMER,
/BI0/OIFISCYEAR,
/BI0/OICFORIGIN,
/BI0/OIG_CWW001,
/BI0/OIG_CWW002,
/BI0/OIG_CWW003,
/BI0/OIG_CWW004,
/BI0/OIG_CWW005,
/BIC/OIZREVLINE,
/BI0/OICURRENCY,
/BIC/OIZUNITPROD,
/BIC/OIZQTYPROD,
/BI0/OIVALUE_LC,

/BI0/OIFISCYEAR,
/BI0/OIFISCPER,
/BI0/OIPROFIT_CTR,
/BI0/OICURTYPE,
/BI0/OIVTYPE,
/BI0/OIRE_FLW_TP,
/BI0/OICUSTOMER,
/BI0/OIG_CWW001,
/BI0/OIG_CWW002,
/BI0/OIG_CWW003,
/BI0/OIG_CWW004,
/BI0/OIG_CWW005,
/BIC/OIZREVLINE,
/BI0/OICURRENCY,
/BI0/OIG_UVV100,
/BI0/OIG_AVV111,
/BI0/OIG_QVV100,

*-*

TYPES:
BEGIN OF ty_alloc.
INCLUDE TYPE ty_data.
TYPES: COSTCENTER type /BI0/OICOSTCENTER,
KDALLOC
TYPE /BIC/OIZKDALLOC,
AMOUNT
TYPE /BI0/OIAMOUNT,
CURRENCY
TYPE /BI0/OICURRENCY,
COSTELMNT
TYPE /BI0/OICOSTELMNT,
VALFLDCE
TYPE /BIC/OIZVALFLDCE,
COMP_CODE
TYPE /BI0/OICOMP_CODE,
vtype
TYPE /BI0/OIVTYPE,
END OF ty_alloc.
TYPES:

BEGIN OF ty_alloc2.
INCLUDE TYPE ty_data2.
TYPES: COSTCENTER type /BI0/OICOSTCENTER,
KDALLOC
TYPE /BIC/OIZKDALLOC,
AMOUNT
TYPE /BI0/OIAMOUNT,
CURRENCY
TYPE /BI0/OICURRENCY,
COSTELMNT
TYPE /BI0/OICOSTELMNT,
VALFLDCE
TYPE /BIC/OIZVALFLDCE,
COMP_CODE
TYPE /BI0/OICOMP_CODE,
vtype
TYPE /BI0/OIVTYPE,
END OF ty_alloc2.
DATA: ta_source
ta_source2
ta_map1
ta_map2
ta_map3
ta_map4
ta_map5
t_range
t_data
t_data2
ta_alloc
ta_alloc2
ta_urai
ta_urai2
ta_package

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

TABLE OF _ty_s_SC_1,
TABLE OF _ty_s_SC_1,
TABLE OF /BIC/AZBWMAP0100,
TABLE OF /BIC/AZBWMAP0200,
TABLE OF /BIC/AZBWMAP0300,
TABLE OF /BIC/AZBWMAP0400,
TABLE OF /BIC/AZBWMAP0500,
rsdri_t_range,
TABLE OF ty_data,
TABLE OF ty_data2,
TABLE OF ty_alloc,
TABLE OF ty_alloc2,
TABLE OF ty_alloc,
TABLE OF ty_alloc2,
_ty_t_tg_1.

DATA: wa_source
wa_source2
wa_map1
wa_map2
wa_map3
wa_map4
wa_map5
wa_rem
wa_copa
wa_alloc
wa_alloc2

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

_ty_s_SC_1,
_ty_s_SC_1,
/BIC/AZBWMAP0100,
/BIC/AZBWMAP0200,
/BIC/AZBWMAP0300,
/BIC/AZBWMAP0400,
/BIC/AZBWMAP0500,
TY_DATA,
TY_DATA2,
ty_alloc,
ty_alloc2.

DATA: wl_infoprov
wl_infoprov2
t_th_sfc
t_th_sfk
t_first_call

TYPE
TYPE
TYPE
TYPE
TYPE

RSINFOPROV VALUE 'ZBWREV01',


RSINFOPROV VALUE 'ZCOPAC01',
RSDRI_TH_SFC,
RSDRI_TH_SFK,
RS_BOOL.

DATA: wa_s_sfc
wa_th_sfk
wa_range

TYPE RSDRI_S_SFC,
TYPE RSDRI_S_SFK,
TYPE rsdri_s_range.

DATA: v_year
v_flag1
v_idx
v_idx2
v_qty
v_amount
v_field

TYPE
TYPE
TYPE
TYPE
TYPE
TYPE
TYPE

gjahr,
c,
sytabix,
sytabix,
/BI0/OIG_QVV100,
/BI0/OIG_AVV111,
c LENGTH 30.

FIELD-SYMBOLS: <fs_alloc> like LINE OF ta_alloc,


<fs_alloc2> like LINE OF ta_alloc2,
<ls_field> TYPE any.
CONSTANTS: c_COMP_CODE TYPE BUKRS VALUE '1000'.
SELECT *
FROM /BIC/AZBWMAP0100
INTO TABLE ta_map1.
SORT ta_map1 by /BIC/ZCCSENDFR.
SELECT *
from /BIC/AZBWMAP0200
INTO TABLE ta_map2.
SORT ta_map1 by /BIC/ZKDALLOC.
SELECT *
FROM /BIC/AZBWMAP0300
INTO TABLE ta_map3.
delete ta_map3 WHERE /BIC/ZSTATALOC is INITIAL.
SORT ta_map3 by /BIC/ZKDALLOCS.
SELECT *
FROM /BIC/AZBWMAP0400
INTO TABLE ta_map4.
SORT ta_map4 by /BIC/ZKDALLOCS COSTELMNT.
SELECT *
FROM /BIC/AZBWMAP0500
INTO TABLE ta_map5.
delete ta_map5 WHERE /BIC/ZSTAALORL is INITIAL.
SORT ta_map5 by /BIC/ZTYPALORL /BIC/ZKDALLOC.
ta_source[] = SOURCE_PACKAGE[].
SORT ta_source by COSTELMNT.
DELETE ta_source
WHERE COSTELMNT <= 'ZCC000001'
OR COSTELMNT >= 'ZCC999999'.
SORT ta_source by VTYPE.
" hanya data CCA yang actual saja
delete ta_source
WHERE VTYPE <> '10'.

if ta_source[] is not INITIAL.


"Preparing resource data
SORT ta_source by COSTCENTER.
ta_source2[] = ta_source[].
delete ADJACENT DUPLICATES FROM ta_source2
COMPARING COSTCENTER.
sort ta_source2 by COSTCENTER.
READ TABLE ta_source
INDEX 1
INTO wa_source.
v_year = wa_source-FISCYEAR.
SORT ta_source by COSTCENTER.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0FISCPER'.
wa_s_sfc-chaalias = 'ZFISCPER'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0FISCYEAR'.
wa_s_sfc-chaalias = 'ZFISCYEAR'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0RENTOBJECT'.
wa_s_sfc-chaalias = 'ZRENTOBJECT'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0RE_FLW_TP'.
wa_s_sfc-chaalias = 'ZRE_FLW_TP'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0PROFIT_CTR'.
wa_s_sfc-chaalias = 'ZPROFIT_CTR'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0CUSTOMER'.
wa_s_sfc-chaalias = 'ZCUSTOMER'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW001'.
wa_s_sfc-chaalias = 'ZG_CWW001'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW002'.

wa_s_sfc-chaalias = 'ZG_CWW002'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW003'.
wa_s_sfc-chaalias = 'ZG_CWW003'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW004'.
wa_s_sfc-chaalias = 'ZG_CWW004'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW005'.
wa_s_sfc-chaalias = 'ZG_CWW005'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = 'ZREVLINE'.
wa_s_sfc-chaalias = 'ZREVLINE'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0CURRENCY'.
wa_s_sfc-chaalias = 'ZCURRENCY'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_UVV100'.
wa_s_sfc-chaalias = 'ZUNITPROD'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
"Qty Prod
CLEAR wa_th_sfk.
wa_th_sfk-kyfnm = '0G_QVV100'.
wa_th_sfk-kyfalias = 'ZQTYPROD'.
wa_th_sfk-aggr = 'SUM'.
INSERT wa_th_sfk INTO TABLE t_th_sfk.
"Amount/Pendapatan
CLEAR wa_th_sfk.
wa_th_sfk-kyfnm = '0G_AVV111'.
wa_th_sfk-kyfalias = 'ZVALUE_LC'.
wa_th_sfk-aggr = 'SUM'.
INSERT wa_th_sfk INTO TABLE t_th_sfk.
wa_range-chanm = '0FISCYEAR'.
wa_range-compop = 'EQ'.
wa_range-sign = 'I'.
wa_range-low = v_year.
APPEND wa_range TO t_range.

" hanya yang non aero


wa_range-chanm = '0G_CWW002'.
wa_range-compop = 'EQ'.
wa_range-sign = 'I'.
wa_range-low = '2000'.
APPEND wa_range TO t_range.
CALL FUNCTION 'RSDRI_INFOPROV_READ'
EXPORTING
I_INFOPROV
= wl_infoprov
I_TH_SFC
= t_th_sfc
I_TH_SFK
= t_th_sfk
I_T_RANGE
= t_range
I_ROLLUP_ONLY
= rs_c_false
I_PACKAGESIZE
= 99999
I_USE_DB_AGGREGATION = rs_c_false
I_USE_AGGREGATES
= rs_c_false
IMPORTING
E_T_DATA
= t_data
CHANGING
C_FIRST_CALL
= t_first_call
EXCEPTIONS
ILLEGAL_INPUT
= 1
ILLEGAL_INPUT_SFC
= 2
ILLEGAL_INPUT_SFK
= 3
ILLEGAL_INPUT_RANGE
= 4
ILLEGAL_INPUT_TABLESEL = 5
NO_AUTHORIZATION
= 6
ILLEGAL_DOWNLOAD
= 7
ILLEGAL_TABLENAME
= 8
TRANS_NO_WRITE_MODE
= 9
INHERITED_ERROR
= 10
X_MESSAGE
= 11
NO_COMMIT_FREE_READ
= 12
OTHERS
= 13.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
*

BREAK-POINT.
SORT t_data by ZPROFIT_CTR ZFISCPER.
CLEAR: ta_urai[].
LOOP AT ta_source2 INTO wa_source2.
CLEAR: v_flag1.
LOOP AT ta_map1 INTO wa_map1.
IF wa_map1-/BIC/ZCCSENDFR <= wa_source2-COSTCENTER
AND wa_map1-/BIC/ZCCSENDTO >= wa_source2-COSTCENTER.
v_flag1 = 'X'.
exit.
ENDIF.
v_flag1 = ''.
ENDLOOP.
if v_flag1 = 'X'.
READ TABLE ta_map5
INTO wa_map5
with key /BIC/ZTYPALORL = 'A'
/BIC/ZKDALLOC = wa_map1-/BIC/ZKDALLOC
BINARY SEARCH.

if sy-SUBRC = 0.
READ TABLE ta_map3
INTO wa_map3
with key /BIC/ZKDALLOCS = wa_map5-/BIC/ZKDALLOCS
BINARY SEARCH.
if sy-SUBRC = 0.
READ TABLE ta_map2
INTO wa_map2
with key /BIC/ZKDALLOC = wa_map1-/BIC/ZKDALLOC
BINARY SEARCH.
if sy-SUBRC = 0.
READ TABLE ta_source
INTO wa_source
with key COSTCENTER = wa_source2-COSTCENTER
BINARY SEARCH.
if sy-SUBRC = 0.
v_idx = sy-tabix.
LOOP AT ta_source INTO wa_source FROM v_idx.
IF wa_source-COSTCENTER <> wa_source2-COSTCENTER.
EXIT.
ENDIF.
CLEAR: wa_map4.
READ TABLE ta_map4
INTO wa_map4
with KEY /BIC/ZKDALLOCS = wa_map5-/BIC/ZKDALLOCS
COSTELMNT = wa_source-COSTELMNT
BINARY SEARCH.
if sy-SUBRC = 0.
READ TABLE t_data
INTO wa_rem
with KEY ZPROFIT_CTR = wa_map2-PROFIT_CTR
ZFISCPER = wa_source-FISCPER
BINARY SEARCH.
if sy-SUBRC = 0.
v_idx2 = sy-tabix.
CLEAR: ta_alloc[],
v_qty,
v_amount.
LOOP AT t_data INTO wa_rem FROM v_idx2.
IF wa_rem-ZPROFIT_CTR <> wa_map2-PROFIT_CTR
or wa_rem-ZFISCPER <> wa_source-FISCPER.
exit.
ENDIF.
if wa_map2-/BIC/ZFLTYPFR <= wa_rem-zRE_FLW_TP
AND wa_map2-/BIC/ZFLTYPTO >=
wa_rem-zRE_FLW_TP.
CLEAR: wa_alloc.
wa_alloc-VTYPE = wa_source-VTYPE.
wa_alloc-ZFISCPER = wa_rem-ZFISCPER.
wa_alloc-ZFISCYEAR = wa_rem-ZFISCYEAR.
wa_alloc-ZRENTOBJECT = wa_rem-ZRENTOBJECT.
wa_alloc-ZRE_FLW_TP = wa_rem-ZRE_FLW_TP.

wa_alloc-ZPROFIT_CTR = wa_rem-ZPROFIT_CTR.
wa_alloc-ZCUSTOMER = wa_rem-ZCUSTOMER.
wa_alloc-ZG_CWW001 = wa_rem-ZG_CWW001.
wa_alloc-ZG_CWW002 = wa_rem-ZG_CWW002.
wa_alloc-ZG_CWW003 = wa_rem-ZG_CWW003.
wa_alloc-ZG_CWW004 = wa_rem-ZG_CWW004.
wa_alloc-ZG_CWW005 = wa_rem-ZG_CWW005.
wa_alloc-ZREVLINE = wa_rem-zrevline.
wa_alloc-ZUNITPROD = wa_rem-ZUNITPROD.
wa_alloc-ZQTYPROD = wa_rem-ZQTYPROD.
wa_alloc-COSTCENTER = wa_source-COSTCENTER.
wa_alloc-KDALLOC = wa_map1-/BIC/ZKDALLOC.
wa_alloc-ZCURRENCY = wa_rem-ZCURRENCY.
wa_alloc-ZVALUE_LC = wa_rem-ZVALUE_LC.
wa_alloc-AMOUNT = wa_source-AMOUNT.
wa_alloc-COSTELMNT = wa_source-COSTELMNT.
wa_alloc-COMP_CODE = c_COMP_CODE.
wa_alloc-COSTCENTER = wa_source-COSTCENTER.
COLLECT wa_alloc INTO ta_alloc.
v_qty = v_qty + wa_alloc-ZQTYPROD.
"pakai local amount
v_amount = v_amount +
wa_alloc-ZVALUE_LC.
endif.
ENDLOOP.
LOOP AT ta_alloc ASSIGNING <fs_alloc>.
"rev
if wa_map5-/BIC/ZAFREV is NOT INITIAL.
<fs_alloc>-AMOUNT =
( <fs_alloc>-ZVALUE_LC / v_amount ) *
<fs_alloc>-AMOUNT.
endif.
"production
if wa_map5-/BIC/ZAFPROD is NOT INITIAL.
if wa_map5-/BIC/ZAFPROD = wa_alloc-ZUNITPROD
.
<fs_alloc>-AMOUNT =
( <fs_alloc>-ZQTYPROD / v_qty ) *
<fs_alloc>-AMOUNT.
ELSEIF wa_map5-/BIC/ZAFPROD =
wa_alloc-ZCURRENCY.
<fs_alloc>-AMOUNT =
( <fs_alloc>-ZVALUE_LC / v_amount ) *
<fs_alloc>-AMOUNT.
endif.
endif.
<fs_alloc>-VALFLDCE = wa_map4-/BIC/ZVALFLDCE.
ENDLOOP.
APPEND LINES OF ta_alloc to ta_urai.
endif.
endif.
ENDLOOP.
endif.

endif.
endif.
endif.
endif.
ENDLOOP.
if ta_urai[] is not INITIAL.
LOOP AT ta_urai INTO wa_alloc.
CLEAR: RESULT_FIELDS.
RESULT_FIELDS-/BIC/ZSOURCEDT = 'N3'.
RESULT_FIELDS-CUSTOMER = wa_alloc-ZCUSTOMER.
RESULT_FIELDS-COMP_CODE = wa_alloc-COMP_CODE.
RESULT_FIELDS-CURRENCY = wa_alloc-ZCURRENCY.
RESULT_FIELDS-FISCPER = wa_alloc-ZFISCPER.
RESULT_FIELDS-FISCVARNT = 'K4'.
RESULT_FIELDS-FISCYEAR = wa_alloc-ZFISCPER(4).
RESULT_FIELDS-G_CWW001 = wa_alloc-ZG_CWW001.
RESULT_FIELDS-G_CWW002 = wa_alloc-ZG_CWW002.
RESULT_FIELDS-G_CWW003 = wa_alloc-ZG_CWW003.
RESULT_FIELDS-G_CWW004 = wa_alloc-ZG_CWW004.
RESULT_FIELDS-G_CWW005 = wa_alloc-ZG_CWW005.
RESULT_FIELDS-/BIC/ZREVLINE = wa_alloc-ZREVLINE.
RESULT_FIELDS-PROFIT_CTR = wa_alloc-ZPROFIT_CTR.
RESULT_FIELDS-COSTELMNT = wa_alloc-COSTELMNT.
RESULT_FIELDS-COSTCENTER = wa_alloc-COSTCENTER.
RESULT_FIELDS-RE_FLW_TP = wa_alloc-ZRE_FLW_TP.
RESULT_FIELDS-VTYPE = '10'.
CONCATENATE 'RESULT_FIELDS-G_A' wa_alloc-VALFLDCE
INTO v_field.
ASSIGN (V_field) TO <ls_field>.
<ls_field> = wa_alloc-AMOUNT.
APPEND RESULT_FIELDS TO ta_package.
ENDLOOP.
endif.
endif.
ta_source[] = SOURCE_PACKAGE[].
SORT ta_source by COSTELMNT.
DELETE ta_source
WHERE COSTELMNT <= 'ZCC000001'
OR COSTELMNT >= 'ZCC999999'.
SORT ta_source by VTYPE.
" hanya data CCA yang PLAN saja
delete ta_source
WHERE VTYPE <> '20'.
if ta_source[] is not INITIAL.
CLEAR: t_th_sfc[],
t_th_sfk[],
t_range[],
t_data[].
"Preparing resource data
SORT ta_source by COSTCENTER.

ta_source2[] = ta_source[].
delete ADJACENT DUPLICATES FROM ta_source2
COMPARING COSTCENTER.
sort ta_source2 by COSTCENTER.
READ TABLE ta_source
INDEX 1
INTO wa_source.
v_year = wa_source-FISCYEAR.
SORT ta_source by COSTCENTER.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0FISCYEAR'.
wa_s_sfc-chaalias = 'ZFISCYEAR'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0FISCPER'.
wa_s_sfc-chaalias = 'ZFISCPER'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0PROFIT_CTR'.
wa_s_sfc-chaalias = 'ZPROFIT_CTR'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0CURTYPE'.
wa_s_sfc-chaalias = 'ZCURTYPE'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0VTYPE'.
wa_s_sfc-chaalias = 'ZVTYPE'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0RE_FLW_TP'.
wa_s_sfc-chaalias = 'ZRE_FLW_TP'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0CUSTOMER'.
wa_s_sfc-chaalias = 'ZCUSTOMER'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW001'.
wa_s_sfc-chaalias = 'ZG_CWW001'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.

CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW002'.
wa_s_sfc-chaalias = 'ZG_CWW002'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW003'.
wa_s_sfc-chaalias = 'ZG_CWW003'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW004'.
wa_s_sfc-chaalias = 'ZG_CWW004'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_CWW005'.
wa_s_sfc-chaalias = 'ZG_CWW005'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = 'ZREVLINE'.
wa_s_sfc-chaalias = 'ZREVLINE'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0CURRENCY'.
wa_s_sfc-chaalias = 'ZCURRENCY'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
CLEAR: wa_s_sfc.
wa_s_sfc-chanm = '0G_UVV100'.
wa_s_sfc-chaalias = 'ZG_UVV100'.
wa_s_sfc-orderby = 0.
INSERT wa_s_sfc INTO TABLE t_th_sfc.
"Jumlah Produksi
CLEAR wa_th_sfk.
wa_th_sfk-kyfnm = '0G_QVV100'.
wa_th_sfk-kyfalias = 'ZG_QVV100'.
wa_th_sfk-aggr = 'SUM'.
INSERT wa_th_sfk INTO TABLE t_th_sfk.
"Pendapatan/Revenue
CLEAR wa_th_sfk.
wa_th_sfk-kyfnm = '0G_AVV111'.
wa_th_sfk-kyfalias = 'ZG_AVV111'.
wa_th_sfk-aggr = 'SUM'.
INSERT wa_th_sfk INTO TABLE t_th_sfk.
wa_range-chanm = '0FISCYEAR'.
wa_range-compop = 'EQ'.
wa_range-sign = 'I'.
wa_range-low = v_year.

APPEND wa_range TO t_range.


wa_range-chanm = '0VTYPE'.
wa_range-compop = 'EQ'.
wa_range-sign = 'I'.
wa_range-low = '20'.
APPEND wa_range TO t_range.
wa_range-chanm = '0CURTYPE'.
wa_range-compop = 'EQ'.
wa_range-sign = 'I'.
wa_range-low = 'B0'.
APPEND wa_range TO t_range.
" hanya yang non aero
wa_range-chanm = '0G_CWW002'.
wa_range-compop = 'EQ'.
wa_range-sign = 'I'.
wa_range-low = '2000'.
APPEND wa_range TO t_range.
CALL FUNCTION 'RSDRI_INFOPROV_READ'
EXPORTING
I_INFOPROV
= wl_infoprov2
I_TH_SFC
= t_th_sfc
I_TH_SFK
= t_th_sfk
I_T_RANGE
= t_range
I_ROLLUP_ONLY
= rs_c_false
I_PACKAGESIZE
= 99999
I_USE_DB_AGGREGATION = rs_c_false
I_USE_AGGREGATES
= rs_c_false
IMPORTING
E_T_DATA
= t_data2
CHANGING
C_FIRST_CALL
= t_first_call
EXCEPTIONS
ILLEGAL_INPUT
= 1
ILLEGAL_INPUT_SFC
= 2
ILLEGAL_INPUT_SFK
= 3
ILLEGAL_INPUT_RANGE
= 4
ILLEGAL_INPUT_TABLESEL = 5
NO_AUTHORIZATION
= 6
ILLEGAL_DOWNLOAD
= 7
ILLEGAL_TABLENAME
= 8
TRANS_NO_WRITE_MODE
= 9
INHERITED_ERROR
= 10
X_MESSAGE
= 11
NO_COMMIT_FREE_READ
= 12
OTHERS
= 13.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
*

BREAK-POINT.
SORT t_data2 by ZPROFIT_CTR ZFISCPER.
CLEAR: ta_urai2[].
LOOP AT ta_source2 INTO wa_source2.
CLEAR: v_flag1.

LOOP AT ta_map1 INTO wa_map1.


IF wa_map1-/BIC/ZCCSENDFR <= wa_source2-COSTCENTER
AND wa_map1-/BIC/ZCCSENDTO >= wa_source2-COSTCENTER.
v_flag1 = 'X'.
exit.
ENDIF.
v_flag1 = ''.
ENDLOOP.
if v_flag1 = 'X'.
READ TABLE ta_map5
INTO wa_map5
with key /BIC/ZTYPALORL = 'P'
/BIC/ZKDALLOC = wa_map1-/BIC/ZKDALLOC
BINARY SEARCH.
if sy-SUBRC = 0.
READ TABLE ta_map3
INTO wa_map3
with key /BIC/ZKDALLOCS = wa_map5-/BIC/ZKDALLOCS
BINARY SEARCH.
if sy-SUBRC = 0.
READ TABLE ta_map2
INTO wa_map2
with key /BIC/ZKDALLOC = wa_map1-/BIC/ZKDALLOC
BINARY SEARCH.
if sy-SUBRC = 0.
READ TABLE ta_source
INTO wa_source
with key COSTCENTER = wa_source2-COSTCENTER
BINARY SEARCH.
if sy-SUBRC = 0.
v_idx = sy-tabix.
LOOP AT ta_source INTO wa_source FROM v_idx.
IF wa_source-COSTCENTER <> wa_source2-COSTCENTER.
EXIT.
ENDIF.
CLEAR: wa_map4.
READ TABLE ta_map4
INTO wa_map4
with KEY /BIC/ZKDALLOCS = wa_map5-/BIC/ZKDALLOCS
COSTELMNT = wa_source-COSTELMNT
BINARY SEARCH.
if sy-SUBRC = 0.
READ TABLE t_data2
INTO wa_copa
with KEY ZPROFIT_CTR = wa_map2-PROFIT_CTR
ZFISCPER = wa_source-FISCPER
BINARY SEARCH.
if sy-SUBRC = 0.
v_idx2 = sy-tabix.
CLEAR: ta_alloc2[],
v_qty,
v_amount.
LOOP AT t_data2 INTO wa_copa FROM v_idx2.
IF wa_copa-ZPROFIT_CTR <> wa_map2-PROFIT_CTR

or wa_copa-ZFISCPER <> wa_source-FISCPER.


exit.
ENDIF.
if wa_map2-/BIC/ZFLTYPFR <= wa_copa-zRE_FLW_TP
AND wa_map2-/BIC/ZFLTYPTO >=
wa_copa-zRE_FLW_TP.
CLEAR: wa_alloc2.
wa_alloc2-VTYPE = wa_source-VTYPE.
wa_alloc2-ZFISCPER = wa_copa-ZFISCPER.
wa_alloc2-ZFISCYEAR = wa_copa-ZFISCYEAR.
wa_alloc2-ZRE_FLW_TP = wa_copa-ZRE_FLW_TP.
wa_alloc2-ZPROFIT_CTR = wa_copa-ZPROFIT_CTR.
wa_alloc2-ZCUSTOMER = wa_copa-ZCUSTOMER.
wa_alloc2-ZG_CWW001 = wa_copa-ZG_CWW001.
wa_alloc2-ZG_CWW002 = wa_copa-ZG_CWW002.
wa_alloc2-ZG_CWW003 = wa_copa-ZG_CWW003.
wa_alloc2-ZG_CWW004 = wa_copa-ZG_CWW004.
wa_alloc2-ZG_CWW005 = wa_copa-ZG_CWW005.
wa_alloc2-ZREVLINE = wa_copa-zrevline.
wa_alloc2-ZG_AVV111 = wa_copa-ZG_AVV111.
wa_alloc2-ZG_QVV100 = wa_copa-ZG_QVV100.
wa_alloc2-COSTCENTER = wa_source-COSTCENTER.
wa_alloc2-KDALLOC = wa_map1-/BIC/ZKDALLOC.
wa_alloc2-ZCURRENCY = wa_copa-ZCURRENCY.
wa_alloc2-ZG_UVV100 = wa_copa-ZG_UVV100.
wa_alloc-AMOUNT = wa_source-AMOUNT.
wa_alloc2-COSTELMNT = wa_source-COSTELMNT.
wa_alloc2-COMP_CODE = c_COMP_CODE.
wa_alloc2-COSTCENTER = wa_source-COSTCENTER.
COLLECT wa_alloc2 INTO ta_alloc2.
v_qty = v_qty + wa_alloc2-ZG_QVV100.
v_amount = v_amount + wa_alloc2-ZG_AVV111.
endif.
ENDLOOP.
LOOP AT ta_alloc2 ASSIGNING <fs_alloc2>.
"rev
if wa_map5-/BIC/ZAFREV is NOT INITIAL.
<fs_alloc2>-AMOUNT =
( <fs_alloc2>-ZG_AVV111 / v_amount ) *
<fs_alloc2>-AMOUNT.
endif.
"product
if wa_map5-/BIC/ZAFPROD is NOT INITIAL.
<fs_alloc2>-AMOUNT =
( <fs_alloc2>-ZG_QVV100 / v_qty ) *
<fs_alloc2>-AMOUNT.
endif.
<fs_alloc2>-VALFLDCE = wa_map4-/BIC/ZVALFLDCE.
ENDLOOP.
APPEND LINES OF ta_alloc2 to ta_urai2.
endif.

endif.
ENDLOOP.
endif.
endif.
endif.
endif.
endif.
ENDLOOP.
ENDIF.
if ta_urai2[] is not INITIAL.
LOOP AT ta_urai2 INTO wa_alloc2.
CLEAR: RESULT_FIELDS.
RESULT_FIELDS-/BIC/ZSOURCEDT = 'N4'.
RESULT_FIELDS-CUSTOMER = wa_alloc2-ZCUSTOMER.
RESULT_FIELDS-COMP_CODE = wa_alloc2-COMP_CODE.
RESULT_FIELDS-CURRENCY = wa_alloc2-ZCURRENCY.
RESULT_FIELDS-FISCPER = wa_alloc2-ZFISCPER.
RESULT_FIELDS-FISCVARNT = 'K4'.
RESULT_FIELDS-FISCYEAR = wa_alloc2-ZFISCPER(4).
RESULT_FIELDS-G_CWW001 = wa_alloc2-ZG_CWW001.
RESULT_FIELDS-G_CWW002 = wa_alloc2-ZG_CWW002.
RESULT_FIELDS-G_CWW003 = wa_alloc2-ZG_CWW003.
RESULT_FIELDS-G_CWW004 = wa_alloc2-ZG_CWW004.
RESULT_FIELDS-G_CWW005 = wa_alloc2-ZG_CWW005.
RESULT_FIELDS-/BIC/ZREVLINE = wa_alloc2-ZREVLINE.
RESULT_FIELDS-PROFIT_CTR = wa_alloc2-ZPROFIT_CTR.
RESULT_FIELDS-COSTELMNT = wa_alloc2-COSTELMNT.
RESULT_FIELDS-COSTCENTER = wa_alloc2-COSTCENTER.
RESULT_FIELDS-RE_FLW_TP = wa_alloc2-ZRE_FLW_TP.
RESULT_FIELDS-VTYPE = '20'.
CONCATENATE 'RESULT_FIELDS-G_A' wa_alloc2-VALFLDCE
INTO v_field.
ASSIGN (V_field) TO <ls_field>.
<ls_field> = wa_alloc2-AMOUNT.
APPEND RESULT_FIELDS TO ta_package.
ENDLOOP.
endif.
RESULT_PACKAGE[] = ta_package[].
FREE: ta_source[],
ta_source2[],
ta_map1[],
ta_map2[],
ta_map3[],
ta_map4[],
ta_map5[],
t_range[],
t_data[],
ta_alloc[],
ta_urai[],
t_data2[],
ta_alloc2[],
ta_urai2[],
ta_package[].

*$*$ end of routine - insert your code only before this line
*-*
ENDMETHOD.
"expert_routine
*----------------------------------------------------------------------*
*
Inverse method inverse_expert_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_expert_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.

"inverse_expert_routine

METHOD new_record__expert_routine.
***** IMPLEMENTATION is only visible in generated program *****
ENDMETHOD.
ENDCLASS.

"routine IMPLEMENTATION

You might also like