TABLE CONTROL 开发实例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_41641081/article/details/100011155

屏幕设计:
在这里插入图片描述
在这里插入图片描述
逻辑流:

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

猜你喜欢

转载自blog.csdn.net/weixin_41641081/article/details/100011155
今日推荐