版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
屏幕设计:
逻辑流:
PROCESS BEFORE OUTPUT.
" WRBTR2由计划百分比*合同金额自动算出来
MODULE ZGET_WRBTRS.
" 未回款金额 = 合同金额 - 各行项目实际回款金额
MODULE ZGET_WRBTR .
" 实时更新数据
MODULE UPDATE_ONTIME .
*&SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_9001'
MODULE TC_9001_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_9001_CHANGE_COL_ATTR.
LOOP AT GT_TBC
INTO GT_TBC
WITH CONTROL TC_9001
CURSOR TC_9001-CURRENT_LINE.
MODULE TC_9001_GET_LINES.
*&SPWIZARD: MODULE TC_9001_CHANGE_FIELD_ATTR
ENDLOOP.
MODULE status_9001.
MODULE screen_control.
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_9001'
LOOP AT GT_TBC.
CHAIN.
FIELD GT_TBC-POSNR.
FIELD GT_TBC-ZJD.
FIELD GT_TBC-ZJHBL.
FIELD GT_TBC-WRBTR2.
FIELD GT_TBC-WAERS.
FIELD GT_TBC-WRBTR3.
FIELD GT_TBC-ZSJBL.
FIELD GT_TBC-BUDAT1.
FIELD GT_TBC-BUDAT2.
FIELD GT_TBC-BUDAT3.
FIELD GT_TBC-ZBZ.
FIELD GT_TBC-ZZT.
FIELD GT_TBC-ZBS.
MODULE TC_9001_MODIFY ON CHAIN-REQUEST.
endchain.
FIELD GT_TBC-FLAG
MODULE TC_9001_MARK ON REQUEST.
ENDLOOP.
MODULE TC_9001_USER_COMMAND.
*&SPWIZARD: MODULE TC_9001_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_9001_CHANGE_COL_ATTR.
" 未回款金额 = 合同金额 - 各行项目实际回款金额
FIELD GS_ZHKTZ-WRBTR MODULE ZGET_WRBTR ."
" 当所有行项目状态均为“已回款”时,合同状态为“已清”,
" 否则为“未清”
FIELD GS_ZHKTZ-ZHTZT MODULE ZGET_ZHTZT ."ON INPUT
" WRBTR2由计划百分比*合同金额自动算出来
MODULE ZGET_WRBTRS.
MODULE USER_COMMAND_9001.
PROCESS ON VALUE-REQUEST.
* FIELD GT_TBC-WAERS MODULE zf4_WAERS.
*
* FIELD GT_TBC-BUDAT1 MODULE zf4_BUDAT1.
*
* FIELD GT_TBC-BUDAT2 MODULE zf4_BUDAT2.
源代码:
*&---------------------------------------------------------------------*
*& Report ZFI_HKTZ
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZFI_HKTZ MESSAGE-ID ZTM .
TYPE-POOLS:VRM , ICON.
TABLES:VBKD,VBAK.
*----------------------------------------------------------------------*
* 数据定义 *
*----------------------------------------------------------------------*
CONSTANTS:CNS_ZFICO001 TYPE CHAR10 VALUE 'ZMJHK1'."
DATA:LIST TYPE VRM_VALUES,
VALUE LIKE LINE OF LIST.
DATA: GS_ZHKTZ TYPE ZHKTZ,
GT_ZHKTZ TYPE STANDARD TABLE OF ZHKTZ.
*DATA: GT_ZHKTZ1 TYPE ZHKTZ,
* GT_ZHKTZ1 TYPE STANDARD TABLE OF ZHKTZ.
DATA: GS_ZHKTZ_MX TYPE ZHKTZ_MX,
GT_ZHKTZ_MX TYPE STANDARD TABLE OF ZHKTZ_MX.
DATA: GV_OKCODE TYPE SY-UCOMM,
OKCODE1001 TYPE SY-UCOMM.
DATA:BEGIN OF GT_VBKD OCCURS 0,
VBELN TYPE VBKD-VBELN, " 销售凭证
POSNR TYPE VBKD-POSNR, " 行项目
END OF GT_VBKD.
DATA:BEGIN OF GT_TBC OCCURS 0.
DATA: FLAG TYPE C,
BSTKD TYPE VBKD-BSTKD.
INCLUDE STRUCTURE ZHKTZ_MX .
DATA END OF GT_TBC.
DATA GS_TBC LIKE LINE OF GT_TBC.
DATA GS_TBC1 LIKE LINE OF GT_TBC.
DATA GS_TBC2 LIKE LINE OF GT_TBC.
DATA: BEGIN OF GT_VBAP OCCURS 0,
VBELN TYPE VBAP-VBELN,
POSNR TYPE VBAP-POSNR,
KZWI1 TYPE VBAP-KZWI1,
END OF GT_VBAP.
DATA: GT_SELTAB TYPE TABLE OF RSPARAMS,
LS_SELTAB TYPE RSPARAMS.
TYPES: BEGIN OF TP_PARM,
R_1 TYPE CHAR1,
R_2 TYPE CHAR1,
R_3 TYPE CHAR1,
R_4 TYPE CHAR1,
P_BSTKD TYPE VBKD-BSTKD,
P_VBELN TYPE VBKD-VBELN,
P_KUNNR TYPE VBAK-KUNNR,
P_ZYWLX TYPE CHAR10,
END OF TP_PARM.
DATA: LS_PARM TYPE TP_PARM.
DATA:LT_RETURN TYPE TABLE OF DDSHRETVAL WITH HEADER LINE,
LW_RETURN TYPE DDSHRETVAL.
DATA: BEGIN OF LT_HELP OCCURS 0,
VBELN TYPE VBKD-VBELN,
END OF LT_HELP.
DATA DYNPFIELDS TYPE TABLE OF DYNPREAD WITH HEADER LINE.
*----------------------------------------------------------------------*
* SELECTION-SCREEN *
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: P_BSTKD FOR VBKD-BSTKD NO INTERVALS. " 合同号单值
PARAMETERS: P_VBELN TYPE VBKD-VBELN OBLIGATORY. " 销售凭证单值必输
SELECT-OPTIONS: P_KUNNR FOR VBAK-KUNNR NO INTERVALS . " 客户单值
PARAMETERS: P_ZYWLX TYPE CHAR10 AS LISTBOX VISIBLE LENGTH 10 OBLIGATORY . " 业务类型:新模 / 修模
SELECTION-SCREEN END OF BLOCK BLK1.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME TITLE TEXT-002.
PARAMETERS R_1 RADIOBUTTON GROUP R2 DEFAULT 'X' . " 创建
PARAMETERS R_2 RADIOBUTTON GROUP R2 . " 修改
PARAMETERS R_3 RADIOBUTTON GROUP R2 . " 显示
PARAMETERS R_4 RADIOBUTTON GROUP R2 . " 回款
SELECTION-SCREEN END OF BLOCK BLK2.
*----------------------------------------------------------------------*
* INITIALIZATION *
*----------------------------------------------------------------------*
INITIALIZATION.
* PERFORM screen_control.
*----------------------------------------------------------------------*
* AT SELECTION-SCREEN *
*----------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT. " pbo
REFRESH LIST .
VALUE-KEY = '1' .
VALUE-TEXT = '新模' .
APPEND VALUE TO LIST .
VALUE-KEY = '2' .
VALUE-TEXT = '修模' .
APPEND VALUE TO LIST .
**调用下拉框赋值函数
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID = 'P_ZYWLX'
VALUES = LIST.
AT SELECTION-SCREEN.
PERFORM CHECK_AUTHORITY.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_VBELN.
CLEAR: DYNPFIELDS, DYNPFIELDS[].
DYNPFIELDS-FIELDNAME = 'P_BSTKD-LOW'. "填入需要读值的字段名
APPEND DYNPFIELDS.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
DYNAME = SY-REPID
DYNUMB = SY-DYNNR
TRANSLATE_TO_UPPER = 'X'
TABLES
DYNPFIELDS = DYNPFIELDS
EXCEPTIONS
OTHERS = 9.
IF SY-SUBRC = 0.
READ TABLE DYNPFIELDS WITH KEY FIELDNAME = 'P_BSTKD-LOW'.
P_BSTKD-LOW = DYNPFIELDS-FIELDVALUE.
ENDIF.
SELECT VBELN
INTO CORRESPONDING FIELDS OF TABLE LT_HELP
FROM VBKD
WHERE BSTKD = P_BSTKD-LOW.
SORT LT_HELP BY VBELN.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
RETFIELD = 'VBELN'
VALUE_ORG = 'S'
DYNPPROG = SY-REPID
DYNPNR = SY-DYNNR
DYNPROFIELD = 'P_VBELN'
TABLES
VALUE_TAB = LT_HELP[]
RETURN_TAB = LT_RETURN
EXCEPTIONS
PARAMETER_ERROR = 1
NO_VALUES_FOUND = 2
OTHERS = 3.
* IF sy-subrc EQ 0.
* READ TABLE lt_return INDEX 1 INTO lw_return.
* READ TABLE lt_help WITH KEY VBELN = lw_return-fieldval
* BINARY SEARCH.
* IF sy-subrc = 0.
* P_VBELN = lt_help-VBELN.
* ENDIF.
* ENDIF.
START-OF-SELECTION.
IF R_1 = 'X'. " 创建
" 获取系统表数据
PERFORM GET_SYDATA.
ELSE.
" 获取自建的后台表数据
PERFORM GET_DATA.
ENDIF.
CALL SCREEN 9001.
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
DATA LV_VBELN TYPE ZHKTZ-VBELN.
DATA LV_KZWI1 TYPE VBAP-KZWI1.
" 获取行项目信息
* IF R_2 = 'X'.
* SELECT * FROM ZHKTZ_MX INTO CORRESPONDING FIELDS OF TABLE GT_TBC WHERE VBELN = P_VBELN
* AND ZZT NE '已提交'
* AND ZZT NE '已回款' .
* ELSE .
SELECT * FROM ZHKTZ_MX INTO CORRESPONDING FIELDS OF TABLE GT_TBC WHERE VBELN = P_VBELN .
* ENDIF.
" 获取抬头信息
*IF P_BSTKD <> ''.
SELECT * FROM ZHKTZ INTO CORRESPONDING FIELDS OF TABLE GT_ZHKTZ WHERE VBELN EQ P_VBELN
AND BSTKD IN P_BSTKD
AND ZYWLX EQ P_ZYWLX ."
" 获取抬头信息
* SELECT * FROM VBAK INTO CORRESPONDING FIELDS OF TABLE GT_ZHKTZ1 WHERE VBELN = P_VBELN.
IF GT_ZHKTZ[] IS INITIAL.
REFRESH GT_TBC.
MESSAGE '后台表没有相应数据,请检查屏幕输入条件!' TYPE 'S'.
ENDIF.
"BEG 20190523 HTAH
DATA LS_KTGRD TYPE KTGRD.
CLEAR LS_KTGRD.
SELECT SINGLE KTGRD INTO LS_KTGRD
FROM KNVV
JOIN VBAK ON VBAK~KUNNR = KNVV~KUNNR
WHERE VBAK~VBELN = P_VBELN
AND KNVV~VKORG = '9520'.
IF LS_KTGRD = '30' OR LS_KTGRD = '50'.
SELECT VBELN
POSNR
KZWI1
INTO CORRESPONDING FIELDS OF TABLE GT_VBAP
FROM VBAP
WHERE VBELN = P_VBELN.
ELSEIF LS_KTGRD = '40' OR LS_KTGRD = '60'.
SELECT VBELN
POSNR
NETWR AS KZWI1
INTO CORRESPONDING FIELDS OF TABLE GT_VBAP
FROM VBAP
WHERE VBELN = P_VBELN.
ENDIF.
LOOP AT GT_VBAP.
LV_KZWI1 = LV_KZWI1 + GT_VBAP-KZWI1.
ENDLOOP.
"END 20190523 HTAH
READ TABLE GT_ZHKTZ INDEX 1 INTO GS_ZHKTZ.
* READ TABLE GT_TBC INDEX 1 INTO GS_TBC.
" 合同号
SELECT SINGLE BSTKD
INTO GS_ZHKTZ-BSTKD
FROM VBKD
WHERE VBELN EQ P_VBELN
AND BSTKD IN P_BSTKD.
* GS_ZHKTZ-BSTKD = GS_TBC.
" 客户名称
SELECT SINGLE NAME1
INTO GS_ZHKTZ-NAME1
FROM KNA1
WHERE KUNNR = GS_ZHKTZ-KUNNR.
" 开票时间
SELECT SINGLE VBRK~FKDAT
INTO GS_ZHKTZ-FKDAT
FROM VBRK
INNER JOIN VBRP ON VBRK~VBELN = VBRP~VBELN
WHERE VBRP~AUBEL = P_VBELN.
" 合同金额
IF GS_ZHKTZ-NETWR = LV_KZWI1.
GS_ZHKTZ-NETWR = LV_KZWI1.
ELSE.
GS_ZHKTZ-NETWR = LV_KZWI1.
MODIFY ZHKTZ FROM GS_ZHKTZ.
COMMIT WORK.
ENDIF.
*ELSEIF
* READ TABLE GT_ZHKTZ INDEX 1 INTO GS_ZHKTZ.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form GET_SYDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_SYDATA .
DATA LV_VBELN TYPE ZHKTZ-VBELN.
DATA LV_KZWI1 TYPE VBAP-KZWI1.
SELECT SINGLE VBELN INTO LV_VBELN FROM ZHKTZ WHERE VBELN = P_VBELN.
IF SY-SUBRC = 0.
SET CURSOR FIELD 'P_VBELN'.
MESSAGE S003 WITH '凭证已创建,不可重复创建!'.
LEAVE TO TRANSACTION CNS_ZFICO001.
ENDIF.
" 获取抬头信息
SELECT * FROM VBAK INTO CORRESPONDING FIELDS OF TABLE GT_ZHKTZ WHERE VBELN = P_VBELN.
"BEG 20190523 HTAH
DATA LS_KTGRD TYPE KTGRD.
CLEAR LS_KTGRD.
SELECT SINGLE KTGRD INTO LS_KTGRD
FROM KNVV
JOIN VBAK ON VBAK~KUNNR = KNVV~KUNNR
WHERE VBAK~VBELN = P_VBELN
AND KNVV~VKORG = '9520'.
IF LS_KTGRD = '30' OR LS_KTGRD = '50'.
SELECT VBELN
POSNR
KZWI1
INTO CORRESPONDING FIELDS OF TABLE GT_VBAP
FROM VBAP
WHERE VBELN = P_VBELN.
ELSEIF LS_KTGRD = '40' OR LS_KTGRD = '60'.
SELECT VBELN
POSNR
NETWR AS KZWI1
INTO CORRESPONDING FIELDS OF TABLE GT_VBAP
FROM VBAP
WHERE VBELN = P_VBELN.
ENDIF.
*
* SELECT VBELN
* POSNR
* KZWI1
* INTO CORRESPONDING FIELDS OF TABLE GT_VBAP
* FROM VBAP
* WHERE VBELN = P_VBELN.
LOOP AT GT_VBAP.
LV_KZWI1 = LV_KZWI1 + GT_VBAP-KZWI1.
ENDLOOP.
"END 20190523 HTAH
READ TABLE GT_ZHKTZ INDEX 1 INTO GS_ZHKTZ.
* READ TABLE GT_TBC INDEX 1 INTO GS_TBC.
" 合同金额
GS_ZHKTZ-NETWR = LV_KZWI1.
" 合同号
SELECT SINGLE BSTKD
INTO GS_ZHKTZ-BSTKD
FROM VBKD
WHERE VBELN EQ P_VBELN
AND BSTKD IN P_BSTKD.
* GS_ZHKTZ-BSTKD = GS_TBC.
" 客户名称
SELECT SINGLE NAME1
INTO GS_ZHKTZ-NAME1
FROM KNA1
WHERE KUNNR = GS_ZHKTZ-KUNNR.
" 开票时间
SELECT SINGLE VBRK~FKDAT
INTO GS_ZHKTZ-FKDAT
FROM VBRK
INNER JOIN VBRP ON VBRK~VBELN = VBRP~VBELN
WHERE VBRP~AUBEL = P_VBELN.
" 创建行项目信息
IF P_ZYWLX = '1'.
REFRESH GT_TBC.
GT_TBC-VBELN = P_VBELN.
GT_TBC-POSNR = '10'.
GT_TBC-ZJD = '一期款(首款)'.
GT_TBC-WAERS = 'CNY'.
GT_TBC-BUDAT2 = SY-DATUM.
APPEND GT_TBC.
CLEAR GT_TBC.
GT_TBC-VBELN = P_VBELN.
GT_TBC-POSNR = '20'.
GT_TBC-ZJD = '二期款(合格款)'.
GT_TBC-WAERS = 'CNY'.
GT_TBC-BUDAT2 = SY-DATUM.
APPEND GT_TBC.
CLEAR GT_TBC.
GT_TBC-VBELN = P_VBELN.
GT_TBC-POSNR = '30'.
GT_TBC-ZJD = '三期款(验收款)'.
GT_TBC-WAERS = 'CNY'.
GT_TBC-BUDAT2 = SY-DATUM.
APPEND GT_TBC.
CLEAR GT_TBC.
GT_TBC-VBELN = P_VBELN.
GT_TBC-POSNR = '40'.
GT_TBC-ZJD = '尾款(质保款)'.
GT_TBC-WAERS = 'CNY'.
GT_TBC-BUDAT2 = SY-DATUM.
APPEND GT_TBC.
CLEAR GT_TBC.
ELSEIF P_ZYWLX = '2'.
REFRESH GT_TBC.
GT_TBC-VBELN = P_VBELN.
GT_TBC-POSNR = '10'.
GT_TBC-ZJD = '一次性付款'.
GT_TBC-WAERS = 'CNY'.
GT_TBC-BUDAT2 = SY-DATUM.
GT_TBC-ZJHBL = 100.
APPEND GT_TBC.
CLEAR GT_TBC.
ENDIF.
ENDFORM. " GET_SYDATA
*&---------------------------------------------------------------------*
*& Module STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_9001 OUTPUT.
SET PF-STATUS '9001'.
SET TITLEBAR '9001'.
ENDMODULE. " STATUS_9001 OUTPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9001 INPUT.
GV_OKCODE = SY-UCOMM.
DATA ANSWER TYPE C LENGTH 1.
DATA LV_FLAG TYPE I.
CASE GV_OKCODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
* LEAVE PROGRAM..
PERFORM BACKTO9001.
LEAVE TO TRANSACTION CNS_ZFICO001..
WHEN 'SAVE'.
* READ TABLE GT_TBC INTO GS_TBC WITH KEY FLAG = 'X'.
* IF SY-SUBRC <> 0.
* SET CURSOR FIELD 'GT_TBC-FLAG'.
* MESSAGE '请选择一行项目!'TYPE 'I'..
* LEAVE TO SCREEN 9001.
* ENDIF.
PERFORM FRM_CHECK_ZJHBL .
LOOP AT GT_TBC INTO GS_TBC WHERE ZZT = '未提交' OR ZZT = '' .
GS_TBC-ZZT = '未提交'.
GS_TBC-ZBS = ICON_RED_LIGHT.
MODIFY GT_TBC FROM GS_TBC.
MOVE-CORRESPONDING GS_TBC TO GS_ZHKTZ_MX.
MODIFY ZHKTZ_MX FROM GS_ZHKTZ_MX. " 修改,插入 操作
* MODIFY GT_TBC FROM GS_TBC TRANSPORTING ZZT WHERE FLAG = 'X'.
ENDLOOP.
GS_ZHKTZ-ZYWLX = P_ZYWLX.
MODIFY ZHKTZ FROM GS_ZHKTZ.
COMMIT WORK.
IF SY-SUBRC = 0.
MESSAGE '数据保存成功!' TYPE 'S'.
ENDIF.
WHEN 'ZTJ'.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
DEFAULTOPTION = 'Y'
DIAGNOSETEXT1 = '是否确认提交?'
TEXTLINE1 = '提醒:确认提交数据将不能修改!'
TITEL = '提交确认'
START_COLUMN = 25
START_ROW = 6
CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = ANSWER.
CASE ANSWER.
WHEN 'A'.
LEAVE TO SCREEN 9001.
WHEN 'J'.
PERFORM FRM_CHECK_ZJHBL .
READ TABLE GT_TBC INTO GS_TBC WITH KEY FLAG = 'X'.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'GT_TBC-FLAG'.
MESSAGE '请选择一行项目!'TYPE 'I'..
LEAVE TO SCREEN 9001.
ENDIF.
PERFORM FRM_CHECK_LINE.
GS_TBC-ZZT = '已提交'.
GS_TBC-ZBS = ICON_YELLOW_LIGHT.
* MODIFY ZHKTZ FROM GS_ZHKTZ.
MOVE-CORRESPONDING GS_TBC TO GS_ZHKTZ_MX.
MODIFY GT_TBC FROM GS_TBC TRANSPORTING ZZT WHERE FLAG = 'X'.
MODIFY ZHKTZ_MX FROM GS_ZHKTZ_MX. " 修改,插入 操作
IF SY-SUBRC = 0.
MESSAGE '数据提交成功!' TYPE 'S'.
ENDIF.
COMMIT WORK.
WHEN 'N'.
LEAVE TO SCREEN 9001.
ENDCASE.
WHEN 'ZHK'.
IF R_4 = 'X'.
CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
EXPORTING
DEFAULTOPTION = 'Y'
DIAGNOSETEXT1 = '是否确认回款?'
TEXTLINE1 = '提醒:确认回款数据将不能修改!'
TITEL = '回款确认'
START_COLUMN = 25
START_ROW = 6
CANCEL_DISPLAY = 'X'
IMPORTING
ANSWER = ANSWER.
CASE ANSWER.
WHEN 'A'.
LEAVE TO SCREEN 9001.
WHEN 'J'.
PERFORM FRM_CHECK_LINE1.
READ TABLE GT_TBC INTO GS_TBC WITH KEY FLAG = 'X'.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'GT_TBC-FLAG'.
MESSAGE '请选择一行项目!'TYPE 'I'..
LEAVE TO SCREEN 9001.
ENDIF.
IF GS_TBC-WRBTR3 = '' OR GS_TBC-BUDAT1 = '00000000'.
LOOP AT SCREEN .
IF SCREEN-NAME = 'GT_TBC-WRBTR3' OR SCREEN-NAME = 'GT_TBC-BUDAT1'.
SCREEN-INPUT = 1.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
IF GS_TBC-WRBTR3 = ''.
SET CURSOR FIELD 'GS_TBC-WRBTR3'.
MESSAGE '请填写金额!'TYPE 'I'..
LEAVE TO SCREEN 9001.
ELSEIF GS_TBC-BUDAT1 = '00000000'.
SET CURSOR FIELD 'GS_TBC-BUDAT1'.
MESSAGE '填写回款时间!'TYPE 'I'..
LEAVE TO SCREEN 9001.
* MESSAGE e013 WITH '填写回款时间!'.
ENDIF.
ENDIF.
GS_TBC-ZZT = '已回款'.
GS_TBC-ZBS = ICON_GREEN_LIGHT.
MOVE-CORRESPONDING GS_TBC TO GS_ZHKTZ_MX.
MODIFY ZHKTZ_MX FROM GS_ZHKTZ_MX. " 修改,插入 操作
MODIFY GT_TBC FROM GS_TBC TRANSPORTING ZZT WHERE FLAG = 'X'.
COMMIT WORK.
IF SY-SUBRC = 0.
MESSAGE '回款成功' TYPE 'S'.
ENDIF.
LOOP AT GT_TBC INTO GS_TBC2.
IF GS_TBC2-ZZT <> '已回款'.
LV_FLAG = LV_FLAG + 1.
ENDIF.
ENDLOOP.
IF LV_FLAG = 0.
GS_ZHKTZ-ZHTZT = '已清'.
ENDIF.
CLEAR LV_FLAG.
GS_ZHKTZ-ZYWLX = P_ZYWLX.
MODIFY ZHKTZ FROM GS_ZHKTZ.
COMMIT WORK.
WHEN 'N'.
LEAVE TO SCREEN 9001.
ENDCASE.
ENDIF.
WHEN OTHERS .
ENDCASE.
LOOP AT GT_TBC.
IF GT_TBC-ZZT = '未提交'.
GT_TBC-ZBS = ICON_RED_LIGHT.
ELSEIF GT_TBC-ZZT = '已提交'.
GT_TBC-ZBS = ICON_YELLOW_LIGHT.
ELSEIF GT_TBC-ZZT = '已回款'.
GT_TBC-ZBS = ICON_GREEN_LIGHT.
ENDIF.
MODIFY GT_TBC.
ENDLOOP.
ENDMODULE. " USER_COMMAND_9001 INPUT
*&SPWIZARD: DECLARATION OF TABLECONTROL 'TC_9001' ITSELF
CONTROLS: TC_9001 TYPE TABLEVIEW USING SCREEN 9001.
*&SPWIZARD: LINES OF TABLECONTROL 'TC_9001'
DATA: G_TC_9001_LINES LIKE SY-LOOPC.
DATA: OK_CODE LIKE SY-UCOMM.
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: UPDATE LINES FOR EQUIVALENT SCROLLBAR
MODULE TC_9001_CHANGE_TC_ATTR OUTPUT.
DESCRIBE TABLE GT_TBC LINES TC_9001-LINES.
ENDMODULE. "TC_9001_CHANGE_TC_ATTR OUTPUT
*&SPWIZARD: OUTPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: GET LINES OF TABLECONTROL
MODULE TC_9001_GET_LINES OUTPUT.
G_TC_9001_LINES = SY-LOOPC.
IF R_2 = 'X'." 修改
IF GT_TBC-ZZT EQ '已提交' OR GT_TBC-ZZT EQ '已回款'. " OR GT_TBC-ZZT EQ '已回款'
LOOP AT SCREEN.
* IF screen-name = 'GT_TBC-ZJHBL' OR screen-name = 'GT_TBC-WAERS' ." OR screen-name = 'GT_TBC-WAERS'
SCREEN-INPUT = 0.
MODIFY SCREEN.
* ENDIF.
ENDLOOP.
ENDIF .
ELSEIF R_4 = 'X'. " 回款
IF GT_TBC-ZZT EQ '已回款'.
LOOP AT SCREEN.
* IF screen-name = 'GT_TBC-ZJHBL' OR screen-name = 'GT_TBC-WAERS' ." OR screen-name = 'GT_TBC-WAERS'
SCREEN-INPUT = 0.
MODIFY SCREEN.
* ENDIF.
ENDLOOP.
ELSEIF GT_TBC-ZZT EQ '已提交'.
LOOP AT SCREEN.
IF SCREEN-NAME = 'GT_TBC-WRBTR3' OR SCREEN-NAME = 'GT_TBC-BUDAT1' .
SCREEN-REQUEST = 1.
SCREEN-INPUT = 1.
ELSEIF SCREEN-NAME = 'GT_TBC-FLAG' OR SCREEN-NAME = 'GT_TBC-ZBZ' ..
SCREEN-INPUT = 1.
ELSE.
SCREEN-INPUT = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
ELSEIF GT_TBC-ZZT EQ '未提交'.
LOOP AT SCREEN.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDIF.
ENDMODULE. "TC_9001_GET_LINES OUTPUT
*&SPWIZARD: INPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MODIFY TABLE
MODULE TC_9001_MODIFY INPUT.
MODIFY GT_TBC
FROM GT_TBC
INDEX TC_9001-CURRENT_LINE.
ENDMODULE. "TC_9001_MODIFY INPUT
*&SPWIZARD: INPUT MODUL FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: MARK TABLE
MODULE TC_9001_MARK INPUT.
DATA: G_TC_9001_WA2 LIKE LINE OF GT_TBC.
IF TC_9001-LINE_SEL_MODE = 1
AND GT_TBC-FLAG = 'X'.
LOOP AT GT_TBC INTO G_TC_9001_WA2
WHERE FLAG = 'X'.
G_TC_9001_WA2-FLAG = ''.
MODIFY GT_TBC
FROM G_TC_9001_WA2
TRANSPORTING FLAG.
ENDLOOP.
ENDIF.
MODIFY GT_TBC
FROM GT_TBC
INDEX TC_9001-CURRENT_LINE
TRANSPORTING FLAG.
ENDMODULE. "TC_9001_MARK INPUT
*&SPWIZARD: INPUT MODULE FOR TC 'TC_9001'. DO NOT CHANGE THIS LINE!
*&SPWIZARD: PROCESS USER COMMAND
MODULE TC_9001_USER_COMMAND INPUT.
OK_CODE = SY-UCOMM.
PERFORM USER_OK_TC USING 'TC_9001'
'GT_TBC'
'FLAG'
CHANGING OK_CODE.
SY-UCOMM = OK_CODE.
ENDMODULE. "TC_9001_USER_COMMAND INPUT
*----------------------------------------------------------------------*
* INCLUDE TABLECONTROL_FORMS *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form USER_OK_TC *
*&---------------------------------------------------------------------*
FORM USER_OK_TC USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME
CHANGING P_OK LIKE SY-UCOMM.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA: L_OK TYPE SY-UCOMM,
L_OFFSET TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
*&SPWIZARD: Table control specific operations *
*&SPWIZARD: evaluate TC name and operations *
SEARCH P_OK FOR P_TC_NAME.
IF SY-SUBRC <> 0.
EXIT.
ENDIF.
L_OFFSET = STRLEN( P_TC_NAME ) + 1.
L_OK = P_OK+L_OFFSET.
*&SPWIZARD: execute general and TC specific operations *
CASE L_OK.
WHEN 'INSR'. "insert row
PERFORM FCODE_INSERT_ROW USING P_TC_NAME
P_TABLE_NAME.
CLEAR P_OK.
WHEN 'DELE'. "delete row
PERFORM FCODE_DELETE_ROW USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
CLEAR P_OK.
WHEN 'P--' OR "top of list
'P-' OR "previous page
'P+' OR "next page
'P++'. "bottom of list
PERFORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
L_OK.
CLEAR P_OK.
* WHEN 'L--'. "total left
* PERFORM FCODE_TOTAL_LEFT USING P_TC_NAME.
*
* WHEN 'L-'. "column left
* PERFORM FCODE_COLUMN_LEFT USING P_TC_NAME.
*
* WHEN 'R+'. "column right
* PERFORM FCODE_COLUMN_RIGHT USING P_TC_NAME.
*
* WHEN 'R++'. "total right
* PERFORM FCODE_TOTAL_RIGHT USING P_TC_NAME.
*
WHEN 'MARK'. "mark all filled lines
PERFORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK.
WHEN 'DMRK'. "demark all filled lines
PERFORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
CLEAR P_OK.
* WHEN 'SASCEND' OR
* 'SDESCEND'. "sort column
* PERFORM FCODE_SORT_TC USING P_TC_NAME
* l_ok.
ENDCASE.
ENDFORM. " USER_OK_TC
*&---------------------------------------------------------------------*
*& Form FCODE_INSERT_ROW *
*&---------------------------------------------------------------------*
FORM FCODE_INSERT_ROW
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_LINES_NAME LIKE FELD-NAME.
DATA L_SELLINE LIKE SY-STEPL.
DATA L_LASTLINE TYPE I.
DATA L_LINE TYPE I.
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <LINES> TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_LINES_NAME.
ASSIGN (L_LINES_NAME) TO <LINES>.
*&SPWIZARD: get current line *
GET CURSOR LINE L_SELLINE.
IF SY-SUBRC <> 0. " append line to table
L_SELLINE = <TC>-LINES + 1.
*&SPWIZARD: set top line *
IF L_SELLINE > <LINES>.
<TC>-TOP_LINE = L_SELLINE - <LINES> + 1 .
ELSE.
<TC>-TOP_LINE = 1.
ENDIF.
ELSE. " insert line into table
L_SELLINE = <TC>-TOP_LINE + L_SELLINE - 1.
L_LASTLINE = <TC>-TOP_LINE + <LINES> - 1.
ENDIF.
*&SPWIZARD: set new cursor line *
L_LINE = L_SELLINE - <TC>-TOP_LINE + 1.
*&SPWIZARD: insert initial line *
INSERT INITIAL LINE INTO <TABLE> INDEX L_SELLINE.
<TC>-LINES = <TC>-LINES + 1.
*&SPWIZARD: set cursor *
SET CURSOR LINE L_LINE.
ENDFORM. " FCODE_INSERT_ROW
*&---------------------------------------------------------------------*
*& Form FCODE_DELETE_ROW *
*&---------------------------------------------------------------------*
FORM FCODE_DELETE_ROW
USING P_TC_NAME TYPE DYNFNAM
P_TABLE_NAME
P_MARK_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: delete marked lines *
DESCRIBE TABLE <TABLE> LINES <TC>-LINES.
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
IF <MARK_FIELD> = 'X'.
DELETE <TABLE> INDEX SYST-TABIX.
IF SY-SUBRC = 0.
<TC>-LINES = <TC>-LINES - 1.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " FCODE_DELETE_ROW
*&---------------------------------------------------------------------*
*& Form COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
* -->P_OK ok code
*----------------------------------------------------------------------*
FORM COMPUTE_SCROLLING_IN_TC USING P_TC_NAME
P_OK.
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TC_NEW_TOP_LINE TYPE I.
DATA L_TC_NAME LIKE FELD-NAME.
DATA L_TC_LINES_NAME LIKE FELD-NAME.
DATA L_TC_FIELD_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <LINES> TYPE I.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get looplines of TableControl *
CONCATENATE 'G_' P_TC_NAME '_LINES' INTO L_TC_LINES_NAME.
ASSIGN (L_TC_LINES_NAME) TO <LINES>.
*&SPWIZARD: is no line filled? *
IF <TC>-LINES = 0.
*&SPWIZARD: yes, ... *
L_TC_NEW_TOP_LINE = 1.
ELSE.
*&SPWIZARD: no, ... *
CALL FUNCTION 'SCROLLING_IN_TABLE'
EXPORTING
ENTRY_ACT = <TC>-TOP_LINE
ENTRY_FROM = 1
ENTRY_TO = <TC>-LINES
LAST_PAGE_FULL = 'X'
LOOPS = <LINES>
OK_CODE = P_OK
OVERLAPPING = 'X'
IMPORTING
ENTRY_NEW = L_TC_NEW_TOP_LINE
EXCEPTIONS
* NO_ENTRY_OR_PAGE_ACT = 01
* NO_ENTRY_TO = 02
* NO_OK_CODE_OR_PAGE_GO = 03
OTHERS = 0.
ENDIF.
*&SPWIZARD: get actual tc and column *
GET CURSOR FIELD L_TC_FIELD_NAME
AREA L_TC_NAME.
IF SYST-SUBRC = 0.
IF L_TC_NAME = P_TC_NAME.
*&SPWIZARD: et actual column *
SET CURSOR FIELD L_TC_FIELD_NAME LINE 1.
ENDIF.
ENDIF.
*&SPWIZARD: set the new top line *
<TC>-TOP_LINE = L_TC_NEW_TOP_LINE.
ENDFORM. " COMPUTE_SCROLLING_IN_TC
*&---------------------------------------------------------------------*
*& Form FCODE_TC_MARK_LINES
*&---------------------------------------------------------------------*
* marks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_MARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME.
*&SPWIZARD: EGIN OF LOCAL DATA-----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: mark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
<MARK_FIELD> = 'X'.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*& Form FCODE_TC_DEMARK_LINES
*&---------------------------------------------------------------------*
* demarks all TableControl lines
*----------------------------------------------------------------------*
* -->P_TC_NAME name of tablecontrol
*----------------------------------------------------------------------*
FORM FCODE_TC_DEMARK_LINES USING P_TC_NAME
P_TABLE_NAME
P_MARK_NAME .
*&SPWIZARD: BEGIN OF LOCAL DATA----------------------------------------*
DATA L_TABLE_NAME LIKE FELD-NAME.
FIELD-SYMBOLS <TC> TYPE CXTAB_CONTROL.
FIELD-SYMBOLS <TABLE> TYPE STANDARD TABLE.
FIELD-SYMBOLS <WA>.
FIELD-SYMBOLS <MARK_FIELD>.
*&SPWIZARD: END OF LOCAL DATA------------------------------------------*
ASSIGN (P_TC_NAME) TO <TC>.
*&SPWIZARD: get the table, which belongs to the tc *
CONCATENATE P_TABLE_NAME '[]' INTO L_TABLE_NAME. "table body
ASSIGN (L_TABLE_NAME) TO <TABLE>. "not headerline
*&SPWIZARD: demark all filled lines *
LOOP AT <TABLE> ASSIGNING <WA>.
*&SPWIZARD: access to the component 'FLAG' of the table header *
ASSIGN COMPONENT P_MARK_NAME OF STRUCTURE <WA> TO <MARK_FIELD>.
<MARK_FIELD> = SPACE.
ENDLOOP.
ENDFORM. "fcode_tc_mark_lines
*&---------------------------------------------------------------------*
*& Module ZGET_WRBTR INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZGET_WRBTR INPUT.
DATA ZSUM TYPE ZHKTZ-WRBTR.
CLEAR ZSUM.
LOOP AT GT_TBC.
ZSUM = ZSUM + GT_TBC-WRBTR3 .
ENDLOOP.
GS_ZHKTZ-WRBTR = GS_ZHKTZ-NETWR - ZSUM.
ENDMODULE. " ZGET_WRBTR INPUT
*&---------------------------------------------------------------------*
*& Module ZGET_ZHTZT INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZGET_ZHTZT INPUT.
DATA FLAG TYPE I.
LOOP AT GT_TBC.
IF GT_TBC-ZZT <> '已回款'.
FLAG = FLAG + 1.
ENDIF.
ENDLOOP.
IF FLAG <> 0.
GS_ZHKTZ-ZHTZT = '未清'.
ELSE.
GS_ZHKTZ-ZHTZT = '已清'.
ENDIF.
ENDMODULE. " ZGET_ZHTZT INPUT
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_ZJHBL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_ZJHBL .
DATA ZSUM1 TYPE ZHKTZ_MX-ZJHBL .
CLEAR ZSUM1.
IF P_ZYWLX = 1. "新模
LOOP AT GT_TBC.
ZSUM1 = ZSUM1 + GT_TBC-ZJHBL.
ENDLOOP.
IF ZSUM1 <> 100.
* SET CURSOR FIELD 'GS_ZHKTZ-FKDAT'.
MESSAGE '计划百分比和应为100,请检查并重新输入!!' TYPE 'I' . " e013 WITH
LEAVE TO SCREEN 9001.
ENDIF.
ELSEIF P_ZYWLX = 2. " 修模
READ TABLE GT_TBC INTO GS_TBC INDEX 1.
IF GS_TBC-ZJHBL <> 100.
SET CURSOR FIELD 'GS_ZHKTZ-FKDAT'.
MESSAGE E013 WITH '计划百分比应为100,请检查并重新输入!!'.
ENDIF.
ENDIF.
ENDFORM. " FRM_CHECK_ZJHBL
*&---------------------------------------------------------------------*
*& Module ZGET_WRBTRS INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZGET_WRBTRS INPUT.
DATA LV_SUM TYPE P DECIMALS 2.
LOOP AT GT_TBC.
GT_TBC-WRBTR2 = ( GT_TBC-ZJHBL / 100 ) * GS_ZHKTZ-NETWR.
GT_TBC-ZSJBL = ( GT_TBC-WRBTR3 / GS_ZHKTZ-NETWR ) * 100.
MODIFY GT_TBC.
CLEAR GT_TBC.
ENDLOOP.
*LEAVE TO SCREEN 9001.
ENDMODULE. " ZGET_WRBTRS INPUT
*&---------------------------------------------------------------------*
*& Module SCREEN_CONTROL OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SCREEN_CONTROL OUTPUT.
IF R_4 = 'X'.
LOOP AT SCREEN.
IF SCREEN-NAME = 'T1'.
SCREEN-ACTIVE = 0.
* screen-REQUEST = 1.
MODIFY SCREEN.
* ELSEIF SCREEN-NAME = 'GT_TBC-FLAG'.
* screen-input = 1.
* MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF R_1 = 'X' OR R_2 = 'X' .
LOOP AT SCREEN.
IF SCREEN-NAME = 'T2'.
SCREEN-ACTIVE = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ELSEIF R_3 = 'X' .
LOOP AT SCREEN.
IF SCREEN-NAME = 'T1' OR SCREEN-NAME = 'T2'.
SCREEN-ACTIVE = 0.
ENDIF.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDLOOP.
ENDIF.
ENDMODULE. " SCREEN_CONTROL OUTPUT
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_LINE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_LINE .
DATA L_LINE TYPE I.
DATA L_LINE1 TYPE I.
CLEAR L_LINE.
CLEAR L_LINE1.
GET CURSOR LINE L_LINE.
*index = tab1-top_line + c_line - 1.
L_LINE = L_LINE + TC_9001-TOP_LINE - 1.
IF L_LINE > 1.
L_LINE1 = L_LINE - 1.
READ TABLE GT_TBC INDEX L_LINE1 INTO GS_TBC1.
IF GS_TBC1-ZZT = '' OR GS_TBC1-ZZT = '未提交'.
MESSAGE '请按行项目顺序提交!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 9001.
ENDIF.
ENDIF.
ENDFORM. " FRM_CHECK_LINE
*&---------------------------------------------------------------------*
*& Form BACKTO9001
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM BACKTO9001 .
CLEAR GT_SELTAB.
CLEAR LS_SELTAB.
* CLEAR LV_CBDH.
CLEAR LS_PARM..
REFRESH: GT_SELTAB.
CLEAR LS_SELTAB.
* IF R_1 = 'X'.
* LS_SELTAB-SELNAME = 'R_1'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = 'X'.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_2'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_3'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_4'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_PARM-R_1 = 'X'.
* LS_PARM-R_2 = ''.
* LS_PARM-R_3 = ''.
* LS_PARM-R_4 = ''.
* ELSEIF R_2 = 'X'.
* LS_SELTAB-SELNAME = 'R_1'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_2'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = 'X'.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_3'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_4'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_PARM-R_1 = ''.
* LS_PARM-R_2 = 'X'.
* LS_PARM-R_3 = ''.
* LS_PARM-R_4 = ''.
*
* ELSEIF R_3 = 'X'.
* LS_SELTAB-SELNAME = 'R_1'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_2'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_3'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = 'X'.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_4'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_PARM-R_1 = ''.
* LS_PARM-R_2 = ''.
* LS_PARM-R_3 = 'X'.
* LS_PARM-R_4 = ''.
*
* ELSEIF R_4 = 'X'.
* LS_SELTAB-SELNAME = 'R_1'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_2'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_3'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = ''.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'R_4'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = 'X'.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_PARM-R_1 = ''.
* LS_PARM-R_2 = ''.
* LS_PARM-R_3 = ''.
* LS_PARM-R_4 = 'X'.
* ENDIF.
*
* LS_SELTAB-SELNAME = 'P_BSTKD'.
* LS_SELTAB-KIND = 'S'.
* LS_SELTAB-LOW = P_BSTKD.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'P_VBELN'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = P_VBELN.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'P_KUNNR'.
* LS_SELTAB-KIND = 'S'.
* LS_SELTAB-LOW = P_KUNNR.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_SELTAB-SELNAME = 'P_ZYWLX'.
* LS_SELTAB-KIND = 'P'.
* LS_SELTAB-LOW = P_ZYWLX.
* APPEND LS_SELTAB TO GT_SELTAB.
* CLEAR LS_SELTAB.
*
* LS_PARM-P_BSTKD = P_BSTKD.
* LS_PARM-P_VBELN = P_VBELN.
* LS_PARM-P_KUNNR = P_KUNNR.
* LS_PARM-P_ZYWLX = P_ZYWLX.
*
* EXPORT LS_PARM = LS_PARM TO MEMORY ID 'ZCW_CBD_PARM'.
SUBMIT ZFI_HKTZ WITH P_BSTKD IN P_BSTKD
WITH P_VBELN = P_VBELN
WITH P_ZYWLX = P_ZYWLX
WITH P_KUNNR IN P_KUNNR VIA SELECTION-SCREEN. "SELECTION-TABLE GT_SELTAB
"BACKTO
ENDFORM. " BACKTO9001
*&---------------------------------------------------------------------*
*& Module ZF4_WAERS INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZF4_WAERS INPUT.
ENDMODULE. " ZF4_WAERS INPUT
*&---------------------------------------------------------------------*
*& Form SCREEN_CONTROL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SCREEN_CONTROL .
CLEAR LS_PARM.
IMPORT LS_PARM = LS_PARM FROM MEMORY ID 'ZCW_CBD_PARM'.
IF NOT LS_PARM IS INITIAL.
R_1 = LS_PARM-R_1.
R_2 = LS_PARM-R_2.
R_3 = LS_PARM-R_3.
R_4 = LS_PARM-R_4.
P_BSTKD-LOW = LS_PARM-P_BSTKD.
P_VBELN = LS_PARM-P_VBELN.
P_KUNNR-LOW = LS_PARM-P_KUNNR.
P_ZYWLX = LS_PARM-P_ZYWLX.
FREE MEMORY ID 'ZCW_CBD_PARM'.
ENDIF.
ENDFORM. " SCREEN_CONTROL
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_LINE1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_LINE1 .
DATA L_LINE TYPE I.
DATA L_LINE1 TYPE I.
CLEAR L_LINE.
CLEAR L_LINE1.
GET CURSOR LINE L_LINE.
*index = tab1-top_line + c_line - 1.
L_LINE = L_LINE + TC_9001-TOP_LINE - 1.
IF L_LINE > 1.
L_LINE1 = L_LINE - 1.
READ TABLE GT_TBC INDEX L_LINE1 INTO GS_TBC1.
IF GS_TBC1-ZZT <> '已回款' .
MESSAGE '请按行项目顺序回款!' TYPE 'S' DISPLAY LIKE 'E'.
LEAVE TO SCREEN 9001.
ENDIF.
ENDIF.
ENDFORM. " FRM_CHECK_LINE1
*&---------------------------------------------------------------------*
*& Module ZGET_WRBTRS OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZGET_WRBTRS OUTPUT.
* DATA LV_SUM TYPE P DECIMALS 2.
LOOP AT GT_TBC.
GT_TBC-WRBTR2 = ( GT_TBC-ZJHBL / 100 ) * GS_ZHKTZ-NETWR.
GT_TBC-ZSJBL = ( GT_TBC-WRBTR3 / GS_ZHKTZ-NETWR ) * 100.
MODIFY GT_TBC.
CLEAR GT_TBC.
ENDLOOP.
*LEAVE TO SCREEN 9001.
ENDMODULE. " ZGET_WRBTRS OUTPUT
*&---------------------------------------------------------------------*
*& Module ZGET_WRBTR OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE ZGET_WRBTR OUTPUT.
DATA ZSUM1 TYPE ZHKTZ-WRBTR.
CLEAR ZSUM1.
LOOP AT GT_TBC.
ZSUM1 = ZSUM1 + GT_TBC-WRBTR3 .
ENDLOOP.
GS_ZHKTZ-WRBTR = GS_ZHKTZ-NETWR - ZSUM1.
ENDMODULE. " ZGET_WRBTR OUTPUT
*&---------------------------------------------------------------------*
*& Module UPDATE_ONTIME OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE UPDATE_ONTIME OUTPUT.
LOOP AT GT_TBC INTO GS_TBC.
MOVE-CORRESPONDING GS_TBC TO GS_ZHKTZ_MX.
MODIFY ZHKTZ_MX FROM GS_ZHKTZ_MX. " 修改,插入 操作
* MODIFY GT_TBC FROM GS_TBC TRANSPORTING ZZT WHERE FLAG = 'X'.
ENDLOOP.
GS_ZHKTZ-ZYWLX = P_ZYWLX.
MODIFY ZHKTZ FROM GS_ZHKTZ.
COMMIT WORK.
ENDMODULE. " UPDATE_ONTIME OUTPUT
*&---------------------------------------------------------------------*
*& Form CHECK_AUTHORITY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CHECK_AUTHORITY .
IF R_1 = 'X'.
AUTHORITY-CHECK OBJECT 'ZFI_HK' ID 'ZHK' FIELD '01'.
IF SY-SUBRC <> 0.
MESSAGE '您没有创建权限' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
ELSEIF R_2 = 'X'.
AUTHORITY-CHECK OBJECT 'ZFI_HK' ID 'ZHK' FIELD '02'.
IF SY-SUBRC <> 0.
MESSAGE '您没有修改权限' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
ELSEIF R_3 = 'X'.
AUTHORITY-CHECK OBJECT 'ZFI_HK' ID 'ZHK' FIELD '03'.
IF SY-SUBRC <> 0.
MESSAGE '您没有显示权限' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
ELSEIF R_4 = 'X'.
AUTHORITY-CHECK OBJECT 'ZFI_HK' ID 'ZHK' FIELD '04'.
IF SY-SUBRC <> 0.
MESSAGE '您没有回款权限' TYPE 'E' DISPLAY LIKE 'S'.
ENDIF.
ENDIF.
ENDFORM. " CHECK_AUTHORITY