我目前正在为SAP交易 vl02n 做一些检查,我想检查批次以及它们的到期日期是否符合某些条件。
为此,我正在使用用户出口 SAVE_DOCUMENT_PREPARE 。如果检查失败,则应有一个包含故障位置的ALV电网。 必须中断PGI的处理。
我的问题是,在测试这些有问题的批次时,出现如下错误:
为一次交货->长文本发布多个mat.documents的风险。
我读了一篇文章,说您应该使用命令 ROLLBACK WORK ,但是我不确定这是否行得通,我认为直到知道之后才提交...
这是我到目前为止所获得的(到目前为止,尚未测试ROLLBACK WORK)。
[...]
IF lt_faulty_lips IS NOT INITIAL.
" Titel des ALV-Grid abhaengig von der Sprache festlegen
IF sy-langu EQ 'D'.
lv_grid_title = 'Verfallsdatum folgender Positionen zu klein.'.
ELSE.
lv_grid_title = 'Expiration date of the following items too small.'.
ENDIF.
" Grid-Title setzen
MESSAGE s001(zamm) INTO lv_grid_title.
" Fehler-Message ausgeben
MESSAGE s000(zamm) DISPLAY LIKE 'E'.
" is this possible?
"ROLLBACK WORK.
" ALV-Grid mit fehlerhaften Positionen ausgeben
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_grid_title = lv_grid_title
i_callback_program = 'SY-REPID'
i_structure_name = 'LIPSVB'
is_layout = gs_alv_layout
TABLES
t_outtab = lt_faulty_lips
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
" Implement suitable error handling here
ENDIF.
" nochmals Message-Ausgabe im Hauptbild
MESSAGE e000(zamm) DISPLAY LIKE 'E'.
我该如何解决?
非常感谢,每一个提示都值得赞赏!
答案 0 :(得分:1)
您引发一条类型为E的消息。这将退出程序,甚至没有达到您的ALV。 将消息更改为此:MESSAGE s001(zamm)类型'I'显示为'E'。
如果这没有帮助,请将消息更改为... DISPLAY LIKE I,在用户确认后,报告应继续进行。
致谢
答案 1 :(得分:1)
因此,正如我所承诺的,这是我的解决方案:
我们使用了接口的现有实现 IF_EX_LE_SHP_GOODSMOVEMENT 。
在此界面中,有一种名为 CHANGE_INPUT_HEADER_AND_ITEMS 的方法。
在这里,我们对特定条件进行检查。之后,我们用错误的位置填充类型为 SHP_BADI_ERROR_LOG 的声明结构 ls_errlog 。 重要字段如下:
ls_errlog-msgty = 'E'.
ls_errlog-msgid = '<message-class>'.
ls_errlog-msgno = '<message-number'.
然后我们将此结构附加到表 ct_log 。
结果是,如果某些位置不符合我们的标准,则PGI将被中断,并且错误的位置将显示在ALV网格中。