dim apkg_id() dim apkg_obozn() dim apkg_name() dim opkg_id() dim opkg_obozn() dim opkg_name() dim parent_id() Function vrPatch(mdl_old, mdl_new) ON ERROR RESUME NEXT v_old = mdl_old.vrFileVersion(3) 'старая версия v_new = mdl_new.vrFileVersion(1) 'новая версия 'msgbox "vrPatch v_old=" & cstr(v_old) '3 - первая версия 'от 4 до 12 включительно - вторая версия '13 и выше - последняя CLASS_TTPDocument = "{C7A531B8-1E9D-4D27-8B99-2C8E089CB827}" set old_objs = mdl_old.vrGetObjVector set old_FilterVector = mdl_old.vrGetClassVector.vrFilterVector set new_objs = mdl_new.vrGetObjVector set new_dse = GetDSEObject(mdl_new) must_convert_packages = (not(new_dse is nothing))and(new_dse.vrClass.vrName="assembly") 'специальная заглушка для сборки мусора, синхронизирует связи новой модели с новой структурой new_dse.vrAddChildLink new_objs.vrItem(0) 'Игонорируем запреты плагинов на изменение моделей set s_helper = CreateObject("cfg_tools.VScriptHelper") s_helper.vsAllowChangesByEvents mdl_new, true s_helper.vsAllowChangesByEvents mdl_old, true redim apkg_id(0) redim apkg_obozn(0) redim apkg_name(0) For i = 0 To old_objs.vrObjectsCount - 1 'Цикл по объектам set old_obj = old_objs.vrItem(i) set new_obj = new_objs.vrGetObjByStrID(old_obj.vrObjStrID) 'объект в новой структуре If Not new_obj is Nothing Then '''''''''''''''' Обновление с первой версии. Begin '''''''''''''''''' If v_old < 4 Then If old_obj.vrClass.vrClassVector.vrFilterVector.vrLocateConstraint("operations", old_obj.vrClass.vrName) Then 'создаем объект профессии set prof_obj = new_objs.vrCreate("worker") prof_obj.vrAttrByName("name").vrValue = old_obj.vrAttrByName("nameprof").vrValue prof_obj.vrAttrByName("code").vrValue = old_obj.vrAttrByName("codprof").vrValue prof_obj.vrAttrByName("classjob").vrValue = old_obj.vrAttrByName("classjob").vrValue prof_obj.vrAttrByName("cm").vrValue = old_obj.vrAttrByName("cm").vrValue prof_obj.vrAttrByName("yt").vrValue = old_obj.vrAttrByName("yt").vrValue prof_obj.vrAttrByName("kr").vrValue = old_obj.vrAttrByName("kr").vrValue 'new_obj.vrAddChildLink(prof_obj) 'Переводим время в секунды (базовая единица) new_obj.vrAttrByName("tosn").vrValue = old_obj.vrAttrByName("tosn").vrValue * 60 new_obj.vrAttrByName("tvspom").vrValue = old_obj.vrAttrByName("tvspom").vrValue * 60 new_obj.vrAttrByName("timesht").vrValue = old_obj.vrAttrByName("timesht").vrValue * 60 new_obj.vrAttrByName("timepz").vrValue = old_obj.vrAttrByName("timepz").vrValue * 60 ElseIf old_obj.vrClass.vrClassVector.vrFilterVector.vrLocateConstraint("steps", old_obj.vrClass.vrName) Then 'Переводим время в секунды (базовая единица) new_obj.vrAttrByName("to").vrValue = old_obj.vrAttrByName("to").vrValue * 60 new_obj.vrAttrByName("tv").vrValue = old_obj.vrAttrByName("tv").vrValue * 60 End If If old_obj.vrClass.vrName="mex_oper" Then ChangeLocation old_obj, new_obj, "operid", "OPER.LIST=" 'создаем объект оборудования set stanok_obj = new_objs.vrCreate("stanok") stanok_obj.vrAttrByName("Obozn").vrValue = old_obj.vrAttrByName("equipment1").vrValue stanok_obj.vrAttrByName("id").vrValue = "STANOK.MODEL=" & old_obj.vrAttrByName("stanokid").vrValue new_obj.vrAddChildLink(stanok_obj) 'подвязываем ранее созданную профессию к новому оборудованию stanok_obj.vrAddChildLink(prof_obj) 'создаем объект СОЖ, если атрибут СОЖ в операции был заполнен If old_obj.vrAttrByName("sog").vrValue <> "" Then set sog_obj = new_objs.vrCreate("sog") sog_obj.vrAttrByName("name").vrValue = old_obj.vrAttrByName("sog").vrValue sog_obj.vrAttrByName("id").vrValue = "SOG.MARKA=" & old_obj.vrAttrByName("sogid").vrValue new_obj.vrAddChildLink(sog_obj) End If ElseIf old_obj.vrClass.vrName = "pok_oper" Then ChangeLocation old_obj, new_obj, "operid", "OPER.LIST=" 'создаем объект оборудования set stanok_obj = new_objs.vrCreate("pok_hardware") stanok_obj.vrAttrByName("Obozn").vrValue = old_obj.vrAttrByName("equipment1").vrValue stanok_obj.vrAttrByName("id").vrValue = "STANOK.MODEL=" & old_obj.vrAttrByName("equipmentid").vrValue new_obj.vrAddChildLink(stanok_obj) ElseIf old_obj.vrClass.vrName = "public_oper" Then ChangeLocation old_obj, new_obj, "operid", "OPER.LIST=" ElseIf old_obj.vrClass.vrName = "sbr_oper" Then ChangeLocation old_obj, new_obj, "operid", "OPER.LIST=" 'создаем объект оборудования set stanok_obj = new_objs.vrCreate("sbr_hardware") stanok_obj.vrAttrByName("Obozn").vrValue = old_obj.vrAttrByName("equipment1").vrValue stanok_obj.vrAttrByName("id").vrValue = "STANOK.MODEL=" & old_obj.vrAttrByName("equipmentid").vrValue new_obj.vrAddChildLink(stanok_obj) ElseIf old_obj.vrClass.vrName = "sht_oper" Then ChangeLocation old_obj, new_obj, "operid", "OPER.LIST=" 'создаем объект оборудования set stanok_obj = new_objs.vrCreate("sht_hardware") stanok_obj.vrAttrByName("Obozn").vrValue = old_obj.vrAttrByName("equipment1").vrValue stanok_obj.vrAttrByName("id").vrValue = "STANOK.MODEL=" & old_obj.vrAttrByName("equipmentid").vrValue new_obj.vrAddChildLink(stanok_obj) ElseIf old_obj.vrClass.vrName = "svr_oper" Then ChangeLocation old_obj, new_obj, "operid", "OPER.LIST=" 'создаем объект оборудования set stanok_obj = new_objs.vrCreate("svr_hardware") stanok_obj.vrAttrByName("Obozn").vrValue = old_obj.vrAttrByName("equipment1").vrValue stanok_obj.vrAttrByName("id").vrValue = "STANOK.MODEL=" & old_obj.vrAttrByName("equipmentid").vrValue new_obj.vrAddChildLink(stanok_obj) ElseIf old_obj.vrClass.vrName = "trm_oper" Then ChangeLocation old_obj, new_obj, "operid", "OPER.LIST=" 'создаем объект оборудования set stanok_obj = new_objs.vrCreate("trm_hardware") stanok_obj.vrAttrByName("Obozn").vrValue = old_obj.vrAttrByName("equipment1").vrValue stanok_obj.vrAttrByName("id").vrValue = "STANOK.MODEL=" & old_obj.vrAttrByName("equipmentid").vrValue new_obj.vrAddChildLink(stanok_obj) '''''''''''''''' Некоторые атрибуты были переименованы ''''''''''''''''' 'оборудование ElseIf old_obj.vrClass.vrName = "stanok" then new_obj.vrAttrByName("obozn").vrValue = "MEX_PRSP.TYPESIZE=" & old_obj.vrAttrByName("model").vrValue 'основной материал ElseIf old_obj.vrClass.vrName = "detail" then new_obj.vrAttrByName("material").vrValue = old_obj.vrAttrByName("sortament").vrValue & " " &_ old_obj.vrAttrByName("mainsize").vrValue & " " & old_obj.vrAttrByName("gostzagot").vrValue & " / " &_ old_obj.vrAttrByName("markamater").vrValue & " " & old_obj.vrAttrByName("gostmater").vrValue If old_obj.vrAttrByName("matrext").vrValue = "" Then set UniRefer = GetObject(v_zero, "UniReference.UniRefer") v_Location = UniRefer.ConnectionList.ConnectServer.GetOneFieldSQL("SELECT GUID FROM ZAGOTOV_EXEMPLAR WHERE GUID_MATL = '" & old_obj.vrAttrByName("matrid").vrValue & "' AND GUID_SORTAM = '" & old_obj.vrAttrByName("sortamid").vrValue & "' ") new_obj.vrAttrByName("matrid").vrValue = "ZAGOTOV.EXEMPLAR=" & v_Location End If 'для нормировочных карт значение атрибута name_parent_attr выставляем в ElseIf old_obj.vrClass.vrName = "name_parent_attr" then new_obj.vrAttrByName("name_parent_attr").vrValue = "" '''''''''''''''''''''' Меняем GUID на Location '''''''''''''''''''''''' 'для КТЭ ElseIf old_obj.vrClass.vrName = "cte" then ChangeLocation old_obj, new_obj, "id", "KTE.LIST=" 'для переходов ElseIf old_obj.vrClass.vrName = "cnt_step" then ChangeLocation old_obj, new_obj, "ii_id", "II.TYPESIZE=" ElseIf old_obj.vrClass.vrName = "mex_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" ElseIf old_obj.vrClass.vrName = "pok_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" ElseIf old_obj.vrClass.vrName = "mex_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" ElseIf old_obj.vrClass.vrName = "public_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" ElseIf old_obj.vrClass.vrName = "sbr_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" ElseIf old_obj.vrClass.vrName = "sht_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" ElseIf old_obj.vrClass.vrName = "sub_step" then ChangeLocation old_obj, new_obj, "id", "MEX_VSTP.LIST=" ElseIf old_obj.vrClass.vrName = "svr_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" ElseIf old_obj.vrClass.vrName = "trm_step" then ChangeLocation old_obj, new_obj, "id", "MEX_STEP.LIST=" 'для всей оснастки ElseIf old_obj.vrClass.vrName = "fix_tool" then ChangeLocation old_obj, new_obj, "id", "MEX_PRSP.TYPESIZE=" ElseIf old_obj.vrClass.vrName = "hand_tool" then ChangeLocation old_obj, new_obj, "id", "SLI.TYPESIZE=" ElseIf old_obj.vrClass.vrName = "metrical_device" then ChangeLocation old_obj, new_obj, "id", "IZM_PRB.MARKA=" ElseIf old_obj.vrClass.vrName = "metrical_tool" then ChangeLocation old_obj, new_obj, "id", "II.TYPESIZE=" ElseIf old_obj.vrClass.vrName = "pok_tool" then ChangeLocation old_obj, new_obj, "id", "POK_OSN.MARKA=" ElseIf old_obj.vrClass.vrName = "protect_tool" then ChangeLocation old_obj, new_obj, "id", "SIZ.MARKA=" ElseIf old_obj.vrClass.vrName = "ri" then ChangeLocation old_obj, new_obj, "id", "RI.TYPESIZE=" ElseIf old_obj.vrClass.vrName = "ri_blade" then ChangeLocation old_obj, new_obj, "id", "RI_BLADE.TYPESIZE=" ElseIf old_obj.vrClass.vrName = "sbr_osnast" then ChangeLocation old_obj, new_obj, "id", "SBR_OSNT.MARKA=" ElseIf old_obj.vrClass.vrName = "sbr_tool" then ChangeLocation old_obj, new_obj, "id", "SBR_TOOL.MARKA=" ElseIf old_obj.vrClass.vrName = "sht_osnast" then ChangeLocation old_obj, new_obj, "id", "SHT_OSNT.MARKA=" ElseIf old_obj.vrClass.vrName = "sht_tool" then ChangeLocation old_obj, new_obj, "id", "SHT_TOOL.MARKA=" ElseIf old_obj.vrClass.vrName = "sog" then ChangeLocation old_obj, new_obj, "id", "SOG.MARKA=" ElseIf old_obj.vrClass.vrName = "sub_material" then ChangeLocation old_obj, new_obj, "id", "VSP_MATR.MARKA=" ElseIf old_obj.vrClass.vrName = "sub_tool" then ChangeLocation old_obj, new_obj, "id", "VI.TYPESIZE=" ' ElseIf old_obj.vrClass.vrName = "svr_cable" then ' ChangeLocation old_obj, new_obj, "id", "????=" ' ElseIf old_obj.vrClass.vrName = "svr_electrod" then ' ChangeLocation old_obj, new_obj, "id", "????=" ElseIf old_obj.vrClass.vrName = "svr_tool" then ChangeLocation old_obj, new_obj, "id", "SVR_TOOL.MARKA=" ElseIf old_obj.vrClass.vrName = "trm_tool" then ChangeLocation old_obj, new_obj, "id", "TRM_OSNT.MARKA=" ElseIf old_obj.vrClass.vrName = "truck_tool" then ChangeLocation old_obj, new_obj, "id", "GRZ_PRSP.TYPESIZE=" End If '''''''''''''''' Обновление с первой версии. End '''''''''''''''''' End If '''''''''''''''' Обновление со второй версии. Begin ''''''''''''''' If v_old < 13 Then 'Перемещаем профессии из под операций к оборудованию If old_FilterVector.vrLocateConstraint("operations", old_obj.vrClass.vrName) Then Set new_operation = new_obj Set old_operation = old_obj 'Получаем оборудование новой операции Set VIterator = new_operation.vrObjectsVector.vrCreateIterator("equipment",new_operation,true) If VIterator.vrFirst Then 'если оборудование нашли то Set new_equipment = VIterator.vrGetObject 'бежим по профессиям старой оперции и перемещаем их в оборудование новой операции Set VIterator = old_operation.vrObjectsVector.vrCreateIterator("workers",old_operation,true) While VIterator.vrNext 'Перемещаем профессию из операции в оборудование Set old_worker = VIterator.vrGetObject Set new_worker = new_equipment.vrAddChild(old_worker.vrClass.vrName) new_worker.vrAssignFrom(old_worker) Wend End If End If End If '''''''''''''''' Обновление со второй версии. End ''''''''''''''' '''''''''''''''' Обновление со второй версии SP3. Begin ''''''''''''''' If v_old < 16 Then 'В третей версии было применено наследование, поэтому имена классов и атрибутов 'остались теже, но из-за примененного наслелования идентификаторы атрибутов класса 'поменялись, в результате модель будет считать эти атрибы как новые атрибуты класса 'и естественно значений старых атриубтов в объектах не окажется. Поэтому 'просто получаем по имени атрибут старого объекта, атрибут нового объекта 'и копируем значение из старого атрибута в новый 'Д и значени set VMaterialClass = mdl_new.vrGetClassVector.vrLocate("material") set VStepClass = mdl_new.vrGetClassVector.vrLocate("step") 'Было введено наследование в результате чего поплыли идентификаторы атрибутов 'но имена атрибутов остались, поэтому синхронизацию проводим опираясь на имена атрибутов 'set s_helper = CreateObject("cfg_tools.VScriptHelper") For j = 0 To new_obj.vrAttrCount - 1 'Цикл по атрибутам нового объекта 'Копируем значения атрибутов из старой модели в новую set VAttribute = new_obj.vrAttrByIndex(j) if VAttribute.vrClassValue.vrType=0 then 'Если копируется текст переход то переприсваиваем его через vrValue, 'т.к. у этого атрибута поменялся тип данных с String на Text if new_obj.vrClass.vrIsBase(VStepClass)and(VAttribute.vrName="name") then VAttribute.vrValue=old_obj.vrAttrByName("name").vrValue 'Обрабатываем материал elseif new_obj.vrClass.vrIsBase(VMaterialClass) then 'копируем значение атрибута obozn -> gost 'т.к. атрибут obozn был удален из материала if (VAttribute.vrName="gost") then VAttribute.vrAssignFrom(old_obj.vrAttrByName("obozn")) end if 'Пробуем получить значение ЕН со старого объекта 'если этого сделать не удается то инициализируем его 1 if (VAttribute.vrName="en") then if old_obj.vrAttrExists("en") then en = old_obj.vrAttrByName("en").vrValue 'Если сконвертировать строковое значение ЕН не удасться(произойдет ошибка) 'то в результате того что работает директива ON ERROR RESUME NEXT 'мы перейдем на следующую строку. if (en="")or(cint(en)<=0) then VAttribute.vrValue = 1 else VAttribute.vrValue = cint(en) end if else VAttribute.vrValue = 1 end if end if if old_obj.vrAttrExists(VAttribute.vrName) then VAttribute.vrAssignFrom(old_obj.vrAttrByName(VAttribute.vrName)) end if 'Для общего случая просто находим атрибут и копируем из него значение 'в объект новой модели. elseif old_obj.vrAttrExists(VAttribute.vrName) then VAttribute.vrAssignFrom(old_obj.vrAttrByName(VAttribute.vrName)) end if end if Next 's_helper.vsCopyObjGUID obj_from, obj_to 'Конвертируем комплектование операции if (must_convert_packages)and(old_objs.vrObjFitsFilter(old_obj,"operations")) then 'Сбрасываем информацию о созданной комплектовки для новой операции redim opkg_id(0) redim opkg_obozn(0) redim opkg_name(0) if (old_obj.vrClass.vrnChildClassItem("package") is nothing) then set vsteps = old_objs.vrCreateIterator("steps", old_obj, true) while vsteps.vrNext set vstep_old = vsteps.vrGetObject if not(vstep_old.vrClass.vrnChildClassItem("package") is nothing) then if old_FilterVector.vrLocateFilter("packages") then set vpackages = old_objs.vrCreateIterator("packages", vstep_old, true) else set vpackages = old_objs.vrCreateIterator("package", vstep_old, true) end if while vpackages.vrNext AddPackageToOperation vpackages.vrGetObject, new_dse, new_obj wend end if wend else if old_FilterVector.vrLocateFilter("packages") then set vpackages = old_objs.vrCreateIterator("packages", vstep_old, true) else set vpackages = old_objs.vrCreateIterator("package", vstep_old, true) end if while vpackages.vrNext AddPackageToOperation vpackages.vrGetObject, new_dse, new_obj wend end if end if '---------------- 'Конвертируем контролируемые параметры ' if (old_objs.vrObjFitsFilter(old_obj,"cnt_step")) then ' set operations = old_objs.vrCreateIterator("operations", old_obj, false) ' operations.vrFirst ' 'Получаем первые две цифры кода операции ' if operations.vrGetObject.vrAttrExists("kodoper") then ' kodoper = Left(cstr(operations.vrGetObject.vrAttrByName("kodoper").vrValue),2) ' else ' kodoper = "" ' end if ' ' & " " & operations.vrGetObject.vrExecuteFunction("showme") ' 'Если это контрольная операция то выносим в отдельный объект ИИ, если нет ' 'то преобразуем контролируемый параметр во вспомогательный переход ' if (kodoper="02")or(kodoper="03") then ' 'Из старого контролируемого параметра контрольной операции вытаскиваем данные ' 'по ИИ и добавляем как измерительный инструмент ' if cstr(old_obj.vrAttrByName("ii_id").vrValue)<>"" then ' set metrical_tool = new_obj.vrAddChild("metrical_tool") ' metrical_tool.vrAttrByName("id").vrValue = old_obj.vrAttrByName("ii_id").vrValue ' metrical_tool.vrAttrByName("name").vrValue = old_obj.vrAttrByName("ii_name").vrValue ' metrical_tool.vrAttrByName("obozn").vrValue = old_obj.vrAttrByName("ii_obozn").vrValue ' metrical_tool.vrAttrByName("gost").vrValue = old_obj.vrAttrByName("ii_gost").vrValue ' end if ' ' else ' 'Преобразуем старый контролируемый параметр во вспомогательный переход ' 'с подчиненным измерительным инструментом ' 'Создаем вспомогательный переход и копируем данные из старого контролируемого параметра ' set new_substep = new_objs.vrCreate("sub_step") ' new_substep.vrAttrByName("name").vrValue=old_obj.vrAttrByName("name").vrValue ' new_substep.vrAttrByName("to").vrValue=old_obj.vrAttrByName("to").vrValue ' new_substep.vrAttrByName("tv").vrValue=old_obj.vrAttrByName("tv").vrValue ' new_substep.vrAttrByName("comments").vrValue=old_obj.vrAttrByName("comments").vrValue ' 'Копируем добавляем измерительный инструмент ' if cstr(old_obj.vrAttrByName("ii_id").vrValue)<>"" then ' set metrical_tool = new_substep.vrAddChild("metrical_tool") ' metrical_tool.vrAttrByName("id").vrValue = old_obj.vrAttrByName("ii_id").vrValue ' metrical_tool.vrAttrByName("name").vrValue = old_obj.vrAttrByName("ii_name").vrValue ' metrical_tool.vrAttrByName("obozn").vrValue = old_obj.vrAttrByName("ii_obozn").vrValue ' metrical_tool.vrAttrByName("gost").vrValue = old_obj.vrAttrByName("ii_gost").vrValue ' end if ' 'Добавляем остальные инструменты ' set tools = new_objs.vrCreateIterator("tools",new_obj,true) ' while tools.vrNext ' new_substep.vrAddChildLink tools.vrGetObject ' wend ' 'Добавляем вспомогательный переход ко всем родителям контролируемого параметра ' set parents = new_objs.vrCreateIterator("",new_obj,false) ' while parents.vrNext ' parents.vrGetObject.vrAddChildLink new_substep ' wend ' 'Удаляем контролируемый параметр от всех радителей ' while parents.vrFirst ' parents.vrGetObject.vrDeleteChildLink new_obj ' wend ' 'переопределяем новый объект ' set new_obj = new_substep ' end if ' end if ' 'Обновляем режимы. Переносим строку режимов из старого атрибута в общий атрибут режимов if old_obj.vrClass.vrName="regrez" then new_obj.vrAttrByName("mode_string").vrValue = old_obj.vrAttrByName("rezstring").vrValue end if End If '''''''''''''''' Обновление со второй версии. End ''''''''''''''' 'Начиная с V4 необходимо учитывать специфику ТТП/ГТП. Идентификаторы объектов должны 'быть сохранены. Добавлении объектов в новую модель, необходимо обсудить с Поляковым Павлом '''''''''''''''' Обновление со третей версии SP1. Begin ''''''''''''''' If v_old > 0 Then if new_objs.vrObjFitsFilter(new_obj, "operation") then ' неприменяемость карт. До V4 неприменяемость хранилась в виде связи operation->report ' теперь она хранится в атрибуте operation.unused_reports как IObjectSet if not (mdl_old.vrGetClassVector.vrLocate("report") is nothing) then set it = old_objs.vrCreateIterator("report",old_obj,true) set iobjset = new_obj.vrAttrByName("unused_reports").vrValue do while it.vrNext iobjset.vrAddStr it.vrGetObject.vrObjStrID loop end if ' есть в старом ТП класс report для импорта неприменяемости end if 'Преобразуем контрольные операции из public_oper в cnt_oper if (new_obj.vrClass.vrName = "public_oper") then set pub_oper = new_obj if pub_oper.vrAttrExists("kodoper") then kodoper = Left(pub_oper.vrAttrByName("kodoper").vrValue,2) else kodoper = "" end if if pub_oper.vrAttrExists("nameoper") then nameoper = pub_oper.vrAttrByName("nameoper").vrValue else nameoper = "" end if if (kodoper="02")or(kodoper="03") or (instr(1, nameoper, "КОНТРОЛ" , 1)>0) then 'копируем атрибуты операции set cnt_oper = new_objs.vrCloneAs(pub_oper,"cnt_oper") 'копируем связи на подчиненные объекты set childs = mdl_new.vrGetObjVector.vrCreateIterator("",pub_oper,true) while childs.vrNext cnt_oper.vrAddChildLink(childs.vrGetObject) wend 'Заменяем контрольную операцию во всех родительских объектах redim preserve parent_id(0) parent_cnt = 0 set parents = mdl_new.vrGetObjVector.vrCreateIterator("", pub_oper, false) while parents.vrNext redim preserve parent_id(parent_cnt+1) parent_id(parent_cnt) = parents.vrGetObject.vrObjStrId parent_cnt = parent_cnt + 1 wend for k = 0 to parent_cnt - 1 set parent_obj = mdl_new.vrGetObjVector.vrGetObjByStrID(parent_id(k)) 'Заменяем контрольную операцию с сохранение vrObjID parent_obj.vrInsertChildLink cnt_oper,pub_oper parent_obj.vrDeleteChildLink pub_oper next 'После замены присавиваем ID старой операции Заменяем контрольную операцию с сохранение vrObjID s_helper.vsCopyObjGUID pub_oper, cnt_oper 'приводим в порядок контрольные переходы контрольной операции set prev_new_obj = nothing set old_childs = old_objs.vrCreateIterator("", old_obj, true) while old_childs.vrPrev if old_childs.vrGetObject.vrClass.vrName = "cnt_step" then set old_cnt_step = old_childs.vrGetObject 'Получаем контрольный переход, если его нет, значит он был только у операции 'и т.к. в новой структуре связи между public_oper и cnt_step нет, то и объекта 'тоже нет. Если же объект есть значит он был добавлен еще к КТЭ и требуется его 'добавить к новой контрольной операции на прежнее место set new_cnt_step = new_objs.vrGetObjByStrID(old_cnt_step.vrObjStrID) if new_cnt_step is nothing then set new_cnt_step = new_objs.vrCloneAs(old_cnt_step, "cnt_step") if prev_new_obj is nothing then cnt_oper.vrAddChildLink new_cnt_step else cnt_oper.vrInsertChildLink new_cnt_step, prev_new_obj end if 'Копируем подчиненные объекты set old_cnt_step_childs = old_objs.vrCreateIterator("", old_cnt_step, true) while old_cnt_step_childs.vrNext set old_cnt_step_child = old_cnt_step_childs.vrGetObject set new_cnt_step_child = new_objs.vrCloneAs(old_cnt_step_child, old_cnt_step_child.vrClass.vrName) new_cnt_step.vrAddChildLink new_cnt_step_child wend else if prev_new_obj is nothing then cnt_oper.vrAddChildLink new_cnt_step else cnt_oper.vrInsertChildLink new_cnt_step, prev_new_obj end if end if 'Если ТП младше третей версии, то вытащим ИИ из контрольного перехода 'т.к. до третей версии ИИ лежал внутри контрольного перехода If v_old < 16 Then 'Из старого контролируемого параметра контрольной операции вытаскиваем данные 'по ИИ и добавляем как измерительный инструмент if cstr(old_cnt_step.vrAttrByName("ii_id").vrValue)<>"" then set metrical_tool = new_cnt_step.vrAddChild("metrical_tool") metrical_tool.vrAttrByName("id").vrValue = old_cnt_step.vrAttrByName("ii_id").vrValue metrical_tool.vrAttrByName("name").vrValue = old_cnt_step.vrAttrByName("ii_name").vrValue metrical_tool.vrAttrByName("obozn").vrValue = old_cnt_step.vrAttrByName("ii_obozn").vrValue metrical_tool.vrAttrByName("gost").vrValue = old_cnt_step.vrAttrByName("ii_gost").vrValue end if end if 'Пробуем сконвертировать значение старого строкового атрибута v_pk 'в новый атрибут factor_period с типом данных float if (old_cnt_step.vrAttrExists("v_pk")) then v_pk_new = "" v_pk_old = trim(old_cnt_step.vrAttrByName("v_pk").vrValue) n = len(v_pk_old) for j = 1 to n nextchar = mid(v_pk_old, j, 1) if instr("0123456789,.", nextchar)>0 then v_pk_new = v_pk_new & nextchar end if next v_pk_new = Replace(v_pk_new, ",", ".") new_cnt_step.vrAttrByName("factor_period").vrValue = cdbl(v_pk_new) end if end if 'если в новой модели не нашли аналогичный объект, то сохраняем тот что получили ранее set test_prev = new_objs.vrGetObjByStrID(cnt_steps.vrGetObject.vrObjStrID) if test_prev is nothing then set prev_new_obj = test_prev end if wend 'Т.к. заменили операцию на контрольную, то обновляем и переменню new_obj set new_obj = cnt_oper else 'Если ТП младше третей версии, то преобразуем контрольные переходы 'не контрольной операции в переходы общего назначения If v_old < 16 Then 'Переберем все подчиненные объекты операции общего назначения старой модели 'в обратном порядке и обработаем каждый встреченный нами контрольный переход set prev_new_obj = nothing set old_childs = old_objs.vrCreateIterator("", old_obj, true) while old_childs.vrPrev set new_substep = nothing if old_childs.vrGetObject.vrClass.vrName = "cnt_step" then set old_cnt_step = old_childs.vrGetObject set new_cnt_step = nothing set new_cnt_step = new_objs.vrGetObjByStrID(old_cnt_step.vrObjStrID) 'Преобразуем старый контролируемый параметр во вспомогательный переход 'с подчиненным измерительным инструментом 'Создаем вспомогательный переход и копируем данные из старого контролируемого параметра set new_substep = new_objs.vrCreate("sub_step") new_substep.vrAttrByName("name").vrValue=old_cnt_step.vrAttrByName("name").vrValue new_substep.vrAttrByName("to").vrValue=old_cnt_step.vrAttrByName("to").vrValue new_substep.vrAttrByName("tv").vrValue=old_cnt_step.vrAttrByName("tv").vrValue new_substep.vrAttrByName("comments").vrValue=old_cnt_step.vrAttrByName("comments").vrValue 'т.к. в новой структуре под операцией общего назначения контрольные 'переходы быть не могут, то значит в новой модели вставку в операцию проводим 'перед prev_new_obj. prev_new_obj это объект полученный перед тем как 'мы встретели cnt_step по итератору в обратном направлении(vrPrev) if prev_new_obj is nothing then new_obj.vrAddChildLink new_substep else new_obj.vrInsertChildLink new_substep, prev_new_obj end if 'если объект котрольного перехода в новой модели был найден, то 'заменяем его у всех родителей на новый вспомогательный переход 'например он мог остаться у КТЭ if not(new_cnt_step is nothing) then 'Добавляем вспомогательный переход ко всем родителям контролируемого параметра set new_parents = new_objs.vrCreateIterator("",new_cnt_step,false) while new_parents.vrNext new_parents.vrGetObject.vrInsertChildLink new_substep, new_cnt_step wend 'Удаляем контролируемый параметр от всех радителей while new_parents.vrFirst new_parents.vrGetObject.vrDeleteChildLink new_cnt_step wend end if 'Копируем подчиненные объекты set old_cnt_step_childs = old_objs.vrCreateIterator("", old_cnt_step, true) while old_cnt_step_childs.vrNext set old_cnt_step_child = old_cnt_step_childs.vrGetObject set new_sub_step_child = new_objs.vrCloneAs(old_cnt_step_child, old_cnt_step_child.vrClass.vrName) new_substep.vrAddChildLink new_sub_step_child wend 'Копируем добавляем измерительный инструмент if cstr(old_cnt_step.vrAttrByName("ii_id").vrValue)<>"" then set metrical_tool = new_substep.vrAddChild("metrical_tool") metrical_tool.vrAttrByName("id").vrValue = old_cnt_step.vrAttrByName("ii_id").vrValue metrical_tool.vrAttrByName("name").vrValue = old_cnt_step.vrAttrByName("ii_name").vrValue metrical_tool.vrAttrByName("obozn").vrValue = old_cnt_step.vrAttrByName("ii_obozn").vrValue metrical_tool.vrAttrByName("gost").vrValue = old_cnt_step.vrAttrByName("ii_gost").vrValue end if end if 'если был добавлен новый вспомогательный переход, то добавляем его 'если в новой модели не нашли аналогичный объект, то оставляем тот 'что получили ранее if new_substep is nothing then set test_prev = new_objs.vrGetObjByStrID(old_childs.vrGetObject.vrObjStrID) else set test_prev = new_substep end if if test_prev is nothing then set prev_new_obj = test_prev end if wend end if end if end if 'Для старых ТП информация о: Разработал, Утвердил, Проверил, Нормоконтроль была в ДСЕ 'Теперь, в V4, она также хранится и в операции, поэтому копируем ее из ДСЕ в операции 'чтобы при формировании карт ОК выводилась таже инфа что и раноьше if new_objs.vrObjFitsFilter(new_obj, "operation") then new_obj.vrAttrByName("data").vrValue = new_dse.vrAttrByName("data").vrValue new_obj.vrAttrByName("audittp").vrValue = new_dse.vrAttrByName("audittp").vrValue new_obj.vrAttrByName("data_audittp").vrValue = new_dse.vrAttrByName("data_audittp").vrValue new_obj.vrAttrByName("controltp").vrValue = new_dse.vrAttrByName("controltp").vrValue new_obj.vrAttrByName("datacontroltp").vrValue = new_dse.vrAttrByName("datacontroltp").vrValue new_obj.vrAttrByName("btk").vrValue = new_dse.vrAttrByName("btk").vrValue new_obj.vrAttrByName("data_btk").vrValue = new_dse.vrAttrByName("data_btk").vrValue new_obj.vrAttrByName("ncontrol").vrValue = new_dse.vrAttrByName("ncontrol").vrValue new_obj.vrAttrByName("data_ncontrol").vrValue = new_dse.vrAttrByName("data_ncontrol").vrValue 'Обновляем время для операций new_obj.vrAttrByName("tsht_").vrValue = old_obj.vrAttrByName("timesht").vrValue if old_obj.vrAttrByName("timesht").vrMeasureUnit = "" then new_obj.vrAttrByName("tsht_").vrValue = new_obj.vrAttrByName("tsht_").vrValue * 60 end if new_obj.vrAttrByName("tpz_").vrValue = old_obj.vrAttrByName("timepz").vrValue if old_obj.vrAttrByName("timepz").vrMeasureUnit = "" then new_obj.vrAttrByName("tpz_").vrValue = new_obj.vrAttrByName("tpz_").vrValue * 60 end if end if 'Обновляем время для переходов if new_objs.vrObjFitsFilter(new_obj, "step") then new_obj.vrAttrByName("to_").vrValue = old_obj.vrAttrByName("to").vrValue if old_obj.vrAttrByName("to").vrMeasureUnit = "" then new_obj.vrAttrByName("to_").vrValue = new_obj.vrAttrByName("to_").vrValue * 60 end if new_obj.vrAttrByName("tv_").vrValue = old_obj.vrAttrByName("tv").vrValue if old_obj.vrAttrByName("tv").vrMeasureUnit = "" then new_obj.vrAttrByName("tv_").vrValue = new_obj.vrAttrByName("tv_").vrValue * 60 end if end if End If '''''''''''''''' Обновление со третей версии SP1. End ''''''''''''''' End If Next 'AdminMessage "ТП обновлен до версии 2.0.1" '''''''''''''''' Обновление с третей версии SP1. Begin ''''''''''''''' If v_old > 0 then 'and v_old <= 14 Then 'конвертим автонумерацию из старой модели в новую CLASS_Autoinc = "{E7223F66-4BCC-4439-817D-41B9454DE261}" set VPlugins = mdl_new.vrGetPlugins set AutoNums = VPlugins.vrAddByStrGUID(CLASS_Autoinc) AutoNums.vsImportFromModel mdl_old end if s_helper.vsAllowChangesByEvents mdl_new, false s_helper.vsAllowChangesByEvents mdl_old, false End Function Sub ChangeLocation(old_obj, new_obj, name_attr, prefix) If (old_obj.vrAttrByName(name_attr).vrValue <>"") Then new_obj.vrAttrByName(name_attr).vrValue = prefix & old_obj.vrAttrByName(name_attr).vrValue End If End Sub Function AdminMessage(v_mess) Set UniRefer = GetObject(v_zero, "UniReference.UniRefer") If UniRefer Is Nothing Then Exit Function Set Logon = UniRefer.GlobalVars.Logon If Logon is nothing Then Exit Function If Not Logon.FlagLogon Then Exit Function If Logon.CheckPrivilegeGroup(Logon.IDGoupUser , "administration") Then msgbox v_mess End If End Function Function vrUpdateObj(obj_old, obj_new) End Function Function GetDSEObject(vmodel) '$DEFINE vmodel as IVModel set vdse = vmodel.vrGetObjVector.vrCreateIterator("dse",vmodel.vrGetObjVector.vrItem(0),true) if vdse.vrFirst then set GetDSEObject = vdse.vrGetObject else set GetDSEObject = nothing end if End Function sub AddPackageToOperation(package_old, dse_new, operation_new) '$DEFINE operation_old as IVObject, operation_new as IVObject, dse_new as IVObject 'Получаем ключевые данные по старой комплектовке loodsman_type = Trim(LCase(package_old.vrAttrByName("loodsman_type").vrValue)) obozn = package_old.vrAttrByName("obozn").vrValue name = package_old.vrAttrByName("name").vrValue 'Ищем комплектовку в комплектование СЕ и если ее нет то создаем has_apkg = false i=0 while (not has_apkg)and(i"") then set apkg_obj = dse_new.vrAddChild("apkg_detail") else set apkg_obj = dse_new.vrAddChild("apkg_material") end if apkg_obj.vrAttrByName("pos").vrValue = package_old.vrAttrByName("pos").vrValue apkg_obj.vrAttrByName("obozn").vrValue = obozn apkg_obj.vrAttrByName("name").vrValue = name apkg_obj.vrAttrByName("id_pdm").vrValue = package_old.vrAttrByName("id_pdm").vrValue apkg_obj.vrAttrByName("loodsman_product").vrValue = package_old.vrAttrByName("loodsman_product").vrValue apkg_obj.vrAttrByName("loodsman_version").vrValue = package_old.vrAttrByName("loodsman_version").vrValue apkg_obj.vrAttrByName("bo_location").vrValue = package_old.vrAttrByName("matrext").vrValue apkg_id(i) = apkg_obj.vrObjStrID apkg_obozn(i) = obozn apkg_name(i) = name else set apkg_obj = dse_new.vrObjectsVector.vrGetObjByStrID(apkg_id(i)) end if 'Ищем комплектовку в комплектование операции и если ее нет то создаем, а если 'есть то увеличиваем норму или колв-во как у комплектования СЕ так и у комплектования операции has_opkg = false i=0 while (not has_opkg)and(i