OXK3 CodingBlock 字段

1.背景
在日益复杂的财务核算中,越来越多的辅助核算项需要在凭证中展现。例如,营业外收支、政府补助等需要挂项目;内部交易的收入、财务费用等需要挂客商;内部资金调拨往来科目需要挂原因代码;SAP的一张凭证中虽然有众多的字段,但是许多是各行各业用到的,不能随便将已有字段改造成自定义的辅助核算字段。
此时,SAP的coding block功能能够部分解决这一问题,但是有一定的局限性,因为coding block即便激活,能够使用也是除客户、供应商统驭科目外的科目,客户、供应商统驭科目如果想使用需要做其他的系统开发。

2.添加字段
事务代码OXK3

2.1 普通模式
最多可激活18个字段,每个字段的长度不得长于22,自定义字段必须以"ZZ"或 “YY” 开头

点击执行,可以勾选测试运行,以检查是否满足执行条件测试运行结果,警告消息中会有激活步骤完成后需要对MSEG视图需要特殊处理的note

测试执行如果无错误,则正式执行,激活过程由于修改了大量标准表和结构,同时相应的程序也需要同步调整,此步骤会将激活包入请求中,并且持续半个小时到1个小时,前台业务操作将会ABAP DUMP而受到影响,会出现耐心等待别让你的系统掉线,如果掉线,则根据ABAP错误使用SE11直接去激活ABAP对象,最后系统会自动生成9999屏幕,用于凭证输入时输入自定义字段的内容。9999屏幕为编码块屏幕。

2.2 专家模式

添加字段到结构CI_COBL和CI_COBL_BI

需要添加的字段,字段长度可以超过22位,最后激活该结构

保持跟结构CI_COBL一致,最后激活

2.3 新建MSEG的CDS视图

无论是使用普通模式还是专家模式,都需要调整MSEG的CDS视图,在Eclipse里操作步骤如下:

点击下一步,选择Extend View,点击完成
编写如下代码:
@AbapCatalog.sqlViewAppendName: ‘Z_CL_COBL’
@EndUserText.label: ‘Extension view for Append CI_COBL’
extend view nsdm_e_mseg with Z_CL_COBL_TEMP {
cast(’’ as zz001 ) as ZZ001,
cast(’’ as zz002 ) as ZZ002,
cast(’’ as zz003 ) as ZZ003,
cast(’’ as zz004 ) as ZZ004,
cast(’’ as zz005 ) as ZZ005,
cast(’’ as zz006 ) as ZZ006,
cast(’’ as zz007 ) as ZZ007,
cast(’’ as zz008 ) as ZZ008,
cast(’’ as zz009 ) as ZZ009,
cast(’’ as zz010 ) as ZZ010,
cast(’’ as ze_zzdkhth ) as ZZDKHTH,
cast(’’ as ze_zzzqlx ) as ZZZQLX,
cast(’’ as ze_zzyhda ) as ZZYHDA,
cast(’’ as ze_zzqmc ) as ZZQMC,
cast(’’ as zz011 ) as ZZ011,
cast(’’ as zz012 ) as ZZ012,
cast(’’ as zz013 ) as ZZ013,
cast(’’ as zz014 ) as ZZ014
}
最后激活

3.添加字段到屏幕
需要注意的是:这种coding block实现的方式只能应用到总账凭证上,应收应付不适用。应收应付我们的实现方法是:修改标准程序。
应收应付实现方法如下:
因为SAP的Coding Block功能并没有覆盖FI的全部模块,在应收应付帐和预制凭证中需要拷贝标准屏幕并手工添加Coding Block字段以满足业务需求

3.1 需要更改的标准程序及屏幕
SAPMF05A: 用户总帐屏幕一般过帐创建及修改
屏幕301->9901 客户 屏幕302->9902 供应商 屏幕303->9903特殊分类帐
SAPMF05L:用户总帐屏幕一般过帐显示
屏幕301->9901 客户 屏幕302->9902 供应商 屏幕303->9903特殊分类帐
SAPLF040: 预制凭证创建/修改/显示
屏幕301->9901 客户 屏幕302->9902 供应商 屏幕303->9903特殊分类帐
例如:复制标准屏幕303到9303或者9903

