總帳憑証:BAPI_ACC_DOCUMENT_POST參數

来源:互联网 发布:多益网络帐号 编辑:程序博客网 时间:2024/06/04 19:39

FORM FILL_IN_TABLES USING PF_AUTOMESS.
data: WA_ZEXTEN LIKE ZEXTEN014.

   PF_AUTOMESS = ''.
*  ---初始化參數
   CLEAR: gd_documentheader, it_accountgl, it_currencyamount,
it_accvendap, it_acccustar, it_ext2, it_return.
   CLEAR: it_accountgl[], it_currencyamount[], it_accvendap[],
it_acccustar[], it_ext2[], it_return[].
   SELECT SINGLE * FROM T001 WHERE BUKRS = IT_UPDATA-CCDE.  "求取公司
的本位幣
*  ----gd_documentheader
   gd_documentheader-USERNAME    = SY-UNAME.
   gd_documentheader-DOC_DATE    = IT_UPDATA-INV_DATE.
   gd_documentheader-DOC_TYPE    = IT_UPDATA-DOC_TYPE.
   gd_documentheader-COMP_CODE   = IT_UPDATA-CCDE.
   gd_documentheader-PSTNG_DATE  = IT_UPDATA-PST_DATE.
   gd_documentheader-REF_DOC_NO  = IT_UPDATA-REF_NO.
   gd_documentheader-HEADER_TXT  = IT_UPDATA-HD_TXT.
   gd_documentheader-bus_act    = 'RFBU'.
*  --根據IT_UPDATA-PK1&IT_UPDATA-PK2按借貸分別求參數
*  >>>>IT_UPDATA-
PK1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BEGIN
   SELECT SINGLE * FROM TBSL WHERE BSCHL = IT_UPDATA-PK1.  "求取post
key的借or貸
   IF TBSL-SHKZG = 'S'.
       IT_UPDATA-FCAMT1 = ABS( IT_UPDATA-FCAMT1 ).
       "IT_UPDATA-LCAMT1 = ABS( IT_UPDATA-LCAMT1 ).
   ELSEIF TBSL-SHKZG = 'H'.
       IT_UPDATA-FCAMT1 = ABS( IT_UPDATA-FCAMT1 ) * -1.
       "IT_UPDATA-LCAMT1 = ABS( IT_UPDATA-LCAMT1 ) * -1.
   ENDIF.
*  >>----it_currencyamount(10)
   it_currencyamount-ITEMNO_ACC = 10.
   it_currencyamount-CURRENCY   = IT_UPDATA-CUR.
   it_currencyamount-AMT_DOCCUR = IT_UPDATA-FCAMT1.
   IF T001-WAERS <> IT_UPDATA-CUR.   "--不是本位幣時,求匯率(因參數問
題,改為傳匯率)
       IF IT_UPDATA-LCAMT1 IS NOT INITIAL.
           it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT1.
       ELSE.   "如果用戶沒有錄入本位值,則取系統最近的匯率
           PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT1 IT_UPDATA-
CUR T001-WAERS it_currencyamount-EXCH_RATE.
       ENDIF.
*       IF IT_UPDATA-FCAMT1 <> 0 AND IT_UPDATA-LCAMT1 IS NOT INITIAL.
*           it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT1 /
IT_UPDATA-FCAMT1.
*       ELSE.   "如果用戶沒有錄入本位值,則取系統最近的匯率
*           PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT1
IT_UPDATA-CUR T001-WAERS it_currencyamount-EXCH_RATE.
*       ENDIF.
   ENDIF.
   APPEND it_currencyamount.
   CLEAR  it_currencyamount.
*  >>----it_ext2(10)
   CLEAR: WA_ZEXTEN.
   WA_ZEXTEN-POSNR    = 10. "??行?目
   WA_ZEXTEN-BSCHL    = IT_UPDATA-PK1.   "post key1
   IF TBSL-XSONU = 'X'.
   WA_ZEXTEN-UMSKZ    = IT_UPDATA-SPGL.  "Special G/L Indicator
   ENDIF.
   it_ext2-STRUCTURE  = 'ZEXTEN014'.
   it_ext2-VALUEPART1 = WA_ZEXTEN.
   APPEND it_ext2.
   CLEAR  it_ext2.
