点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
表:VBRP
物料数量未按原始表显示
输入
发票(VBELN)________到___________
我的输出:
我的源代码:
报告ZALV_DYNAMIC。 TYPE-POOLS:slis。 表格:vbrp。 类型:ts_vbrp的开头, vbeln TYPE vbrp-vbeln, fklmg TYPE vbrp-fklmg, matnr TYPE vbrp-matnr, ts_vbrp的结尾。 数据: *内部表 ts_vbrp的i_data类型标准表, ts_vbrp的i_data_temp类型标准表, i_fcat TYPE lvc_t_fcat, i_dynamic_table TYPE REF TO数据, i_fieldcat TYPE slis_t_fieldcat_alv, * 工作区域 wa_fcat TYPE lvc_s_fcat, wa_dyn_line TYPE REF TO数据, wa_data TYPE ts_vbrp, *可变的 v_field_name TYPE字段名, v_tabix TYPE sy-tabix, v_fieldname TYPE字段名, v_seltext TYPE scrtext_l。 * ------------------------------------------------- -------------------- * *字段符号* * ------------------------------------------------- -------------------- * 字段符号:TYPE STANDARD TABLE, TYPE STANDARD TABLE, TYPE任意, TYPE任意。 带框架的b1块的选择屏幕开始。 SELECT_OPTIONS s_invoi for vbrp-vbeln。 块b的选择屏幕结束。 选择开始。 执行sub_slect_data。 *填充每次运行所需的动态列 执行sub_populate_catlog。 * *建立动态内部表 执行sub_build_int_table。 * *建立ALF现场目录信息 执行sub_alv_field_cat。 *显示数据 执行sub_display_data。 *&------------------------------------------------ --------------------- * *&表格SUB_SLECT_DATA *&------------------------------------------------ --------------------- * *和文字 *&------------------------------------------------ --------------------- * *&-> p1文字 *&<-p2文字 *&------------------------------------------------ --------------------- * FORM sub_slect_data。 SELECT vbeln fklmg 物质 来自vbrp 到表i_data 在s_invoi中的vbeln。 如果sy-subrc EQ 0。 通过vbeln排序i_data。 i_data_temp [] = i_data []。 SORT i_data_temp BY matnr。 从i_data_temp删除相邻的重复项 比较matnr。 万一。 ENDFORM。 " sub_slect_data *&------------------------------------------------ --------------------- * *&表单SUB_POPULATE_CATLOG *&------------------------------------------------ --------------------- * *和文字 *&------------------------------------------------ --------------------- * *&-> p1文字 *&<-p2文字 *&------------------------------------------------ --------------------- * FORM sub_populate_catlog。 v_field_name ='VBELN'。 *只有一个INVOICE DOC列 使用v_field_name执行sub_pop_field_catlog。 v_field_name ='MATNR'。 *动态材料列为" N"个 *取决于INVOICE和MATNR组合 循环至i_data_temp INTO wa_data。 使用v_field_name执行sub_pop_field_catlog。 结局。 ENDFORM。 " sub_populate_catlog *&------------------------------------------------ --------------------- * *&表单SUB_POP_FIELD_CATLOG *&------------------------------------------------ --------------------- * *和文字 *&------------------------------------------------ --------------------- * *-> P_V_FIELD_NAME文字 *&------------------------------------------------ --------------------- * FORM sub_pop_field_catlog使用p_l_field_name TYPE字段名。 数据:dfies的l_i_dfies类型标准表, l_wa_dfies TYPE dfies。 通话功能" DDIF_FIELDINFO_GET" 出口 tabname ='VBRP' 栏位名称= p_l_field_name 桌子 dfies_tab = l_i_dfies 例外情况 not_found = 1 internal_error = 2 其他= 3。 如果sy-subrc EQ 0。 清除l_wa_dfies。 读取表l_i_dfies INTO l_wa_dfies索引1。 清除wa_fcat。 *由于我们希望物料号成为标题文本 *用实际工厂价值替换字段名称 如果v_field_name ='MATNR'。 l_wa_dfies-fieldname = wa_data-matnr。 万一。 将对应的l_wa_dfies移动到wa_fcat。 将wa_fcat附加到i_fcat。 万一。 ENDFORM。 " sub_pop_field_catlog **&-------------------------------------------------------------- ---------------------- * **&表格SUB_ALV_FIELD_CAT **&-------------------------------------------------------------- ---------------------- * **和文字 **&-------------------------------------------------------------- ---------------------- * **&-> p1文字 **&<-p2文字 **&-------------------------------------------------------------- ---------------------- * FORM sub_alv_field_cat。 *为物料建立现场目录 PERFORM sub_fill_alv_field_cat使用 'VBELN'' ''L''Billing Doc'20。 *材料的Matnr列数将是动态的 循环至i_data_temp INTO wa_data。 v_fieldname = wa_data-matnr。 v_seltext = wa_data-matnr。 PERFORM sub_fill_alv_field_cat使用 v_fieldname' ''L'v_seltext 18。 结局。 ENDFORM。 " sub_alv_field_cat *&------------------------------------------------ --------------------- * *&表格SUB_FILL_ALV_FIELD_CAT *&------------------------------------------------ --------------------- * *和文字 *&------------------------------------------------ --------------------- * *-> P_文字 *-> P_文字 *-> P_文字 *-> P_文字 *-> P_36文字 *&------------------------------------------------ --------------------- * FORM sub_fill_alv_field_cat使用 p_fldnam TYPE字段名称 p_tabnam TYPE标签名 p_justif TYPE char1 p_seltext类型dd03p-scrtext_l p_outlen TYPE i。 数据l_lfl_fcat类型slis_fieldcat_alv。 l_lfl_fcat-fieldname = p_fldnam。 l_lfl_fcat-tabname = p_tabnam。 l_lfl_fcat-just = p_justif。 l_lfl_fcat-seltext_l = p_seltext。 l_lfl_fcat-outputlen = p_outlen。 附加l_lfl_fcat至i_fieldcat。 清除l_lfl_fcat。 ENDFORM。 " sub_fill_alv_field_cat *&------------------------------------------------ --------------------- * *&表格SUB_BUILD_INT_TABLE *&------------------------------------------------ --------------------- * *和文字 *&------------------------------------------------ --------------------- * *&-> p1文字 *&<-p2文字 *&------------------------------------------------ --------------------- * FORM sub_build_int_table。 *使用每次运行所需的列准备动态内部表 调用方法cl_alv_table_create => create_dynamic_table 出口 it_fieldcatalog = i_fcat 输入 ep_table = i_dynamic_table 例外情况 generate_subpool_dir_full = 1 其他= 2。 *将动态表的结构分配给字段符号 ASSIGN i_dynamic_table-> *至 。 *创建动态工作区 创建数据wa_dyn_line类似于 的行。 分配wa_dyn_line-> *至 。 ENDFORM。 " sub_build_int_table *&------------------------------------------------ --------------------- * *&表格SUB_DISPLAY_DATA *&------------------------------------------------ --------------------- * *和文字 *&------------------------------------------------ --------------------- * *&-> p1文字 *&<-p2文字 *&------------------------------------------------ --------------------- * FORM sub_display_data。 数据:l_count TYPE i, l_factor TYPE i, l_wa_layout TYPE slis_layout_alv, 我输入 将i_data循环到wa_data中。 清除:l_factor,l_count。 **********新************* 使用键MATNR = WA_DATA-MATNR读取表i_data_temp 禁止运输 二进制搜索。 如果sy-subrc EQ 0。 * +0(18)= wa_data-matnr。 +0(18)= wa_data-VBELN。 l_factor = sy-tabix-1。 l_count = 18 +(36 * l_factor)。 + l_count(36)= wa_data-fklmg。 *在结束时。 在MATNR结束时。 将 附加到 。 清除 。 ENDAT。 万一。 结局。 l_wa_layout-colwidth_optimize ='X'。 l_wa_layout-zebra ='X'。 *用于显示ALV报告的功能模块 通话功能'REUSE_ALV_GRID_DISPLAY' 出口 i_callback_program = sy-repid is_layout = l_wa_layout it_fieldcat = i_fieldcat 桌子 t_outtab = 例外情况 程序错误= 1 其他= 2。 ENDFORM。
(26.1 kB)
代码不可读,抱歉。 我无法阅读全部内容,但是当您从VBRP读取数据然后从比较材料中删除"重复项"时,显然存在问题。 如果同一材料有两个发票,则此后将不会在报告中显示其中一个。 我很难想象为什么会有人想要这样的报告。
总体而言,我不太了解该程序的功能。 所谓的"动态"是什么? 您可以使用明确定义的结构从数据库中读取非常具体的数据。 如果要将其呈现在ALV网格中,则只需执行此操作即可。
此外,请不要对ALV使用过时的REUSE ...函数。 改用SALV,通过SALV * DEMO *在SE38中查找演示程序。 还有许多其他过时的技术,请确保阅读文档中的最新ABAP准则或查找DSAG准则。
睁大眼睛
这就是机器人
还是人?
这是一个问题吗?
我知道一个好的程序员是一个懈怠的程序员(即"不要重塑 轮子"),但在这里,他希望我们完成他的工作??? :-)
您好 Bhasker Reddy Anugu 我建议您看一下本教程 了解有关SAP Community Q&A的更多信息,以及如何最好地提出问题以获得有用的答案。
https://developers.sap.com/tutorials/community-qa.html
最诚挚的问候,
Mynyna(SAP社区主持人)
一周热门 更多>