点击布局,添加自定义字段到复制的屏幕中

选择自定义字段

如果需要控制修改凭证时,前台该自定义字段可以编辑,则修改屏幕字段属性

3.2 将拷贝出来的屏幕替换标准屏幕

标准表T019,将标准屏幕301或者302或者303对应的条目里,将屏幕号改成自定义屏幕

或者新建配置
客户配置如下:

供应商配置如下:

特殊分类账配置如下:

或者

如果复制屏幕没有显示出来,可以检查表T074U中的事务类型 UMSKS,在程序MF05AFD0_DYNPRO_ERMITTELN里调试跟踪找出问题

4.维护字段状态

该配置决定了自定义字段是否在编码块中隐藏、必输属性。
事务代码SPRO或者事务代码OBC4

4.1 维护字段状态变式

4.2 维护字段是否隐藏或者可选

5.添加搜索帮助

由于是自定义字段,不能使用标准搜索帮助,故需要自建搜索帮助,步骤如下:

5.1 创建搜索帮助

事务代码SE11,输入搜索帮助名称,ZH+字段名

事务代码SE37,复制标准函数F4IF_SHLP_EXIT_EXAMPLE到ZFMFI_ZZ004_SHLP_EXIT,代码如下:

RANGES:lr_zz004 FOR cobl-zz004.
RANGES:lr_zz004_txt FOR kna1-name1.

LOOP AT shlp-selopt INTO DATA(ls_selopt).
IF ls_selopt-shlpfield = ‘ZZ004’.
APPEND VALUE #( sign = ls_selopt-sign option = ls_selopt-option low = ls_selopt-low high = ls_selopt-high ) TO lr_zz004.
ELSEIF ls_selopt-shlpfield = ‘ZZ004_TXT’.
APPEND VALUE #( sign = ls_selopt-sign option = ls_selopt-option low = ls_selopt-low high = ls_selopt-high ) TO lr_zz004_txt.
ENDIF.
ENDLOOP.

SELECT
  kunnr AS zz004,name1 AS zz004_txt
  FROM kna1
  WHERE kunnr IN @lr_zz004
   AND  name1 IN @lr_zz004_txt
  INTO TABLE @DATA(lt_kna1).

"也可以使用系统标准函数F4UT_RESULTS_MAP将源数据绑定到recordtab
CALL FUNCTION 'F4UT_RESULTS_MAP'
    EXPORTING
SOURCE_STRUCTURE         =
APPLY_RESTRICTIONS       = ' '
TABLES
  shlp_tab    = shlp_tab
  record_tab  = record_tab
  source_tab  = lt_kna1
CHANGING
  shlp        = shlp
  callcontrol = callcontrol
EXCEPTIONS
  ILLEGAL_STRUCTURE        = 1
  OTHERS      = 2

IF sy-subrc <> 0.
Implement suitable error handling here
ENDIF.

5.2 编码块屏幕自定义字段搜索帮助

添加搜索帮助到COBL结构,SE11打开结构CI_COBL
选中需要添加搜索帮助的字段,点击搜索帮助

激活该结构

时间较长,耐心等待

用同样的方法在结构CI_COBL_BI里对自定义字段加搜索帮助

最后激活

添加完之后,编码块屏幕的自定义字段会有搜索帮助

5.3 应收应付屏幕添加自定义字段搜索帮助

应收应付是复制标准屏幕到自定义屏幕(具体步骤可参考 3.1需要更改的标准程序及屏幕 )例如复制标准屏幕303到9303或者9903,打开该屏幕,添加搜索帮助

前台F-02执行效果如下

6.检查自定义字段的合法性

6.1 添加检查表

当自定义字段有相关的检查表,且自定义字段名和检查表名中被检查的字段名一致,则可以直接使用检查表。

6.2 通过校验来检查合法性
当自定义字段没有相关的检查表,比如自定义字段ZZ005,辅助供应商字段,需要从表LFA1里根据供应商检查该字段的合法性,而LFA1里没有ZZ005字段,这种情况下,需要用到SAP的校验来检查合法性,步骤如下:

