VA01/VA02/VA03/VA05 销售订单根据权限隐藏价格

权限驱动:SAP销售订单价格字段隐藏与权限检查

1、业务需求

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

2、增强实现

2.1自定义权限对象

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

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

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

在程序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.

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

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

    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.
"--------------------@斌将军--------------------

效果如下

2.3、隐藏条件页签价格

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

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

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

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

 参考代码

"--------------------@斌将军--------------------
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.

......


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

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

    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
"--------------------@斌将军--------------------

效果如下

抬头条件页签

行项目条件页签

2.4、VA05隐藏价格

VA05报表

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

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

定期更文,欢迎关注

在SAP系统中,销售订单(如使用事务代码VA05查看的订单)中的价格字段控制可以通过权限配置实现隐藏。这种控制主要通过字段选择(Field Selection)和权限对象(Authorization Object)来实现。 ### 字段选择控制 SAP允许通过字段选择来控制某些字段是否可见或可编辑。对于销售订单中的价格信息,可以基于用户角色的不同设置不同的显示规则。这通常通过维护`VOFA`(用于销售订单字段选择组)来实现。具体步骤包括: 1. 使用事务代码`VOFA`进入字段选择配置界面。 2. 为特定的角色或用户组定义字段属性,例如将价格字段设置为“隐藏”。 3. 保存配置后,相关用户在查看订单时将无法看到价格信息。 ### 权限对象控制 除了字段选择外,还可以利用权限对象进行更细粒度的控制。与销售订单相关的权限对象主要包括`V_VBAK_AAT`(用于控制对销售订单抬头数据的访问)和`V_VBAP_AAT`(用于控制对销售订单行项目数据的访问)。通过这些权限对象,可以限制用户对价格字段的访问[^1]。 - **V_VBAK_AAT**:此权限对象用于控制抬头级别的数据访问权限,例如订单金额等。 - **V_VBAP_AAT**:此权限对象用于控制行项目级别的数据访问权限,例如单价、数量等。 在实际配置中,可以通过以下步骤设置权限: 1. 使用事务代码`PFCG`进入角色维护界面。 2. 创建或修改一个角色,并分配相应的权限对象。 3. 在权限对象中,设置字段值范围,例如将价格字段的访问权限设为不允许读取。 4. 将该角色分配给需要限制的用户。 ### 示例配置 以下是一个简单的权限配置示例,展示如何通过`PFCG`设置权限隐藏价格字段: ```plaintext Role: Z_SALES_ORDER_NO_PRICE Authorization Objects: V_VBAK_AAT: ACTVT = "03" (Display) VBELN = "*" (All Orders) ERDAT = "*" (All Dates) ... AEDAT = "*" (All Dates) KUNNR = "*" (All Customers) ... NETWR = "-" (Exclude all values, effectively hiding the field) V_VBAP_AAT: ACTVT = "03" (Display) VBELN = "*" (All Orders) POSNR = "*" (All Items) ... MATNR = "*" (All Materials) ... NETPR = "-" (Exclude all values, effectively hiding the field) ``` 在此配置中,`NETWR`(订单金额)和`NETPR`(单价)字段被设置为排除所有值,这意味着用户无法看到这些字段的数据。 ### 注意事项 1. **测试环境验证**:在生产环境中实施此类更改之前,建议先在测试环境中验证配置效果。 2. **权限冲突处理**:如果存在多个权限对象或字段选择规则,可能会导致权限冲突。应仔细检查所有相关配置以确保一致性。 3. **用户反馈**:实施后应收集用户反馈,确认价格字段确实被隐藏且不影响其他功能的正常使用。 通过上述方法,可以在销售订单根据用户权限动态隐藏价格字段,从而满足不同用户群体的需求并保护敏感信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值