批量对比系统间开发对象差异

您所在的位置:网站首页 displaydirectory 批量对比系统间开发对象差异

批量对比系统间开发对象差异

2024-07-16 10:34:39| 来源: 网络整理| 查看: 265

前言:在工作中有时候会遇到需要批量对比DEV和QAS/PRD甚至影子系统、预生产系统的开发对象是否相同;各个系统当前请求的版本各自是啥;函数组内的各个函数模块在两个系统间是否版本是一样的等等。还有系统迁移的时候,如何批量比对迁移过去的程序是否跟原始系统有差异。还有些安全性要求比较高的系统,PRD是独立的系统,STMS的传输日志看不到是否已经传输到PRD,也给版本管理带来一些麻烦。本程序开发的初衷就是为了解决以上这些问题。

功能:批量对比两个系统间程序、函数、CLASS、表、视图、数据元素、域、搜索帮助、锁等等开发对象的差别。两个系统可以是在同一个传输域,也可以是能用RFC连接在一起的两个完全不相关的S4/ECC系统。

选择界面:b4079fa84db0177e73867fc045f89960.png

数据源可以选择指定的程序、DDIC内容、函数组等,也可以指定包、传输请求,比较包/请求内里面所有的内容。可以通过对象类型、作者做数据限制。对比完毕的结果,可以选择需要显示哪些内容。

运行结果显示界面:a1dd3a3d59ed7aac077514659413e190.png

在这个界面上可以看到有哪些对象两个系统之间是相同的,哪些是不同的,甚至在远程系统尚不存在。还可以看到本地系统的最新请求、次新请求,以及远程系统的当前请求号,然后根据这几个请求号判断远程系统的请求号和本地系统请求号是否漏传,如果远程系统不是最新请求也不是次新请求,就可能会有漏传请求的风险。

下面是双击ALV的列后,跳转到的一些有用的信息:

对象内容:

0684aa563c07ef00143b7136ba0d52bd.png

创建人账号信息:363a95f0ccffabeacc7996178e8c88bb.png

本地请求清单:84c159c45fa1bd4a00c89b613dac61f4.png

请求内容:c72276190ae6c29e0f88413cc7af7074.png

远程请求信息:6b52e43f0e98df5d7fbf75082f31ee97.png

系统间版本对比:5be2b8bfdec9a8c3c7551b4664f39472.png

fbb7dadddc7ba7b83e9e08a6a330baf6.png

源码如下(写得比较用心,值得仔细看一遍):

