Вывод технологической оснастки в одну карту

Автор tur, 06.02.18, 11:32:53

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

tur

Необходимо вывести всю имеющуюся в техпроцессе оснастку в одну карту, без привязки к операциям, переходам и убрать повторяющуюся оснастку.
Вывести всю оснастку не проблема, проблема убрать повторяющуюся, кто-нибудь решал такую или подобную задачу?

Meldok

Добрый день!
Если вопрос именно в убирании повторяющихся, то там думаю просто писать скрипт на вывод оснастки - поиск оснастки с таким же id и вызов функции MarkAsPrinted, чтобы выводилась только первая оснастка, остальная с таким же id будет помечена как выведенная.
Если же нужно вывести всю оснастку в каком то определенном порядке, то мы решали подобную проблему для вывода инструкций ОТИ, ПИ, ДИ и использовали следующий скрипт
function DocBeforeFill(doc)
  set ovec = rptBuilder.rModel.vrGetObjVector
  set root = ovec.vrItem(0)
  set it = ovec.vrCreateIterator("dse",root,true)
  it.vrFirst
  set obj = it.vrGetObject
  'создаем временную операцию
  set op = obj.vrAddChild("mex_oper")
  op.vrAttrByName("nameoper").vrValue="-1"
  'перемещаем ее на первое место
  set it1=obj.vrObjectsVector.vrCreateIterator("operations",obj,true)
  it1.vrLast
  while it1.vrPrev
    res = obj.vrMoveChild(it1.vrGetObject,op,false)
  wend

  set it0=obj.vrObjectsVector.vrCreateIterator("operations",obj,true)
  it0.vrFirst
  set op=it0.vrGetObject
  'проходим по всем операциям и добавляем во временную операцию ОТИ 
  set it1=obj.vrObjectsVector.vrCreateIterator("operations",obj,true)
  while it1.vrnext
    set it2=obj.vrObjectsVector.vrCreateIteratorEx("niot",false,it1.vrGetObject,true)
    while it2.vrnext
      set obj1 = nothing
      set obj1 = op.vrFindChildByAttr("guid",it2.vrGetObject.vrAttrByName("guid").vrvalue)
      if obj1 is nothing then
        op.vrAddChildLink(it2.vrGetObject)
      end if
    wend
  wend
  'проходим по всем операциям и добавляем во временную операцию Инструкции 
  set it1=obj.vrObjectsVector.vrCreateIterator("operations",obj,true)
  while it1.vrnext
    set it2=obj.vrObjectsVector.vrCreateIteratorEx("techinstr",false,it1.vrGetObject,true)
    while it2.vrnext
      set obj1 = nothing
      set obj1 = op.vrFindChildByAttr("guid",it2.vrGetObject.vrAttrByName("guid").vrvalue)
      if obj1 is nothing then
        op.vrAddChildLink(it2.vrGetObject)
      end if
    wend
  wend

  'Перемещаем ПИ в конец
  set it1=obj.vrObjectsVector.vrCreateIteratorEx("techinstr",false,op,true)
  while it1.vrnext
    if (left(it1.vrGetObject.vrExecuteFunction("showme"),2)="ПИ")and(it1.vrGetObject.vrAttrByName("k").vrvalue<>"111") then
      it1.vrGetObject.vrAttrByName("k").vrvalue="111"
      op.vrMoveEnd(it1.vrGetObject)
      it1.vrFirst
    end if
  wend
 
  'Перемещаем ДИ в конец
  k=0
  set it1=obj.vrObjectsVector.vrCreateIteratorEx("techinstr",false,op,true)
  while it1.vrnext
    if (left(it1.vrGetObject.vrExecuteFunction("showme"),2)="ДИ")and(it1.vrGetObject.vrAttrByName("k").vrvalue<>"111") then
      it1.vrGetObject.vrAttrByName("k").vrvalue="111"
      op.vrMoveEnd(it1.vrGetObject)
      it1.vrFirst
      k=0
    end if
  wend
  ClassBeforeFill = 0
  SubstStart = 0
end function
Можете попробовать сделать что нибудь подобное. К примеру создать также операцию и скопировать туда всю оснастку.
При выводе опять же выводить только первый объект, остальные помечать как напечатанные. И в функции DocAfterFill удалить созданную операцию с op.vrAttrByName("nameoper").vrValue="-1"
+ Благодарностей: 1

tur