基于Excel的SAP角色快速复制

119 篇文章 9 订阅
103 篇文章 14 订阅
FUNCTION ZRFC_BC_ROLE_DEL.
*"--------------------------------------------------------------------
*"*"局部接口:
*"  IMPORTING
*"     VALUE(CTU) LIKE  APQI-PUTACTIVE DEFAULT 'X'
*"     VALUE(MODE) LIKE  APQI-PUTACTIVE DEFAULT 'N'
*"     VALUE(UPDATE) LIKE  APQI-PUTACTIVE DEFAULT 'L'
*"     VALUE(GROUP) LIKE  APQI-GROUPID OPTIONAL
*"     VALUE(USER) LIKE  APQI-USERID OPTIONAL
*"     VALUE(KEEP) LIKE  APQI-QERASE OPTIONAL
*"     VALUE(HOLDDATE) LIKE  APQI-STARTDATE OPTIONAL
*"     VALUE(NODATA) LIKE  APQI-PUTACTIVE DEFAULT '/'
*"     VALUE(AGR_NAME_NEU_001) LIKE  BDCDATA-FVAL DEFAULT ''
*"  EXPORTING
*"     VALUE(SUBRC) LIKE  SYST-SUBRC
*"  TABLES
*"      MESSTAB STRUCTURE  BDCMSGCOLL OPTIONAL
*"--------------------------------------------------------------------

subrc = 0.

perform bdc_nodata      using NODATA.

perform open_group      using GROUP USER KEEP HOLDDATE CTU.

perform bdc_dynpro      using 'SAPLPRGN_TREE' '0121'.
perform bdc_field       using 'BDC_CURSOR'
                              'AGR_NAME_NEU'.
perform bdc_field       using 'BDC_OKCODE'
                              '=DELE'.
perform bdc_field       using 'AGR_NAME_NEU'
                              AGR_NAME_NEU_001.
perform bdc_dynpro      using 'SAPLSPO1' '0500'.
perform bdc_field       using 'BDC_OKCODE'
                              '=OPT1'.
perform bdc_dynpro      using 'SAPMSSY0' '0120'.
perform bdc_field       using 'BDC_OKCODE'
                              '=DBAC'.
perform bdc_transaction tables messtab
using                         'PFCG'
                              CTU
                              MODE
                              UPDATE.
if sy-subrc <> 0.
  subrc = sy-subrc.
  exit.
endif.

perform close_group using     CTU.





ENDFUNCTION.

FUNCTION ZRFC_BC_ROLE_MODDESC .
*"----------------------------------------------------------------------
*"*"局部接口:
*"  IMPORTING
*"     VALUE(CTU) LIKE  APQI-PUTACTIVE DEFAULT 'X'
*"     VALUE(MODE) LIKE  APQI-PUTACTIVE DEFAULT 'N'
*"     VALUE(UPDATE) LIKE  APQI-PUTACTIVE DEFAULT 'L'
*"     VALUE(GROUP) LIKE  APQI-GROUPID OPTIONAL
*"     VALUE(USER) LIKE  APQI-USERID OPTIONAL
*"     VALUE(KEEP) LIKE  APQI-QERASE OPTIONAL
*"     VALUE(HOLDDATE) LIKE  APQI-STARTDATE OPTIONAL
*"     VALUE(NODATA) LIKE  APQI-PUTACTIVE DEFAULT '/'
*"     VALUE(AGR_NAME_NEU_001) LIKE  BDCDATA-FVAL DEFAULT ''
*"     VALUE(TEXT_002) LIKE  BDCDATA-FVAL DEFAULT ''
*"  EXPORTING
*"     VALUE(SUBRC) LIKE  SYST-SUBRC
*"  TABLES
*"      MESSTAB STRUCTURE  BDCMSGCOLL OPTIONAL
*"----------------------------------------------------------------------

subrc = 0.

perform bdc_nodata      using NODATA.

perform open_group      using GROUP USER KEEP HOLDDATE CTU.

perform bdc_dynpro      using 'SAPLPRGN_TREE' '0121'.
perform bdc_field       using 'BDC_OKCODE'
                              '=AEND'.