*&---------------------------------------------------------------------* *& Report ZVERCHECK *&---------------------------------------------------------------------* *& Baitianzhen *& 系统间批量比对开发对象内容 *&---------------------------------------------------------------------* REPORT zvercheck NO STANDARD PAGE HEADING. TABLES: sci_dynp,versobj_alias. DATA: gt_fldct TYPE lvc_t_fcat, gs_slayt TYPE lvc_s_layo. DATA: gt_syst TYPE tmscsyslst_typ, gs_syst TYPE tmscsyslst, gt_vrmv TYPE vrm_values, gs_vrmv TYPE vrm_value. DATA: gt_ko100 TYPE TABLE OF ko100, gs_ko100 TYPE ko100. DATA: BEGIN OF gs_out, pgmid TYPE e071-pgmid, object TYPE e071-object, obj_name TYPE e071-obj_name, devclass TYPE tadir-devclass, author TYPE tadir-author, objtxt TYPE char40, result TYPE char20, tract TYPE trkorr, trloc TYPE trkorr, trpre TYPE trkorr, trrem TYPE trkorr, trsta TYPE char10, END OF gs_out. DATA: gt_out LIKE TABLE OF gs_out. DATA: gr_ext TYPE RANGE OF sci_dynp-i_obj_t. "排除类型 SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE btxt1. SELECT-OPTIONS: s_prog FOR sci_dynp-o_repo MEMORY ID prog, s_fugr FOR sci_dynp-o_fugr MEMORY ID fugr, s_clas FOR sci_dynp-o_clas MEMORY ID clas, s_ddic FOR sci_dynp-o_ddic MEMORY ID ddic. SELECT-OPTIONS: s_pckg FOR sci_dynp-f_devc MEMORY ID pckg, s_tran FOR sci_dynp-o_order MEMORY ID tran. SELECTION-SCREEN END OF BLOCK b01. SELECTION-SCREEN BEGIN OF BLOCK b02 WITH FRAME TITLE btxt2. SELECT-OPTIONS: s_user FOR sci_dynp-f_resp, s_otyp FOR sci_dynp-i_obj_t. SELECTION-SCREEN END OF BLOCK b02. SELECTION-SCREEN BEGIN OF BLOCK b03 WITH FRAME TITLE btxt3. PARAMETERS: p_dest TYPE versdest MEMORY ID rfc, p_syst TYPE verssysnam AS LISTBOX VISIBLE LENGTH 20 MEMORY ID verssysnam. SELECTION-SCREEN END OF BLOCK b03. SELECTION-SCREEN BEGIN OF BLOCK b04 WITH FRAME TITLE btxt4. PARAMETERS: p_same AS CHECKBOX DEFAULT 'X', p_diff AS CHECKBOX DEFAULT 'X', p_noex AS CHECKBOX DEFAULT 'X', p_unsu AS CHECKBOX DEFAULT 'X'. SELECTION-SCREEN END OF BLOCK b04. INITIALIZATION. APPEND 'EEQAVAS' TO gr_ext. APPEND 'EEQTOBJ' TO gr_ext. APPEND 'EEQSTOB' TO gr_ext. CALL FUNCTION 'TRINT_OBJECT_TABLE' EXPORTING iv_complete = 'X' TABLES tt_types_out = gt_ko100. SORT gt_ko100 BY object.   CALL FUNCTION 'TMS_CI_GET_SYSTEMLIST' EXPORTING iv_only_active = 'X' TABLES tt_syslst = gt_syst. LOOP AT gt_syst INTO gs_syst. gs_vrmv-key = gs_syst-sysnam. gs_vrmv-text = gs_syst-systxt. APPEND gs_vrmv TO gt_vrmv. ENDLOOP. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = 'P_SYST' values = gt_vrmv. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_prog-low. CALL FUNCTION 'RS_HELP_HANDLING' EXPORTING dynpfield = 'S_PROG-LOW' dynpname = sy-dynnr object = 'PR' progname = sy-repid. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_fugr-low. CALL FUNCTION 'RS_HELP_HANDLING' EXPORTING dynpfield = 'S_FUGR-LOW' dynpname = sy-dynnr object = 'FG' progname = sy-repid. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_clas-low. CALL FUNCTION 'REPOSITORY_INFO_SYSTEM_F4' EXPORTING object_type = 'CLIF' IMPORTING object_name_selected = s_clas-low EXCEPTIONS OTHERS = 1. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_ddic-low. CALL FUNCTION 'F4_DD_ALLTYPES' IMPORTING result = s_ddic-low. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_tran-low. CALL FUNCTION 'TR_F4_REQUESTS' EXPORTING iv_trfunctions = 'K' iv_trstatus = 'RDL' IMPORTING ev_selected_request = s_tran-low. AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_otyp-low. CALL FUNCTION 'TRINT_PGMID_OBJECT_SELECT_F4' IMPORTING we_object = s_otyp-low. AT SELECTION-SCREEN. IF sy-ucomm = 'ONLI'. IF p_dest = '' AND p_syst = ''. MESSAGE e000(oo) WITH 'RFC目标和目标系统至少输入一个'. ELSEIF p_dest = ''. READ TABLE gt_syst INTO gs_syst WITH KEY sysnam = p_syst. CONCATENATE 'TMSADM@' gs_syst-sysnam '.' gs_syst-domnam INTO p_dest. ENDIF. ENDIF. AT SELECTION-SCREEN OUTPUT. btxt1 = '数据来源'. btxt2 = '数据限制'. btxt3 = '远程系统'. btxt4 = '结果显示包括'. %_p_syst_%_app_%-text = '目标系统'. %_p_dest_%_app_%-text = 'RFC目标(优先)'. %_s_clas_%_app_%-text = '类/接口'. %_s_ddic_%_app_%-text = '表/视图/数据类型/域/搜索帮助/锁'. %_s_fugr_%_app_%-text = '函数组'. %_s_prog_%_app_%-text = '程序(包含Z开头INCLUDE)'. %_s_tran_%_app_%-text = '请求/任务号'. %_s_pckg_%_app_%-text = '包/开发类'. %_s_user_%_app_%-text = '创建者'. %_s_otyp_%_app_%-text = '对象类型'. %_p_same_%_app_%-text = '本地和远程相同'. %_p_diff_%_app_%-text = '本地和远程不同'. %_p_noex_%_app_%-text = '对象在远程不存在'. %_p_unsu_%_app_%-text = '不支持对比的对象'. START-OF-SELECTION. PERFORM get_objects. PERFORM expand_objects. PERFORM check_objects. PERFORM outdata. *&---------------------------------------------------------------------* *& get_objects *&---------------------------------------------------------------------* FORM get_objects. DATA ls_tadir TYPE tadir. DATA lt_progs LIKE gt_out. DATA ls_progs LIKE gs_out. DATA lt_incl TYPE TABLE OF sobj_name. DATA lt_e070 TYPE TABLE OF e070. DATA lt_e071 TYPE TABLE OF e071. DATA ls_e071 TYPE e071. IF s_prog[] IS NOT INITIAL. SELECT pgmid object obj_name devclass author INTO CORRESPONDING FIELDS OF TABLE lt_progs FROM tadir INNER JOIN trdir ON obj_name = trdir~name WHERE pgmid EQ 'R3TR' AND object EQ 'PROG' AND obj_name IN s_prog AND author IN s_user AND devclass NE '$TMP'. LOOP AT lt_progs INTO ls_progs. CLEAR lt_incl. CALL FUNCTION 'GET_INCLUDETAB' EXPORTING progname = ls_progs-obj_name TABLES incltab = lt_incl. CHECK lt_incl[] IS NOT INITIAL. SELECT pgmid object obj_name devclass author INTO CORRESPONDING FIELDS OF ls_progs FROM tadir INNER JOIN trdir ON obj_name = trdir~name FOR ALL ENTRIES IN lt_incl WHERE pgmid EQ 'R3TR' AND object EQ 'PROG' AND obj_name EQ lt_incl-table_line AND obj_name LIKE 'Z%' AND devclass NE '$TMP'. COLLECT ls_progs INTO lt_progs. ENDSELECT. ENDLOOP. APPEND LINES OF lt_progs TO gt_out. ENDIF. IF s_fugr[] IS NOT INITIAL. SELECT pgmid object obj_name devclass author APPENDING CORRESPONDING FIELDS OF TABLE gt_out FROM tadir WHERE pgmid EQ 'R3TR' AND object IN ('FUGR','FUGS','FUGX') AND obj_name IN s_fugr AND author IN s_user AND devclass NE '$TMP'. ENDIF. IF s_clas[] IS NOT INITIAL. SELECT pgmid object obj_name devclass author APPENDING CORRESPONDING FIELDS OF TABLE gt_out FROM tadir WHERE pgmid EQ 'R3TR' AND object IN ('CLAS','INTF') AND obj_name IN s_clas AND author IN s_user AND devclass NE '$TMP'. ENDIF. IF s_ddic[] IS NOT INITIAL. SELECT pgmid object obj_name devclass author APPENDING CORRESPONDING FIELDS OF TABLE gt_out FROM tadir WHERE pgmid EQ 'R3TR' AND object IN ('DTEL','TABL','VIEW','SQLT','DOMA', 'SHLP','ENQU','DDLS','TTYP') AND obj_name IN s_ddic AND author IN s_user AND devclass NE '$TMP'. ENDIF. IF s_tran[] IS NOT INITIAL. SELECT * INTO TABLE lt_e070 FROM e070 WHERE strkorr IN s_tran OR trkorr IN s_tran. IF sy-subrc = 0. SELECT pgmid object obj_name INTO CORRESPONDING FIELDS OF TABLE lt_e071 FROM e071 FOR ALL ENTRIES IN lt_e070 WHERE trkorr EQ lt_e070-trkorr AND pgmid IN ('LIMU','R3TR') AND object IN gr_ext. LOOP AT lt_e071 INTO ls_e071. CALL FUNCTION 'TR_CHECK_TYPE' EXPORTING wi_e071 = ls_e071 IMPORTING we_tadir = ls_tadir. SELECT SINGLE * INTO ls_tadir FROM tadir WHERE pgmid EQ ls_tadir-pgmid AND object EQ ls_tadir-object AND obj_name EQ ls_tadir-obj_name AND author IN s_user AND object IN gr_ext AND devclass NE '$TMP'. CHECK sy-subrc = 0. gs_out-pgmid = ls_e071-pgmid. gs_out-object = ls_e071-object. gs_out-obj_name = ls_e071-obj_name. gs_out-devclass = ls_tadir-devclass. gs_out-author = ls_tadir-author. APPEND gs_out TO gt_out. ENDLOOP. ENDIF. ENDIF. IF s_pckg[] IS NOT INITIAL. SELECT pgmid object obj_name devclass author APPENDING CORRESPONDING FIELDS OF TABLE gt_out FROM tadir WHERE devclass IN s_pckg AND author IN s_user AND object IN gr_ext AND devclass NE '$TMP'. ENDIF. IF gt_out IS INITIAL. MESSAGE s000(oo) WITH '无数据'. ENDIF. ENDFORM. "get_objects *&---------------------------------------------------------------------* *& expand_objects *&---------------------------------------------------------------------* FORM expand_objects. DATA: ls_e071 TYPE e071, ls_object LIKE gs_out, lt_object LIKE gt_out, ls_ver_obj TYPE svrs2_versionable_object, ls_vrso TYPE vrso, lt_vrso TYPE STANDARD TABLE OF vrso. LOOP AT gt_out INTO gs_out. ls_object-author = gs_out-author. ls_object-devclass = gs_out-devclass. CLEAR ls_e071. ls_e071-pgmid = gs_out-pgmid. ls_e071-object = gs_out-object. ls_e071-obj_name = gs_out-obj_name. CALL FUNCTION 'SVRS_RESOLVE_E071_OBJ' EXPORTING e071_obj = ls_e071 TABLES obj_tab = lt_vrso EXCEPTIONS not_versionable = 1. IF sy-subrc = 0. LOOP AT lt_vrso INTO ls_vrso WHERE objtype NE 'DOCU'. CLEAR ls_ver_obj. ls_ver_obj-objtype = ls_vrso-objtype. ls_ver_obj-objname = ls_vrso-objname. ls_ver_obj-versno = '00000'. CALL FUNCTION 'SVRS_GET_VERSION_LOCAL' CHANGING object = ls_ver_obj EXCEPTIONS no_version = 3 version_unreadable = 4 OTHERS = 5. CHECK sy-subrc = 0. CHECK ls_ver_obj-objtype IN s_otyp. READ TABLE gt_ko100 INTO gs_ko100 WITH KEY object = ls_vrso-objtype BINARY SEARCH. ls_object-objtxt = gs_ko100-text. ls_object-pgmid = 'LIMU'. ls_object-object = ls_vrso-objtype. ls_object-obj_name = ls_vrso-objname. APPEND ls_object TO lt_object. ENDLOOP. ELSE. CHECK gs_out-object IN s_otyp. READ TABLE gt_ko100 INTO gs_ko100 WITH KEY object = gs_out-object BINARY SEARCH. ls_object-objtxt = gs_ko100-text. ls_object-object = gs_out-object. ls_object-obj_name = gs_out-obj_name. ls_object-pgmid = gs_out-pgmid. ls_object-result = '@BZ@类型不支持'. APPEND ls_object TO lt_object. CLEAR ls_object. ENDIF. ENDLOOP. gt_out = lt_object. SORT gt_out BY object obj_name. DELETE ADJACENT DUPLICATES FROM gt_out COMPARING object obj_name. ENDFORM. "expand_objects *&---------------------------------------------------------------------* *& check_objects *&---------------------------------------------------------------------* FORM check_objects. DATA: lv_text TYPE char50, lv_lines TYPE i, lv_empty TYPE c, ls_loc_obj TYPE svrs2_versionable_object, ls_rem_obj TYPE svrs2_versionable_object, ls_delta TYPE svrs2_xversionable_object. lv_lines = lines( gt_out ). LOOP AT gt_out INTO gs_out WHERE result = ''. MESSAGE s000(oo) WITH sy-tabix '/' lv_lines gs_out-obj_name INTO lv_text. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = 0 text = lv_text. PERFORM read_object USING gs_out '' CHANGING ls_loc_obj. PERFORM read_object USING gs_out p_dest CHANGING ls_rem_obj. IF ls_rem_obj IS INITIAL. gs_out-result = '@5C@不存在'. ELSE. PERFORM clear_data USING ls_loc_obj. PERFORM clear_data USING ls_rem_obj. CLEAR ls_delta. CALL FUNCTION 'SVRS_MAKE_OBJECT_DELTA' EXPORTING obj_old = ls_loc_obj obj_new = ls_rem_obj CHANGING delta = ls_delta EXCEPTIONS OTHERS = 2. CALL FUNCTION 'SVRS_CHECK_DELTA_EMPTY' EXPORTING obj_new = ls_loc_obj delta = ls_delta IMPORTING p_delta_empty = lv_empty. IF lv_empty = 'X'. gs_out-result = '@5B@相同'. ELSE. gs_out-result = '@5D@不同'. ENDIF. ENDIF. PERFORM get_trkorr USING p_dest gs_out-object gs_out-obj_name CHANGING gs_out-tract gs_out-trloc gs_out-trpre gs_out-trrem. IF gs_out-trrem NE ''. IF gs_out-trrem = gs_out-trloc. gs_out-trsta = '最新请求'. ELSEIF gs_out-trrem = gs_out-trpre. gs_out-trsta = '次新请求'. ELSE. gs_out-trsta = '@5D@非最新/次新'. ENDIF. ENDIF. MODIFY gt_out FROM gs_out. ENDLOOP. IF p_same = ''. DELETE gt_out WHERE result = '@5B@相同'. ENDIF. IF p_diff = ''. DELETE gt_out WHERE result = '@5D@不同'. ENDIF. IF p_noex = ''. DELETE gt_out WHERE result = '@5C@不存在'. ENDIF. IF p_unsu = ''. DELETE gt_out WHERE result = '@BZ@类型不支持'. ENDIF. ENDFORM. "check_objects *&---------------------------------------------------------------------* *& read_object *&---------------------------------------------------------------------* FORM read_object USING ps_object LIKE gs_out pv_dest CHANGING cs_verobj TYPE svrs2_versionable_object. CLEAR: cs_verobj. cs_verobj-destination = pv_dest. cs_verobj-objtype = ps_object-object. cs_verobj-objname = ps_object-obj_name. cs_verobj-versno = '00000'. CALL FUNCTION 'SVRS_GET_VERSION' CHANGING object = cs_verobj EXCEPTIONS communication_error = 1 system_error = 2 no_version = 3 version_unreadable = 4 OTHERS = 5. IF sy-subrc NE 0. CLEAR: cs_verobj. ENDIF. ENDFORM. "read_object *&---------------------------------------------------------------------* *& clear_data *&---------------------------------------------------------------------* FORM clear_data USING ps_verobj TYPE svrs2_versionable_object. DATA: lv_type TYPE c, lv_count TYPE i. FIELD-SYMBOLS: TYPE any, TYPE any, TYPE ANY TABLE. IF ps_verobj-data_pointer IS INITIAL. ps_verobj-data_pointer = ps_verobj-objtype. ENDIF. ASSIGN COMPONENT ps_verobj-data_pointer OF STRUCTURE ps_verobj TO . CHECK sy-subrc = 0. PERFORM clear_stru_field USING: 'MDLOG' , 'TRDIR' , 'TFDIR' , 'TRDIRT', 'CLASS' , 'DD08TV'. DESCRIBE FIELD TYPE lv_type COMPONENTS lv_count. DO lv_count TIMES. ASSIGN COMPONENT sy-index OF STRUCTURE TO . CHECK sy-subrc = 0. LOOP AT ASSIGNING . PERFORM clear_stru_field USING: 'AUTHOR' , 'AUTH' , 'CREATEDON', 'CHANGEDBY', 'CHANGEDON', 'UDATE' , 'UTIME' , 'AS4DATE' , 'AS4TIME' , 'AS4USER' , 'DESCRIPT' , 'EDITORDER', 'R3RELEASE'. ENDLOOP. ENDDO. ENDFORM. "clear_data *&---------------------------------------------------------------------* *& clear_stru_field *&---------------------------------------------------------------------* FORM clear_stru_field USING ps_stru pv_fldnam. FIELD-SYMBOLS TYPE any. ASSIGN COMPONENT pv_fldnam OF STRUCTURE ps_stru TO . IF sy-subrc = 0. CLEAR . ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& outdata *&---------------------------------------------------------------------* FORM outdata. gs_slayt-zebra = 'X'. PERFORM catset1 TABLES gt_fldct USING: 'OBJ_NAME ' '' '' '对象名称', 'OBJECT ' '' '' '对象类型', 'OBJTXT ' '' '' '类型描述', 'AUTHOR ' '' '' '创建人', 'DEVCLASS ' '' '' '包', 'TRACT ' '' '' '本地活动TASK', 'TRLOC ' '' '' '本地最新请求号', 'TRPRE ' '' '' '本地次新请求号', 'TRREM ' '' '' '远程请求号', 'TRSTA ' '' '' '远程请求状态', 'RESULT ' '' '' '对比结果'. CHECK gt_out IS NOT INITIAL. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' EXPORTING it_fieldcat_lvc = gt_fldct is_layout_lvc = gs_slayt i_callback_program = sy-repid i_callback_user_command = 'USER_COMMAND' TABLES t_outtab = gt_out. ENDFORM. " outdata *---------------------------------------------------------------------* * catset1 *---------------------------------------------------------------------* FORM catset1 TABLES t_fldcat USING pv_field pv_reftab pv_reffld pv_text. DATA: ls_fldcat TYPE lvc_s_fcat. ls_fldcat-fieldname = pv_field. ls_fldcat-scrtext_l = pv_text. ls_fldcat-coltext = pv_text. ls_fldcat-ref_table = pv_reftab. ls_fldcat-ref_field = pv_reffld. ls_fldcat-col_opt = 'A'. APPEND ls_fldcat TO t_fldcat. CLEAR ls_fldcat. ENDFORM. "catset1 *&--------------------------------------------------------------------* *& user_command *&--------------------------------------------------------------------* FORM user_command USING pv_ucomm TYPE sy-ucomm ##called pv_field TYPE slis_selfield. DATA: lv_repid TYPE sy-repid. READ TABLE gt_out INTO gs_out INDEX pv_field-tabindex. CASE pv_ucomm. WHEN '&IC1'. CASE pv_field-fieldname. WHEN 'OBJ_NAME' OR 'OBJECT' OR 'OBJTXT'. "对象跳转 CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL' EXPORTING iv_pgmid = gs_out-pgmid iv_object = gs_out-object iv_obj_name = gs_out-obj_name iv_action = 'SHOW' EXCEPTIONS jump_not_possible = 1 OTHERS = 2. WHEN 'AUTHOR'. CALL FUNCTION 'SUSR_SHOW_USER_DETAILS' EXPORTING bname = gs_out-author. WHEN 'TRACT'. CALL FUNCTION 'SVRS_DISPLAY_DIRECTORY' EXPORTING object_name = gs_out-obj_name(110) object_type = gs_out-object. WHEN 'TRLOC'. PERFORM display_request USING gs_out-trloc. WHEN 'TRPRE'. PERFORM display_request USING gs_out-trpre. WHEN 'TRREM'. PERFORM display_request USING gs_out-trrem. WHEN 'TRSTA'. CALL FUNCTION 'SVRS_DISPLAY_REMOTE_DIR' EXPORTING destination = p_dest object_name = gs_out-obj_name(110) object_type = gs_out-object EXCEPTIONS no_directory = 01 no_selection = 02. WHEN 'RESULT'. "对比版本 SELECT SINGLE * FROM versobj_alias WHERE objtype_appl = gs_out-object. IF sy-subrc = 0. lv_repid = 'RSVRS_TLOGO_COMPARE_VERSIONS'. ELSE. SELECT SINGLE rep_comp INTO lv_repid FROM versobj WHERE object = gs_out-object AND versno = '99999' AND actflag = 'A'. IF sy-subrc NE 0. MESSAGE s000(oo) WITH '未找到此对象类型的对比程序'. RETURN. ENDIF. ENDIF. SUBMIT (lv_repid) WITH objname = gs_out-obj_name WITH objnam2 = gs_out-obj_name WITH objtyp1 = gs_out-object WITH objtyp2 = gs_out-object WITH versno1 = '00000' WITH versno2 = '00000' WITH log_dest = p_dest WITH rem_syst = p_syst AND RETURN. ENDCASE. ENDCASE. ENDFORM. "user_command *&--------------------------------------------------------------------* *& 获取请求号 *&--------------------------------------------------------------------* FORM get_trkorr USING pv_dest pv_objtype pv_objname CHANGING cv_tract cv_trloc cv_trpre cv_trrem. DATA: lt_vrsn TYPE vrsn_tab. DATA: lt_vrsd TYPE STANDARD TABLE OF vrsd, ls_vrsd TYPE vrsd. CLEAR: cv_trloc,cv_trpre,cv_trrem. CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46' EXPORTING destination = '' objname = pv_objname(110) objtype = pv_objtype TABLES lversno_list = lt_vrsn version_list = lt_vrsd EXCEPTIONS no_entry = 1. READ TABLE lt_vrsd INTO ls_vrsd WITH KEY versno = '00000'. IF sy-subrc = 0. cv_tract = ls_vrsd-korrnum. ENDIF. LOOP AT lt_vrsd INTO ls_vrsd WHERE korrnum NE ''. IF cv_trloc IS INITIAL. cv_trloc = ls_vrsd-korrnum. ELSEIF ls_vrsd-korrnum NE cv_trloc. cv_trpre = ls_vrsd-korrnum. EXIT. ENDIF. ENDLOOP. CALL FUNCTION 'SVRS_GET_VERSION_DIRECTORY_46' EXPORTING destination = pv_dest objname = pv_objname(110) objtype = pv_objtype TABLES lversno_list = lt_vrsn version_list = lt_vrsd EXCEPTIONS no_entry = 1. LOOP AT lt_vrsd INTO ls_vrsd WHERE korrnum NE ''. cv_trrem = ls_vrsd-korrnum. EXIT. ENDLOOP. ENDFORM. "get_trkorr *&---------------------------------------------------------------------* *& 显示请求 *&---------------------------------------------------------------------* FORM display_request USING pv_request. CHECK pv_request IS NOT INITIAL. CALL FUNCTION 'TR_PRESENT_REQUEST' EXPORTING iv_trkorr = pv_request. ENDFORM.


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