AMDP程序的怪异行为

2020-09-08 08:25发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好,您今天好吗? 我认为AM...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好,您今天好吗? 我认为AMDP程序存在一个非常奇怪的问题。 该过程不太复杂,只是我执行联接和计算时执行的一系列选择,然后保留在表变量中,最后将所有这些表变量联接到我的结果变量中。 在我的职业生涯中,我看到了许多奇怪的错误,但这是最高的胜利者。 我的过程没有任何语法错误,当我调用报告中的调用AMDP方法时,这向我显示了DUMP,我知道这不是真正的问题,对吗?

我不确定是否是DUMP的相关部分,如果不能告诉我请问那是什么。

在最后一个选择语句中引发异常,该选择语句返回我的最终结果。 但是很奇怪的是,当我在执行select以获得最终结果的位置之前放置一个断点,并在调试模式下执行该步骤时,出乎我的意料,没有DUMP并显示了结果。

有人遇到这种错误吗?

这是代码中引发异常的部分。

 e_result =选择bs.VKGRP作为punto_venta,
                           bs.kunnr作为客户,
                           cli.name1 ||  char(32)||  cli.name2为nombre_cliente,
                           bs.vbeln作为pedido,
                           vsc.valor为valor_sin_conf,
                           bs.waerk作为waers,
                           vds.valor作为valor_despacho,
                           vmr.netwr为valor_mcia_rep,
                           vad.valor作为valor_aduana,
                           bs.matnr作为材料,
                           bs.kwmeng为cant_pedido,
                           ctc.cant_confirmada,
                           censantidad为cant_entrega,
                           ctr.cantidad为cant_transp,
                           cts.cantidad为cant_transp_sal,
                           bs.meins
                    来自:lt_base_info为bs
                    内部连接:lt_v_sin_conf作为vsc在vsc.vbeln = bs.vbeln和
                                                        vsc.matnr = bs.matnr和
                                                        vsc.row_number = bs.row_number
                    内部连接:lt_v_despacho作为vds.vbeln = bs.vbeln上的vds
                                                        vds.matnr = bs.matnr和
                                                        vds.row_number = bs.row_number
                    左外部连接:lt_v_mcia_rep作为vmr.vbeln = bs.vbeln上的vmr
                    左外部连接:lt_valor_aduana作为vad.vbelv_e = bs.vbeln上的vad和
                                                               vad.matnr_l = bs.matnr和
                                                               vad.row_number = bs.row_number
                    内部连接:lt_cant_conf作为ctc.vbeln = bs.vbeln上的ctc
                                                       ctc.matnr = bs.matnr和
                                                       ctc.row_number = bs.row_number
                    内部联接:lt_cant_entr作为cen.vbelv_e = bs.vbeln上的cen
                                                       cen.matnr_l = bs.matnr和
                                                       cen.row_number = bs.row_number
                    左外部连接:lt_cant_tran作为ctr.vbelv_e = bs.vbeln上的ctr
                                                            ctr.matnr_l = bs.matnr和
                                                            ctr.row_number = bs.row_number
                    左外部连接:lt_cant_tran_s作为cts.vbelv_e = bs.vbeln上的cts
                                                              cts.matnr_l = bs.matnr和
                                                              cts.row_number = bs.row_number
                    内部连接:lt_cli_data作为cli.clinnr = bs.kunnr上的cli;
 

非常感谢您的帮助。

最好的问候罗纳尔多·维埃拉

(79.1 kB)
8条回答

大家好,你好吗?

好吧,我找到了解决问题的方法,尽管我将这个答案标记为正确答案,但我认为这不是一个好答案,我将尝试解释原因。

尝试了许多方法之后,我发现如果我从最终的select语句中删除了一个特定的表变量,它可以正常工作,因此,我将通过将此表变量作为导出参数返回来进行处理,例如,执行 加入我的ABAP程序,但是我不知道为什么,我有一个主意,用这些参数替换在AMDP方法主体中声明的表变量,现在可以正常使用了。

