ALV报表 - 某单元格可编辑

相关代码内容:

内表中定义STYLE TYPE LVC_T_STYL,  "设置编辑状态字段

定义所需表和工作区 DATA:GS_STYLE TYPE LVC_S_STYL,
                                            GT_STYLE TYPE LVC_T_STYL.

GT_STYLE赋值 GS_STYLE-FIELDNAME = 'AUFNR'.
  GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED."设置为不可编辑
  INSERT GS_STYLE INTO TABLE GT_STYLE.

将GT_STYLE存入定义的字段STYLE

INSERT LINES OF GT_STYLE INTO TABLE GT_TAB-STYLE.

满足某些条件时,将字段STYLE的值在内表中更新

MODIFY GT_TAB TRANSPORTING STYLE WHERE MATNR <> '000000000011000007'.

在LAYOUT组件中的STYLEFNAME也设置为STYLE

GS_LAYOUT-STYLEFNAME = 'STYLE'. "指定保存编辑状态的字段名

FIELDCAT显示样式中对应可编辑字段标记上 'X'

FILL_FIELD:'AUFNR'   '生产订单'      '' '' 'X' '' '' ''.

ALV完整代码:

REPORT ZMYDEMO010.

TYPE-POOLS:SLIS,ICON.

TABLES:MAKT,MARC,AFPO.

DATA:GS_LAYOUT    TYPE LVC_S_LAYO,
     GT_FIELDCAT  TYPE TABLE OF LVC_S_FCAT,
     GS_FIELDCAT  TYPE LVC_S_FCAT.

TYPES:BEGIN OF TY_TAB,
        AUFNR TYPE AFPO-AUFNR, "生产订单号
        WERKS TYPE MARC-WERKS, "工厂
        MATNR TYPE AFPO-MATNR, "物料号
        MAKTX TYPE MAKT-MAKTX, "物料描述
        SEL   TYPE C,          "选择
        STATU TYPE CHAR10,     "红绿灯

        STYLE TYPE LVC_T_STYL,  "设置编辑状态字段

      END OF TY_TAB.
DATA:GT_TAB TYPE TABLE OF TY_TAB WITH HEADER LINE.
DATA:GT_MAKT TYPE TABLE OF MAKT WITH HEADER LINE.

DATA:GS_STYLE TYPE LVC_S_STYL,
     GT_STYLE TYPE LVC_T_STYL.

DEFINE FILL_FIELD.
  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME     = &1.  "字段的名字(内表中定义的字段名)
  GS_FIELDCAT-SCRTEXT_L     = &2.  "字段的文本描述,输出时候显示。长描述
  GS_FIELDCAT-QFIELDNAME    = &3.  "计量单位字段名,例如如值EA对应的字段名
  GS_FIELDCAT-NO_ZERO       = &4.  "如果取值为零,则为空,既不输出零。
  GS_FIELDCAT-EDIT          = &5.  "当前列可编辑
  GS_FIELDCAT-REF_TABLE     = &6.  "该字段的参考表
  GS_FIELDCAT-REF_FIELD     = &7.  "该字段的参考字段
  GS_FIELDCAT-CHECKBOX      = &8.  "选择框
*  GS_FIELDCAT-ICON          = 'X'.  "图标功能
  APPEND GS_FIELDCAT TO GT_FIELDCAT.
END-OF-DEFINITION.

SELECTION-SCREEN:BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS:P_WERKS TYPE MARC-WERKS OBLIGATORY DEFAULT '1101'. "工厂
SELECT-OPTIONS:
           S_ERDAT FOR SY-DATUM DEFAULT SY-DATUM,
           S_MATNR FOR AFPO-MATNR.       "物料号
SELECTION-SCREEN:END OF BLOCK B1.

INITIALIZATION.

START-OF-SELECTION.
  PERFORM FRM_GET_DATA.
  PERFORM FRM_DIS_DATA.

END-OF-SELECTION.

