&---------------------------------------------------------------------
*& 包含 创建财务凭证使用
&---------------------------------------------------------------------
DATA:BEGIN OF gt_act OCCURS 0,
抬头
bukrs TYPE bkpf-bukrs, “公司代码
blart TYPE bkpf-blart, “凭证类型
budats(8) ,” 过账日期
budat(8) ,” 凭证日期
monat TYPE bkpf-monat, "过账期间
gjahr TYPE bkpf-gjahr, "会计年度
waers TYPE bkpf-waers, "货币码
wwert TYPE bkpf-wwert, "汇率换算日期
kursf TYPE bkpf-kursf, "汇率
bktxt TYPE bkpf-bktxt, "凭证抬头文本
"用户名
xblnr TYPE bkpf-xblnr, "参考
行
bschl TYPE bseg-bschl, "记帐代码
lifnr TYPE bseg-lifnr, "供应商编码
kunnr TYPE bseg-kunnr, "客户编码
anln1 TYPE bseg-anln1, "资产编码
umskz TYPE bseg-umskz, "特别总账标识
umsks TYPE bseg-umsks, "特定总帐事务类型
hkont TYPE bseg-hkont, "会计科目编码
hkontk TYPE bseg-hkont, "备选统御科目
xnegp, "反记账
wrbtr TYPE bseg-wrbtr, "凭证货币金额
pswsl TYPE bseg-pswsl, "凭证货币
dmbtr(16) , "本币金额
-
h_waers TYPE bseg-h_waers,"本位币货币 prctr TYPE bseg-prctr, "利润中心 kostl TYPE bseg-kostl, "成本中心 aufnr TYPE bseg-aufnr, "订单 sgtxt TYPE bseg-sgtxt, "文本 zuonr TYPE bseg-zuonr, "分配 zfbdt(8), "起算日期 zterm(4), "付款条件 matnr TYPE bseg-matnr, "物料号 anbwa TYPE bseg-anbwa, "资产交易类型 zlsch TYPE bseg-zlsch, "付款方式 rstgr TYPE bseg-rstgr, "原因代码 vbund TYPE bseg-vbund, "贸易伙伴 xref3 TYPE bseg-xref3, "销售办事处 mwskz TYPE bseg-mwskz, "税码 fkber TYPE bseg-fkber, "功能范围 bewar TYPE bseg-bewar, "事物类型
-
ZZ001 "银行账号
kndnr(10), "获利能力段客户
prodh(18), "获利能力段产品层次 -
newum(1),"特殊总账 需要大写 projk(20),"工作分解结构元素 (WBS 元素) flag,"需要大写 客户/供应商 xmwst TYPE bkpf-xmwst, "自动计算税额
END OF gt_act.
DATA: wa_zexten LIKE zexten_cwgx. "ZEXTEN就是刚才SE11创建的那个结构
DATA: it_extension2 LIKE bapiparex OCCURS 0 WITH HEADER LINE.
DATA: g_n TYPE i.
DATA: g_index TYPE i.
DATA: BEGIN OF gw_tax,
bukrs TYPE bkpf-bukrs,
waers TYPE bkpf-waers , "货币码
mwskz TYPE bseg-mwskz, "税码
xmwst TYPE bkpf-xmwst, "计算税额
dmbtr TYPE bseg-wrbtr , "金额
buzei TYPE bseg-buzei , "行项目
sgtxt TYPE bseg-sgtxt , "行项目文本
zuonr TYPE bseg-zuonr , "行项目文本
END OF gw_tax.
DATA: gd_documentheader LIKE bapiache09,
gd_customercpd LIKE bapiacpa09,
gd_fica_hd LIKE bapiaccahd,
it_accountreceivable LIKE TABLE OF bapiacar09 WITH HEADER LINE, "客户
it_accountgl LIKE TABLE OF bapiacgl09 WITH HEADER LINE, "总账科目
it_accounttax LIKE TABLE OF bapiactx09 WITH HEADER LINE,
it_criteria LIKE TABLE OF bapiackec9 WITH HEADER LINE,
it_valuefield LIKE TABLE OF bapiackev9 WITH HEADER LINE,
it_currencyamount LIKE TABLE OF bapiaccr09 WITH HEADER LINE,
it_return LIKE TABLE OF bapiret2 WITH HEADER LINE,
it_receivers LIKE TABLE OF bdi_logsys WITH HEADER LINE,
it_fica_it LIKE TABLE OF bapiaccait WITH HEADER LINE,
it_accountpayable LIKE TABLE OF bapiacap09 WITH HEADER LINE, "供应商
it_paymentcard LIKE TABLE OF bapiacpc09 WITH HEADER LINE,
it_ext LIKE TABLE OF bapiacextc WITH HEADER LINE,
it_re LIKE TABLE OF bapiacre09 WITH HEADER LINE,
it_ext2 LIKE TABLE OF bapiparex WITH HEADER LINE,
it_extension LIKE TABLE OF bapiacextc WITH HEADER LINE.
DATA:gv_chcek TYPE c.
"BDC数据
DATA: it_blntab TYPE STANDARD TABLE OF blntab,
it_ftpost TYPE STANDARD TABLE OF ftpost,
it_fttax TYPE STANDARD TABLE OF fttax.
DATA:wa_blntab TYPE blntab,
wa_ftpost TYPE ftpost,
wa_fttax TYPE fttax.
DATA:g_prctr LIKE gt_act-prctr.
DATA:gw_act LIKE gt_act.
"返回参数使用
DATA:gv_pzbh TYPE char10, " 凭证编号
gv_qqid TYPE char16, " 请求id
gv_jkzt TYPE char1, " 接口状态
gv_jkxx TYPE char100. " 接口信息
"BDC数据
DATA:bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA:messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.
DATA:bdcmode TYPE c VALUE ‘N’,
bdcupdate TYPE c VALUE ‘L’.
TYPES:BEGIN OF ty_items,
buzei TYPE string,
bschl TYPE string,
lifnr TYPE string,
bpname TYPE string,
kunnr TYPE string,
anln1 TYPE string,
umskz TYPE string,
umsks TYPE string,
hkont TYPE string,
hkontk TYPE string,
xnegp TYPE string,
wrbtr TYPE string,
pswsl TYPE string,
dmbtr TYPE string,
h_waers TYPE string,
prctr TYPE string,
kostl TYPE string,
aufnr TYPE string,
sgtxt TYPE string,
zuonr TYPE string,
zfbdt TYPE string,
zterm TYPE string,
matnr TYPE string,
anbwa TYPE string,
zlsch TYPE string,
rstgr TYPE string,
vbund TYPE string,
xref3 TYPE string,
mwskz TYPE string,
fkber TYPE string,
bewar TYPE string,
zz001 TYPE string,
kndnr TYPE string,
prodh TYPE string,
flag TYPE string,
END OF ty_items.
DATA:gs_items TYPE ty_items,
gt_items TYPE STANDARD TABLE OF ty_items.
TYPES: BEGIN OF ty_fidoc,
bukrs TYPE string,
blart TYPE string,
budat TYPE string,
bldat TYPE string,
monat TYPE string,
gjahr TYPE string,
waers TYPE string,
wwert TYPE string,
kursf TYPE string,
bktxt TYPE string,
usnam TYPE string,
zbelnr TYPE string,
xblnr TYPE string,
zaction TYPE string,
items LIKE gt_items,
END OF ty_fidoc.
DATA:gs_fidoc TYPE ty_fidoc,
gt_fidoc TYPE STANDARD TABLE OF ty_fidoc.
TYPES:BEGIN OF ty_fidoc_e,
zbelnr TYPE string,
status TYPE string,
msg TYPE string,
belnr TYPE string,
bukrs TYPE string,
gjahr TYPE string,
END OF ty_fidoc_e.
DATA:gs_fidoc_e TYPE ty_fidoc_e,
gt_fidoc_e TYPE STANDARD TABLE OF ty_fidoc_e.
FUNCTION zfm_rfc_fidoc.
*“----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*” VALUE(IV_DATA) TYPE STRING
*" EXPORTING
*" VALUE(EV_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
*(修改日志)--------------------------------------------------------
*
- 日志号 修改人 修改时间 修改说明 传输号码
-
- 001 李中原 20220601 创建 ED1K913650
- 002 李中原 20220601 新增校验逻辑 ED1K913978
DATA:lv_zjxsl TYPE ztsmsl-zjxsl. "税率
DATA:ls_ztcwgxpz_log TYPE ztcwgxpz_log.
REFRESH gt_fidoc_e.
"记录日志使用
DATA: ls_log_tab TYPE zcat_log_info.
DATA: lv_nr_range_nr TYPE inri-nrrangenr,
lv_object TYPE inri-object.
IF iv_data IS INITIAL.
gv_jkzt = ‘E’.
gv_jkxx = ‘导入空值’.
gs_fidoc_e-status = 'E'.
gs_fidoc_e-msg = '导入空值'.
APPEND gs_fidoc_e TO gt_fidoc_e.
ELSE.
-
解析异常捕捉
TRY.
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = iv_data
CHANGING
data = gt_fidoc.CATCH cx_sy_move_cast_error.
gs_fidoc_e-status = 'E'. gs_fidoc_e-msg = '解析失败'. APPEND gs_fidoc_e TO gt_fidoc_e.
ENDTRY.
ENDIF.
**必填字段检查
-
PERFORM frm_check_data TABLES it_zsfidoc_oa_t
-
USING ls_zsfidoc_oa
-
gv_jkxx.
-
IF gv_jkxx IS INITIAL.
*写入日志信息。
lv_object = ‘ZCANR001’.
lv_nr_range_nr = ‘01’.
CALL FUNCTION ‘NUMBER_GET_NEXT’
EXPORTING
nr_range_nr = lv_nr_range_nr
object = lv_object
quantity = ‘1’
IMPORTING
number = ls_log_tab-zlogn "日志编号。
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
OTHERS = 8.
CALL TRANSFORMATION id
SOURCE iv_data = iv_data
RESULT XML ls_log_tab-reque .
ls_log_tab-zsyss = ‘财务共享接口’ .
ls_log_tab-funco = ‘ZFM_RFC_FIDOC’.
ls_log_tab-intern = ‘创建财务凭证’ .
ls_log_tab-ernam = sy-uname .
ls_log_tab-erdat = sy-datum .
ls_log_tab-ertim = sy-uzeit .
ls_log_tab-ftype = ‘SOAP’ .
MODIFY zcat_log_info FROM ls_log_tab .
COMMIT WORK AND WAIT .
"赋关键值
LOOP AT gt_fidoc INTO gs_fidoc.
REFRESH gt_items.
REFRESH gt_act .
CLEAR gs_items.
CLEAR:gv_pzbh,
gv_qqid,
gv_jkzt,
gv_jkxx.
IF gs_fidoc-zaction = 'C'."C校验。P传输
gv_chcek = 'X'.
ENDIF.
gt_items[] = gs_fidoc-items[].
LOOP AT gt_items INTO gs_items.
"抬头值
gt_act-bukrs = gs_fidoc-bukrs. "公司代码
gt_act-blart = gs_fidoc-blart. "凭证类型
gt_act-budat = sy-datum. "凭证中的创建日期
gt_act-budats = gs_fidoc-budat. "凭证中的过帐日期
gt_act-monat = gs_fidoc-monat. "会计期间
gt_act-gjahr = gs_fidoc-gjahr. "会计年度
gt_act-waers = gs_fidoc-waers. "货币码
gt_act-wwert = gs_fidoc-wwert. "汇率换算日期
gt_act-kursf = gs_fidoc-kursf. "汇率
gt_act-bktxt = gs_fidoc-bktxt. "凭证抬头
gt_act-xblnr = gs_fidoc-xblnr. "参考凭证号
"明细值
gt_act-bschl = gs_items-bschl ."记帐代码
gt_act-lifnr = gs_items-lifnr ."供应商编码
gt_act-kunnr = gs_items-kunnr ."客户编码
gt_act-anln1 = gs_items-anln1 ."资产编码
gt_act-umskz = gs_items-umskz ."特殊总账 需要大写
gt_act-umsks = gs_items-umsks ."特定总帐事务类型
IF gs_items-flag = 'D'.
gt_act-hkont = gs_items-kunnr ."科目
ELSEIF gs_items-flag = 'K'.
gt_act-hkont = gs_items-lifnr ."科目
"创建员工供应商公司页签
IF gs_items-lifnr IS NOT INITIAL.
PERFORM frm_xk01_bdc USING gs_items-lifnr
gs_items-bpname
gs_fidoc-bukrs.
ENDIF.
ELSEIF gs_items-flag = 'A'.
gt_act-hkont = gs_items-anln1 ."科目
ELSE.
gt_act-hkont = gs_items-hkont ."科目
ENDIF.
gt_act-hkontk = gs_items-hkontk."备选统驭科目
gt_act-xnegp = gs_items-xnegp ."反记账
"去除金额空格
CONDENSE gs_items-dmbtr NO-GAPS.
CONDENSE gs_items-wrbtr NO-GAPS.
-
" 借贷处理 SELECT SINGLE shkzg INTO @DATA(lv_shkzg) FROM tbsl WHERE bschl = @gs_items-bschl. IF lv_shkzg = 'H'. gt_act-dmbtr = gs_items-dmbtr * -1."金额 gt_act-wrbtr = gs_items-wrbtr * -1."凭证货币金额 ELSE. gt_act-dmbtr = gs_items-dmbtr."金额 gt_act-wrbtr = gs_items-wrbtr."凭证货币金额 ENDIF. gt_act-pswsl = gs_items-pswsl. "凭证货币 gt_act-prctr = gs_items-prctr ."利润中心 gt_act-kostl = gs_items-kostl ."成本中心 gt_act-aufnr = gs_items-aufnr ."订单号 gt_act-sgtxt = gs_items-sgtxt ."项目文本 gt_act-zuonr = gs_items-zuonr ."分配编号 gt_act-zfbdt = gs_items-zfbdt ."到期日计算的基限日期 gt_act-zterm = gs_items-zterm ."付款条件代码 gt_act-matnr = gs_items-matnr. "物料号 gt_act-anbwa = gs_items-anbwa. "资产交易类型 gt_act-zlsch = gs_items-zlsch. "付款方式 gt_act-rstgr = gs_items-rstgr. "凭证行项目原因代码 gt_act-vbund = gs_items-vbund. "贸易伙伴 gt_act-xref3 = gs_items-xref3. "销售办事处