*CASE1
   CASE TBSL-KOART.
     WHEN 'K'.   "VENDOR
*      >>----it_accvendap(10)
       it_accvendap-ITEMNO_ACC  = 10.
       it_accvendap-COMP_CODE   = IT_UPDATA-CCDE.
       it_accvendap-VENDOR_NO   = IT_UPDATA-ACCT1.
       PERFORM ADD_PRE_ZERO USING it_accvendap-VENDOR_NO.  "前導加0
       "-it_accvendap-GL_ACCOUNT  = IT_UPDATA-ACCT1.   "-'1310111010'
       it_accvendap-SP_GL_IND   = IT_UPDATA-SPGL.
       it_accvendap-TAX_CODE    = IT_UPDATA-TAXCODE.
       IF TBSL-SHKZG = 'S'.
       it_accvendap-BLINE_DATE  = IT_UPDATA-DUEON.
       ENDIF.
       it_accvendap-ALLOC_NMBR  = IT_UPDATA-ASSGN1.
       it_accvendap-ITEM_TEXT   = IT_UPDATA-ITEM_TXT1.
       it_accvendap-BUS_AREA    = IT_UPDATA-BUSAR1.
*      ---LFB1
       select single * from LFB1 where lifnr = it_accvendap-VENDOR_NO
and
                                       bukrs = IT_UPDATA-CCDE.
       IF IT_UPDATA-ZTERM IS NOT INITIAL.
       it_accvendap-PMNTTRMS    = IT_UPDATA-ZTERM.   "Payment Key
       ELSE.
       it_accvendap-PMNTTRMS    = LFB1-ZTERM.
       ENDIF.
       select single * from T052 where zterm = LFB1-ZTERM.
       IF IT_UPDATA-ZBD1T IS NOT INITIAL.
       it_accvendap-DSCT_DAYS1  = IT_UPDATA-ZBD1T.   "Cash discount
days 1
       ELSE.
       it_accvendap-DSCT_DAYS1  = T052-ZTAG1.
       ENDIF.
       IF IT_UPDATA-ZFBDT IS NOT INITIAL.
       it_accvendap-BLINE_DATE  = IT_UPDATA-ZFBDT.   "Baseline Date
for Due Date Calculation
       ELSE.
       it_accvendap-BLINE_DATE  = IT_UPDATA-INV_DATE. "--SY-DATUM.
       ENDIF.
*      --- end
       APPEND it_accvendap.
       CLEAR  it_accvendap.
     WHEN 'D'.   "CUSTOMER
*      >>----it_acccustar(10)
       it_acccustar-ITEMNO_ACC  = 10.
       it_acccustar-COMP_CODE   = IT_UPDATA-CCDE.
       it_acccustar-CUSTOMER    = IT_UPDATA-ACCT1.
       PERFORM ADD_PRE_ZERO USING it_acccustar-CUSTOMER.  "前導加0
       "-it_acccustar-GL_ACCOUNT  = IT_UPDATA-ACCT1.
       it_acccustar-SP_GL_IND   = IT_UPDATA-SPGL.
       it_acccustar-TAX_CODE    = IT_UPDATA-TAXCODE.
       IF TBSL-SHKZG = 'S'.
       it_acccustar-BLINE_DATE  = IT_UPDATA-DUEON.
       ENDIF.
       it_acccustar-ALLOC_NMBR  = IT_UPDATA-ASSGN1.
       it_acccustar-ITEM_TEXT   = IT_UPDATA-ITEM_TXT1.
       it_acccustar-BUS_AREA    = IT_UPDATA-BUSAR1.
*      --KNB1
       select single * from KNB1 where kunnr = it_acccustar-CUSTOMER
