1.预算凭证的BAPI
SAP ERP系统中提供了预算凭证生成的BAPI,以提供外部系统接口来生成预算凭证以及查询FM模块中的预算数据。
1)预算凭证主要使用以下BAPI:
BAPI_0050_CREATE Create FM budgeting entry document
BAPI_0050_GET_DETAIL Get FM budgeting entry document
BAPI_0050_GET_LIST Get list of budgeting entry documents
BAPI_0050_REVERSE Reverse FM budgeting entry document
除了提供以上BAPI来生成、读取、冲销预算凭证数据外,还对使用以上BAPI提供了BADI增强:BAPI_0050,比如用户增强扩展了预算凭证的自定义字段,在调用BAPI来生成、读取、冲销预算凭证数据时,可以使用这些BADI对用户自定义字段数据进行控制。BAPI_0050提供以下方法:
CREATE_IN Cust.enhancement for entry document Create-Before update
CREATE_OUT Cust.enhancement for entry document Create-After update
GETDETAIL_IN Customer enhancement for entry document Get detail-Input
GETDETAIL_OUT Customer enhancement for entry document Get detail-Ouput
GETLIST_IN Customer enhancement for entry document Getlist-Input
GETLIST_OUT Customer enhancement for entry document Getlist-Output
REVERSE_IN Cust.enhancement for entry document Reverse-Before update
REVERSE_OUT Cust.enhancement for entry document Reverse-After update
2)预算计划数据主要使用以下BAPI:
BAPI_0051_UPDATE FM Budgeting-Update totals
BAPI_0051_GET_TOTALS Get FM budget totals
2.预算增强扩展使用
在PSM-FM模块中,SAP系统提供了相应的BADI增强,来扩展用户使用增强功能,比如为预算凭证增加用户自定义的字段、对凭证进行用户逻辑的检查等。其提供的主要BADI如下:
1)FMBW_CUSTOMER:用户增加自定义字段的增强使用,其主要提供以下方法:
PUT_DATA_TO_SCREEN Transport data to the screen
GET_DATA_FROM_SCREEN Transport data from the screen
PRINT Print data
ADD_FIELDS_TO_LINE_ITEM Add line fields to field catalogue(增加字段到预算凭证行的ALV显示列控制,主要是对事务码FMPEP)
CHECK_LINE_ITEM_VALUES Check the lines value for custom fields
REGISTER_F4 Register F4 help event for custom line fields
CALL_F4 Call F4 help event for custom lines fields
SET_TEXT_FOR_PERIOD_SCREEN Set the text value of customer line fields for period screen
另外,该BADI还提供用户字段的屏幕增强,可在屏幕上增强用户的自定义字段,见表5.1.6-1。
表5.1.6-1
以上程序中可以在增强实施的子屏幕中指定调用用户子屏幕的用户程序和用户子屏幕编号(用户定义的子屏幕中维护了相关的自定义字段)。
用户在使用此BADI前,应该先行增强扩展预算凭证的自定义字段如图5.1.6-1、图5.1.5-2所示。
其中,预算凭证抬头字段增强扩展结构为CI_FMBH;预算凭证行项目字段增强扩展结构为CI_FMBL。
2)FMCU_OPENPER:对启用了预算凭证期间控制的场景,除了使用事务码FMOPER来定义预算期间的开、关外,还可使用BADI,根据预算凭证的录入数据使用自己的逻辑来定义预算期间的开、关,比如根据预算类型、预算处理来决定其期间的开关。其提供方法如下:
GET_OPEN_PERIODS Get open periods,如图5.1.6-3所示。
C_FROM_P:开始期间;
图5.1.6-1
图5.1.6-2
图5.1.6-3
C_TO_P:截止期间;
C_FLG_ALL_PERIODS:指定期间是打开还是关闭。
3)FMKU_BUDGET_EVNT:提供对预算凭证的使用用户自己逻辑的额外检查,以及将预算凭证相关数据写入用户自定义的表中。该BADI提供了以下方法进行增强使用:
DOCUMENT_CHECKS:Checks on the document
LINE_CHECKS:Checks the lines
POST:Post。提供将预算凭证的数据写入FM-BCS外的其他自定义数据表中,比如SAP系统提供此BADI实施类FMKU_BUDGET_EVNT_BL,用于将预算凭证数据写入到预算分类账中。
4)FMKU_BUDGET_LINES:提供对预算凭证的额外追加行的写入和预算凭证的替代功能。其主要提供方法如下:
ADD_LINES:Creates additional lines。预算凭证的行项目追加额自动生成的行,如图5.1.6-4所示。
图5.1.6-4
SUBSTITUTE_DATA:Substitutes the values of fields on the lines。预算凭证的行项目字段使用用户逻辑进行替代,如图5.1.6-5所示。
图5.1.6-5
5)FMCY_COPI_CO:从CO计划数据复制生成预算凭证时,根据计划数据使用用户逻辑来生成不同预算类型的预算数据(FMCY_COPI_CO执行时界面只允许生成单一预算类型的预算凭证)。该BADI提供方法如下:
SET_TBUDTYPE:Set Target Budget Type,如图5.1.6-6所示。
图5.1.6-6
用户可以根据COSP传过来的数据,使用自己的逻辑来决定预算凭证的预算类型。
6)FMBCS_RW:提供Report Writer生成的预算报表的报表增强,该类报表主要使用报表库中的表FMRBCS。用户可以根据需要来扩展增强使用,比如填入系统标准没有提供相关字段的文本描述、修改报表记录相关数据,其主要提供以下方法:
GET_TEXT:Get Texts for FMRBCS field descriptions,根据RW报表的报表库4FM用到的FMRBCS结构中字段的值,使用自定义逻辑来填写其文本描述,如图5.1.6-7所示。
FILL_DATA:Modify data in table record for reporting,提供修改报表记录数据的值,如图5.1.6-8所示。
7)FMCE_CVRGRP:对补进合法(CE)的覆盖组进行扩展使用,其主要提供以下方法:
CHECK_COVER_GROUP:对新生成的补进组号或是修改已有补进组号,使用用户逻辑来检查补进组号。当用户逻辑检查的补进组为无效时,需要在代码中写入RAISE INVALID_COVER_GROUP语句来抛出检查无效的异常。
图5.1.6-7
图5.1.6-8
COPY_COVER_GROUP:复制补进组号并使用用户的逻辑来生成新的补进组号。
SORT_BUD_SENDER:对补进组中发送方角色或发送方&接收方角色的发送金额进行合法排序。
SORT_BUD_RECEIVER:对补进组中接收方角色或发送方&接收方角色的接收金额进行合法排序。
8)FMRB_RIB:对收入增加预算(RIB)新建规则或已有规则修改进行增强检查使用,其主要提供以下方法:
CHECK_RULE:根据RIB规则形成的相关数据,使用自定义逻辑来进行RIB规则的检查,当规则检查结果为无效时,需要在代码中写入RAISEINVALID_RULE语句来抛出检查无效的异常。
9)FMKF_HANDLER:增强检查决定一个关键指标是否进行评估,比如根据承诺项目类别等来决定关键指标是否执行评估。其提供以下方法:
CHECK_BEFORE_EVALUATION:Check if the evaluation has to be done or not,如图5.1.6-9所示。
图5.1.6-9
3.预算增强扩展案例
在实际使用中,预算凭证抬头和行项目需要有额外的数据需要记录,因此在系统中需要扩展预算凭证抬头和行项目的用户字段,需要用户实施增强BADI:FMBW_CUSTOMER,其步骤如下:
1)为预算凭证抬头数据库表FMBH扩展用户自定义字段,如下:
事务码SE11:FMBH(预算凭证抬头数据表)。
在图5.1.6-10中找到SAP系统预留的用户扩展结构CI_FMBH,然后双击,创建CI_FMBH结构如图5.1.6-11所示。
图5.1.6-10
图5.1.6-11
维护好用户自定义字段后,单击按钮来激活CI_FMBH结构。激活完成后,回到数据库表FMBH如图5.1.6-12所示。
图5.1.6-12
2)为预算凭证行项目数据库表FMBL扩展用户自定义字段,如下:
事务码SE11:FMBL(预算凭证行项目数据表)。
在图5.1.6-13中,找到SAP系统预留的用户扩展结构CI_FMBL,双击,创建CI_FMBL结构如图5.1.6-14所示。
图5.1.6-13
图5.1.6-14
维护好用户自定义字段(其组件类型事前用SE11先维护好),然后单击激活CI_FMBL结构,并返回到数据表FMBL如图5.1.6-15所示。(www.xing528.com)
图5.1.6-15
3)实施BADI:FMBW_CUSTOMER,增加用户实施Z_FMBW_CUSTOMER_01,操作如下:
事务码:SE18。
在图5.1.6-16中录入BADI名称后,单击“显示”按钮,进入下一界面,如图5.1.6-17所示。
图5.1.6-16
图5.1.6-17
在图5.1.6-17中单击菜单“实施”→“创建”,如图5.1.6-18所示。
在图5.1.6-18中,单击“创建”后,进入图5.1.6-19所示界面。
图5.1.6-18
图5.1.6-19
维护好实施文本后,保存BADI的用户实施Z_FMBW_CUSTOMER_01。
4)使用函数组为自定义字段增加屏幕字段,步骤如下:
第一步:创建自定义函数组,事务码SE37,如图5.1.6-20所示。
图5.1.6-20
在图5.1.6-20中,单击“创建组”进入下一屏幕,如图5.1.6-21所示。
图5.1.6-21
在图5.1.6-21中单击“保存”按钮,创建保存函数组。
第二步:为函数组创建两个全局变量,用来保存自定义字段的值和主程序中预算凭证的操作模式。事务码SE37,操作如下:
图5.1.6-22中录入函数后,单击“更改组”,进入下一屏幕,如图5.1.6-23所示。
图5.1.6-22
图5.1.6-23
在图5.1.6-23中,单击“主程序”按钮,进入下一屏幕,如图5.1.6-24所示。
图5.1.6-24
在图5.1.6-24中,双击此包含程序文件,在其中定义全局变量,如图5.1.6-25所示。
图5.1.6-25
为主程序定义了两个全局变量:fmbh、p_mode,前者用来记录主程序传过来的预算凭证抬头数据和自定义字段的屏幕修改值;后者用来记录预算凭证在主程序中的操作模式,比如新建、修改等操作。定义好后,激活主程序。
第三步:为函数组创建两个函数,事务码SE37。创建后的函数如下:
函数Z_FMBB_CI_FMBH_SET_DATA:如图5.1.6-26所示。
图5.1.6-26
说明:有两个导入参数DOC_HEADER、PROCESSING_MODE。该函数将主程序中自定义字段的值,传送到函数组的全局变量fmbh和p_mode中。
函数Z_FMBB_CI_FMBH_GET_DATA:如图5.1.6-27所示。
图5.1.6-27
说明:有两个导出参数DOC_HEADER、PROCESSING_MODE。该函数将函数组中全局变量的值返回传送到主程序中用于保存数据。
第四步:为在函数组增加屏幕,并控制屏幕字段的操作模式(自定义字段的录入状态控制)。事务码SE37,进入函数组的主程序,如图5.1.6-28所示。
图5.1.6-28
在图5.1.6-28中单击按钮显示对象列表,在窗口左下区,如图5.1.6-29所示。
图5.1.6-29
在图5.1.6-29中,在窗口左下区的函数组名称上,单击右键,在弹出菜单上,单击“创建”→“屏幕”,创建用户子屏幕,如图5.1.6-30所示。
图5.1.6-30
创建子屏幕后,为子屏幕维护全局变量FMBH中的用户扩展定义的字段(比如这里的ZZFM01),维护好的子屏幕如图5.1.6-31所示。
图5.1.6-31
在屏幕维护好后,为子屏幕增加PBO和PAI子例程,如图5.1.6-32所示。
图5.1.6-32
在图5.1.6-32中,双击相应的PBO、PAI子例程并创建其子例程,代码如图5.1.6-33所示。
完成了子例程的编写后,单击按钮,激活函数组、函数、子屏幕等。
5)为用户实施的BADI:Z_FMBW_CUSTOMER_01指定增强的屏幕号。事务码SE19,操作如下:
在图5.1.6-34中,单击“修改”按钮,进入下一屏幕。
在图5.1.6-35中,找到要实施屏幕增强的调用程序(调用程序是前台操作事务码绑定的实际使用程序名),然后为这些程序指定已调用程序(指向前面图5.1.6-21中创建的函数组的主程序名称)和屏幕号(为之前图5.1.6-30中创建定义的子屏幕号),然后保存。
图5.1.6-33
图5.1.6-34
图5.1.6-35
6)为用户实施的BADI:Z_FMBW_CUSTOMER_01的方法PUT_DATA_TO_SCREEN、GET_DATA_FROM_SCREEN写入增强代码,如下:
方法:PUT_DATA_TO_SCREEN,如图5.1.6-36所示。
方法:GET_DATA_FROM_SCREEN,如图5.1.6-37所示。
完成代码编写后激活相关程序。单击按钮激活BADI的实施Z_FMBW_CUSTOMER_01。需要注意的是,各个调用程序(即前台事务码)使用时,由于调用方法PUT_DATA_TO_SCREEN来传到用户函数组程序的全局变量时,其传送值不一样,会影响结果,造成再次显示抬头附加数据时的错误,比如调用程序RFFMMP_STAT(即事务码FMMPSTAT-生成统计性预算数据),在调用PUT_DATA_TO_SCREEN来传送DOC_Header数据时,总是使用一个全新空的数据,因此当第一次显示自定义的附加屏幕并且录入数据后传回到主数据后,再次打开看时,发现自定义屏幕上的附加字段没有了,因为再次自定义打开附加屏幕字段前会再调PUT_DATA_TO_SCREEN,此时如果传入参数值为空,就会把前面的录入数据清空了,像这种情况可以根据测试情况,在实施BADI的PUT_DATA_TO_SCREEN方法中,通过SY-CPROG(即主调用程序的名称)来判断,增加条件,不执行自定义函数Z_FMBB_CI_FMBH_SET_DATA即可。其实个人觉得这应该算是SAP程序的一个小BUG,代码如图5.1.6-38所示。
图5.1.6-36
图5.1.6-37
图5.1.6-38
7)为用户实施BADI的Z_FMBW_CUSTOMER_01方法:ADD_FIELDS_TO_LINE_ITEM写入增强代码,使其在事务码FMPEP中显示并可录入值,如图5.1.6-39所示。
图5.1.6-39
8)案例测试
测试效果如下:
①事务码FMBB预算凭证抬头自定义字段的录入测试,如图5.1.6-40所示。
图5.1.6-40
在图5.1.6-40中,会显示出用户扩展的凭证抬头字段,并供用户录入相应数据。录入完并保存后的凭证,如图5.1.6-41所示。
图5.1.6-41
②事务码FMPEP的测试,如图5.1.6-42所示。
图5.1.6-42
在图5.1.6-42中,单击“附加标题数据”按钮,可以录入凭证抬头数据。完成抬头数据录入后,可在行项目输出的ALV列中,录入自定义字段,如图5.1.6-43所示。
图5.1.6-43
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。