如何优化我的代码

2020-09-05 15:28发布

         点击此处--->   EasySAP.com群内免费提供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-MAT​​NR,
  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。

         点击此处--->   EasySAP.com群内免费提供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-MAT​​NR,
  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。
付费偷看设置
发送
5条回答
小熊yu生菜
1楼 · 2020-09-05 15:56.采纳回答

1。 https://blogs.sap.com/2019/05/03/clean-abap/

2。

  • TABLES已过时。
  • 您使用的是标准表,而不是哈希表(或排序表)。
  • 您使用的是FOR ALL ENTRIES而不是JOIN。
  • 您正在使用REUSE_ALV_GRID_DISPLAY而不是CL_SALV_TABLE。
  • 您是变量,没有有意义的名称
  • 代码严重模块化。
  • 该代码没有职责分离-没有分层,没有抽象。
  • 该代码没有自动测试,并且格式也不容易被引入 测试线束。
  • 您正在使用的代码过时了。
  • 您使用前缀来表示类型,这与SAP自己的准则以及DSUG的最新准则背道而驰。
  • 您几乎没有任何评论,这些评论都没有用。 但是,如果正确地对程序进行模块化,则无论如何您将需要较少的注释。
  • 最后,您还没有很好地打印代码,因此它基本上是不可读的。

CJones
5楼-- · 2020-09-05 16:06

加上2美分,

如果您的IDES带有ABAP 7.4或+,则尝试在代码中加入新的内联语法。

尝试更多地进入纯SQL级编码。

谢谢

Sijin

一周热门 更多>