perform bdc_field       using 'AGR_NAME_NEU'
                              AGR_NAME_NEU_001.
perform bdc_dynpro      using 'SAPLPRGN_TREE' '0300'.
perform bdc_field       using 'BDC_CURSOR'
                              'S_AGR_TEXTS-TEXT'.
perform bdc_field       using 'BDC_OKCODE'
                              '=SAVE'.
perform bdc_field       using 'S_AGR_TEXTS-TEXT'
                              TEXT_002.
perform bdc_dynpro      using 'SAPLPRGN_TREE' '0300'.
perform bdc_field       using 'BDC_CURSOR'
                              'S_AGR_TEXTS-TEXT'.
perform bdc_field       using 'BDC_OKCODE'
                              '=BACK'.
perform bdc_field       using 'S_AGR_TEXTS-TEXT'
                              TEXT_002.
perform bdc_dynpro      using 'SAPLPRGN_TREE' '0121'.
perform bdc_field       using 'BDC_CURSOR'
                              'AGR_NAME_NEU'.
perform bdc_field       using 'BDC_OKCODE'
                              '=BACK'.
perform bdc_field       using 'AGR_NAME_NEU'
                              AGR_NAME_NEU_001.
perform bdc_transaction tables messtab
using                         'PFCG'
                              CTU
                              MODE
                              UPDATE.
if sy-subrc <> 0.
  subrc = sy-subrc.
  exit.
endif.

perform close_group using     CTU.





ENDFUNCTION.
INCLUDE BDCRECXY .
*&---------------------------------------------------------------------*
*& REPORT  ZRPT_BC_ROLE_CP
*&
*&---------------------------------------------------------------------*
*&DATE:20200222
*&AUTHOR:gavin 微信  gavin_gxh 邮箱 xiaofei2008gxh@163.com 
*&TITLE:上传角色copy
*&---------------------------------------------------------------------*

REPORT ZRPT_BC_ROLE_CP.
TABLES:AGR_DEFINE.
*
*定义内表类型
*
TYPES: BEGIN OF W_ITAB,
         SRCAGRNAM LIKE AGR_DEFINE-AGR_NAME,"复制源
         DESAGTNAM like AGR_DEFINE-AGR_NAME,
       END OF W_ITAB.

FIELD-SYMBOLS: <FS>.

DATA:
      FILETAB TYPE FILETABLE WITH HEADER LINE,
      RC TYPE I,
      G_FILE TYPE RLGRAP-FILENAME,
      ITAB TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE.
DATA: WTAB TYPE TABLE OF W_ITAB WITH HEADER LINE.
DATA: WTAB1 TYPE TABLE OF W_ITAB WITH HEADER LINE.
DATA: COUNT TYPE I.

DATA:STDATUM LIKE SY-DATUM,
      STUZEIT LIKE SY-UZEIT.

*&---------------------------------------------------------------------*
*& 选择界面
*&---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TXT1 .

PARAMETER: P_FILE  TYPE STRING.
PARAMETER: PWERKS AS CHECKBOX."是否基于工厂/不勾选基于公司  DEST后缀是公司还是工厂
SELECTION-SCREEN END OF BLOCK BLK1.

INITIALIZATION.
  TXT1 = '请输入条件'.
*&---------------------------------------------------------------------

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.

  CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
    EXPORTING
      DEFAULT_FILENAME = P_FILE
    CHANGING
      RC               = RC
      FILE_TABLE       = FILETAB[].

  READ TABLE  FILETAB INDEX  1.
  IF SY-SUBRC EQ 0.
    P_FILE = FILETAB-FILENAME.
  ENDIF.

START-OF-SELECTION.

  STDATUM = SY-DATUM.
  STUZEIT = SY-UZEIT.
  IF P_FILE <> ''.
    PERFORM GETEXCEL."EXCEL数据获取
  ENDIF.
  PERform WRITERPTRUNRECORD.
  PERFORM DISPLAY."数据ALV输出

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*&      Form  WRITERPTRUNRECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM WRITERPTRUNRECORD.
  get time.
  CALL FUNCTION 'ZSYS_RPT_RUNRECORD'
    EXPORTING
      TCODE     = SY-TCODE
      PROGRAMM  = SY-CPROG
                                                                                                                                                                                                    "werks  = werks
      DATUMRST  = STDATUM
      UZEITRST  = STUZEIT
      BATCH     = SY-BATCH
      DATUMREND = SY-datum
      UZEITREND = sy-UZEIT
      DATUMC    = '20200222'
      RUNNER    = SY-UNAME
      RPTSRC    = '高兴辉'.
