728x90

 

> 선급비용 스케쥴 확인 로직 <

 

선급비용의 스케쥴을 확인하는 로직을 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.

 

끝.

 

Posted by Gomtui
,