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.
![](https://i-blog.csdnimg.cn/blog_migrate/62203dfeb3d93a2cf4c4ad40566609d4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/83f2fe953f97c02dd04603b3535bced4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/89e46f6dffb07a39e9adc36ac2b7e220.png)
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