mara

本文记录了在使用 Marathon 测试框架时遇到的 Java 运行时异常问题,详细展示了错误堆栈跟踪,并探讨了无效 classpath 类型导致的问题根源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

修改前
 [root@dhcp-0-116 marathon-1.0.6]# ./marathon
.java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at java.io.ObjectInputStream.readClassDescriptor(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readArrayElements(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at gnu.java.rmi.server.RMIObjectInputStream.readValue(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServerRef.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.dispatch(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastConnection.run(libgcj.so.7rh)
   at java.lang.Thread.run(libgcj.so.7rh)
E
Time: 1.207
There was 1 error:
1) dialogdemo(net.sourceforge.marathon.junit.MarathonTestCase)net.ladypleaser.rmilite.RemoteInvocationException: error invoking createRuntime: java.rmi.RemoteException: connection failed to host: 10.66.0.116; nested exception is:
        java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at net.ladypleaser.rmilite.RemoteInvocationException.rethrow(RemoteInvocationException.java:47)
   at net.ladypleaser.rmilite.impl.LocalInvocationHandlerImpl.invokeRemote(LocalInvocationHandlerImpl.java:58)
   at net.ladypleaser.rmilite.impl.LocalInvocationHandlerImpl.invoke(LocalInvocationHandlerImpl.java:41)
   at $Proxy0.createRuntime(Unknown Source)
   at net.sourceforge.marathon.runtime.JavaRuntimeLeash.<init>(JavaRuntimeLeash.java:62)
   at net.sourceforge.marathon.runtime.JavaRuntimeFactory.createRuntime(JavaRuntimeFactory.java:66)
   at net.sourceforge.marathon.junit.MarathonTestCase.runTest(MarathonTestCase.java:72)
   at net.sourceforge.marathon.Main.runBatchMode(Main.java:81)
   at net.sourceforge.marathon.Main.main(Main.java:63)
Caused by: java.rmi.RemoteException: connection failed to host: 10.66.0.116; nested exception is:
        java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at gnu.java.rmi.server.UnicastRef.invokeCommon(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastRef.invoke(libgcj.so.7rh)
   at net.ladypleaser.rmilite.impl.RemoteInvocationHandlerImpl_Stub.invoke(Unknown Source)
   at net.ladypleaser.rmilite.impl.LocalInvocationHandlerImpl.invokeRemote(LocalInvocationHandlerImpl.java:53)
   ...16 more
Caused by: java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at java.io.ObjectInputStream.readClassDescriptor(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readArrayElements(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at gnu.java.rmi.server.RMIObjectInputStream.readValue(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServerRef.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.dispatch(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastConnection.run(libgcj.so.7rh)
   at java.lang.Thread.run(libgcj.so.7rh)

FAILURES!!!
Tests run: 1,  Failures: 0,  Errors: 1




修改后
[root@dhcp-0-116 marathon-1.0.6]# ./marathon
.java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at java.io.ObjectInputStream.readClassDescriptor(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readArrayElements(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at gnu.java.rmi.server.RMIObjectInputStream.readValue(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServerRef.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.dispatch(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastConnection.run(libgcj.so.7rh)
   at java.lang.Thread.run(libgcj.so.7rh)
E
Time: 1
There was 1 error:
1) dialogdemo(net.sourceforge.marathon.junit.MarathonTestCase)net.ladypleaser.rmilite.RemoteInvocationException: error invoking createRuntime: java.rmi.RemoteException: connection failed to host: 10.66.0.116; nested exception is:
        java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at net.ladypleaser.rmilite.RemoteInvocationException.rethrow(RemoteInvocationException.java:47)
   at net.ladypleaser.rmilite.impl.LocalInvocationHandlerImpl.invokeRemote(LocalInvocationHandlerImpl.java:58)
   at net.ladypleaser.rmilite.impl.LocalInvocationHandlerImpl.invoke(LocalInvocationHandlerImpl.java:41)
   at $Proxy0.createRuntime(Unknown Source)
   at net.sourceforge.marathon.runtime.JavaRuntimeLeash.<init>(JavaRuntimeLeash.java:62)
   at net.sourceforge.marathon.runtime.JavaRuntimeFactory.createRuntime(JavaRuntimeFactory.java:66)
   at net.sourceforge.marathon.junit.MarathonTestCase.runTest(MarathonTestCase.java:72)
   at net.sourceforge.marathon.Main.runBatchMode(Main.java:81)
   at net.sourceforge.marathon.Main.main(Main.java:63)
Caused by: java.rmi.RemoteException: connection failed to host: 10.66.0.116; nested exception is:
        java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at gnu.java.rmi.server.UnicastRef.invokeCommon(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastRef.invoke(libgcj.so.7rh)
   at net.ladypleaser.rmilite.impl.RemoteInvocationHandlerImpl_Stub.invoke(Unknown Source)
   at net.ladypleaser.rmilite.impl.LocalInvocationHandlerImpl.invokeRemote(LocalInvocationHandlerImpl.java:53)
   ...16 more
Caused by: java.io.InvalidClassException: invalid field type for classpath in class net.sourceforge.marathon.runtime.JavaRuntimeProfile
   at java.io.ObjectInputStream.readClassDescriptor(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at java.io.ObjectInputStream.readArrayElements(libgcj.so.7rh)
   at java.io.ObjectInputStream.readObject(libgcj.so.7rh)
   at gnu.java.rmi.server.RMIObjectInputStream.readValue(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServerRef.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.incomingMessageCall(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastServer.dispatch(libgcj.so.7rh)
   at gnu.java.rmi.server.UnicastConnection.run(libgcj.so.7rh)
   at java.lang.Thread.run(libgcj.so.7rh)

FAILURES!!!
Tests run: 1,  Failures: 0,  Errors: 1

[root@dhcp-0-116 marathon-1.0.6]#



以下代码哪里定义了查询功能: *&---------------------------------------------------------------------* *& REPORT ZPM_YZ_BPBJLONG3 *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT zmal. TABLES:zqm_wlz_yz,makt,mara,zmal,zpm_cs_mal_st. DATA ok_code TYPE sy-ucomm . DATA save_ok TYPE sy-ucomm . CLASS lcl_application DEFINITION DEFERRED . DATA custom_container TYPE REF TO cl_gui_custom_container . DATA gcontainer TYPE REF TO cl_gui_custom_container . DATA tree_control TYPE REF TO cl_gui_simple_tree . DATA grid TYPE REF TO cl_gui_alv_grid . DATA gs_layout TYPE lvc_s_layo. DATA gt_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat . DATA gw_fieldcat LIKE LINE OF gt_fieldcat . DATA node_table LIKE TABLE OF mtreesnode . DATA node1 TYPE mtreesnode . DATA: BEGIN OF st_vbak OCCURS 0, matkl LIKE zqm_wlz_yz-matkl, num1 LIKE zqm_wlz_yz-num1, num2 LIKE zqm_wlz_yz-num2, num3 LIKE zqm_wlz_yz-num3, num(1) , END OF st_vbak. DATA: n1 LIKE zqm_wlz_yz-num1, n2 LIKE zqm_wlz_yz-num2, n3 LIKE zqm_wlz_yz-num3. DATA:t_vbak LIKE st_vbak OCCURS 0 WITH HEADER LINE. DATA:w_vbak LIKE t_vbak OCCURS 0 WITH HEADER LINE. DATA g_application TYPE REF TO lcl_application . **************************************************************************************** *ALV用到的类库 TYPE-POOLS:slis. DATA: wa_alv_filed TYPE slis_fieldcat_alv, "列描述 wa_alv_filedcat TYPE slis_t_fieldcat_alv. "列描述内表,列清单 DATA: BEGIN OF mdezx OCCURS 0. INCLUDE STRUCTURE mdez. DATA: END OF mdezx. DATA: BEGIN OF mdpsx OCCURS 0. INCLUDE STRUCTURE mdps. DATA: END OF mdpsx. DATA: BEGIN OF mdsux OCCURS 0. INCLUDE STRUCTURE mdsu. DATA: END OF mdsux. DATA: BEGIN OF i_zqm OCCURS 0. INCLUDE STRUCTURE zqm_wlz_yz. DATA: END OF i_zqm. DATA:BEGIN OF itabb OCCURS 0, edmxcdm(30) TYPE c, edmxcsm(20) TYPE c, ztext(30) TYPE c, box TYPE char01, END OF itabb. * DATA: BEGIN OF t_zmal OCCURS 0, matnr LIKE mard-matnr, "物料号 tlines LIKE zmal-tlines, "物料描述 mtart LIKE mara-mtart, "物料类型 matkl LIKE mara-matkl, lgort LIKE mard-lgort, " 库存地点 bismt LIKE mara-bismt, "库格 meins LIKE mara-meins, "单位 eisbe LIKE marc-eisbe, "安全库存 labst LIKE mard-labst, "非限制库存 open_po LIKE mdez-mng01, "在途库存 bstmi LIKE marc-bstmi, "最小采购量 bstfe LIKE marc-bstfe, "固定采购量 bdmng LIKE resb-bdmng, labst1 LIKE mard-labst, werks LIKE mard-werks, END OF t_zmal. DATA:BEGIN OF z_mal OCCURS 0, matnr LIKE zpm_yz_mal_st-matnr, lgort LIKE zpm_yz_mal_st-lgort, werks LIKE zpm_yz_mal_st-werks, bismt LIKE zpm_yz_mal_st-bismt, END OF z_mal. DATA:t_zmal1 LIKE t_zmal OCCURS 0 WITH HEADER LINE. DATA t_vbap LIKE STANDARD TABLE OF t_zmal. DATA: v_vbap LIKE LINE OF t_vbap. DATA: zmatnr TYPE zpm_yz_mal-matnr, ztlines TYPE zpm_yz_mal-tlines, zkw TYPE mard-lgort, zkg TYPE zpm_yz_mal_st-bismt. DATA: ztlines1 TYPE zmal-tlines. DATA: ztlines2 TYPE zmal-tlines. DATA: ztlines3 TYPE zmal-tlines. DATA: zkg1 LIKE zpm_yz_mal_st-bismt. DATA: zkg2 LIKE zpm_yz_mal_st-bismt. DATA: zkg3 LIKE zpm_yz_mal_st-bismt. DATA:i1(1),i2(1),i3(1). DATA:fxk01(1). *----------------------------------------------------------------------* * CLASS LCL_APPLICATION DEFINITION *----------------------------------------------------------------------* **----------------------------------------------------------------------* CLASS lcl_application DEFINITION . PUBLIC SECTION . METHODS handle_selection_changed FOR EVENT selection_changed OF cl_gui_simple_tree IMPORTING node_key . ENDCLASS . "LCL_APPLICATION DEFINITION *----------------------------------------------------------------------* * CLASS LCL_APPLICATION IMPLEMENTATION *------------------------------------------ *----------------------------* * *----------------------------------------------------------------------* CLASS lcl_application IMPLEMENTATION . METHOD handle_selection_changed . READ TABLE node_table WITH KEY node_key = node_key INTO node1 . PERFORM get_data_grid USING node_key node1-relatkey node1-n_image. CALL METHOD grid->refresh_table_display. ENDMETHOD . "HANDLE_SELECTION_CHANGED ENDCLASS . "LCL_APPLICATION IMPLEMENTATION * SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001 . * PARAMETERS P_VKORG TYPE TVKOT-VKORG OBLIGATORY DEFAULT '2030'. * PARAMETERS P_VTWEG TYPE TVTWT-VTWEG OBLIGATORY DEFAULT '11'. * SELECTION-SCREEN END OF BLOCK A . START-OF-SELECTION . PERFORM get_data . CREATE OBJECT g_application. CALL SCREEN 0100 . *----------------------------------------------------------------------* * MODULE STATUS_0100 OUTPUT *----------------------------------------------------------------------* * *------------ *----------------------------------------------------------* MODULE status_0100 OUTPUT . SET PF-STATUS '0100'. IF tree_control IS INITIAL. PERFORM create_tree . ENDIF. ENDMODULE . "STATUS_0100 OUTPUT *----------------------------------------------------------------------* * MODULE USER_COMMAND_0100 INPUT *----------------------------------------------------------------------* * *----------------------------------------------------------------------* MODULE user_command_0100 INPUT . save_ok = ok_code . CLEAR ok_code . CASE save_ok. WHEN 'BACK'. SET SCREEN 0. * CLEAR ITABB. * FREE ITABB. WHEN 'EXIT'. LEAVE PROGRAM. WHEN OTHERS. ENDCASE. ENDMODULE . "USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------**& FORM *CREATE_TREE *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* * --> P1 TEXT * <-- P2 TEXT *----------------------------------------------------------------------* FORM create_tree . DATA events TYPE cntl_simple_events . DATA event1 TYPE cntl_simple_event . DATA num(1). DATA num1 LIKE zqm_wlz_yz-num1 . DATA num2 LIKE zqm_wlz_yz-num2 . DATA num3 LIKE zqm_wlz_yz-num3 . DATA matkl LIKE zqm_wlz_yz-matkl . DATA l_txt LIKE zqm_wlz_yz-txt1. DATA l_txt1 LIKE zqm_wlz_yz-txt1. DATA l_txt2 LIKE zqm_wlz_yz-txt2 . DATA l_txt3 LIKE zqm_wlz_yz-txt3 . DATA str1(255) . CREATE OBJECT custom_container EXPORTING container_name = 'TREE'. CREATE OBJECT tree_control EXPORTING parent = custom_container node_selection_mode = cl_gui_simple_tree=>node_sel_mode_single. CREATE OBJECT gcontainer EXPORTING container_name = 'GCONTAINER'. CREATE OBJECT grid EXPORTING i_parent = gcontainer. PERFORM frm_write_data. gs_layout-grid_title = '物料显示' . * GS_LAYOUT-CWIDTH_OPT = 'X' . gs_layout-zebra = 'X' . * CONCATENATE P_VKORG P_VTWEG INTO NODE1-NODE_KEY . * NODE1-RELATKEY = P_VKORG . PERFORM get_data_grid USING node1-node_key node1-relatkey node1-n_image . * CALL METHOD grid->set_table_for_first_display EXPORTING is_layout = gs_layout CHANGING it_fieldcatalog = gt_fieldcat it_outtab = t_vbap. LOOP AT t_vbak INTO w_vbak. CLEAR l_txt . CLEAR l_txt1 . CLEAR l_txt2 . CLEAR l_txt3 . l_txt = '物料分类'. *-----ECCUpgradeS4--------AB_ZACK--------20221028--------START * SELECT SINGLE * txt1 * INTO l_txt1 * FROM zqm_wlz_yz * WHERE num1 = w_vbak-num1 . * * SELECT SINGLE * txt2 * INTO l_txt2 * FROM zqm_wlz_yz * WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2. * SELECT SINGLE * txt3 * INTO l_txt3 * FROM zqm_wlz_yz * WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2 AND num3 = w_vbak-num3. SELECT txt1 INTO l_txt1 FROM zqm_wlz_yz UP TO 1 ROWS WHERE num1 = w_vbak-num1 ORDER BY PRIMARY KEY.ENDSELECT. SELECT txt2 INTO l_txt2 FROM zqm_wlz_yz UP TO 1 ROWS WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2 ORDER BY PRIMARY KEY. ENDSELECT. SELECT txt3 INTO l_txt3 FROM zqm_wlz_yz UP TO 1 ROWS WHERE num1 = w_vbak-num1 AND num2 = w_vbak-num2 AND num3 = w_vbak-num3 ORDER BY PRIMARY KEY. ENDSELECT. *-----ECCUpgradeS4--------ABA_ZACK--------20221028--------END "在创建根节点的同时需要创建下级以及次级子节点 IF num NE w_vbak-num . CLEAR node1 . node1-node_key = w_vbak-num . "FIRST LAYER CLEAR node1-relatkey . CLEAR node1-relatship . "SET THE ICON AS FOLDER node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . "CLEAR THE ICON OF THE NODE CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. * NODE1-TEXT = L_TXT1 . node1-text = l_txt . APPEND node1 TO node_table . ************************************************************** CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 INTO node1-node_key . node1-relatkey = w_vbak-num . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num1 l_txt1 INTO node1-text . APPEND node1 TO node_table . ************************************************************************** CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO node1-node_key . CONCATENATE w_vbak-num w_vbak-num1 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num2 l_txt2 INTO node1-text . APPEND node1 TO node_table . ************************************************************************ CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. "在创建次级节点的同时需要创建其字节点 IF ( num = w_vbak-num ) AND ( num1 <> w_vbak-num1 ). CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 INTO node1-node_key . node1-relatkey = w_vbak-num . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num1 l_txt1 INTO node1-text . APPEND node1 TO node_table . ************************************************************************** CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO node1-node_key . CONCATENATE w_vbak-num w_vbak-num1 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num2 l_txt2 INTO node1-text . APPEND node1 TO node_table . ************************************************************************ CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. "在创建次级节点的同时需要创建其字节点 IF ( num = w_vbak-num ) AND ( num1 = w_vbak-num1 ) AND num2 <> w_vbak-num2. CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO node1-node_key . CONCATENATE w_vbak-num w_vbak-num1 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . CLEAR node1-n_image . CLEAR node1-exp_image . node1-expander = 'X'. "DISPLAY THE NODE VTWEG * NODE1-TEXT = L_TXT2 . CONCATENATE w_vbak-num2 l_txt2 INTO node1-text . APPEND node1 TO node_table . ************************************************************************ CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. IF ( num = w_vbak-num ) AND ( num1 = w_vbak-num1 ) AND num2 = w_vbak-num2 AND num3 <> w_vbak-num3. CLEAR node1 . CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 w_vbak-num3 INTO node1-node_key. CONCATENATE w_vbak-num w_vbak-num1 w_vbak-num2 INTO str1 . node1-relatkey = str1 . node1-relatship = cl_gui_simple_tree=>relat_last_child . node1-hidden = '' . node1-disabled = '' . node1-isfolder = 'X' . node1-n_image = '@5B@' . node1-exp_image = '@5B@' . node1-expander = 'X'. * NODE1-TEXT = W_VBAK-NUM3 . CONCATENATE w_vbak-num3 l_txt3 INTO node1-text . APPEND node1 TO node_table . ENDIF. num = w_vbak-num. num1 = w_vbak-num1 . num2 = w_vbak-num2 . num3 = w_vbak-num3 . matkl = w_vbak-matkl . ENDLOOP. CALL METHOD tree_control->add_nodes EXPORTING table_structure_name = 'MTREESNODE' node_table = node_table EXCEPTIONS error_in_node_table = 1 failed = 2 dp_error = 3 table_structure_name_not_found = 4 OTHERS = 5. * EVENT1-EVENTID = CL_GUI_SIMPLE_TREE=>EVENTID_NODE_DOUBLE_CLICK . * EVENT1-APPL_EVENT = 'X' . * APPEND EVENT1 TO EVENTS . event1-eventid = 21 . event1-appl_event = 'X' . APPEND event1 TO events . CALL METHOD tree_control->set_registered_events EXPORTING events = events EXCEPTIONS cntl_error = 1 cntl_system_error = 2 illegal_event_combination = 3 OTHERS = 4. SET HANDLER g_application->handle_selection_changed FOR tree_control . ENDFORM. " CREATE_TREE *316 *&---------------------------------------------------------------------* *317 *& FORM GET_DATA *318 *&---------------------------------------------------------------------* *319 * TEXT *320 *----------------------------------------------------------------------* *321 * --> P1 TEXT *322 * <-- P2 TEXT *323 *----------------------------------------------------------------------* FORM get_data . SELECT matkl num1 num2 num3 INTO TABLE t_vbak FROM zqm_wlz_yz . IF sy-subrc = 0. LOOP AT t_vbak. t_vbak-num = '1'. MODIFY t_vbak. ENDLOOP. ENDIF. SORT t_vbak BY num matkl . ENDFORM. " GET_DATA *336 *&---------------------------------------------------------------------* *337 *& FORM GET_DATA_GRID *338 *&---------------------------------------------------------------------* *339 * TEXT *340 *----------------------------------------------------------------------* *341 * -->P_NODEKEY TEXT *342 *----------------------------------------------------------------------* FORM get_data_grid USING p_nodekey p_relatkey p_image. DATA: n1 LIKE zqm_wlz_yz-num1, n2 LIKE zqm_wlz_yz-num2, n3 LIKE zqm_wlz_yz-num3. DATA: l_len1 TYPE i. DATA: l_len2 TYPE i. DATA: l_len3 TYPE i. DATA: l_len11 TYPE i. DATA: l_len22 TYPE i. DATA:l1 LIKE node1-relatkey. DATA:l2 LIKE node1-node_key. DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE. CLEAR:zkg1,zkg2,zkg3,ztlines1,ztlines2,ztlines3. CLEAR: dynpfields, dynpfields[]. dynpfields-fieldname = 'ZKW'. "填入需要读值的字段名 APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'ZKW'. zkw = dynpfields-fieldvalue. "备注 ENDIF. CLEAR: dynpfields, dynpfields[]. dynpfields-fieldname = 'ZTLINES'. "填入需要读值的字段名 APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'ZTLINES'. ztlines = dynpfields-fieldvalue. "备注 ENDIF. IF p_nodekey = '1' AND p_relatkey = ''. p_nodekey = ''. IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' "AND MARA~MTART = 'ERSA' "and ( mard~lgort = 'WL01' or mard~lgort = 'MT01') AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' * AND MARA~MATKL <> '' AND MARA~MATNR = ZMATNR. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) AND mara~matkl <> ''. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. " SELECT MARA~MATNR " MARA~MTART " MARA~BISMT " MARA~MEINS " INTO CORRESPONDING FIELDS OF TABLE T_ZMAL " FROM MARC " INNER JOIN MARA ON MARA~MATNR = MARC~MATNR " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL " WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' " AND MARA~MATKL <> '' . ENDIF. ELSEIF p_relatkey <> ''. l_len11 = strlen( p_relatkey ) . l_len11 = l_len11 - 1. IF l_len11 <= 0. l1 = ''. ELSE. l1 = p_relatkey+1(l_len11). ENDIF. p_relatkey = l1. l_len22 = strlen( p_nodekey ). l_len22 = l_len22 - 1. IF l_len22 <= 0. l2 = ''. ELSE. l2 = p_nodekey+1(l_len22). ENDIF. p_nodekey = l2. ENDIF. IF p_nodekey = '' AND p_relatkey = '' AND p_image = ''. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '' * AND MARA~MATKL <> ''. ELSEIF p_relatkey IS INITIAL AND p_nodekey <> ''. IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~NUM1 = P_NODEKEY AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_nodekey. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' * AND MARA~MATNR = ZMATNR * AND ZQM_WLZ_YZ~NUM1 = P_NODEKEY * AND MARA~MATKL <> ''. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~NUM1 = P_NODEKEY AND mara~matkl <> '' . LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_nodekey. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * ZQM_WLZ_YZ~NUM1 = P_NODEKEY * AND MARA~MATKL <> ''. ENDIF. ELSE. IF p_image IS INITIAL. l_len1 = strlen( p_nodekey ). l_len2 = strlen( p_relatkey ). l_len3 = l_len1 - l_len2. n1 = p_nodekey+l_len2(l_len3). IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~NUM1 = P_RELATKEY " AND ZQM_WLZ_YZ~NUM2 = N1 AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_relatkey num2 = n1. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * MARA~MATNR = ZMATNR AND * ZQM_WLZ_YZ~NUM1 = P_RELATKEY * AND ZQM_WLZ_YZ~NUM2 = N1 * AND MARA~MATKL <> ''. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) * AND ZQM_WLZ_YZ~NUM1 = P_RELATKEY * AND ZQM_WLZ_YZ~NUM2 = N1 AND mara~matkl <> ''. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl num1 = p_relatkey num2 = n1. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * ZQM_WLZ_YZ~NUM1 = P_RELATKEY * AND ZQM_WLZ_YZ~NUM2 = N1 * AND MARA~MATKL <> ''. ENDIF. ELSE. IF zmatnr <> ''. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01' ) " AND ZQM_WLZ_YZ~MATKL = P_NODEKEY AND mara~matkl <> '' AND mard~matnr = zmatnr. LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl . IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. IF t_zmal-matkl <> p_nodekey. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * MARA~MATNR = ZMATNR AND * ZQM_WLZ_YZ~MATKL = P_NODEKEY * AND MARA~MATKL <> ''. ELSE. SELECT mard~matnr "物料号 mara~mtart "物料类型 mard~lgort " 库存地点 mara~meins "单位 mara~matkl "物料组 marc~eisbe "安全库存 marc~bstmi "最小采购量 marc~bstfe "固定采购量 mard~labst "非限制库存 mara~bismt "库格 mard~werks INTO CORRESPONDING FIELDS OF TABLE t_zmal FROM mard INNER JOIN marc ON marc~matnr = mard~matnr AND marc~werks = mard~werks INNER JOIN mara ON mara~matnr = mard~matnr " INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL WHERE ( mard~werks = '1011' OR ( mard~werks = '1010' AND mard~lgort = 'EL01' ) ) AND mara~mstae <> '01' AND mara~mtart = 'ERSA' " and ( mard~lgort = 'WL01' or mard~lgort = 'MT01') " AND ZQM_WLZ_YZ~MATKL = P_NODEKEY AND mara~matkl <> '' . LOOP AT t_zmal. IF t_zmal-matkl(1) = 'S' . t_zmal-matkl+0(1) = '0'. MODIFY t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. READ TABLE t_vbak WITH KEY matkl = t_zmal-matkl. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. LOOP AT t_zmal. IF t_zmal-matkl <> p_nodekey. DELETE t_zmal. ENDIF. ENDLOOP. * SELECT MARA~MATNR * MARA~MTART * MARA~BISMT * MARA~MEINS * * INTO CORRESPONDING FIELDS OF TABLE T_ZMAL * FROM MARC * INNER JOIN MARA ON MARA~MATNR = MARC~MATNR * INNER JOIN ZQM_WLZ_YZ ON ZQM_WLZ_YZ~MATKL = MARA~MATKL * WHERE MARC~WERKS = '7010' AND MARA~MSTAE <> '01' AND MARA~MTART = 'ERSA' AND * ZQM_WLZ_YZ~MATKL = P_NODEKEY * AND MARA~MATKL <> ''. ENDIF. ENDIF. ENDIF. IF zkw <> ''. LOOP AT t_zmal. IF t_zmal-lgort <> zkw. DELETE t_zmal. ENDIF. ENDLOOP. ENDIF. *LOOP AT T_ZMAL. * *SELECT MATNR * LGORT * WERKS * BISMT * INTO CORRESPONDING FIELDS OF TABLE Z_MAL * FROM ZPM_YZ_MAL_ST * WHERE WERKS = '1010' AND MATNR = T_ZMAL-MATNR AND LGORT = T_ZMAL-LGORT. * IF SY-SUBRC = 0. * LOOP AT Z_MAL . * IF T_ZMAL-BISMT = '' . * CONCATENATE '/' Z_MAL-BISMT INTO T_ZMAL-BISMT. * ELSE. * CONCATENATE T_ZMAL-BISMT '/' Z_MAL-BISMT INTO T_ZMAL-BISMT. * ENDIF. * * ENDLOOP. * MODIFY T_ZMAL. * ENDIF. * *ENDLOOP. IF zkg <> ''. LOOP AT t_zmal. SEARCH t_zmal-bismt FOR zkg. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDLOOP. ENDIF. * IF SY-SUBRC <> 0. * MESSAGE '此物料组没有对应的物料!' TYPE 'E'. * EXIT. * ENDIF. IF ztlines <> ''. SPLIT ztlines AT '*' INTO ztlines1 ztlines2 ztlines3. ENDIF. LOOP AT t_zmal. SELECT SINGLE tlines INTO t_zmal-tlines FROM zmal WHERE matnr = t_zmal-matnr. * AND TLINES IN S_TLINES. * SELECT SINGLE EISBE BSTMI BSTFE * INTO (T_ZMAL-EISBE,T_ZMAL-BSTMI,T_ZMAL-BSTFE) * FROM MARC * WHERE MATNR = T_ZMAL-MATNR * AND WERKS = '7010'. * * SELECT SINGLE LABST * INTO T_ZMAL-LABST * FROM MARD * WHERE MATNR = T_ZMAL-MATNR * AND WERKS = '7010' * AND ( LGORT = 'WL61' OR LGORT = 'MT61' OR LGORT = 'EL61' OR LGORT ='WL65' OR LGORT = 'WL66'). MODIFY t_zmal. ENDLOOP. i1 = 0.i2 = 0.i3 = 0. IF ztlines <> ''. LOOP AT t_zmal. IF ztlines1 <> ''. SEARCH t_zmal-tlines FOR ztlines1. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDIF. IF ztlines2 <> ''. SEARCH t_zmal-tlines FOR ztlines2. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDIF. IF ztlines3 <> ''. SEARCH t_zmal-tlines FOR ztlines3. IF sy-subrc <> 0. DELETE t_zmal. ENDIF. ENDIF. ENDLOOP. ENDIF. CLEAR t_zmal1.REFRESH t_zmal1. *LOOP AT T_ZMAL. *SELECT MATNR BISMT *INTO CORRESPONDING FIELDS OF TABLE Z_MAL *FROM ZPM_YZ_MAL *WHERE MATNR = T_ZMAL-MATNR. *IF SY-SUBRC = 0. *LOOP AT Z_MAL. *MOVE T_ZMAL TO T_ZMAL1. *T_ZMAL1-BISMT = Z_MAL-BISMT. *APPEND T_ZMAL1. *ENDLOOP. *ELSE. *MOVE T_ZMAL TO T_ZMAL1. *APPEND T_ZMAL1. *ENDIF. *ENDLOOP. *CLEAR T_ZMAL.REFRESH T_ZMAL. *LOOP AT T_ZMAL1. *MOVE T_ZMAL1 TO T_ZMAL. *APPEND T_ZMAL. *ENDLOOP. * *IF ZKG <> ''. *SPLIT ZKW AT '*' INTO ZKG1 ZKG2 ZKG3. *ENDIF. *LOOP AT T_ZMAL. *IF ZKW1 <> ''. *SEARCH T_ZMAL-BISMT FOR ZKW1. * IF SY-SUBRC <> 0. * DELETE T_ZMAL. *ENDLOOP.* ENDIF. *ENDIF. *IF ZKW2 <> ''. *SEARCH T_ZMAL-BISMT FOR ZKW2. * IF SY-SUBRC <> 0. * DELETE T_ZMAL. * ENDIF. *ENDIF. *IF ZKW3 <> ''. *SEARCH T_ZMAL-BISMT FOR ZKW3. * IF SY-SUBRC <> 0. * DELETE T_ZMAL. * ENDIF. *ENDIF. LOOP AT t_zmal . * PERFORM GET_MD04_DATA USING T_ZMAL-MATNR T_ZMAL-WERKS. * MOVE-CORRESPONDING ITAB0 TO I_OUT. * LOOP AT MDEZX WHERE PLAAB = '02'. * EXCESS = EXCESS + MDEZX-MNG01. "可用库存 * IF MDEZX-DELB0 = 'STOCK' OR MDEZX-DELKZ = 'QM'. * STOCK = STOCK + MDEZX-MNG01. "STOCK * ENDIF. * IF MDEZX-PLUMI = '-'. "DEMAND * TOTAL_DEMAND = TOTAL_DEMAND + MDEZX-MNG01 * -1. * ELSE. * IF MDEZX-DELKZ = 'LA' "SHIPPING NOTIFICATION * OR MDEZX-DELKZ = 'LE' "NORMAL PO * OR MDEZX-DELKZ = 'BE'. "SA SCHEDULE LINE * OPEN_PO = OPEN_PO + MDEZX-MNG01. "OPEN PO * ENDIF. * ENDIF * PERFORM GET_MD04_DATA USING T_ZMAL-MATNR '7010'. * DATA:OPEN_PO LIKE MDEZ-MNG01. * LOOP AT MDEZX WHERE PLAAB = '02'. * IF MDEZX-DELKZ = 'BA' "NORMAL PO * OR MDEZX-DELKZ = 'BE'. "SA SCHEDULE LINE * OPEN_PO = OPEN_PO + MDEZX-MNG01. "OPEN PO * ENDIF. * ENDLOOP. * MOVE: OPEN_PO TO T_ZMAL-OPEN_PO . * CLEAR: OPEN_PO. SELECT SINGLE labst INTO t_zmal-open_po FROM mard WHERE matnr = t_zmal-matnr AND lgort = t_zmal-bismt AND werks = t_zmal-werks. MODIFY t_zmal. ENDLOOP. DATA:zbismt LIKE zpm_cs_mal_st-bismt. LOOP AT t_zmal . CLEAR:zbismt. *-----ECCUpgradeS4--------AB_ZACK--------20221028--------START * SELECT SINGLE bismt INTO zbismt FROM zpm_cs_mal_st WHERE matnr = t_zmal-matnr . SELECT bismt INTO zbismt FROM zpm_cs_mal_st UP TO 1 ROWS WHERE matnr = t_zmal-matnr ORDER BY PRIMARY KEY.ENDSELECT. *-----ECCUpgradeS4--------ABA_ZACK--------20221028--------END IF sy-subrc = 0 . t_zmal-bismt = zbismt. MODIFY t_zmal. ENDIF. ENDLOOP. PERFORM wlc_labst."2020.6.18 可用库存修改(去除预留) PERFORM wlc_eisbe."2021.3.25 安全库存筛选 REFRESH t_vbap. LOOP AT t_zmal . APPEND t_zmal TO t_vbap. ENDLOOP. * PERFORM FRM_WRITE_DATA. ENDFORM. " GET_DATA_GRID FORM frm_write_data. CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'MATNR' . gw_fieldcat-scrtext_l = '物料号' . gw_fieldcat-outputlen = 18. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'MEINS' . gw_fieldcat-scrtext_l = '单位' . gw_fieldcat-outputlen = 4. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'TLINES' . gw_fieldcat-scrtext_l = '字段长文本' . gw_fieldcat-outputlen = 50. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'LGORT' . gw_fieldcat-scrtext_l = '库位' . gw_fieldcat-outputlen = 5. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BISMT' . gw_fieldcat-scrtext_l = '库格' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'MTART' . gw_fieldcat-scrtext_l = '物料类型' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'LABST' . gw_fieldcat-scrtext_l = '库存余量' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BDMNG' . gw_fieldcat-scrtext_l = '预留数量' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'LABST1' . gw_fieldcat-scrtext_l = '实际可用库存' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'EISBE' . gw_fieldcat-scrtext_l = '安全库存' . gw_fieldcat-outputlen = 8. APPEND gw_fieldcat TO gt_fieldcat . * CLEAR GW_FIELDCAT . * GW_FIELDCAT-FIELDNAME = 'OPEN_PO' . * GW_FIELDCAT-SCRTEXT_L = '在途库存' . * GW_FIELDCAT-OUTPUTLEN = 8. * APPEND GW_FIELDCAT TO GT_FIELDCAT . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BSTMI' . gw_fieldcat-scrtext_l = '最小采购量' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . CLEAR gw_fieldcat . gw_fieldcat-fieldname = 'BSTFE' . gw_fieldcat-scrtext_l = '固定采购量' . gw_fieldcat-outputlen = 10. APPEND gw_fieldcat TO gt_fieldcat . * **定义列信息 *WA_ALV_FILED-COL_POS = 10. *WA_ALV_FILED-FIELDNAME = 'BSTFE'. " 对应的内表中的字段名称 *WA_ALV_FILED-SELTEXT_M = '固定采购量'. "ALV中显示的标题 *WA_ALV_FILED-OUTPUTLEN = 10. " 列的显示宽度,可以不设置 *APPEND WA_ALV_FILED TO WA_ALV_FILEDCAT. *CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' * EXPORTING * IT_FIELDCAT = WA_ALV_FILEDCAT * TABLES * T_OUTTAB = T_ZMAL. ENDFORM. FORM get_md04_data USING p_matnr p_werks. CLEAR: mdpsx,mdezx,mdsux. CLEAR: mdpsx[],mdezx[],mdsux[]. CALL FUNCTION 'MD_STOCK_REQUIREMENTS_LIST_API' EXPORTING matnr = p_matnr werks = p_werks TABLES mdpsx = mdpsx mdezx = mdezx mdsux = mdsux EXCEPTIONS material_plant_not_found = 1 plant_not_found = 2. ENDFORM. " GET_MD04_DATA *&---------------------------------------------------------------------* *& MODULE ZMATNR INPUT *&---------------------------------------------------------------------* * TEXT *----------------------------------------------------------------------* MODULE zmatnr INPUT. DATA: BEGIN OF i_mara OCCURS 0, *-----ECCUpgradeS4--------AB_ZACK--------20221027--------START * matnr type char22, matnr TYPE matnr, *-----ECCUpgradeS4--------AB_ZACK--------20221027--------END END OF i_mara. SELECT mara~matnr INTO CORRESPONDING FIELDS OF TABLE i_mara FROM marc INNER JOIN mara ON mara~matnr = marc~matnr WHERE marc~werks = '7010'. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'MATNR' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZMATNR' value_org = 'S' TABLES value_tab = i_mara EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. ENDMODULE. " ZMATNR INPUT MODULE zkw INPUT. DATA: BEGIN OF i_zkw OCCURS 0, zkw TYPE char6, lgobe TYPE char16, END OF i_zkw. CLEAR i_zkw.REFRESH i_zkw. i_zkw-zkw = 'WL61'. APPEND i_zkw. i_zkw-zkw = 'MT61'. APPEND i_zkw. i_zkw-zkw = 'EL61'. APPEND i_zkw. i_zkw-zkw = 'WL65'. APPEND i_zkw. i_zkw-zkw = 'WL66'. APPEND i_zkw. LOOP AT i_zkw. SELECT SINGLE lgobe INTO i_zkw-lgobe FROM t001l WHERE werks = '7010' AND lgort = i_zkw-zkw. MODIFY i_zkw. ENDLOOP. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'ZKW' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZKW' value_org = 'S' TABLES value_tab = i_zkw EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. ENDMODULE. " ZMATNR INPUT MODULE zkg INPUT. DATA: BEGIN OF i_zkg OCCURS 0, bismt TYPE char50, END OF i_zkg. DATA:zkw1(6). DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE. CLEAR: dynpfields, dynpfields[],zkw1.CLEAR i_zkg.REFRESH i_zkg. dynpfields-fieldname = 'ZKW'. "填入需要读值的字段名 APPEND dynpfields. CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING dyname = sy-repid dynumb = sy-dynnr translate_to_upper = 'X' TABLES dynpfields = dynpfields EXCEPTIONS OTHERS = 9. IF sy-subrc = 0. READ TABLE dynpfields WITH KEY fieldname = 'ZKW'. zkw1 = dynpfields-fieldvalue. "备注 ENDIF. IF zkw1 <> ''. SELECT bismt INTO CORRESPONDING FIELDS OF TABLE i_zkg FROM zpm_yz_mal_st WHERE werks = '7010' AND lgort = zkw1. ELSE. SELECT bismt INTO CORRESPONDING FIELDS OF TABLE i_zkg FROM zpm_yz_mal_st WHERE werks = '7010'. ENDIF. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'BISMT' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZKG' value_org = 'S' TABLES value_tab = i_zkg EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. ENDMODULE. " ZMATNR INPUT *&---------------------------------------------------------------------* *& Form WLC_LABST *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM wlc_labst . DATA:bdmng LIKE resb-bdmng, enmng LIKE resb-enmng. DATA:shkzg LIKE resb-shkzg. LOOP AT t_zmal. SELECT bdmng enmng shkzg INTO ( bdmng,enmng,shkzg ) FROM resb WHERE xloek = '' AND kzear = '' AND matnr = t_zmal-matnr AND werks = t_zmal-werks AND lgort = t_zmal-lgort. IF shkzg = 'H'. t_zmal-bdmng = t_zmal-bdmng + bdmng - enmng. ELSE. t_zmal-bdmng = t_zmal-bdmng - bdmng + enmng. ENDIF. CLEAR:bdmng,enmng,shkzg. ENDSELECT. t_zmal-labst1 = t_zmal-labst - t_zmal-bdmng. MODIFY t_zmal. ENDLOOP. ENDFORM. *&---------------------------------------------------------------------* *& Form WLC_EISBE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM wlc_eisbe . IF fxk01 <> ''. LOOP AT t_zmal. IF t_zmal-labst1 >= t_zmal-eisbe. DELETE t_zmal. ENDIF. ENDLOOP. ENDIF. ENDFORM.
最新发布
08-09
### 如何对SAP MARA表进行增强 #### 增强MARA表的目的 为了满足特定业务需求,在不修改标准SAP对象的情况下扩展其功能,通常会采用增强技术。对于物料管理中的核心数据结构——MARA表来说,增强操作允许企业自定义字段或逻辑而不影响原有系统的稳定性[^1]。 #### 使用Append Structure方法增强MARA表 一种常见的做法是在MARA表上附加额外的数据存储区域,即创建一个追加结构(Append Structure),这不会改变原表格的设计却能增加新的属性描述。具体实现步骤如下: - **设计阶段** - 定义新字段及其特性; - 创建Z开头的技术名称作为追加结构名; - **配置环节** - 进入SE11事务码打开Data Dictionary视图; - 输入`MARA`并点击Enhancement按钮进入增强界面; - 添加之前准备好的Append Structure到指定位置; ```sql -- SQL语句仅用于说明目的,并非真实执行代码 ALTER TABLE mara ADD (zmyfield TYPE string); ``` - **验证过程** - 编写简单的ABAP程序读取MARA记录查看新增列是否存在有效值; #### 利用User Exit方式定制化处理 除了直接向物理数据库层面做改动外,还可以利用用户出口(User Exits)来间接作用于MARA表上的某些行为模式。比如当保存物料主数据时触发特殊计算或是调用外部接口同步信息等场景下非常适用此法[^2]。 #### 注意事项 无论采取哪种方式进行增强都应充分考虑对企业现有流程的影响程度,确保任何变更都不会破坏已有的应用程序逻辑和服务质量。同时也要遵循良好的编码实践原则,保持代码清晰易懂便于后期维护升级工作开展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值