ENDFORM.                    "WRITERPTRUNRECORD

*&---------------------------------------------------------------------*
*&      FORM  DISPLAY
*&---------------------------------------------------------------------*
*       TEXT 数据展示
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM DISPLAY .
  DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
        IS_VARIANT LIKE DISVARIANT,
        IT_EVENTS   TYPE SLIS_T_EVENT,
        IS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
        TITLE       TYPE LVC_TITLE,
        I_CALLBACK_PROGRAM TYPE SY-REPID,
        IT_SORT     TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE
        .
  PERFORM FIELDCAT_INIT USING IT_FIELDCAT.
  PERFORM LAYOUT_INIT USING IS_LAYOUT.
  I_CALLBACK_PROGRAM = SY-REPID.
  Title = '待复制角色'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = I_CALLBACK_PROGRAM
      I_GRID_TITLE             = TITLE
      IS_LAYOUT                = IS_LAYOUT
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IT_FIELDCAT              = IT_FIELDCAT
      IT_EVENTS                = IT_EVENTS
    TABLES
      T_OUTTAB                 = WTAB[]
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.                    " DISPLAY

*&--------------------------------------------------------------------- *
*&      FORM  G_STATUS_FORM 调用自定义屏幕
*&---------------------------------------------------------------------
FORM SET_PF_STATUS  USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD' EXCLUDING RT_EXTAB.
ENDFORM.                    "SET_PF_STATUS

*&---------------------------------------------------------------------*
*&      FORM  FIELDCAT_INIT
*&---------------------------------------------------------------------*
*       TEXT 定义输出项
*----------------------------------------------------------------------*
*      -->P_IT_FIELDCAT  TEXT
*----------------------------------------------------------------------*
FORM FIELDCAT_INIT  USING  IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
  DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DATA:LOC_REPID LIKE SY-REPID.
  LOC_REPID = SY-REPID.
  clear IT_FIELDCAT[].

  LS_FIELDCAT-FIELDNAME = 'SRCAGRNAM'.
  LS_FIELDCAT-REPTEXT_DDIC  = '源角色'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

  LS_FIELDCAT-FIELDNAME = 'DESAGTNAM'.
  LS_FIELDCAT-REPTEXT_DDIC  = '目标角色'.
  APPEND LS_FIELDCAT TO IT_FIELDCAT.
  CLEAR LS_FIELDCAT.

ENDFORM.                    "FIELDCAT_INIT



" FIELDCAT_INIT
*&---------------------------------------------------------------------*
*&      FORM  LAYOUT_INIT
*&---------------------------------------------------------------------*
*       TEXT  LAYOUT属性设置,双击响应字段设置
*----------------------------------------------------------------------*
*      -->P_IS_LAYOUT  TEXT
*----------------------------------------------------------------------*
FORM LAYOUT_INIT  USING    IS_LAYOUT TYPE SLIS_LAYOUT_ALV.
  IS_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
