ITPub博客

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

SAP内部清账函数测试二

原创 ERP 作者:zhaoshuhong 时间:2020-07-10 14:51:46 0 删除 编辑

在先行者测试的基础上修改,非等额清账。

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 ,
        SGTXT  TYPE BSEG -SGTXT ,
       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_FPITEM -BSCHL  '14' . "记账码为清账凭证的后台设置
T_FPITEM -HKONT  '100005' .
T_FPITEM -GSBER  '1010' .
T_FPITEM -WRBTR  '16' .
*T_FPITEM-RSTGR = ''.
T_FPITEM -SGTXT  'TEST' .
APPEND T_FPITEM .
*
LOOP  AT T_FPITEM .
  LV_POSNR  SY -TABIX .
  LV_WRBTR  ABS T_FPITEM -WRBTR  ) "必须都是正值
   CONDENSE LV_WRBTR .
  POPULATE_FTPOST : 'P' LV_POSNR  'RF05A-NEWBS' T_FPITEM -BSCHL ,   "记账码
                   'P' LV_POSNR  'RF05A-NEWKO' T_FPITEM -HKONT ,   "记账科目
                   'P' LV_POSNR  'COBL-GSBER'  T_FPITEM -GSBER "业务范围
                   'P' LV_POSNR  'BSEG-WRBTR'  LV_WRBTR ,         "金额
*                  'P' LV_POSNR 'BSEG-RSTGR'  T_FPITEM-RSTGR,  "原因代码
                   'P' LV_POSNR  'BSEG-SGTXT'  T_FPITEM -SGTXT .   "行项目文本

ENDLOOP .
**********************************************************************
*清账凭证
**********************************************************************
T_FCITEM -BELNR  '0100001102' .   "注意不足10位补前导零
T_FCITEM -GJAHR  '2018' .
T_FCITEM -BUZEI  '0002' .         "注意前导零
T_FCITEM -KUNNR  '0000100005' .
APPEND T_FCITEM .

T_FCITEM -BELNR  '0090000096' .
T_FCITEM -GJAHR  '2018' .
T_FCITEM -BUZEI  '0001' .
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,正式用N
    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-2703749/,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2009-09-27

  • 博文量
    35
  • 访问量
    93760