FI-批量更新会计凭证分配字段程序(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZFIR122
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-03-13
*& Program Type        :  Report
*& Description         :  分配字段自动更正
*&---------------------------------------------------------------------*
REPORT ZFIR124.

*&---------------------------------------------------------------------*
*& 包含               ZFIR092_TOP
*&---------------------------------------------------------------------*

TABLES:ACDOCA,BKPF,EKKN,VBAP.

TYPE-POOLS:SLIS.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATAGT_RETURN   LIKE BAPIRET2 OCCURS WITH HEADER LINE.
DATAU_BUDAT     TYPE BUDAT.
DATAN_BUDAT     TYPE BUDAT.
DATAY_BUDAT     TYPE BUDAT.
DATAP_BUDAT     TYPE ACDOCA-BUDAT.

TYPESBEGIN OF GTS_DATA,

        RBUKRS       TYPE  ACDOCA-RBUKRS,            "公司代码
        GJAHR        TYPE  ACDOCA-GJAHR,             "财年
        BUDAT        TYPE  ACDOCA-BUDAT,             "过帐日期

        BELNR        TYPE  ACDOCA-BELNR,             "会计凭证号码
        AWITEM       TYPE  ACDOCA-AWITEM,            "参考凭证行项目
        AWTYP        TYPE  ACDOCA-AWTYP,             "参考过程
        AWREF        TYPE  ACDOCA-AWREF,             "参考凭证号
        AWORG        TYPE  ACDOCA-AWORG,             "参考组织单位
        BUZEI        TYPE  ACDOCA-BUZEI,             "会计凭证中的行项目数
        ZUONR        TYPE  ACDOCA-ZUONR,             "分配编号
        NEWVAL       TYPE  ACDOCA-ZUONR,             "新分配编号

        VBELN_IM     TYPE  MSEG-VBELN_IM,            "交货
        VBELP_IM     TYPE  MSEG-VBELP_IM,            "项目
        VGBEL        TYPE  VBRP-VGBEL,               "交货
        VGPOS        TYPE  VBRP-VGPOS,               "项目

        GV_ACCCHG    TYPE  ACCCHG,                   "更改 FI 凭证

      END OF GTS_DATA.

DATAGLAG_N    TYPE  C  .
DATAGLAG_E    TYPE  C  .
DATAGT_DATA   TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATAGS_DATA   TYPE GTS_DATA .
DATAGT_REVERSAL TYPE TABLE OF BAPIACREV WITH HEADER LINE.
DATAGT_ZTFI122  TYPE TABLE OF ZTFI122 WITH HEADER LINE.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS:
            P_BUKRS LIKE ACDOCA-RBUKRS MODIF ID C1 OBLIGATORY .              "公司代码
SELECT-OPTIONS:
            S_BUDAT FOR ACDOCA-BUDAT  MODIF ID C1 OBLIGATORY .               "过帐日期
PARAMETERSP_OLD   TYPE C  AS CHECKBOX.                                     "后台模式
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& 包含               ZFIR101_CLASS
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*       CLASS DEMO DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS DEMO DEFINITION.
  PUBLIC SECTION.
    CLASS-METHODS:
      MAIN.
ENDCLASS.

CLASS DEMO IMPLEMENTATION.
  METHOD MAIN.
    DATA(OUT) = CL_DEMO_OUTPUT=>NEW( ).

    OUT->BEGIN_SECTION`报错信息回执`
      )->WRITEGT_RETURN[] ).

    OUT->DISPLAY( ).
  ENDMETHOD.
ENDCLASS.
*&---------------------------------------------------------------------*
*& 包含               ZFIR092_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FRM_EXCLUDE_OPTION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FRM_EXCLUDE_OPTION .

ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_OUTPUT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_OUTPUT .
  LOOP AT SCREEN.
    CASE SCREEN-GROUP1.
      WHEN 'M1'.
        SCREEN-INPUT '0'.
    ENDCASE.
    MODIFY SCREEN.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
 AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
  ID 'BUKRS' FIELD P_BUKRS.
  IF SY-SUBRC <> 0.
    MESSAGE '您没有公司:'&& P_BUKRS && '  的权限!TYPE 'E' .
  ENDIF.

*  MESSAGE I000(0K) WITH TEXT-115 SPACE SPACE SPACE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .

**取所选期间次月的第一天
    N_BUDAT P_BUDAT + .

    CLEAR GT_DATA[] .
    SELECT
      ACDOCA~RBUKRS
      ACDOCA
