MDG会计科目新建默认值

背景

NWBC新建会计科目时,需要默认科目编码,取当前科目组最大编码+1

实现

增强位置
在这里插入图片描述代码

 DATA:ls_account TYPE /mdg/_s_0g_pp_account.
    CONSTANTS:lc_default_account_table TYPE ktopl VALUE 'SY00'.

    CHECK iv_raised_by_own_ui EQ 'X'.
    DATA(ls_fpm_runtime) =  me->core_object->mo_fpm_toolbox->mo_fpm->get_runtime_info( ).
    CHECK ls_fpm_runtime-application EQ 'MDGF_OVP_GEN' AND
          ls_fpm_runtime-config_id EQ 'MDGF_0G_OVP_FI_ACCOUNT' AND
          me->core_object->ms_instance_key-component EQ 'FPM_FORM_UIBB_GL2' AND
          me->core_object->ms_instance_key-config_id EQ 'MDGF_0G_FI_ACCOUNT' AND
          me->core_object->mv_fpm_edit_mode EQ 'E'.

    IF me->core_object->mo_entity IS BOUND.

      me->core_object->mo_entity->get_properties(
      IMPORTING
        es_attributes = ls_account
        ).
      IF ls_account-coa IS INITIAL.
        me->core_object->mo_entity->set_property(
        EXPORTING
          iv_attr_name = 'COA'
          iv_value = lc_default_account_table
          ).
      ENDIF.

      IF ls_account-account IS INITIAL AND
      ls_account-coa IS NOT INITIAL AND
      ls_account-accgrpacc IS NOT INITIAL."科目组

        "获取科目组对应的编码范围
        SELECT SINGLE FROM t077s
        FIELDS vonnr AS acc_low,
                bisnr AS acc_high
        WHERE ktopl EQ @ls_account-coa
        AND ktoks EQ @ls_account-accgrpacc
        INTO @DATA(ls_acc_range).
        cl_usmd_adapter_provider=>get_model_generation_adapter(
        EXPORTING
          i_usmd_model         = '0G'
        IMPORTING
          eo_model_gen_adapter = DATA(lo_model_gen_adapter)
          et_message           = DATA(lt_message)
          ).

        lo_model_gen_adapter->get_generated_objects(
        IMPORTING
          et_message         = lt_message
          et_log_phys_name   = DATA(lt_phys_name)
          ).

        READ TABLE lt_phys_name INTO DATA(ls_phsy_table)
        WITH KEY kind = 'TABL'  entity = 'ACCOUNT' sub_kind = 'C'.
        IF sy-subrc ne 0.
          return.
        ENDIF.

        DATA:lv_acc_max TYPE usmdz1_account.
        SELECT MAX( /1md/0gaccount )
        FROM (ls_phsy_table-phys_name)
        INTO @lv_acc_max
        WHERE /1md/0gaccount GE @ls_acc_range-acc_low
        AND /1md/0gaccount LE @ls_acc_range-acc_high.

        "最大值+1为当前编码
        IF lv_acc_max IS NOT INITIAL .
          DATA(lv_acc_new) = lv_acc_max + 1.
          me->core_object->mo_entity->set_property(
          EXPORTING
            iv_attr_name = 'ACCOUNT'
            iv_value = lv_acc_new
            ).
        ENDIF.

      ENDIF.

    ENDIF.

おすすめ

転載: blog.csdn.net/u012232542/article/details/117014309