Форумы Интермех
 ° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° 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


всё получилось с рекурсией)

Ваш ответ

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL 
...



Перед отправкой "нелатинского" текста проверьте кодировку броузера!
 » Логин  » Пароль 
 

На форуме сейчас: гостей - 1
пользователей - 0
Наибольшее количество посетителей: 87 [1 Янв 2017 02:23:26]
гостей - 87 / пользователей - 0


miniВВ © 2001-2022