TABLE CONTROL 开发实例

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

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
  
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值