如何将两个内部表传递到ALV报告功能模块

2020-09-02 05:01发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)在创建ALV报告时,我试图从两个...

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

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


在创建ALV报告时,我试图从两个不同的表中获取数据,即:mara,makt。 但是在输出屏幕上没有显示数据。 下面是任何人都可以向我提出的解决方案以及如何将内部表结构都传递给Function模块的代码。

报告ZSPM_GUI_DOWNLOAD。

表格:mara,
副本。

TYPE-POOLS slis。

选择选项s_matnr用于mara-matnr。

类型:st_op的开始,
v_matnr TYPE mara-matnr,
v_ernam TYPE mara-ernam,
v_ersda TYPE mara-ersda,
v_maktx TYPE makt-maktx,

st_op结束

数据:st_op类型表,
wa_op类型st_op。

类型:st_mara的开始,
lv_matnr类型mara-matnr,
lv_ernam类型mara-ernam,
lv_ersda TYPE mara-ersda,
st_mara的结尾,

st_makt的开始,
lv_matnr TYPE makt-matnr,
lv_maktx TYPE makt-maktx,

END OF st_makt。

数据:st_mara的it_mara类型表,
st_mara的wa_mara类型表,

st_makt的it_maktx类型表,
wa_maktx类型st_makt的表。 ****************************************************** *******************
*************现场目录************* ******************************
***************** ****************************************************** ***
数据:it_fcat类型slis_t_fieldcat_alv,
wa_fcat类型slis_fieldcat_alv。

************************* ***************************************************
************选择语句************************************ ******
***************************************** ****************************** *
选择开始。
PERFORM获取数据。
PERFORM创建_fcat。

选择结束。

执行display_alv。

< br>
*&------------------------------------------- -------------------------- *
*&表格GET_DATA
*&----------- -------------------------------------------------- -------- *
*文字
* -------------------------------- -------------------------------------- *
*-> p1文字
* <-p2文字
* --------------------------------------- ------------------------------- *
FORM get_data。
从mara中选择matnr ernam ersda
进入表it_mara
,其中matnr = s_matnr。

从matk中选择matnr maktx
到表it_maktx
,其中it_mara
中的所有条目,其中matnr = it_mara-lv_matnr。
ENDFORM 。
*&-------------------------------------------- ------------------------- *
*&表格CREATE_FCAT
*&------------ -------------------------------------------------- ------- *
*文字
* --------------------------------- -- ------------------------------------ *
*-> p1文字
* <-p2文字
* ----------------------------------------- ----------------------------- **
FORM create_fcat。
WA_FCAT-COL_POS ='1'。
WA_FCAT-FIELDNAME ='matnr'。
wa_fcat-seltext_m ='材料数'。
wa_fcat-tabname ='it_mara'。
WA_FCAT-KEY ='X'。
将wa_fcat附加到it_fcat。
清除wa_fcat。

WA_FCAT-COL_POS ='2'。
wa_fcat-fieldname ='ernam'。
wa_fcat-seltext_m ='材料创建者:NAME'。
wa_fcat -tabname ='it_mara'。
WA_FCAT-KEY ='X'。
将wa_fcat附加到it_fcat。

wa_fcat-fieldname ='ersda'。
wa_fcat-seltext_m ='创建于 :'。
wa_fcat-tabname ='it_mara'。
WA_FCAT-KEY ='X'。
将wa_fcat附加到it_fcat。
清除wa_fcat。

wa_fcat字段名称=' Maktx'。
wa_fcat-seltext_m ='材料说明:'。
wa_fcat-tabname ='it_maktx'。
WA_FCAT-KEY ='X'。


将wa_fcat附加到it_fcat。
*清除wa_fcat。
ENDFORM。
*&- -------------------------------------------------- ----------------- *
*&表格DISPLAY_ALV
*&-------------------- ------------------------------------------------- *
*文字
* ----------------------------------------- ----------------------------- **
*-> p1文本
* <-p2文本
* ------------------------------------------------ ---------------------- *
FORM display_alv。

调用功能'REUSE_ALV_GRID_DISPLAY'
导出
I_CALLBACK_PROGRAM = SY -REPID
IT_FIELDCAT = it_fcat

t_outtab = it_op

IF sy-subrc <> 0.
*在此处实施适当的错误处理
ENDIF。
ENDFORM。

付费偷看设置
发送
5条回答
SKY徐
1楼-- · 2020-09-02 05:32

您好,

请遵循以下准则:

1)尝试使用Join编写单个选择查询。

2)您必须将输出结构字段传递到字段目录中。 并非数据所在的实际结构。 例如,您应该从结构st_op而不是mara table结构传递字段。 基本上,您的字段目录应该具有从st_op而不是多个结构

3的一个结构填充的结构字段。3)填充字段目录时,必须以大写形式输入字段名称,例如V_MATNR而不是v_matnr。

4)我也看不到您要填充it_op表的任何地方。 我建议您如下进行联接选择查询。

选择a〜matnr

a〜ernam

a〜ersda

b〜maktx

从mara 作为a

内部联接,作为b

