目录
1.介绍:
- F-02: 四种类型财务过账导入 总账(GL) 、客户(AR)、 供应商(AP)、 GL ITEM
- FBB1: GL ITEM中外币为0,本币不为0的项目导入
- BAPI:
- BAPI_ACC_DOCUMENT_POST 外币为0,本币不为0的走BDC
- BAPI_ACC_DOCUMENT_REV_POST 凭证冲销
- CALL_FB08 外币为0,本币不为0 的凭证冲销
还有一点就是 BAPI_ACC_DOCUMENT_POST 增强字段(我是扩展了记账码字段)
2.内容
2.1. GUI状态:
2.2.文本元素
2.3.表:(表结构excel数据已上传)
- ZFI_B002 总账导入记录表
- ZFI_B002_CUST 客户导入记录表
- ZFI_B002_VEND 供应商导入记录表
- ZFI_B002_GL_ITEM GL ITEM 导入记录表
2.4.其他
BAPI_ACC_DOCUMENT_POST 扩展字段
- 定义结构
- 创建实施
- change方法添加代码
- 定义结构
- 创建实施
- change方法添加代码
method IF_EX_ACC_DOCUMENT~CHANGE.
data: wa_extension type bapiparex,
ext_value(960) type c,
wa_accit type accit,
l_ref type ref to data.
field-symbols: <l_struc> type any,
<l_field> type any.
sort c_extension2 by structure.
loop at c_extension2 into wa_extension.
at new structure.
create data l_ref type (wa_extension-structure).
assign l_ref->* to <l_struc>.
endat.
concatenate wa_extension-valuepart1 wa_extension-valuepart2
wa_extension-valuepart3 wa_extension-valuepart4
into ext_value.
move ext_value to <l_struc>.
assign component 'POSNR' of structure <l_struc> to <l_field>.
read table c_accit with key posnr = <l_field>
into wa_accit.
if sy-subrc is initial.
move-corresponding <l_struc> to wa_accit.
modify c_accit from wa_accit index sy-tabix.
endif.
endloop.
endmethod.
FBB1过账用的BDC BDC跳过FBB1警告(注释错误忽略注释)
"跳过CS02警告 BOM更改
DATA:LV_MERY(10) TYPE C.
GET PARAMETER ID 'ZFIB002_N2' FIELD LV_MERY.
IF LV_MERY = 'ZFIB002_N2' AND e_msgty = 'W'.
e_msgty = 'S'.
MESSAGE ID 'FS' TYPE E_MSGTY NUMBER 219 WITH XSAKO-SAKNR
INTO GV_MESS_DUMMY. DECO_MESSAGE_SY.
ELSE.
MESSAGE ID 'FS' TYPE E_MSGTY NUMBER 219 WITH XSAKO-SAKNR
INTO GV_MESS_DUMMY. DECO_MESSAGE_SY.
ENDIF.
2.5.代码:
2.5.1.总账
LOOP AT GT_ITAB_ALV ASSIGNING FIELD-SYMBOL(<FS_ITAB_ALV>) WHERE SELBOX = 'X' AND STATE NE 'E'." AND XBLNR IS INITIAL
<FS_ITAB_ALV>-BLART = 'US'.
<FS_ITAB_ALV>-BUKRS = 'ASUF'.
<FS_ITAB_ALV>-MONAT = <FS_ITAB_ALV>-BLDAT+4(2).
"抬头
LS_DOCUMENTHEADER-DOC_TYPE = <FS_ITAB_ALV>-BLART. "凭证类型
LS_DOCUMENTHEADER-USERNAME = SY-UNAME. "用户名
LS_DOCUMENTHEADER-COMP_CODE = <FS_ITAB_ALV>-BUKRS. "公司代码
LS_DOCUMENTHEADER-DOC_DATE = <FS_ITAB_ALV>-BLDAT . "凭证日期
LS_DOCUMENTHEADER-PSTNG_DATE = <FS_ITAB_ALV>-BLDAT . "过账日期
LS_DOCUMENTHEADER-FIS_PERIOD = <FS_ITAB_ALV>-MONAT. "期间
LS_DOCUMENTHEADER-FISC_YEAR = <FS_ITAB_ALV>-BLDAT+0(4).
IF <FS_ITAB_ALV>-WRBTR < 0.
LV_ACC = '20'.
LV_ACC_960000 = '10'.
ELSE.
LV_ACC = '10'.
LV_ACC_960000 = '20'.
ENDIF.
"行项目
LS_ACCOUNTGL-ITEMNO_ACC = LV_ACC.
LS_ACCOUNTGL-GL_ACCOUNT = |{ <FS_ITAB_ALV>-HKONT ALPHA = IN }| . "科目
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
"行项目
LS_ACCOUNTGL-ITEMNO_ACC = LV_ACC_960000.
LS_ACCOUNTGL-GL_ACCOUNT = '0000960000'. "科目
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
"行项目 10 的金额数据
"根据金额的正负号,系统会自动赋值过账码,负号为50.
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_ALV>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_ALV>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"行项目 10 的本币金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_ALV>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_ALV>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"行项目 20 的金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_960000.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_ALV>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_ALV>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_960000.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_ALV>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_ALV>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
CLEAR GS_ZEXT2.
GS_ZEXT2-POSNR = LV_ACC.
IF <FS_ITAB_ALV>-WRBTR < 0.
GS_ZEXT2-BSCHL = '50'.
ELSE.
GS_ZEXT2-BSCHL = '40'.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
GS_ZEXT2-POSNR = LV_ACC_960000.
IF 0 - <FS_ITAB_ALV>-WRBTR < 0.
GS_ZEXT2-BSCHL = '50'.
ELSE.
GS_ZEXT2-BSCHL = '40'.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LS_DOCUMENTHEADER
* CUSTOMERCPD =
* CONTRACTHEADER =
IMPORTING
* OBJ_TYPE =
OBJ_KEY = LV_OBJ_KEY
* OBJ_SYS =
TABLES
ACCOUNTGL = LT_ACCOUNTGL
* ACCOUNTRECEIVABLE =
* ACCOUNTPAYABLE =
* ACCOUNTTAX =
CURRENCYAMOUNT = LT_CURRENCYAMOUNT
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
RETURN = LT_RETURN
* PAYMENTCARD =
* CONTRACTITEM =
EXTENSION2 = LT_EXTENSION2.
* REALESTATE =
* ACCOUNTWT =.
ENDIF.
ENDLOOP.
2.5.1.客户(AR)
LOOP AT GT_ITAB_CUST ASSIGNING FIELD-SYMBOL(<FS_ITAB_CUST>) WHERE SELBOX = 'X' AND STATE NE 'E'.
CLEAR: LS_DOCUMENTHEADER,LS_ACCOUNTGL,LS_CURRENCYAMOUNT,LS_EXTENSION2,LS_CUSTOMERCPD.
REFRESH: LT_ACCOUNTGL,LT_EXTENSION2,LT_CURRENCYAMOUNT,LT_RETURN,LT_RECEIVABLE.
<FS_ITAB_CUST>-BLART = 'UD'.
<FS_ITAB_CUST>-BUKRS = 'ASUF'.
<FS_ITAB_CUST>-MONAT = <FS_ITAB_CUST>-BLDAT+4(2).
"会计凭证 - 抬头
LS_DOCUMENTHEADER-DOC_TYPE = <FS_ITAB_CUST>-BLART. "凭证类型
LS_DOCUMENTHEADER-USERNAME = SY-UNAME. "用户名
LS_DOCUMENTHEADER-COMP_CODE = <FS_ITAB_CUST>-BUKRS. "公司代码
LS_DOCUMENTHEADER-DOC_DATE = <FS_ITAB_CUST>-SOURCEBLDAT . "原系统凭证日期
LS_DOCUMENTHEADER-PSTNG_DATE = <FS_ITAB_CUST>-BLDAT . "过账日期 与凭证日期一致
LS_DOCUMENTHEADER-FIS_PERIOD = <FS_ITAB_CUST>-MONAT. "期间
LS_DOCUMENTHEADER-HEADER_TXT = <FS_ITAB_CUST>-BKTXT. "凭证抬头文本
LS_DOCUMENTHEADER-REF_DOC_NO = <FS_ITAB_CUST>-REFERENCE. "参考 抬头
LS_DOCUMENTHEADER-FISC_YEAR = <FS_ITAB_CUST>-BLDAT+0(4). "会计年度
IF <FS_ITAB_CUST>-WRBTR < 0.
LV_ACC = '20'.
LV_ACC_970000 = '10'.
ELSE.
LV_ACC = '10'.
LV_ACC_970000 = '20'.
ENDIF.
"客户行项目
LS_RECEIVABLE-ITEMNO_ACC = LV_ACC.
LS_RECEIVABLE-ITEM_TEXT = <FS_ITAB_CUST>-TXT20.
LS_RECEIVABLE-COMP_CODE = 'ASUF'.
READ TABLE LT_LFB1 INTO DATA(LS_LFB1) WITH KEY BUKRS = <FS_ITAB_CUST>-BUKRS LIFNR = |{ <FS_ITAB_CUST>-ACCOUNT ALPHA = IN }|.
IF SY-SUBRC = 0.
LS_RECEIVABLE-GL_ACCOUNT = |{ LS_LFB1-AKONT ALPHA = IN }|.
ENDIF.
IF <FS_ITAB_CUST>-ACCOUNT(1) = 'Z'.
LS_CUSTOMERCPD-TITLE = 'A'.
LS_CUSTOMERCPD-NAME = 'A'.
LS_CUSTOMERCPD-CITY = 'A'.
ENDIF.
"付款信息
LS_RECEIVABLE-CUSTOMER = |{ <FS_ITAB_CUST>-ACCOUNT ALPHA = IN }|.
LS_RECEIVABLE-PMNTTRMS = <FS_ITAB_CUST>-ZTERM. "付款条件
LS_RECEIVABLE-BLINE_DATE = <FS_ITAB_CUST>-ZFBDT. "付款起算日期
LS_RECEIVABLE-ALLOC_NMBR = <FS_ITAB_CUST>-ASSIGNMENT. "分配
LS_RECEIVABLE-PMNT_BLOCK = <FS_ITAB_CUST>-PBK. "PBK
LS_RECEIVABLE-DUNN_BLOCK = <FS_ITAB_CUST>-BLOCK. "催款冻结
LS_RECEIVABLE-ITEM_TEXT = <FS_ITAB_CUST>-SGTXT. "文本
LS_RECEIVABLE-REF_KEY_1 = <FS_ITAB_CUST>-DOC_NO. "原系统的凭证
LS_RECEIVABLE-REF_KEY_2 = <FS_ITAB_CUST>-XREF2. "文本
LS_RECEIVABLE-REF_KEY_3 = <FS_ITAB_CUST>-XREF3. "文本
LS_RECEIVABLE-DUNN_AREA = <FS_ITAB_CUST>-MABER. "催款范围
LS_RECEIVABLE-DUNN_KEY = <FS_ITAB_CUST>-MSCHL. "催款代码
APPEND LS_RECEIVABLE TO LT_RECEIVABLE.
CLEAR LS_RECEIVABLE.
"客户行项目 - 金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_CUST>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_CUST>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"客户行项目 - 本币金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_CUST>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_CUST>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
"客户行项目 - 过账码
IF <FS_ITAB_CUST>-WRBTR > 0.
GS_ZEXT2-POSNR = LV_ACC.
GS_ZEXT2-BSCHL = '01'.
GS_ZEXT2-RSTGR = <FS_ITAB_CUST>-RSTGR.
GS_ZEXT2-MADAT = <FS_ITAB_CUST>-MADAT.
GS_ZEXT2-MANST = <FS_ITAB_CUST>-MANST.
GS_ZEXT2-VBELN = <FS_ITAB_CUST>-VBELN.
GS_ZEXT2-VBEL2 = <FS_ITAB_CUST>-VBEL2.
ELSE.
GS_ZEXT2-POSNR = LV_ACC.
GS_ZEXT2-BSCHL = '11'.
GS_ZEXT2-RSTGR = <FS_ITAB_CUST>-RSTGR.
GS_ZEXT2-MADAT = <FS_ITAB_CUST>-MADAT.
GS_ZEXT2-MANST = <FS_ITAB_CUST>-MANST.
GS_ZEXT2-VBELN = <FS_ITAB_CUST>-VBELN.
GS_ZEXT2-VBEL2 = <FS_ITAB_CUST>-VBEL2.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
"970000行项目
LS_RECEIVABLE-ITEMNO_ACC = LV_ACC_970000.
LS_RECEIVABLE-GL_ACCOUNT = '0000970000'.
APPEND LS_RECEIVABLE TO LT_RECEIVABLE.
CLEAR LS_RECEIVABLE.
"970000行项目 - 金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_970000.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_CUST>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_CUST>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"970000行项目 - 本币金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_970000.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_CUST>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_CUST>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
"970000行项目 - 过账码
GS_ZEXT2-POSNR = LV_ACC_970000.
IF 0 - <FS_ITAB_CUST>-WRBTR < 0.
GS_ZEXT2-BSCHL = '50'.
ELSE.
GS_ZEXT2-BSCHL = '40'.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LS_DOCUMENTHEADER
CUSTOMERCPD = LS_CUSTOMERCPD
* CONTRACTHEADER =
IMPORTING
* OBJ_TYPE =
OBJ_KEY = LV_OBJ_KEY
* OBJ_SYS =
TABLES
* ACCOUNTGL = LT_ACCOUNTGL
ACCOUNTRECEIVABLE = LT_RECEIVABLE
* ACCOUNTPAYABLE =
ACCOUNTTAX = LT_BAPIACTX09
CURRENCYAMOUNT = LT_CURRENCYAMOUNT
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
RETURN = LT_RETURN
* PAYMENTCARD =
* CONTRACTITEM =
EXTENSION2 = LT_EXTENSION2.
* REALESTATE =
* ACCOUNTWT =.
ENDLOOP.
2.5.1.供应商(AP)
LOOP AT GT_ITAB_VEND ASSIGNING FIELD-SYMBOL(<FS_ITAB_VEND>) WHERE SELBOX = 'X' AND STATE NE 'E'.
CLEAR: LS_DOCUMENTHEADER,LS_ACCOUNTGL,LS_CURRENCYAMOUNT,LS_EXTENSION2.
REFRESH: LT_ACCOUNTGL,LT_EXTENSION2,LT_CURRENCYAMOUNT,LT_RETURN,LT_RECEIVABLE,LT_PAYABLE.
<FS_ITAB_VEND>-BLART = 'UK'.
<FS_ITAB_VEND>-BUKRS = 'ASUF'.
<FS_ITAB_VEND>-MONAT = <FS_ITAB_VEND>-BLDAT+4(2).
"会计凭证 - 抬头
LS_DOCUMENTHEADER-DOC_TYPE = <FS_ITAB_VEND>-BLART. "凭证类型
LS_DOCUMENTHEADER-USERNAME = SY-UNAME. "用户名
LS_DOCUMENTHEADER-COMP_CODE = <FS_ITAB_VEND>-BUKRS. "公司代码
LS_DOCUMENTHEADER-DOC_DATE = <FS_ITAB_VEND>-ORI_DOC_DATE . "凭证日期
LS_DOCUMENTHEADER-PSTNG_DATE = <FS_ITAB_VEND>-BLDAT . "过账日期
LS_DOCUMENTHEADER-FIS_PERIOD = <FS_ITAB_VEND>-MONAT. "期间
LS_DOCUMENTHEADER-HEADER_TXT = <FS_ITAB_VEND>-BKTXT. "凭证抬头文本
LS_DOCUMENTHEADER-REF_DOC_NO = <FS_ITAB_VEND>-REFERENCE. "参考
LS_DOCUMENTHEADER-FISC_YEAR = <FS_ITAB_VEND>-BLDAT+0(4). "会计年度
IF <FS_ITAB_VEND>-WRBTR < 0.
LV_ACC = '20'.
LV_ACC_950000 = '10'.
ELSE.
LV_ACC = '10'.
LV_ACC_950000 = '20'.
ENDIF.
"供应商行项目
LS_PAYABLE-ITEMNO_ACC = LV_ACC.
LS_PAYABLE-ITEM_TEXT = <FS_ITAB_VEND>-TXT20.
LS_PAYABLE-COMP_CODE = 'ASUF'.
READ TABLE LT_KNB1 INTO DATA(LS_KNB1) WITH KEY BUKRS = <FS_ITAB_VEND>-BUKRS KUNNR = |{ <FS_ITAB_VEND>-ACCOUNT ALPHA = IN }|.
IF SY-SUBRC = 0.
LS_PAYABLE-GL_ACCOUNT = |{ LS_KNB1-AKONT ALPHA = IN }|.
ENDIF.
"付款信息
LS_PAYABLE-VENDOR_NO = |{ <FS_ITAB_VEND>-ACCOUNT ALPHA = IN }|.
LS_PAYABLE-PMNTTRMS = <FS_ITAB_VEND>-ZTERM. "付款条件
LS_PAYABLE-BLINE_DATE = <FS_ITAB_VEND>-ZFBDT. "付款起算日期
LS_PAYABLE-PMNT_BLOCK = <FS_ITAB_VEND>-PBK. "PBK
LS_PAYABLE-ALLOC_NMBR = <FS_ITAB_VEND>-ASSIGNMENT. "分配
LS_PAYABLE-ALLOC_NMBR = <FS_ITAB_VEND>-DOC_NO. "旧系统凭证号
LS_PAYABLE-ITEM_TEXT = <FS_ITAB_VEND>-SGTXT. "文本
LS_PAYABLE-REF_KEY_1 = <FS_ITAB_VEND>-XREF2. "文本
LS_PAYABLE-REF_KEY_2 = <FS_ITAB_VEND>-XREF3. "文本
APPEND LS_PAYABLE TO LT_PAYABLE.
CLEAR LS_PAYABLE.
"供应商行项目 - 金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_VEND>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_VEND>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"供应商行项目 - 本币金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_VEND>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_VEND>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
"供应商行项目 - 过账码
IF <FS_ITAB_VEND>-WRBTR > 0.
GS_ZEXT2-POSNR = LV_ACC.
GS_ZEXT2-BSCHL = '21'.
ELSE.
GS_ZEXT2-POSNR = LV_ACC.
GS_ZEXT2-BSCHL = '31'.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
"970000行项目
LS_PAYABLE-ITEMNO_ACC = LV_ACC_950000.
LS_PAYABLE-GL_ACCOUNT = '0000950000'.
APPEND LS_PAYABLE TO LT_PAYABLE.
CLEAR LS_PAYABLE.
"950000 - 金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_950000.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_VEND>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_VEND>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"950000行项目 - 本币金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_950000.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_VEND>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_VEND>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
"950000行项目 - 过账码
GS_ZEXT2-POSNR = LV_ACC_950000.
IF 0 - <FS_ITAB_VEND>-WRBTR < 0.
GS_ZEXT2-BSCHL = '50'.
ELSE.
GS_ZEXT2-BSCHL = '40'.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LS_DOCUMENTHEADER
* CUSTOMERCPD =
* CONTRACTHEADER =
IMPORTING
* OBJ_TYPE =
OBJ_KEY = LV_OBJ_KEY
* OBJ_SYS =
TABLES
* ACCOUNTGL = LT_ACCOUNTGL
* ACCOUNTRECEIVABLE = LT_PAYABLE
ACCOUNTPAYABLE = LT_PAYABLE
* ACCOUNTTAX =
CURRENCYAMOUNT = LT_CURRENCYAMOUNT
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
RETURN = LT_RETURN
* PAYMENTCARD =
* CONTRACTITEM =
EXTENSION2 = LT_EXTENSION2.
* REALESTATE =
* ACCOUNTWT =.
ENDLOOP.
2.5.1. GL ITEM
外币金额为0的话,得录制FBB1的BDC,我是录制了两个FBB1的BDC;一个是针对本币金额 大于 0 另一个是小于0
LOOP AT GT_ITAB_GLITEM ASSIGNING FIELD-SYMBOL(<FS_ITAB_GLITEM>) WHERE SELBOX = 'X' AND STATE NE 'E'." AND XBLNR IS INITIAL
CLEAR: LS_DOCUMENTHEADER,LS_ACCOUNTGL,LS_CURRENCYAMOUNT,LS_EXTENSION2.
REFRESH: LT_ACCOUNTGL,LT_EXTENSION2,LT_CURRENCYAMOUNT,LT_RETURN,LT_RECEIVABLE.
"判断外币金额,为0走BDC
IF <FS_ITAB_GLITEM>-WRBTR = 0.
PERFORM FRM_BDC_FBB1 CHANGING <FS_ITAB_GLITEM>.
CONTINUE.
ENDIF.
<FS_ITAB_GLITEM>-MONAT = <FS_ITAB_GLITEM>-BLDAT+4(2).
"抬头
LS_DOCUMENTHEADER-DOC_TYPE = 'US'. "凭证类型
IF <FS_ITAB_GLITEM>-USERNAME IS INITIAL.
<FS_ITAB_GLITEM>-USERNAME = SY-UNAME.
ENDIF.
LS_DOCUMENTHEADER-USERNAME = <FS_ITAB_GLITEM>-USERNAME . "用户名
LS_DOCUMENTHEADER-COMP_CODE = 'ASUF'. "公司代码
LS_DOCUMENTHEADER-DOC_DATE = <FS_ITAB_GLITEM>-ENTRY_DATE . "凭证日期
LS_DOCUMENTHEADER-PSTNG_DATE = <FS_ITAB_GLITEM>-BLDAT . "过账日期
LS_DOCUMENTHEADER-FIS_PERIOD = <FS_ITAB_GLITEM>-MONAT . "期间
LS_DOCUMENTHEADER-FISC_YEAR = <FS_ITAB_GLITEM>-BLDAT+0(4).
LS_DOCUMENTHEADER-REF_DOC_NO = <FS_ITAB_GLITEM>-REFERENCE.
LS_DOCUMENTHEADER-HEADER_TXT = <FS_ITAB_GLITEM>-BKTXT.
IF <FS_ITAB_GLITEM>-WRBTR < 0.
LV_ACC = '20'.
LV_ACC_960000 = '10'.
ELSE.
LV_ACC = '10'.
LV_ACC_960000 = '20'.
ENDIF.
"行项目
LS_ACCOUNTGL-ITEMNO_ACC = LV_ACC.
LS_ACCOUNTGL-GL_ACCOUNT = |{ <FS_ITAB_GLITEM>-ACCOUNT ALPHA = IN }| . "科目
LS_ACCOUNTGL-VALUE_DATE = <FS_ITAB_GLITEM>-VALUE_DATE. "起息日
LS_ACCOUNTGL-ITEM_TEXT = <FS_ITAB_GLITEM>-ITEM_TEXT. "项目文本
LS_ACCOUNTGL-ALLOC_NMBR = <FS_ITAB_GLITEM>-ASSIGNMENT. "分配
LS_ACCOUNTGL-REF_KEY_1 = <FS_ITAB_GLITEM>-DOC_NO. "分配
LS_ACCOUNTGL-REF_KEY_2 = <FS_ITAB_GLITEM>-XREF2. "分配
LS_ACCOUNTGL-REF_KEY_3 = <FS_ITAB_GLITEM>-XREF3. "分配
LS_ACCOUNTGL-TAX_CODE = ''. "税码
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
"行项目
LS_ACCOUNTGL-ITEMNO_ACC = LV_ACC_960000.
LS_ACCOUNTGL-GL_ACCOUNT = '0000960000'. "科目
APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR LS_ACCOUNTGL.
"行项目 10 的金额数据
"根据金额的正负号,系统会自动赋值过账码,负号为50.
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_GLITEM>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_GLITEM>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"行项目 10 的本币金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ITAB_GLITEM>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_GLITEM>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
"行项目 20 的金额数据
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_960000.
LS_CURRENCYAMOUNT-CURR_TYPE = '00'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_GLITEM>-WRBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_GLITEM>-WRBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ACC_960000.
LS_CURRENCYAMOUNT-CURR_TYPE = '10'.
LS_CURRENCYAMOUNT-AMT_DOCCUR = 0 - <FS_ITAB_GLITEM>-DMBTR. "金额
LS_CURRENCYAMOUNT-CURRENCY = <FS_ITAB_GLITEM>-DMBTR_CURRENCY. "币种
APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
CLEAR LS_CURRENCYAMOUNT.
CLEAR GS_ZEXT2.
GS_ZEXT2-POSNR = LV_ACC.
IF <FS_ITAB_GLITEM>-WRBTR < 0.
GS_ZEXT2-BSCHL = '50'.
ELSE.
GS_ZEXT2-BSCHL = '40'.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
GS_ZEXT2-POSNR = LV_ACC_960000.
IF 0 - <FS_ITAB_GLITEM>-WRBTR < 0.
GS_ZEXT2-BSCHL = '50'.
ELSE.
GS_ZEXT2-BSCHL = '40'.
ENDIF.
LS_EXTENSION2-STRUCTURE = 'ZFIS002'.
LS_EXTENSION2-VALUEPART1 = GS_ZEXT2.
APPEND LS_EXTENSION2 TO LT_EXTENSION2.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = LS_DOCUMENTHEADER
* CUSTOMERCPD =
* CONTRACTHEADER =
IMPORTING
* OBJ_TYPE =
OBJ_KEY = LV_OBJ_KEY
* OBJ_SYS =
TABLES
ACCOUNTGL = LT_ACCOUNTGL
* ACCOUNTRECEIVABLE =
* ACCOUNTPAYABLE =
* ACCOUNTTAX =
CURRENCYAMOUNT = LT_CURRENCYAMOUNT
* CRITERIA =
* VALUEFIELD =
* EXTENSION1 =
RETURN = LT_RETURN
* PAYMENTCARD =
* CONTRACTITEM =
EXTENSION2 = LT_EXTENSION2.
* REALESTATE =
* ACCOUNTWT =.
ENDLOOP.