痛点:
1、角色X公司代码或者工厂会导致角色数量非常多,通常有几百上千角色需要创建;
2、角色创建的名称和代码有一定的格式要求;
3、角色包含的参数文件众多
总结来说维护权限的工作量很大,做过SAP的顾问应该都了解
解决办法:
直接上步骤:
1、导出表角色表AGR_DEFINE的的角色清单,获取被复制的对象。如demo角色未建立的自己先建立一下;
2、使用python组合被复制的角色及待生成的公司清单,如原始有20个角色,待生成的公司代码有8个,那么生成出的角色会有160个;
代码如下:
'''
@File : newexcel.py
@Time : 2025/03/11 13:48:06
@Author :
@Version : 1.0
@Desc : 将两个sheet中的数据进行组合,并保存到新的sheet中
'''
import pandas as pd
# 定义文件路径,并确保扩展名为小写
file_path = r"C:\Users\Desktop\系统角色清单.xlsx"
# 读取Excel文件中的sheet1和sheet2
sheet1 = pd.read_excel(file_path, sheet_name="Sheet1")
sheet2 = pd.read_excel(file_path, sheet_name="Sheet2")
# # 检查并打印列名
# print("Sheet1 Columns:", sheet1.columns)
# print("Sheet2 Columns:", sheet2.columns)
# 根据实际的列名调整下面的变量值
col_name_sheet1_A = "角色" # Sheet1的实际A列名
col_name_sheet1_B = "简短角色描述" # Sheet1的实际B列名
# Sheet2只有一个未命名的列,我们直接使用位置索引来获取第一列的数据
col_data_sheet2 = sheet2.iloc[:, 0]
# 初始化存储组合结果的列表
combinations_A = []
combinations_B = []
original_A = []
original_B = []
# 确保两个表都有数据需要处理
if not sheet1.empty and not col_data_sheet2.empty:
# 遍历两个sheet的指定列并组合
for s1_a, s1_b in zip(sheet1[col_name_sheet1_A], sheet1[col_name_sheet1_B]):
for s2 in col_data_sheet2:
# 将s2转换为字符串后进行切片操作
s2_str = str(s2)
new_value_a = s1_a[:-4] + s2_str[-4:]
new_value_b = f"{s1_b}_{s2_str}"
# 添加组合结果
combinations_A.append(new_value_a)
combinations_B.append(new_value_b)
# 复制原始的A列和B列数据
original_A.append(s1_a)
original_B.append(s1_b)
# 创建一个DataFrame来保存组合结果以及原始数据
df_combinations = pd.DataFrame(
data={
"Combinations_A": combinations_A,
"Combinations_B": combinations_B,
"Original_A": original_A,
"Original_B": original_B,
}
)
# 将组合结果写入新的Excel工作表
with pd.ExcelWriter(file_path, mode="a", engine="openpyxl") as writer:
df_combinations.to_excel(
writer,
sheet_name="Combinations", # 新工作表的名称
index=False,
header=["A列组合", "B列组合", "原始A列", "原始B列"],
)
print("组合数据已成功写入新的工作表 'Combinations' 中。")
else:
print("Sheet1或Sheet2为空,请检查数据。")
2、通过LSMW录屏,分别录制一个复制的角色的录屏和一个修改名称的录屏;
录屏文件如下: