ABAP实现过账(F-02/FBB1)和 冲销

目录

1.介绍:

2.内容

        2.1. GUI状态:        

        2.2.文本元素

        2.3.表:(表结构excel数据已上传)

        2.4.其他

        2.5.代码:

                  2.5.1.总账

                  2.5.1.客户(AR)

                  2.5.1.供应商(AP) 

                  2.5.1. GL ITEM 

 拓展:对于冲销的话就用  CALL_FB08 函数冲销


1.介绍:

  • F-02:  四种类型财务过账导入   总账(GL) 、客户(AR)、 供应商(AP)、 GL ITEM
  • FBB1:   GL ITEM中外币为0,本币不为0的项目导入
  • BAPI
    1. BAPI_ACC_DOCUMENT_POST            外币为0,本币不为0的走BDC
    2. BAPI_ACC_DOCUMENT_REV_POST  凭证冲销
    3. CALL_FB08                                             外币为0,本币不为0 的凭证冲销

还有一点就是  BAPI_ACC_DOCUMENT_POST 增强字段(我是扩展了记账码字段)

2.内容

        2.1. GUI状态:        

        2.2.文本元素

        2.3.表:(表结构excel数据已上传)

  1. ZFI_B002                                   总账导入记录表
  2. ZFI_B002_CUST                       客户导入记录表
  3. ZFI_B002_VEND                      供应商导入记录表
  4. ZFI_B002_GL_ITEM                 GL ITEM  导入记录表

        2.4.其他

BAPI_ACC_DOCUMENT_POST 扩展字段

  1. 定义结构
  2. 创建实施
  3. 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.
 拓展:对于冲销的话就用   CALL_FB08 函数冲销

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值