根据某些条件在Alvs中编辑一个单元格

2020-09-07 03:59发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我的要求是:

必须*使用alv网格*编辑一个单元格,例如:如果 Netpr> 100 (值)。 应该处于可编辑模式,其余单元格处于不可编辑模式。 请让我知道怎么做,

获得最佳答案

重获

Fareedas。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我的要求是:

必须*使用alv网格*编辑一个单元格,例如:如果 Netpr> 100 (值)。 应该处于可编辑模式,其余单元格处于不可编辑模式。 请让我知道怎么做,

获得最佳答案

重获

Fareedas。

付费偷看设置
发送
4条回答
天桥码农
1楼 · 2020-09-07 04:49.采纳回答

您好Fareedas,

以下程序演示了如何使ALV网格的各个字段可编辑(NetPR大于10)。 基本ALV网格所需的更改包括向ALV网格数据表(it_ekko)添加新字段,使用样式属性填充此字段以及向布局控制表添加条目。 同样,从本网站上的先前示例中,您还需要更改字段目录的数据类型,布局并使用其他功能模块来显示报告


 *&------------------------------------------------  --------------------- *
 *&报告ZDEMO_ALVGRID_EDIT *
 *&*
 *&------------------------------------------------  --------------------- *
 *&*
 *&简单的ALV网格报表示例*
 *&................................... *
 *&*
 *&基本的ALV网格,已增强,可将特定字段显示为*
 *&可根据字段值进行编辑*
 *&------------------------------------------------  --------------------- *
 
 报告ZDEMO_ALVGRID_EDIT。
 
 桌子:ekko。
 
 TYPE-POOLS:slis。  " ALV声明
 *数据声明
 * ----------------
 类型:t_ekko的开始,
   ebeln TYPE ekpo-ebeln,
   ebelp TYPE ekpo-ebelp,
   statu TYPE ekpo-statu,
   aedat TYPE ekpo-aedat,
   matnr TYPE ekpo-matnr,
   menge TYPE ekpo-menge,
   类型ekpo-meins,
   netpr TYPE ekpo-netpr,
   peinh TYPE ekpo-peinh,
   field_style TYPE lvc_t_styl,"禁用"
  t_ekko的结尾。
 
 数据:t_ekko初始大小为0的it_ekko类型标准表,
       wa_ekko TYPE t_ekko。
 
 * ALV数据声明
 数据:带标题行的fieldcatalog类型slis_t_fieldcat_alv。
 数据:it_fieldcat TYPE lvc_t_fcat," slis_t_fieldcat_alv WITH HEADER LINE"
       wa_fieldcat TYPE lvc_s_fcat,
 
       gd_tab_group TYPE slis_t_sp_group_alv,
       gd_layout TYPE lvc_s_layo," slis_layout_alv,
       gd_repid就像sy-repid。
 
 
 ******************************************************  **********************
 *选择开始。
 选择开始。
 
   执行data_retrieval。
   PERFORM set_specific_field_attributes。
   执行build_fieldcatalog。
   执行build_layout。
   执行display_alv_report。
 
 
 *&------------------------------------------------  --------------------- *
 *&表格BUILD_FIELDCATALOG
 *&------------------------------------------------  --------------------- *
 *为ALV报告建立Fieldcatalog
 * -------------------------------------------------  --------------------- *
 表格build_fieldcatalog。
 
   wa_fieldcat-fieldname ='EBELN'。
   wa_fieldcat-scrtext_m ='采购订单'。
   wa_fieldcat-col_pos = 0。
   wa_fieldcat-outputlen = 10。
   wa_fieldcat-emphasize ='X'。
   wa_fieldcat-key ='X'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='EBELP'。
   wa_fieldcat-scrtext_m ='采购订单'。
   wa_fieldcat-col_pos = 1。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='STATU'。
   wa_fieldcat-scrtext_m ='状态'。
   wa_fieldcat-col_pos = 2。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='AEDAT'。
   wa_fieldcat-scrtext_m ='商品更改日期'。
   wa_fieldcat-col_pos = 3。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='MATNR'。
   wa_fieldcat-scrtext_m ='物料号'。
   wa_fieldcat-col_pos = 4。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='MENGE'。
   wa_fieldcat-scrtext_m ='采购量'。
   wa_fieldcat-col_pos = 5。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='MEINS'。
   wa_fieldcat-scrtext_m ="订单单位"。
   wa_fieldcat-col_pos = 6。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='NETPR'。
   wa_fieldcat-scrtext_m ='净价'。
   wa_fieldcat-edit ='X'。  "将整个列设置为可编辑
   wa_fieldcat-col_pos = 7。
   wa_fieldcat-outputlen = 15。
   wa_fieldcat-datatype ='CURR'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 
   wa_fieldcat-fieldname ='PEINH'。
   wa_fieldcat-scrtext_m ='价格单位'。
   wa_fieldcat-col_pos = 8。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 ENDFORM。  " BUILD_FIELDCATALOG
 
 
 *&------------------------------------------------  --------------------- *
 *&表格BUILD_LAYOUT
 *&------------------------------------------------  --------------------- *
 *为ALV网格报表构建布局
 * -------------------------------------------------  --------------------- *
 FORM build_layout。
 *设置字段属性的布局字段(即输入/输出)
   gd_layout-stylefname ='FIELD_STYLE'。
   gd_layout-zebra ='X'。
 ENDFORM。  " BUILD_LAYOUT
 
 
 *&------------------------------------------------  --------------------- *
 *&表格DISPLAY_ALV_REPORT
 *&------------------------------------------------  --------------------- *
 *使用ALV网格显示报告
 * -------------------------------------------------  --------------------- *
 FORM display_alv_report。
   gd_repid = sy-repid。
 
 *调用函数" REUSE_ALV_GRID_DISPLAY"
   通话功能'REUSE_ALV_GRID_DISPLAY_LVC'
        出口
             i_callback_program = gd_repid
 * i_callback_user_command ='USER_COMMAND'
             is_layout_lvc = gd_layout
             it_fieldcat_lvc = it_fieldcat
             i_save ='X'
        桌子
             t_outtab = it_ekko
        例外情况
             程序错误= 1
             其他= 2。
   如果sy-subrc <> 0。
 *消息ID SY-MSGID类型SY-MSGTY编号SY-MSGNO
 *与SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4。
   万一。
 ENDFORM。  " DISPLAY_ALV_REPORT
 
 
 *&------------------------------------------------  --------------------- *
 *&表格DATA_RETRIEVAL
 *&------------------------------------------------  --------------------- *
 *从EKPO表中检索数据并填充itab it_ekko
 * -------------------------------------------------  --------------------- *
 FORM data_retrieval。
   SELECT ebeln ebelp statu aedat matnr menge meins netpr peinh
    最多10行
     从ekpo
     表it_ekko的相应字段。
 
 ENDFORM。  " DATA_RETRIEVAL
 
 
 *&------------------------------------------------  --------------------- *
 *&形式set_specific_field_attributes
 *&------------------------------------------------  --------------------- *
 *使用特定的字段属性填充FIELD_STYLE表
 * -------------------------------------------------  --------------------- *
 形式为set_specific_field_attributes。
   数据ls_stylerow类型lvc_s_styl。
   数据lt_styletab类型lv_t_styl。
 
 *使用样式属性填充样式变量(FIELD_STYLE)
 *
 * NETPR字段/列已在字段目录中设置为可编辑...
 *如果" NETPR",以下代码将其设置为禁用(仅显示)
 *大于10。
   环聊it_ekko INTO wa_ekko。
     如果wa_ekko-netpr GT 10。
       ls_stylerow-fieldname ='NETPR'。
       ls_stylerow-style = cl_gui_alv_grid => mc_style_disabled。
                                              "将字段设置为禁用
       附加ls_stylerow到wa_ekko-field_style。
       从wa_ekko修改it_ekko。
     万一。
   结局。
 
 最终形式。  " set_specific_field_attributes


 

