> 선급비용 스케쥴 확인 로직 <
선급비용의 스케쥴을 확인하는 로직을 Function으로 만들어봄
S4HANA에서 만든거라서 ECC나 낮은 버전에서는 안될수도 있음
FUNCTION zfi_get_acac_schedule.
*"----------------------------------------------------------------------
*"*"로컬 인터페이스:
*" IMPORTING
*" VALUE(I_BUKRS) TYPE BUKRS
*" VALUE(I_OBJNO) TYPE ACAC_OBJNUMBER
*" EXPORTING
*" VALUE(E_RETURN) TYPE ZCAS_IF_RETURN
*" TABLES
*" T_DATA STRUCTURE ZFIS_ACAC_SCHEDULE
*"----------------------------------------------------------------------
DATA: lv_no LIKE acac_objects-acac_objnumber,
ls_param TYPE ace_user_interface_s4,
lo_item TYPE REF TO cl_ace_mdo_subobj_item,
lt_plan TYPE if_ace_mdo_types=>tt_calculated_values.
lv_no = |{ i_objno ALPHA = IN }|.
SELECT SINGLE
b~comp,
a~bukrs,
a~ref_key,
a~ref_subkey,
b~itemtype,
b~rldnr,
b~date_to,
b~date_from
INTO CORRESPONDING FIELDS OF @ls_param
FROM acac_objects AS a
INNER JOIN acesobj_item AS b ON b~comp EQ 'ACAC'
AND b~bukrs EQ a~bukrs
AND b~ref_key EQ a~ref_key
AND b~ref_subkey EQ a~ref_subkey
WHERE a~bukrs EQ @i_bukrs
AND a~acac_objnumber EQ @lv_no.
IF sy-subrc NE 0.
e_return-e_status = 'E'.
e_return-e_message = '선급비용내역을 조회할 수 없습니다.'.
ENDIF.
CHECK e_return-e_status NE 'E'.
PERFORM return_mdo_subobj_item USING ls_param
ls_param-date_to
CHANGING lo_item .
DATA(lo_values) = lo_item->if_ace_mdo_subobj_item~get_calculated_values( iv_rldnr = ls_param-rldnr ).
lt_plan = lo_values->get_values_delta( ib_release_respect = abap_true
ir_rldnr = VALUE #( ( option = 'EQ' sign = 'I' low = ls_param-rldnr ) )
ir_vsource = VALUE #( ( option = 'EQ' sign = 'I' low = if_ace_mdo_types=>cv_vsource_calculated ) ) ).
LOOP AT lt_plan INTO DATA(ls_plan).
APPEND VALUE #(
date_from = ls_plan-date_from
date_to = ls_plan-date_to
currency = ls_plan-s_amount-t_values[ 1 ]-currency
value = ls_plan-s_amount-t_values[ 1 ]-value
) TO t_data.
ENDLOOP.
ENDFUNCTION.
FORM return_mdo_subobj_item USING is_input_parameters TYPE ace_user_interface_s4
iv_keydate TYPE ace_effdate
CHANGING co_mdo_subobj_item TYPE REF TO cl_ace_mdo_subobj_item.
DATA: lo_mdo_subobj TYPE REF TO if_ace_mdo_subobj,
ls_subobj_item_ref TYPE if_ace_mdo_types=>ty_subobj_item_ref.
PERFORM return_mdo_subobj USING is_input_parameters iv_keydate CHANGING lo_mdo_subobj.
IF lo_mdo_subobj IS INITIAL OR lo_mdo_subobj->mt_items IS INITIAL.
RETURN.
ENDIF.
READ TABLE lo_mdo_subobj->mt_items INTO ls_subobj_item_ref WITH TABLE KEY itemtype = is_input_parameters-itemtype.
IF sy-subrc <> 0.
RETURN.
ENDIF.
co_mdo_subobj_item = CAST cl_ace_mdo_subobj_item( ls_subobj_item_ref-o_item ).
ENDFORM.
FORM return_mdo_subobj USING is_input_parameters TYPE ace_user_interface_s4
iv_keydate TYPE ace_effdate
CHANGING co_mdo_subobj TYPE REF TO if_ace_mdo_subobj.
DATA:lv_index TYPE sy-tabix,
ld_status TYPE aceds_auth_activity,
ls_subobj_key TYPE acesobj_key,
lx_ace TYPE REF TO cx_ace,
lo_mdo_subobj_copy TYPE REF TO if_ace_mdo_subobj,
lv_navigation TYPE flag,
lv_need_refresh TYPE flag.
ld_status = '03'.
TRY.
IF ld_status <> acec_ds_activity-copy.
co_mdo_subobj = cl_ace_mdo_subobj_factory=>get_mdo_subobj_instance(
is_acesobj_key = CORRESPONDING #( is_input_parameters )
iv_activity = ld_status
iv_refresh = boolc( lv_navigation = abap_true OR lv_need_refresh = abap_true )
iv_detdate = iv_keydate
).
ELSE.
co_mdo_subobj = cl_ace_mdo_subobj_factory=>get_mdo_subobj_instance(
is_acesobj_key = CORRESPONDING #( is_input_parameters )
iv_activity = acec_ds_activity-copy
iv_detdate = iv_keydate
).
ENDIF.
CATCH cx_ace INTO lx_ace.
cl_ace_message_handler=>get_instance( )->add_message_inst( lx_ace ).
lx_ace->call_message( ).
ENDTRY.
ENDFORM.
끝.

