Convert BW3.x Start routine coding into BW 7.0
The reversal load Update Rules (ICS IC_TR) Start Routine
PROGRAM UPDATE_ROUTINE.
$$ begin of global - insert your declaration only below this line -
TABLES: ZCHAR_SUBST.
DATA: sy_tabix like sy-tabix .
$$ end of global - insert your declaration only before this line -
The follow definition is new in the BW3.x
TYPES:
BEGIN OF DATA_PACKAGE_STRUCTURE.
INCLUDE STRUCTURE /BIC/CS8ICS.
TYPES:
RECNO LIKE sy-tabix,
END OF DATA_PACKAGE_STRUCTURE.
DATA:
DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
FORM startup
TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n
DATA_PACKAGE STRUCTURE DATA_PACKAGE
USING RECORD_ALL LIKE SY-TABIX
SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
$$ begin of routine - insert your code only below this line -
loop at DATA_PACKAGE .
sy_tabix = sy-tabix .
select single *
from ZCHAR_SUBST
where OLD_CHAR = DATA_PACKAGE-/BIC/CURR_CHAR .
if sy-subrc is initial . " Candidate for a treatment
DATA_PACKAGE-/BIC/KF1 = DATA_PACKAGE-/BIC/KF1 * ( -1 ) .
DATA_PACKAGE-/BIC/KF2 = DATA_PACKAGE-/BIC/KF2 * ( -1 ) .
modify DATA_PACKAGE index sy_tabix.
else .
delete DATA_PACKAGE index sy_tabix.
endif .
endloop .
ABORT = 0.
$$ end of routine - insert your code only before this line -
ENDFORM.
Start Routine for reversal load
Pls tell me how to write code for this.
Thanks
Gaurav Sekhri
We are not here to do your job. Please search SDN how to convert a 3.X code to BI7
Edited by: Pravender on Jul 27, 2010 1:29 PM
Hi
There are 2 approached for migration
1) Top down appraoch: here we start from top ( update rules) to bottom ( datasource) . In this approach Infosource is mandatory and all the routines will be taken care by the system no need to do anything manually.
2) bottom up approach : here we start from bottom ( datasource) to top ( update rules) . here Infosource is optional and once you migrate 3.x datasource all the transfer rules will get deleted so we need to record the transfer some where before mirgration. here we have to write maually the code invlolved in the transformation in BI 7.0 terminology.
Note: In bottom up approach it is better to use migration with export so that you can restore the datasource back to 3.x whenever any unexpected problem occurs.
You can do this By using the T code RSDS
Santosh
Similar Messages
-
Can we use Perform statement in start routine ,Form and endform.
Hi,
Can we use Perform statement in start routine ? Then write the ABAP code between Form and Endform.
Example : Can I use Perform ABC in start routine. Then define ABC at the end of start routine.
Form ABC,
......<ABAP> code .....
Endform.Hi,
In BI 7.0 we have start routines defined using Class where you might be able to create your own performs, but in case of BW3.5 Start routines are defined using Form so there I don't think it will allow you to create one more form.
But you can surely try both the approaches.
Reards,
Durgesh. -
I can't convert my 3.x start routine to BI 7.0 start routine...
Hi All,
Can anyone help me to convert the below coding from 3.x start routine to BI 7.0 start routine.
PROGRAM UPDATE_ROUTINE.
$$ begin of global - insert your declaration only below this line -
TABLES: ...
DATA: ...
$$ end of global - insert your declaration only before this line -
The follow definition is new in the BW3.x
TYPES:
BEGIN OF DATA_PACKAGE_STRUCTURE.
INCLUDE STRUCTURE /BIC/CSCOIS_GMAS.
TYPES:
RECNO LIKE sy-tabix,
END OF DATA_PACKAGE_STRUCTURE.
DATA:
DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
FORM startup
TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n
DATA_PACKAGE STRUCTURE DATA_PACKAGE
USING RECORD_ALL LIKE SY-TABIX
SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
$$ begin of routine - insert your code only below this line -
fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
to make monitor entries
DATA : BEGIN OF t_yjepum OCCURS 0.
INCLUDE STRUCTURE /bic/pyjepum.
DATA : END OF t_yjepum.
DATA : T_VER LIKE ZTCO_VERCK OCCURS 10 WITH HEADER LINE.
SELECT * INTO CORRESPONDING FIELDS OF t_yjepum
FROM /bic/pyjepum
WHERE /bic/yopc IN ('AP', 'AS' ,'AR') .
APPEND t_yjepum.
CLEAR t_yjepum.
ENDSELECT.
SELECT * INTO CORRESPONDING FIELDS OF T_VER
FROM ZTCO_VERCK.
APPEND T_VER.
CLEAR T_VER.
ENDSELECT.
LOOP AT DATA_PACKAGE.
IF DATA_PACKAGE-/BIC/YJOBGUBUN = '3'.
DATA_PACKAGE-/BIC/YAVERSI = '0'.
ELSE.
READ TABLE T_VER WITH KEY
CALMONTH = DATA_PACKAGE-CALMONTH
YJOBGUBUN = DATA_PACKAGE-/BIC/YJOBGUBUN.
DATA_PACKAGE-/BIC/YAVERSI = T_VER-YAVERSI.
ENDIF.
IF DATA_PACKAGE-/BIC/YJOBGUBUN = '3'
and DATA_PACKAGE-/BIC/YCOM = 'C4C0'.
IF DATA_PACKAGE-/BIC/YACHAR+18(4) = 'C4CV' OR
DATA_PACKAGE-/BIC/YACHAR+18(4) = 'C4CX' OR
DATA_PACKAGE-/BIC/YACHAR+18(4) = 'C4CW'.
DATA_PACKAGE-/BIC/YCOM = DATA_PACKAGE-/BIC/YACHAR+18(4).
ENDIF.
ENDIF.
MODIFY DATA_PACKAGE.
CLEAR : DATA_PACKAGE.
ENDLOOP.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
$$ end of routine - insert your code only before this line -
ENDFORM.There are a few basic rules you're not keeping to here. Can't use header lines on your internal tables. Also you can't use the 'into corresponding fields of table' in a select loop. So you don't need the append or the endselect statements.
Try this:
$$ begin of global - insert your declaration only below this line -
types:
begin of tp_yjepum,
include type /bic/pyjepm,
end of tp_yjepum.
*declare tables based on types without header lines
data:
t_yjepum type standard table of tp_yjepum,
s_vjepum type tp_yjepum. "work area for t_vjepum,
*if you need a work area to use with the table use the same typing as your internal table
t_ver type standard table of ztco_verck.
$$ end of global - insert your declaration only before this line -
$$ 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.
select * into corresponding fields of table t_yjepum from /bic/pyjepum
where /bic/yopc IN ('AP', 'AS' ,'AR') .
no append or endselect required
if sy-subrc ne 0.
a message to the log if there was nothing in the table?
endif.
select * into corresponding fields of table t_ver from ztco_verck.
if sy-subrc ne 0.
a message to the log if there was nothing in the table?
endif. -
Converting key figures from rows to column using DSO and start routine
Hi SDNer:
I need some help to convert key figures from rows to column.
The source is DSO 1 and I am thinking about writing ABAP in the start routine to do the conversion. The target is DSO2.
Below is the more detail information with example. Basically, for each record in DSO 1 I need to create 3 records (because there are 3 KF's) and output to DSO2.
I would really appreciate some help on this.Thank you.
Tony
DSO 1 data format (SOURCE)
Period ID KF1 KF2 KF3
200702 100 300 200 750
Output to DSO 2 (TARGET)
Period ID KF LABEL
200702 100 300 KF1
200702 100 200 KF2
200702 100 750 KF3This is the code in BI 7.0.
u need to put a field "Label" in DSO1. u dont need to populate this in DSO1 but it helps the code to populate the field in DSO2.
DATA: wa_result TYPE _ty_s_sc_1,
t_result TYPE STANDARD TABLE OF _ty_s_sc_1.
DATA:counter(2) TYPE n.
LOOP AT SOURCE_PACKAGE INTO wa_result.
counter =0.
while counter < 3 .
wa_result- Period = wa_result-Period.
wa_result- ID = wa_result-ID.
if counter = 0.
wa_result- KF1 = wa_result-KF1.
wa_result- Label = 'KF1'.
elseif counter = 1.
wa_result- KF1 = wa_result-KF2.
wa_result- Label = 'KF2'.
else.
wa_result- KF1 = wa_result-KF3.
wa_result- Label = 'KF3'.
endif.
APPEND wa_result TO t_result.
counter = counter+1.
endwhile.
endloop.
CLEAR: SOURCE_PACKAGE,wa_result.
LOOP AT t_result INTO wa_result.
APPEND wa_result TO SOURCE_PACKAGE.
ENDLOOP. -
BW 3.5 Update rule routine and start routine convert to BI 7.0 Endroutine.
I have bw 3.5 update routine and update rules start routine( r/3 to ODS). i need to replicate that routine into BI 7.0 endroutine with the same logic with some minor changes(DSO to DSO).
IN BW 3.5 the data is getting from r/3 where as in BI7.0 the data fetching from DSO itself but the logic is same as bw 3.5.
following is the start routine:
DATA: G_FISCPER_TO TYPE /BI0/OIFISCPER,
G_CALMONTH LIKE /BI0/PCALMONTH-CALMONTH,
G_MONAT TYPE /BIC/OIYRDFMONAT.
ABORT = 0.
------ Globale Variable füllen --------------------------------------*
CALL FUNCTION 'Y_RDF_FISCPER_FOR_INFOPACKAGE'
EXPORTING
I_ISOURCE = '0FI_AA_001' (*** this is infosurce getting from r/3, in 7.0 this one is DSO 'B")
IMPORTING
E_FISCPER_TO = G_FISCPER_TO
E_MONAT = G_MONAT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC = 0.
CALL FUNCTION 'Y_RDE_FISCPER_TO_CALMONTH'
EXPORTING
I_PERIV = 'K4'
I_BDATJ = G_FISCPER_TO(4)
I_POPER = G_FISCPER_TO+4(3)
IMPORTING
E_CALMONTH = G_CALMONTH
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0 OR G_CALMONTH IS INITIAL.
CALL FUNCTION 'Y_RDN_MONITOR_SET'
EXPORTING
I_MSGID = 'YRDFBW'
I_MSGNO = '027'
I_MSGV1 = '0FI_AA_001'
I_MSGV2 = 'YRDF_FIAA_PERIOD'
TABLES
T_MONITOR = MONITOR.
ABORT = 1.
ENDIF.
ELSE.
CALL FUNCTION 'Y_RDN_MONITOR_SET'
EXPORTING
I_MSGID = 'YRDFBW'
I_MSGNO = '027'
I_MSGV1 = '0FI_AA_001'
I_MSGV2 = 'YRDF_FIAA_PERIOD'
TABLES
T_MONITOR = MONITOR.
ABORT = 1.
ENDIF.
Update routine:
RETURNCODE = 0.
ABORT = 0.
CLEAR RESULT.
IF NOT COMM_STRUCTURE-ASSET_MAIN BETWEEN '000000200000' AND
'000000299999'.
CALL FUNCTION 'Y_RDF_GET_CCTR_0ASSET'
EXPORTING
I_COMP_CODE = COMM_STRUCTURE-COMP_CODE
I_ASSET = COMM_STRUCTURE-ASSET
I_ASSET_MAIN = COMM_STRUCTURE-ASSET_MAIN
IMPORTING
E_COSTCENTER = RESULT
EXCEPTIONS
OTHERS = 1.
IF SY-SUBRC NE 0 OR RESULT IS INITIAL.
CALL FUNCTION 'Y_RDN_MONITOR_SET'
EXPORTING
I_MSGID = 'YRDFBW'
I_MSGTY = 'E'
I_MSGNO = '061'
I_MSGV1 = COMM_STRUCTURE-COMP_CODE
I_MSGV2 = COMM_STRUCTURE-ASSET
I_MSGV3 = COMM_STRUCTURE-ASSET_MAIN
TABLES
T_MONITOR = MONITOR.
RETURNCODE = 1.
ENDIF.
ENDIF.
How can i write this in BI7.0?
ThanksHi ,
solved on my own. Thankyou very much..
thanks & regards,
M.S
Edited by: M.S on Oct 27, 2009 6:57 AM
Edited by: M.S on Oct 27, 2009 6:59 AM -
Convert ABAP code in start routine/update rule to transform. start routine
Dear BW ABAPers,
I have created a custom purchasing info cube (YCP_PURC1) based on 0CP_PURC1 standard cube. I would like to convert this new data flow to BI7 (from 3.x), and convert the standard update rule to transformation. I would need to rewrite the below start routine from the standard update rule to a start routine ABAP code in the newly created transformation / start routine. My ABAP knowledge is limited. Will you please help?
*this is the start routine from the update rule. As a side note, the data source is 2LIS_02_SCL.
LOOP AT SOURCE_PACKAGE.
IF ( SOURCE_PACKAGE-cppvlc EQ 0
AND SOURCE_PACKAGE-cppvoc EQ 0
AND SOURCE_PACKAGE-cpquaou EQ 0 ).
DELETE SOURCE_PACKAGE.
CONTINUE.
ENDIF.
no_scl is initial ( e.g. for good receipts, billing)
value has to be set depending on storno
IF SOURCE_PACKAGE-no_scl IS INITIAL.
IF SOURCE_PACKAGE-storno = 'X'.
SOURCE_PACKAGE-no_scl = -1.
ELSE.
SOURCE_PACKAGE-no_scl = 1.
ENDIF.
MODIFY SOURCE_PACKAGE.
ENDIF.
ENDLOOP.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
Many thanks and look forward to your kind feedback.
Kind regards,
CsabaDear All, Durgesh,
thanks to you all for your valuable input. Mainly the ABAP part was more interesting for me.
Durgesh, thanks for your input, it was useful. I just had to change the info objects to data source fields and add the lines before the loop:
DATA: I_PACKAGE TYPE TYT_SC_1.
FIELD-SYMBOLS <i_package> TYPE tys_sc_1.
I_PACKAGE[] = SOURCE_PACKAGE[].
LOOP AT SOURCE_PACKAGE assigning <i_package>.
IF ( <i_package>-BWGEO EQ 0
AND <i_package>-BWGEOO EQ 0
AND <i_package>-BWMNG EQ 0 ).
DELETE SOURCE_PACKAGE index sy-tabix.
CONTINUE.
ENDIF.
no_scl is initial ( e.g. for good receipts, billing)
value has to be set depending on storno
IF <i_package>-NOSCL IS INITIAL.
IF <i_package>-ROCANCEL = 'X'.
<i_package>-NOSCL = -1.
ELSE.
<i_package>-NOSCL = 1.
ENDIF.
ENDIF.
ENDLOOP.
Points have been assigned accordingly.
Thanks,
Csaba -
Need help in ABAP coding in start routine
Hi,
I have a requriement like
-To take the value of month which is an attribute of category(info Object) for which category value is 1. I need to apply the month obtained as the filter to another info object. I have opted to write this ABAP code in start routine. Can anyone guide me on this code.
Thanks in advance.do you not have an abap-er at your disposal? i don't imagine this to be quick & dirty that can be written without access to your system! some analysis work may also be required before the actual coding can be done...so I wouldn't post the entire functional spec (business requirement) here hoping for a solution; that would be too weird.
Regards. -
Start Routine not working correctly.
Hi gurus,
I'm having a problem with a start routine in an update rule to one of my cubes. I debug it and it seems to work fine. However, it ends the simulation saying in the error message "No active update rules exist for this infosource." However, I think it's something to do with the logic I have in my start routine. Below is the start routine which I am trying to debug. I'm doing a lookup on an ODS and if no match is found on that ODS by Sales Order and Sales Order Item, I do another lookup on an object that has the same information that I'm looking to append to the transaction record. Any help would be greatly appreciated. I'm thinking the second loop against the internal table might not be working correctly as it seems to just sit on that table.
Thanks in advance,
John
PROGRAM UPDATE_ROUTINE.
$$ begin of global - insert your declaration only below this line -
TABLES: ...
DATA: PENDING_QTY LIKE /BIC/AZO_BKLG100-/BIC/ZQTYPEND1,
ABSOLUTE_QTY LIKE /BIC/AZO_BKLG100-/BIC/ZQTYPEND1,
TEN_PERCENT LIKE /BIC/AZO_BKLG100-/BIC/ZQTYPEND1,
TEN_PERCENT_VALUE TYPE P LENGTH 4 DECIMALS 2 VALUE '0.1'.
DATA: ZWEEK LIKE SCAL-WEEK.
$$ end of global - insert your declaration only before this line -
The follow definition is new in the BW3.x
TYPES:
BEGIN OF DATA_PACKAGE_STRUCTURE.
INCLUDE STRUCTURE /BIC/CSZO_PMO1_ENHANCED.
TYPES:
RECNO LIKE sy-tabix,
END OF DATA_PACKAGE_STRUCTURE.
DATA:
DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
FORM startup
TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n
DATA_PACKAGE STRUCTURE DATA_PACKAGE
USING RECORD_ALL LIKE SY-TABIX
SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
$$ begin of routine - insert your code only below this line -
fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
to make monitor entries
TABLES : /BIC/AZO_PMI100. "Active PM Invoice ODS
TABLES : /BIC/PZ_CTBWOBJ. "CTBW Order Master
DATA: T_DATA_PAK LIKE DATA_PACKAGE OCCURS 0 WITH HEADER LINE,
T_DATA_PAK1 LIKE DATA_PACKAGE OCCURS 0 WITH HEADER LINE,
IV_INVQTY like /BIC/AZO_PMI100-INV_QTY,
IV_INVVAL like /BIC/AZO_PMI100-NETVAL_INV,
BEGIN OF IT_INVOICES OCCURS 0,
INV_SALES_ORD LIKE /BIC/AZO_PMI100-/BIC/ZSORDDORD,
INV_SALES_ITEM LIKE /BIC/AZO_PMI100-/BIC/ZSORDIORD,
INV_DOC_NUM LIKE /BIC/AZO_PMI100-/BIC/ZBILLDINV,
INV_DOC_ITEM LIKE /BIC/AZO_PMI100-/BIC/ZBILLIINV,
INV_QTY LIKE /BIC/AZO_PMI100-INV_QTY,
NETVAL_INV LIKE /BIC/AZO_PMI100-NETVAL_INV,
ZBRAND LIKE /BIC/AZO_PMI100-/BIC/ZBRAND,
ZBRANDOWN LIKE /BIC/AZO_PMI100-/BIC/ZBRANDOWN,
ZDESGNOWN LIKE /BIC/AZO_PMI100-/BIC/ZDESGNOWN,
ZFLAGBKLG LIKE /BIC/AZO_PMI100-/BIC/ZFLAGBKLG,
ZNOCOLORS LIKE /BIC/AZO_PMI100-/BIC/ZNOCOLORS,
ZNOSPCLRS LIKE /BIC/AZO_PMI100-/BIC/ZNOSPCLRS,
ZOPENFCTY LIKE /BIC/AZO_PMI100-/BIC/ZOPENFCTY,
ZPACKSYST LIKE /BIC/AZO_PMI100-/BIC/ZPACKSYST,
ZPPG LIKE /BIC/AZO_PMI100-/BIC/ZPPG,
ZAPPLICAT LIKE /BIC/AZO_PMI100-/BIC/ZAPPLICAT,
ZPAPERGDE LIKE /BIC/AZO_PMI100-/BIC/ZPAPERGDE,
ZPRINTMTH LIKE /BIC/AZO_PMI100-/BIC/ZPRINTMTH,
ZQUALITY LIKE /BIC/AZO_PMI100-/BIC/ZQUALITY,
ZSHAPE LIKE /BIC/AZO_PMI100-/BIC/ZSHAPE,
ZSIZE LIKE /BIC/AZO_PMI100-/BIC/ZSIZE,
ZVARIANT LIKE /BIC/AZO_PMI100-/BIC/ZVARIANT,
ZVOLUME LIKE /BIC/AZO_PMI100-/BIC/ZVOLUME,
END OF IT_INVOICES,
BEGIN OF IT_CTBW OCCURS 0,
CTBW_SALES_ORD LIKE /BIC/PZ_CTBWOBJ-/BIC/ZSORDDORD,
CTBW_SALES_ITEM LIKE /BIC/PZ_CTBWOBJ-/BIC/ZSORDIORD,
CTBW_BRAND LIKE /BIC/PZ_CTBWOBJ-/BIC/ZBRAND,
CTBW_BRANDOWN LIKE /BIC/PZ_CTBWOBJ-/BIC/ZBRANDOWN,
CTBW_DESGNOWN LIKE /BIC/PZ_CTBWOBJ-/BIC/ZDESGNOWN,
CTBW_NOCOLORS LIKE /BIC/PZ_CTBWOBJ-/BIC/ZNOCOLORS,
CTBW_NOSPCLRS LIKE /BIC/PZ_CTBWOBJ-/BIC/ZNOSPCLRS,
CTBW_C_APM_006 LIKE /BIC/PZ_CTBWOBJ-/BIC/C_APM_006,
CTBW_PACKSYST LIKE /BIC/PZ_CTBWOBJ-/BIC/ZPACKSYST,
CTBW_PAPERGDE LIKE /BIC/PZ_CTBWOBJ-/BIC/ZPAPERGDE,
CTBW_PPG LIKE /BIC/PZ_CTBWOBJ-/BIC/ZPPG,
CTBW_PRINTMTH LIKE /BIC/PZ_CTBWOBJ-/BIC/ZPRINTMTH,
CTBW_QUALITY LIKE /BIC/PZ_CTBWOBJ-/BIC/ZQUALITY,
CTBW_SHAPE LIKE /BIC/PZ_CTBWOBJ-/BIC/ZSHAPE,
CTBW_SIZE LIKE /BIC/PZ_CTBWOBJ-/BIC/ZSIZE,
CTBW_VARIANT LIKE /BIC/PZ_CTBWOBJ-/BIC/ZVARIANT,
CTBW_VOLUME LIKE /BIC/PZ_CTBWOBJ-/BIC/ZVOLUME,
END OF IT_CTBW.
*These deletions are already included in the InfoPackage:
*Keep only PackMat Finished Materials SOrders:
*DELETE DATA_PACKAGE
WHERE MATL_GROUP(5) NE 'PM-FM'.
*Keep only open SOrders:
*DELETE DATA_PACKAGE
where /BIC/ZOSTATUS = 'C'.
*Keep only MC and CF SOrders:
*DELETE DATA_PACKAGE
where DOC_TYPE NE 'ZOR6' AND DOC_TYPE NE 'ZOR9'.
*Keep only non rejected SOrders:
DELETE DATA_PACKAGE
where REASON_REJ IS NOT INITIAL.
Exclude list of statistical Item Categories (not billing
relevant).
DELETE DATA_PACKAGE WHERE
ITEM_CATEG = 'ZPC1' or
ITEM_CATEG = 'ZPC2' or
ITEM_CATEG = 'ZPC3' or
ITEM_CATEG = 'ZPC4' or
ITEM_CATEG = 'ZTAF' or
ITEM_CATEG = 'ZTAE' or
ITEM_CATEG = 'ZTAG' or
ITEM_CATEG = 'ZTSV'.
REFRESH: T_DATA_PAK,T_DATA_PAK1,
IT_INVOICES, IT_CTBW.
T_DATA_PAK[] = DATA_PACKAGE[].
T_DATA_PAK1[] = DATA_PACKAGE[].
DATA : COUNT1 LIKE SY-TABIX.
DESCRIBE TABLE T_DATA_PAK1 LINES COUNT1.
IF NOT COUNT1 IS INITIAL.
Selection for Invoice Items ***********
SORT T_DATA_PAK1 BY /BIC/ZSORDDORD /BIC/ZSORDIORD.
SELECT /BIC/ZSORDDORD /BIC/ZSORDIORD /BIC/ZBILLDINV /BIC/ZBILLIINV
INV_QTY NETVAL_INV
/BIC/ZBRAND /BIC/ZBRANDOWN /BIC/ZDESGNOWN /BIC/ZFLAGBKLG
/BIC/ZNOCOLORS /BIC/ZNOSPCLRS /BIC/ZOPENFCTY /BIC/ZPACKSYST
/BIC/ZPPG /BIC/ZAPPLICAT /BIC/ZPAPERGDE /BIC/ZPRINTMTH
/BIC/ZQUALITY /BIC/ZSHAPE /BIC/ZSIZE /BIC/ZVARIANT
/BIC/ZVOLUME
INTO TABLE IT_INVOICES
FROM /BIC/AZO_PMI100
FOR ALL ENTRIES IN T_DATA_PAK1
WHERE /BIC/ZSORDDORD = T_DATA_PAK1-/BIC/ZSORDDORD AND
/BIC/ZSORDIORD = T_DATA_PAK1-/BIC/ZSORDIORD AND
051114: Exclude pro forma invoices from selection.
( bill_type NE 'ZPF1' AND bill_type NE 'ZPF2' AND
bill_type NE 'ZPF3').
SORT: IT_INVOICES BY INV_SALES_ORD INV_SALES_ITEM.
DELETE IT_INVOICES WHERE ZQUALITY IS INITIAL.
REFRESH: T_DATA_PAK1.
LOOP AT T_DATA_PAK.
CLEAR: T_DATA_PAK1, IV_INVQTY, IV_INVVAL, IT_INVOICES, IT_CTBW.
MOVE-CORRESPONDING T_DATA_PAK TO T_DATA_PAK1.
loop at IT_INVOICES
where INV_SALES_ORD = T_DATA_PAK-/BIC/ZSORDDORD
and INV_SALES_ITEM = T_DATA_PAK-/BIC/ZSORDIORD.
IV_INVQTY = IV_INVQTY + IT_INVOICES-INV_QTY.
IV_INVVAL = IV_INVVAL + IT_INVOICES-NETVAL_INV.
endloop.
Use req. del. date if not conf. del. date is available
Changes being made to use conf. del. date instead of
req. del. date. This is not always filled in.
IF T_DATA_PAK1-/BIC/ZDATESCHL IS INITIAL.
MOVE T_DATA_PAK1-DSDEL_DATE to T_DATA_PAK1-/BIC/ZDATESCHL.
ENDIF.
move:
IV_INVQTY to T_DATA_PAK1-INV_QTY,
IV_INVVAL to T_DATA_PAK1-NETVAL_INV,
IT_INVOICES-ZBRAND to T_DATA_PAK1-/BIC/ZBRAND,
IT_INVOICES-ZBRANDOWN to T_DATA_PAK1-/BIC/ZBRANDOWN,
IT_INVOICES-ZDESGNOWN to T_DATA_PAK1-/BIC/ZDESGNOWN,
IT_INVOICES-ZFLAGBKLG to T_DATA_PAK1-/BIC/ZFLAGBKLG,
IT_INVOICES-ZNOCOLORS to T_DATA_PAK1-/BIC/ZNOCOLORS,
IT_INVOICES-ZNOSPCLRS to T_DATA_PAK1-/BIC/ZNOSPCLRS,
IT_INVOICES-ZOPENFCTY to T_DATA_PAK1-/BIC/ZOPENFCTY,
IT_INVOICES-ZPACKSYST to T_DATA_PAK1-/BIC/ZPACKSYST,
IT_INVOICES-ZPPG to T_DATA_PAK1-/BIC/ZPPG,
IT_INVOICES-ZAPPLICAT to T_DATA_PAK1-/BIC/ZAPPLICAT,
IT_INVOICES-ZPAPERGDE to T_DATA_PAK1-/BIC/ZPAPERGDE,
IT_INVOICES-ZPRINTMTH to T_DATA_PAK1-/BIC/ZPRINTMTH,
IT_INVOICES-ZQUALITY to T_DATA_PAK1-/BIC/ZQUALITY,
IT_INVOICES-ZSHAPE to T_DATA_PAK1-/BIC/ZSHAPE,
IT_INVOICES-ZSIZE to T_DATA_PAK1-/BIC/ZSIZE,
IT_INVOICES-ZVARIANT to T_DATA_PAK1-/BIC/ZVARIANT,
IT_INVOICES-ZVOLUME to T_DATA_PAK1-/BIC/ZVOLUME.
if IT_INVOICES-ZFLAGBKLG is initial.
SELECT /BIC/ZSORDDORD
/BIC/ZSORDIORD
/BIC/ZBRAND
/BIC/ZBRANDOWN
/BIC/ZDESGNOWN
/BIC/ZNOCOLORS
/BIC/ZNOSPCLRS
/BIC/C_APM_006
/BIC/ZPACKSYST
/BIC/ZPAPERGDE
/BIC/ZPPG
/BIC/ZPRINTMTH
/BIC/ZQUALITY
/BIC/ZSHAPE
/BIC/ZSIZE
/BIC/ZVARIANT
/BIC/ZVOLUME
INTO TABLE IT_CTBW
FROM /BIC/PZ_CTBWOBJ
FOR ALL ENTRIES IN T_DATA_PAK1
WHERE /BIC/ZSORDDORD = T_DATA_PAK1-/BIC/ZSORDDORD AND
/BIC/ZSORDIORD = T_DATA_PAK1-/BIC/ZSORDIORD AND
OBJVERS = 'A'.
SORT: IT_CTBW BY CTBW_SALES_ORD CTBW_SALES_ITEM.
DELETE IT_CTBW WHERE CTBW_QUALITY IS INITIAL.
REFRESH: T_DATA_PAK1.
endif.
loop at IT_CTBW
where CTBW_SALES_ORD = T_DATA_PAK-/BIC/ZSORDDORD
and CTBW_SALES_ITEM = T_DATA_PAK-/BIC/ZSORDIORD.
endloop.
move:
IT_CTBW-CTBW_BRAND to T_DATA_PAK1-/BIC/ZBRAND,
IT_CTBW-CTBW_BRANDOWN to T_DATA_PAK1-/BIC/ZBRANDOWN,
IT_CTBW-CTBW_DESGNOWN to T_DATA_PAK1-/BIC/ZDESGNOWN,
IT_CTBW-CTBW_NOCOLORS to T_DATA_PAK1-/BIC/ZNOCOLORS,
IT_CTBW-CTBW_NOSPCLRS to T_DATA_PAK1-/BIC/ZNOSPCLRS,
IT_CTBW-CTBW_PACKSYST to T_DATA_PAK1-/BIC/ZPACKSYST,
IT_CTBW-CTBW_PPG to T_DATA_PAK1-/BIC/ZPPG,
IT_CTBW-CTBW_PAPERGDE to T_DATA_PAK1-/BIC/ZPAPERGDE,
IT_CTBW-CTBW_PRINTMTH to T_DATA_PAK1-/BIC/ZPRINTMTH,
IT_CTBW-CTBW_QUALITY to T_DATA_PAK1-/BIC/ZQUALITY,
IT_CTBW-CTBW_SHAPE to T_DATA_PAK1-/BIC/ZSHAPE,
IT_CTBW-CTBW_SIZE to T_DATA_PAK1-/BIC/ZSIZE,
IT_CTBW-CTBW_VARIANT to T_DATA_PAK1-/BIC/ZVARIANT,
IT_CTBW-CTBW_VOLUME to T_DATA_PAK1-/BIC/ZVOLUME.
if T_DATA_PAK1-MATERIAL+0(1) eq 'A'.
move T_DATA_PAK1-MATERIAL+1(4) to T_DATA_PAK1-/BIC/ZQUALITY.
move T_DATA_PAK1-MATERIAL+5(3) to T_DATA_PAK1-/BIC/ZSIZE.
move T_DATA_PAK1-MATERIAL+8(2) to T_DATA_PAK1-/BIC/ZVARIANT.
endif.
APPEND T_DATA_PAK1.
ENDLOOP.
ENDIF.
IF SY-SUBRC EQ 0.
DATA_PACKAGE[] = T_DATA_PAK1[].
ABORT = 0.
ENDIF.
REFRESH: T_DATA_PAK, T_DATA_PAK1.
REFRESH: IT_INVOICES, IT_CTBW.
FREE: T_DATA_PAK,T_DATA_PAK1.
FREE: IT_INVOICES, IT_CTBW.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
$$ end of routine - insert your code only before this line -
ENDFORM.
Edited by: John Lucky on Jan 25, 2008 10:58 PMHi,
Why is the hard coding of "breakpoint" done.
Try removing it.
Regards
Merlin. -
Start routine to update some fields of a ODS based on the another ODS
Hi I know i have to do abap coding at the start routine to update a ODS based on another ODS. I have tried doing the code for quite some time now and i have not been successful. I think I havenu2019t followed the definition required for this routine.
I have 2 ODS, ODS1 has 3 key fields and ODS2 has 1 key field
I have to map the ODS based on a 1:3 relation.
I am writing this start routine for the update rules from ODS2 to ODS1.
The logic is if the key field of ODS2 is equal to either Key field 1 or Key field 2 or Key field 3 of ODS1 then that record from ODS2 has to be updated to the corresponding matching record of ODS1, else no update. The 3 key fields of ODS1 have different character length and character types and the key field of ODS2 has a different character length and type when compared to the any of the key fields of ODS2 can match any of those.
Like key field 1 of ODS1 has length 10. Key field 2 of ODS1 has length 10 and key field 3 of ODS1 has length 20 and all these fields are not alpha converted, but the key field of ODS2 has length 60 and it is alpha converted.
Can anyone please help me in this code.
My Code is as below.
ITAB1-T_BOL = DATA_PACKAGE-/BIC/ZLBOL.
***********NISTEVO SELECT******************************
SELECT /BIC/ZLBOL FROM /BIC/AWLONST0100 INTO ITAB1-T_BOL
WHERE /BIC/ZLBOL = ITAB1-T_BOL .
**************R/3 SELECT*******************************
SELECT /BIC/ZLRDELNU /BIC/ZLRSHIPNU /BIC/ZLREXTID
FROM /BIC/AWLOR3O0400
INTO CORRESPONDING FIELDS OF ITAB1
WHERE
/BIC/ZLRDELNU = ITAB1-T_BOL OR
/BIC/ZLRSHIPNU = ITAB1-T_BOL OR
/BIC/ZLREXTID = ITAB1-T_BOL .
SORT ITAB1 BY T_DELNU T_SHIPNU T_EXTID .
LOOP AT DATA_PACKAGE.
READ TABLE ITAB1 WITH KEY T_DELNU = DATA_PACKAGE-/BIC/ZLBOL.
IF SY-SUBRC = 0.
EXIT.
ENDIF.
READ TABLE ITAB1 WITH KEY T_SHIPNU = DATA_PACKAGE-/BIC/ZLBOL.
IF SY-SUBRC = 0.
EXIT.
ENDIF.
READ TABLE ITAB1 WITH KEY T_EXTID = DATA_PACKAGE-/BIC/ZLBOL.
IF SY-SUBRC = 0.
EXIT.
ENDIF.
DELETE DATA_PACKAGE .
ENDLOOP.
ENDSELECT.
ENDSELECT.
Points will be awarded.
Edited by: satish rajaram on Nov 6, 2008 4:51 PM
Edited by: satish rajaram on Nov 7, 2008 11:40 AM
Edited by: satish rajaram on Nov 7, 2008 11:43 AMThe logic is if the key field of ODS2 is equal to either Key field 1 or Key field 2 or Key field 3 of ODS1 then that record from ODS2 has to be updated to the corresponding matching record of ODS1, else no update. The 3 key fields of ODS1 have different character length and character types and the key field of ODS2 has a different character length and type when compared to the any of the key fields of ODS2 can match any of those.
Can you try below logic :
Below is not code it needs to be manipulated as per requirement.
ODS2 ---> ODS1
SELECT <key fields of ODS1>
FROM /BIC/A<ODS1>00
INTO ITAB
FOR ALL ENTRIES IN DATA_PACKAGE
WHERE
keyfield1 = data_package-key1
or
keyfield2 = data_package-key2
or
keyfield3 = data_package-key3
**Now itab has all entries which neednot be deleted from data_package.****
if sy-subrc=0.
***Check Itab and delete only those records not present in itab from data_package****
endif.
Hope this helps. -
Start routine and update rules
Hi,
What is accessed first:-
Start Routines or Update Rules?
What is the use of global variables in start routine?
Please reply.
Thanks.Hi......
You have different types of Routines in BW .
1) Start Routine in Transfer Rules
2) Transfer Routine in Transfer Rules.
3)Start Routine in Update Rules
4)Update Routine in Update Rules.
The routines that you write in transfer rules are applicable to all the Data targets that get the data from that particular Infosource, when you are going to write some code in Transfer rules, you have to understand that you are going to manupilate the data that is going to get into BW .
If you are going to write in Update Rules , then that logic is going to apply only for that particular Data target .
Eg : Let suppose I have a Flat file that gets data from 3 countries, US, Canada and Mexico.
Now I have prepared the data source for the same . But I dont want to have the data of Mexico in to BW itself.
So I will write a Start routine at TR to eliminate the data of Mexico.
My Next step is I want the data of US into one ODS and Canada data in to another ODS.
For this I handle the dataflow at Start routine in Update rules, to eliminate Canada data for US ODS and Vice Versa.
Global variables in Start routine
You can have global variables, internal tables populated by the
startup routine. This data will be available to the field
routines. Create yourself a start routine, declare some
variables in the global section, and then create a field
routine. You will be able to use the globally declared objects
in the field routine
Please check below help link for routines in sap netweaver 2004s
http://help.sap.com/saphelp_sem60/helpdata/en/e3/732c42be6fde2ce10000000a1550b0/frameset.htm
How to guide "How to transformations routines".Please check the below link:
https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/dc1d9990-0201-0010-16aa-db3c4eb8b642
start routine in transfer rules
Look up to load master data
excluding
Start Routine in Transfer Rules
Sample code in Update Rule to restrict data selection?
Append Datapak - transfer start routine
Excluding Blank field in Infopackage Filter
Trans Routine ABAP help ..
transfer routine
Date key figure: Convert DATS format to DEC format
Date Conversion in Flat File
Transfer Routine ABAP
conversion exit
Date Conversion
Problem with conversion char to numc in transference rules
conversion routine..?
update routine
How to call a function in Update Rules to reverse a key figure sign
Need Sample Code for Update Rules
Date calculation
Difference between data in PSA and Data in Infocube
No RETURNCODE <> 0 allowed in update routines in transfer mode
the diffrerece between DEC and (yyyymmdd) 8 char in Time defination
Access master data in update rules
Date key figure: Convert DATS format to DEC format
start routine in update rules
Is it possible to read a third ODS in update rules between two ODS?
update rule coding while loading data from ODS to CUBE
Start Routine in Update Rules to populate additional fields from ODS
Coding in Update Rules accessing a Z-Table
Start routine
Hope this helps you..........
Regards,
Debjani.........
Edited by: Debjani Mukherjee on Oct 1, 2008 4:58 PM -
Start Routine code error of Perform routine 9998
Hi,
I have install standard and then migrate to 7.0 all the flow of modeling.
but after loading data in PSA, while activation i will found following problem (error in routine).
In PERFORM or CALL FUNCTION ROUTINE_9998, the actual parameter SOURCE_PACKAGE is incompatible with the formal parameter DATA_PACKAGE.
please suggest me.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 tys_SC_1,
InfoObject: 0MPOINT Measuring point.
MPOINT TYPE /BI0/OIMPOINT,
InfoObject: 0MDOC Measurement Document.
MDOC TYPE /BI0/OIMDOC,
InfoObject: 0MPOBJ Object Number of Measuring Point Object.
MPOBJ TYPE /BI0/OIMPOBJ,
InfoObject: 0MPTYP Type of Measuring Point.
MPTYP TYPE /BI0/OIMPTYP,
InfoObject: 0PSORT Position Number of Measuring Point in Object (
*Sort Field).
PSORT TYPE /BI0/OIPSORT,
InfoObject: 0ASSEMBLY Assembly.
ASSEMBLY TYPE /BI0/OIASSEMBLY,
InfoObject: 0ATINN Internal Characteristic Number.
ATINN TYPE /BI0/OIATINN,
InfoObject: 0MDATE Date of Measurement.
MDATE TYPE /BI0/OIMDATE,
InfoObject: 0TIME Time.
TIME TYPE /BI0/OITIME,
InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
DESIRSI TYPE /BI0/OIDESIRSI,
InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
TVIND TYPE /BI0/OITVIND,
InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
MRMINI TYPE /BI0/OIMRMINI,
InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
*ing in SI Unit.
MRMINSI TYPE /BI0/OIMRMINSI,
InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
MRMAXI TYPE /BI0/OIMRMAXI,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0CJUMPSI Counter Overflow Reading in SI Unit.
CJUMPSI TYPE /BI0/OICJUMPSI,
InfoObject: 0PYEARSI Annual Performance in SI Unit.
PYEARSI TYPE /BI0/OIPYEARSI,
InfoObject: 0CREATED_BY Created By.
CREATED_BY TYPE /BI0/OICREATED_BY,
InfoObject: 0READSI Measured Value/Total Counter Reading in SI Un
*it.
READSI TYPE /BI0/OIREADSI,
InfoObject: 0READEU Measured Value in Document Entry Unit.
READEU TYPE /BI0/OIREADEU,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
InfoObject: 0CNTRRSI Counter Reading in SI Unit.
CNTRRSI TYPE /BI0/OICNTRRSI,
InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
CDIFFSI TYPE /BI0/OICDIFFSI,
InfoObject: 0CAT_TYPE Catalog.
CAT_TYPE TYPE /BI0/OICAT_TYPE,
InfoObject: 0CAT_GROUP Code group.
CAT_GROUP TYPE /BI0/OICAT_GROUP,
InfoObject: 0FI_STATUS Processing Status.
FI_STATUS TYPE /BI0/OIFI_STATUS,
InfoObject: 0DIM_ID Dimension Key.
DIM_ID TYPE /BI0/OIDIM_ID,
InfoObject: 0CNTIND Measuring Point is Counter.
CNTIND TYPE /BI0/OICNTIND,
InfoObject: 0EQUIPMENT Equipment Number.
EQUIPMENT TYPE /BI0/OIEQUIPMENT,
InfoObject: 0FUNCT_LOC Functional Location.
FUNCT_LOC TYPE /BI0/OIFUNCT_LOC,
InfoObject: 0CAT_CODE Code.
CAT_CODE TYPE /BI0/OICAT_CODE,
InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
*ing in SI Unit.
MRMAXSI TYPE /BI0/OIMRMAXSI,
InfoObject: 0DOCAF Measurement Document Included for Associated T
*ask.
DOCAF TYPE /BI0/OIDOCAF,
InfoObject: 0RECORDMODE BW Delta Process: Update Mode.
RECORDMODE TYPE RODMUPDMOD,
InfoObject: ZSTEXT Object Number Text.
/BIC/ZSTEXT TYPE /BIC/OIZSTEXT,
Field: RECORD.
RECORD TYPE RSARECORD,
END OF tys_SC_1.
TYPES:
tyt_SC_1 TYPE STANDARD TABLE OF tys_SC_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
start_routine
IMPORTING
request type rsrequest
datapackid type rsdatapid
EXPORTING
monitor type rstr_ty_t_monitors
CHANGING
SOURCE_PACKAGE type tyt_SC_1
RAISING
cx_rsrout_abort.
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 *
TYPES:
BEGIN OF tys_SC_1_full,
InfoObject: 0MPOINT Measuring point.
MPOINT TYPE /BI0/OIMPOINT,
InfoObject: 0MDOC Measurement Document.
MDOC TYPE /BI0/OIMDOC,
InfoObject: 0MPOBJ Object Number of Measuring Point Object.
MPOBJ TYPE /BI0/OIMPOBJ,
InfoObject: 0MPTYP Type of Measuring Point.
MPTYP TYPE /BI0/OIMPTYP,
InfoObject: 0PSORT Position Number of Measuring Point in Object (
*Sort Field).
PSORT TYPE /BI0/OIPSORT,
InfoObject: 0ASSEMBLY Assembly.
ASSEMBLY TYPE /BI0/OIASSEMBLY,
InfoObject: 0ATINN Internal Characteristic Number.
ATINN TYPE /BI0/OIATINN,
InfoObject: 0MDATE Date of Measurement.
MDATE TYPE /BI0/OIMDATE,
InfoObject: 0TIME Time.
TIME TYPE /BI0/OITIME,
InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
DESIRSI TYPE /BI0/OIDESIRSI,
InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
TVIND TYPE /BI0/OITVIND,
InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
MRMINI TYPE /BI0/OIMRMINI,
InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
*ing in SI Unit.
MRMINSI TYPE /BI0/OIMRMINSI,
InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
MRMAXI TYPE /BI0/OIMRMAXI,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0CJUMPSI Counter Overflow Reading in SI Unit.
CJUMPSI TYPE /BI0/OICJUMPSI,
InfoObject: 0PYEARSI Annual Performance in SI Unit.
PYEARSI TYPE /BI0/OIPYEARSI,
InfoObject: 0CREATED_BY Created By.
CREATED_BY TYPE /BI0/OICREATED_BY,
InfoObject: 0READSI Measured Value/Total Counter Reading in SI Un
*it.
READSI TYPE /BI0/OIREADSI,
InfoObject: 0READEU Measured Value in Document Entry Unit.
READEU TYPE /BI0/OIREADEU,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
InfoObject: 0CNTRRSI Counter Reading in SI Unit.
CNTRRSI TYPE /BI0/OICNTRRSI,
InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
CDIFFSI TYPE /BI0/OICDIFFSI,
InfoObject: 0CAT_TYPE Catalog.
CAT_TYPE TYPE /BI0/OICAT_TYPE,
InfoObject: 0CAT_GROUP Code group.
CAT_GROUP TYPE /BI0/OICAT_GROUP,
InfoObject: 0FI_STATUS Processing Status.
FI_STATUS TYPE /BI0/OIFI_STATUS,
InfoObject: 0DIM_ID Dimension Key.
DIM_ID TYPE /BI0/OIDIM_ID,
InfoObject: 0CNTIND Measuring Point is Counter.
CNTIND TYPE /BI0/OICNTIND,
InfoObject: 0EQUIPMENT Equipment Number.
EQUIPMENT TYPE /BI0/OIEQUIPMENT,
InfoObject: 0FUNCT_LOC Functional Location.
FUNCT_LOC TYPE /BI0/OIFUNCT_LOC,
InfoObject: 0CAT_CODE Code.
CAT_CODE TYPE /BI0/OICAT_CODE,
InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
*ing in SI Unit.
MRMAXSI TYPE /BI0/OIMRMAXSI,
InfoObject: 0DOCAF Measurement Document Included for Associated T
*ask.
DOCAF TYPE /BI0/OIDOCAF,
InfoObject: 0RECORDMODE BW Delta Process: Record Mode.
RECORDMODE TYPE RODMUPDMOD,
Field: RECNO Data record number.
RECNO TYPE RSARECORD,
END OF tys_SC_1_full.
TYPES:
tyt_SC_1_full TYPE STANDARD TABLE OF tys_SC_1_full
WITH NON-UNIQUE DEFAULT KEY.
TYPES:
BEGIN OF tys_TG_1_full,
Field: SID Master data ID.
SID TYPE RSSID,
Field: DATAPAKID Data packet number.
DATAPAKID TYPE RSDATAPID,
Field: RECORD Data record number.
RECORD TYPE RSARECORD,
InfoObject: 0MPOINT Measuring point.
MPOINT TYPE /BI0/OIMPOINT,
InfoObject: 0MDOC Measurement Document.
MDOC TYPE /BI0/OIMDOC,
InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
*ing in SI Unit.
MRMINSI TYPE /BI0/OIMRMINSI,
InfoObject: 0FI_STATUS Processing Status.
FI_STATUS TYPE /BI0/OIFI_STATUS,
InfoObject: 0DIM_ID Dimension Key.
DIM_ID TYPE /BI0/OIDIM_ID,
InfoObject: 0CNTIND Measuring Point is Counter.
CNTIND TYPE /BI0/OICNTIND,
InfoObject: 0EQUIPMENT Equipment Number.
EQUIPMENT TYPE /BI0/OIEQUIPMENT,
InfoObject: 0FUNCT_LOC Functional Location.
FUNCT_LOC TYPE /BI0/OIFUNCT_LOC,
InfoObject: 0CAT_CODE Code.
CAT_CODE TYPE /BI0/OICAT_CODE,
InfoObject: 0CAT_TYPE Catalog.
CAT_TYPE TYPE /BI0/OICAT_TYPE,
InfoObject: 0CAT_GROUP Code group.
CAT_GROUP TYPE /BI0/OICAT_GROUP,
InfoObject: 0CREATED_BY Created By.
CREATED_BY TYPE /BI0/OICREATED_BY,
InfoObject: 0MPOBJ Object Number of Measuring Point Object.
MPOBJ TYPE /BI0/OIMPOBJ,
InfoObject: 0READEU Measured Value in Document Entry Unit.
READEU TYPE /BI0/OIREADEU,
InfoObject: 0CJUMPSI Counter Overflow Reading in SI Unit.
CJUMPSI TYPE /BI0/OICJUMPSI,
InfoObject: 0PYEARSI Annual Performance in SI Unit.
PYEARSI TYPE /BI0/OIPYEARSI,
InfoObject: 0PSORT Position Number of Measuring Point in Object (
*Sort Field).
PSORT TYPE /BI0/OIPSORT,
InfoObject: 0ASSEMBLY Assembly.
ASSEMBLY TYPE /BI0/OIASSEMBLY,
InfoObject: 0ATINN Internal Characteristic Number.
ATINN TYPE /BI0/OIATINN,
InfoObject: 0MDATE Date of Measurement.
MDATE TYPE /BI0/OIMDATE,
InfoObject: 0TIME Time.
TIME TYPE /BI0/OITIME,
InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
TVIND TYPE /BI0/OITVIND,
InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
MRMINI TYPE /BI0/OIMRMINI,
InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
DESIRSI TYPE /BI0/OIDESIRSI,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0DESIREU Target Value for Measuring Point in Document
Entry Unit.
DESIREU TYPE /BI0/OIDESIREU,
InfoObject: 0CNTRRSI Counter Reading in SI Unit.
CNTRRSI TYPE /BI0/OICNTRRSI,
InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
CDIFFSI TYPE /BI0/OICDIFFSI,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
InfoObject: 0MRMINEU Lower Meas. Limit or Min. Total Counter Read
*ing Document UoM.
MRMINEU TYPE /BI0/OIMRMINEU,
InfoObject: 0MRMAXEU Upper Meas. Limit or Max. Total Counter Read
*ing in Doc. M.U..
MRMAXEU TYPE /BI0/OIMRMAXEU,
InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
MRMAXI TYPE /BI0/OIMRMAXI,
InfoObject: 0CNTRREU Counter Reading in Document Entry Unit.
CNTRREU TYPE /BI0/OICNTRREU,
InfoObject: 0CDIFFEU Counter Reading Difference in Document Entry
Unit.
CDIFFEU TYPE /BI0/OICDIFFEU,
InfoObject: 0RECORDMODE BW Delta Process: Record Mode.
RECORDMODE TYPE RODMUPDMOD,
InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
*ing in SI Unit.
MRMAXSI TYPE /BI0/OIMRMAXSI,
InfoObject: 0READSI Measured Value/Total Counter Reading in SI Un
*it.
READSI TYPE /BI0/OIREADSI,
END OF tys_TG_1_full.
TYPES:
BEGIN OF tys_SC_1__RULE_34,
InfoObject: 0DESIRSI Target Value for Measuring Point in SI Unit.
DESIRSI TYPE /BI0/OIDESIRSI,
InfoObject: 0TVIND Target Value for Measuring Point Is Defined.
TVIND TYPE /BI0/OITVIND,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
Field: RECORD.
RECORD TYPE RSARECORD,
END OF tys_SC_1__RULE_34.
TYPES:
BEGIN OF tys_SC_1__RULE_35,
InfoObject: 0MRMINI Lower Measurement Area Limit Is Defined.
MRMINI TYPE /BI0/OIMRMINI,
InfoObject: 0MRMINSI Lower Meas. Limit or Min. Total Counter Read
*ing in SI Unit.
MRMINSI TYPE /BI0/OIMRMINSI,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
Field: RECORD.
RECORD TYPE RSARECORD,
END OF tys_SC_1__RULE_35.
TYPES:
BEGIN OF tys_SC_1__RULE_36,
InfoObject: 0MRMAXI Upper Measurement Area Limit Is Defined.
MRMAXI TYPE /BI0/OIMRMAXI,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
InfoObject: 0MRMAXSI Upper Meas. Limit or Max. Total Counter Read
*ing in SI Unit.
MRMAXSI TYPE /BI0/OIMRMAXSI,
Field: RECORD.
RECORD TYPE RSARECORD,
END OF tys_SC_1__RULE_36.
TYPES:
BEGIN OF tys_SC_1__RULE_37,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
InfoObject: 0CNTRRSI Counter Reading in SI Unit.
CNTRRSI TYPE /BI0/OICNTRRSI,
InfoObject: 0CNTIND Measuring Point is Counter.
CNTIND TYPE /BI0/OICNTIND,
Field: RECORD.
RECORD TYPE RSARECORD,
END OF tys_SC_1__RULE_37.
TYPES:
BEGIN OF tys_SC_1__RULE_38,
InfoObject: 0SIUNIT SI unit.
SIUNIT TYPE /BI0/OISIUNIT,
InfoObject: 0RECDU Unit of Measurement for Document Entry.
RECDU TYPE /BI0/OIRECDU,
InfoObject: 0CDIFFSI Counter Reading Difference in SI Unit.
CDIFFSI TYPE /BI0/OICDIFFSI,
InfoObject: 0CNTIND Measuring Point is Counter.
CNTIND TYPE /BI0/OICNTIND,
Field: RECORD.
RECORD TYPE RSARECORD,
END OF tys_SC_1__RULE_38.
Additional types for start routine interface
TYPES:
data_package_structure type tys_SC_1_full.
Additional declaration for update rule interface
DATA:
MONITOR type standard table of rsmonitor WITH HEADER LINE,
MONITOR_RECNO type standard table of rsmonitors WITH HEADER LINE,
RECORD_NO LIKE SY-TABIX,
RECORD_ALL LIKE SY-TABIX,
SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS.
global definitions from update rules
TABLES: ...
DATA: ...
*******DATA: G_T_0EQUIPMENT TYPE STANDARD TABLE OF /BI0/MEQUIPMENT.
data: lt_data type ref to data.
data: ls_data type ref to data.
field-symbols: <G_T_0EQUIPMENT> type standard table.
field-symbols: <G_S_0EQUIPMENT> type any.
field-symbols: <FUNCT_LOC> type any.
field-symbols: <DATEFROM> type any.
field-symbols: <DATETO> type any.
constants: c_tabname type rstlogotab value '/BI0/MEQUIPMENT'.
*& Form routine_9998
text
-->DATA_PACKAGE text
-->ABORT text
-->RAISING text
-->CX_SY_ARITHMETIC_ERROR text
-->CX_SY_CONVERSION_ERROR text
FORM routine_9998
TABLES DATA_PACKAGE TYPE tyt_SC_1_full
CHANGING
ABORT LIKE sy-subrc
RAISING
cx_sy_arithmetic_error
cx_sy_conversion_error.
init variables
fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
to make monitor entries
In this start routine missing functional location for
an equipment is added to a Data Package record, if it is available
in the master data of the equipment
create data lt_data type table of (c_tabname).
assign lt_data->* to <G_T_0EQUIPMENT>.
create data ls_data type (c_tabname).
assign ls_data->* to <G_S_0EQUIPMENT>.
assign component 'FUNCT_LOC' of structure <G_S_0EQUIPMENT> to
<FUNCT_LOC>.
assign component 'DATE_FROM' of structure <G_S_0EQUIPMENT> to
<DATEFROM>.
assign component 'DATE_TO' of structure <G_S_0EQUIPMENT> to
<DATETO>.
CALL FUNCTION 'RSAU_READ_MASTER_DATA'
EXPORTING
I_IOBJNM = '0EQUIPMENT'
I_FLG_WHOLE_TABLE = 'X'
IMPORTING
E_TABLE = <G_T_0EQUIPMENT>
EXCEPTIONS
READ_ERROR = 1
NO_SUCH_ATTRIBUTE = 2
WRONG_IMPORT_PARAMETERS = 3
CHAVL_NOT_FOUND = 4
OTHERS = 5.
CASE SY-SUBRC.
WHEN 0.
LOOP AT <G_T_0EQUIPMENT> INTO <G_S_0EQUIPMENT>.
IF <FUNCT_LOC> IS INITIAL.
DELETE <G_T_0EQUIPMENT>.
ENDIF.
master data collected and condensed
ENDLOOP.
LOOP AT DATA_PACKAGE.
IF ( DATA_PACKAGE-FUNCT_LOC IS INITIAL ) AND
( DATA_PACKAGE-EQUIPMENT IS NOT INITIAL ).
READ TABLE <G_T_0EQUIPMENT> WITH KEY
('EQUIPMENT') = DATA_PACKAGE-EQUIPMENT INTO <G_S_0EQUIPMENT>
IF SY-SUBRC = 0.
IF ( DATA_PACKAGE-MDATE >= <DATEFROM> )
AND ( DATA_PACKAGE-MDATE <= <DATETO> ).
record for equipment exists and valid
DATA_PACKAGE-FUNCT_LOC = <FUNCT_LOC>.
MODIFY DATA_PACKAGE.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
WHEN 4.
master data is not (yet) loaded
WHEN OTHERS.
problem occured, output as warning
MONITOR-MSGID = SY-MSGID.
MONITOR-MSGTY = 'W'.
MONITOR-MSGNO = SY-MSGNO.
MONITOR-MSGV1 = SY-MSGV1.
MONITOR-MSGV2 = SY-MSGV2.
MONITOR-MSGV3 = SY-MSGV3.
MONITOR-MSGV4 = SY-MSGV4.
APPEND MONITOR.
ENDCASE.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
ENDFORM. "routine_9998
*& Form routine_0001
text
-->COMM_STRUCTURE text
-->RESULT text
-->RETURNCODE text
-->ABORT text
-->RAISING text
-->CX_SY_ARITHMETIC_ERROR text
-->CX_SY_CONVERSION_ERROR text
FORM routine_0001
USING
COMM_STRUCTURE type tys_SC_1__RULE_34
CHANGING
RESULT TYPE tys_TG_1_full-DESIREU
RETURNCODE LIKE sy-subrc
ABORT LIKE sy-subrc
RAISING
cx_sy_arithmetic_error
cx_sy_conversion_error.
init variables
fill the internal table "MONITOR", to make monitor entries
CLEAR RESULT.
IF COMM_STRUCTURE-TVIND = 'X'.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
INPUT = COMM_STRUCTURE-DESIRSI
NO_TYPE_CHECK = 'X'
ROUND_SIGN = ' '
UNIT_IN = COMM_STRUCTURE-SIUNIT
UNIT_OUT = COMM_STRUCTURE-RECDU
IMPORTING
ADD_CONST =
DECIMALS =
DENOMINATOR =
NUMERATOR =
OUTPUT = RESULT
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
DIVISION_BY_ZERO = 2
INPUT_INVALID = 3
OUTPUT_INVALID = 4
OVERFLOW = 5
TYPE_INVALID = 6
UNITS_MISSING = 7
UNIT_IN_NOT_FOUND = 8
UNIT_OUT_NOT_FOUND = 9
OTHERS = 10
IF SY-SUBRC <> 0.
MONITOR-MSGID = SY-MSGID.
MONITOR-MSGTY = 'W'.
MONITOR-MSGNO = SY-MSGNO.
MONITOR-MSGV1 = SY-MSGV1.
MONITOR-MSGV2 = SY-MSGV2.
MONITOR-MSGV3 = SY-MSGV3.
MONITOR-MSGV4 = SY-MSGV4.
APPEND MONITOR.
ENDIF.
ENDIF.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
ENDFORM. "routine_0001
*& Form routine_0002
text
-->COMM_STRUCTURE text
-->RESULT text
-->RETURNCODE text
-->ABORT text
-->RAISING text
-->CX_SY_ARITHMETIC_ERROR text
-->CX_SY_CONVERSION_ERROR text
FORM routine_0002
USING
COMM_STRUCTURE type tys_SC_1__RULE_35
CHANGING
RESULT TYPE tys_TG_1_full-MRMINEU
RETURNCODE LIKE sy-subrc
ABORT LIKE sy-subrc
RAISING
cx_sy_arithmetic_error
cx_sy_conversion_error.
init variables
fill the internal table "MONITOR", to make monitor entries
CLEAR RESULT.
IF COMM_STRUCTURE-MRMINI = 'X'.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
INPUT = COMM_STRUCTURE-MRMINSI
NO_TYPE_CHECK = 'X'
ROUND_SIGN = ' '
UNIT_IN = COMM_STRUCTURE-SIUNIT
UNIT_OUT = COMM_STRUCTURE-RECDU
IMPORTING
ADD_CONST =
DECIMALS =
DENOMINATOR =
NUMERATOR =
OUTPUT = RESULT
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
DIVISION_BY_ZERO = 2
INPUT_INVALID = 3
OUTPUT_INVALID = 4
OVERFLOW = 5
TYPE_INVALID = 6
UNITS_MISSING = 7
UNIT_IN_NOT_FOUND = 8
UNIT_OUT_NOT_FOUND = 9
OTHERS = 10
IF SY-SUBRC <> 0.
MONITOR-MSGID = SY-MSGID.
MONITOR-MSGTY = 'W'.
MONITOR-MSGNO = SY-MSGNO.
MONITOR-MSGV1 = SY-MSGV1.
MONITOR-MSGV2 = SY-MSGV2.
MONITOR-MSGV3 = SY-MSGV3.
MONITOR-MSGV4 = SY-MSGV4.
APPEND MONITOR.
ENDIF.
ENDIF.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
ENDFORM. "routine_0002
*& Form routine_0003
text
-->COMM_STRUCTURE text
-->RESULT text
-->RETURNCODE text
-->ABORT text
-->RAISING text
-->CX_SY_ARITHMETIC_ERROR text
-->CX_SY_CONVERSION_ERROR text
FORM routine_0003
USING
COMM_STRUCTURE type tys_SC_1__RULE_36
CHANGING
RESULT TYPE tys_TG_1_full-MRMAXEU
RETURNCODE LIKE sy-subrc
ABORT LIKE sy-subrc
RAISING
cx_sy_arithmetic_error
cx_sy_conversion_error.
init variables
fill the internal table "MONITOR", to make monitor entries
CLEAR RESULT.
IF COMM_STRUCTURE-MRMAXI = 'X'.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
INPUT = COMM_STRUCTURE-MRMAXSI
NO_TYPE_CHECK = 'X'
ROUND_SIGN = ' '
UNIT_IN = COMM_STRUCTURE-SIUNIT
UNIT_OUT = COMM_STRUCTURE-RECDU
IMPORTING
ADD_CONST =
DECIMALS =
DENOMINATOR =
NUMERATOR =
OUTPUT = RESULT
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
DIVISION_BY_ZERO = 2
INPUT_INVALID = 3
OUTPUT_INVALID = 4
OVERFLOW = 5
TYPE_INVALID = 6
UNITS_MISSING = 7
UNIT_IN_NOT_FOUND = 8
UNIT_OUT_NOT_FOUND = 9
OTHERS = 10
IF SY-SUBRC <> 0.
MONITOR-MSGID = SY-MSGID.
MONITOR-MSGTY = 'W'.
MONITOR-MSGNO = SY-MSGNO.
MONITOR-MSGV1 = SY-MSGV1.
MONITOR-MSGV2 = SY-MSGV2.
MONITOR-MSGV3 = SY-MSGV3.
MONITOR-MSGV4 = SY-MSGV4.
APPEND MONITOR.
ENDIF.
ENDIF.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
ENDFORM. "routine_0003
*& Form routine_0004
text
-->COMM_STRUCTURE text
-->RESULT text
-->RETURNCODE text
-->ABORT text
-->RAISING text
-->CX_SY_ARITHMETIC_ERROR text
-->CX_SY_CONVERSION_ERROR text
FORM routine_0004
USING
COMM_STRUCTURE type tys_SC_1__RULE_37
CHANGING
RESULT TYPE tys_TG_1_full-CNTRREU
RETURNCODE LIKE sy-subrc
ABORT LIKE sy-subrc
RAISING
cx_sy_arithmetic_error
cx_sy_conversion_error.
init variables
fill the internal table "MONITOR", to make monitor entries
CLEAR RESULT.
IF COMM_STRUCTURE-CNTIND = 'X'.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
INPUT = COMM_STRUCTURE-CNTRRSI
NO_TYPE_CHECK = 'X'
ROUND_SIGN = ' '
UNIT_IN = COMM_STRUCTURE-SIUNIT
UNIT_OUT = COMM_STRUCTURE-RECDU
IMPORTING
ADD_CONST =
DECIMALS =
DENOMINATOR =
NUMERATOR =
OUTPUT = RESULT
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
DIVISION_BY_ZERO = 2
INPUT_INVALID = 3
OUTPUT_INVALID = 4
OVERFLOW = 5
TYPE_INVALID = 6
UNITS_MISSING = 7
UNIT_IN_NOT_FOUND = 8
UNIT_OUT_NOT_FOUND = 9
OTHERS = 10
IF SY-SUBRC <> 0.
MONITOR-MSGID = SY-MSGID.
MONITOR-MSGTY = 'W'.
MONITOR-MSGNO = SY-MSGNO.
MONITOR-MSGV1 = SY-MSGV1.
MONITOR-MSGV2 = SY-MSGV2.
MONITOR-MSGV3 = SY-MSGV3.
MONITOR-MSGV4 = SY-MSGV4.
APPEND MONITOR.
ENDIF.
ENDIF.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
ENDFORM. "routine_0004
*& Form routine_0005
text
-->COMM_STRUCTURE text
-->RESULT text
-->RETURNCODE text
-->ABORT text
-->RAISING text
-->CX_SY_ARITHMETIC_ERROR text
-->CX_SY_CONVERSION_ERROR text
FORM routine_0005
USING
COMM_STRUCTURE type tys_SC_1__RULE_38
CHANGING
RESULT TYPE tys_TG_1_full-CDIFFEU
RETURNCODE LIKE sy-subrc
ABORT LIKE sy-subrc
RAISING
cx_sy_arithmetic_error
cx_sy_conversion_error.
init variables
fill the internal table "MONITOR", to make monitor entries
CLEAR RESULT.
IF COMM_STRUCTURE-CNTIND = 'X'.
CALL FUNCTION 'UNIT_CONVERSION_SIMPLE'
EXPORTING
INPUT = COMM_STRUCTURE-CDIFFSI
NO_TYPE_CHECK = 'X'
ROUND_SIGN = ' '
UNIT_IN = COMM_STRUCTURE-SIUNIT
UNIT_OUT = COMM_STRUCTURE-RECDU
IMPORTING
ADD_CONST =
DECIMALS =
DENOMINATOR =
NUMERATOR =
OUTPUT = RESULT
EXCEPTIONS
CONVERSION_NOT_FOUND = 1
DIVISION_BY_ZERO = 2
INPUT_INVALID = 3
OUTPUT_INVALID = 4
OVERFLOW = 5
TYPE_INVALID = 6
UNITS_MISSING = 7
UNIT_IN_NOT_FOUND = 8
UNIT_OUT_NOT_FOUND = 9
OTHERS = 10
IF SY-SUBRC <> 0.
MONITOR-MSGID = SY-MSGID.
MONITOR-MSGTY = 'W'.
MONITOR-MSGNO = SY-MSGNO.
MONITOR-MSGV1 = SY-MSGV1.
MONITOR-MSGV2 = SY-MSGV2.
MONITOR-MSGV3 = SY-MSGV3.
MONITOR-MSGV4 = SY-MSGV4.
APPEND MONITOR.
ENDIF.
ENDIF.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
ENDFORM. "routine_0005
TYPES: BEGIN OF TY_/BI0/PMPOINT,
MPOINT TYPE /BI0/PMPOINT-MPOINT,
MRNGU TYPE /BI0/PMPOINT-MRNGU,
END of TY_/BI0/PMPOINT.
DATA: /BI0/PMPOINT_TEMP TYPE STANDARD TABLE OF
TY_/BI0/PMPOINT,
W_/BI0/PMPOINT_TEMP like line of /BI0/PMPOINT_TEMP.
$$ 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> TYPE tys_SC_1.
DATA:
MONITOR_REC TYPE rstmonitor.
*$*$ begin of routine - insert your code only below this line *-*
Data:
l_subrc type sy-tabix,
l_abort type sy-tabix,
ls_monitor TYPE rsmonitor,
ls_monitor_recno TYPE rsmonitors.
REFRESH:
MONITOR,
MONITOR_RECNO.
Runtime attributs
SOURCE_SYSTEM = p_r_request->get_logsys( ).
Migrated update rule call
Perform routine_9998
TABLES
SOURCE_PACKAGE
CHANGING
l_abort.
*-- Convert Messages in Transformation format
LOOP AT MONITOR_RECNO INTO ls_monitor_recno.
move-CORRESPONDING ls_monitor_recno to MONITOR_REC.
append monitor_rec to MONITOR.
ENDLOOP.
LOOP AT MONITOR INTO ls_monitor.
move-CORRESPONDING ls_monitor to MONITOR_REC.
append monitor_rec to MONITOR.
ENDLOOP.
IF l_abort <> 0.
RAISE EXCEPTION TYPE CX_RSROUT_ABORT.
ENDIF.
$$ end of routine - insert your code only before this line -
ENDMETHOD. "start_routine
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.
METHOD inverse_start_routine.
$$ 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_start_routine
ENDCLASS. "routine IMPLEMENTATION -
Hello All,
I am trying to activate a couple transformations for cubes in purchasing. I am getting the error in start routine. I checked the start routine.
E:In PERFORM or CALL FUNCTION "ROUTINE_9998", the actual parameter
"SOURCE_PACKAGE" is incompatible with the formal parameter
"DATA_PACKAGE"
I did see a couple threads in sdn regarding this. But wanted to make sure if those thing sapplyin my case. I am new to SAP BW hence want to make sure before touching the code.
Can someone help me resolve this soon?
Thanks,
Dee.Hello Rakesh,
METHODS
start_routine
IMPORTING
request type rsrequest
datapackid type rsdatapid
EXPORTING
monitor type rstr_ty_t_monitors
CHANGING
SOURCE_PACKAGE type tyt_SC_1
RAISING
cx_rsrout_abort.
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 *
*The above part is in gray and i cannot change it.
MONITOR_RECNO.
Runtime attributs
SOURCE_SYSTEM = p_r_request->get_logsys( ).
Migrated update rule call
Perform routine_9998
TABLES
SOURCE_PACKAGE
CHANGING
l_abort.
*-- Convert Messages in Transformation format
LOOP AT MONITOR_RECNO INTO ls_monitor_recno.
move-CORRESPONDING ls_monitor_recno to MONITOR_REC.
append monitor_rec to MONITOR.
ENDLOOP.
LOOP AT MONITOR INTO ls_monitor.
move-CORRESPONDING ls_monitor to MONITOR_REC.
append monitor_rec to MONITOR.
ENDLOOP.
IF l_abort <> 0.
RAISE EXCEPTION TYPE CX_RSROUT_ABORT.
ENDIF.
I dont know abap..can you please guide me with this -
What is the logic behind the start routine
Dear One's,
Kindly take a moment and explain the logic behind this start routine written in update rules of ODS.
PROGRAM UPDATE_ROUTINE.
$$ begin of global - insert your declaration only below this line -
$$ end of global - insert your declaration only before this line -
The follow definition is new in the BW3.x
TYPES:
BEGIN OF DATA_PACKAGE_STRUCTURE.
INCLUDE STRUCTURE /BIC/CST_T07_O006.
TYPES:
RECNO LIKE sy-tabix,
END OF DATA_PACKAGE_STRUCTURE.
DATA:
DATA_PACKAGE TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
FORM startup
TABLES MONITOR STRUCTURE RSMONITOR "user defined monitoring
MONITOR_RECNO STRUCTURE RSMONITORS " monitoring with record n
DATA_PACKAGE STRUCTURE DATA_PACKAGE
USING RECORD_ALL LIKE SY-TABIX
SOURCE_SYSTEM LIKE RSUPDSIMULH-LOGSYS
CHANGING ABORT LIKE SY-SUBRC. "set ABORT <> 0 to cancel update
$$ begin of routine - insert your code only below this line -
fill the internal tables "MONITOR" and/or "MONITOR_RECNO",
to make monitor entries.
DATA: ITAB_/BIC/AT07_O00600 TYPE SORTED TABLE OF /BIC/AT07_O00600
WITH HEADER LINE
WITH UNIQUE DEFAULT KEY INITIAL SIZE 0,
DATA_PACKAGE_NEW TYPE STANDARD TABLE OF DATA_PACKAGE_STRUCTURE
WITH HEADER LINE
WITH NON-UNIQUE DEFAULT KEY INITIAL SIZE 0.
sort the datapackage based on lead number and lead program definition
SORT DATA_PACKAGE BY /BIC/TLDNR /BIC/TLDPRGFTE.
from the resources ODS read all lead values based on the values those
SELECT * FROM /BIC/AT07_O00600 INTO TABLE
ITAB_/BIC/AT07_O00600
FOR ALL ENTRIES IN DATA_PACKAGE
WHERE /BIC/TLDNR = DATA_PACKAGE-/BIC/TLDNR.
FIELD-SYMBOLS: <LS_DATA_PACKAGE> TYPE DATA_PACKAGE_STRUCTURE.
FIELD-SYMBOLS: <LS_/BIC/AT07_O00600> TYPE /BIC/AT07_O00600.
loop at internal table of ODS to check if there are lead program defin
from the source which mean the values of lead program definition in OD
values of lead program definition in datapackage.
LOOP AT ITAB_/BIC/AT07_O00600 ASSIGNING <LS_/bic/at07_o00600>.
READ TABLE DATA_PACKAGE
TRANSPORTING NO FIELDS
WITH KEY
/BIC/TLDNR = <LS_/bic/at07_o00600>-/BIC/TLDNR
/BIC/TLDPRGFTE = <LS_/bic/at07_o00600>-/BIC/TLDPRGFTE
BINARY SEARCH.
IF SY-SUBRC <> 0.
new lines with zero values are inserted because there are no correspon
DATA_PACKAGE_NEW-/BIC/TLDNR = <LS_/BIC/AT07_O00600>-/BIC/TLDNR.
DATA_PACKAGE_NEW-/BIC/TLDPRGFTE = <LS_/BIC/AT07_O00600>-/BIC/TLDPRGFTE.
DATA_PACKAGE_NEW-/BIC/TLDFTE = 0.
APPEND DATA_PACKAGE_NEW.
ENDIF.
ENDLOOP.
append the new records which are created for the leads in the datapack
APPEND LINES OF DATA_PACKAGE_NEW TO DATA_PACKAGE.
reset the sorting of the datapackage back to its original state
SORT DATA_PACKAGE.
if abort is not equal zero, the update process will be canceled
ABORT = 0.
$$ end of routine - insert your code only before this line -
ENDFORM.
Thanks in advancehi,
it's retrieve data from table /BIC/AT07_O00600
and add to data package, so your records will be more than from source
hope this helps. -
Hi Experts,
I searched in the forum, but no Start Routine found which includes lot of code,as i know it's not gud to post code here, but i am not finding solution, pls help me.
I have small issue with the following code, pls specify changes.Original routine is from BW3.5 version, i have made some changes, please specify if any. If you could help me, i will be very thankfull to u people,
Start Routine:
TYPES:
BEGIN OF sl_keyfigures,
---(Here all the fields are defined)
END OF sl_keyfigures.
DATA: gt_sl_keyfigures TYPE TABLE OF sl_keyfigures,
lv_corqty LIKE /bi0/acds_ds0600-apo_corqty,
lv_logsys LIKE /bi0/acds_ds0600-apo_logsys,
ls_monitor TYPE rsmonitor,
gs_current_doc TYPE /bic/cs80cds_ds07.
FIELD-SYMBOLS: <ls_data_package> TYPE data_package_structure,
<ls_time_series> TYPE /bi0/acds_ds0700.
DATA: ls_keyfigures TYPE sl_keyfigures,
lv_corr_cumdel LIKE /bi0/acds_ds0700-apo_delqty,
lv_cumdel LIKE /bi0/acds_ds0700-apo_delqty,
lv_cumreq LIKE /bi0/acds_ds0700-apo_delreq,
lv_cumcon LIKE /bi0/acds_ds0700-apo_delcon.
SORT SOURCE_PACKAGE BY doc_number s_ord_item apo_logsys calday.
CLEAR: lv_corr_cumdel, lv_cumdel, lv_cumreq, lv_cumcon.
LOOP AT SOURCE_PACKAGE ASSIGNING <ls_data_package>.
IF gs_current_doc-doc_number <> <ls_data_package>-doc_number OR
gs_current_doc-s_ord_item <> <ls_data_package>-s_ord_item OR
gs_current_doc-apo_logsys <> <ls_data_package>-apo_logsys.
doc changed
CLEAR: lv_corr_cumdel, lv_cumdel, lv_cumreq, lv_cumcon.
gs_current_doc-doc_number = <ls_data_package>-doc_number.
gs_current_doc-s_ord_item = <ls_data_package>-s_ord_item.
gs_current_doc-apo_logsys = <ls_data_package>-apo_logsys.
SELECT apo_corqty FROM /bi0/acds_ds0600 INTO lv_corqty
WHERE doc_number = <ls_data_package>-doc_number
AND s_ord_item = <ls_data_package>-s_ord_item
AND apo_logsys = <ls_data_package>-apo_logsys.
ENDSELECT.
IF sy-subrc <> 0.
no correction quantity found
IF <ls_data_package>-apo_logsys IS INITIAL.
lv_logsys = 'no logical system' ( 001 ).
ELSE.
lv_logsys = <ls_data_package>-apo_logsys.
ENDIF.
ls_monitor-msgid = 'RS_BCT_APO_CDS'.
ls_monitor-msgty = 'S'.
ls_monitor-msgno = '010'.
ls_monitor-msgv1 = <ls_data_package>-doc_number.
ls_monitor-msgv2 = <ls_data_package>-s_ord_item.
ls_monitor-msgv3 = lv_logsys.
ls_monitor-detlevel = '2'.
APPEND ls_monitor TO MONITOR.
ENDIF.
ENDIF.
ls_keyfigures-vbeln = <ls_data_package>-doc_number.
ls_keyfigures-vbelp = <ls_data_package>-s_ord_item.
ls_keyfigures-logsys = <ls_data_package>-apo_logsys.
ls_keyfigures-date = <ls_data_package>-calday.
lv_cumdel = lv_cumdel + <ls_data_package>-apo_delqty.
lv_cumreq = lv_cumreq + <ls_data_package>-apo_delreq.
lv_cumcon = lv_cumcon + <ls_data_package>-apo_delcon.
lv_corr_cumdel = lv_cumdel - lv_corqty.
call for requested time series
CALL FUNCTION 'CMDS_CALC_SERVICE_LEVEL'
EXPORTING
iv_demand_qty = <ls_data_package>-apo_delreq
iv_delivery_qty = <ls_data_package>-apo_delqty
iv_***_delivery_qty = lv_corr_cumdel
iv_***_demand_qty = lv_cumreq
IMPORTING
ev_early_qty = ls_keyfigures-early_req_qty
ev_early_scl = ls_keyfigures-early_req_scl
ev_late_qty = ls_keyfigures-late_req_qty
ev_late_scl = ls_keyfigures-late_req_scl
ev_punct_qty = ls_keyfigures-punct_req_qty
ev_punct_scl = ls_keyfigures-punct_req_scl.
Since open requested quantities for customer orders are not updated
in BW from InfoSource 2LIS_11_V_SCL key figures that are based on
open requested quantities cannot be calculated
IF <ls_data_package>-apoplanned <> '1'.
CLEAR: ls_keyfigures-early_req_qty,
ls_keyfigures-early_req_scl,
ls_keyfigures-late_req_qty,
ls_keyfigures-late_req_scl,
ls_keyfigures-punct_req_qty,
ls_keyfigures-punct_req_scl.
ENDIF.
call for confirmed time series
CALL FUNCTION 'CMDS_CALC_SERVICE_LEVEL'
EXPORTING
iv_demand_qty = <ls_data_package>-apo_delcon
iv_delivery_qty = <ls_data_package>-apo_delqty
iv_***_delivery_qty = lv_corr_cumdel
iv_***_demand_qty = lv_cumcon
IMPORTING
ev_early_qty = ls_keyfigures-early_conf_qty
ev_early_scl = ls_keyfigures-early_conf_scl
ev_late_qty = ls_keyfigures-late_conf_qty
ev_late_scl = ls_keyfigures-late_conf_scl
ev_punct_qty = ls_keyfigures-punct_conf_qty
ev_punct_scl = ls_keyfigures-punct_conf_scl.
APPEND ls_keyfigures TO gt_sl_keyfigures.
CLEAR ls_keyfigures.
ENDLOOP.
Error:
E:Within classes and interfaces, you can only use "TYPE" to refer to ABAP
Dictionary types (not "LIKE" or "STRUCTURE").
Thanks,
Venkatesheg of start routine:
SELECT customer /bic/cg_gblrp1 /bic/cg_regrp2 /bic/cg_locrp3
/bic/cg_locrp4 /bic/cg_locrp5 /bic/cg_chanel
/bic/cg_subchn
INTO TABLE tab_customer FROM /bi0/pcustomer
FOR ALL ENTRIES IN tab_cust WHERE
customer = tab_cust-customer AND
objvers = 'A'.
SORT tab_customer BY customer.
Hope this helps and assign pts for the same. -
ABAP Code in Start Routine to fill a field
Hello,
with the following code in the start routine in BW3.5 I am trying to fill Intercompany-Indicator based on Distribution Channel. The main code is marked bold.
Distribution Channel = DISTR_CHAN
InterCompany-Indicator = G_CWWR14
Pls help. Thanks.
SD
Intercompany Indicator
IF NOT wa_daten-customer IS INITIAL.
SELECT SINGLE /b05/s_rbkunde FROM /b05/mrbcust INTO l_rbcust
WHERE /b05/s_rbcust = wa_daten-customer
AND objvers = 'A'
AND datefrom <= l_date
AND dateto >= l_date.
IF sy-subrc EQ 0.
SELECT SINGLE g_cwwr14 FROM /b05/mrbkdbkrs INTO l_ii
WHERE comp_code = wa_daten-comp_code
AND /b05/s_rbkdbkrs = l_rbcust
AND objvers = 'A'
AND datefrom <= l_date
AND dateto >= l_date.
IF sy-subrc = 0.
wa_daten-g_cwwr14 = l_ii.
ELSE.
CLEAR wa_daten-g_cwwr14.
ENDIF.
ELSE.
CLEAR wa_daten-g_cwwr14.
ENDIF.
ELSE.
IF wa_daten-G_CWWR14 = ' '.
CASE wa_daten-DISTR_CHAN.
WHEN 'Y4'.
wa_daten-G_CWWR14 = '4'.
WHEN 'Y5'.
wa_daten-G_CWWR14 = '2'.
WHEN OTHERS.
wa_daten-G_CWWR14 = '0'.
ENDCASE.
ENDIF.
ENDIF. " NOT wa_daten-customer IS INITIAL
MODIFY DATA_PACKAGE FROM wa_daten.
ENDLOOP.Hi Venkat,
Two things -One is the performance and the other ... there is no Append within the loop.
Try moving the select statement ousdie the loop to improve performance and move the modify statement into the loop ... change modify to append. Code below.
Let me know if you need more help.
Best regards,
Kazmi
data: it_data type standard table of data_package_structure
with header line
with non-unique default key initial size 0.
types: begin of billing_item_type,
BILL_NUM like /BIC/AZSD_O0700-BILL_NUM,
DOC_NUMBER like /BIC/AZSD_O0700-DOC_NUMBER,
PLANT like /BIC/AZSD_O0700-PLANT,
end of billing_item_type.
refresh it_data.
clear it_data.
it_data] = DATA_PACKAGE[.
refresh DATA_PACKAGE.
clear DATA_PACKAGE.
loop at it_data.
select DOC_NUMBER PLANT into (it_data-DOC_NUMBER, it_data-PLANT)
from /BIC/AZSD_O0700
where BILL_NUM = it_data-BILL_NUM
and FISCVARNT = it_data-fiscvarnt.
endselect.
if sy-subrc = 0.
move-corresponding it_data to DATA_PACKAGE.
Append DATA_PACKAGE.
endif.
endloop.
Maybe you are looking for
-
Chinese font won't render in Android4.4/Air4.0 with StyleableTextField
Updating our app for the Latest Android 4.4/Air 4.0 SDK. Our app is localized for several languages, including Chinese. Ther app renders Chinese fine on Android devices less than android version 4.4 compiled with Air SDK 4.0. But on android ver. 4.4
-
Deployment Status not reflecting correct application installation status
Morning All, Running into an issue where the application Deployment Status does not properly reflect the state of the application install. The software installs, works properly and is reported in Software Center on the client PC as being installed su
-
How to use iCal Server with clients?
Ok, so since I can't find this anywhere... How do I use iCal Server with other desktop clients? I've selected the user, enabled calendaring, the user can authenticate in web-based group calendars. But then I'm stuck. How do I give them their own cale
-
Drill-Through Reports using EIS
Hello - Is there a document to guide us through the steps to create drill-through/Hybrid Analysis reports using EIS 9.3.1? I couldn't find it in sysadmin or dataprep documents .. Thank you!
-
Is there such a thing as a foot operated wireless presenter?
A foot operated wireless presenter would be so useful but I can't find one anywhere - has anyone come across one? David V