ENDFORM.                    " LAYOUT_INIT
**&--------------------------------------------------------------------*
**&      FORM  USER_COMMAND
**&--------------------------------------------------------------------*
**       TEXT
**---------------------------------------------------------------------*
**      -->RF_UCOMM   TEXT
**      -->RS_SELFIELDTEXT
**---------------------------------------------------------------------*
FORM USER_COMMAND USING RF_UCOMM    LIKE SY-UCOMM
                       RS_SELFIELD TYPE SLIS_SELFIELD.      "#EC CALLED
  DATA:tmpdesc like AGR_TEXTS-TEXT.
  DATA:strln1 TYPE I.
  DATA:strln2 TYPE I.
  DATA:src like BDCDATA-FVAL.
  DATA:dest like BDCDATA-FVAL.
  data:ldest like AGR_DEFINE-AGR_NAME.
  DATA:descrpt like BDCDATA-FVAL.
  DATA:lsubrc  type sy-subrc.
  data:srcc type AGR_NAME.
  data:largtxt like AGR_TEXTS OCCURS 0 WITH HEADER LINE.
  data:destc type AGR_NAME.
  data:ld_coll_role	 TYPE CHAR01.
  data: message TYPE SPROT_U_TAB.
  data:lroletb like  AGR_ST_NAME OCCURS 0 WITH HEADER LINE.
  FIELD-SYMBOLS :<FS1> like LINE OF  WTAB[].
  data:paramstr TYPE string.

  CASE RF_UCOMM.
    when '&IC1'.
      READ TABLE WTAB INDEX RS_SELFIELD-TABINDEX ASSIGNING <FS1>.
      CASE RS_SELFIELD-FIELDNAME.
        WHEN 'SRCAGRNAM'.
          CONCATENATE 'AGR_NAME_NEU = ' <FS1>-SRCAGRNAM INTO paramstr SEPARATED BY space.

        when 'DESAGTNAM'.
          CONCATENATE 'AGR_NAME_NEU = ' <FS1>-DESAGTNAM INTO paramstr SEPARATED BY space.

      endcase.
      CALL FUNCTION 'TH_CREATE_MODE'
        EXPORTING
          TRANSAKTION    = 'PFCG' "事务码
          PARAMETERS     = paramstr " 'LIKP-VSTEL = 8510 LV50C-DATBI = 20140509 LV50C-VBELN = 35001147' "事务码选择屏幕的参数
          PROCESS_DARK   = 'X' "跳过初始选择屏幕
        EXCEPTIONS
          MAX_SESSIONS   = 1
          INTERNAL_ERROR = 2
          NO_AUTHORITY   = 3
          OTHERS         = 4.

    when '&DEL'."删除角色
      loop at WTAB[] INTO WTAB.
        dest = WTAB-DESAGTNAM.
        CALL FUNCTION 'ZRFC_BC_ROLE_DEL'
          EXPORTING
            AGR_NAME_NEU_001 = dest
          IMPORTING
            SUBRC            = LSUBRC.
        COMMIT WORK  AND WAIT.

      ENDLOOP.

    WHEN '&PRT'.
*****插入数据  执行BDC 角色copy及名称修改
      loop at WTAB[] INTO WTAB.
        CLEAR lsubrc.
        srcc  = WTAB-SRCAGRNAM.
        destc = WTAB-DESAGTNAM.
        dest = WTAB-DESAGTNAM.

        CALL FUNCTION 'PRGN_COPY_ACTIVITY_GROUP'
          EXPORTING
            SOURCE_ACTIVITY_GROUP = srcc
            TARGET_ACTIVITY_GROUP = destc
            WITH_USER_ASSIGNMENT  = ''
            DISPLAY_LOG           = ''.

        COMMIT WORK AND WAIT.

        "$. Region 角色文本修改

        SELECT SINGLE TEXT INTO TMPDESC
          FROM AGR_TEXTS
          WHERE AGR_NAME = WTAB-SRCAGRNAM AND SPRAS = 1.

        STRLN2 = STRLEN( WTAB-SRCAGRNAM ).
        STRLN2 =  STRLN2 - 4.

        REPLACE WTAB-SRCAGRNAM+STRLN2(4) WITH WTAB-DESAGTNAM+STRLN2(4) INTO TMPDESC.

        DESCRPT  = TMPDESC.



        CLEAR LARGTXT[].
        LARGTXT-AGR_NAME = DEST.
        LARGTXT-SPRAS = 1.
        LARGTXT-MANDT = SY-MANDT.
        LARGTXT-TEXT = DESCRPT.
        APPEND LARGTXT.
        LROLETB-AGR_NAME = DEST.
        CALL FUNCTION 'PRGN_RFC_CHANGE_TEXTS'
          EXPORTING
            ACTIVITY_GROUP = LROLETB-AGR_NAME
          TABLES
            TEXTS          = LARGTXT.
        "$. Endregion 角色文本修改

        "$. Region 创建角色文件

        clear   LROLETB[].
        LROLETB-AGR_NAME = DEST.
        APPEND LROLETB.
        CALL FUNCTION 'PRGN_GEN_PROFILES_FOR_ROLES'
          TABLES
            IT_ROLES = LROLETB.


        "$. Endregion 创建角色文件

        "$. Region 角色 组织级别赋值


        DATA:RPT1252 LIKE PT1252 OCCURS 0 WITH HEADER LINE.
        DATA:SPT1252 LIKE PT1252 OCCURS 0 WITH HEADER LINE.

        SELECT * FROM AGR_1252 INTO CORRESPONDING FIELDS OF TABLE RPT1252 "#EC CI_BYPASS
                WHERE AGR_NAME = DEST  ORDER BY COUNTER.