~GJAHR
      ACDOCA
~BUDAT
      ACDOCA
~BELNR
      ACDOCA
~AWITEM
      ACDOCA
~AWTYP
      ACDOCA
~AWREF
      ACDOCA
~AWORG
      ACDOCA
~BUZEI
      ACDOCA
~ZUONR
     
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
      
FROM ACDOCA
        
WHERE ACDOCA~RBUKRS P_BUKRS
          
AND ACDOCA~AWTYP  IN 'MKPF' 'VBRK' )
          AND ACDOCA~RACCT LIKE '6401%'
           OR   ACDOCA~RACCT LIKE '6402%'
           OR   ACDOCA~RACCT LIKE '6001%'
           OR   ACDOCA~RACCT LIKE '6051%'
           OR   ACDOCA~RACCT LIKE '1406%' )
          AND ACDOCA~BUDAT IN S_BUDAT
          
.

    LOOP AT GT_DATA  .

      CASE GT_DATA-AWTYP .
        WHEN 'MKPF'.

          SELECT SINGLE
            VBELN_IM VBELP_IM INTO CORRESPONDING FIELDS OF GT_DATA
            
FROM MSEG
            
WHERE MBLNR GT_DATA-AWREF
              
AND ZEILE GT_DATA-AWITEM
              
.

          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  GT_DATA-VBELN_IM
            
IMPORTING
              OUTPUT GT_DATA-VBELN_IM.

          GT_DATA-NEWVAL GT_DATA-VBELN_IM && GT_DATA-VBELP_IM .

        WHEN 'VBRK'.

          SELECT SINGLE
            VGBEL VGPOS INTO CORRESPONDING FIELDS OF GT_DATA
            
FROM VBRP
            
WHERE VBELN GT_DATA-AWREF
              
AND POSNR GT_DATA-AWITEM
              
.

          CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
            EXPORTING
              INPUT  GT_DATA-VGBEL
            
IMPORTING
              OUTPUT GT_DATA-VGBEL.

          GT_DATA-NEWVAL GT_DATA-VGBEL && GT_DATA-VGPOS .

        WHEN OTHERS.
      ENDCASE.

*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*        EXPORTING
*          INPUT  = GT_DATA-ZUONR
*        IMPORTING
*          OUTPUT = GT_DATA-ZUONR.

