° Начало ° Ответить ° Статистика ° Регистрация ° Поиск ° 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 вот это вообще куртотень! большое спасибо! |
На форуме сейчас: гостей - 1 пользователей - 0 |
Наибольшее количество посетителей: 87 [1 Янв 2017 02:23:26] гостей - 87 / пользователей - 0 |
miniВВ © 2001-2024 |