6.2.1 编写出口检查代码
事务代码SE38复制标准程序RGGBR000到ZFIM_RGGBR000
添加如下代码

6.2.2 维护应用区域的退出程序

事务代码GCX2,将上一步复制的程序维护在应用区域GBLR的退出程序列

6.2.3 配置验证

事务代码GGB0,在财务会计-行项目下新建步骤

设置检查:双击退出简短描述中的“辅助供应商校验”,则已经将校验的出口ID添加到步骤上了

设置消息:设置完毕如下所示,最后点击保存

6.2.4 配置有效性

事务代码OB28,配置公司代码和调用点的检查是否可用。
调用点2为行项目检查,活动等级1为激活,0为未激活

6.2.5 激活校验

SE38运行程序RGUGBR00

最后前台F-02执行效果如下

7.调整字段长度

比如将字段长度调短,ZZ006字段由22位长度缩短为10位长度

 

步骤如下:

7.1 SE11调整结构CI_COBL里的自定义字段的数据元素的长度

调整时间较长,耐心等待

7.2 SE14调整表

调整完之后,有很多表没有激活,需要使用事务代码SE14一个个调整表对象调整过程中不能强制退出调整或者掉线,如果退出了,则使用无效临时表找回数据临时表都是QCM开头

最后在SE38程序里SELECT临时表,将取到的数据写SQL语句保存到正式表中。
如果以上方式还无法找回数据,则请求BASIS协助。如果调整的是大表,耗时较长,可以使用后台方式。

7.3 OXK3专家模式调整

事务代码OXK3切换到专家模式,将相关代码重新调整

选中需要调整的自定义字段,添加控制条目-更新运行

8.删除字段

不推荐删除字段,删除过程耗时特别长,一个字段调整预估六七个小时,最后运行完毕,有可能调整失败,COBL结构和拓展CDS视图都会激活不了。

8.1 OXK3专家模式删除

事务代码OXK3里切换到专家模式

选中需要删除的自定义字段,删除控制条目-更新运行

8.2 删除MSEG的CDS视图字段

Eclipse里打开MSEG的拓展CDS视图

删除该字段,激活CDS。

9.增强字段超过18个

Cording Block最多支持18个字段,但是某些情况下需要的辅助核算字段可能会超过18个。
下图中编号133到150为客户保留编号,所以最多18个字段(加的字段必须在表TCOBM和表TCOBF有数据)

解决办法:
将多个字段(该字段保证同时隐藏或者同时必输或者同时可选输入)设置在同一个编码下,包括表TCOBM和表TCOBF

OBC4设置字段状态时只会显示其中一个字段。比如投资产品(ZZFIF0016)和替补字段(ZZFIF0021)设置成同一个编码(组),下图只会显示投资产品字段,设置了投资产品字段状态的同时,也会设置替补字段的状态

10.常见问题
10.1 屏幕配置(T019)是对的,但是前台屏幕还是标准屏幕,不是拷贝出来的增强屏幕?
通过跟踪标准代码,由凭证上事务类型缺失造成的。而事务类型在T074U表里可以通过账户类型和特殊总账标记获得。在会计凭证过账时,将事务类型写入到增强字段里,具体代码如下:
"事物类型逻辑 根据记账码和特殊总账标记取事务类型
DATA ls_zfiextn TYPE zsfibesg.
SELECT SINGLE b~umsks
FROM tbsl AS a
INNER JOIN t074u AS b ON a~koart = b~koart AND b~umskz = @<gfs_docline>-umskz
WHERE a~bschl = @<gfs_docline>-bschl
INTO @DATA(lv_umsks).
ls_zfiextn-buzei = gv_itemno. "凭证行号
ls_zfiextn-umsks = lv_umsks.
gt_ext2-structure = ‘ZSFIBESG’.
gt_ext2-valuepart1 = ls_zfiextn.
APPEND gt_ext2. CLEAR gt_ext2.

                        
原文链接:https://blog.csdn.net/HAND_YS/article/details/122874066

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值