SAP 在ooalv中选中数据 然后带到 screen对应字段中去(自动带出屏幕字段信息)

文章描述了一个在ABAP编程中遇到的问题,涉及ALV窗口的使用。在点击按钮弹出ALV窗口选择数据并尝试填充到其他屏幕字段时,遇到程序错误和数据不更新的问题。解决方案包括清理对象以解决程序错误,调整数据获取的事件处理,以及修正SQL查询逻辑以确保数据正确更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求

点击按钮弹出OOALV弹窗 选中ALV某一行 然后在另一个屏幕上显示选中的数据 如图所示
在这里插入图片描述

遇到问题 1

1.当第一次点击按钮时可以正常显示ALV弹窗,第二次点击按钮时直接程序错误.
2.当双击ALV某一行时直接dump.
3.双击ALV某一行时无法填充到另一个屏幕对应的字段上去.

解决方案 1

1.应为对象没有清理 ,清理完后就会正常了
2.在这里插入图片描述是应为我清理了对象了导致在监听事件的时候没有拿到所要监听的对象. 不过第一个问题好像也没有再出现了.

3.屏幕`101`是我OOALV弹窗的
屏幕`100`是我的主屏幕
屏幕`1000`是我初始屏幕.

刚开始是我要在屏幕`1000`中数据生产订单,回车之间在屏幕`100`中带出关于生产订单的相关数据,
因为我把相关数据的获取写在了屏幕`100`的PBO`中了,导致了问题3的出现.

现在:我把获取相关数据写在了屏幕`101`中PBO去了,就可通过选中ALV数据行来带出相关数据了.

解决方案 2

昨天说道的问题3 今天我算是又有一个解决方案, 但我发现昨天的方案是有问题的,虽然可以解决,但不可靠.今天说的这个还是感觉比较可靠的.

原来: 我把之前的需求(非本文头上说的)给稍加修改了一下,之前的是在初始屏幕中输入销售订单,生产订单等然后点击创建按钮,会直接吧相关数据给带出来.

现在: 是点击创建按钮就直接进入创建的外反订单的界面,但是现在的屏幕中是没有任何数据的,所以需要输入,销售订单,生产订单,采购订单,然后点击回车就直接带出相关数据了.
这就是今天所说的方案 我把这个触发的机制放在了这个界面的PAI事件中了.如果你点击OOALV那个按钮选中某行数据时也会填充到创建外反订单的界面是上去的.

遇到问题 2

你点击OOALV那个按钮选中某行数据时填充到创建外反订单的界面是上去的,这个是可以的.
问题就是:我在修改销售订单和生产订单时点击回车,相关数据是没有变化的,理论是有变化的;
但是输入采购订单时,点击回车是可以的.

在这里插入图片描述

看下面的代码
这个代码是有问题的.
分析:当你在外反单创建界面中第二次修改销售订单,生产订单时 ,是可以根据修改的自动带出相关数据;是因为这三 IF语句都会执行,所以有第三个IF语句执行下面的SQL语句,所以导致其他的两在修改时不会带出.

MODULE get_data_pbi INPUT.
  DATA: lv_sql TYPE string.
  DATA: lv_sql2 TYPE string.
  DATA: lv_aufnr2 TYPE vbap-zaufnr,
        lv_vbeln2 TYPE vbap-vbeln,
        lv_bstnk2 TYPE vbak-bstnk.

  IF    gs_data-vbeln IS NOT INITIAL .
    lv_vbeln2 = gs_data-vbeln.
    lv_sql = 'vbap~vbeln = lv_vbeln2'.
    lv_sql2 = 'vbeln = lv_vbeln2'.
  ENDIF.
  
  IF gs_data-aufnr IS NOT INITIAL.
    lv_aufnr2 = gs_data-aufnr.
    CHECK lv_aufnr2 = gs_data-aufnr.
    lv_sql = 'vbap~zaufnr = lv_aufnr2'.
    lv_sql2 = 'aufnr = lv_aufnr2'.
  ENDIF.
  
  IF gs_data-bstnk IS NOT INITIAL.
    lv_bstnk2 = gs_data-bstnk.
    lv_sql = 'vbak~bstnk = lv_bstnk2'.
    lv_sql2 = 'bstnk = lv_bstnk2'.
  ENDIF.
  CHECK lv_sql IS NOT INITIAL .
  CHECK lv_sql2 IS NOT INITIAL .

  SELECT zscwfdh
     FROM zscwfd
    INTO gs_data-zscwfdh
    WHERE (lv_sql2).
  ENDSELECT.
  
  IF gs_data-zscwfdh IS INITIAL.
    SELECT  SINGLE
    vbap~vbeln
    vbap~zaufnr AS aufnr
    vbap~arktx AS zcpmc
    vbak~bstnk
    vbak~zysxm
    vbak~zhzxm
   FROM vbap
    INNER JOIN vbak ON vbak~vbeln = vbap~vbeln
      INTO CORRESPONDING FIELDS OF gs_data
   WHERE  (lv_sql).
    gs_data-zifsc = '未创建'.
    CLEAR:lv_sql,lv_sql2,
          lv_vbeln2,lv_aufnr2,lv_bstnk2.
  ELSE.
    SELECT
      *
      INTO CORRESPONDING FIELDS OF  gs_data
      FROM zscwfd
      WHERE (lv_sql2).
    ENDSELECT.
    gs_data-zifsc = '已创建'.
    gs_data-zxg = gs_data-qty.
   CLEAR: lv_sql2,lv_sql,
          lv_vbeln2,lv_aufnr2,lv_bstnk2.
  ENDIF.
ENDMODULE.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨天行舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值