ALV 00有问题

2020-08-21 15:13发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)大家好, 我有ALV OO的随...

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

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


大家好,

我有ALV OO的随机转储问题。 在某些情况下可以正常工作,而在其他情况下,我可以使用两种类型的转储:

转储1

程序错误类别。 ABAP错误。 MESSAGE_TYPE_X运行时程序。 ABAP CL_GUI_DATAMANAGER =========== CP CP BC-FES-GUI数据仓库27.03.2020 09:33:05

Dump2

程序错误类别。 ABAP错误。 运行时RAISE_EXCEPTION过程。 ABAP CL_GUI_DATAPONDEMAND ========== CP BC-FES-GUI数据仓库27.03.2020 08:36:26

下面两个跟踪:

(错误)(27.03.20 08:53:30.886):" FreeObject"#0:对象[#-1]无法释放句柄-1; 这是一个ABAP编程错误(错误)(27.03.20 08:55:02.237):" FreeObject"#0:对象[#-1]无法释放句柄-1; 这是一个ABAP编程错误(错误)(27.03.20 09:33:04.955):" FreeObject"#0:对象[#-1]无法释放句柄-1; 这是一个ABAP编程错误

(错误)(27.03.20 08:30:23.797):调用[#28/0x0AE902AC/101/SAP.DataPOnDemand.1]中的方法" InsertPacket" [DispID = 7]#0:长" 820"# 1:对象[#-1] IDispatch :: Invoke引发异常发生异常(错误):(错误):***************************** **模块中发生错误:[SAPDataPOnDemand类] ******************************************* ****************************************************** **************************(错误):PROGRAM_ID | MODULE_NAME | METHOD_NAME |错误描述| VERSION | GUI VERSION | MODULE_PATH | (错误):************************************************** ****************************************************** ****************************************************** ***************************************************(错误) :SAP.DataPOnDemand.1 | SAPDataPOnDemand类| InsertPacket |无效索引。 | 7500.1.3.214 | 7500.1.3.1138 | c:\ program files(x86)\ sap \ frontend \ sapgui \ sapdpcts.ocx | (错误):************************************************** ****************************************************** ****************************************************** ***************************************************(错误) :(错误):异常触发源于:(错误):异常信息:无效索引。 (错误):异常代码:0(错误)(27.03.20 08:30:23.875):" FreeObject"#0:对象[#-1]无法释放句柄-1; 这是一个ABAP编程错误(错误)(27.03.20 08:36:26.601):调用[#16/0x0AC176F4/0/SAP.DataPOnDemand.1]的" InsertPacket" [DispID = 7]调用方法:0:"长" 820"#1:对象[#-1] IDispatch :: Invoke引发异常发生异常(错误):(错误):************************ *****模块中发生错误:[SAPDataPOnDemand类] **************************************** ****************************************************** *********************************(错误):PROGRAM_ID | MODULE_NAME | METHOD_NAME |错误描述| VERSION | GUI版本| MODULE_PATH | (错误):************************************************** ****************************************************** ****************************************************** ***************************************************(错误) :SAP.DataPOnDemand.1 | SAPDataPOnDemand类| InsertPacket |无效索引。 | 7500.1.3.214 | 7500.1.3.1138 | c:\ program files(x86)\ sap \ frontend \ sapgui \ sapdpcts.ocx | (错误):************************************************** ****************************************************** ****************************************************** ***************************************************(错误) :(错误):异常触发源于:(错误):异常信息:无效索引。 (错误):异常代码:0(错误)(27.03.20 08:36:26.648):" FreeObject"#0:对象[#-1]无法释放句柄-1; 这是一个ABAP编程错误

我的代码:

创建对象o_docking

导出

比率='95'

例外

cntl_system_error = 1

cntl_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5。

IF sy-subrc EQ 0。

** Split del容器

创建对象o_split

导出

父母= o_docking

sash_position = 20"分隔条的位置(以百分比为单位)

with_border =0。"具有边框= 1无边框= 0

o_top_container = o_split-> top_left_container。

o_bottom_container = o_split-> bottom_right_container。

** Creazione dell'alv

创建对象l_ref_alv

导出

i_parent = o_bottom_container。

** Creazione del documento

创建对象o_document

导出

style ='ALV_GRID'。

PERFORM manage_top_of_page。

创建对象g_event_receiver。

SET HANDLER g_event_receiver-> handle_toolbar FOR l_ref_alv。

SET HANDLER g_event_receiver-> handle_user_command FOR l_ref_alv。

SET HANDLER g_event_receiver-> handle_hotspot FOR l_ref_alv。

呼叫方法l_ref_alv-> set_table_for_first_display

导出

i_save = l_save

is_variant = s_variant

is_layout = l_slayout

it_toolbar_clusion = l_toolbar_ex

改变

it_outtab = l_it_output

it_fieldcatalog = l_it_field

例外情况

invalid_parameter_combination = 1

program_error = 2

too_many_lines = 3

其他= 4。

ENDIF。

有人对我有建议吗?

非常感谢。

8条回答
SAP小黑
2020-08-21 16:10

@ Satish Kumar Balasubramanian

嗨,

要求是复制一个显示WBS和工单数据的旧程序,并添加一些信息。

在调试中,我可以看到使用ALV的内部表,但是在前景号上。

在我的代码下面:

 ***提取数据表格


 ***显示结果
 致电9000屏幕。
 ****
 dynrpro 9000:
 输出之前进行处理。
 MODULE status_9000。
 输入后的过程。
 模块user_command_9000。


 ***
 MODULE status_9000输出。
   设置PF-STATUS'STATUS9000'。
   PERFORM set_ztitle更改var1 var2 var3 var4。
   使用var1 var2 var3 var4设置TITLEBAR'ZTITLE'。


   如果sy-batch是初始的。
     PERFORM exclude_button_003更改it_toolbar_except。
   万一。
   使用'zsps_esri_fcat_new'执行build_fieldcatalog
                               更改l_it_fcat。
   使用'zsps_esri_fcat_new'进行change_fieldcatalog
                                更改l_it_fcat。
   使用t_esri_out []执行display_alv
                             it_toolbar_except
                             g_save
                             'Risultato ricerca'(141)
                             l_it_fcat
                             l_ref_alv。
 ENDMODULE。  " STATUS_9000输出

 FORM set_ztitle更改p_var1
                           p_var2
                           p_var3
                           p_var4。
   数据:title(100)TYPE c。
   选择单值到标题
     来自ztps_param
     哪里= sy-repid
     AND对象='DYNPRO_TITLE'。
   p_var1 = title(35)。
   p_var2 =标题+35(40)。
   p_var3 =标题+80(20)。
 ENDFORM。

 FORM exclude_button_003更改l_toolbar_ex类型ui_functions。


   PERFORM pass_fields使用:'mc_fc_graph'更改l_toolbar_ex,
                              'mc_fc_print_back'更改了l_toolbar_ex,
                              'mc_mb_view'更改了l_toolbar_ex,
                              'mc_fc_detail'更改了l_toolbar_ex,
                              'mc_fc_info'更改了l_toolbar_ex,
                              'MC_FC_CHECK'更改了l_toolbar_ex,
                              'MC_FC_REFRESH'更改了l_toolbar_ex,
                              'MC_FC_LOC_CUT'更改了l_toolbar_ex,
                              'MC_FC_LOC_PASTE'更改了l_toolbar_ex,
                              'MC_FC_LOC_COPY'更改了l_toolbar_ex,
                              'MC_FC_LOC_UNDO'更改了l_toolbar_ex,
                              'MC_FC_LOC_DELETE_ROW'更改了l_toolbar_ex,
                              'MC_FC_LOC_INSERT_ROW'更改了l_toolbar_ex,
                              'MC_FC_LOC_PASTE_NEW_ROW'更改了l_toolbar_ex,
                              'MC_FC_LOC_COPY_ROW'更改了l_toolbar_ex,
                              'MC_FC_LOC_APPEND_ROW'更改了l_toolbar_ex。




 ENDFORM。
 *&------------------------------------------------  --------------------- *
 使用i_structure_name TYPE dd02l-tabname来生成build_fieldcatalog
                       更改l_it_field目录类型lvc_t_fcat。
   刷新l_it_field目录。
   通话功能'LVC_FIELDCATALOG_MERGE'
     出口
       i_structure_name = i_structure_name
     改变
       ct_fieldcat = l_it_fieldcatalog
     例外情况
       INCONSISTENT_INTERFACE
       PROGRAM_ERROR。
 ENDFORM。
 *&------------------------------------------------  --------------------- *
 FORM change_fieldcatalog使用i_structure_name TYPE dd02l-tabname
                           更改l_it_field目录类型lvc_t_fcat。




   字段符号:类型lvc_s_fcat。
   数据:color_curr_quan(4)TYPE c,
         color_all(4)类型c。
   数据:ls_fcat类型lvc_s_fcat。


   PERFORM颜色提取CHANGING color_curr_quan
                                   color_all。


   IF i_structure_name ='zsps_esri_fcat_new'。
     PERFORM Modify_fieldcat_new更改l_it_field目录。
   万一。


   环回l_it_fieldcatalog ASSIGNING 。
     CASE -字段名。
       当"复选框"。
          -scrtext_l =''。
          -scrtext_m =''。
          -scrtext_s =''。
          -checkbox ='X'。
          -edit ='X'。
          -outputlen = 7。
          -just ='C'。
          -tech = abap_true。
       当"拉沃罗"。
          -edit_mask ='== ALPHA'。
       当" QMNUM"时。
          -hotspot = abap_true。
     结束。
     IF  -inttype ='P'
        -emphasize = color_curr_quan。
     ELSEIF  -inttype <>'P'和 -checkbox <>'X'。
        -emphasize = color_all。
     万一。
     如果 -intlen <= 5。
        -just ='C'。
     万一。
   结局。


   如果不是sy-batch是初始的。
     DELETE l_it_fieldcatalog WHERE字段名称='CHECKBOX'。
   万一。
 ENDFORM。
 *&------------------------------------------------  --------------------- *
 FORM display_alv使用l_it_output TYPE STANDARD TABLE
                         l_toolbar_ex TYPE ui_functions
                         l_保存类型c
                         grid_title
                         l_it_fcat类型lvc_t_fcat
                         l_ref_alv类型参考cl_gui_alv_grid。


   使用l_slayout执行build_layout
                              'LINECOLOR'
                              "颜色"
                              " CELLTAB"
                              grid_title
                              l_it_fcat
                              ''。


   执行init_alv更改l_ref_alv。


   使用l_ref_alv执行output_alv
                            l_it_fcat
                            l_slayout
                            l_it_output
                            l_toolbar_ex
                            l_save。
 ENDFORM。  " DISPLAY_ALV
 *&------------------------------------------------  --------------------- *
 FORM build_layout使用布局类型lvc_s_layo
                          场色
                          ctab_fname
                          样式名
                          网格标题
                          t_fcat类型lvc_t_fcat
                          no_rowmark。




   layout-grid_title =网格标题。
   layout-no_rowmark = no_rowmark。
   layout-info_fname = fieldcolor。
   layout-ctab_fname = ctab_fname。
   layout-stylefname = stylefname。




 ENDFORM。
 *&------------------------------------------------  --------------------- *
 FORM init_alv更改l_ref_alv类型ref到cl_gui_alv_grid。
   如果sy-batch是初始的。


     创建对象o_docking
       出口
         比='95'
       例外情况
         cntl_system_error = 1
         cntl_error = 2
         create_error = 3
         lifetime_error = 4
         lifetime_dynpro_dynpro_link = 5。

     如果sy-subrc EQ 0。


       创建对象o_split
         出口
           父母= o_docking
           sash_position = 20
           with_border = 0。
       o_top_container = o_split-> top_left_container。
       o_bottom_container = o_split-> bottom_right_container。


       创建对象l_ref_alv
         出口
           i_parent = o_bottom_container。

       创建对象o_document
         出口
           样式='ALV_GRID'。


       PERFORM manage_top_of_page。
     万一。
   其他。
     创建对象l_ref_alv
       出口
         i_parent = cl_gui_container => screen0。
   万一。
 ENDFORM。
 *&------------------------------------------------  --------------------- *
 FORM output_alv使用l_ref_alv TYPE REF TO cl_gui_alv_grid
                        l_it_field TYPE lvc_t_fcat
                        l_slayout类型lvc_s_layo
                        l_it_output TYPE STANDARD TABLE
                        l_toolbar_ex TYPE ui_functions
                        l_保存类型c。




   检查l_ref_alv不是INITIAL。
   如果sy-batch是初始的。


     如果g_event_receiver是INITIAL。
       创建对象g_event_receiver。
       设置处理程序g_event_receiver-> handle_toolbar for l_ref_alv。
       设置处理程序g_event_receiver-> handle_user_command FOR l_ref_alv。
       设置处理程序g_event_receiver-> handle_hotspot FOR l_ref_alv。
     万一。
   万一。


   选择单*从ztps_param
     哪里= sy-repid
     AND uname = sy-uname
     AND对象='SAVE_VAR'。
   如果sy-subrc = 0。
     l_save ='A'。
   其他。
     l_save ='U'。
   万一。


   呼叫方法l_ref_alv-> set_table_for_first_display
     出口
       i_save = l_save
       is_variant = s_variant
       is_layout = l_slayout
       it_toolbar_clusion = l_toolbar_ex
     改变
       it_outtab = l_it_output
       it_fieldcatalog = l_it_field
     例外情况
       invalid_parameter_combination = 1
       程序错误= 2
       too_many_lines = 3
       其他= 4。


 ENDFORM。


 *&------------------------------------------------  --------------------- *
 CLASS gcl_event_receiver定义。
   公共部分。
     方法:
     handle_toolbar FOR cl_gui_alv_grid的活动工具栏
             导入e_object,


     handle_user_command FOR事件EV_user_command of cl_gui_alv_grid
             正在导入e_ucomm,




     handle_hotspot FOR EVENT hotspot_click OF cl_gui_alv_grid
              正在导入e_row_id e_column_id es_row_no。
   专用部分。
 ENDCLASS。


 类别gcl_event_receiver实施。
   方法handle_toolbar。
     使用e_object执行set_toolbar。
   终结法。  " hotspot_click
   方法handle_user_command。
     案例e_ucomm。
       当" DETT"。
         执行call_detail。
       当"注意"时。
         执行f_nota。
     结束。
   终结法。  " handle_user_command
   方法handle_hotspot。
     使用e_row_id执行f_event_hotspot
                                    e_column_id
                                    es_row_no。
   终结法。
 ENDCLASS。


 数据:g_event_receiver类型参考gcl_event_receiver。




 

一周热门 更多>