Переход на нижний уровень УТС в функции showme Вертикаль

Автор Leopold, 24.06.14, 15:14:34

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

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

Leopold

     Добрый день!

В функции showme прописал сравнение номера цеха в УТС и в операции ТП, если условие не выполняется, то выдается сообщение «Оборудование в цехе отсутствует».
Часто бывает, что технолог промахивается, выбирает не ту запись (см. УТС_1.JPG) и при нажатии кнопки «Применить»  появляется это сообщение. Кроме того, каждый раз проверять в нижнем уровне присутствует конкретная модель станка в цехе или нет утомительно. Технологи попросили сделать выбор станка в верхнем уровне (УТС.JPG), в функции прописать проверку присутствия конкретного оборудования в цехе и вставку  его в ТП.
   Помогите, пожалуйста,  как в функции showme перейти на нижний уровень, найти там нужный цех, вставить оборудование в ТП если находит?

tur

А может разбить оборудование в УТС по цехам?

Цех > Тип оборудования > Оборудование

P.S. Мы так уже 6 лет работаем. В принципе победить Вашу проблему, есть еще один способ, но он очень негуманный.

Leopold

  В своей САПР-ТП на прошлом месте работы так и было. Тут не кому заниматься УТС, все переделывать. Проще написать функцию)

tur

Тогда есть ряд вопросов, если не тяжело, то ответьте пожалуйста:
1. функция срабатывает если одно оборудование просто копируешь в другую операцию в Вертикали?
2. Если добавить оборудование, а потом поменять номер цеха в операции?

Leopold

1. Нет не срабатывает
2. И тут тоже не срабатывает

Мне нужно заносить оборудование в ТП с верхнего уровня, а на нижнем делать только проверку наличия в цехе.

tur

Тогда, не вижу смысла городить проверку в showmee.

Мы у себя сделали проверку номера цеха при выводе в карты, если цех оборудования не совпадает с цехом операции, то значение цеха в карту не выводится.

Leopold

 Так что, Вы, мне можете посоветовать? Мне нужно сделать проверку цеха именно в этой функции. А вот как попасть на нижний уровень, пока не знаю(

tur

Есть функция позволяющая получить атрибуты подчиненного объекта, в данном случае она забирает на операцию один из атрибутов оборудования. Попробуйте с ней что-либо сделать, вы выложили не все функцию showmee, поэтому проверить у меня не получилось. Может быть завтра по свободе посмотрю.
А текст функции вот:

Function equipment2_get( obj )
On Error Resume Next
  Set IT = obj.vrObjectsVector.vrCreateIterator("equipment",obj, TRUE)
  If it.vrFirst Then
   Set childparam = it.vrGetObject
    equipment2_get = childparam.vrAttrByName("kdgrp").vrValue
  End If
End Function

Дальше можно перепресвоить значения и проверять уже их.

P.S. Отпишитесь о результатах, интересно. Гуру Вертикали считают что не получится.

Leopold

Добрый день!
Так я раньше уже делал. Сегодня тоже эксперементировал. childparam не получает объект и поэтому при выполнении функции руготня
"...Требуется объект: childparam (6:3)"

Может есть другие варианты, как находясь физически на верхнем уровне, проверить есть ли нужный номер цеха на нижнем уровне?
Буду очень и очень благодарен всем кто поможет решить сию проблему!

tur

Цитата: Leopold от 25.06.14, 10:12:00
Добрый день!
Так я раньше уже делал. Сегодня тоже эксперементировал. childparam не получает объект и поэтому при выполнении функции руготня
"...Требуется объект: childparam (6:3)"
......

Проверьте синтаксис, у меня эта функция получает атрибуты с оборудования на операцию без проблем.
Вам не нужно получать объект, достаточно получить атрибут с оборудования "номер цеха", а потом сравнить его с атрибутом "номер цеха" на операции.

Leopold

Номер цеха на верхнем уровне не выводит, когда спускаешься на нижний уровень, только тогда возьмет. А это как раз делать не надо. Всю информацию нужно брать на верхнем уровне, на нижнем только проверять цех. Это нужно для того, чтобы ТП без косяков хранились в Лоцмане.

function ShowMe( obj )

  On Error Resume Next
  Set IT = obj.vrObjectsVector.vrCreateIterator("equipment",obj, TRUE)
  If it.vrFirst Then
   Set childparam = it.vrGetObject
    ShowMe = childparam.vrAttrByName("numbox").vrValue
  End If

end function

tur

Не нужно было вставлять функцию в ShowMe.

Создайте на операции атрибут с параметрами "функция", вытяните в него нужный вам атрибут оборудования и в ShowMe сравнивайте атрибуты (номер цеха на операции и полученный атрибут).

Leopold

И в этот атрибут с параметрами "функция" вставить Вашу функцию? Правильно Вас понимаю?

Leopold

Цитата: tur от 25.06.14, 14:43:52

Создайте на операции атрибут с параметрами "функция", вытяните в него нужный вам атрибут оборудования

Чуток подробнее можно?
В конфигураторе создать атрибут на веточке "Операция" или все же на "Оборудование"

tur

В конфигураторе на операцию создайте атрибут, например "ceh" поставьте ему опцию "Вычисляемый" (слева, тип атрибута). Извините, я там ранее ошибся в наименовании, не "Функция" а "Вычисляемый".
Вставьте в Чтение функцию,
Цитата: tur от 24.06.14, 17:02:06

Function equipment2_get( obj )
On Error Resume Next
  Set IT = obj.vrObjectsVector.vrCreateIterator("equipment",obj, TRUE)
  If it.vrFirst Then
   Set childparam = it.vrGetObject
    equipment2_get = childparam.vrAttrByName("kdgrp").vrValue
  End If
End Function


Функцию вставьте со своими параметрами (наименованием атрибутов).

В результате получите атрибут для операции с данными с оборудования и работайте в ShowMe дальше с этим атрибутом

Leopold

Все так и делал, но у меня ничего не выводит(
Наверно не срабатывает Set IT = obj.vrObjectsVector.vrCreateIterator("equipment",obj, TRUE)?
Пробовал посмотреть содержимое, тоже не получилось.

tur

Попробуйте заменить equipment на имя класса оборудования (hardware).

Выложите скрин атрибута, на котором видна функция.

Кстати, атрибут удалось получить на операцию, в Вертикали проверяли?

Leopold

numbox вычисляемый по этой функции. Подставлял разные параметры. Ничего не выводит, но и не ругается.
для проверки 012 выводило в ТП

tur

Не Функция а Вычисляемый!!!!



На скрине живой техпроцесс, в котором использованы на операции, атрибуты Исполнителя и Оборудования, вытащенные на операцию при помощи метода описанного мной.

Leopold

У нас ТП проектируют немного по другому. Не важно, функция или вычисляемый атрибут. Функция не желает работать. Потом все оформлю как надо, когда зарабатает. Пусть даже ошибочно) Завтра опять буду штурмовать эту проблему