所以我的方法签名看起来像这样

 CLASS-METHODS GET_DATA_DETAIL IMPORTING值(i_mandt)TYPE要求
                                    值(i_erdat_ini)TYPE ERDAT
                                    值(i_erdat_fin)TYPE ERDAT
                                    值(i_lang)TYPE spras
                                    值(i_filter)TYPE字符串
                                   出口
                                    值(e_result)TYPE ZTT_SD_RES_DIARIO_ASIG
                                    值(e_desp)TYPE ltty_desp。

我必须在AMDP类的公共部分声明新的导出参数的类型

类型:lty_desp的开头,
                 vbeln类型vbeln_va,
                 matnr类型matnr,
                 勇气类型ze_despacho,
                 row_number类型i,
            lty_desp的结尾。


     类型ltty_desp类型lty_desp的标准表。
 

现在select语句如下:

 e_result =选择bs.VKGRP作为punto_venta,
                           bs.kunnr作为客户,
                           cli.name1 ||  char(32)||  cli.name2为nombre_cliente,
                           bs.vbeln作为pedido,
                           vsc.valor为valor_sin_conf,
                           bs.waerk作为waers,
                           vds.valor作为valor_despacho,
                           vmr.netwr为valor_mcia_rep,
                           vad.valor作为valor_aduana,
                           bs.matnr作为材料,
                           bs.kwmeng为cant_pedido,
                           ctc.cant_confirmada,
                           censantidad为cant_entrega,
                           ctr.cantidad为cant_transp,
                           cts.cantidad为cant_transp_sal,
                           bs.meins
                    来自:lt_base_info为bs
                    内部连接:lt_v_sin_conf作为vsc在vsc.vbeln = bs.vbeln和
                                                        vsc.matnr = bs.matnr和
                                                      vsc.row_number = bs.row_number
                    内部连接:e_desp作为vds.vbeln = bs.vbeln上的vds
                                                 vds.matnr = bs.matnr和
                                                 vds.row_number = bs.row_number
                    左外部连接:lt_v_mcia_rep作为vmr.vbeln = bs.vbeln上的vmr
                左外部连接:lt_valor_aduana作为vad.vbelv_e = bs.vbeln上的vad和
                                                          vad.matnr_l = bs.matnr和
                                                      vad.row_number = bs.row_number
                    内部连接:lt_cant_conf作为ctc.vbeln = bs.vbeln上的ctc
                                                       ctc.matnr = bs.matnr和
                                                       ctc.row_number = bs.row_number
                    内部联接:lt_cant_entr作为cen.vbelv_e = bs.vbeln上的cen
                                                          cen.matnr_l = bs.matnr和
                                                       cen.row_number = bs.row_number
                   左外部连接:lt_cant_tran作为ctr.vbelv_e = bs.vbeln上的ctr
                                                          ctr.matnr_l = bs.matnr和
                                                      ctr.row_number = bs.row_number
                 左外部连接:lt_cant_tran_s作为cts.vbelv_e = bs.vbeln上的cts
                                                    cts.matnr_l = bs.matnr和
                                                     cts.row_number = bs.row_number
                    内部连接:lt_cli_data作为cli.clinnr = bs.kunnr上的cli;
 

并且您可以看到,如果将此select与原始文章的语句进行比较,唯一改变的是现在的联接是通过exporting参数而不是table变量完成的。

通过这种方式声明表变量,与导出参数相同

声明lt_v_despacho表(vbeln" $ ABAP.type(vbeln_va)",
                                       matnr" $ ABAP.type(matnr)",
                                       勇气" $ ABAP.type(ze_despacho)",
                                       row_number smallint);
 

因此,现在我的程序可以工作了,但是我仍然不知道只对表变量执行联接的select语句出了什么问题。

因为现在我必须返回一个无用的参数,所以我认为此解决方案不是一个好方法。

如果有人知道为什么,我想知道。

啊,在我忘记之前,我尝试向SAP寻求支持,因为Sandra Rosi感到很惊讶,但是他们告诉我说,仅当标准事务中存在Z事务时,他们才不支持Z事务。 如果客户为此支付了额外的钱,它们只会对Z交易有所帮助。

最诚挚的问候,

罗纳尔多·维埃拉(Ronaldo S. Vieira)

一周热门 更多>