检查上面的代码。

有关使用ABAP OO的示例代码,请检查程序BCALV_EDIT_02。

希望这会有所帮助。

Rwd点(如果有帮助)。

谢谢

巴拉吉

jovirus
2楼-- · 2020-09-07 04:40

感谢巴拉吉,您在这篇文章中的回复对我来说:=)效果很好!

Nan4612
3楼-- · 2020-09-07 04:46

你好法里达

您需要了解的所有信息都可以在示例报告BCALV_EDIT_02中找到。 该报告的文档如下所示:

 程序BCALV_EDIT_02。
 * &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&的&
 *目的:
 * ~~~~~~~~~
 *此报告说明了如何设置
 * ALV网格控件可编辑。  (有关概述,请参见BCALV_EDIT_01
 *可能的状态)。
 *备注:您可以使用字段设置所选列的状态
 *编辑字段目录,请参阅BCALV_EDIT_03。
 * -------------------------------------------------  ----------------
 *检查程序行为
 * ~~~~~~~~~~~~~~~~~~~~~~~~~
 *切换到可编辑状态并准备输入。
 *然后您可以更改
 *飞机容量大于或等于的航班价格
 *超过300个席位。
 * -------------------------------------------------  ----------------
 *基本步骤(搜索"§")
 * ~~~~~~~~~~~~~~~
 * 1.在输出表中扩展一个字段,例如CELLTAB
 *有关每个单元格的编辑状态的信息
 *对应的行(表类型为SORTED!)。
 * 2.选择数据后,为循环中的每一行设置编辑状态
 *根据SEATSMAX字段。
 * 2a。使用属性CL_GUI_ALV_GRID => MC_STYLE_ENABLED设置单元格
 *状态为"可编辑"。
 * 2b。使用属性CL_GUI_ALV_GRID => MC_STYLE_DISABLED设置单元格
 *状态为"不可编辑"。
 * 2c。将您的单元格标签复制到gt_outtab的当前行的单元格标签中。
 * 3.通过使用栏位来提供celltab栏位的栏位名称
 * STYLEFNAME的布局结构。
 * &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&的&
 

致谢

乌威

wang628962
4楼-- · 2020-09-07 04:27

嗨,专家

我的问题已解决,谢谢大家。 正在关闭紧张的事情...

致谢

Fareedas

编辑:Fareeda Tabassum S在2008年3月28日下午12:06

一周热门 更多>