错误的abap 7.5循环

2020-08-18 20:12发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我没有在alv输出中...

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

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


大家好,

我没有在alv输出中获取这些字段数据...

VBELN,AUDAT,POSNR,MATNR,MEINS,MAKTX。 请检查代码。

报告zmanoj4。
 表格:kna1,vbak,vbap,makt。

 类型:ty开始,
           kunnr TYPE kunnr,
           name1 TYPE name1,
           vbeln TYPE vbeln,
           TYPE Audat,
           posnr TYPE posnr,
           matnr TYPE matnr,
           kwmeng TYPE kwmeng,
           类型,
           netwr TYPE netwr,
           maktx TYPE maktx,
         ty of ty。


 数据:它的类型表,
        wa TYPE TY。
 数据:it_fieldcat类型slis_t_fieldcat_alv,
       wa_fieldcat类型slis_fieldcat_alv。

 带有标题标题文本001的b1块的选择屏幕开始。
 参数p_num类型kna1-kunnr。
 块b的选择屏幕结束。

 选择开始。
   性能得到。
   执行广告
   执行。

 形式得到。
   选择kunnr,
          从kna1到表@DATA(it_knal)的name1
          在kunnr EQ @p_num处。

   如果sy-subrc EQ 0。
   SELECT vbeln,
            奥德
            kunnr从vbak到表@DATA(it_vbak)
            对于@it_knal中的所有条目
            在kunnr EQ @ it_knal-kunnr。
   万一。

   SELECT vbeln,
          posnr,
          matnr,
          w
          我的意思
          从vbap到表@DATA(it_vbap)中的netwr
          对于@it_vbak中的所有条目
          在哪里vbeln EQ @ it_vbak-vbeln。

   如果sy-subrc EQ 0。
     SELECT matnr,
            maktx从makt到表@DATA(it_makt)
            对于@it_vbap中的所有条目
            matnr EQ @ it_vbap-matnr在哪里。
   万一。


   循环到it_vbak INTO DATA(wa_vbak)。
     使用键vbeln = wa_vbak-vbeln将表it_vbap读入数据(wa_vbap)。
     使用键kunnr = wa_vbak-kunnr读取表it_​​knal到DATA(wa_knal)中。
     使用键matnr = wa_vbap-matnr读取表it_​​makt到DATA(wa_makt)中。
     附加wa_vbak。
   结局。
 ENDFORM。



 形式alv。
   wa_fieldcat-fieldname ='KUNNR'。
   wa_fieldcat-ref_tabname ='KNA1'。
   wa_fieldcat-seltext_m ='会计凭证编号'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。

   wa_fieldcat-fieldname ='NAME1'。
   wa_fieldcat-ref_tabname ='KNA1'。
   wa_fieldcat-seltext_m ='AccountDocument号'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。

   wa_fieldcat-fieldname ='VBELN'。
   wa_fieldcat-ref_tabname ='VBAK'。
   wa_fieldcat-seltext_m ='会计凭证编号'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。

   wa_fieldcat-fieldname ='AUDAT'。
   wa_fieldcat-ref_tabname ='VBAK'。
   wa_fieldcat-seltext_m ='AccounDocument号'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。


   wa_fieldcat-fieldname ='POSNR'。
   wa_fieldcat-ref_tabname ='VBAP'。
   wa_fieldcat-seltext_m ='Acing文档编号'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。


   wa_fieldcat-fieldname ='MATNR'。
   wa_fieldcat-ref_tabname ='VBAP'。
   wa_fieldcat-seltext_m ="地点编号"。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。


   wa_fieldcat-fieldname ='KWMENG'。
   wa_fieldcat-ref_tabname ='VBAP'。
   wa_fieldcat-seltext_m ='Acing文档编号'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。


   wa_fieldcat-fieldname ='MEINS'。
   wa_fieldcat-ref_tabname ='VBAP'。
   wa_fieldcat-seltext_m ='Acing文档编号'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。


   wa_fieldcat-fieldname ='NETWR'。
   wa_fieldcat-ref_tabname ='VBAP'。
   wa_fieldcat-seltext_m ='AcingD'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。


   wa_fieldcat-fieldname ='MAKTX'。
   wa_fieldcat-ref_tabname ='MAKT'。
   wa_fieldcat-seltext_m ='Acing r'。
   将wa_fieldcat附加到it_fieldcat。
   清除wa_fieldcat。
 ENDFORM。

 形成。
   通话功能'REUSE_ALV_GRID_DISPLAY'
     出口
       i_grid_title ='会计凭证详细信息'
       it_fieldcat = it_fieldcat
     桌子
       t_outtab =它。
 ENDFORM。
