*&---------------------------------------------------------------------*
*& 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输出所需变量
DATA: S_LAYOUT TYPE SLIS_LAYOUT_ALV,
GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
DATA: U_BUDAT TYPE BUDAT.
DATA: N_BUDAT TYPE BUDAT.
DATA: Y_BUDAT TYPE BUDAT.
DATA: P_BUDAT TYPE ACDOCA-BUDAT.
TYPES: BEGIN 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.
DATA: GLAG_N TYPE C .
DATA: GLAG_E TYPE C .
DATA: GT_DATA TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_A TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GS_DATA TYPE GTS_DATA .
DATA: GT_REVERSAL TYPE TABLE OF BAPIACREV WITH HEADER LINE.
DATA: GT_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 . "过帐日期
PARAMETERS: P_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( `报错信息回执`
)->WRITE( GT_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 + 1 .
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. "刷新稳定性
RANGES: L_WERKS FOR T001W-WERKS.
RANGES: L_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 0 WITH HEADER LINE,
GST_RETURN LIKE BAPIRET2 OCCURS 0 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.
FI-批量更新会计凭证分配字段程序(开发笔记)
最新推荐文章于 2024-06-12 15:18:26 发布