*        CALL FUNCTION 'PRGN_1252_READ_ORG_LEVELS'
*          EXPORTING
*            ACTIVITY_GROUP = DEST
*          TABLES
*            ORG_LEVELS     = RPT1252.
        "删除重复性项目
        DELETE ADJACENT DUPLICATES FROM RPT1252 COMPARING VARBL.
        "从表中删除原有的项目
        DELETE FROM AGR_1252 WHERE AGR_NAME = DEST and LOW NE SPACE AND LOW NE '*'.

        DATA: I_AGR_1252 LIKE AGR_1252 OCCURS 0 WITH HEADER LINE.
        REFRESH I_AGR_1252.

        "$. Region 组织级别数据获取
*            描述	组织级别
*            工作中心	$ARBPL
*            公司	$BUKRS
*            评估范围	$BWKEY
*            采购组  $EKGRP
*            采购组织	$EKORG
*            业务范围	$GSBER
*            维护工厂	$IWERK 维护工厂	$SWERK 工厂	$WERKS
*            信贷	$KKBER
*            账户类型	$KOART
*            $KOKRS
*            数据仓库序号 / 数据仓库合成  $LGNUM
*            存储类型	$LGTYP
*            计划版本	$PLVAR
*            利润中心	$PRCTR
*            部门	$SPART
*            销售部  $VKBUR
*            销售组  $VKGRP
*            销售机构	$VKORG
*            运输点  $VSTEL
*            分销渠道	$VTWEG
        DATA:BEGIN OF ITORGLV OCCURS 0,
              BUKRS LIKE T001-BUKRS, "公司代码
              BWKEY LIKE V_T001W_BWKEY-BWKEY, "评估范围
              WERKS LIKE T001W-WERKS, "工厂
              GSBER LIKE T134H-GSBER, "业务范围  评估范围