FORM FRM_GET_DATA.

  SELECT AFPO~AUFNR AFPO~MATNR MARC~WERKS MAKT~MAKTX
    INTO CORRESPONDING FIELDS OF TABLE GT_TAB
    FROM AFPO INNER JOIN MAKT ON AFPO~MATNR = MAKT~MATNR
              INNER JOIN MARC ON AFPO~MATNR = MARC~MATNR UP TO 10 ROWS
      WHERE MARC~WERKS = P_WERKS
        AND AFPO~MATNR IN S_MATNR.

    LOOP AT GT_TAB.
    "红绿灯判断赋值
      IF SY-SUBRC = 0.
          GT_TAB-STATU = ICON_LED_GREEN.
         ELSE.
          GT_TAB-STATU = ICON_LED_RED.
      ENDIF.
    MODIFY GT_TAB.
  ENDLOOP.

  GS_STYLE-FIELDNAME = 'AUFNR'.
  GS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED."设置为不可编辑
  INSERT GS_STYLE INTO TABLE GT_STYLE.

  INSERT LINES OF GT_STYLE INTO TABLE GT_TAB-STYLE.
* 将第五行的之外所有行的AUFNR字段都设置成不能输入
*  DO 10 TIMES.
*    IF SY-INDEX <> 5.
*      MODIFY GT_TAB INDEX SY-INDEX TRANSPORTING STYLE.
*    ENDIF.
*  ENDDO.
* 将不满足某些条件时的AUFNR字段设置为不能输入
MODIFY GT_TAB TRANSPORTING STYLE WHERE MATNR <> '000000000011000007'.

ENDFORM.

FORM FRM_DIS_DATA.
  CLEAR:GS_LAYOUT.
  GS_LAYOUT-CWIDTH_OPT = 'X'. "自动优化列宽
  GS_FIELDCAT-EDIT     = 'X'.
*默认选择框 不需要在FILL_FIELD中添加SEL
  GS_LAYOUT-BOX_FNAME  = 'SEL'.
*勾选型选择框
*  GS_FIELDCAT-FIELDNAME = 'SEL'.
*  GS_FIELDCAT-CHECKBOX = 'X'.

*  GS_LAYOUT-EDIT     = 'X'.       "将整个ALV设置成可编辑
  GS_LAYOUT-STYLEFNAME = 'STYLE'. "指定保存编辑状态的字段名

  REFRESH GT_FIELDCAT.
*  FILL_FIELD:'SEL'     '选择'          '' '' 'X' '' '' 'X'.
  FILL_FIELD:'AUFNR'   '生产订单'      '' '' 'X' '' '' ''.
  FILL_FIELD:'MATNR'   '物料号'        '' '' '' 'AFPO' 'MATNR' ''.
  FILL_FIELD:'MAKTX'   '物料描述'      '' '' '' '' '' ''.
  FILL_FIELD:'STATU'   '红绿灯'        '' '' '' '' '' ''.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_GRID_TITLE             = '订单和物料信息'
      I_CALLBACK_PROGRAM       = SY-REPID
      I_CALLBACK_PF_STATUS_SET = 'FRM_STATUS'  "调用GUI状态
*      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'  "调用屏幕点击事件
      IS_LAYOUT_LVC            = GS_LAYOUT
      IT_FIELDCAT_LVC          = GT_FIELDCAT[]
      I_DEFAULT                = 'X'
      I_SAVE                   = 'A'
    TABLES
      T_OUTTAB                 = GT_TAB[]
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
ENDFORM.

"将ALV上手填的数据保存到内表
FORM FRM_SAVE.
  DATA: LR_GRID TYPE REF TO CL_GUI_ALV_GRID.
  DATA: L_VALID TYPE C.
  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = LR_GRID.

  CALL METHOD LR_GRID->CHECK_CHANGED_DATA
    IMPORTING
      E_VALID = L_VALID.
ENDFORM.

"GUI状态
FORM FRM_STATUS USING LT_EXTAB.
  SET PF-STATUS 'STANDARD'.
ENDFORM.

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值