*      CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
*        EXPORTING
*          INPUT  = GT_DATA-NEWVAL
*        IMPORTING
*          OUTPUT = GT_DATA-NEWVAL.

      IF GT_DATA-ZUONR GT_DATA-NEWVAL.
        DELETE GT_DATA .
      ELSE .
        GT_DATA-GV_ACCCHG-FDNAME 'ZUONR'.
        GT_DATA-GV_ACCCHG-NEWVAL GT_DATA-NEWVAL.
        MODIFY GT_DATA .
      ENDIF.

      CLEAR GT_DATA .
    ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT                S_LAYOUT
      IT_FIELDCAT              
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
*     i_callback_html_top_of_page = 'HTML_TOP_OF_PAGE'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_DATA[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    wa_fieldcat-fieldname &1.
    wa_fieldcat-seltext_l &2.
*    IF wa_fieldcat-fieldname =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.
*      wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.
*
*    IF wa_fieldcat-fieldname =  'MSLMB' or wa_fieldcat-fieldname =  'WCBMB'.
*      wa_fieldcat-EMPHASIZE = 'C710'. "设置字段的颜色
*    ENDIF.

    IF wa_fieldcat-fieldname 'PLNBEZ' OR wa_fieldcat-fieldname 'MATNR' .
      wa_fieldcat-ref_tabname 'MARA'.
      wa_fieldcat-ref_fieldname 'MATNR'.
    ENDIF.

    IF wa_fieldcat-fieldname 'ARKTX' OR wa_fieldcat-fieldname 'WAKTX' .
      wa_fieldcat-ref_tabname 'VBAP'.
      wa_fieldcat-ref_fieldname 'ARKTX'.
    ENDIF.

    IF wa_fieldcat-fieldname 'AUFNR' .
      wa_fieldcat-ref_tabname 'AUFK'.
      wa_fieldcat-ref_fieldname 'AUFNR'.
    ENDIF.

    APPEND wa_fieldcat TO gt_fieldcat.
    CLEAR wa_fieldcat.
  END-OF-DEFINITION.
  FILL_FIELD :
        'RBUKRS'         '公司代码',
        'GJAHR'          '财年',
        'BUDAT'          '过帐日期',
        'BELNR'          '会计凭证',
        'BUZEI'          '行项目',
*        'AWTYP'          '参考过程',
        'AWREF'          '参考凭证号',
        'AWITEM'         '参考凭证行项目',
*        'AWORG'          '参考组织单位',

        'ZUONR'          '分配编号',
        'NEWVAL'         '新分配编号'.

ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATA:   REF TYPE REF TO CL_GUI_ALV_GRID.
  DATA :  LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:   L_BUKRS TYPE T001K-BUKRS.

  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN 'POST_T'.
      CLEAR GT_RETURN[] .
      PERFORM FRM_DATA_POST_T .
      LOOP AT GT_RETURN WHERE TYPE 'E'.
      ENDLOOP.
      IF SY-SUBRC 0.
        DEMO=>MAIN( ).
      ELSE .
        MESSAGE '操作成功!TYPE 'S' .
      ENDIF.

  ENDCASE.

  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST_T
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST_T .
  DATA:
    LT_RETURN          LIKE BAPIRET2 OCCURS WITH HEADER LINE,
    GST_RETURN         LIKE BAPIRET2 OCCURS WITH HEADER LINE,
    GT_ACCCHG          TYPE TABLE OF ACCCHG   WITH HEADER LINE.

  CLEAR GST_RETURN[] .
  LOOP AT GT_DATA.
    CLEAR GT_ACCCHG[] .
    GT_ACCCHG-FDNAME GT_DATA-GV_ACCCHG-FDNAME.
    GT_ACCCHG-NEWVAL GT_DATA-GV_ACCCHG-NEWVAL.
    APPEND GT_ACCCHG.

    CALL FUNCTION 'FI_DOCUMENT_CHANGE'
      EXPORTING
        I_AWTYP GT_DATA-AWTYP   "参考过程
        I_AWREF GT_DATA-AWREF   "参考凭证号
        I_AWORG GT_DATA-AWORG   "参考组织
        I_BUZEI GT_DATA-BUZEI   "参考行项目
      TABLES
        T_ACCCHG GT_ACCCHG
      
EXCEPTIONS
        NO_REFERENCE         1
        NO_DOCUMENT          2
        MANY_DOCUMENTS       3
        WRONG_INPUT          4
        OVERWRITE_CREDITCARD 5
        OTHERS               6.


      IF SY-SUBRC <> 0.
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            MSGID               SY-MSGID
            MSGNR               
SY-MSGNO
            MSGV1               
SY-MSGV1
            MSGV2               
SY-MSGV2
            MSGV3               
SY-MSGV3
            MSGV4               
SY-MSGV4
          
IMPORTING
            MESSAGE_TEXT_OUTPUT LT_RETURN-MESSAGE.
            LT_RETURN-TYPE 'E'.
*        EXIT.
      ELSE .
        COMMIT WORK.
      ENDIF.

    APPEND LT_RETURN TO GST_RETURN .
    CLEAR LT_RETURN .
    CLEAR GT_DATA .
  ENDLOOP.

  SORT GST_RETURN[] BY MESSAGE .
  DELETE ADJACENT DUPLICATES FROM GST_RETURN[] COMPARING MESSAGE.

  LOOP AT GST_RETURN.
    GST_RETURN-MESSAGE '分配编号替换失败!: ' && GST_RETURN-MESSAGE .
    APPEND GST_RETURN TO GT_RETURN .
    CLEAR  GST_RETURN .
  ENDLOOP.

ENDFORM.

INITIALIZATION.
  PERFORM FRM_EXCLUDE_OPTION.

AT SELECTION-SCREEN OUTPUT.
  PERFORM SCREEN_OUTPUT.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
CASE P_OLD.
  WHEN 'X'.
    CLEAR S_BUDAT[] .
    S_BUDAT-SIGN 'I' .
    S_BUDAT-OPTION 'EQ' .
    S_BUDAT-LOW SY-DATUM .
    CLEAR S_BUDAT-HIGH  .
    APPEND S_BUDAT .

    PERFORM FOM_GETDATA.
    PERFORM FRM_DATA_POST_T.
    MESSAGE '操作成功!TYPE 'S' .
  WHEN OTHERS.
    PERFORM FOM_GETDATA.
    PERFORM FRM_DISPLAY.
ENDCASE.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值