*              KKBER LIKE T001-KKBER,"信贷范围
              VKORG LIKE TVKO-VKORG,"销售机构  公司代码  V_TVTA_ASSIGN
              VKBUR LIKE TVKBZ-VKBUR,"销售部门
              VKGRP LIKE V_TVBVK_ASSIGN-VKGRP,"销售组
              VTWEG LIKE TVKOV-VTWEG,"分销渠道    V_TVTA_ASSIGN
              SPART like TVKOS-SPART,"部门   V_TVTA_ASSIGN
              VSTEL LIKE TVSWZ-VSTEL,"装运点
              EKORG LIKE V_T024E_ASSIGN-EKORG," 采购组织
          END OF ITORGLV,

          BEGIN OF ITEKORG OCCURS 0 ,
            EKORG LIKE V_T024E_ASSIGN-EKORG,
          END OF ITEKORG,

          BEGIN OF ITVSTEL OCCURS 0 ,
            VSTEL LIKE TVSWZ-VSTEL,
          END OF ITVSTEL,

          BEGIN OF ITBUKRS OCCURS 0 ,
            BUKRS LIKE T001-BUKRS,
          END OF ITBUKRS,

          BEGIN OF ITBWKEY OCCURS 0 ,
            BWKEY LIKE V_T001W_BWKEY-BWKEY,
          END OF ITBWKEY,

          BEGIN OF ITGSBER OCCURS 0 ,
            GSBER LIKE T134H-GSBER,
          END OF ITGSBER,

          BEGIN OF ITVTWEG OCCURS 0 ,
            VTWEG LIKE TVKOV-VTWEG,
          END OF ITVTWEG,

          BEGIN OF ITSPART OCCURS 0 ,
            SPART LIKE TVKOS-SPART,
          END OF ITSPART,

          BEGIN OF ITVKGRP OCCURS 0 ,
            VKGRP LIKE V_TVBVK_ASSIGN-VKGRP,
          END OF ITVKGRP,

          BEGIN OF ITVKBUR OCCURS 0 ,
            VKBUR LIKE TVKBZ-VKBUR,
          END OF ITVKBUR,

          BEGIN OF ITVKORG OCCURS 0 ,
            VKORG LIKE TVKO-VKORG,
          END OF ITVKORG,

          BEGIN OF ITWERKS OCCURS 0 ,
            WERKS LIKE T001W-WERKS,
          END OF ITWERKS.


        if pwerks = 'X'.
          SELECT
          T001K~BUKRS  T001W~BWKEY T001W~WERKS TVTA~GSBER TVTA~VKORG tvkbz~VKBUR  TVBVK~VKGRP  TVTA~VTWEG TVTA~SPART TVSWZ~VSTEL T001W~EKORG
          into TABLE ITORGLV
          FROM TVTA
          JOIN T001W ON t001w~VKORG  = tvta~VKORG
          JOIN TVSWZ ON TVSWZ~WERKS  = t001w~WERKS
          JOIN T001K ON T001K~BWKEY  = t001w~BWKEY
          JOIN TVKBZ ON TVKBZ~VKORG  = tvta~VKORG  AND TVKBZ~VTWEG  = Tvta~VTWEG
          JOIN TVBVK ON TVBVK~VKBUR  = tvkbz~VKBUR
          WHERE T001W~WERKS = WTAB-DESAGTNAM+STRLN2(4).
        else.
          SELECT
        T001K~BUKRS  T001W~BWKEY T001W~WERKS TVTA~GSBER TVTA~VKORG tvkbz~VKBUR  TVBVK~VKGRP  TVTA~VTWEG TVTA~SPART TVSWZ~VSTEL T001W~EKORG
        INTO TABLE ITORGLV
        FROM TVTA
        JOIN T001W ON t001w~VKORG  = tvta~VKORG
        JOIN TVSWZ ON TVSWZ~WERKS  = t001w~WERKS
        JOIN T001K ON T001K~BWKEY  = t001w~BWKEY
        JOIN TVKBZ ON TVKBZ~VKORG  = tvta~VKORG  AND TVKBZ~VTWEG  = Tvta~VTWEG
        JOIN TVBVK ON TVBVK~VKBUR  = tvkbz~VKBUR
        WHERE T001K~BUKRS = WTAB-DESAGTNAM+STRLN2(4).
        endif.

        LOOP AT ITORGLV.
          MOVE-CORRESPONDING ITORGLV TO ITVSTEL.
          APPEND ITVSTEL.

          MOVE-CORRESPONDING ITORGLV TO ITBUKRS.
          APPEND ITBUKRS.

          MOVE-CORRESPONDING ITORGLV TO ITBWKEY.
          APPEND ITBWKEY.

          MOVE-CORRESPONDING ITORGLV TO ITEKORG.
          APPEND ITEKORG.

          MOVE-CORRESPONDING ITORGLV TO ITVKORG.
          APPEND ITVKORG.

          MOVE-CORRESPONDING ITORGLV TO ITVKBUR.
          APPEND ITVKBUR.

          MOVE-CORRESPONDING ITORGLV TO ITVKGRP.
          APPEND ITVKGRP.

          MOVE-CORRESPONDING ITORGLV TO ITSPART.
          APPEND ITSPART.

          MOVE-CORRESPONDING ITORGLV TO ITVTWEG.
          APPEND ITVTWEG.

          MOVE-CORRESPONDING ITORGLV TO ITGSBER.
          APPEND ITGSBER.
        ENDLOOP.
        DELETE ADJACENT DUPLICATES FROM ITVSTEL.
        DELETE ADJACENT DUPLICATES FROM ITBUKRS.
        DELETE ADJACENT DUPLICATES FROM ITBWKEY.
        DELETE ADJACENT DUPLICATES FROM ITEKORG.
        DELETE ADJACENT DUPLICATES FROM ITVKORG.
        DELETE ADJACENT DUPLICATES FROM ITVKBUR.
        DELETE ADJACENT DUPLICATES FROM ITVKGRP.
        DELETE ADJACENT DUPLICATES FROM ITSPART.
        DELETE ADJACENT DUPLICATES FROM ITVTWEG.
        DELETE ADJACENT DUPLICATES FROM ITGSBER.

        "$. Endregion 组织级别数据获取

        LOOP AT RPT1252.

          CASE RPT1252-VARBL.

            WHEN '$WERKS' OR  '$SWERK' OR '$IWERK'.
              "工厂   维护工厂
              IF PWERKS = 'X'.
                MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
                I_AGR_1252-AGR_NAME = DEST.
                I_AGR_1252-COUNTER = 1.
                I_AGR_1252-MANDT = SY-MANDT.
                I_AGR_1252-LOW = STRLN2(4).
                APPEND I_AGR_1252.
              else.
                MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
                I_AGR_1252-AGR_NAME = DEST.
                I_AGR_1252-MANDT = SY-MANDT.
                LOOP AT ITWERKS.
                  I_AGR_1252-COUNTER = SY-TABIX.
                  I_AGR_1252-LOW = ITWERKS-WERKS.
                  APPEND I_AGR_1252.
                ENDLOOP.
              endif.
            WHEN  '$BWKEY'."评估范围
              MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITBWKEY.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITBWKEY-BWKEY.
                APPEND I_AGR_1252.
              ENDLOOP.
            WHEN   '$BUKRS'."公司代码
              if PWERKS = 'X'.
                MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
                I_AGR_1252-AGR_NAME = DEST.
                I_AGR_1252-MANDT = SY-MANDT.
                LOOP AT ITBUKRS.
                  I_AGR_1252-COUNTER = SY-TABIX.
                  I_AGR_1252-LOW = ITBUKRS-BUKRS.
                  APPEND I_AGR_1252.
                ENDLOOP.
              else.
                MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
                I_AGR_1252-AGR_NAME = DEST.
                I_AGR_1252-MANDT = SY-MANDT.
                I_AGR_1252-COUNTER = 1.
                I_AGR_1252-LOW = ITBUKRS-BUKRS.
                APPEND I_AGR_1252.
              endif.
            WHEN  '$GSBER'."业务范围
              MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITGSBER.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITGSBER-GSBER.
                APPEND I_AGR_1252.
              ENDLOOP.

            WHEN '$EKORG'."采购组织
              MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITEKORG.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITEKORG-EKORG.
                APPEND I_AGR_1252.
              ENDLOOP.
