点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
嗨,
我需要开发一个报告,我需要在我自己的表中显示t001w,t001l,cepc,zmm_business table.zmm_business表中的werks,name1(工厂描述),lgort,lgobe,prctr字段,其中包含werks,lgort 首先,我需要从zmm_business表中检索werks,lgort,prctr字段的数据,然后与标准表结合以检索name1和lgobe字段以显示。 实际上我已经开始开发此报告,但是我没有显示name1(工厂描述)字段。请您提供一些指导以开发此报告。
致谢
bhavani
此程序有很多问题。
1。 TABLES命令已过时。 我猜它是因为SELECT-OPTIONS而被包括在内的,但是您不必为此使用TABLES,您只需声明各个变量即可用作参考。
2。 我全力以赴进行模块化,但是在这种情况下,数据读取被拆分为多个使用全局表的子例程。 在这种情况下,我觉得最好只使用一个主子例程来准备数据。 (当然,理想情况下,我们甚至不应该再使用子例程,而应使用类,但是,考虑到所有事情,那将是我最少的担心。)另外,DIS不是例程的描述性名称,请在以下位置使用更好的名称: 最少。
3。 选择选项S_LGORT和S_PRCTR不在程序中的任何地方使用。 要么删除它们,要么使用它们。
4。 除非您使用的是旧版本,否则请不要使用REUSE_ALV ... FM。 改用SALV(Google it),它所需的代码少得多,并且不需要整个字段目录逻辑。
5。 使用SELECT ... JOIN代替FOR ALL ENTRIES(FAE)。 例如,您正在使用主键字段(LGORT)从T001L读取数据,这是直接的内部联接。
6。 我在这里不了解某些业务逻辑。 WERKS是Z表中的字段。 T001W是工厂主表,其中WERKS是主键。 但您使用的是WHERE LIFNR = IT_T001L-LIFNR。 为什么? 同样,稍后在程序中,您仅从中获取名称字段。 任何查看该报告的人都会认为这是Z表中WERKS的名称。 利润中心的选择甚至更奇怪。 整个国家的所有P/C? 那不是很极端吗?
7。 前进到大循环-我也在这里迷路了。 您希望什么/如何准确显示在此报告上? 在使用FAE选择其他数据的情况下,我们通常会在主表上出现LOOP,就像您的情况一样,但是在从其他表中读取数据时,我们将使用一些WHERE条件。 相反,您拥有的是两个内部表中所有条目的两个无意义的LOOP,它们只是一遍又一遍地设置相同的变量。 使用此代码,您每次都会在表中得到相同的最后一个值。 这有什么意义呢? READ稍好一些(只是缺少sy-subrc检查),但是由于上面的愚蠢的LOOP,您的键值显然不正确。
但是一般来说,FAE在这里似乎是不必要的,您可以使用带有SELECT的一个SELECT直接将数据读取到"最终"表中。 (尽管不确定p/c数据,但是我再次怀疑这里的业务逻辑是不正确的。)
嗨Bhavani,
请分享您的代码,并检查数据是否在Z表中。
感谢Bhupendra的回复。 现在,我将像您所说的那样调试代码。
回复他人时,请使用注释按钮。 您的答案按钮用于发布原始问题的答案。 答案和评论现在是SCN上的两件事。
嗨,布彭德拉,
我正在分享我的代码,我是被开发的
报告ZMM_BUSINESS_BASE。 LGORT类型T001L-LGORT,
T_L001L类型表TY_T001L。
表格:ZMM_BUSINESS,T001W,T001L,CEPC。
类型:TY_FINAL的开始,
LIFNR类型T001L-LIFNR,
LGOBE T001L-LGOBE型,
WERKS T001W-WERKS型,
NAME1 T001W-NAME1型,
LAND1 T001W-LAND1型,PRCTR CEPC-PRCTR型,
TY_FINAL结尾。 > DATA:WA_FINAL TYPE TY_FINAL,
IT_FINAL TYPE TY_FINAL表。
TYPES:TY_CEPC的开始,
PRCTR TYPE CEPC-PRCTR,
LAND1 TYPE CEPC-LAND1,
END TY_CEPC的数据。
数据:TY_CEPC的WA_CEPC类型,TY_CEPC的IT_CEPC类型表。
类型:TY_T001L的开始,LGORT的类型T001L-LGORT,LGOBE的类型T001L-LGOBE ,
LIFNR类型T001L-LIFNR,
结束于TY_T001L。
数据:WA_T001L类型TY_T001L,
类型:开始于TY_T001W,
WERKS TYPE T001W-WERKS,
NAME1 TYPE T001W-NAME1,
LIFNR TYPE T001W-LIFNR,
LAND1 TYPE T001W-LAND1,
TY_T001W的结尾。
DATA:WA_T001W TY_T001W的类型,< br> IT_T001W TY_T001W的类型表。
类型 :开始于TY_ZMM_BUSINESS,
WERKS类型WERKS_D,
LGORT类型LGORT_D,
PRCTR类型PRCTR,<_> TY_ZMM_BUSINESS的结尾。
DATA:WA_ZMM_BUSINESS类型TY_ZMM_BUSINESS OF
。
DATA:L_PROG类型SY-REPID,
IT_FIELDCAT类型SLIS_T_FIELDCAT_ALV,
WA_FIELDLAYOUT类型SLIS_LAYOUT_ALV,
WA_FIELDCAT类似于IT_FIELDCAT的行。 A带框架标题文本001。
SELECT-OPTIONS:S_WERKS用于T001W-WERKS,
S_LGORT FOR T001L-LGORT,
CEPC-PRCTR的S_PRCTR。A块的选择屏幕结束。
开始选择。
PERFORM GET_ZMM_BUSINESS。
PERFORMGET_T001W。PERFORMGET_T001L。
PERFORM GET_CEPC。
PERFORM DIS。
PERFORMSET_FCAT。PERFORMDISPLAY_ALV。
FORM GET_ZMM_BUSINESS。
从ZMM_BUSINESS选择WERKS LGORT PRCTR到表IT_ZMM_BUSINESS中。
ENDFORM。
如果未初始化IT_ZMM_BUSINESS,则为GET_T001L。
从T001L中将LGORT LGOBE LIFNR选择到表IT_T001L中,以查找IT_ZMM_BUSINESS中的所有条目,其中LGORT = IT_ZMM_BUSINESS-LGORT。 ENDIF。
ENDFORM。
FORM GET_T001W。
如果IT_T001L不是初始代码。
从T001W的WERKS NAME1 LIFNR LAND1到
IT_T001W表IT_T001W中,所有IT_T001L中的条目LIFNR = IT_T001L -LIFNR。
ENDIF。
ENDFORM。
获取GET_CEPC。如果未初始化IT_T001W。
从CEPC中选择PRCTR LAND1到表IT_CEPC中,以获取IT_T001W中所有项,其中LAND1 = IT_T001W-land1。
ENDIF。
ENDFORM。
FORM DIS
将IT_ZMM_BUSINESS放入WA_ZMM_BUSINESS。
WA_FINAL-WERKS = WA_ZMM_BUSINESS-WERKS。
WA_FINAL-LGORT = WA_ZMM_BUSINESS-LGORT。
WA_FINAL-PRCTR = WA_ZMM_BUSINESS 在IT_T001L进入WA_T001L。
WA_FINAL-LGOBE = WA_T001L-LGOBE.WA_FINAL-LIFNR = WA_T001L-LIFNR.ENDLOOP。
在IT_CEPC进入WA_CEPC的环。
WA_FINAL-LAND1 = WA_CEPC-LAND1。
ENDLOOP。
使用键LIFNR将表IT_T001W读入WA_T001W =WA_T001L-LIFNR。WA_FINAL-NAME1= WA_T001W-NAME1。
APPEND WA_FINAL到IT_FINAL 。
清除:WA_ZMM_BUSINESS,
WA_T001W,
WA_T001L,
WA_CEPC。
ENDLOOP。
ENDFORM。
FORM SET_FCAT。
*调用SUB_FCAT_ALV表单以显示字段
PERFORM SUB_FCAT_ALV使用:'WERKS''Plant',
'NAME1''plant description。',
'LGORT''storage 位置",
" LGOBE""存储位置说明。",
" LIFNR""供应商",
" PRCTR""利润中心",
" LAND1""国家"。< br> *调用SUB_FCAT_ALV表单结束以显示字段
ENDFORM。
FORM DISPLAY_ALV。
WA_FIELDLAYOUT-COLWIDTH_OPTIMIZE ='X'。
L_PROG = SY-REPID。
> CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'
导出 > OTHERS =2。
如果SY-SUBRC <> 0.
*在此处实施适当的错误处理
* it_final。
ENDIF。
ENDFORM。
***用于更新字段目录的表格
FORM SUB_FCAT_ALV使用P_FNAME类型CHAR20
P_TXT类型CHAR50。
DATA SNO类型I.
SNO = SNO +1。
WA_FIELDCAT-COL_POS = SNO。
WA_FIELDCAT-FIEL DNAME = P_FNAME。
WA_FIELDCAT-SELTEXT_L = P_TXT。
将WA_FIELDCAT附加到IT_FIELDCAT。
清除WA_FIELDCAT。
ENDFORM。
嗨,Bhavani
您已采取了从表T001L获取值的循环,请检查WA_T001L-LIFNR中的值是否满足对表T001w的读取语句。 调试代码,您将获得解决方案。
一周热门 更多>