° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° RSS ° Wiki ° |
Форумы Интермех / Search, ImProject / Тип объекта |
Автор | Сообщение |
Geksa Участник МВЗ им.Миля |
Дата: 24 Сен 2012 10:09:51 В какой таблице можно просмотреть числовой код типа объекта? |
Denis_Rogulev Участник Санкт-Петербург. Кировский завод |
Дата: 24 Сен 2012 11:17:47 В базе SEARCH таблица SSECTIONS |
Jk Участник НПП Интермех |
Дата: 24 Сен 2012 17:18:09 А зачем в таблице? Запустить Search Admin - открыть свойства типа и там посмотреть. |
Geksa Участник МВЗ им.Миля |
Дата: 25 Сен 2012 09:44:07 Спасибо. |
Geksa Участник МВЗ им.Миля |
Дата: 25 Сен 2012 14:52:12 С помощью какой функции можно получить идентификатор последней версии объекта? |
Denis_Rogulev Участник Санкт-Петербург. Кировский завод |
Дата: 25 Сен 2012 16:44:11 ° Поправил: Denis_Rogulev смотрите описание функций OpenVArticles GetVArticlesCount и GetVArticleID |
Geksa Участник МВЗ им.Миля |
Дата: 5 Мар 2013 09:29:30 Есть сборка_1 с одной 0-ой версией. В нее входит подсборка_2 уже с 2 версиями, состав которых различен. Используя процедуру OpenArticleStructureExpanded( ArtID : Integer ), передавая в качестве ArtID идентификатор сборки_1, я получаю состав по всем нулевым версиям входящих подсборок. А как получить состав по последним версиям? |
Katenok-13 Участник ОАО "Бийский котельный завод" |
Дата: 5 Мар 2013 10:19:40 С этим всё очень запутанно и сложно. Сами недавно разбирались с техподдержкой. Пришли только к единственному решению, что функции, работающие с ArtID, правильно работают, когда нет версий. А функции, работающие с VArtID более-менее выдают нужный результат (но тоже не 100%). В данный момент мы используем функции состава одного уровня, в цикле выгружая все подчинённые сборки. |
noku4 Участник Спб, "НИИЭФА-ЭНЕРГО" |
Дата: 5 Мар 2013 10:32:45 Сейчас стоит такая задача получить состав. Пока разрабатывается. Суть- записывать состав в массив. Но проблема в том, что OpenArticleStructure() нельзя открыть второй раз, не закрыв первый. В итоге получаем состав 1 уровня в виде команды "Состоит из", т.е. в видепросто набора компонентов. |
Geksa Участник МВЗ им.Миля |
Дата: 5 Мар 2013 13:24:24 OpenArticleStructure(ArtID ) можно передавать в качестве ArtID идентификатор версии изделия? |
Katenok-13 Участник ОАО "Бийский котельный завод" |
Дата: 7 Мар 2013 05:13:05 Цитата: noku4 Сейчас стоит такая задача получить состав.Состав мы выгружаем уже 6 лет, в различные системы. Могу поделиться опытом (skype katenok-13). Если в двух словах, то составляется список объектов на выгрузку - сначала это выбранные в Search, дальше в него же добавляются объекты из состава текущего объекта. И этот список по одному объекту обрабатывается. Для текущего объекта выгружаются основные параметры, заготовки, состав, техпроцессы, маршруты. Цитата: Geksa OpenArticleStructure(ArtID ) можно передавать в качестве ArtID идентификатор версии изделия?Нет. Нужно использовать PrepareVArticleStructure. |
noku4 Участник Спб, "НИИЭФА-ЭНЕРГО" |
Дата: 11 Мар 2013 10:28:25 Цитата: Katenok-13 Состав мы выгружаем уже 6 лет, в различные системы. Могу поделиться опытом (skype katenok-13).добавил в скайп (noke_43). Буду рад помощи. |
Geksa Участник МВЗ им.Миля |
Дата: 11 Мар 2013 10:43:58 PrepareVArticleStructure(VArtID, Expanded: Integer; const OrderBy: WideString; out Data: OleVariant) - как здесь из out Data: OleVariant получить массив объектов? |
LLirik Участник НПО "Автоматика" |
Дата: 11 Мар 2013 12:07:50 Возможно не верно, но попробуйте в TClientDataSet.Data закинуть это значение (Delphi). |
noku4 Участник Спб, "НИИЭФА-ЭНЕРГО" |
Дата: 11 Мар 2013 13:24:20 А может может кто выложить кусок скрипта, где получают состав обьекта до 1 уровня? Важна реализация |
Geksa Участник МВЗ им.Миля |
Дата: 11 Мар 2013 14:02:30 var cds:TClientDataSet; artsData: OleVariant; ... s4Application.PrepareVArticleStructure(vartId, 0, 'NAME', artsData); cds.Data:=artsData;//здесь неверно, вылетает Что не так делаю? |
Katenok-13 Участник ОАО "Бийский котельный завод" |
Дата: 12 Мар 2013 05:20:20 Цитата: noku4 добавил в скайп (noke_43). Буду рад помощи.Пропустила сообщение, добавьте ещё раз. Цитата: noku4 А может может кто выложить кусок скрипта, где получают состав обьекта до 1 уровня? Важна реализацияМогу поделиться кодом, но сюда полный код процедуры не влезет. Цитата: Geksa cds.Data:=artsData;//здесь неверно, вылетает Тоже мучилась раньше. Хорошо работает с ClientDataSet'ом, расположенном на форме - видимо, он как-то инициализируется правильнее. |
LLirik Участник НПО "Автоматика" |
Дата: 12 Мар 2013 13:49:48 Прошу прощения, но вы надеюсь не забываете создать эту переменную? var cds:TClientDataSet; ... begin ... cds=TClientDataSet.Create(nil); ... cds.Data:= ... end; |
Geksa Участник МВЗ им.Миля |
Дата: 19 Мар 2013 09:08:17 Можно рекурсией получить состав изделия? Делаю так: ... s4Application.PrepareVArticleStructure(vartId, 0, 'NAME', artsData); ClientDataSet1.Data:=artsData; ShowMessage(IntToStr(ClientDataSet1.RecordCount)); ClientDataSet1.Open; ClientDataSet1.First; while not ClientDataSet1.Eof do begin getRecChildren( ClientDataSet1.FieldByName('VART_ID').asInteger); ClientDataSet1.Next; end; ClientDataSet1.Close; ... function getRecChildren(VART_ID:Integer):AnsiString; var cdsChildren:TClientDataSet; artsDataRec: OleVariant; begin cdsChildren.Create(nil); s4Application.PrepareVArticleStructure(VART_ID, 0, 'NAME', artsDataRec); cdsChildren.Data:=artsDataRec; cdsChildren.open; cdsChildren.First; while not cdsChildren.Eof do begin ShowMessage(cdsChildren.FieldByName('VART_ID').AsString); getRecChildren(cdsChildren.FieldByName('VART_ID').asInteger); cdsChildren.Next; end; cdsChildren.Close; end; При вызове рекурсивной функции, пишет, что не может выполнить эту операцию на открытом Dataset. |
noku4 Участник Спб, "НИИЭФА-ЭНЕРГО" |
Дата: 19 Мар 2013 09:56:02 ° Поправил: noku4 Рекурсией нельзя, нужно закрыть состав. Такая же задача стояла, но в итоге получается либо 1 уровень, либо полный состав. Если можно как-то обойти, буду рад помощи. |
Geksa Участник МВЗ им.Миля |
Дата: 19 Мар 2013 10:22:52 Как же без рекурсии? Заранее неизвестно количество уровней вложенности. А если брать весь состав, то он берется по нулевой ревизии, а нам нужно по последней. |
Katenok-13 Участник ОАО "Бийский котельный завод" |
Дата: 19 Мар 2013 10:59:01 Всё делается достаточно просто, но не в двух строчках, конечно. Расскажу кратко мой алгоритм выгрузки состава (на данный момент он нас вполне устраивает и позволяет легко модифицировать под новые требования). На нашем заводе активно используется уже третья программа выгрузки состава и технологии в другие системы, структуры данных меняются, но суть остаётся. 1. Создаём список объектов. DataSet или отдельная таблица - как удобнее. На нулевой итерации помещаем туда список объектов, выбранных вручную (art_id и ver_id вполне достаточно). 2. Пока наш список не станет пустым (или поле "готов" не у всех заполнено, или ещё какой-то признак), перебираем по одному объекту. Список в цикле будет пополняться, т.е. изначально предполагаемое количество итераций не совпадёт с конечным. 3. Для каждого объекта получаем актуальную или другую необходимую версию (у нас есть и задача выгрузки состава по извещению, находящемуся на согласовании), получаем состав 1 уровня. Построчно записываем туда, куда нужно (опять же - dbf, sql и т.д.). Если нужен развёрнутый состав, каждый объект из состава добавляем в список объектов из п.1 (уникальность объектов в списке отслеживаем либо в момент добавления, либо при выборе на обработку). Список постепенно наполняется, включая в себя все объекты состава. 4. Когда весь список обработан, получаем полный развёрнутый состав. Основные моменты, на которые нужно обратить внимание: - Необходимо продумать и создать структуру данных (dbf, sql и т.п.), куда помещаются данные. Ведь они же для чего-то нужны, а не просто так. В крайнем случае, можно создать свои таблицы в той же базе Search. - Необходимо отслеживать уникальность объектов в списке на выгрузку. Потому что если узел входит в изделие через два разных узла, он попадёт в список два раза, а это потом выльется в удвоенный состав. - Обработка объектов по одному позволяет добавлять дополнительные обработки внутри процедуры, не ограничиваясь доступными функциями получения состава. На возникающие вопросы могу отвечать в skype (katenok-13) в рабочее время (8:00-17:00 МСК+3). |
Geksa Участник МВЗ им.Миля |
Дата: 19 Мар 2013 11:41:30 Добавила в Скайп. Вам пришел запрос? Geksa Geksa. |
Katenok-13 Участник ОАО "Бийский котельный завод" |
Дата: 19 Мар 2013 12:57:22 Цитата: Geksa Добавила в Скайп. Вам пришел запрос? Geksa Geksa.Добавила, но вы офлайн. |
Jk Участник НПП Интермех |
Дата: 19 Мар 2013 14:24:02 Geksa у вас почти все правильно, кроме Цитата: Geksa cdsChildren.Create(nil);смотрите как правильно в сообщении от LLirik |
Geksa Участник МВЗ им.Миля |
Дата: 22 Мар 2013 13:14:12 всё получилось с рекурсией) |
На форуме сейчас: гостей - 1 пользователей - 0 |
Наибольшее количество посетителей: 87 [1 Янв 2017 02:23:26] гостей - 87 / пользователей - 0 |
miniВВ © 2001-2024 |