*              WHEN '$EKGRP'."采购组
*              WHEN '$KKBER'."信贷范围
            WHEN '$VKORG'."销售机构
              MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITVKORG.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITVKORG-VKORG.
                APPEND I_AGR_1252.
              ENDLOOP.
            WHEN '$VSTEL'."装运点
              MOVE-CORRESPONDING RPT1252 TO I_AGR_1252.
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITVSTEL.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITVSTEL-VSTEL.
                APPEND I_AGR_1252.
              ENDLOOP.
            WHEN '$VTWEG'."分销渠道
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITVTWEG.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITVTWEG-VTWEG.
                APPEND I_AGR_1252.
              ENDLOOP.
            WHEN '$VKBUR'."销售部
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITVKBUR.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITVKBUR-VKBUR.
                APPEND I_AGR_1252.
              ENDLOOP.
            WHEN '$VKORG'."销售机构
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITVKORG.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITVKORG-VKORG.
                APPEND I_AGR_1252.
              ENDLOOP.
            WHEN '$VKGRP'."销售组
              I_AGR_1252-AGR_NAME = DEST.
              I_AGR_1252-MANDT = SY-MANDT.
              LOOP AT ITVKGRP.
                I_AGR_1252-COUNTER = SY-TABIX.
                I_AGR_1252-LOW = ITVKGRP-VKGRP.
                APPEND I_AGR_1252.
              ENDLOOP.
          ENDCASE.

        ENDLOOP.

        INSERT AGR_1252 FROM TABLE I_AGR_1252 ACCEPTING DUPLICATE KEYS.
        ldest = dest.
        CALL FUNCTION 'PRGN_SET_PROFILE_TIMESTAMP'
          EXPORTING
            ACTIVITY_GROUP = lDEST
          EXCEPTIONS
            OTHERS         = 1.

        CALL FUNCTION 'PRGN_GEN_PROFILES_FOR_ROLES'
          TABLES
            IT_ROLES = LROLETB.

        "$. Endregion 角色 组织级别赋值

        IF LSUBRC = 0.
          COUNT = COUNT  + 1.
        ELSE.
          APPEND wtab to  WTAB1.
        ENDIF.
      ENDLOOP.

      MESSAGE S001(00) WITH  '成功复制' COUNT '条'.
      PERFORM DISPLAY1.
  ENDCASE.
