批量更改BP供应商供应商账户组

文章描述了一种情况,需要在A部门权限限制下对数千家供应商的账户组进行管理,通过查找标准权限对象F_LFA1_GRP并编写程序来统一更新供应商信息,包括显示、编辑权限。过程中涉及到数据库操作、API调用和错误处理策略。
摘要由CSDN通过智能技术生成

原因:需要供应商区分权限, A部门只能维护显示一部分供应商, 找到了供应商账户组,标准权限对象F_LFA1_GRP, 可按账户组控制显示, 编辑, F4列表等;

账户组有关联编号规则, 但标准功能也是可以更改, 不过因为涉及的供应商几千个, 所以写了一个程序统一更新如下:

*&---------------------------------------------------------------------*
*& Report ZBMM_001_CHG_KTOKK
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zbmm_001_chg_ktokk.

TABLES: lfa1.

DATA: BEGIN OF gs_err,
        id    TYPE int4,
        lifnr TYPE lfa1-lifnr,
        typ   TYPE c,
        msg   TYPE string,
      END OF gs_err,
      gt_err LIKE TABLE OF gs_err.



SELECT-OPTIONS: s_lifnr FOR lfa1-lifnr.
PARAMETERS: p_ktokk TYPE lfa1-ktokk.


DATA ls_main TYPE vmds_ei_main.
DATA lt_vendors TYPE vmds_ei_extern_t.
DATA ls_vendors TYPE vmds_ei_extern.
DATA: l1 TYPE vmds_ei_main,
      l2 TYPE cvis_message,
      l3 TYPE vmds_ei_main,
      l4 TYPE cvis_message.


LOOP AT s_lifnr[] INTO DATA(ls).

  CLEAR: ls_main,
         ls_vendors,
         lt_vendors.

  CLEAR: l1,
         l2,
         l3,
         l4.

* 供应商表头
  ls_vendors-header-object_instance-lifnr = ls-low.     "供应商
  ls_vendors-header-object_task = 'M'.                   "创建/更改

  ls_vendors-central_data-central-data-ktokk = p_ktokk.
  ls_vendors-central_data-central-datax-ktokk = 'X'.

  APPEND ls_vendors TO lt_vendors.
  CLEAR ls_vendors.

  ls_main-vendors = lt_vendors.

* 创建或者更新供应商
  CALL METHOD vmd_ei_api=>maintain_direct_input
    EXPORTING
      is_master_data           = ls_main
    IMPORTING
      es_master_data_correct   = l1
      es_message_correct       = l2
      es_master_data_defective = l3
      es_message_defective     = l4.


  gs_err-lifnr = ls-low.

  IF l4-is_error = ''.
    gs_err-typ = 'S'.
    gs_err-msg  = 'Success'.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

  ELSE.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.


    READ TABLE l4-messages INTO DATA(ls_message) WITH KEY type = 'E'.
    IF sy-subrc = 0.
      MESSAGE ID ls_message-id
              TYPE ls_message-type
              NUMBER ls_message-number
              WITH  ls_message-message_v1
                    ls_message-message_v2
                    ls_message-message_v3
                    ls_message-message_v4
              INTO gs_err-msg.

    ENDIF.
    gs_err-typ = 'E'.



  ENDIF.
  APPEND gs_err TO gt_err.
  CLEAR gs_err.

ENDLOOP.

PERFORM display_tab USING gt_err.


FORM display_tab  USING    pTAB LIKE gt_err.

  DATA: lt_fieldcat TYPE  lvc_t_fcat,
        ls_layout   TYPE  lvc_s_layo,
        v_title     TYPE  lvc_title.

  CHECK ptab  IS NOT INITIAL.


  v_title = '导入结果信息'.
  ls_layout-zebra = 'X'.





  PERFORM get_error_fieldcat CHANGING lt_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_grid_title          = v_title
      i_screen_start_column = 5
      i_screen_start_line   = 5
      i_screen_end_column   = 100
      i_screen_end_line     = 80
      it_fieldcat_lvc       = lt_fieldcat
      is_layout_lvc         = ls_layout
    TABLES
      t_outtab              = gt_err
    EXCEPTIONS
      program_error         = 1
      OTHERS                = 2.


ENDFORM.

FORM get_error_fieldcat CHANGING ptab TYPE  lvc_t_fcat.

  FIELD-SYMBOLS <fs> LIKE LINE OF ptab.


  CLEAR ptab.

  CALL FUNCTION 'ZAKE_TRANS_TAB_TO_FIELDCAT'
    TABLES
      tab       = gt_err
      itab_fcat = ptab.


  LOOP AT ptab ASSIGNING <fs>.


    CASE <fs>-fieldname.


      WHEN 'LIFNR'.
        <fs>-scrtext_s = <fs>-scrtext_m = <fs>-scrtext_l = '供应商'.


      WHEN 'TYP'.
        <fs>-scrtext_s = <fs>-scrtext_m = <fs>-scrtext_l = '类型'.
        <fs>-col_opt = 'X'.

      WHEN 'MSG'.
        <fs>-scrtext_s = <fs>-scrtext_m = <fs>-scrtext_l = '信息'.
        <fs>-col_opt = 'X'.

      WHEN OTHERS.

    ENDCASE.
  ENDLOOP.

ENDFORM.                    "get_error_fieldcat

完成后与到一个问题, 提示不允许更新供应商账户组, 加了一个隐式增强点更改了参数, 完成。

 

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!关于SAP BP供应商屏幕控制的问题,我可以为您提供一些基本信息。在SAP系统中,BP代表“Business Partner”,也就是业务伙伴。供应商是一种特定类型的业务伙伴。 在SAP系统中,通过使用合适的访问权限和角色,可以对BP供应商屏幕进行控制。这意味着您可以限制用户访问、编辑或查看供应商相关信息的权限。 要进行BP供应商屏幕控制,您可以考虑以下几个步骤: 1. 定义用户角色:通过SAP的角色管理功能,您可以创建不同的用户角色。根据用户的职责和需求,可以为不同的角色分配不同的权限。 2. 分配访问权限:在角色定义后,您可以将相应的访问权限授予用户。这样,他们只能访问和操作与其角色相关的屏幕和功能。 3. 屏幕布局配置:SAP系统允许您配置屏幕布局,以满足特定用户需求。您可以根据用户角色和工作流程,自定义屏幕布局,只显示与其工作相关的字段和选项。 4. 数据维护:通过SAP BP供应商主数据维护功能,您可以控制用户对供应商数据的编辑权限。您可以定义不同的字段和字段级别权限,以限制用户对供应商信息的修改。 这些是一些常见的控制BP供应商屏幕的方法。具体的实施步骤可能因SAP系统版本和配置而有所不同。建议您参考SAP官方文档或与您所在织的SAP管理员或技术支持团队联系,以获取更详细和针对性的指导。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值