尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

COOIS/COOISPI选择条件定制:从界面增强到数据传递的完整实践

COOIS/COOISPI选择条件定制:从界面增强到数据传递的完整实践
📅 发布时间:2026/6/29 8:52:11

1. 在输入界面增加选择条件

做过SAP开发的朋友都知道,COOIS/COOISPI报表是生产模块最常用的标准报表之一。但标准功能的选择条件往往不能满足实际业务需求,比如最近我就遇到一个需求:生产部门需要按工艺路线和成本中心筛选订单。这时候就需要对标准报表进行增强开发。

具体操作是在程序IOCTOPSL中找到增强点ioctopsl_04。这个增强点位于静态包含程序SES_IOCTOPSL中。我通常会创建一个自定义BADI实现ZBADI_COOISPI来处理这个增强。这里有个小技巧:在增强代码中,除了添加新字段外,最好同时考虑字段的校验逻辑。比如工艺路线字段需要检查是否属于当前工厂。

ENHANCEMENT 1 ZBADI_COOISPI. "active version DATA: ls_selopt TYPE rsdsselopt. IF screen-group1 = 'Z01'. "自定义字段组 CASE screen-name. WHEN 'ZROUTE'. "工艺路线字段 PERFORM validate_route USING screen. ENDCASE. ENDIF. ENDENHANCEMENT.

2. 新增选择字段文本设置

字段加上了,但用户看到的还是技术字段名,这显然不友好。我们需要在程序PPIO_ENTRY中设置字段文本。这里有个容易踩的坑:文本设置必须与后续步骤中的字段ID完全一致,否则会导致字段显示异常。

实际操作中,我会在SE63事务码中维护文本符号,然后在PPIO_ENTRY程序中引用。建议把新增字段的文本都集中维护在一个自定义Include中,方便后续维护。比如:

* 在ZCOOIS_TEXT_INCLUDE中定义 DATA: BEGIN OF gt_sel_text OCCURS 0, fieldname TYPE fieldname, text(40) TYPE c, END OF gt_sel_text. gt_sel_text-fieldname = 'ZROUTE'. gt_sel_text-text = TEXT-z01. "工艺路线 APPEND gt_sel_text.

3. 设置新增字段显示控制

字段不是加了就能自动显示的,还需要在IOCTOPSL程序的另一个增强点ehp603_ppio_ent_at_scr_out_02中控制显示逻辑。这里我建议使用新的BADI实现ZBADI_COOISPI_01,与之前的增强分开管理。

实际项目中我发现,字段显示往往需要根据用户权限或组织架构动态控制。比如成本中心字段可能只对财务部门可见。这时可以在增强代码中加入权限检查:

METHOD if_ex_ehp603_ppio_ent~at_scr_output. LOOP AT screen. CASE screen-name. WHEN 'ZKOSTL'. "成本中心字段 IF NOT has_authority('ZCOOIS_KOSTL'). screen-active = 0. MODIFY screen. ENDIF. ENDCASE. ENDLOOP. ENDMETHOD.

4. 取数程序中选择条件字段定义

现在来到核心部分——在取数程序中定义选择条件字段。这里涉及两个关键程序:LCOISSELECTTOP和SAPDBIOC。我建议先在LCOISSELECTTOP的增强点LCOISSELECTTOP_01中定义字段结构,然后在SAPDBIOC的增强点SAPDBIOC_01中映射到数据库字段。

有个重要细节:字段类型必须与数据库表字段完全匹配。比如工艺路线在MARC表中是CHAR10类型,那么增强中也必须使用相同类型。我曾经因为类型不匹配导致数据筛选失效,排查了半天才发现问题。

* LCOISSELECTTOP增强 TYPES: BEGIN OF zcoois_selopt, zroute TYPE plnfl, "工艺路线 zkostl TYPE kostl, "成本中心 END OF zcoois_selopt. DATA: gs_zcoois_selopt TYPE zcoois_selopt.

5. 条件数据传递增强点

数据传递主要在LCOISSELECTU03程序的函数COIS_SELECT_PARAMETERS_SET中完成。这里有两个关键FORM:reset_parameters和fill_parameters。前者用于初始化参数,后者用于传递实际值。

我遇到的一个典型问题是:自定义字段的值在界面输入后没有传递到查询条件中。后来发现需要在fill_parameters中显式地将屏幕字段值赋给选择参数:

FORM fill_parameters. * 标准代码... "增强部分 IF sy-tcode = 'COOIS'. gs_zcoois_selopt-zroute = ioctopsl-zroute. gs_zcoois_selopt-zkostl = ioctopsl-zkostl. ENDIF. ENDFORM.

6. 取数程序取数增强点

数据最终是在DBIOC_FILL_IOMAMO_TAB程序的fill_iomamo_tab子例程中被查询的。这里需要修改标准程序来加入新的筛选条件。注意:直接修改标准程序有风险,建议使用隐式增强点。

我通常的做法是先在标准代码中找到合适的位置(通常是在主要查询条件之后),然后添加自定义逻辑。比如要按工艺路线筛选:

* 在fill_iomamo_tab中找到合适位置 IF gs_zcoois_selopt-zroute IS NOT INITIAL. DELETE ct_iomamo WHERE route NE gs_zcoois_selopt-zroute. ENDIF.

7. 解决F4帮助报错问题

新增字段经常需要F4帮助功能。但在COOISPI中直接调用标准F4函数可能会报错,特别是在函数组SAPLCOMC的程序LCOMCTOP中。这是因为标准程序没有考虑自定义字段的情况。

解决方案是在调用F4帮助前检查字段类型。如果是自定义字段,走自定义逻辑;否则调用标准函数。比如:

MODULE zf4_help INPUT. CASE screen-name. WHEN 'ZROUTE'. PERFORM f4_for_route USING screen-name. WHEN OTHERS. PERFORM standard_f4_help USING screen-name. ENDCASE. ENDMODULE.

8. 新选择条件的最终显示

所有开发完成后,还需要确保新增条件在COOISPI界面正确显示。这里要注意字段的排列顺序和分组逻辑。我建议参考标准字段的分组方式,将相关字段放在同一区域。

一个实用的技巧是使用屏幕修改器(Screen Painter)调整字段位置,而不是完全依赖代码控制。这样可以在不修改程序的情况下调整布局。

相关新闻

  • UI自动化测试核心实践:元素定位与智能等待策略详解
  • K8s 生产集群排障实战:Pod 驱逐与资源争用的底层逻辑
  • 优化后端接口响应时间的5个实用技巧

最新新闻

  • viap v1.1.4 Windows应用管理、
  • 告别抢票焦虑!3分钟掌握大麦网自动化抢票神器的完整指南
  • 从零打造超声波阵列:硬件选型、焊接与参数调校全记录
  • 5个简单步骤:用yuzu模拟器免费畅玩Switch游戏的完整指南
  • XUnity.AutoTranslator:Unity游戏翻译革命,打破语言障碍的终极解决方案
  • BetterGI安装失败终极解决方案:从闪退到完美运行的完整指南

日新闻

  • ENVI5.3.1实战:基于Landsat 8影像的区域无缝镶嵌与精准裁剪
  • 3步完成HS2-HF Patch安装:新手快速打造完美HoneySelect2体验
  • 微信好友检测终极指南:3分钟发现谁已悄悄删除你

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号