• 【FI】财务预制凭证界面隐藏过账按钮


    FI】财务预制凭证界面隐藏过账按钮

    【背景介绍】

    SAP中的会计凭证一旦过账了就不能再进行修改,但其也提供了类似国内财务软件同样的预制功能,预制凭证过账之前不会更新会计系统。预制凭证虽然不更新科目余额,但同样会生成凭证编号,其凭证内容可以随意更改,也可以删除。一旦过账,则会更新科目余额,但凭证编号不会改变。

    预制凭证的相关后台表:

    表名

    描述

    BKPF

    会计核算凭证抬头表

    VBKPF

    预制凭证的凭证抬头表

    VBSEGA

    凭证预制的凭证段 - 资产数据库

    VBSEGD

    客户凭证预制的凭证段

    VBSEGK

    供应商凭证预制的凭证段

    VBSEGS

    凭证预制的凭证段 - 总帐科目数据库

    【需求描述】

    此前用户在使用事务代码“FV70”预制客户发票时发现界面中直接有“过账”按钮,点击后会立即生成正式会计凭证,无需财务部同事通过事务代码“FBV0”审批,完全不符合企业内审的要求,能否对此进行控制?

    【分析处理】

    根据有的朋友反馈,可以通过用户的参数文件设置指定参数实现,不过暂时没有尝试成功。

    这里为了快速相应用户需求,本人采用了如下方式进行处理。

    首先找到事务代码“FV70”涉及的程序名称“SAPMF05A”和屏幕编号“1200”,进入查看其PBO逻辑。

    1. PROCESS BEFORE OUTPUT.
    2. *------------ Most of the modules of Dynpro 1100 can be used ... -------
    3.   MODULE INIT_1100.
    4.   MODULE DYNPRO_MODIFICATION_1100.
    5.   MODULE TREE.
    6.   MODULE STATUS.
    7.   MODULE EXPORT_TO_APAR_DIALOG_PBO.
    8.   MODULE EXPORT_TO_TAX_DIALOG_PBO.
    9.   MODULE DETERMINE_SUBSCREEN_APAR.
    10.   CALL SUBSCREEN PAGE  INCLUDING PROGNR     DYNNRD.
    11.   CALL SUBSCREEN ADR   INCLUDING 'SAPLFDCB' DYNNRA.
    12.   MODULE IMPORT_FROM_APAR_DIALOG_PBO.
    13.   MODULE EXPORT_TO_GL_DIALOG_PBO.
    14.   CALL SUBSCREEN ITEMS INCLUDING 'SAPLFSKB' '0100'.
    15.   MODULE FIRST_CALL_CLEAR.
    16. PROCESS AFTER INPUT.
    17.   MODULE EXIT_1100 AT EXIT-COMMAND.
    18.   FIELD OK-CODE MODULE CHECK_STATE.
    19.   MODULE OKCODE_SEND_AT_PAI.
    20.   FIELD RF05A-BUSCS MODULE EXPORT_TO_APAR_DIALOG_PAI.
    21.   CALL SUBSCREEN PAGE.
    22.   CALL SUBSCREEN ADR.
    23.   MODULE IMPORT_FROM_APAR_DIALOG_PAI.
    24.   MODULE IMPORT_FROM_TAX_DIALOG_PAI.
    25.   MODULE EXPORT_TO_GL_DIALOG_PAI.
    26.   CALL SUBSCREEN ITEMS.
    27.   MODULE IMPORT_FROM_GL_DIALOG_PAI.
    28.   MODULE CONTROL_DISPATCH.
    29.   MODULE DOCUMENT_MERGE.
    30.   MODULE BALANCE.
    31.   MODULE ACTIVETAB_PROCESS.
    32.   MODULE SAVE_CONTEXT_1100_1200.
    33.   FIELD OK-CODE MODULE USER_COMMAND_1100.

    可以根据表“T020”找到相应事务代码使用的“GUI状态”(T020-STATU)。

    我们所需要做的就是想办法将功能码“BU”(过账)隐藏。

    一开始为了快速实现需求,采用了直接添加ENHANCEMENT代码的方式实现,虽然效果上可以满足需求,但总觉得不够灵活。

    仔细阅读PBO模块中的“SET_EXCTAB”方法,发现其中有涉及相关权限控制的逻辑:

    1. * Check posting
    2.   CALL FUNCTION 'DOCHEADER_AUTHORITY_CHECK'
    3.     EXPORTING
    4.       I_BUKRS      = BKPF-BUKRS
    5.       I_BLART      = BKPF-BLART
    6.       I_BRGRU      = T003-BRGRU
    7.       I_STATUS     = CHAR_1
    8.     EXCEPTIONS
    9.       NO_AUTHORITY = 4.
    10.   IF SY-SUBRC NE 0.
    11.     EXCTAB-OKCOD = 'BU'.
    12.     COLLECT EXCTAB.
    13.   ENDIF.
    14. * Check parking
    15.   CALL FUNCTION 'DOCHEADER_AUTHORITY_CHECK'
    16.     EXPORTING
    17.       I_BUKRS      = BKPF-BUKRS
    18.       I_BLART      = BKPF-BLART
    19.       I_BRGRU      = T003-BRGRU
    20.       I_STATUS     = CHAR_2
    21.     EXCEPTIONS
    22.       NO_AUTHORITY = 4.
    23.   IF SY-SUBRC NE 0.
    24. * posting to single ledger exclude document parking
    25. *  or ( not bkpf-ldgrp is initial.                             "/glflex/
    26. *  and tcode = 'FB50L' ).                                      "n961805
    27.     EXCTAB-OKCOD = 'BP'.
    28.     COLLECT EXCTAB.
    29.     EXCTAB-OKCOD = 'PBBP'.
    30.     COLLECT EXCTAB.
    31.   ENDIF.
    32. * Note 409909: End of insertion

    经测试可以通过权限对象“F_BKPF_BUK”来控制相关按钮的隐藏/显示。

    【效果展示】

    经过权限控制后的“FV70”预制画面。

    如有更为简便有效的方法,请留言告知,以帮助更多有需要的朋友,谢谢。

  • 相关阅读:
    cv2.imwrite无法写入图片
    Google Earth Engine APP——UI地图加载一个高程显示标签并显示高程案例
    Jenkins-Pipeline基本使用
    基于Socket的MFC网络编程
    python之内存池技术
    我的Quick Latex For Obsidian-Setting(持续更新)
    IDEA高效编程快捷键
    西电计网ARP欺骗实验
    LearnOpenGL - Android OpenGL ES 3.0 基础特效实现
    webpack5 Image Minimizer减少图片体积提升打包构建速度
  • 原文地址:https://blog.csdn.net/zhongguomao/article/details/126788132