SAP CODING BLOCK

https://blog.csdn.net/m0_46145967/article/details/110954475

 SAP Coding Block 是一个好用的功能可以将字段安装到FAGLFLEXT表中(这个其实不是一个表,是一个CDS视图,所以新增的字段还需要安装ADT环境写一个扩展的CDS视图写进来)

1.路径如下,OXK3 事务码

路径:【1809】SPRO=>财务会计=>财务会计全局设置=>分类账=>字段=>客户字段=>编辑编码块, 此步骤会将激活包入请求中,持续时间半个小时到一个小时,耐心等待别让系统掉线。同时,系统会自动生成9999屏幕,用于凭证输入时输入自定义字段的内容这一步执行时间较长,为防止中途超时掉线,需要有人值守,如果需要BASIS调整下前端回话超时限制

 

 2.检查ACDOCA / BSEG / FAGLFLEXT(视图)

 
 

 3.激活日志

 

4.OXK3前后效果

 5.BSEG / ACDOCA 表前后对比

 6.OXK3 ->环境->准备快速输入

 

 7.OXK3 ->环境->子屏幕

 上图的定位字段是控制字段的显示顺序用的,后续生成成功的屏幕字段顺序做个对比,也可以点击预览做字段的显示顺序调整

 

 8.如果需要将上述添加的字段作为科目余额汇总的一个维度,则需要将字段对应添加到科目余额汇总表FAGLFLEXT,如果不需要则可以跳过本步骤

 

 9.OBY6 / OBC4 / FS00(总账科目)/ OB41(修改记账码40、50的增强字段)

 

 10.OB41(修改记账码40、50的增强字段)

 11.此时MSEG表是DUMP状态,DUMP信息显示缺少几个字段需要增强到MSEG中,SE16N查看表MSEG如下显示有代理对象,这种表没有办法直接放增强字段进去,需要在Eclipse中安装ABAP 开发工具 ADT做一个CDS的扩展视图

 看表能否直接增强字段也可以从SE11这里查看到,MARA物料主数据表替代对象为空则可以直接增强。

 

 

以上字段增强就算完成了,前台可以展示存储了,对于ABAP来说还需要做一个创建会计凭证时的增强,这部分很简单,BADI名称BADI_ACC_DOCUMENT

新BADI : BADI_ACC_DOCUMENT

 

 

 

 

 METHOD IF_EX_ACC_DOCUMENT~CHANGE.
DATA: WA_EXTENSION   TYPE BAPIPAREX,
          EXT_VALUE(960) TYPE C,
          WA_ACCIT       TYPE ACCIT,
          L_REF          TYPE REF TO DATA.

FIELD-SYMBOLS: <L_STRUC> TYPE ANY,
                   <L_FIELD> TYPE ANY.

SORT C_EXTENSION2 BY STRUCTURE.

LOOP AT C_EXTENSION2 INTO WA_EXTENSION.
AT NEW STRUCTURE.
CREATE DATA L_REF TYPE (WA_EXTENSION-STRUCTURE).
        ASSIGN L_REF->* TO <L_STRUC>.
      ENDAT.
      CONCATENATE WA_EXTENSION-VALUEPART1 WA_EXTENSION-VALUEPART2
                  WA_EXTENSION-VALUEPART3 WA_EXTENSION-VALUEPART4
INTO EXT_VALUE.
MOVE EXT_VALUE TO <L_STRUC>.
      ASSIGN COMPONENT 'POSNR' OF STRUCTURE <L_STRUC> TO <L_FIELD>.
READ TABLE C_ACCIT WITH KEY POSNR = <L_FIELD>
INTO WA_ACCIT.
IF SY-SUBRC IS INITIAL.
MOVE-CORRESPONDING <L_STRUC> TO WA_ACCIT.
MODIFY C_ACCIT FROM WA_ACCIT INDEX SY-TABIX.
      ENDIF.
    ENDLOOP.

  ENDMETHOD.

 

======================================================================

文章目录
1.背景
2.添加字段
2.1 普通模式
2.2 专家模式
2.3 新建MSEG的CDS视图
3.添加字段到屏幕
3.1 需要更改的标准程序及屏幕
3.2 将拷贝出来的屏幕替换标准屏幕
4.维护字段状态
4.1 维护字段状态变式
4.2 维护字段是否隐藏或者可选
5.添加搜索帮助
5.1 创建搜索帮助
5.2 编码块屏幕自定义字段搜索帮助
5.3 应收应付屏幕添加自定义字段搜索帮助
6.检查自定义字段的合法性
6.1 添加检查表
6.2 通过校验来检查合法性
6.2.1 编写出口检查代码
6.2.2 维护应用区域的退出程序
6.2.3 配置验证
6.2.4 配置有效性
6.2.5 激活校验
7.调整字段长度
7.1 SE11调整结构CI_COBL里的自定义字段的数据元素的长度
7.2 SE14调整表
7.3 OXK3专家模式调整
8.删除字段
8.1 OXK3专家模式删除
8.2 删除MSEG的CDS视图字段
9.增强字段超过18个
10.常见问题
10.1 屏幕配置(T019)是对的,但是前台屏幕还是标准屏幕,不是拷贝出来的增强屏幕?
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'
1
2
3
4
5
6
7
8
9
EXPORTING
1
SOURCE_STRUCTURE =
1
APPLY_RESTRICTIONS = ' '
TABLES
shlp_tab = shlp_tab
record_tab = record_tab
source_tab = lt_kna1
CHANGING
shlp = shlp
callcontrol = callcontrol
1
2
3
4
5
6
7
8
EXCEPTIONS
1
ILLEGAL_STRUCTURE = 1
1
OTHERS = 2
.
1
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位长度
1

步骤如下:

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.
————————————————
版权声明:本文为CSDN博主「Yisoon」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HAND_YS/article/details/122874066

posted @ 2023-05-24 15:03  ABAP-武汉  阅读(2683)  评论(0编辑  收藏  举报