METHOD zfi_i003_ii_si_sap_zzkm_in~si_sap_zzkm_in.
DATA: output_hd TYPE zmmi005_dt_mesg_hd,
output_body TYPE zsd_dt_hxm_res_msgbd_tab,
output_line TYPE zsd_dt_hxm_res_msgbd.
DATA: r_obj TYPE REF TO zco_si_unhxm_out.
DATA: out TYPE zsd_mt_hxm_res.
DATA: lv_field TYPE c LENGTH 100,
lv_flag TYPE c.
DATA: ls_account_coa TYPE glaccount_coa,
ls_account_coa_keyy TYPE glaccount_coa_key,
ls_account_coa_data TYPE glaccount_coa_data,
ls_account_coa_info TYPE glaccount_coa_info,
lt_account_names TYPE glaccount_name_table,
ls_account_names TYPE glaccount_name,
ls_account_names_keyy TYPE glaccount_name_key,
ls_account_names_data TYPE glaccount_name_data,
lt_account_ccodes TYPE glaccount_ccode_table,
ls_account_ccodes TYPE glaccount_ccode,
ls_account_ccodes_keyy TYPE glaccount_ccode_key,
ls_account_ccodes_data TYPE glaccount_ccode_data,
ls_account_ccodes_info TYPE glaccount_ccode_info,
"ls_account_carea TYPE glaccount_carea,
"ls_account_carea_keyy TYPE glaccount_carea_key,
" ls_account_carea_data TYPE glaccount_carea_data,
" ls_account_carea_info TYPE glaccount_carea_info,
"lt_account_carea TYPE glaccount_carea_table,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
lv_action TYPE char1,
lv_message TYPE char255
"ls_fromto TYPE glaccount_carea_fromto
.
LOOP AT input-mt_sap_zzkm-msgbd INTO DATA(ls_line).
CASE ls_line-ifopt. "此处为OA 传来的标识符 C 表示创建 M 表示修改
WHEN 'C'.
lv_action = 'I'.
lv_message = '会计科目创建成功'.
WHEN 'M'.
lv_action = 'U'.
lv_message = '会计科目修改成功'.
WHEN OTHERS.
ENDCASE.
--------------------------------------------------------------------
ls_account_coa_keyy-ktopl = ls_line-ktopl."帐目表
ls_account_coa_keyy-saknr = ls_line-saknr."总账科目
ls_account_coa_data-ktoks = ls_line-ktoks."总帐科目组
" ls_account_coa_data-glaccount_type = ls_line-glaccount_type. "总账科目类型
ls_account_coa_data-xbilk = LS_LINE-XBILK. "标志: 此科目是资产负债表科目吗?
ls_account_coa_data-gvtyp = LS_LINE-XPLACCT. "损益报表科目类型
ls_account_coa_info-erdat = sy-datum. "记录创建日期
ls_account_coa_info-ernam = sy-uname. "创建对象的人员名称
ls_account_coa_info-sakan = ls_line-saknr. "总账科目
ls_account_coa-action = lv_action. "数据记录活动:I/插入;U/修改;D/删除
ls_account_coa-keyy = ls_account_coa_keyy.
ls_account_coa-data = ls_account_coa_data.
ls_account_coa-info = ls_account_coa_info.
--------------------------------------------------------------------
ls_account_names_keyy-ktopl = ls_line-ktopl. "帐目表
ls_account_names_keyy-saknr = ls_line-saknr. "总账科目
ls_account_names_keyy-spras = sy-langu. "语言代码
ls_account_names_data-txt20 = ls_line-txt20_ML. "总帐科目名称
ls_account_names_data-txt50 = ls_line-txt50_ML. "总账科目长文本
ls_account_names-action = lv_action. "数据记录活动:I/插入;U/修改;D/删除
ls_account_names-keyy = ls_account_names_keyy.
ls_account_names-data = ls_account_names_data.
APPEND ls_account_names TO lt_account_names.
--------------------------------------------------------------------
ls_account_ccodes_keyy-bukrs = ls_line-bukrs. "公司代码
ls_account_ccodes_keyy-saknr = ls_line-saknr. "总账科目
ls_account_ccodes_data-waers = ls_line-waers. "货币
ls_account_ccodes_data-xsalh = ls_line-xsalh. "是否仅限以本币记的余额
ls_account_ccodes_data-xmwno = ls_line-xmwno. "允许含/不含税过账
ls_account_ccodes_data-mwskz = ls_line-mwskz. "税务类型
ls_account_ccodes_data-mitkz = ls_line-mitkz. "统驭科目的科目类型
ls_account_ccodes_data-xopvw = ls_line-xopvw. "未清项目管理
ls_account_ccodes_data-zuawa = ls_line-zuawa. "排序码
ls_account_ccodes_data-fstag = ls_line-fstag. "字段状态组
ls_account_ccodes_data-xintb = ls_line-xintb. "只能自动过账
ls_account_ccodes_data-xmitk = ls_line-xmitk. "统驭科目是否准备就绪可以输入
"ls_account_ccodes_data-kokrs = LS_LINE-kokrs. "成本控制范围
ls_account_ccodes_data-XKRES = ls_line-XKRES. "可以进行行项目显示
ls_account_ccodes_info-erdat = sy-datum."记录创建日期
ls_account_ccodes_info-ernam = sy-uname."创建对象的人员名称
ls_account_ccodes-action = lv_action. "数据记录活动:I/插入;U/修改;D/删除
ls_account_ccodes-keyy = ls_account_ccodes_keyy.
ls_account_ccodes-data = ls_account_ccodes_data.
ls_account_ccodes-info = ls_account_ccodes_info.
APPEND ls_account_ccodes TO lt_account_ccodes.
--------------------------------------------------------------------
"ls_account_carea_keyy-kokrs = ls_line-kokrs. "控制范围
"ls_account_carea_keyy-saknr = ls_line-saknr. "总账科目
-
ls_account_carea_data-katyp = ls_line-katyp. "ls_account_carea_info-ersda = sy-datum."创建日期 "ls_account_carea_info-usnam = sy-uname."创建人
-
ls_account_carea-action = lv_action."数据记录活动:I/插入;U/修改;D/删除
-
ls_account_carea-keyy = ls_account_carea_keyy.
-
ls_account_carea-data = ls_account_carea_data.
-
ls_account_carea-info = ls_account_carea_info.
-
CLEAR ls_fromto. "添加开始和截止日期
-
ls_fromto-datab = '19000101'.
-
ls_fromto-datbi = '99991231'.
-
ls_account_carea-fromto = ls_fromto.
-
APPEND ls_account_carea TO lt_account_carea. CALL FUNCTION 'GL_ACCT_MASTER_SAVE' EXPORTING
-
testmode = ''
-
NO_SAVE_AT_WARNING = no_authority_check = '' store_data_only = '' TABLES account_names = lt_account_names
-
account_keywords = gt_glkeywords account_ccodes = lt_account_ccodes
-
account_careas = lt_account_carea return = lt_return CHANGING account_coa = ls_account_coa. CLEAR lv_field. LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'. CALL FUNCTION 'MESSAGE_TEXT_BUILD' EXPORTING msgid = ls_return-id msgnr = ls_return-number msgv1 = ls_return-message_v1 msgv2 = ls_return-message_v2 msgv3 = ls_return-message_v3 msgv4 = ls_return-message_v4 IMPORTING message_text_output = lv_field. lv_flag = 'X'. ENDLOOP. IF lv_flag IS INITIAL. "output_line-orderunm1 = ls_line-itemid. output_line-orderunm2 = ls_line-saknr. output_line-msgcode = 'E'. output_line-msg = |科目创建失败:{ lv_field }|. APPEND output_line TO output_body. CLEAR output_line. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. "output_line-orderunm1 = ls_line-itemid. output_line-orderunm2 = ls_line-saknr. output_line-msgcode = 'S'. output_line-msg = |科目创建成功|. APPEND output_line TO output_body. CLEAR output_line. ENDIF.
ENDLOOP.
"反馈头信息
out-mt_hxm_res-msghd-msgid = input-MT_SAP_ZZKM-msghd-msgid.
out-mt_hxm_res-msghd-tlgid = input-MT_SAP_ZZKM-msghd-tlgid.
out-mt_hxm_res-msghd-tlgname = input-MT_SAP_ZZKM-msghd-tlgname.
out-mt_hxm_res-msghd-dtsend = sy-datum && sy-uzeit.
out-mt_hxm_res-msghd-sender = ‘ERP’.
out-mt_hxm_res-msghd-receiver = input-MT_SAP_ZZKM-msghd-sender.
"反馈行信息
out-mt_hxm_res-msgbd = output_body.
TRY .
CREATE OBJECT r_obj.
CALL METHOD r_obj->si_unhxm_out
EXPORTING
output = out.
COMMIT WORK AND WAIT.
CALL FUNCTION ‘ZFUN_PO_LOG’
EXPORTING
-
OUTPUT1 = output2 = out. CATCH cx_ai_system_fault.
ENDTRY.
ENDMETHOD.