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'  'BKPF-BUKRS'  '1010' , "公司代码
                  'K'  'BKPF-BLART'  'Z3' "凭证类型
                  'K'  'BKPF-BLDAT' LV_DATUM ,        "凭证日期
                  'K'  'BKPF-BUDAT' LV_DATUM ,        "过帐日期
                  'K'  'BKPF-MONAT' LV_MONAT ,        "过帐期间
                  'K'  'BKPF-WAERS'  'CNY' ,
                  'K'  'BKPF-XBLNR'  '' ,
                  'K'  '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博客 ” ,链接:http://blog.itpub.net/9859323/viewspace-2703648/,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2009-09-27

  • 博文量
    39
  • 访问量
    98561