ITPub博客

首页 > 数字化转型 > ERP > SAP内部清账函数测试一

SAP内部清账函数测试一

原创 ERP 作者:zhaoshuhong 时间:2020-07-10 10:06:40 0 删除 编辑

在先行者测试的基础上修改,两金额相等的凭证清账。 凭证 0090000095第一行,凭证 0100001098第二行。

REPORT ZTESTCLEARING .

TABLES : BSEG .

DATA : LT_BLNTAB   TYPE  TABLE  OF BLNTAB   WITH  HEADER  LINE ,
      LT_FTCLEAR  TYPE  TABLE  OF FTCLEAR  WITH  HEADER  LINE ,
      LT_FTPOST   TYPE  TABLE  OF FTPOST   WITH  HEADER  LINE ,
      LT_FTTAX    TYPE  TABLE  OF FTTAX    WITH  HEADER  LINE .
DATA :LS_SYST  TYPE SYST .
DATA :LV_MONAT     TYPE BKPF -MONAT .
DATA :LV_GJAHR     TYPE BKPF -GJAHR .
DATA :LV_POSNR     TYPE  I .
DATA :LV_WRBTR     TYPE CHAR20 .
DATA :LV_DATUM     TYPE STRING .
DATA :LV_BELNR     TYPE STRING .

DATA : E_BELNR  TYPE BKPF -BELNR ,
      E_BUKRS  TYPE BKPF -BUKRS ,
      E_GJAHR  TYPE BKPF -GJAHR .

DATA :  BEGIN  OF T_FPITEM  OCCURS  0 ,
        BSCHL  TYPE BSEG -BSCHL ,
        HKONT  TYPE BSEG -HKONT ,
        GSBER  TYPE BSEG -GSBER ,
        WRBTR  TYPE BSEG -WRBTR ,
        RSTGR  TYPE BSEG -RSTGR ,
       END  OF T_FPITEM .

DATA :  BEGIN  OF T_FCITEM  OCCURS  0 ,
        KUNNR  TYPE BSEG -KUNNR ,
        BELNR  TYPE BSEG -BELNR ,
        GJAHR  TYPE BSEG -GJAHR ,
        BUZEI  TYPE BSEG -BUZEI ,
        LIFNR  TYPE BSEG -LIFNR ,
       END  OF T_FCITEM .

DATA :  BEGIN  OF I_HEADER  OCCURS  0 ,
        KOART  TYPE BSEG -KOART ,
        BUKRS  TYPE BSEG -BUKRS ,
        LIFNR  TYPE BSEG -LIFNR ,
       END  OF I_HEADER .

DATA :  BEGIN  OF E_MESSAGE  OCCURS  0 ,
         TYPE     TYPE  C ,
         MESSAGE  TYPE STRING ,
       END  OF E_MESSAGE .

DEFINE POPULATE_FTPOST .
  lt_ftpost -stype  = &1 .
  lt_ftpost - count  = &2 .
  lt_ftpost -fnam   = &3 .
  lt_ftpost -fval   = &4 .
   APPEND lt_ftpost .
END-OF-DEFINITION .
DEFINE POPULATE_FTCLEAR .
  lt_ftclear -agkoa   = i_header -koart .  "K for vender,D for custmor, S for GL
  lt_ftclear -agbuk   = i_header -bukrs .  "公司代码
  lt_ftclear -xnops   =  'X' .             "标准未清项目
  lt_ftclear -agkon   = &1 .              "科目
  lt_ftclear -selfd   = &2 .              "BELNR 字段固定
  lt_ftclear -selvon  = &3 .              "会计凭证搜索--开始上限值
*  lt_ftclear-selbis = '2'.           "会计凭证搜索--开始下限值
   APPEND lt_ftclear .
END-OF-DEFINITION .
**********************************************************************
*过账创建凭证
**********************************************************************
*---初始化
LV_MONAT  = SY -DATUM+4 ( 2 ) .
LV_GJAHR  = SY -DATUM+0 ( 4 ) .
*IF I_HEADER-WAERS IS INITIAL.
*  I_HEADER-WAERS = 'CNY'.
*ENDIF.

CALL  FUNCTION  'CONVERT_DATE_TO_EXTERNAL'
   EXPORTING
    DATE_INTERNAL             = SY -DATUM
   IMPORTING
    DATE_EXTERNAL             = LV_DATUM
   EXCEPTIONS
    DATE_INTERNAL_IS_INVALID  =  1
     OTHERS                    =  2 .
*K-->Header,P-->Item
POPULATE_FTPOST :  'K'  1  'BKPF-BUKRS'  '1010' , "公司代码
                  'K'  1  'BKPF-BLART'  'Z3' ,  "凭证类型
                  'K'  1  'BKPF-BLDAT' LV_DATUM ,        "凭证日期
                  'K'  1  'BKPF-BUDAT' LV_DATUM ,        "过帐日期
                  'K'  1  'BKPF-MONAT' LV_MONAT ,        "过帐期间
                  'K'  1  'BKPF-WAERS'  'CNY' ,
                  'K'  1  'BKPF-XBLNR'  '' ,
                  'K'  1  'BKPF-BKTXT'  '清账测试' .
