当前位置: 首页 > news >正文

ABAP+记录一个BDC的BUG修改过程

问题背景:

业务顾问反馈在使用BDC 进行MEQ1进行供应商配额时,由于以前录屏时用例只有3行数据,导致现在有5行数据的时候,代码仍然只获取了3行数据进行录入,现在需要更改代码,使其按照实际情况自动调整行数。

解决记录:

首先根据业务顾问提供的出错的案例,进行问题复刻,将CALL事务代码的时候,模式的值IM_MODE调整为A,就可以将屏幕一步一步点开进行调试。

下面是调试的界面

数据填充结束的时候,我们可以看到下面这里本应该有5条,但是现在只有3条,那应该就是这里的问题,一般情况下,像这种填充表格的时候数据被重复覆盖,大概率是表格的行数在赋值时重复了,这时候一般可以直接从BDCDATA入手。

在调试时看一下BDCDATA的数据,这里我导出来了,放一个截图,从下图可以看到,这个数字02出现了很多次,应该是它的问题,我们将其依次在debug的时候改成02、03、04、05,再进行调试。

调试结果如下,发现数据从3条成功变成了5条,那么数据就可以这样修改:

下面放一个赋值的思维,这样填写就可以根据数据行数进行行数累加了:

这样就修改完了。

后续思考:

其实这是一个比较偷懒的改法,一点都没有动脑,直接改变了原有的逻辑。因为我在看代码的时候,发现上一个开发者在02旁边写了一句话“两条以上的记录,点击新增,在第二行里录入信息”,其实是表明他是考虑到多行输入数据的情况的,只是出了差错,每次新填的数据将原有的第2行进行覆盖了。这是因为在BDC录屏时,如果上下拉动进度条或者滑动鼠标滚轮,都是需要记录的,但是滑动鼠标滚轮时不生成记录代码,必须改为上下拉动进度条。这里少了拉动进度条的代码,所以每个02都会覆盖原有的数据,如果加上拉动进度条的代码,就可以保证每个02都是新增,因为我不擅长添加拉动进度条的代码,所以,我老老实实添加的代表数字的代码。

好吧,最后的最后,我还是又按照原来开发的意思修改了代码,在代码原有的基础上更改了代码,加上了拉动进度条的代码BDC_OKCODE = NL,就是拉动进度条的意思,原有代码的BDC_OKCODE是/00,是回车的意思,现在修改成=NL,就可以了。业务顾问测试后也是可以的,可恶,我写了这么多代码,那就还是把以前的代码放进来做个纪念吧

     以前的代码:

   ELSE. " 两条以上的记录,点击新增,在第二行里录入信息
*          CHANGE BY GYX D20250630,两条以上数据按照编号依次新增 START-------
**          PERFORM BDC_DYNPRO      USING 'SAPDM06Q' '0215'.
**          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
**                                        'EQUP-QUOTE(02)'.
**          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
**                                        '/00'.
**          PERFORM BDC_FIELD       USING 'EQUP-BESKZ(02)'
**                                        W_DATA-BESKZ.
**          PERFORM BDC_FIELD       USING 'RM06Q-SOBIN(02)'
**                                        W_DATA-ESOBS.
**          PERFORM BDC_FIELD       USING 'EQUP-LIFNR(02)'
**                                        W_DATA-LIFNR.
**          WRITE W_DATA-QUOTE TO LC_QUOTE.
**          PERFORM BDC_FIELD       USING 'EQUP-QUOTE(02)'
**                                        LC_QUOTE.
**
**          "最小批量尺寸
**          WRITE W_DATA-MINLS TO L_STR.
**          PERFORM BDC_FIELD       USING 'EQUP-MINLS(02)'
**                                        L_STR.PERFORM BDC_DYNPRO      USING 'SAPDM06Q' '0215'.DATA(GV_FIELD) =  'EQUP-QUOTE(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING 'BDC_CURSOR'GV_FIELD."'EQUP-QUOTE(02)'.PERFORM BDC_FIELD       USING 'BDC_OKCODE''/00'.GV_FIELD =  'EQUP-BESKZ(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING   GV_FIELD"'EQUP-BESKZ(02)'W_DATA-BESKZ.GV_FIELD =  'RM06Q-SOBIN(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'RM06Q-SOBIN(02)'W_DATA-ESOBS.GV_FIELD =  'EQUP-LIFNR(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'EQUP-LIFNR(02)'W_DATA-LIFNR.WRITE W_DATA-QUOTE TO LC_QUOTE.GV_FIELD =  'EQUP-QUOTE(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'EQUP-QUOTE(02)'LC_QUOTE."最小批量尺寸WRITE W_DATA-MINLS TO L_STR.GV_FIELD =  'EQUP-MINLS(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'EQUP-MINLS(02)'L_STR.*          CHANGE BY GYX D20250630,两条以上数据按照编号依次新增 END------

http://www.lryc.cn/news/578914.html

相关文章:

  • transformers==4.42.0会有一个BUG
  • pdf 合并 python实现(已解决)
  • Python 数据分析与可视化 Day 14 - 建模复盘 + 多模型评估对比(逻辑回归 vs 决策树)
  • 文档全文搜索引擎:AnyTXT Searcher
  • 【RHCSA-Linux考试题目笔记(自用)】servera的题目
  • 2025-6GESP六级编程题分析
  • 机器学习在计算机视觉中的应用
  • 中科米堆三维扫描仪3D扫描压力阀抄数设计
  • 3D扫描:开启数字化世界的多面钥匙
  • 【强化学习】深度解析 GRPO:从原理到实践的全攻略
  • ESP32-S3开发板LVGL图形界面开发实战教程
  • React 学习(2)
  • 【python】pdf拆成图片,加中文,再合成pdf
  • Spark流水线数据探查组件
  • 跨平台开发的抉择:Flutter vs 原生安卓(Kotlin)的优劣对比与选型建议​​
  • vscode vim插件示例json意义
  • STM32模拟I2C获取AP3216C光学接近传感器数据
  • Linux-修改线上MariaDB服务端口号
  • 【网工|知识升华版|实验】1 登录华为设备并配置
  • IDEA2025 Version Control 窗口 local changes显示
  • Adobe高阶技巧与设计师创意思维的进阶指南
  • 免Mac上架实战:全平台iOS App上架流程的工具协作经验
  • 开源计算机视觉的基石:OpenCV 全方位解析
  • 同一水平的 RISC-V 架构的 MCU,和 ARM 架构的 MCU 相比,运行速度如何?
  • containerd 项目主要目录简要说明
  • 多模态进化论:GPT-5V图文推理能力在工业质检中的颠覆性应用
  • AI智能体时代来临:数据分析的变革与自动化之路
  • Linux缓存调优指南:提升服务器性能的关键策略
  • Android Native 之 init初始化selinux机制
  • 【.NET Framework 窗体应用程序项目结构介绍】