and
                                       bukrs = IT_UPDATA-CCDE.
       IF IT_UPDATA-ZTERM IS NOT INITIAL.
       it_acccustar-PMNTTRMS    = IT_UPDATA-ZTERM.   "Payment Key
       ELSE.
       it_acccustar-PMNTTRMS    = KNB1-ZTERM.
       ENDIF.
       select single * from T052 where zterm = KNB1-ZTERM.
       IF IT_UPDATA-ZBD1T IS NOT INITIAL.
       it_acccustar-DSCT_DAYS1  = IT_UPDATA-ZBD1T.   "Cash discount
days 1
       ELSE.
       it_acccustar-DSCT_DAYS1  = T052-ZTAG1.
       ENDIF.
       IF IT_UPDATA-ZFBDT IS NOT INITIAL.
       it_acccustar-BLINE_DATE  = IT_UPDATA-ZFBDT.   "Baseline Date
for Due Date Calculation
       ELSE.
       it_acccustar-BLINE_DATE  = IT_UPDATA-INV_DATE. "--SY-DATUM.
       ENDIF.
*      -- end
       APPEND it_acccustar.
       CLEAR  it_acccustar.
     WHEN OTHERS.  "STANDARD(40/50)
       SELECT SINGLE * FROM SKB1 WHERE BUKRS = IT_UPDATA-CCDE AND
                                       SAKNR = IT_UPDATA-ACCT1.
*      >>----it_accountgl(10)
       it_accountgl-ITEMNO_ACC  = 10.
       it_accountgl-GL_ACCOUNT  = IT_UPDATA-ACCT1.
       it_accountgl-ALLOC_NMBR  = IT_UPDATA-ASSGN1.
       it_accountgl-ITEM_TEXT   = IT_UPDATA-ITEM_TXT1.
       it_accountgl-COSTCENTER  = IT_UPDATA-CCTR1.
       it_accountgl-PROFIT_CTR  = IT_UPDATA-PCTR1.
       it_accountgl-BUS_AREA    = IT_UPDATA-BUSAR1.
       IF SKB1-MWSKZ IS NOT INITIAL.   "會計科目需不需要Tax code
           it_accountgl-TAX_CODE    = IT_UPDATA-TAXCODE.
       ENDIF.
       IF SKB1-XINTB = 'X'.
           CONCATENATE '[' IT_UPDATA-ACCT1 ']' TEXT-E02 INTO
PF_AUTOMESS.
       ENDIF.
       APPEND it_accountgl.
       CLEAR  it_accountgl.
   ENDCASE.
*ENDCASE1
*  >>>>IT_UPDATA-
PK1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>END
*  = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
=
*  >>>>IT_UPDATA-
PK2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>BEGIN
   SELECT SINGLE * FROM TBSL WHERE BSCHL = IT_UPDATA-PK2.  "求取post
key的借or貸
   IF TBSL-SHKZG = 'S'.
       IT_UPDATA-FCAMT2 = ABS( IT_UPDATA-FCAMT2 ).
       "IT_UPDATA-LCAMT2 = ABS( IT_UPDATA-LCAMT2 ).
   ELSEIF TBSL-SHKZG = 'H'.
       IT_UPDATA-FCAMT2 = ABS( IT_UPDATA-FCAMT2 ) * -1.
       "IT_UPDATA-LCAMT2 = ABS( IT_UPDATA-LCAMT2 ) * -1.
   ENDIF.
*    ----it_currencyamount(20)
   it_currencyamount-ITEMNO_ACC = 20.
   it_currencyamount-CURRENCY   = IT_UPDATA-CUR.
   it_currencyamount-AMT_DOCCUR = IT_UPDATA-FCAMT2.
*----
   IF T001-WAERS <> IT_UPDATA-CUR.   "--不是本位幣時,求匯率(因參數問
題,改為傳匯率)
       IF IT_UPDATA-LCAMT2 IS NOT INITIAL.
            it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT2.
       ELSE.   "如果用戶沒有錄入本位值,則取系統最近的匯率
            PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT2 IT_UPDATA-
