财务知识小技巧财务凭证的退代.docx
《财务知识小技巧财务凭证的退代.docx》由会员分享,可在线阅读,更多相关《财务知识小技巧财务凭证的退代.docx(8页珍藏版)》请在冰豆网上搜索。
财务知识小技巧财务凭证的退代
(财务知识)小技巧财务凭证的退代
小技巧财务凭证的退代(Substitution)
和Validation不同的是,Validation只做检测,壹般不做相应数据的修改,Substitution弥补了这反面的缺陷,它和userexit结合将方便用户编写更复杂的逻辑。
注意的是,如果Substitution使用Userexit于程序中只做检查而不替代内容,此时,Substitution能够完全取代Validation。
简单地讲,替代就是于会计凭证生产时(包括手工和自动过帐)允许用户根据需求对凭证抬头和凭证行项目进行壹定的内容修改,这种灵活的功能能够满足壹些非常变态的需求,要不怎么说SAP什么东西均能轻易配置出来呢?
比如国内很多企业均要求会计凭证有个文本摘要可对某些自动凭证根据规则写入壹些文本摘要,或修改凭证的利润中心,功能范围等,同样,理论上讲,SAP系统几乎允许你修改会计凭证的任何内容,甚至包括会计科目,SAP壹直强调科目没有级别,对自动科目设置非常严谨,所以修改会计科目通常发生于自动过帐时人工无法干预科目的情况,典型的是MIRO时科目只能对应供应商主数据科目,如果壹个供应商发票校验需要对应应付或其他应付,系统就无法自动实行,就可采用科目替代。
替代Tcode:
OBBH:
AP/AR/GLDoc.
OACS:
AMCreateAssets
OA02:
MasschangeAssets
GCVY:
GlobalSubstitution(InSPL,CompanyLevel)
GCVX:
LocalSubstitution(InSPL,CompanycodeLevel).
GGB1:
各模块全部替代
按照国内很多企业的内部制度,所有的会计凭证均需要文本摘要且且多数凭证要打印出来存档,对于很多自动凭证却且不能产生文本摘要,此时能够使用替代塞壹个文本进去,有的企业连ERP系统产生的特有的中间凭证也打印,真是不掀嫌浪费纸张。
图1是壹个文本摘要的例子,和Validation不同的是,Substitution只有俩步骤,图1表示的是如果凭证类型是折旧AF,且且科目是累计折旧类科目或折旧费用科目,则文本摘要为“计提本月折旧”。
图1中建立Substitution和建立Validation步骤壹样。
到目前为止,我们发现Validation和Substitution建立均非常简单,只要有简单逻辑思维的用户不需要任何编程经验拖拖拽拽就能够实现功能,国内的ERP设计者应该好好借鉴借鉴,ERP项目实施不容易,不要让可怜的业务顾问天天浪费时间去玩技术玩Coding。
系统允许更复杂的替代逻辑,下面举壹个结合用户出口的替代简单应用实例。
业务背景:
假设于X公司代码5100中,如果发生业务招待费,则于其行项目文本摘要字段(BSEG-SGTXT)写入信息“业务招待费”以做统计。
同时,于X公司代码5100的期初,会将壹些调整凭证或月结凭证过帐到上期间,如果有这样的业务,无论用户输入上期间的任何壹天,替代将自动将上期间的凭证的过帐日期换成上期间最后壹天。
参考步骤如下:
(1).自定义的退代程序(Tcode:
GCX2)
最好Copy系统默认的程序出来修改,起码不要申请AccessKey!
App.Area选择GBLS,输入Copy出来的自定义程序ZRGGBS00,自定义的程序名称最好不超过8位,系统只能显示程序名的前8位。
(2)。
建立退代步骤(Tcode:
OBBH)
建立壹个替代的Step包括先决条件和退代内容,如图3,你可选择壹个替代字段,表示替代这个字段的内容,于此选择”Onlyexit”,表示使用用户出口编写程序来替代。
(3).剖析替代用户出口程序ZRGGBS00(Tcode:
SE38).
用户出口程序ZRGGBS00分析.
究竟自定义的Form例程是fieldexit,headerexit,lineexit或completeexit有系统参数c_exit_param_none,c_exit_param_field和c_exit_param_class决定。
通常用户能够见到替代出口程序如下(粗体部分):
exits-name='U100'.
exits-param=c_exit_param_none.“能用于Fieldexit,onlyexit等任何地方
exits-title=text-100.
APPENDexits.
exits-name='U101'.
exits-param=c_exit_param_field.”此Form只用于字段出口Fieldexit
exits-title=text-101.
APPENDexits.
exits-name='U900'.
exits-param=c_exit_param_class.”U801只能于completedoc才可使用.
exits-title=text-900.
APPENDexits.
*............能够对着Copy增加自定义的例程
REFRESHETAB.
LOOPATEXITS.
ETAB=EXITS.
APPENDETAB.
ENDLOOP.
增加壹个例程就5个简单步骤:
1.Exits-name=‘****’表示出口例程名称。
2.exits-param=‘***’只有c_exit_param_none/field/class3种,表示例程的用法.
3.exits-title=’***’例程的抬头显示
4.APPENDexits.表示增加该出口例程。
5.接下来定义壹个例程Form****/endform.于例程中编写替代逻辑。
接下来根据业务背景编写逻辑,假设使用Form100,其类型c_exit_param_none,可用于“OnlyExit”,参考代码如下表:
FORMU100.
DATA:
Z_PSTDATETYPESY-DATUM,
Z_CURPERLIKET009B-POPER,
Z_CURYEARLIKET009B-BDATJ,
Z_PSTPERLIKET009B-POPER,
Z_PSTYEARLIKET009B-BDATJ,
Z_PERLSTDAYLIKESY-DATUM.
Ifbseg-hkont=‘这填写您的业务招待费科目’.
BSEG-SGTXT='业务招待费'."For业务招待费用文本摘要.
Endif.
*如果期初发生上期的财务凭证过帐,则自动将过帐日期壹律调整为上期期末最后壹天.
*checkpostingdate'speriodandfiscalyear
CALLFUNCTION'DETERMINE_PERIOD'
EXPORTING
DATE=BKPF-BUDAT
VERSION='Z1'"你的会计年度变式,国内多是K4
IMPORTING
PERIOD=Z_PSTPER
YEAR=Z_PSTYEAR.
*checksysdate'speriodandfiscalyear
CALLFUNCTION'DETERMINE_PERIOD'
EXPORTING
DATE=SY-DATUM
VERSION='Z1'"FiscalYearVar.
IMPORTING
PERIOD=Z_CURPER
YEAR=Z_CURYEAR.
*能否于输入的postingdate记帐让系统去判断.
CHECKZ_CURYEAR<>Z_PSTYEARORZ_PSTPER<>Z_CURPER.
*如postingdate不于本期间得到其期间最后壹天
Z_PSTPER=Z_PSTPER+1.
CALLFUNCTION'FIRST_DAY_IN_PERIOD_GET'
EXPORTING
I_GJAHR=Z_PSTYEAR
I_PERIV='Z1'
I_POPER=Z_PSTPER
IMPORTING
E_DATE=Z_PERLSTDAY.
*无论用户选择过帐到上期哪壹天,均将过帐日期设置为最后壹天
BKPF-BUDAT=Z_PERLSTDAY-1.
BKPF-MONAT=Z_PSTPER.
通过上面的业务我们能够见到,替代+用户出口能实现更复杂的业务,而这些业务通常是简单
的拖拽实现不了的,再举壹个典型的有用的替代实例。
业务背景:
于SAP中,供应商主数据的科目只有壹个比如通常设置的是应付帐款,于SAP中,科目和中
国传统会计不壹样,其科目是不强调层级的,比如应付帐款,国内ERP可能会带供应商项目
等几个核算项目,SAP采用另壹种方式,它将供应商直接见成明细科目,从其主数据自动带
出应付帐款,如果仍需要区分是什么项目的应付,则可采用统计内部订单或特殊总帐标志,
可是,于后勤发票校验(Tcode:
MIRO)时却不能使用特殊总帐标志。
这样,比如企业从同
壹供应商购买生产用材料(对应普通应付帐款)和项目材料(对应应付项目款)且需要从会
计科目上就直接区分时俩种应付时就有点小麻烦。
壹般的思路有这么些:
I.因为同壹供应商主数据中只能有壹个科目又不能特殊总帐标志,建议拆分成多个虚拟供应商来对应不同科目,此法严重违反编码唯壹性原则,贼笨。
II.会计科目仍是使用同壹个应付帐款科目,附加壹个字段比如文本/参考字段来区分同壹供应商的不同应付,假设供应商仍承包了你的于建项目有涉及应付劳务,如果仅用壹个文本区分不严谨,也没有从科目上直接区分那样直观。
III.使用科目替代方式解决,直接从科目上区分不同应付款。
参考步骤如下:
a.SE16:
V_T053定义行文本标志,其中ZNOR:
MIRO普通应付和ZPSC:
MIRO项目应付。
b.建立特殊总帐标志9表示应付项目款,且设置好应付项目款会计科目。
c.使用Onlyexit出口替代,这样使用替代就直接从科目上就区分出了应付帐款类型,
参考代码如下表(参考使用,责任自负):
FORMU100.
DATA:
IWA_T074LIKET074,
I_ANS
(1)TypeC.
Check(SY-Tcode='MIRO'ORSY-Tcode='MR8M')
andBSEG-KOART='K'.“检查是否为发票校验事务
condensebseg-sgtxt.
*判断用户必须输入文本摘要而且MIRO/MR8M时只能是ZNOR和ZPSC
ifbseg-sgtxt<>'MIRO普通应付'andbseg-sgtxt<>'MIRO项目应付'.
messageE001(00)with'ChooseZNORorZPSC'.
endif.
*如果文本输入应付项目款则从特殊总帐配置中读取应付项目款项目替代应付帐款
ifbseg-sgtxt='MIRO项目应付'.
I_ANS='9'."特殊总帐标志9表示应付项目款
SELECTSINGLE*INTOIWA_T074FROMT074
WHEREKTOPL='INT'
ANDKOART='K'
ANDUMSKZ=I_ANS
ANDHKONT=BSEG-HKONT.
IFIWA_T074-HKONTNESPACE.
BSEG-HKONT=IWA_T074-HKONT."特殊总帐科目
BSEG-UMSKZ=I_ANS."特别总帐标示
BSEG-UMSKS='A'."特别总帐事务类型,A,W,O
*SAP高度集成替代必须考虑其它模块影响,替代同时也替代特殊总帐的计划层次。
BSEG-FDLEV=IWA_T074-EBENE."特殊总帐计划层次,如果启动CBM
BSEG-BSCHL+1
(1)='9'."记账码的第壹码
ENDIF.
endif.
endform.
为什么你的替代不起作用?
替代不起作用通常有俩个原因:
壹.系统默认不允许你替代该字段内容。
SAP将所有的允许字段退代关系维护于GB01表中,如果该表中没有出现你的替代字段,你是不能替代的,比如会计科目BSEG-HKONT通常是不允许替代的,你就需要于此表增加。
二.替代程序需要重新自动编译。
于壹些特殊情况下,你发现你的Validaton和Substitution均不起作用了,SE38运行程
序RGUGBR00|RGUGBR00,将能选的项目全选上手工重新编译就行。
替代如何工作?
关联表格:
GB01|T001Q|T80D|GB03|GB03T|GB31|GB31T||GB907|GB90|GB92|GB922|GB901
|OXT_GENOBJDTL|。
关联函数和程序:
FI_SUBSTITUTION_ACTIVE|FI_SUBSTITUTION_DOC||FI_SUBSTITUTION_HEADER|FI_SUBSTITUTION_ITEM|GBTDMFI0|GBTDMFIJ|RGUGBR00|RGUGBR00|GBTDMFIJ|GBTDMFIG|MF05AIENJ
于会计凭证的主程序SAPMF05A的子例程MF05AIENJ中,Moduledocument_mergeINPUT是检查和替代的处理入口,
简单理解,系统将用户自屏幕上输入的信息首先保存于壹些临时内表中,当通过所有的业务检查时最后保存到数据库,替代则是根据用户设置的条件去退换掉内表的壹些临时内容从而保存到壹些字段内容最终保存到数据库时是用户替换的内容。
于叙述SAP增强时会详细描述这个机制。