gb90可燃气体检测仪-ABAP三月通(3)
3.PP板块研发实例.
企业PP的一般流程汇总:
典型的SD研发有(不包罗SD板块加强).
发票打印|销售分析报表|Credit Note申请Form|S你好pping Note|Sales Forecast|Dunning Letter|S你好pment Status|Packing List|产物批次以及系列号报表等.
由于SD可能有大量的用户加强,在实例中有几个典型的案例.
1.MD04 save的Prod万分素原的PR
2.
3.
4.
5.
6.
7.
8.
4.FI板块研发实例.
1.编著财务报表
2.财务凭据的确定(Validation)
在HR,AP,AP,GL,Consolidation,Real Estate,Special Purpose Ledger等多模快都能发明有效性查抄(Validation)配备布置,所谓 Validation 不外是在凭据保存前按照设置条件判断此凭据是不是有效,再按照Validation设置的消息类型(有关消息请参考第例消息节制)决定凭据是不是许可保存(顺遂保存的),对稍微了解ABAP研发基础的用户是很容易理解的.
凭据Validation,Substitution以及User Exit的施用保证了凭据能乐成路程经过过程某些企业现实的自订庞大业务检测最后保存在数据库中.
***可施用Validation检测在记帐时某些cost center只能对应到具体某Functional Area(如上所述了Functional Area的话),某些用度类科目只能记到某具体
Cost center等.
比力实用的Validation IMG T-code有: OB28:AP/AR/GL Doc.| OAZ1:AM Posting|
GCVW:Global Validation(In SPL,Company Level)|GCVV:Local Validation(In SPL,
Company code Level).
下面以OB28为例,详细申明Validation的用处.(IMG Path如图7-1标号1)
[1]界说记帐明确承认.
[2]界说管帐凭据退代.
建立Validation步调:
下面以Line Validation STLINE只许可用户STONEF在5100(本位币Hong KongD)记帐时本位货币钱数不超过1000Hong KongD为例子,详细介绍Validation的配备布置步调.
***当然施用其它配备布置也能达到相同效果.
1.选择Callup Point建立Validation Name(如图7-2).
[1]1.在凭据抬头触发 2.凭据行项目触发 3.整个凭据触发,触发通常发生在用户按Enter键以及保存之时.
[2]新建Validation时按F2进入详细银幕(如图7-3)
[3]1表示拿获,只有选择拿获后Validation才真正起作用.
2.Validation建立步调详解(如图7-3).
[1]新建Validation,如在此新建Validation要回到图7-2按New entries然后拿获.
[2] 新建Step,一个Step包罗先决条件,查抄以及消息. 图7-3 Step001表示的是在
Company code 5100(Local Currency Hong KongD)下如果User是STONEF,如记帐簿位币超过1000Hong KongD,就弹出纰缪消息ZFIMSG 017(有关消息解析请参考第例消息节制).
***Validation触发的条件是餍足先决条件可是不餍足查抄条件.
[3]Rule可用在Validation,Substitution,Report Write Selection甚或ATP check,简略理解,时经常使用到的一些判断条件可建立成Rule,将Prerequisite以及check建立俩Rule-ZRULE1(图7-4)以及ZRULE2(图略.BSEG-DMBTR 1000
时浮现的纰缪(Validation ZSTLINE发生效力,消息的俩&参数被BKPF-USNAM以及BSEG-DMBTR代替),浮现的纰缪消息,由于凭据俩行Amount都>1000,此消息将弹出俩次.
1.ZSTLINE显然对USER STONEF操作所产生的任何管帐凭据都有效,比如只想限制STONE在施用FB50记帐可是F-53付款时却许可超过1000Hong KongD,请在先决条件上再加之Tcode FB50则Validationi就只对FB50有效.
2.想用Tcode比如FB50测试新建Validation,最少要求退出时下操作再进入,不然SAP会从缓以及冲突中读数据认为还是上次的配备布置,成果拥护却认为配备布置掉败,最保证的要领是从Validation IMG窗口施用/O FB50(或其它Tcode).
3.这类要领同样合用于任何其它相同情况的测试.
3.再谈建立Validation操作.(图7-9)
[1]删去Prerequisite以及Check代码.
[2]合并字符字段
[3]比如对line Validation,BKFF,BSEG,SYST(如想By Tcode选SYST-TCODE做条件)三对象可施用.
[4]选择rule做Prerequisite以及Check(参考图7-5).
[5]可施用User Exit做Prerequisite以及Check.(参考第8例凭据的退代).
[6]一些经常使用逻辑抒发型.
[7]通常施用的是Constant(恒量).
1.读者也许有如许的疑难,Validation究竟是怎么工作的很好,施用SE37在Function
FI_VALIDATION_HEADER以及FI_VALIDATION_ITEM合适位置设置断点,就可知道更详细的步伐逻辑.
别的,相干Table T001D|以及相干步伐GBTDMFI0|RGUGBR00,有兴趣的读者不妨研究一下.
2.另一个留给读者的疑难是,一个Validation可有多个Steps,不妨假设一Line Validation有俩Steps-STEP1以及Step2,它们的Prerequisite都是:BKPF-BUKRS = 5100,可是Check却差别甚或是抵牾的,Step1 check是BSEG-DMBTR 1000,成果会怎样
3.财务凭据的退代(Substitution)
以及Validation一样,凭据的退代在多个板块中能找到,IMG Path(IMG Path如图7-1标号2).
比力实用的Substitution IMG T-code有: OBBH:AP/AR/GL Doc.| OACS:AM Create Assets|OA02:Mass change Assets|GCVY:Global Substitution(In SPL,Company Level)|GCVX:Local Substitution(In SPL,Company code Level).
以及Validation差别的是,Validation只做检测,一般不做响应数据的修改,Substitution填补了这背面的缺陷,甚或许可以及user_exit相结合.
假设用户但愿在产生APAR凭据能将vendor,customer 或其它信息比如写入Assignment(BSEG-ZUONR)字段,或但愿某些P&L科目在记入某些特定成本中心时将些分析信息写入TEXT(BSEG-SGTXT)字段,可施用退代.
下面举一个最简略实例假设在公司代码5100中,如施用现金类科目10010120记帐,在Text(BSEG-SGTXT)写入信息,同时在期初,可能会将一些凭据post到上期间,施用退代假设是post到上期间的凭据Posting Date换成上期间最后一天.
此简略实例是为了申明问题,此中有些步以及谐第7例Validation相同,就不再逐一解说,但愿读者在现工商企业务中能举一反三,发挥退代作用.
自界说的退代步伐.
相干Tcode:GCX2. (图9-2)
[1]App. Area 选择GBLS
[2]输入自界说步伐名ZSTSUB(Copy并取代SAP默许的标准步伐RGGBS000)
***自界说的步伐名称最佳不超过8位,在OBBH彷佛只能显示步伐名的前8位.
相干表格函数以及步伐.
相干表格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.相干步伐ZSTSUB(自界说)| GBTDMFI0| GBTDMFIJ|RGUGBR00
***施用GCX2退换标准的RGGBS000如许就无需申请Access Key,别的一个GCX1是跨Client端的,一般用于特殊总帐SPL中给Field movement界说用户出口.
建立退代步调
同Validation一样,也需为其建立Step,一个Step包括先决条件以及退代(如图9-3).
[1]凭据头退代,在凭据抬头回车回保存凭据时餍足条件时发生效力.
[2]凭据行项目退代.
[3]增长删去一个退代
***在本例中,施用only exit U100(对应ZSTSUB子步伐U100)修改line item的Text.
[4]施用用户出口做退代. (有关怎么选Form法则请看本例思考).
[5]字段级退代.
假设ZSTSUB Form U100的source code如下,那么在餍足先决条件时,行项目的Text都写成了Record Payment Text.
FORM u100. "#EC CALLED
***U100 如只是用于 line item退代. 所以改变XBLNR不会乐成 .
***U100如果同事用于header以及line item,则俩句都会乐成执行.
BKPF-XBLNR = ''Reference For STONE Test''.
BSEG-SGTXT = ''Record Payment Text '' .
ENDFORM.
读者可思考下面几个问题:
思考:
1如果先决条件没有输入任何值,是不是退代会没有任何条件执行
2在ZSTSUB(本人自界说),用户可参考SAP标准步伐RGGBS000, RGGBS000的Form
会以啥子法则在差别级别的(header,Line,Complete doc)退代中做Exit ,用户可否自界说自己的field exit,header exit,line exit 以及complete exit
请看此FORM get_exit_titles TABLES etab,有近似语句.
这些由参数c_exit_param_none, c_exit_param_field以及c_exit_param_class决定
exits-name = ''U100''.
exits-param = c_exit_param_none. "能用在Field exit,only exit等任何处所
exits-title = text-100.
APPEND exits.
exits-name = ''U101''.
exits-param = c_exit_param_field."此Form只用于字段exit
exits-title = text-101.
APPEND exits.
exits-name = ''U801''.
exits-param = c_exit_param_class.
"Form U801只能在Callup point 3 complete doc才可施用.
exits-title = text-101. "Cost center from CSKS
APPEND exits.
3 BKPF,BSEG啥子样的值才可应用在退代步伐中
4为啥子有些字段纵然在退代中更改了可是不发生效力
下面再以举一实例,彻底解析退代的运行法则同时解释上边3,4提出的问题.
起首在FI_SUBSTITUTION_HEADER|FI_SUBSTITUTION_ITEM|ZSTSUB (自界说)| GBTDMFI0| GBTDMFIJ设置断点你能进行跟踪. 从技术上讲,在回车或保存触发退代前在荧幕上输入的一些值就已经保存在一些内表中,然后才执行退代去按照用户设置的条件去退换一些值而已.
实例:通常企业在期初未关帐前可能需要在上期间记帐.如用户需要假设posting date是上期间某个日期,AUTO将此日期退换成上期间最后一天.施用抬头退代.
1确定当新增退代时BKPF-BUDAT是不是可见
如在此看不到,纵然你写了代码也是失效的.如图9-6.
[1]施用only exit U100,也可施用field exit . [2]BKPF-BUDAT可见.
***施用下面参考代码将BCLTAB以及BCLFIELD稍微更改就可将BKPF,BSEG任何字段用于退代编码.
1所有退代字段关系在GB01表中,可施用下面代码施用BUDAT可用于退代.
在本人的机器上GB01建立了维护视图,因此现实上可直接施用SE16修改GB01,如果企业可能大量施用退代以及确定,可以思量用SE11为表GB01建立维护视图,不然就施用下面步伐.
Report ZMODGB01.
DATA ZGB01 LIKE GB01 .
SELECT SINGLE * INTO ZGB01 FROM GB01
WHERE BOOLCLASS = ''008''
AND CLASSTYPE = ''S''
AND BCLTAB = ''BKPF''
AND BCLFIELD = ''BUDAT'' .
* AND BCLTAB = ''BSEG''
* AND BCLFIELD = ''PRCTR'' .
ZGB01-BEXCLUDE = ''''.
MODIFY GB01 FROM ZGB01 .
2 在凭据的退代以及确定中,有几个比力有用的Tcode.
GGB0: All Validations.
GGB1: All Substitutions
GGB2: All Rule Class
GGB3:没有如许的Tcode,嘿嘿,你自己造一个吧.
GGB4: 拿获
2查抄退代代码AUTO生成.
退代代码是AUTO出产的,如许的AUTO生成步伐的现实应用许多,比如在CO-PA中,相干表,布局以及步伐许多是AUTO生成的,有关步伐AUTO出产请参考拙作ABAP百谈.
记得在OBBH银幕当新建一退代时,有如图9-7的银幕.
[1]退代名 [2]退代class,这个将对应到AUTO生成步伐GBTDMFIJ.
在GBTDMFIG中读者能瞅见四个子步伐FORM EXP_TAB_008_BKPF(class 8,callpnt1),FORM EXP_TAB_009_BSEG(class 9,callpnt2), FORM EXP_TAB_015_BKPF以及FORM EXP_TAB_015_BSEG(Class 15,Callpnt 3).
现在以FORM EXP_TAB_008_BKPF为例.如果读者不克不及在此子步伐的一个布局TEMP_STRUCT发明想退代的字段(原因就不细解),很明显,必需从头生成退代步伐.
***如果您的退代不工作可以如许找原因,在GBTDMFIG步伐中的上边提到的四个Form的TEMP_STRUCT布局没有看是不是有响应的字段.比如在TEMP_STRUCT布局中没有BKPF-BUDAT,当然posting date的退代代码就会不起作用,此时执行下面步调3运行RGUGBR00吧.
原因很简略,在退代步伐中界说的BKPF,BSEG至有关内表,退代代码按用户的逻辑修改了BKPF后如TEMP_STRUCT(现实对应的是可用做退代的全不字段)中没有,BKPF就被Reset回.
3从头生成步伐.
SE38运行RGUGBR00, 将能选的全选上的选项再运行吧(图略).
4.编著代码
下面是参考步伐,判断Posting Date如在上期间(非上月,以月为期间只是期间的一特殊的可作例子的事,国外企业彷佛都不如许接纳,有关期间请参考第4刀SAP期间概念)AUTO将其退换成上期最后一天(对其它期间失效,读者可能需要修改才可餍足贵企业需求).
FORM u100.
*统一Exit(Form)可用于head(Line item)或Filed 退代,互不影响.
*具体原理可跟踪GBTDMFIG(有GBTDMFI0动态挪用)
*此步伐由Yueming Li编著,若有必要读者可能需要改动.
Form 100.
BSEG-SGTXT = ''TEST TeXT''.
*BKPF-BUDAT
TABLES: T009B.
DATA: BEGIN OF T_T009B OCCURS 10,
BUMON LIKE T009B-BUMON,
BUTAG LIKE T009B-BUTAG,
END OF T_T009B.
DATA: L_DATE(8) TYPE C,
L_YEAR(4) TYPE C,
L_MONTH(2) TYPE C,
L_DAY(2) TYPE C,
L_PERMONTH(2) TYPE C,
L_CURYEAR(4) TYPE C,
L_CURMONTH(2) TYPE C,
L_CURDAY(2) TYPE C.
L_DATE = SY-DATUM.
L_CURYEAR = L_DATE(4).
L_CURMONTH = L_DATE+4(2).
L_CURDAY = L_DATE+6(2).
L_CURMONTH = L_CURMONTH - 0.
L_PERMONTH = L_CURMONTH - 1.
L_DATE = BKPF-BUDAT.
L_YEAR = L_DATE(4).
L_MONTH = L_DATE+4(2).
L_DAY = L_DATE+6(2).
L_MONTH = L_MONTH - 0.
IF L_CURYEAR NE L_YEAR.
BKPF-BUDAT = L_DATE.
EXIT.
ENDIF.
IF L_MONTH NE L_CURMONTH
AND L_MONTH NE L_PERMONTH.
BKPF-BUDAT = L_DATE.
EXIT.
ENDIF.
SELECT BUMON BUTAG
INTO T_T009B
FROM T009B
WHERE PERIV EQ ''Z1''
AND BDATJ EQ L_YEAR " year
AND ( BUMON EQ L_CURMONTH "Month
OR BUMON EQ L_PERMONTH ).
IF T_T009B-BUMON EQ L_PERMONTH.
APPEND T_T009B.
ENDIF.
IF T_T009B-BUMON EQ L_CURMONTH
AND T_T009B-BUTAG LE L_CURDAY.
APPEND T_T009B.
ENDIF.
ENDSELECT.
SORT T_T009B.
LOOP AT T_T009B.
IF T_T009B-BUMON EQ L_MONTH.
IF T_T009B-BUTAG GE L_DAY.
CONCATENATE L_YEAR T_T009B-BUMON T_T009B-BUTAG INTO L_DATE.
EXIT.
ENDIF.
ENDIF.
IF T_T009B-BUMON GT L_MONTH.
IF T_T009B-BUTAG GE L_DAY.
EXIT.
ENDIF.
ENDIF.
ENDLOOP.
BKPF-BUDAT = L_DATE.
ENDFORM. "U100
施用函数的.
FORM u100. "#EC CALLED
*统一个Form可用做header以及line 退代而互不影响.
BSEG-SGTXT = ''Line Item Text''. "For Line Sub.
DATA:Z_PSTDATE TYPE SY-DATUM,
Z_CURPER LIKE T009B-POPER,
Z_CURYEAR LIKE T009B-BDATJ,
Z_PSTPER LIKE T009B-POPER,
Z_PSTYEAR LIKE T009B-BDATJ,
Z_PERLSTDAY LIKE SY-DATUM.
*现实永恒不会发生记帐到上年以及上上期间的.
*check posting date''s period and fiscal year
CALL FUNCTION ''DETERMINE_PERIOD''
EXPORTING
DATE = BKPF-BUDAT
VERSION = ''Z1'' "Fiscal Year Var.
IMPORTING
PERIOD = Z_PSTPER
YEAR = Z_PSTYEAR .
*check sysdate''s period and fiscal year
CALL FUNCTION ''DETERMINE_PERIOD''
EXPORTING
DATE = SY-DATUM
VERSION = ''Z1'' "Fiscal Year Var.
IMPORTING
PERIOD = Z_CURPER
YEAR = Z_CURYEAR.
*可否在输入的posting date记帐让体系去判断.
CHECK Z_CURYEAR Z_PSTYEAR OR Z_PSTPER Z_CURPER.
*如posting date不在本期间得到其期间最后一##
Z_PSTPER = Z_PSTPER + 1 .
CALL FUNCTION ''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 . "如果Edit options许可瞅见期间的话也要改.
5.预制凭据可施用退代吗
这个问题就比如去问一个人是不是有双眉毛一样答案是一般生成是没有,如去整形院整就能有. SAP标准步伐是不容吧可预制凭据有退代的,其实也不必,因为预制凭据原来就不是正式凭据,比如posting date就算现在按照某种法则退代了,等真正posting时还不是要按照正常凭据的法则去post ,这未几此一举.
如果真需为预制设置退代,也很容易.请看下面分化.
(1)施用/H开始工作debug,按F6直至执行到SAPMF05A screen Number 1001,在module document_merge设置断点,这个module是判断是不是有退代的入口.
(2)parked doc g_status =2 .
如下图加入代码,则退代对FV50预制凭据发生效力.
FI_VALIDATION_DOC
FI_VALIDATION_HEADER
FI_VALIDATION_ITEM
6.物料凭据可施用退代以及确定吗
如果Mat doc产生的同时产生了财务凭据当然可以施用.
4.BKPF|BSEG浅析
5.Dunning催款
6.支票打印
7.
8.