在a〜matnr = b〜matnr

上,其中s_matnr中的a〜matnr

进入 lt_ op。

如果您有更高的ECC版本,则上面的代码适用于较低的版本。

选择a〜matnr,

a〜ernam,

a〜ersda,

b〜maktx

从mara作为a

内部联接作为b

〜matnr = b〜matnr

其中,@ s_matnr中的a〜matnr

进入@ lt_ op。

希望它会有所帮助!

注意事项

Alawn_Xu
2楼-- · 2020-09-02 05:54

可能没有给定选择的数据,识别问题的最佳方法是-通过调试代码。

悻福寶寶
3楼-- · 2020-09-02 05:52

将字段目录的TABNAME设置为初始值。 不要传输" it_op"。 仅当使用" ALV层次顺序列表"(REUSE_ALV_HIERSEQ_LIST_DISPLAY或cl_salv_hierseq_table => factory)时,才填写字段目录的TABNAME。

另一个好习惯是,所有技术名称(例如字段名称)都以大写形式输入,因为SAP经常不会将它们更改为大写,并且技术名称几乎总是存储在内存和数据库中 大写。

Bunny_CDM
4楼-- · 2020-09-02 05:36

尝试此代码

表格:玛拉,

         马特

 TYPE-POOLS slis。

 SELECT_OPTIONS s_matnr用于mara-matnr。

 类型:st_op的开始,

          lv_matnr TYPE mara-matnr,

          lv_ernam TYPE mara-ernam,

          lv_ersda TYPE mara-ersda,

          lv_maktx TYPE makt-maktx,

 ENDOF st_op。

 数据:st_op的it_op类型表,

       wa_op TYPE st_op。
 ******************************************************  *********************
 *************现场目录***************************************  ********
 ******************************************************  ********************

 数据:it_fcat类型slis_t_fieldcat_alv,

       wa_fcat类型slis_fieldcat_alv。
 ******************************************************  **********************
 ************选择语句************************************  ******
 ******************************************************  **********************

 选择开始。

 执行get_data。

 执行create_fcat。

 选择结束。

 执行display_alv。
 *&------------------------------------------------  --------------------- *
 *&表格GET_DATA
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 *-> p1文字
 * <-p2文字
 * -------------------------------------------------  --------------------- *

 FORM get_data。

 选择m〜matnr,m〜ernam,m〜ersda,mt〜maktx

   来自mara as m

 内部连接市场作为mt on m〜matnr = mt〜matnr

   m〜matnr在@s_matnr中

   进入表@it_op。

 ENDFORM。
 *&------------------------------------------------  --------------------- *
 *&表格CREATE_FCAT
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 *-> p1文字
 * <-p2文字
 * -------------------------------------------------  --------------------- *

 表格create_fcat。

   wa_fcat-col_pos ='1'。

   wa_fcat-fieldname ='lv_matnr'。

   wa_fcat-seltext_m ='材料编号'。

   wa_fcat-tabname ='it_op'。

   wa_fcat-key ='X'。

 将wa_fcat附加到it_fcat。

 清除wa_fcat。

   wa_fcat-col_pos ='2'。

   wa_fcat-fieldname ='lv_ernam'。

   wa_fcat-seltext_m ='材料由NAME创建。

   wa_fcat-tabname ='it_op'。

   wa_fcat-key ='X'。

 将wa_fcat附加到it_fcat。
   wa_fcat-fieldname ='lv_ersda'。

   wa_fcat-seltext_m ='创建于:'。

   wa_fcat-tabname ='it_op'。

   wa_fcat-key ='X'。

 将wa_fcat附加到it_fcat。

 清除wa_fcat。
   wa_fcat-fieldname ='lv_maktx'。

   wa_fcat-seltext_m ='材料说明:'。

   wa_fcat-tabname ='it_op'。

   wa_fcat-key ='X'。

 将wa_fcat附加到it_fcat。
 *清除wa_fcat。

 ENDFORM。
 *&------------------------------------------------  --------------------- *
 *&表格DISPLAY_ALV
 *&------------------------------------------------  --------------------- *
 *文字
 * -------------------------------------------------  --------------------- *
 *-> p1文字
 * <-p2文字
 * -------------------------------------------------  --------------------- *

 FORM display_alv。

 CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'

 出口

       i_callback_program = sy-repid

       it_fieldcat = it_fcat

     桌子

       t_outtab = it_op。

 如果sy-subrc <> 0。
 *在这里实施适当的错误处理

 万一。

 ENDFORM。

1-过滤时使用选择选项时,请使用IN no =。

2-进行简单查询时,请在同一条语句中执行查询,然后将数据插入alv(it_op)的输出表中。

3-定义列的名称时,必须放置查询时未引用该名称的表的名称。

祝你好运!

葫芦娃快救爷爷
5楼-- · 2020-09-02 05:43

嗨,

解决问题的另一种方法是-您可以在内部创建一个最终表,该最终表将包含两个内部表的字段,然后通过循环和读取操作,您可以将所有数据附加到该最终表中并可以通过 表到功能模块(ALV)。

一周热门 更多>