Function Module
FUNCTION ZRET00_LOSTEST_GET_VAL .
*"------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(I_CACSAPPL) TYPE CACSAPPL
*" REFERENCE(I_OBJ_TYPE) LIKE TCACS_LOS_OBJECT-OBJ_TYPE
*" REFERENCE(I_OBJ_ID) LIKE TCACS_LOS_OBJECT-OBJ_ID
*" REFERENCE(I_OBJ_METHOD) TYPE TCACS_LOS_CONNEC-OBJ_METHOD
*" VALUE(I_TECH_TIME) TYPE CACS_TECHTIME_B
*" VALUE(I_BUSI_TIME) TYPE CACS_BUSITIME_B
*" TABLES
*" T_DOCVAM STRUCTURE ZRET00_S_DOCVAM
*" T_DOCHDM STRUCTURE ZRET00_S_DOCHDM
*"------------------------------------------------------------------
* Sample function module showing how to do valuation in ABAP.
* Prerequisite: All objects have the same Object ID and
* belongs to the same Object Type Class.
* Input:
* I_CACSAPPL : Application.
Is used if the Function has params.* I_OBJ_TYPE : Object Type Class: Identifies the Object Type Class
* of the objects passed in the I_DOCVAM table.
* I_OBJ_ID : Object ID.
Identifies the object. In this case* it is equal to the Valuation Type.
* I_OBJ_METHOD : The method that should be performed on the objects.
* The method belongs to the Object Type Class.
* I_TECH_TIME : Technical valid time.
* I_BUSI_TIME : Business valid time
* T_DOCHDM : Table with Document Headers.
* The valuation objects in T_DOCVAM do
* not have to belong to the same document.
* Changing:
* T_DOCVAM : Valuation objects.
The table contains the* objects that has to be valuated.
* --- local definitions -----------------------------------------
DATA: lt_docvam_temp LIKE ZRET00_s_docvam OCCURS 0,
lt_docvam_new LIKE ZRET00_s_docvam OCCURS 0,
lv_wa_docvam LIKE ZRET00_s_docvam,
lv_wa_dochdm LIKE ZRET00_s_dochdm,
lv_TOOL LIKE TCACS_LOS_OBJECT-TOOL,
lv_TOOLFUNCTION LIKE TCACS_LOS_FUN-TOOLFUNCTION,
lv_PARAM_VIEW_ID LIKE TCACS_LOS_FUN-PARAMVIEWID,
lv_PARAM_VIEW_OD LIKE TCACS_LOS_FUN-PARAMVIEWOD ,
lv_strTemp LIKE sy-msgv1,
lv_strInfo LIKE sy-msgv1,
lv_Percentage LIKE ztest_los_od-percentage.
CONSTANTS:
C_STR_TABLE(12) TYPE C VALUE 'ZTEST_LOS_OD'.
DATA: wa_od LIKE ZTEST_LOS_OD,
lt_od LIKE ZTEST_LOS_OD OCCURS 0 WITH HEADER LINE,
lv_tabname type TABNAM.
* --- process -----------------------------------------------------
* First the percentage by using a parameter view
lv_tabname = C_STR_TABLE.
CALL FUNCTION 'CACS_LOS_GET_PARAM_OD'
EXPORTING
I_BUSITIME = I_BUSI_TIME
I_TECHTIME = I_TECH_TIME
I_CACSAPPL = I_CACSAPPL
I_OBJ_TYPE = I_OBJ_TYPE
I_OBJ_METHOD = I_OBJ_METHOD
I_OBJ_ID = I_OBJ_ID
I_PARAMTABLENAME = lv_tabname
TABLES
T_PARAMETER = lt_od
EXCEPTIONS
CACS_LOS_NO_PARAM_FOUND = 1
CACS_LOS_NOT_EXPECTED_TABLE = 2
CACS_LOS_VIEW_DOES_NOT_EXISTS = 3
CACS_LOG_NO_VIEW_ASSIGNED = 4
OTHERS = 5.
IF SY-SUBRC <> 0.
* We expected a value but none was returned
* Write a message to the log
CONCATENATE text-002
lv_wa_docvam-TRI_OBJ_TYPE
':' text-010
INTO lv_strInfo SEPARATED BY SPACE.
IF 1 = 0. " Navigation only
MESSAGE I895(CACSBAS) WITH lv_strInfo.
ENDIF.
CALL FUNCTION 'MESSAGE_STORE_WITH_DISPLAY'
EXPORTING
arbgb = 'CACSBAS'
msgty = 'I'
msgv1 = lv_strInfo
txtnr = '895'.
EXIT.
ENDIF.
* Get the percentage
READ table lt_od index 1 INTO WA_OD.
lv_Percentage = wa_od-percentage.
* For each document
LOOP AT t_dochdm INTO lv_wa_dochdm.
* Get only lines of current document
* Reset temporary itab
clear lt_docvam_temp.
refresh lt_docvam_temp.
* Find those records that belongs to the current document.
loop at t_docvam into lv_wa_docvam
where doc_id = lv_wa_dochdm-doc_id and
post_year = lv_wa_dochdm-post_year.
append lv_wa_docvam to lt_docvam_temp.
endloop. "T_DOCVAM
* For each valuation object
LOOP AT lt_docvam_temp INTO lv_wa_docvam.
* This sample returns the valuation in the dvalue_amnt
* field, but that is depending on what has been
* specified in the customizing.
* Depending on the customizing, one of the following
* fields should be used to return the valuation:
* dvalue_amnt: Differenz valuation.
* value_amnt: Absolut valuation.
lv_wa_docvam-dvalue_amnt =
( lv_wa_docvam-ZZJABEIT * lv_Percentage ) / 100.
MODIFY lt_docvam_temp FROM lv_wa_docvam.
* Write a message to the log.
WRITE: lv_wa_docvam-dvalue_amnt
CURRENCY lv_wa_docvam-VALUE_UNIT TO lv_StrTemp.
CONDENSE lv_StrTemp.
CONCATENATE text-002
lv_wa_docvam-TRI_OBJ_TYPE
':' lv_StrTemp lv_wa_docvam-VALUE_UNIT
INTO lv_strInfo SEPARATED BY SPACE.
IF 1 = 0. " Navigation only
MESSAGE I895(CACSBAS) WITH lv_strInfo.
ENDIF.
CALL FUNCTION 'MESSAGE_STORE_WITH_DISPLAY'
EXPORTING
arbgb = 'CACSBAS'
msgty = 'I'
msgv1 = lv_strInfo
txtnr = '895'.
ENDLOOP.
* Save modified lines
APPEND LINES OF lt_docvam_temp TO lt_docvam_new.
ENDLOOP. " T_DOCHDM
* Return processed lines
t_docvam[] = lt_docvam_new[].
ENDFUNCTION.