2020-08-16 19:26发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
关于DOI,错误消息"文档界面中发生内存保护故障"的原因是什么,它并不总是发生,请帮助
https://people.sap.com/sandra.rossi,help 请!我只知道错误消息出现在set_ranges_data中,但是我不知道它是什么问题,
编码:data:gdr_container类型引用到cl_gui_container,gdr_control类型引用到i_io_container_control,gdr_document类型引用到i_oi_document_proxy,gdr_spreadsheet类型引用到i_io_spreadsheet,gdt_errors类型引用到i_io_error出现0>
gcf_true ='x'
数据ldr_spliter类型对cl_gui_spliter_container的引用。
(1)。 调用方法ldr_spliter导出parent = cl_gui_container => screen0行= 1列= 1。
调用方法ldr_spliter-> set_border导出boder = cl_gui_cfw => false。
gdr_container = ldr_spliter-> get_container(row = 1列= 2)
(2)。 *创建容器控件调用方法C_OI_CONTAINER_CONTROL_CREATOR => GET_CONTAINER_CONTROL导入控件= GDR_CONTROL错误= GDT_ERRORS。 *将错误对象保存在集合中
APPEND GDT_ERRORS。
*初始化控件
调用方法GDR_CONTROL-> INIT_CONTROL导出* INPLACE_ENABLED = GCF_TRUE"值'X'
INPLACE_ENABLED =''"值'X'
INPLACE_SCROLL_DOCUMENTS = GCF_TRUE"值'X'REGISTER_ON_CLOSE_EVENT = GCF_TRUE"值'X'REGISTER_ON_CUSTOM_EVENT = GCF_TRUE"值'X'TEXT-006" V" R3_APPLICATION_NAME ='基础'#EC" CONTEXT PARENT = G" >
NO_FLUSH ='x'
导入错误= GDT_ERRORS。
*将错误对象保存在集合中
(3)。数据:LDT_DOC_COMPONENTS类型SBDST_COMPONENTS,LDT_DOC_SIGNATURE类型SBDST_SIGNATURE,LDT_BDS_URIS类型SBDST_URI,LDS_BDS_URL LDT_BDS_URIS类型,LDF_CLASS_NAME类型类型SBDST_CLASS "密钥LDF_CLASSNAME = GCF_CLASSNAME。LDF_CLASSTYPE = GCF_CLASSTYPE_OT。LDF_OBJECTKEY = GCF_OBJECTKEY。
*获取有关文档的信息呼叫方法CL_BDS_DOCUMENT_SET => GET_INFO EXPORTING CLASSNAME = LDF_CLASSNAME" Name CLASSTYPE = LDF_CLASSTYPE
类型OBJECT_KEY = LDF_OBJECTKEY"键更改组件= LDT_DOC_COMPONENTS签名= LDT_DOC_SIGNATURE。
*通过传输URL返回文档
呼叫的方法CL_BDS_DOCUMENT_SET => GET_WITH_URL EXPORTING CLASSNAME = LDF_CLASSNAME "名称CLASSTYPE = LDF_CLASSTYPE" 类型OBJECT_KEY = LDF_OBJECTKEY"密钥变更URIS = LDT_BDS_URIS SIGNATURE = LDT_DOC_SIGNATURE。SORT LDT_BDS_URIS BY DOC_COUNT DESCENDING。READ TABLE LDT_BDS_URIS INTO LDS_BDS_URL INDEX 1. PRF_TEMPLATE_URL = LDS_BDS_URL -URI。
数据:LDF_AVAILABLE类型I.呼叫方法GDR_CONTROL-> GET_DOCUMENT_PROXY EXPORTING DOCUMENT_TYPE ='Excel.Sheet'" TEXT-007"值'Excel.Sheet'NO_FLUSH = GCF_TRUE"值'X'REGISTER_CONTAINER = GCF_TRUE"值'X' IMPORTING DOCUMENT_PROXY = GDR_DOCUMENT ERROR = GDT_ERRORS。 *将错误对象保存在集合APPEND GDT_ERRORS中。 呼叫方法GDR_DOCUMENT-> OPEN_DOCUMENT导出
OPEN_INPLACE =''"
DOCUMENT_URL = PVF_TEMPLATE_URL
调用方法GDR_DOCUMENT-> HAS_SPREADSHEET_INTERFACE EXPORTING
NO_FLUSH =''"
导入
IS_AVAILABLE = LDF_AVAILABLE E
RROR = GDT_ERRORS。
*将错误对象保存在集合APPEND GDT_ERRORS中。 呼叫方法GDR_DOCUMENT-> GET_SPREADSHEET_INTERFACE导出
SHEET_INTERFACE = GDR_SPREADSHEET
错误= GDT_ERRORS。
尝试。 调用方法GDR_SPREADSHEET-> SELECT_SHEET导出名称= TEXT-008"值'SHEET1'
捕获CX_SY_REF_IS_INITIAL。
消息S017(ZCS01)显示类似GCF_MSGTY_E。 离开屏幕。
ENDTRY。
(4)。数据LDS_RANGE类型SOI_RANGE_ITEM。 LDS_RANGE-NAME = GCF_CELL。
LDS_RANGE-ROWS = PVF_ROW。
LDS_RANGE-COLUMNS = PVF_COLUMN。
LDS_RANGE-CODE = GDR_SPREADSHEET-> SPREADSHEET_INSERTALL。
将LDS_RANGE附加到PRT_RANGE。
调用方法GDR_SPREADSHEET-> INSERT_RANGE_DIM导出名称= GCF_CELL"值'cell'
NO_FLUSH =''"值'X'TOP = 1左= 1行= PVF_LINE1列= PVF_LINE2导入错误= GDT_ERRORS。
APPEND GDT_ERRORS。 数据LDS_CONTENT类型SOI_GENERIC_ITEM。
LDS_CONTENT-ROW = PVF_ROW。 LDS_CONTENT-COLUMN = PVF_COLUMN。 LDS_CONTENT-VALUE = PVF_VALUE。 将LDS_CONTENT附加到PRT_CONTENT。
呼叫方法GDR_SPREADSHEET-> SET_RANGES_DATA导出范围= LDT_RANGE目录= LDT_CONTENT * NO_FLUSH = GCF_TRUE"值'X'NO_FLUSH =''"值'X'更新= -1导入错误= GDT_ERRORS。
*设置框架
调用方法GDR_SPREADSHEET-> SET_FRAME EXPORTING RANGENAME = GCF_CELL
TYP = 127颜色= 1 NO_FLUSH = GCF_TRUE"值'X'导入错误= GDT_ERRORS。
数据:LDF_SHEET TYPE CHAR20。
调用方法GDR_SPREADSHEET-> FIT_WIDEST导出名称=空间NO_FLUSH = GCF_TRUE"值'X'导入错误= GDT_ERRORS。
*更新名称
LDF_SHEET = TEXT-008。 "值'SHEET1'
(5)。调用方法GDR_SPREADSHEET-> SET_SHEET_NAME EXPORTING NEWNAME = LDF_SHEET OLDNAME ='SHEET1'"值'Main'IMPORTING ERROR = GDT_ERRORS。*将错误对象保存在集合APPEND GDT_ERRORS中。
(6)。数据:LDF_ID类型SY-MSGID,LDF_NUM类型SY-MSGNO,LDF_P1类型SY-MSGV1,LDF_P2类型SY-MSGV2,LDF_P3类型SY-MSGV3,LDF_P4类型SY-MSGV4,LDS 。
将GDT_ERRORS循环到LDS_ERROR。 调用方法LDS_ERROR-> GET_MESSAGE导入MESSAGE_ID = LDF_ID MESSAGE_NUMBER = LDF_NUM
PARAM1 = LDF_P1 PARAM2 = LDF_P2 PARAM3 = LDF_P3 PARAM4 = LDF_P4。
*发生错误时(例如一次运行程序)
如果LDF_ID不是INITIAL并且LDF_NUM不是INITIAL。 消息ID LDF_ID TYPE GCF_MSGTY_S"值'S'编号LDF_NUM与LDF_P1 LDF_P2 LDF_P3 LDF_P4显示类似GCF_MSGTY_E。"值'E'离开列表处理。
*清除GDF_DOWNLOAD。
ENDIF。
ENDLOOP。
在前端,SAP GUI或Microsoft Office级别,"内存保护错误"似乎是一个非常低级的错误。
所以 ,也许重新安装最新的SAP GUI版本或Office应用程序。
或在控件" Office Integration"上激活您的SAP GUI跟踪以收集有关该错误的更多信息,并联系SAP支持。
先生sandra.rossi,感谢您的回答,我有一个问题是,正常情况下(99行* 179列)数据可以在本地下载,但是一旦我删除主数据到99以下 通过调试或编码的行,错误消息"内存保护故障发生在文档接口中",首先,我认为原因是主内部表或调试占用了内存,但主内部表是模板内部表,并且 我通过编码删除数据的情况也同样发生,现在我想知道何时以及多少数据将导致程序无法加载。
您知道内部99行179列的表占用的内存吗? 它可能非常低,因此无法解释DOI中的错误。 只有您遇到了这样的问题,因此,如果您在此论坛上请求进一步的帮助,则应该发布一个可复制的示例(还应该研究如何始终复制-尚不清楚为什么"它并不总是发生")。
注意:如果要定位某人,请复制/粘贴超链接的名称,例如 Sandra Rossi ,以便 我有机会收到您的邮件通知(复制/粘贴也有助于避免姓名打错)。
不幸的是,如果我不能 重现您的问题。 您的代码无法编译。
我看到您定义了GCF_TRUE ='x'而不是'X'。 也许是你的问题。 最好使用常量abap_true。
我建议您创建最简单的程序。 如果SET_RANGES_DATA适用于此最简单的程序,则可以确定与当前程序的差异。 一种解决方案是将复杂程序的每个功能集成到您的简单程序中,直到再次出现该错误,以便您确定问题的原因。
NB:
最多设置5个标签!
https://people.sap.com/sandra.rossi,help 请!我只知道错误消息出现在set_ranges_data中,但是我不知道它是什么问题,
编码:data:gdr_container类型引用到cl_gui_container,gdr_control类型引用到i_io_container_control,gdr_document类型引用到i_oi_document_proxy,gdr_spreadsheet类型引用到i_io_spreadsheet,gdt_errors类型引用到i_io_error出现0>
gcf_true ='x'
数据ldr_spliter类型对cl_gui_spliter_container的引用。
(1)。 调用方法ldr_spliter导出parent = cl_gui_container => screen0行= 1列= 1。
调用方法ldr_spliter-> set_border导出boder = cl_gui_cfw => false。
gdr_container = ldr_spliter-> get_container(row = 1列= 2)
(2)。 *创建容器控件调用方法C_OI_CONTAINER_CONTROL_CREATOR => GET_CONTAINER_CONTROL导入控件= GDR_CONTROL错误= GDT_ERRORS。 *将错误对象保存在集合中
APPEND GDT_ERRORS。
*初始化控件
调用方法GDR_CONTROL-> INIT_CONTROL导出* INPLACE_ENABLED = GCF_TRUE"值'X'
INPLACE_ENABLED =''"值'X'
INPLACE_SCROLL_DOCUMENTS = GCF_TRUE"值'X'REGISTER_ON_CLOSE_EVENT = GCF_TRUE"值'X'REGISTER_ON_CUSTOM_EVENT = GCF_TRUE"值'X'TEXT-006" V" R3_APPLICATION_NAME ='基础'#EC" CONTEXT PARENT = G" >
NO_FLUSH ='x'
导入错误= GDT_ERRORS。
*将错误对象保存在集合中
APPEND GDT_ERRORS。
(3)。数据:LDT_DOC_COMPONENTS类型SBDST_COMPONENTS,LDT_DOC_SIGNATURE类型SBDST_SIGNATURE,LDT_BDS_URIS类型SBDST_URI,LDS_BDS_URL LDT_BDS_URIS类型,LDF_CLASS_NAME类型类型SBDST_CLASS "密钥LDF_CLASSNAME = GCF_CLASSNAME。LDF_CLASSTYPE = GCF_CLASSTYPE_OT。LDF_OBJECTKEY = GCF_OBJECTKEY。
*获取有关文档的信息呼叫方法CL_BDS_DOCUMENT_SET => GET_INFO EXPORTING CLASSNAME = LDF_CLASSNAME" Name CLASSTYPE = LDF_CLASSTYPE
类型OBJECT_KEY = LDF_OBJECTKEY"键更改组件= LDT_DOC_COMPONENTS签名= LDT_DOC_SIGNATURE。
*通过传输URL返回文档
呼叫的方法CL_BDS_DOCUMENT_SET => GET_WITH_URL EXPORTING CLASSNAME = LDF_CLASSNAME "名称CLASSTYPE = LDF_CLASSTYPE" 类型OBJECT_KEY = LDF_OBJECTKEY"密钥变更URIS = LDT_BDS_URIS SIGNATURE = LDT_DOC_SIGNATURE。SORT LDT_BDS_URIS BY DOC_COUNT DESCENDING。READ TABLE LDT_BDS_URIS INTO LDS_BDS_URL INDEX 1. PRF_TEMPLATE_URL = LDS_BDS_URL -URI。
数据:LDF_AVAILABLE类型I.呼叫方法GDR_CONTROL-> GET_DOCUMENT_PROXY EXPORTING DOCUMENT_TYPE ='Excel.Sheet'" TEXT-007"值'Excel.Sheet'NO_FLUSH = GCF_TRUE"值'X'REGISTER_CONTAINER = GCF_TRUE"值'X' IMPORTING DOCUMENT_PROXY = GDR_DOCUMENT ERROR = GDT_ERRORS。 *将错误对象保存在集合APPEND GDT_ERRORS中。 呼叫方法GDR_DOCUMENT-> OPEN_DOCUMENT导出
OPEN_INPLACE =''"
DOCUMENT_URL = PVF_TEMPLATE_URL
导入错误= GDT_ERRORS。
APPEND GDT_ERRORS。
调用方法GDR_DOCUMENT-> HAS_SPREADSHEET_INTERFACE EXPORTING
NO_FLUSH =''"
导入
IS_AVAILABLE = LDF_AVAILABLE E
RROR = GDT_ERRORS。
*将错误对象保存在集合APPEND GDT_ERRORS中。 呼叫方法GDR_DOCUMENT-> GET_SPREADSHEET_INTERFACE导出
NO_FLUSH =''"
导入
SHEET_INTERFACE = GDR_SPREADSHEET
错误= GDT_ERRORS。
*将错误对象保存在集合中
APPEND GDT_ERRORS。
尝试。 调用方法GDR_SPREADSHEET-> SELECT_SHEET导出名称= TEXT-008"值'SHEET1'
NO_FLUSH =''"
导入错误= GDT_ERRORS。
*将错误对象保存在集合中
APPEND GDT_ERRORS。
捕获CX_SY_REF_IS_INITIAL。
消息S017(ZCS01)显示类似GCF_MSGTY_E。 离开屏幕。
ENDTRY。
(4)。数据LDS_RANGE类型SOI_RANGE_ITEM。 LDS_RANGE-NAME = GCF_CELL。
LDS_RANGE-ROWS = PVF_ROW。
LDS_RANGE-COLUMNS = PVF_COLUMN。
LDS_RANGE-CODE = GDR_SPREADSHEET-> SPREADSHEET_INSERTALL。
将LDS_RANGE附加到PRT_RANGE。
调用方法GDR_SPREADSHEET-> INSERT_RANGE_DIM导出名称= GCF_CELL"值'cell'
NO_FLUSH =''"值'X'TOP = 1左= 1行= PVF_LINE1列= PVF_LINE2导入错误= GDT_ERRORS。
*将错误对象保存在集合中
APPEND GDT_ERRORS。 数据LDS_CONTENT类型SOI_GENERIC_ITEM。
LDS_CONTENT-ROW = PVF_ROW。 LDS_CONTENT-COLUMN = PVF_COLUMN。 LDS_CONTENT-VALUE = PVF_VALUE。 将LDS_CONTENT附加到PRT_CONTENT。
呼叫方法GDR_SPREADSHEET-> SET_RANGES_DATA导出范围= LDT_RANGE目录= LDT_CONTENT * NO_FLUSH = GCF_TRUE"值'X'NO_FLUSH =''"值'X'更新= -1导入错误= GDT_ERRORS。
*将错误对象保存在集合中
APPEND GDT_ERRORS。
*设置框架
调用方法GDR_SPREADSHEET-> SET_FRAME EXPORTING RANGENAME = GCF_CELL
TYP = 127颜色= 1 NO_FLUSH = GCF_TRUE"值'X'导入错误= GDT_ERRORS。
*将错误对象保存在集合中
APPEND GDT_ERRORS。
数据:LDF_SHEET TYPE CHAR20。
调用方法GDR_SPREADSHEET-> FIT_WIDEST导出名称=空间NO_FLUSH = GCF_TRUE"值'X'导入错误= GDT_ERRORS。
*将错误对象保存在集合中
APPEND GDT_ERRORS。
*更新名称
LDF_SHEET = TEXT-008。 "值'SHEET1'
(5)。调用方法GDR_SPREADSHEET-> SET_SHEET_NAME EXPORTING NEWNAME = LDF_SHEET OLDNAME ='SHEET1'"值'Main'IMPORTING ERROR = GDT_ERRORS。*将错误对象保存在集合APPEND GDT_ERRORS中。
(6)。数据:LDF_ID类型SY-MSGID,LDF_NUM类型SY-MSGNO,LDF_P1类型SY-MSGV1,LDF_P2类型SY-MSGV2,LDF_P3类型SY-MSGV3,LDF_P4类型SY-MSGV4,LDS 。
将GDT_ERRORS循环到LDS_ERROR。 调用方法LDS_ERROR-> GET_MESSAGE导入MESSAGE_ID = LDF_ID MESSAGE_NUMBER = LDF_NUM
PARAM1 = LDF_P1 PARAM2 = LDF_P2 PARAM3 = LDF_P3 PARAM4 = LDF_P4。
*发生错误时(例如一次运行程序)
如果LDF_ID不是INITIAL并且LDF_NUM不是INITIAL。 消息ID LDF_ID TYPE GCF_MSGTY_S"值'S'编号LDF_NUM与LDF_P1 LDF_P2 LDF_P3 LDF_P4显示类似GCF_MSGTY_E。"值'E'离开列表处理。
*清除GDF_DOWNLOAD。
ENDIF。
ENDLOOP。
在前端,SAP GUI或Microsoft Office级别,"内存保护错误"似乎是一个非常低级的错误。
所以 ,也许重新安装最新的SAP GUI版本或Office应用程序。
或在控件" Office Integration"上激活您的SAP GUI跟踪以收集有关该错误的更多信息,并联系SAP支持。
# p #先生sandra.rossi,感谢您的回答,我有一个问题是,正常情况下(99行* 179列)数据可以在本地下载,但是一旦我删除主数据到99以下 通过调试或编码的行,错误消息"内存保护故障发生在文档接口中",首先,我认为原因是主内部表或调试占用了内存,但主内部表是模板内部表,并且 我通过编码删除数据的情况也同样发生,现在我想知道何时以及多少数据将导致程序无法加载。
您知道内部99行179列的表占用的内存吗? 它可能非常低,因此无法解释DOI中的错误。 只有您遇到了这样的问题,因此,如果您在此论坛上请求进一步的帮助,则应该发布一个可复制的示例(还应该研究如何始终复制-尚不清楚为什么"它并不总是发生")。
注意:如果要定位某人,请复制/粘贴超链接的名称,例如 Sandra Rossi ,以便 我有机会收到您的邮件通知(复制/粘贴也有助于避免姓名打错)。
不幸的是,如果我不能 重现您的问题。 您的代码无法编译。
我看到您定义了GCF_TRUE ='x'而不是'X'。 也许是你的问题。 最好使用常量abap_true。
我建议您创建最简单的程序。 如果SET_RANGES_DATA适用于此最简单的程序,则可以确定与当前程序的差异。 一种解决方案是将复杂程序的每个功能集成到您的简单程序中,直到再次出现该错误,以便您确定问题的原因。
NB:
一周热门 更多>