屏幕设计:
逻辑流:
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