Изменение литеры: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 17: | Строка 17: | ||
SetProgressBarData_and_CheckUserBreak, | SetProgressBarData_and_CheckUserBreak, | ||
CloseProgressBarForm | CloseProgressBarForm | ||
Если у вас используется более ранняя версия Search и вы не удалите эти строки - это будет | Если у вас используется более ранняя версия Search и вы не удалите эти строки - это будет | ||
приводить к сбоям. Получить обновление, в котором уже имеются эти API-функции для Search 11 | приводить к сбоям. Получить обновление, в котором уже имеются эти API-функции для Search 11 | ||
Строка 25: | Строка 24: | ||
Ниже приводится код сценария: | Ниже приводится код сценария: | ||
newLitera = "О3" | newLitera = "О3" | ||
call ChangeLetter | call ChangeLetter | ||
Sub ChangeLetter | Sub ChangeLetter | ||
set SelItems = s4app.GetSelectedItems 'получение интерфейса отметок | |||
SelectedCount = SelItems.SelectedCount | |||
partsComplete = 0 | |||
if SelectedCount > 0 then | |||
text2 = "Обработано 0 из "& SelectedCount | |||
s4app.ShowProgressBarForm "Изменение литеры", "Изменение литеры у отмеченных документов/объектов", text2, SelectedCount | |||
while Selitems.NextSelected <> 0 'цикл по отмеченным записям | |||
DocID = SelItems.ActiveDocID 'инвентарный номер отмеченного документа | |||
if DocID > 0 then | |||
s4app.OpenDocument(DocID) 'делаем документ текущим, чтобы можно было пользоваться функциями API для работы с ним | |||
s4app.OpenDocArticles( DocID ) | |||
artCount = s4app.GetArticlesCount 'получаем количество вариантов исполнений изделия по данному документу | |||
for j = 0 to artCount-1 'цикл по вариантам исполнений | |||
ArtID = s4app.GetDocArticleID( j ) | |||
if ArtID > 0 then | |||
s4app.OpenArticle( ArtID ) | |||
oldLetter = s4app.GetFieldValue_Articles( "Литера" ) | |||
if newLitera <> oldLetter then | |||
s4app.SetFieldValue_Articles "Литера", newLitera | |||
end if | |||
end if | |||
next | |||
else | |||
ArtID = SelItems.ActiveArtID | |||
if ArtID > 0 then | |||
s4app.OpenArticle( ArtID ) | |||
oldLetter = s4app.GetFieldValue_Articles( "Литера" ) | |||
if newLitera <> oldLetter then | |||
s4app.SetFieldValue_Articles "Литера", newLitera | |||
end if | |||
end if | |||
end if | |||
SelItems.InvertCurrent | |||
partsComplete = partsComplete + 1 | |||
text2 = "Обработано " & partsComplete & " из " & SelectedCount | |||
UserBreak = s4app.SetProgressBarData_and_CheckUserBreak( "", text2, partsComplete ) | |||
if UserBreak > 0 then | |||
s4app.CloseProgressBarForm | |||
exit sub | |||
end if | |||
Wend | |||
s4app.CloseProgressBarForm | |||
end if | |||
end Sub | end Sub | ||
[[Category:Примеры инструментов]] | [[Category:Примеры инструментов]] |
Версия от 15:46, 27 октября 2010
Этот сценарий на языке VBScript позволяет изменить "Литера" в карточках отмеченных документов или объектов без взятия документов на редактирование.
В случае, если отмечены групповые документы, скрипт изменит литеру для всех вариантов исполнения изделия. Обратите внимание, что в этом примере не производится анализ литеры, которая была ранее присвоена изделию. При необходимости такого анализа - модифицируйте скрипт самостоятельно.
В этом примере также демонстрируется как можно при написании инструментов для Search использовать форму с прогресс-баром, отображающим ход выполнения скрипта. Эта форма позволяет также прервать выполнение скрипта, если пользователь нажмет кнопку "Отмена".
API-функции, позовляющие показывать форму с прогресс-баром были добавлены в обновления к Search 11 и 12 версии, начиная с 1.11.2010. Если у вас используется Search более старой версии - вам необходимо удалить строки в этом примере скрипта, в которых используются API-функции
ShowProgressBarForm, SetProgressBarData_and_CheckUserBreak, CloseProgressBarForm
Если у вас используется более ранняя версия Search и вы не удалите эти строки - это будет приводить к сбоям. Получить обновление, в котором уже имеются эти API-функции для Search 11 и 12 версии вы можете, обратившись в техподдержку Интермех cad@intermech.ru.
Ниже приводится код сценария:
newLitera = "О3" call ChangeLetter Sub ChangeLetter set SelItems = s4app.GetSelectedItems 'получение интерфейса отметок SelectedCount = SelItems.SelectedCount partsComplete = 0 if SelectedCount > 0 then text2 = "Обработано 0 из "& SelectedCount s4app.ShowProgressBarForm "Изменение литеры", "Изменение литеры у отмеченных документов/объектов", text2, SelectedCount while Selitems.NextSelected <> 0 'цикл по отмеченным записям DocID = SelItems.ActiveDocID 'инвентарный номер отмеченного документа if DocID > 0 then s4app.OpenDocument(DocID) 'делаем документ текущим, чтобы можно было пользоваться функциями API для работы с ним s4app.OpenDocArticles( DocID ) artCount = s4app.GetArticlesCount 'получаем количество вариантов исполнений изделия по данному документу for j = 0 to artCount-1 'цикл по вариантам исполнений ArtID = s4app.GetDocArticleID( j ) if ArtID > 0 then s4app.OpenArticle( ArtID ) oldLetter = s4app.GetFieldValue_Articles( "Литера" ) if newLitera <> oldLetter then s4app.SetFieldValue_Articles "Литера", newLitera end if end if next else ArtID = SelItems.ActiveArtID if ArtID > 0 then s4app.OpenArticle( ArtID ) oldLetter = s4app.GetFieldValue_Articles( "Литера" ) if newLitera <> oldLetter then s4app.SetFieldValue_Articles "Литера", newLitera end if end if end if SelItems.InvertCurrent partsComplete = partsComplete + 1 text2 = "Обработано " & partsComplete & " из " & SelectedCount UserBreak = s4app.SetProgressBarData_and_CheckUserBreak( "", text2, partsComplete ) if UserBreak > 0 then s4app.CloseProgressBarForm exit sub end if Wend s4app.CloseProgressBarForm end if end Sub