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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:需要供应商区分权限, 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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值