点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
Q1。 2019年,使用ABAP编码时应遵循的最佳实践是什么?
Q2。 看看我的代码,让我知道如何优化它。 另外,请告诉我如何删除" TABLES "。
谢谢。
* ---------------------------------------------- ----------------------- * *表格* * ------------------------------------------------- -------------------- * 表格:MARA,MAKT,MARD,VBAK,VBAP。 * ------------------------------------------------- -------------------- * *类型 * ------------------------------------------------- -------------------- * 类型:ITAB1的开头, MATNR类型MARA-MATNR, ERSDA型MARA-ERSDA, ERNAM型MARA-ERNAM, LAEDA类型MARA-LAEDA, MTART类型MARA-MTART, MATKL类型MARA-MATKL, MEINS类型MARA-MEINS, ITAB1的结尾。 类型:ITAB2的开始, MATNR型MAKT-MATNR, MAKTG类型MAKT-MAKTG, ITAB2的结尾。 类型:ITAB3的开始, MATNR类型MARD-MATNR, LGORT型MARD-LGORT, WERKS型MARD-WERKS, ITAB3结束。 * 类型:ITAB4的开始, MATNR类型MARA-MATNR, ERSDA型MARA-ERSDA, ERNAM型MARA-ERNAM, LAEDA类型MARA-LAEDA, MTART类型MARA-MTART, MATKL类型MARA-MATKL, MEINS类型MARA-MEINS, MAKTG类型MAKT-MAKTG, LGORT型MARD-LGORT, WERKS型MARD-WERKS, ITAB的结尾4。 类型:ITAB6的开始, VBELN类型VBAK-VBELN, ERDAT类型VBAK-ERDAT, ITAB结束。 类型:ITAB5的开始, VBELN类型VBAP-VBELN, POSNR类型VBAP-POSNR, MATNR类型VBAP-MATNR MATWA类型VBAP-MATWA, ITAB5结束。 类型:ITAB9的开始, VBELN类型VBAK-VBELN, ERDAT类型VBAK-ERDAT, POSNR类型VBAP-POSNR, MATNR类型VBAP-MATNR MATWA类型VBAP-MATWA, ITAB9的结尾。 * ------------------------------------------------- -------------------- * *数据 * ------------------------------------------------- -------------------- * 数据:ITAB1的IT_MARA类型标准表, WA_MARA TYPE ITAB1, ITAB2的IT_MAKT类型标准表, WA_MAKT TYPE ITAB2, ITAB3的IT_MARD类型标准表, WA_MARD TYPE ITAB3, ITAB4的IT_FINAL类型标准表, WA_FINAL TYPE ITAB4, IT_FCAT类型SLIS_T_FIELDCAT_ALV, WA_FCAT就像IT_FCAT的生产线一样, ITAB5的IT_VBAP类型标准表, WA_VBAP类型ITAB5, ITAB6的IT_VBAK类型标准表, WA_VBAK类型ITAB6, ITAB9的IT_FINAL1类型标准表, WA_FINAL1类型ITAB9。 * ------------------------------------------------- -------------------- * *选择画面* * ------------------------------------------------- -------------------- * B1块的标题屏幕为TEXT01的SELECTION屏幕开始。 选择-屏幕跳过1。 Select-OPTIONS:SY-DATUM的日期默认值''到SY-DATUM义务。 选择-屏幕跳过1。 框标题为TEXT02的B2块的SELECTION屏幕开始。 选择-屏幕跳过1。 参数:MATRL_R单选按钮组G1 USER-COMMAND D1默认值'X', SALES_R单选按钮组G1。 选择-屏幕跳过1。 选择-屏幕结束B2。 B3块的标题屏幕为TEXT03的SELECTION屏幕开始。 选择-屏幕跳过1。 选择选项:MATNR用于MARA-MATNR修改ID D1无间隔。 选择选项:VBELN用于VBAK-VBELN修改ID D2无间隔。 选择-屏幕跳过1。 选择-屏幕结束B3。 选择-屏幕结束B1。 在SELECTION屏幕输出。 在屏幕上循环。 如果Screen-GROUP1 ='D1'。 如果MATRL_R ='X'。 屏幕不可见='0'。 Screen-ACTIVE ='1'。 其他。 屏幕不可见='1'。 屏幕主动='0'。 万一。 修改屏幕。 万一。 如果Screen-GROUP1 ='D2'。 如果SALES_R ='X'。 屏幕不可见='0'。 Screen-ACTIVE ='1'。 其他。 屏幕不可见='1'。 屏幕主动='0'。 万一。 修改屏幕。 万一。 Endloop。 * ------------------------------------------------- -------------------- * *初始化* * ------------------------------------------------- -------------------- * 初始化。 TEXT01 ='ABAP列表查看器'。 TEXT02 ="单选按钮"。 Text03 ="动态屏幕选择"。 * ------------------------------------------------- -------------------- * *选择开始。 * * ------------------------------------------------- -------------------- * 选择开始。 如果MATRL_R ='X'。 从MARA到表IT_MARA中选择MATNR ERSDA ERNAM LAEDA MTART MATKL MEINS,其中MATNR在MATNR中,而ERSDA在日期中。 如果IT_MARA不是INITIAL。 从MAKT中将MATNR MAKTG选择到表IT_MAKT中,用于IT_MARA中的所有条目,其中MATNR = IT_MARA-MATNR和SPRAS ='E'。 对于IT_MARA中的所有条目,从MARD中将MATNR LGORT WERKS选择到表IT_MARD中,其中MATNR = IT_MARA-MATNR。 在IT_MARA处循环进入WA_MARA。 WA_FINAL-MATNR = WA_MARA-MATNR。 WA_FINAL-ERSDA = WA_MARA-ERSDA。 WA_FINAL-ERNAM = WA_MARA-ERNAM。 WA_FINAL-LAEDA = WA_MARA-LAEDA。 WA_FINAL-MTART = WA_MARA-MTART。 WA_FINAL-MATKL = WA_MARA-MATKL。 WA_FINAL-MEINS = WA_MARA-MEINS。 使用键MATNR = WA_MARA-MATNR将表IT_MAKT读入WA_MAKT。 WA_FINAL-MAKTG = WA_MAKT-MAKTG。 将WA_FINAL追加到IT_FINAL。 结局。 WA_FCAT-FIELDNAME ='MATNR'。 WA_FCAT-SELTEXT_M ='材料编号'。 WA_FCAT-COL_POS ='1'。 WA_FCAT-Key ='X'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 WA_FCAT-HOTSPOT ='X'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='MAKTG'。 WA_FCAT-SELTEXT_M ='材料说明'。 WA_FCAT-COL_POS ='2'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 * ------------------------------------------------- -------------------- * *子程序* * ------------------------------------------------- -------------------- * 通话功能'REUSE_ALV_GRID_DISPLAY' 出口 I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_USER_COMMAND ='INTERACTIVE' IT_FIELDCAT = IT_FCAT 桌子 T_OUTTAB = IT_FINAL。 其他。 消息S000(Y_MSG)显示为'E'。 万一。 万一。 如果MATRL_R =''。 从VBAK到表IT_VBAK中选择VBELN ERDAT,其中VBELN在VBELN中,而ERDAT在日期中。 如果IT_VBAK不是初始的。 从VBAP到表IT_VBAP中,为IT_VBAK中的所有条目选择VBELN POSNR MATNR MATWA,其中VBELN = IT_VBAK-VBELN。 WA_FCAT-FIELDNAME ='VBELN'。 WA_FCAT-SELTEXT_M ='销售文档'。 WA_FCAT-COL_POS ='1'。 WA_FCAT-Key ='X'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_VBAK'。 WA_FCAT-Hotspot ='X'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='ERDAT'。 WA_FCAT-SELTEXT_M ='创建成功'。 WA_FCAT-COL_POS ='2'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_VBAK'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 * ------------------------------------------------- -------------------- * *子程序* * ------------------------------------------------- -------------------- * 调用函数" REUSE_ALV_GRID_DISPLAY" 出口 I_CALLBACK_PROGRAM = SY-REPID I_CALLBACK_USER_COMMAND ='INTERACTIVE2' IT_FIELDCAT = IT_FCAT 桌子 T_OUTTAB = IT_VBAK。 其他。 消息S000(Y_MSG)显示为'E'。 万一。 万一。 使用R_UCOMM类型SY-UCOMM R_SELFIELD类型SLIS_SELFIELD进行表格交互。 清除WA_FINAL。 刷新IT_FINAL。 清除WA_FCAT。 刷新IT_FCAT。 * BREAK-点。 在IT_MARA处循环进入WA_MARA,其中MATNR = R_SELFIELD-VALUE。 WA_FINAL-MATNR = WA_MARA-MATNR。 WA_FINAL-ERSDA = WA_MARA-ERSDA。 WA_FINAL-ERNAM = WA_MARA-ERNAM。 WA_FINAL-LAEDA = WA_MARA-LAEDA。 WA_FINAL-MTART = WA_MARA-MTART。 WA_FINAL-MATKL = WA_MARA-MATKL。 WA_FINAL-MEINS = WA_MARA-MEINS。 使用密钥MATNR = R_SELFIELD-VALUE将表IT_MARD读入WA_MARD。 WA_FINAL-LGORT = WA_MARD-LGORT。 WA_FINAL-WERKS = WA_MARD-WERKS。 将WA_FINAL追加到IT_FINAL。 Endloop。 WA_FCAT-FIELDNAME ='MATNR'。 WA_FCAT-SELTEXT_M ='材料编号'。 WA_FCAT-COL_POS ='1'。 WA_FCAT-Key ='X'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='ERSDA'。 WA_FCAT-SELTEXT_M ='创建成功'。 WA_FCAT-COL_POS ='2'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='ERNAM'。 WA_FCAT-SELTEXT_M ='创建者'。 WA_FCAT-COL_POS ='3'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='LAEDA'。 WA_FCAT-SELTEXT_M ='最后更改'。 WA_FCAT-COL_POS ='4'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='MTART'。 WA_FCAT-SELTEXT_M ='材料类型'。 WA_FCAT-COL_POS ='5'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='MATKL'。 WA_FCAT-SELTEXT_M ='材料组'。 WA_FCAT-COL_POS ='6'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='MEINS'。 WA_FCAT-SELTEXT_M ='测量单位'。 WA_FCAT-COL_POS ='7'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='LGORT'。 WA_FCAT-SELTEXT_M ='存储位置'。 WA_FCAT-COL_POS ='8'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='WERKS'。 WA_FCAT-SELTEXT_M ='工厂'。 WA_FCAT-COL_POS ='9'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 通话功能'REUSE_ALV_GRID_DISPLAY' 出口 IT_FIELDCAT = IT_FCAT 桌子 T_OUTTAB = IT_FINAL。 ENDFORM。 使用R_UCOMM类型SY-UCOMM R_SELFIELD类型SLIS_SELFIELD进行表格交互。 清除WA_FINAL1。 刷新IT_FINAL1。 清除WA_FCAT。 刷新IT_FCAT。 在IT_VBAP处循环进入WA_VBAP,其中VBELN = R_SELFIELD-VALUE。 WA_FINAL1-VBELN = WA_VBAP-VBELN。 WA_FINAL1-POSNR = WA_VBAP-POSNR。 WA_FINAL1-MATNR = WA_VBAP-MATNR。 WA_FINAL1-MATWA = WA_VBAP-MATWA。 将WA_FINAL1追加到IT_FINAL1。 结局。 WA_FCAT-FIELDNAME ='VBELN'。 WA_FCAT-SELTEXT_M ='销售文档'。 WA_FCAT-COL_POS ='1'。 WA_FCAT-Key ='X'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL1'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='POSNR'。 WA_FCAT-SELTEXT_M ='销售文件'。 WA_FCAT-COL_POS ='2'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL1'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='MATNR'。 WA_FCAT-SELTEXT_M ='材料编号'。 WA_FCAT-COL_POS ='3'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL1'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 WA_FCAT-FIELDNAME ='MATWA'。 WA_FCAT-SELTEXT_M ='已输入材料'。 WA_FCAT-COL_POS ='4'。 WA_FCAT-OUTPUTLEN ='20'。 WA_FCAT-TABNAME ='IT_FINAL1'。 将WA_FCAT追加到IT_FCAT。 清除WA_FCAT。 调用函数" REUSE_ALV_GRID_DISPLAY" 出口 IT_FIELDCAT = IT_FCAT 桌子 T_OUTTAB = IT_FINAL1。 ENDFORM。
1。 https://blogs.sap.com/2019/05/03/clean-abap/
2。
@ 马修·比林汉姆 a>
好的,谢谢:)
你好@ SHASHANK SENGAR ,
@ 马修·比林汉姆()提供的其他解决方案。 请利用字段符号和类来显示ALV。
此外,创建Field目录的结构并传递给FM,而不是每次在报告中对其进行硬编码,甚至以后都不用在Field目录中添加额外的列。 只需将其添加/添加到结构中即可。
感谢与问候
感谢您回答@ Sijin Chandran a>。
在我的代码中,如果注释掉 TABLES ,则 SELECT 语句将显示错误。 那么,应该进行哪些更改?
先生,要搜索确切的查询非常困难,每个人都有自己的代码编写方式。 如果您能告诉我为使代码正确而必须替换的确切内容要比写" 请进行搜索,这是很常见的事情"要好。 主席先生,在一切适当的尊重下,我在问这个问题之前已尽力搜寻并尝试了所有可能性。
加上2美分,
如果您的IDES带有ABAP 7.4或+,则尝试在代码中加入新的内联语法。
尝试更多地进入纯SQL级编码。
谢谢
Sijin
一周热门 更多>