Форумы Интермех
 ° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° RSS ° Wiki °

Форумы Интермех / Search, ImProject / Отчет по составу объекта
Автор Сообщение
Kimi
Участник
AO ЗКМК

Дата: 8 Ноя 2011 15:59:09


Всем доброго дня. Помогите решить вопрос - в Search 9, не получается вывести параметр "количество" для деталей входящих в сборку. Выделяю весь состав в дереве состава и выполняю сценарий, выводится "обозначение" и "наименование", но не могу понять как вывести количество для каждой позиции? Пожалуйста прошу помочь, может кто сталкивался.

Set excel = CreateObject("excel.application") 'создаем объект excel
excel.Visible = True
set wbook = excel.Workbooks.Add 'добавляем чистую книгу
set WS = Excel.ActiveSheet
excel.ScreenUpdating = False 'временно выключаем прорисовку
defColWidth = 25
'задаем размеры столбцов
excel.Columns(1).ColumnWidth = defColWidth / 3
excel.Columns(2).ColumnWidth = defColWidth
excel.Columns(3).ColumnWidth = defColWidth * 2
excel.Columns(4).ColumnWidth = defColWidth / 2
excel.Columns(4).NumberFormat = 0
excel.Cells.Item(1,1) = "Отчет сгенерирован" & Time & " " & Date & ""
'вывод информации об отчете
'добавляем заголовки
excel.Range("A2","E2").Font.ColorIndex = 5
excel.Range("A2","E2").Font.Underline = true 'подчеркивание
ws.Cells.Item(2, 1).Value = "№"
ws.Cells.Item(2, 2).Value = "Обозначение"
ws.Cells.Item(2, 3).Value = "Наименование"
ws.Cells.Item(2, 4).Value = "Количество"
Set SelItems = s4app.GetSelectedItems 'получение интерфейса отметок
if SelItems.FirstSelected = 1 then 'переход к первой отмеченной записи
For i = 1 to Selitems.SelectedCount 'цикл по отмеченным записям
id = SelItems.ActiveArtId 'идентификатор отмеченного объекта
if id > 0 then
s4app.OpenArticle(id) 'делаем объект текущим, чтобы можно было пользоваться функциями API для работы с ним
ws.Cells.Item(i + 2, 1).Value = i
ws.Cells.Item(i + 2, 2).Value = s4app.GetFieldValue_Articles("Обозначение")
ws.Cells.Item(i + 2, 3).Value = s4app.GetFieldValue_Articles("Наименование")
end if
SelItems.NextSelected 'переход к следующей отмеченной записи
Next
end if
excel.ScreenUpdating = True 'включаем прорисовку

freestyler
Участник
ОАО "Новая ЭРА", СПб

Дата: 8 Ноя 2011 16:11:55


"Количество" не является параметром объекта, это параметр связи (вхождения объекта в другой объект). Надо обрабатывать саму сборку процедурой OpenArticleStructureExpanded (если не ошибаюсь, OpenArticleStructure количества не дает), а потом получать количество с помощью asGetArtCount. Это описано в руководстве программиста, пункт 19.12

Jk
Участник
НПП Интермех

Дата: 8 Ноя 2011 17:31:18


Цитата: freestyler
(если не ошибаюсь, OpenArticleStructure количества не дает)

ошибаетесь

Denis_Rogulev
Участник
Санкт-Петербург. Кировский завод

Дата: 9 Ноя 2011 12:35:48 ° Поправил: Denis_Rogulev


Kimi, вы пытаетесь получить количество у отмеченных объектов? так не получится.


на java примерно так:


if (typeof(S4App) == "undefined")
{
SApp = new ActiveXObject("S4.TS4App");
SApp.Login();
}
else
SApp = S4App; //цепляемся к S4


DocID = SApp.ActiveDocID; // ID текущего документа
SApp.OpenDocument(DocID); //Открываем документ
ArtID=SApp.GetArtID_ByDocID(DocID); //Получаем ID объекта
SApp.OpenArticle(ArtID); // Открываем объект

SApp.OpenArticleStructure(ArtID); //открываем состава изделия. Если надо получить развернутый состав с подузлами надо использовать OpenArticleStructureExpanded

SApp.First; //Встаем на первый объект в открытом составе

while (SApp.asEof() == 0) //Выполняем пока не добрались до последнего объекта в составе
{
ArtID_in = SApp.asGetArtDesignation(); //обозначение текущего объекта в составе
ArtID_name_in = SApp.asGetArtName(); //наименование текущего объекта в составе
count_in=SApp.asGetArtCount(); //количество текущего объекта в составе

// все остальное что надо

SApp.asNext(); //переходим на следующий объект в составе.

}


Примерно так

Kimi
Участник
AO ЗКМК

Дата: 9 Ноя 2011 14:26:02 ° Поправил: Kimi


freestyler, Jk благодарю за подсказки!

