SAP ABAP 自动批量开关账期程序 OB52和MMPV
文章目录
前言
在SAP系统运行中 每个月经常会忘记同时也是极其重要的工作就是开关财务、物料账期
如果能有一个程序帮我们自动完成这个工作,那得是多么美好的事情
现在我们就在做这件美好的事
会计凭证过账期间
SAP 自己也做了程序来更新账期 RFPERIOD_OPEN 和 RFPERIOD_CLOSE
我看了下这两个程序的源码 - 直接更新的 T001B 这个表
同理 OB52 其实也就是一个视图维护 T001B 这个表
于是我们就可以写一个程序来维护 T001B 达到批量或自动开账期的效果
物料凭证过账期间
开物料账期的事务码是 MMPV
查看物料账期的事务码是 MMRV
一开始我的想法是通过BDC录屏的方式实现自动开账期的效果
但是MMPV执行完会有一个消息日志,在BDC录屏时并不会显示,从而打开账期失败
直接调用MMPV对应的程序 RMMMPERI 和使用录屏是一样的效果
所以我们只有将 RMMMPERI 程序的执行放到后台去,后台回去获取到对应的日志消息,进而打开账期成功
同时我们也可以通过查看日志消息来获取此次打开账期的执行过程
完整代码
主程序 ZTOOLSR0001
这个报表同时展示该公司的财务账期和物料账期
输入公司和期间
选择查询账期、执行打开账期、执行关闭账期等功能
报表中涉及到自定义开物料账期函数 ZTOOLSFM04_MMPV_JOB
以及自定义公司代码表 ZMASTERT0001 用以配置哪些公司需要更新账期
*&---------------------------------------------------------------------*
*& REPORT ZTOOLSR0001
*&---------------------------------------------------------------------*
*& 自动开账期程序
*&---------------------------------------------------------------------*
* OB52 参考SAP程序 RFPERIOD_OPEN 和 RFPERIOD_CLOSE
* 直接更新 T001B 这个表
*--------------------------------------------------------------------*
REPORT ztoolsr0001.
TABLES: t001b.
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: s_comp FOR t001b-bukrs,
s_poper FOR t001b-frpe1 MODIF ID ty1 NO INTERVALS NO-EXTENSION.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_select RADIOBUTTON GROUP g1 USER-COMMAND uc DEFAULT 'X',
p_execut RADIOBUTTON GROUP g1,
p_close RADIOBUTTON GROUP g1.
SELECTION-SCREEN END OF BLOCK blk1.
TYPES: BEGIN OF ty_result,
bukrs TYPE t001-bukrs,
mkoar TYPE t001b-mkoar,
bkont TYPE t001b-bkont,
vkont TYPE t001b-vkont,
frye1 TYPE t001b-frye1,
frpe1 TYPE t001b-frpe1,
toye1 TYPE t001b-toye1,
tope1 TYPE t001b-tope1,
frye2 TYPE t001b-frye2,
frpe2 TYPE t001b-frpe2,
toye2 TYPE t001b-toye2,
tope2 TYPE t001b-tope2,
lfgja TYPE marv-lfgja,
lfmon TYPE marv-lfmon,
vmgja TYPE marv-vmgja,
vmmon TYPE marv-vmmon,
blankcell TYPE c,
END OF ty_result.
DATA: gt_result TYPE STANDARD TABLE OF ty_result.
DATA: gt_t001 TYPE STANDARD TABLE OF t001,
gt_t001b TYPE STANDARD TABLE OF t001b,
gt_marv TYPE STANDARD TABLE OF marv.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
gs_layout TYPE slis_layout_alv.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 EQ 'TY1' AND p_execut EQ 'X'.
screen-active = 1.
ELSEIF screen-group1 EQ 'TY1' AND p_execut NE 'X'.
screen-active = 0.
ENDIF.
MODIFY SCREEN.
ENDLOOP.
START-OF-SELECTION.
PERFORM frm_select_comp_code.
IF NOT gt_t001 IS INITIAL.
IF NOT p_select IS INITIAL. " 查询账期
PERFORM frm_select_posting_process. " 查询财务账期
PERFO