**********************************************************************
*清账凭证
**********************************************************************
T_FCITEM -BELNR  =  '0090000095' .
T_FCITEM -GJAHR  =  '2018' .
T_FCITEM -BUZEI  =  '0001' .
T_FCITEM -KUNNR  =  '0000100005' .
APPEND T_FCITEM .

T_FCITEM -BELNR  =  '0100001098' .
T_FCITEM -GJAHR  =  '2018' .
T_FCITEM -BUZEI  =  '0002' .
T_FCITEM -KUNNR  =  '0000100005' .
APPEND T_FCITEM .

I_HEADER -KOART  =  'D' .
APPEND I_HEADER .

LOOP  AT T_FCITEM .
   CLEAR :LV_BELNR .
  LV_BELNR  = T_FCITEM -BELNR && T_FCITEM -GJAHR && T_FCITEM -BUZEI .
*  LV_BELNR = T_FCITEM-BELNR.
   CASE I_HEADER -KOART .
     WHEN  'D' .  "客户
      POPULATE_FTCLEAR : T_FCITEM -KUNNR  'BELNR' LV_BELNR .
     WHEN  'K' .  "供应商
      POPULATE_FTCLEAR : T_FCITEM -LIFNR  'BELNR' LV_BELNR .
     WHEN  OTHERS .
   ENDCASE .
ENDLOOP .
**********************************************************************
*清账开始----采用剩余清帐
**********************************************************************
CALL  FUNCTION  'POSTING_INTERFACE_START'
   EXPORTING
    I_CLIENT            = SY -MANDT
    I_FUNCTION          =  'C'  "B (batch input processing) ,C (processing with Call Transaction .. Using..)
    I_KEEP              =  'X'  "用于已处理会话的队列删除标志.
    I_MODE              =  'A'     "I_MODE "A for step by step,N default,for background
    I_UPDATE            =  'S'  "同步
    I_USER              = SY -UNAME
   EXCEPTIONS
    CLIENT_INCORRECT    =  1
    FUNCTION_INVALID    =  2
    GROUP_NAME_MISSING  =  3
    MODE_INVALID        =  4
    UPDATE_INVALID      =  5
     OTHERS              =  6 .

CALL  FUNCTION  'POSTING_INTERFACE_CLEARING'
   EXPORTING
    I_AUGLV                     =  'UMBUCHNG'
    I_TCODE                     =  'FB05'    "只支持FB05
    I_SGFUNCT                   =  'C'
   IMPORTING
    E_MSGID                     = LS_SYST -MSGID
    E_MSGNO                     = LS_SYST -MSGNO
    E_MSGTY                     = LS_SYST -MSGTY
    E_MSGV1                     = LS_SYST -MSGV1
    E_MSGV2                     = LS_SYST -MSGV2
    E_MSGV3                     = LS_SYST -MSGV3
    E_MSGV4                     = LS_SYST -MSGV4
   TABLES
    T_BLNTAB                    = LT_BLNTAB
    T_FTCLEAR                   = LT_FTCLEAR
    T_FTPOST                    = LT_FTPOST
    T_FTTAX                     = LT_FTTAX
   EXCEPTIONS
    CLEARING_PROCEDURE_INVALID  =  1
    CLEARING_PROCEDURE_MISSING  =  2
    TABLE_T041A_EMPTY           =  3
    TRANSACTION_CODE_INVALID    =  4
    AMOUNT_FORMAT_ERROR         =  5
    TOO_MANY_LINE_ITEMS         =  6
    COMPANY_CODE_INVALID        =  7
    SCREEN_NOT_FOUND            =  8
    NO_AUTHORIZATION            =  9
     OTHERS                      =  10 .
*  IF sy-subrc = 0. "判断不准
IF LS_SYST -MSGTY  CA  'AEX' .
  E_MESSAGE - TYPE     =  'E' .
   MESSAGE  ID LS_SYST -MSGID  TYPE LS_SYST -MSGTY  NUMBER LS_SYST -MSGNO   WITH LS_SYST -MSGV1 LS_SYST -MSGV2 LS_SYST -MSGV3 LS_SYST -MSGV4  INTO E_MESSAGE - MESSAGE .
ELSE  .
  E_MESSAGE - TYPE     =  'S' .
  E_MESSAGE - MESSAGE  =  '过账并清账成功!' .

   READ  TABLE LT_BLNTAB  INDEX  1 .
   IF SY -SUBRC  =  0 .
    E_BELNR  = LT_BLNTAB -BELNR .
    E_BUKRS  = LT_BLNTAB -BUKRS .
    E_GJAHR  = LT_BLNTAB -GJAHR .
   ENDIF .
ENDIF .

"清账结束
CALL  FUNCTION  'POSTING_INTERFACE_END'
   EXCEPTIONS
    SESSION_NOT_PROCESSABLE  =  1
     OTHERS                   =  2 .

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9859323/viewspace-2703648/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-09-27

  • 博文量
    42
  • 访问量
    117063