5条回答
Baoming ROSE
2020-08-18 21:01

您好 Manoj Kumar

您不会将信息从源内部表移动到结果内部表。 这就是为什么您没有在ALV中获得价值的原因。

您可以使用移动对应或逐字段。 视情况而定。

 FORM获取。
   "这里的数据库选择

   循环到it_vbak INTO DATA(wa_vbak)。
     在它的开头添加一行引用到DATA(ld_it)中。
     将wa_vbak移动到ld_it-> *。

     使用键vbeln = wa_vbak-vbeln将表it_vbap读入数据(wa_vbap)。
     如果sy-subrc = 0。
       将wa_vbap移动到ld_it-> *。

       使用键matnr = wa_vbap-matnr读取表it_​​makt到DATA(wa_makt)中。
       如果sy-subrc = 0。
         将wa_makt对应移动到ld_it-> *
       万一
     万一。

     使用键kunnr = wa_vbak-kunnr读取表it_​​knal到DATA(wa_knal)中。
     如果sy-subrc = 0。
       将wa_kna1移动到ld_it-> *。
     万一。
   结局。
 ENDFORM。

此外,仅当VBAK SELECT返回任何结果时,才应在VBAP表上执行SELECT。

 SELECT kunnr,
          从kna1到表@DATA(it_knal)的name1
          在kunnr EQ @p_num处。
   如果sy-subrc EQ 0。
     SELECT vbeln,
            奥德
            kunnr从vbak到表@DATA(it_vbak)
            对于@it_knal中的所有条目
            在kunnr EQ @ it_knal-kunnr。
     如果sy-subrc = 0。
       SELECT vbeln,
             posnr,
             matnr,
             w
             我的意思
             从vbap到表@DATA(it_vbap)中的netwr
             对于@it_vbak中的所有条目
             在哪里vbeln EQ @ it_vbak-vbeln。
       如果sy-subrc EQ 0。
         SELECT matnr,
                maktx从makt到表@DATA(it_makt)
                对于@it_vbap中的所有条目
                matnr EQ @ it_vbap-matnr在哪里。
       万一。
     万一。
   ENDIF。

您可以这样做,也可以简单地退出GET过程,因为其中一个KNA1/VBAK SELECT语句都不返回结果,因为所有其他语句都依赖于这些结果。/p>

 SELECT kunnr,
          从kna1到表@DATA(it_knal)的name1
          在kunnr EQ @p_num处。
   如果sy-subrc <> 0。
     返回。
   万一。

   SELECT vbeln,
          奥德
          kunnr从vbak到表@DATA(it_vbak)
          对于@it_knal中的所有条目
          在kunnr EQ @ it_knal-kunnr。
   如果sy-subrc <> 0。
     返回
   万一。

   SELECT vbeln,
          posnr,
          matnr,
          w
          我的意思
          从vbap到表@DATA(it_vbap)中的netwr
          对于@it_vbak中的所有条目
          在哪里vbeln EQ @ it_vbak-vbeln。
   如果sy-subrc = 0。
     SELECT matnr,
            maktx从makt到表@DATA(it_makt)
            对于@it_vbap中的所有条目
            matnr EQ @ it_vbap-matnr在哪里。
   ENDIF。

这样,代码更易于阅读和理解。

此外,最好将IT_VBAP,IT_MAKT和IT_KNA1定义为排序的内部表,因为 在LOOP中从这些表中读取数据。 将它们定义为排序类型(TYPE SORTED TABLE OF),并使用用于读取的键,可以使报表的性能更好。

此致

Mateusz

一周热门 更多>