VA01VA02VA03VA05销售订单根据权限隐藏价格

作者:斌将军 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:SD, 销售分销
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

针对用户使用销售订单时,判断是否有权限,没有权限时隐藏销售订单抬头和行项目的价格相关字段

## 2.1自定义权限对象

SE11创建一个带域的数据元素ZECHECK,SU21自定义权限对象:ZCONDMANT,校验ZCHECK = M 为有权限

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

## 2.2、隐藏抬头和行项目价格

隐藏抬头和行项目表格中的净值和净价字段

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

在程序MV45AFZZ→USEREXIT_FIELD_MODIFICATION中写隐式增强

"--------------------@斌将军--------------------FORM USEREXIT_FIELD_MODIFICATION.

• CASE SCREEN-GROUP3.* WHEN '900'.* IF VBAK-VBTYP NE IF_SD_DOC_CATEGORY=>INQUIRY.* SCREEN-ACTIVE = 0.* ENDIF.* ENDCASE.

• CASE SCREEN-NAME.* WHEN 'VBAK-VBELN'.* SCREEN-ACTIVE = 0.* ENDCASE.

""""""""""""""""""""""""""""""""""""""""""""""""""*$*$-Start: (1)-----------------------------------ENHANCEMENT 1 ZSD_VA01_PRICE. "active version

IF sy-tcode = 'VA01' OR sy-tcode = 'VA02' OR sy-tcode = 'VA03'. IF screen-name = 'VBAK-NETWR' OR "抬头 净值 screen-name = 'VBAK-WAERK' OR "抬头 货币* screen-name = 'RV45A-KOEIN' OR "项目 货币 screen-name = 'VBAP-NETPR' OR "项目 净价 screen-name = 'VBAP-NETWR' "OR "项目 净值* screen-name = 'VBAP-WAERK' OR "项目 SD 凭证货币 . AUTHORITY-CHECK OBJECT 'ZCONDMANT' ID 'ZCHECK' FIELD 'M'. IF sy-subrc <> 0."没有权限 screen-active = 0. MODIFY SCREEN. ENDIF. ENDIF. ENDIF.ENDENHANCEMENT.*$*$-End: (1)-----------------------------------ENDFORM."--------------------@斌将军--------------------

效果如下

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

## 2.3、隐藏条件页签价格

还需要隐藏抬头和行项目的条件页签中的价格数据

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

在程序LV69AF01→TCTRL_KONDITIONEN_INIT中写隐式增强。

**此处的隐式增强必须写在FORM的末尾隐式增强点处,不能写在FORM开头的隐式增强点处。**

因为抬头和行项目的条件页签都是调用了这段相同的代码,在第一次进入会对tctrl_konditionen进行重置,导致增强代码不起作用,所以要将增强代码写在FORM末尾

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

参考代码

"--------------------@斌将军--------------------FORM tctrl_konditionen_init. DATA: da_tfill LIKE sy-tabix.

• Refresh table control if screen number has changed STATICS: last_dynnr TYPE dynnr. IF sy-dynnr NE last_dynnr AND gf_called_by_lord IS INITIAL. last_dynnr = sy-dynnr. REFRESH CONTROL 'tctrl_konditionen' FROM SCREEN sy-dynnr. ENDIF.

DESCRIBE TABLE xkomv LINES da_tfill.

......

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""*$*$-Start: (1)--------------------------------------------ENHANCEMENT 1 ZSD_VA01_ITEM_PRICE. "active version

IF sy-tcode = 'VA01' OR sy-tcode = 'VA02' OR sy-tcode = 'VA03'.

AUTHORITY-CHECK OBJECT 'ZCONDMANT' ID 'ZCHECK' FIELD 'M'. IF sy-subrc <> 0."没有权限

"隐藏净值、税收字段 LOOP AT SCREEN. IF screen-name = 'KOMP-NETWR' OR screen-name = 'KOMP-MWSBP'. screen-active = 0. MODIFY SCREEN. ENDIF. ENDLOOP.

"隐藏表格中金额、定价值字段 LOOP AT tctrl_konditionen-cols INTO DATA(lv_acol). IF lv_acol-screen-name EQ 'KOMV-KBETR' OR lv_acol-screen-name EQ 'KOMV-KWERT'. lv_acol-invisible = 1. MODIFY tctrl_konditionen-cols FROM lv_acol INDEX sy-tabix. ENDIF. ENDLOOP. ENDIF. ENDIF.ENDENHANCEMENT.*$*$-End: (1)---------------------------------------------ENDFORM. "tctrl_konditionen_init"--------------------@斌将军--------------------

效果如下:

抬头条件页签

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

行项目条件页签

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

## 2.4、VA05隐藏价格

VA05报表

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

在程序CL_SALV_GUI_OM_ADPT_FULLSCREENCM004中,找到filedcat列表的获取方法

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图

在获取之后用隐式增强删除fieldcat表中抬头和行项目的净值字段,就可以隐藏价格

VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
VA01VA02VA03VA05销售订单根据权限隐藏价格 - 封面图
斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「VA01VA02VA03VA05销售订单根据权限隐藏价格.md」整理生成,仅用于内部技术分享与学习交流。