Denis_Rogulev да, пытался! спасибо, вот только понял это...
большое спасибо за пример, правда только увидел ваш пост, пока еще не попробовал!

у меня тоже получилось - создается excel документ куда выводится полный список объектов (наименование, обозначение и кол-во!) которые входят в состав указанного объекта выбранного пользователем:

'как сформировать объект Excel см. первый пост
s4app.StartSelectArticles 'подготовка вывода диалога выбора объекта
s4app.SelectArticles 'выводим на экран окно выбора объекта
id = s4app.GetSelectedArticleID(0) 'получаем инвентарный номер выбранного объекта
s4app.OpenArticleStructureExpanded(id) 'готовим список объектов входящих в состав выбранного объекта
s4app.EndSelectArticles 'закрываем список выбранных объектов
x = s4app.asCount 'количество записей в составе объекта
s4app.asFirst 'переходим на первый элемент
For i = 1 to x 'цикл по всем записям
it = s4app.asGetArtID 'индентификатор отмеченного объекта
if id > 0 then
s4app.OpenArticle(it) 'делаем объект текущим, чтобы можно было пользоваться функциями API для работы с ним
ws.Cells.Item(i + 2, 1).Value = i
ws.Cells.Item(i + 2, 2).Value = s4app.GetFieldValue_Articles("Обозначение")
ws.Cells.Item(i + 2, 3).Value = s4app.GetFieldValue_Articles("Наименование")
ws.Cells.Item(i + 2, 4).Value = s4app.asGetArtCount
end if
s4app.asNext
'SelItems.NextSelected 'переход к следующей отмеченной записи
Next
'end if
s4app.CloseArticleStructure
excel.ScreenUpdating = True 'включаем прорисовку

p.s. я не программер, извините если кривовато... но может кому пригодится.

Kimi
Участник
AO ЗКМК

Дата: 9 Ноя 2011 14:38:32


теперь когда все заработало возник следующий вопрос:

процедура OpenArticleStructureExpanded готовит полный список объектов, которые непосредственно или косвенно (через подузлы) входят в состав каждого объекта - это конечно очень удобно, но создается список с подсчетом полного количества каждого из объектов с учетом их применения в различных подузлах (суммирует количество из всех подузлов сборки). Есть ли способ вывести так как есть, без этого учета? Конечно есть вариант использовать процедуру OpenArticleStructure но тогда состав и количество приходится формировать одтельно для каждого подузла...

Special
Участник
Россия

Дата: 9 Ноя 2011 15:46:20


А можно и так

set s4com = CreateObject("S4.TS4App")
s4com.Login
Set excel = CreateObject("excel.application")
set wbook = excel.Workbooks.Add
set WS = Excel.ActiveSheet
'---Шапка отчета-----
excel.Columns(1).ColumnWidth = 10
excel.Columns(2).ColumnWidth = 20
excel.Columns(3).ColumnWidth = 30
excel.Columns(4).ColumnWidth = 10
excel.Cells(1,1).font.bold=true
excel.Cells(1,2).font.bold=true
excel.Cells(1,3).font.bold=true
excel.Cells(1,4).font.bold=true
excel.Cells.Item(1,1) = "Поз."
excel.Cells.Item(1,2) = "Обозначение"
excel.Cells.Item(1,3) = "Наименование"
excel.Cells.Item(1,4) = "Кол-во"
excel.visible = True
pos = 1
'---Выбор объектов-----
s4com.StartSelectArticles
s4com.SelectArticles
for i=0 to s4com.SelectedArticlesCount-1
ARTID = s4com.GetSelectedArticleID(i)
s4com.OpenArticle (ARTID)
pos = pos+1
Excel.Cells.Item(pos, 2) = s4com.GetFieldValue_Articles("Обозначение")
Excel.Cells.Item(pos, 2).font.bold=true
Excel.Cells.Item(pos, 3) = s4com.GetFieldValue_Articles("Наименование")
Excel.Cells.Item(pos, 3).font.bold=true
s4com.closeArticle
' состав объекта
s4Com.OpenQuery ("select a.positio, b.designatio, b.name, a.count_pc from pc a, articles b where proj_aid= " & ARTID & " and a.part_aid=b.art_id order by positio")
s4com.QueryGoFirst
for j=0 to s4com.QueryRecordCount-1
pos = pos+1
Excel.Cells.Item(pos, 1) = s4com.QueryFieldByName("POSITIO")
Excel.Cells.Item(pos, 2) = s4com.QueryFieldByName("DESIGNATIO")
Excel.Cells.Item(pos, 3) = s4com.QueryFieldByName("NAME")
Excel.Cells.Item(pos, 4) = s4com.QueryFieldByName("count_pc")
s4com.QueryGoNext
next
Next
s4com.EndSelectArticles

Kimi
Участник
AO ЗКМК

Дата: 10 Ноя 2011 09:14:21


Special вот это вообще куртотень! большое спасибо!

Ваш ответ

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



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

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


miniВВ © 2001-2021