1.关于前几篇介绍的外挂程序,SAP中的业务单据还是要区分具体的操作人员。如建立财务凭证,工号A,B,C使用相同的SAP账号,那就没办法知道是谁操作的了啊,所以sap的业务单据需要细分到具体人员的都要增强实现以下:
如生产工单:
具体的增强点:
2.辅助程序:SAP账号自动锁定功能
*&---------------------------------------------------------------------*
*& Report ZBA001
*&---------------------------------------------------------------------*
*& 实现人员离职时,SAP账号与外挂账号自动锁定功能,减少手工锁定账号工作量
*&---------------------------------------------------------------------*
REPORT zba001.
TABLES:pa0000,usr02,zjpmf_user.
*PA0000-PERNR 工号
*PA0000-STAT2 人员状态 PA0000-STAT2=0代表:离职
*USR02-ACCNT SAP账号 SAP账号用来维护工号的字段,用PA0000-PERNR关联USR02-ACCNT,得到SAP账号(USR02-BNAME),
* 触发USR02-UFLAG:64=锁定
*zjpmf_user-EMPLYEE_ID SAP外挂表工号字段 SAP外挂账号对应工号字段,用PA0000-PERNR关联zjpmf_user-EMPLYEE_ID,
* 得到外挂账号(zjpmf_user-USER_CODE),触发zjpmf_user-ACTIVE_FLAG=空时为锁定
*
*逻辑:
*1.定期任务,每天执行一次,每天01:00定时执行;
*2.用USR02-ACCNT与zjpmf_user-EMPLYEE_ID分别关联PA0000-PERNR,查询PA0000-STAT2值是否为0
*3.若PA0000-STAT2值是否为0时,将USR02-UFLAG值变更为64与zjpmf_user-ACTIVE_FLAG值变为空
*4.第2点中,当USR02-ACCNT为空时,不进行关联,直接忽略此条数据
*5.第3点中,因账号有SAP账号与外挂账号,故两个表中的数据都要进行关联,程序直接将关联到的数据进行执行锁定操作,关联不到则直接跳过。
*6.BEGDA=前一天日期,ENDDA=当天日期 ,查PA0000,P0000-MASSN=Z9并且P0000-STAT2=0,外面需要增加两个日期begda和endda的查询条件,
* 查询里面要加P0000-MASSN=Z9 并且P0000-STAT2=0 的条件
*BAPI_USER_LOCK
*BAPI_USER_UNLOCK
" DATA:gv_username TYPE bapibname-bapibname.
DATA:BEGIN OF gs_data,
pernr TYPE pa0000-pernr,
bname TYPE usr02-bname,
END OF gs_data,
gt_data LIKE TABLE OF gs_data.
DATA:gs_return TYPE bapiret2,
gt_return TYPE TABLE OF bapiret2.
DATA:lv_begda TYPE p0001-begda.
DATA:gv_user_code TYPE zjpmf_user-user_code.
DATA:gv_code TYPE zjpmf_user-user_code.
***Begin add by IT072 10.05.2021 18:49:24
DATA: gv_name TYPE BAPIBNAME-BAPIBNAME,
gv_mesage TYPE string.
DATA: gt_group TYPE TABLE OF BAPIGROUPS,
gt_returnd TYPE TABLE OF BAPIRET2,
gs_returnd TYPE BAPIRET2.
DATA: lv_memo TYPE string .
***End add by IT072 10.05.2021 18:49:24
PARAMETERS:p_begda TYPE pa0000-begda ,
p_endda TYPE pa0000-endda .
INITIALIZATION.
lv_memo = '离职停用' && sy-datum.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
date = sy-datum
days = 7
months = 0
signum = '-'
years = 0
IMPORTING
calc_date = lv_begda.
IF p_begda IS INITIAL.
p_begda = lv_begda .
ENDIF.
IF p_endda IS INITIAL.
p_endda = sy-datum ."'99991231'
ENDIF.
START-OF-SELECTION.
*-- 取离职状态人员
SELECT pernr
bname
INTO CORRESPONDING FIELDS OF TABLE gt_data FROM pa0000 AS a
LEFT JOIN usr02 AS b ON a~pernr = b~accnt
WHERE stat2 = 0
AND massn = 'Z9'
* AND be