*&---------------------------------------------------------------------*
*& Report ZFIR099
*&---------------------------------------------------------------------*
*& Author : NathanSun
*& Create Date : 2018-12-03
*& Program Type : Report
*& Description : 销项税调整
*&---------------------------------------------------------------------*
REPORT ZFIR099.
*&---------------------------------------------------------------------*
*& 包含 ZFIR092_TOP
*&---------------------------------------------------------------------*
TABLES:ACDOCA,BKPF,EKKN,VBAP,KNA1,VBAK.
TYPE-POOLS:SLIS ,ICON .
"OOALV-DEFINITION
DATA GO_ALV_GRID TYPE REF TO CL_GUI_ALV_GRID.
DATA GO_ALV_GRID_SUB TYPE REF TO CL_GUI_ALV_GRID.
DATA LO_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA OK_CODE TYPE SY-UCOMM.
DATA OK_SAVE TYPE SY-UCOMM.
DATA CONTROLS_CREATED.
DATA GT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF GTS_DATA,
AFLAG TYPE C, "选择列
BUKRS_VF TYPE VBAK-BUKRS_VF, "公司代码
KUNNR TYPE VBAK-KUNNR, "客户
VBELN TYPE VBAK-VBELN, "销售订单
WAERK TYPE VBAK-WAERK, "销售和分销凭证货币
DMKPX TYPE BSEG-DMBTR, "开票销项税
DMYSX TYPE BSEG-DMBTR, "预收销项税
SAKXX TYPE SKA1-SAKNR, "销项税科目
SAKQT TYPE SKA1-SAKNR, "其他应收科目
DMBTR TYPE BSEG-DMBTR, "调整税额
GZDAT TYPE DATS, "过账日期
GJAHR TYPE GJAHR, "会计年度
ZKJQJ TYPE NUMC2, "期间
BELNR TYPE ACDOCA-BELNR, "会计凭证号码
AWKEY TYPE AWKEY, "对象键值
VBELN_FV TYPE BSEG-KIDNO, "开票凭证
BUKRS TYPE BSEG-BUKRS, "公司代码
BELBS TYPE BSEG-BELNR, "会计凭证号码
GJABS TYPE BSEG-GJAHR, "财年
BUZEI TYPE BSEG-BUZEI, "会计凭证中的行项目数
DMBBB TYPE BSEG-DMBTR, "本币金额
SHKZG TYPE BSEG-SHKZG, "借贷标志
KIDNO TYPE BSEG-KIDNO, "开票凭证
SGTXT TYPE BSEG-SGTXT, "项目文本
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: GT_DATA_B TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_DATA_C TYPE TABLE OF GTS_DATA WITH HEADER LINE.
DATA: GT_ZTIR098 TYPE TABLE OF ZTIR098 WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME .
PARAMETERS: P_BUKRS LIKE ACDOCA-RBUKRS MODIF ID P1 OBLIGATORY . "公司代码
SELECT-OPTIONS: S_KUNNR FOR KNA1-KUNNR MODIF ID S1, "客户
S_VBELN FOR VBAK-VBELN MODIF ID S1. "销售订单
SELECTION-SCREEN END OF BLOCK B1.
*BUKRS BUKRS
*BELNR BELNR_D
*GJAHR GJAHR
*BUZEI BUZEI
*&---------------------------------------------------------------------*
*& 包含 ZFIR098_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.
*----------------------------------------------------------------------*
* CLASS cl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
" 声明单击事件的方法
METHODS HANDLE_HOTSPOT_CLICK
FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW_ID E_COLUMN_ID.
" 声明双击事件方法
METHODS HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW E_COLUMN.
" 声明TOOLBAR事件方法
METHODS HANDLE_TOOLBAR
FOR EVENT TOOLBAR OF CL_GUI_ALV_GRID
IMPORTING E_OBJECT E_INTERACTIVE.
" 声明USER-COMMAND 事件方法
METHODS HANDLE_COMMAND
FOR EVENT USER_COMMAND OF CL_GUI_ALV_GRID
IMPORTING E_UCOMM.
" 修改时触发
METHODS HANDLE_DATA_CHANGED
FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID
IMPORTING ER_DATA_CHANGED.
" ENTE时触发
METHODS HANDLE_ENTE
FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
IMPORTING E_MODIFIED ET_GOOD_CELLS.
PRIVATE SECTION.
ENDCLASS. "CL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS cl_event_receiver IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
" 单击事件方法的实现
METHOD HANDLE_HOTSPOT_CLICK.
ENDMETHOD. "HANDLE_HOTSPOT_CLICK
" 双击事件方法的实现
METHOD HANDLE_DOUBLE_CLICK.
GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).
ENDMETHOD. "HANDLE_DOUBLE_CLICK
" 实现TOOLBAR事件方法
METHOD HANDLE_TOOLBAR.
DATA: LS_TOOLBAR TYPE STB_BUTTON.
DELETE E_OBJECT->MT_TOOLBAR WHERE FUNCTION = '&PRINT_BACK'.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-BUTN_TYPE = 3. " 分隔符
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_4'. "功能码
* LS_TOOLBAR-ICON = ICON_SIMULATE. " 图标名称
LS_TOOLBAR-TEXT = '全选'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '全选'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_5'. "功能码
* LS_TOOLBAR-ICON = ICON_ACTIVITY. " 图标名称
LS_TOOLBAR-TEXT = '取消全选'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '取消全选'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
* CLEAR: LS_TOOLBAR.
* LS_TOOLBAR-FUNCTION = 'BT_3'. "功能码
** LS_TOOLBAR-ICON = ICON_ACTIVITY. " 图标名称
* LS_TOOLBAR-TEXT = '自动计算销项税'. " 按钮上显示的文本
* LS_TOOLBAR-QUICKINFO = '自动计算销项税'. " 图标的提示信息
* LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
* LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
* APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_1'. "功能码
LS_TOOLBAR-ICON = ICON_SIMULATE. " 图标名称
LS_TOOLBAR-TEXT = '模拟过账'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '模拟过账'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
CLEAR: LS_TOOLBAR.
LS_TOOLBAR-FUNCTION = 'BT_2'. "功能码
LS_TOOLBAR-ICON = ICON_ACTIVITY. " 图标名称
LS_TOOLBAR-TEXT = '正式过账'. " 按钮上显示的文本
LS_TOOLBAR-QUICKINFO = '正式过账'. " 图标的提示信息
LS_TOOLBAR-BUTN_TYPE = 0. " 0表示正常按钮
LS_TOOLBAR-DISABLED = ''. " X表示灰色,不可用
APPEND LS_TOOLBAR TO E_OBJECT->MT_TOOLBAR.
ENDMETHOD. "HANDLE_TOOLBAR
" 实现USER-COMMAND 事件方法
METHOD HANDLE_COMMAND.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
CASE E_UCOMM.
WHEN 'BT_1'.
CLEAR GT_RETURN[] .
PERFORM FRM_DATA_POST_T .
WHEN 'BT_2'.
IF GT_DATA_C[] IS NOT INITIAL .
CLEAR GT_RETURN[] .
PERFORM FRM_DATA_POST .
ELSEIF GLAG_N IS NOT INITIAL .
MESSAGE '模拟过账时出错!' TYPE 'S' DISPLAY LIKE 'E' .
ELSE .
MESSAGE '请先进行模拟过账!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
* WHEN 'BT_3'.
WHEN 'BT_4'.
PERFORM FRM_SELECT_ALL .
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
WHEN 'BT_5'.
PERFORM FRM_UNSELECT_ALL .
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
WHEN OTHERS.
ENDCASE.
ENDMETHOD. "HANDLE_COMMAND
" 实现DATA_CHANGED 事件方法
METHOD HANDLE_DATA_CHANGED.
ENDMETHOD. "handle_data_changed
" 实现ENTE 事件方法
METHOD HANDLE_ENTE.
DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
* GO_ALV_GRID_SUB->REFRESH_TABLE_DISPLAY( ).
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
PERFORM FOM_REFRESH .
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
GS_LAYOUT_ALV-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT_ALV.
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = GO_ALV_GRID.
CALL METHOD CL_GUI_CFW=>FLUSH.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "cl_event_receiver IMPLEMENTATION
**------------------------------------------------------------------------------*
** 类定义-定时刷新 *
**------------------------------------------------------------------------------*
*CLASS LCL_RECEIVER DEFINITION.
* PUBLIC SECTION.
* METHODS:
* HANDLE_FINISHED FOR EVENT FINISHED OF CL_GUI_TIMER.
*ENDCLASS.
* DATA: RECEIVER TYPE REF TO LCL_RECEIVER,
* TIMER TYPE REF TO CL_GUI_TIMER.
*CLASS LCL_RECEIVER IMPLEMENTATION.
* METHOD HANDLE_FINISHED.
** PERFORM FOM_REFRESH .
* CALL METHOD CL_GUI_CFW=>SET_NEW_OK_CODE "触发pai ,usercommand里有刷新alv的代码
* EXPORTING
* NEW_CODE = 'REFRESH'.
** MESSAGE ID 'MO' TYPE 'S' NUMBER 429 .
* CALL METHOD TIMER->RUN.
* ENDMETHOD.
*ENDCLASS.
*
*CREATE OBJECT TIMER.
*CREATE OBJECT RECEIVER.
*SET HANDLER RECEIVER->HANDLE_FINISHED FOR TIMER.
*TIMER->INTERVAL = 600. "10分钟刷新一次
*CALL METHOD TIMER->RUN.
*
*PERFORM P_DISPLAY.
*
*CALL METHOD TIMER->RUN.
**------------------------------------------------------------------------------*
** 类定义-定时刷新 *
**------------------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'PF_0100'.
SET TITLEBAR 'TITLE_0100'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CREATE_ALV OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE CREATE_ALV OUTPUT.
CHECK CONTROLS_CREATED IS INITIAL.
CALL METHOD CL_GUI_CFW=>FLUSH."触发SAP GUI更新界面
PERFORM FORM_INIT_0101. "实例化ALV_GRID
CONTROLS_CREATED = 'X'.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CANCEL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
LEAVE PROGRAM .
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
OK_SAVE = SY-UCOMM .
CLEAR SY-UCOMM .
CLEAR OK_CODE .
CASE OK_SAVE.
WHEN 'BACK' .
LEAVE TO SCREEN 0 .
* WHEN 'DL' .
* PERFORM ole_fom .
WHEN OTHERS .
ENDCASE .
ENDMODULE.
*&---------------------------------------------------------------------*
*& 包含 ZFIR098_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 .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
*根据,屏幕条件、拒绝状态(ABSTK)不等于C、ZYSBS等于A,取VBAK表相关数据,
*再根据VBRP-AUBEL = 销售订单,查找开票凭证(VBRP-VBELN),删除找不到的的销售订单数据,将找到的开票凭证(VBRP-VBELN)
*再去找BSEG中的数据:BSEG-KIDNO = 开票凭证,BSEG-HKONT=2221010300,取本币金额(BSEG-DMBTR),借贷标志(BSEG-SHKZG),
*如果借贷标志等于H,对本币金额取负数后再汇总,汇总的本币金额为开票销项税。
CLEAR GT_DATA[] .
SELECT
VBAK~BUKRS_VF
VBAK~KUNNR
VBAK~VBELN
VBAK~WAERK
VBRP~VBELN AS VBELN_FV
INTO CORRESPONDING FIELDS OF TABLE GT_DATA[]
FROM VBAK
INNER JOIN VBRP ON VBAK~VBELN = VBRP~AUBEL
WHERE VBAK~BUKRS_VF = P_BUKRS
AND VBAK~KUNNR IN S_KUNNR
AND VBAK~VBELN IN S_VBELN
AND VBAK~ABSTK <> 'C'
AND VBAK~ZYSBS = 'A'
AND VBRP~VBELN <> ''
.
LOOP AT GT_DATA.
GT_DATA-SAKXX = '2221010300'.
GT_DATA-SAKQT = '1221090000'.
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
*DATA: GT_DATA_B TYPE TABLE OF GTS_DATA WITH HEADER LINE.
IF GT_DATA[] IS NOT INITIAL .
CLEAR GT_DATA_B[].
SELECT
BSEG~BUKRS
BSEG~BELNR AS BELBS
BSEG~GJAHR AS GJABS
BSEG~BUZEI
BSEG~DMBTR AS DMBBB
BSEG~SHKZG
BSEG~KIDNO AS VBELN_FV
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_B[]
FROM BSEG
FOR ALL ENTRIES IN GT_DATA[]
WHERE BSEG~KIDNO = GT_DATA-VBELN_FV
AND BSEG~HKONT = '2221010300'
.
LOOP AT GT_DATA_B.
READ TABLE GT_DATA WITH KEY VBELN_FV = GT_DATA_B-VBELN_FV .
IF SY-SUBRC = 0.
GT_DATA_B-BUKRS_VF = GT_DATA-BUKRS_VF .
GT_DATA_B-KUNNR = GT_DATA-KUNNR .
GT_DATA_B-VBELN = GT_DATA-VBELN .
GT_DATA_B-WAERK = GT_DATA-WAERK .
GT_DATA_B-SAKXX = GT_DATA-SAKXX .
GT_DATA_B-SAKQT = GT_DATA-SAKQT .
ENDIF.
MODIFY GT_DATA_B.
CLEAR GT_DATA_B.
ENDLOOP.
GT_DATA[] = GT_DATA_B[] .
SORT GT_DATA[] BY BUKRS_VF KUNNR SAKXX SAKQT VBELN .
DELETE ADJACENT DUPLICATES FROM GT_DATA[] COMPARING BUKRS_VF KUNNR SAKXX SAKQT VBELN.
LOOP AT GT_DATA.
CLEAR GT_DATA-DMKPX.
CLEAR GT_DATA-DMBBB.
LOOP AT GT_DATA_B WHERE KUNNR = GT_DATA-KUNNR AND SAKXX = GT_DATA-SAKXX
AND SAKQT = GT_DATA-SAKQT AND VBELN = GT_DATA-VBELN
AND BUKRS_VF = GT_DATA-BUKRS_VF.
IF GT_DATA_B-SHKZG = 'H'.
GT_DATA_B-DMBBB = GT_DATA_B-DMBBB * -1 .
ENDIF.
GT_DATA-DMKPX = GT_DATA-DMKPX + GT_DATA_B-DMBBB .
CLEAR GT_DATA_B .
ENDLOOP.
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
*预收销项税(BSEG-DMBTR):
*根据公司代码、BSEG-VBEL2 = 销售订单、BSEG-HKONT=2221010300,BSEG-SGTXT =预收开票开头,
*取本币金额(BSEG-DMBTR),借贷标志(BSEG-SHKZG),如果借贷标志等于H,对本币金额取负数后再汇总,
*汇总的本币金额为预收销项税。如果预收销项税为0,则删除该条目。
CLEAR GT_DATA_B[].
SELECT
BSEG~BUKRS
BSEG~BELNR AS BELBS
BSEG~GJAHR AS GJABS
BSEG~BUZEI
BSEG~DMBTR AS DMBBB
BSEG~SHKZG
BSEG~KIDNO AS VBELN_FV
BSEG~SGTXT
BSEG~VBEL2 AS VBELN
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_B[]
FROM BSEG
FOR ALL ENTRIES IN GT_DATA[]
WHERE BSEG~VBEL2 = GT_DATA-VBELN
AND BSEG~HKONT = '2221010300'
.
LOOP AT GT_DATA_B.
IF GT_DATA_B-SGTXT CS '预收开票' .
ELSE .
DELETE GT_DATA_B .
ENDIF.
CLEAR GT_DATA_B .
ENDLOOP.
LOOP AT GT_DATA_B.
READ TABLE GT_DATA WITH KEY VBELN = GT_DATA_B-VBELN .
IF SY-SUBRC = 0.
GT_DATA_B-BUKRS_VF = GT_DATA-BUKRS_VF .
GT_DATA_B-KUNNR = GT_DATA-KUNNR .
GT_DATA_B-WAERK = GT_DATA-WAERK .
GT_DATA_B-SAKXX = GT_DATA-SAKXX .
GT_DATA_B-SAKQT = GT_DATA-SAKQT .
ENDIF.
MODIFY GT_DATA_B.
CLEAR GT_DATA_B.
ENDLOOP.
LOOP AT GT_DATA.
CLEAR GT_DATA-DMYSX.
CLEAR GT_DATA-DMBBB.
LOOP AT GT_DATA_B WHERE KUNNR = GT_DATA-KUNNR AND SAKXX = GT_DATA-SAKXX
AND SAKQT = GT_DATA-SAKQT AND VBELN = GT_DATA-VBELN
AND BUKRS_VF = GT_DATA-BUKRS_VF.
IF GT_DATA_B-SHKZG = 'H'.
GT_DATA_B-DMBBB = GT_DATA_B-DMBBB * -1 .
ENDIF.
GT_DATA-DMYSX = GT_DATA-DMKPX + GT_DATA_B-DMBBB .
CLEAR GT_DATA_B .
ENDLOOP.
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
* DELETE GT_DATA[] WHERE DMYSX IS INITIAL .
* LOOP AT GT_DATA.
* IF ABS(GT_DATA-DMKPX) < ABS(GT_DATA-DMYSX).
* GT_DATA-DMBTR = ABS(GT_DATA-DMKPX).
* ELSE .
* GT_DATA-DMBTR = ABS(GT_DATA-DMYSX).
* ENDIF.
* MODIFY GT_DATA.
* CLEAR GT_DATA.
* ENDLOOP.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FORM_INIT_0101
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FORM_INIT_0101 .
DATA L_FCAT_CACHE TYPE LVC_T_FCAT.
DATA WA_LAYOUT_CACHE TYPE LVC_S_LAYO.
DATA WA_FIELD TYPE LVC_S_FCAT.
DATA LO_EVENT TYPE REF TO CL_EVENT_RECEIVER.
CREATE OBJECT LO_CONTAINER
EXPORTING
CONTAINER_NAME = 'CONT01'.
CREATE OBJECT GO_ALV_GRID
EXPORTING
I_PARENT = LO_CONTAINER.
DEFINE FILL_FIELD.
wa_field-fieldname = &1.
wa_field-coltext = &2.
IF wa_field-fieldname = 'FSFNS'
OR wa_field-fieldname = 'AFLAG'
.
wa_field-checkbox = 'X'.
wa_field-edit = 'X'.
ENDIF.
IF wa_field-fieldname = 'DMBTR'
OR wa_field-fieldname = 'GZDAT'
.
wa_field-edit = 'X'.
ENDIF.
IF wa_field-fieldname = 'GZDAT'.
wa_field-ref_table = 'VBAK'.
wa_field-ref_field = 'ERDAT'.
ENDIF.
IF wa_field-fieldname = 'DMKPX'
or wa_field-fieldname = 'DMYSX'
or wa_field-fieldname = 'DMBTR'
.
wa_field-ref_table = 'BSEG'.
wa_field-ref_field = 'DMBTR'.
ENDIF.
APPEND wa_field TO l_fcat_cache .
CLEAR wa_field.
END-OF-DEFINITION.
FILL_FIELD :
'AFLAG' '选择',
'BUKRS_VF' '公司代码',
'KUNNR' '客户',
'VBELN' '销售订单',
'DMKPX' '开票销项税',
'DMYSX' '预收销项税',
'SAKXX' '销项税科目',
'SAKQT' '其他应收科目',
'DMBTR' '调整税额',
'GZDAT' '过账日期',
'GJAHR' '会计年度',
'ZKJQJ' '期间',
'BELNR' '会计凭证号码'.
* 设置enter事件
CALL METHOD GO_ALV_GRID->REGISTER_EDIT_EVENT
EXPORTING
I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
EXCEPTIONS
ERROR = 1
OTHERS = 2.
CREATE OBJECT LO_EVENT.
SET HANDLER LO_EVENT->HANDLE_TOOLBAR FOR GO_ALV_GRID.
SET HANDLER LO_EVENT->HANDLE_COMMAND FOR GO_ALV_GRID.
SET HANDLER LO_EVENT->HANDLE_ENTE FOR GO_ALV_GRID.
* SET HANDLER LO_EVENT->HANDLE_DATA_CHANGED FOR GO_ALV_GRID.
WA_LAYOUT_CACHE-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
IS_LAYOUT = WA_LAYOUT_CACHE
CHANGING
IT_FIELDCATALOG = L_FCAT_CACHE
IT_OUTTAB = GT_DATA[].
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_REFRESH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FOM_REFRESH .
LOOP AT GT_DATA.
GT_DATA-GJAHR = GT_DATA-GZDAT(4).
GT_DATA-ZKJQJ = GT_DATA-GZDAT+4(2).
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST_T
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST_T .
DATA:
TEMP_MONTH(2), "输入月份
HEADER_TXT(25), "取会计年月+固定文本“制费及研发费分摊”
TEMP_AUT_MSG(30),
LAST_DATA LIKE SY-DATUM, "一个月的最后一天
TEMP_OBJ_KEY TYPE AWKEY, "是否生成
HEADER LIKE BAPIACHE09 OCCURS 0 WITH HEADER LINE,
WA_ACCOUNTGL LIKE BAPIACGL09 OCCURS 0 WITH HEADER LINE,
LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09,
WA_CURRENCY_AMOUNT LIKE BAPIACCR09 OCCURS 0 WITH HEADER LINE,
LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09 WITH HEADER LINE,
IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,
LT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
GST_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LS_ZFI002 TYPE ZFI002,
FT_FLAG , "= ‘X'表示分摊过
LV_ANSWER(1),
TEMP_BWTAR_AUFNR LIKE AFPO-AUFNR.
DATA: GS_EXTENSION2 TYPE ZSFI_EXTEN, "会计凭证过账增强extension2
LT_EXTENSION2 TYPE TABLE OF BAPIPAREX WITH HEADER LINE. "返回参数
DATA: LV_OBJ_TYPE LIKE BAPIACHE09-OBJ_TYPE,
LV_OBJ_KEY LIKE BAPIACHE09-OBJ_KEY,
LV_OBJ_SYS LIKE BAPIACHE09-OBJ_SYS.
DATA: LV_DMBTR TYPE BAPIWRBTR,
LV_LINES TYPE SY-TABIX,
ZCOUNT TYPE SY-TABIX,
LV_WRBTR TYPE BSEG-WRBTR,
DO_POST TYPE CHAR1,
LS_EXTEN TYPE ZSFI_EXTEN.
DATA: LS_BKPF TYPE BKPF,
LS_REVERSAL TYPE BAPIACREV.
DATA: GV_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE, "参考过程
GV_OBJ_KEY TYPE BAPIACHE09-OBJ_KEY, "对象键值
GV_OBJ_SYS TYPE BAPIACHE09-OBJ_SYS.
DATA LV_BELNR_01 TYPE BKPF-BELNR.
DATA LV_WAERS TYPE T001-WAERS.
DATA LV_FLAG TYPE C.
CLEAR LV_FLAG .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
IF GT_DATA-DMBTR IS INITIAL
OR GT_DATA-GZDAT IS INITIAL
.
LV_FLAG = 'X'.
EXIT .
ENDIF.
ENDLOOP.
IF LV_FLAG IS INITIAL.
CLEAR GST_RETURN[] .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
* 会计凭证抬头数据
CLEAR HEADER.
HEADER-HEADER_TXT = '预收开票销项税调整'. "凭证抬头文本
HEADER-COMP_CODE = GT_DATA-BUKRS_VF. "公司代码
HEADER-DOC_DATE = GT_DATA-GZDAT. "凭证日期
HEADER-PSTNG_DATE = GT_DATA-GZDAT. "凭证中的过帐日期
HEADER-USERNAME = SY-UNAME. "用户名
HEADER-DOC_TYPE = 'SA'. "凭证类型
HEADER-FISC_YEAR = GT_DATA-GZDAT(4). "财年
HEADER-FIS_PERIOD = GT_DATA-GZDAT+4(2). "会计期间
* 分录1,借方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-DMBTR. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKXX. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票销项税调整'. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '40'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
* 分录2,贷方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-DMBTR * -1. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKQT. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票销项税调整'. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '50'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
DOCUMENTHEADER = HEADER
* IMPORTING
* OBJ_TYPE = LV_OBJ_TYPE
* OBJ_KEY = LV_OBJ_KEY
* OBJ_SYS = LV_OBJ_SYS
TABLES
ACCOUNTGL = LT_ACCOUNTGL "总帐科目项
CURRENCYAMOUNT = LT_CURRENCY_AMOUNT "货币项目
EXTENSION2 = LT_EXTENSION2
RETURN = LT_RETURN. "返回值
CLEAR LT_RETURN.
LOOP AT LT_RETURN .
APPEND LT_RETURN TO GST_RETURN .
CLEAR LT_RETURN .
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.
CLEAR LV_LINES .
ENDLOOP.
IF SY-SUBRC = 0.
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.
PERFORM FRM_DATA_POST_RT .
ELSE .
MESSAGE '您还未选择任何条目!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ELSE .
MESSAGE '存在信息不全的条目,请检查!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST_RT
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST_RT .
LOOP AT GT_RETURN WHERE TYPE = 'E'.
ENDLOOP.
IF SY-SUBRC = 0.
GLAG_N = 'X'.
DEMO=>MAIN( ).
ELSE .
CLEAR GT_DATA_C[] .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
APPEND GT_DATA TO GT_DATA_C[] .
CLEAR GT_DATA .
ENDLOOP.
MESSAGE '模拟过账成功,可以进行正式过账' TYPE 'S' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST .
CLEAR GLAG_E .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
READ TABLE GT_DATA_C WITH KEY BUKRS_VF = GT_DATA-BUKRS_VF
KUNNR = GT_DATA-KUNNR
VBELN = GT_DATA-VBELN
WAERK = GT_DATA-WAERK
DMKPX = GT_DATA-DMKPX
DMYSX = GT_DATA-DMYSX
SAKXX = GT_DATA-SAKXX
SAKQT = GT_DATA-SAKQT
GZDAT = GT_DATA-GZDAT
DMBTR = GT_DATA-DMBTR
.
IF SY-SUBRC <> 0.
GLAG_E = 'X'.
EXIT.
ENDIF.
ENDLOOP.
IF GLAG_E IS INITIAL.
DATA:
TEMP_MONTH(2), "输入月份
HEADER_TXT(25), "取会计年月+固定文本“制费及研发费分摊”
TEMP_AUT_MSG(30),
LAST_DATA LIKE SY-DATUM, "一个月的最后一天
TEMP_OBJ_KEY TYPE AWKEY, "是否生成
HEADER LIKE BAPIACHE09 OCCURS 0 WITH HEADER LINE,
WA_ACCOUNTGL LIKE BAPIACGL09 OCCURS 0 WITH HEADER LINE,
LT_ACCOUNTGL TYPE STANDARD TABLE OF BAPIACGL09,
WA_CURRENCY_AMOUNT LIKE BAPIACCR09 OCCURS 0 WITH HEADER LINE,
LT_CURRENCY_AMOUNT TYPE STANDARD TABLE OF BAPIACCR09 WITH HEADER LINE,
IT_EXTENSION2 TYPE STANDARD TABLE OF BAPIPAREX WITH HEADER LINE,
LT_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
GST_RETURN LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE,
LS_ZFI002 TYPE ZFI002,
FT_FLAG , "= ‘X'表示分摊过
LV_ANSWER(1),
TEMP_BWTAR_AUFNR LIKE AFPO-AUFNR.
DATA: GS_EXTENSION2 TYPE ZSFI_EXTEN, "会计凭证过账增强extension2
LT_EXTENSION2 TYPE TABLE OF BAPIPAREX WITH HEADER LINE. "返回参数
DATA: LV_OBJ_TYPE LIKE BAPIACHE09-OBJ_TYPE,
LV_OBJ_KEY LIKE BAPIACHE09-OBJ_KEY,
LV_OBJ_SYS LIKE BAPIACHE09-OBJ_SYS.
DATA: LV_DMBTR TYPE BAPIWRBTR,
LV_LINES TYPE SY-TABIX,
ZCOUNT TYPE SY-TABIX,
LV_WRBTR TYPE BSEG-WRBTR,
DO_POST TYPE CHAR1,
LS_EXTEN TYPE ZSFI_EXTEN.
DATA: LS_BKPF TYPE BKPF,
LS_REVERSAL TYPE BAPIACREV.
DATA: GV_OBJ_TYPE TYPE BAPIACHE09-OBJ_TYPE, "参考过程
GV_OBJ_KEY TYPE BAPIACHE09-OBJ_KEY, "对象键值
GV_OBJ_SYS TYPE BAPIACHE09-OBJ_SYS.
DATA LV_BELNR_01 TYPE BKPF-BELNR.
DATA LV_WAERS TYPE T001-WAERS.
DATA LV_FLAG TYPE C.
CLEAR LV_FLAG .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
IF GT_DATA-DMBTR IS INITIAL
OR GT_DATA-GZDAT IS INITIAL
.
LV_FLAG = 'X'.
EXIT .
ENDIF.
ENDLOOP.
IF LV_FLAG IS INITIAL.
CLEAR GST_RETURN[] .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
* 会计凭证抬头数据
CLEAR HEADER.
HEADER-HEADER_TXT = '预收开票销项税调整'. "凭证抬头文本
HEADER-COMP_CODE = GT_DATA-BUKRS_VF. "公司代码
HEADER-DOC_DATE = GT_DATA-GZDAT. "凭证日期
HEADER-PSTNG_DATE = GT_DATA-GZDAT. "凭证中的过帐日期
HEADER-USERNAME = SY-UNAME. "用户名
HEADER-DOC_TYPE = 'SA'. "凭证类型
HEADER-FISC_YEAR = GT_DATA-GZDAT(4). "财年
HEADER-FIS_PERIOD = GT_DATA-GZDAT+4(2). "会计期间
* 分录1,借方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-DMBTR. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKXX. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票销项税调整'. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '40'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
* 分录2,贷方行项目信息:
ADD 1 TO LV_LINES.
CLEAR WA_CURRENCY_AMOUNT.
WA_CURRENCY_AMOUNT-ITEMNO_ACC = LV_LINES. "会计凭证行项目编号
WA_CURRENCY_AMOUNT-CURRENCY = GT_DATA-WAERK. "货币码
WA_CURRENCY_AMOUNT-AMT_DOCCUR = GT_DATA-DMBTR * -1. "金额
APPEND WA_CURRENCY_AMOUNT TO LT_CURRENCY_AMOUNT .
CLEAR WA_ACCOUNTGL.
WA_ACCOUNTGL-ITEMNO_ACC = LV_LINES . "会计凭证行项目编号
WA_ACCOUNTGL-GL_ACCOUNT = GT_DATA-SAKQT. "科目
WA_ACCOUNTGL-ITEM_TEXT = '预收开票销项税调整'. "项目文本
WA_ACCOUNTGL-CUSTOMER = GT_DATA-KUNNR. "客户
WA_ACCOUNTGL-REF_KEY_1 = GT_DATA-KUNNR. "业务伙伴参考码
* WA_ACCOUNTGL-SALES_ORD = GT_DATA-VBELN. "销售订单
WA_ACCOUNTGL-ALLOC_NMBR = GT_DATA-VBELN . "分配号
APPEND WA_ACCOUNTGL TO LT_ACCOUNTGL.
CLEAR GS_EXTENSION2.
CLEAR LT_EXTENSION2.
GS_EXTENSION2-POSNR = LV_LINES. "会计凭证行项目编号
GS_EXTENSION2-BSCHL = '50'. "过账码
LT_EXTENSION2-STRUCTURE = 'ZSFI_EXTEN'.
LT_EXTENSION2-VALUEPART1 = GS_EXTENSION2.
APPEND LT_EXTENSION2.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
DOCUMENTHEADER = HEADER
IMPORTING
OBJ_TYPE = LV_OBJ_TYPE
OBJ_KEY = LV_OBJ_KEY
OBJ_SYS = LV_OBJ_SYS
TABLES
ACCOUNTGL = LT_ACCOUNTGL "总帐科目项
CURRENCYAMOUNT = LT_CURRENCY_AMOUNT "货币项目
EXTENSION2 = LT_EXTENSION2
RETURN = LT_RETURN. "返回值
CLEAR LT_RETURN.
LOOP AT LT_RETURN .
APPEND LT_RETURN TO GST_RETURN .
CLEAR LT_RETURN .
ENDLOOP.
LOOP AT LT_RETURN WHERE TYPE = 'E'.
ENDLOOP.
IF SY-SUBRC = 0 .
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
FREE:LT_ACCOUNTGL,LT_CURRENCY_AMOUNT,LT_RETURN.
CLEAR LV_LINES .
GT_DATA-AWKEY = LV_OBJ_KEY .
MODIFY GT_DATA .
CLEAR GT_DATA .
ENDLOOP.
IF SY-SUBRC = 0.
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.
PERFORM FRM_DATA_POST_R .
ELSE .
MESSAGE '您还未选择任何条目!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ELSE .
MESSAGE '存在信息不全的条目,请检查!' TYPE 'S' DISPLAY LIKE 'E' .
ENDIF.
ELSE .
MESSAGE '模拟过账的数据已发生变动,请重新提交模拟过账!' TYPE 'S' DISPLAY LIKE 'E' .
CLEAR GLAG_N .
CLEAR GT_DATA_C[] .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_POST_R
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_DATA_POST_R .
CLEAR GLAG_N .
CLEAR GT_DATA_C[] .
LOOP AT GT_RETURN WHERE TYPE = 'E'.
ENDLOOP.
IF SY-SUBRC = 0.
DEMO=>MAIN( ).
ELSE .
LOOP AT GT_DATA WHERE AFLAG = 'X' .
SELECT SINGLE BELNR INTO GT_DATA-BELNR FROM BSEG
WHERE AWKEY = GT_DATA-AWKEY
.
MODIFY GT_DATA .
CLEAR GT_DATA .
ENDLOOP.
DATA GS_LAYOUT_ALV TYPE LVC_S_LAYO.
DATA : LV_STABLE TYPE LVC_S_STBL. "刷新稳定性
LV_STABLE-ROW = '1'.
LV_STABLE-COL = '1'.
GS_LAYOUT_ALV-CWIDTH_OPT = 'X'. "优化列宽
CALL METHOD GO_ALV_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = GS_LAYOUT_ALV.
CALL METHOD GO_ALV_GRID->REFRESH_TABLE_DISPLAY
EXPORTING
IS_STABLE = LV_STABLE.
CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
EXPORTING
CONTROL = GO_ALV_GRID.
CALL METHOD CL_GUI_CFW=>FLUSH.
MESSAGE '正式过账成功!' TYPE 'S' .
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SELECT_ALL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_SELECT_ALL .
LOOP AT GT_DATA.
GT_DATA-AFLAG = 'X' .
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UNSELECT_ALL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> p1 text
*& <-- p2 text
*&---------------------------------------------------------------------*
FORM FRM_UNSELECT_ALL .
LOOP AT GT_DATA.
CLEAR GT_DATA-AFLAG .
MODIFY GT_DATA.
CLEAR GT_DATA.
ENDLOOP.
ENDFORM.
INITIALIZATION.
PERFORM FRM_EXCLUDE_OPTION.
AT SELECTION-SCREEN OUTPUT.
PERFORM SCREEN_OUTPUT.
AT SELECTION-SCREEN.
PERFORM SCREEN_SETTING.
START-OF-SELECTION.
PERFORM FOM_GETDATA.
CALL SCREEN 100.
FI-销项税调整程序(开发笔记)
最新推荐文章于 2020-11-27 16:58:47 发布