需求
点击按钮弹出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.