CUR T001-WAERS it_currencyamount-EXCH_RATE.
       ENDIF.
*       IF IT_UPDATA-FCAMT2 <> 0 AND IT_UPDATA-LCAMT2 IS NOT INITIAL.
*            it_currencyamount-EXCH_RATE = IT_UPDATA-LCAMT2 /
IT_UPDATA-FCAMT2.
*       ELSE.   "如果用戶沒有錄入本位值,則取系統最近的匯率
*            PERFORM CONVERT_CURRENCY USING IT_UPDATA-FCAMT2
IT_UPDATA-CUR T001-WAERS it_currencyamount-EXCH_RATE.
*       ENDIF.
   ENDIF.
*----
   APPEND it_currencyamount.
   CLEAR  it_currencyamount.
*  >>----it_ext2(20)
   CLEAR: WA_ZEXTEN.
   WA_ZEXTEN-POSNR    = 20. "??行?目
   WA_ZEXTEN-BSCHL    = IT_UPDATA-PK2.   "post key2
   IF TBSL-XSONU = 'X'.
   WA_ZEXTEN-UMSKZ    = IT_UPDATA-SPGL.  "Special G/L Indicator
   ENDIF.
   "--WA_ZEXTEN-DMBTR = IT_UPDATA-LCAMT2.   "---07/05
   it_ext2-STRUCTURE  = 'ZEXTEN014'.
   it_ext2-VALUEPART1 = WA_ZEXTEN.
   APPEND it_ext2.
   CLEAR  it_ext2.
*CASE2
   CASE TBSL-KOART.
     WHEN 'K'.   "VENDOR
*      >>----it_accvendap(20)
       it_accvendap-ITEMNO_ACC  = 20.
       it_accvendap-COMP_CODE   = IT_UPDATA-CCDE.
       it_accvendap-VENDOR_NO   = IT_UPDATA-ACCT2.
       PERFORM ADD_PRE_ZERO USING it_accvendap-VENDOR_NO.  "前導加0
       "-it_accvendap-GL_ACCOUNT  = IT_UPDATA-ACCT2.
       it_accvendap-SP_GL_IND   = IT_UPDATA-SPGL.
       it_accvendap-TAX_CODE    = IT_UPDATA-TAXCODE.
       IF TBSL-SHKZG = 'S'.
       it_accvendap-BLINE_DATE  = IT_UPDATA-DUEON.
       ENDIF.
       it_accvendap-ALLOC_NMBR  = IT_UPDATA-ASSGN2.
       it_accvendap-ITEM_TEXT   = IT_UPDATA-ITEM_TXT2.
       it_accvendap-BUS_AREA    = IT_UPDATA-BUSAR2.
*      ---LFB1
       select single * from LFB1 where lifnr = it_accvendap-VENDOR_NO
and
                                       bukrs = IT_UPDATA-CCDE.
       IF IT_UPDATA-ZTERM IS NOT INITIAL.
       it_accvendap-PMNTTRMS    = IT_UPDATA-ZTERM.   "Payment Key
       ELSE.
       it_accvendap-PMNTTRMS    = LFB1-ZTERM.
       ENDIF.
       select single * from T052 where zterm = LFB1-ZTERM.
       IF IT_UPDATA-ZBD1T IS NOT INITIAL.
       it_accvendap-DSCT_DAYS1  = IT_UPDATA-ZBD1T.   "Cash discount
days 1
       ELSE.
       it_accvendap-DSCT_DAYS1  = T052-ZTAG1.
       ENDIF.
       IF IT_UPDATA-ZFBDT IS NOT INITIAL.
       it_accvendap-BLINE_DATE  = IT_UPDATA-ZFBDT.   "Baseline Date
for Due Date Calculation
       ELSE.
       it_accvendap-BLINE_DATE  = IT_UPDATA-INV_DATE. "--SY-DATUM.
       ENDIF.