ENDFORM.                   "USER_COMMAND


*&---------------------------------------------------------------------*
*&      FORM  DISPLAY
*&---------------------------------------------------------------------*
*       TEXT 数据展示
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM DISPLAY1 .
  DATA: IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
        IS_VARIANT LIKE DISVARIANT,
        IT_EVENTS   TYPE SLIS_T_EVENT,
        IS_LAYOUT   TYPE SLIS_LAYOUT_ALV,
        TITLE       TYPE LVC_TITLE,
        I_CALLBACK_PROGRAM TYPE SY-REPID,
        IT_SORT     TYPE SLIS_T_SORTINFO_ALV WITH HEADER LINE
        .
  PERFORM FIELDCAT_INIT USING IT_FIELDCAT.
  PERFORM LAYOUT_INIT USING IS_LAYOUT.
  I_CALLBACK_PROGRAM = SY-REPID.
  Title = '复制不成功角色'.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      I_CALLBACK_PROGRAM       = I_CALLBACK_PROGRAM
      I_GRID_TITLE             = TITLE
      IS_LAYOUT                = IS_LAYOUT
      I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
      I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'
      IT_FIELDCAT              = IT_FIELDCAT
      IT_EVENTS                = IT_EVENTS
    TABLES
      T_OUTTAB                 = WTAB1[]
    EXCEPTIONS
      PROGRAM_ERROR            = 1
      OTHERS                   = 2.
  IF SY-SUBRC <> 0.
  ENDIF.

ENDFORM.                    " DISPLAY

*&---------------------------------------------------------------------*
*&      FORM  GETEXCEL
*&---------------------------------------------------------------------*
*       TEXT 获取上传EXCEL文件内相关数据
*----------------------------------------------------------------------*
*  -->  P1        TEXT
*  <--  P2        TEXT
*----------------------------------------------------------------------*
FORM GETEXCEL .
  G_FILE = P_FILE.  "注意两个文件用于不同的函数,所以类型不同

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      FILENAME    = G_FILE
      I_BEGIN_COL = 1
      I_BEGIN_ROW = 1
      I_END_COL   = 10
      I_END_ROW   = 5000
    TABLES
      INTERN      = ITAB[].

  DELETE ITAB WHERE ROW = 1.  "删除字段名行

  LOOP AT ITAB.
    ON CHANGE OF ITAB-ROW.
      IF SY-TABIX NE 1.
        APPEND WTAB.
        CLEAR WTAB.
      ENDIF.
    ENDON.
    ASSIGN COMPONENT ITAB-COL OF STRUCTURE WTAB TO <FS>.         "动态方法将值传到相应的内表
    translate ITAB-VALUE to upper case.
    <FS> = ITAB-VALUE.
  ENDLOOP.
  APPEND WTAB.   "这句不要忘记,要把最后一条APPEND到内表中
  SORT WTAB BY SRCAGRNAM.

ENDFORM.                    " GETEXCEL
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值