*      --- end
       APPEND it_accvendap.
       CLEAR  it_accvendap.
     WHEN 'D'.  "CUSTOMER
*      >>----it_acccustar(20)
       it_acccustar-ITEMNO_ACC  = 20.
       it_acccustar-COMP_CODE   = IT_UPDATA-CCDE.
       it_acccustar-CUSTOMER    = IT_UPDATA-ACCT2.
       PERFORM ADD_PRE_ZERO USING it_acccustar-CUSTOMER.  "前導加0
       "-it_acccustar-GL_ACCOUNT  = IT_UPDATA-ACCT2.
       it_acccustar-SP_GL_IND   = IT_UPDATA-SPGL.
       it_acccustar-TAX_CODE    = IT_UPDATA-TAXCODE.
       IF TBSL-SHKZG = 'S'.
       it_acccustar-BLINE_DATE  = IT_UPDATA-DUEON.
       ENDIF.
       it_acccustar-ALLOC_NMBR  = IT_UPDATA-ASSGN2.
       it_acccustar-ITEM_TEXT   = IT_UPDATA-ITEM_TXT2.
       it_acccustar-BUS_AREA    = IT_UPDATA-BUSAR2.
*      --KNB1
       select single * from KNB1 where kunnr = it_acccustar-CUSTOMER
and
                                       bukrs = IT_UPDATA-CCDE.
       IF IT_UPDATA-ZTERM IS NOT INITIAL.
       it_acccustar-PMNTTRMS    = IT_UPDATA-ZTERM.   "Payment Key
       ELSE.
       it_acccustar-PMNTTRMS    = KNB1-ZTERM.
       ENDIF.
       select single * from T052 where zterm = KNB1-ZTERM.
       IF IT_UPDATA-ZBD1T IS NOT INITIAL.
       it_acccustar-DSCT_DAYS1  = IT_UPDATA-ZBD1T.   "Cash discount
days 1
       ELSE.
       it_acccustar-DSCT_DAYS1  = T052-ZTAG1.
       ENDIF.
       IF IT_UPDATA-ZFBDT IS NOT INITIAL.
       it_acccustar-BLINE_DATE  = IT_UPDATA-ZFBDT.   "Baseline Date
for Due Date Calculation
       ELSE.
       it_acccustar-BLINE_DATE  = IT_UPDATA-INV_DATE.  "--SY-DATUM.
       ENDIF.
*      -- end
       APPEND it_acccustar.
       CLEAR  it_acccustar.
     WHEN OTHERS.   "STANDARD(40/50)
       SELECT SINGLE * FROM SKB1 WHERE BUKRS = IT_UPDATA-CCDE AND
                                       SAKNR = IT_UPDATA-ACCT2.
*      >>----it_accountgl(20)
       it_accountgl-ITEMNO_ACC  = 20.
       it_accountgl-GL_ACCOUNT  = IT_UPDATA-ACCT2.
       it_accountgl-ALLOC_NMBR  = IT_UPDATA-ASSGN2.
       it_accountgl-ITEM_TEXT   = IT_UPDATA-ITEM_TXT2.
       it_accountgl-COSTCENTER  = IT_UPDATA-CCTR2.
       it_accountgl-PROFIT_CTR  = IT_UPDATA-PCTR2.
       it_accountgl-BUS_AREA    = IT_UPDATA-BUSAR2.
       IF SKB1-MWSKZ IS NOT INITIAL.   "會計科目需不需要Tax code
           it_accountgl-TAX_CODE    = IT_UPDATA-TAXCODE.
       ENDIF.
       IF SKB1-XINTB = 'X'.
           CONCATENATE PF_AUTOMESS '[' IT_UPDATA-ACCT2 ']' TEXT-E02
INTO PF_AUTOMESS.
       ENDIF.
       APPEND it_accountgl.
       CLEAR  it_accountgl.
   ENDCASE.
*ENDCASE2
*  >>>>IT_UPDATA-
PK2>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>END
ENDFORM.

原创粉丝点击