Изменение литеры: различия между версиями

Материал из Intermech Wiki
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 32: Строка 32:


newLitera = "О3"<br />
newLitera = "О3"<br />
<br />
call ChangeLetter<br />
call ChangeLetter<br />
<br />
Sub ChangeLetter<br />
Sub ChangeLetter<br />
   set SelItems = s4app.GetSelectedItems 'получение интерфейса отметок
   set SelItems = s4app.GetSelectedItems 'получение интерфейса отметок

Версия от 15:20, 26 июля 2011

Этот сценарий на языке VBScript позволяет изменить поле "Литера" в карточках отмеченных документов или объектов без взятия документов на редактирование.


В случае, если отмечены групповые документы, скрипт изменит литеру для всех вариантов исполнения изделия. Обратите внимание, что в этом примере не производится анализ литеры, которая была ранее присвоена изделию. При необходимости такого анализа - модифицируйте скрипт самостоятельно.


В этом примере также демонстрируется как можно при написании инструментов для Search использовать форму с прогресс-баром, отображающим ход выполнения скрипта. Эта форма позволяет также прервать выполнение скрипта, если пользователь нажмет кнопку "Отмена".


API-функции, позовляющие показывать форму с прогресс-баром были добавлены в обновления к Search 11 и 12 версии, начиная с 1.11.2010. Если у вас используется Search более старой версии - вам необходимо удалить строки в этом примере скрипта, в которых используются API-функции

  • procedure ShowProgressBarForm( const FormTitle: WideString; const Text1: WideString; const Text2: WideString; TotalParts: Integer);
  • function SetProgressBarData_and_CheckUserBreak( const Text1: WideString; const Text2: WideString; PartsComplete: Integer): Integer;
  • procedure CloseProgressBarForm;

Если у вас используется более ранняя версия Search и вы не удалите эти строки - это будет приводить к сбоям. Получить обновление, в котором уже имеются эти API-функции для Search 11 и 12 версии вы можете, обратившись в техподдержку Интермех cad@intermech.ru.


Для добавления этого сценария в меню "Инструменты" в Search выполните Инструменты/Настроить, кнопка "Добавить инструмент", выберите тип инструмента - "Сценарий", укажите язык сценария - VBScript, нажмите кнопку "Код сценария" и вставьте ниже приведенный код сценария.


Ниже приводится код сценария (изменено 26.07.2011 - исправлена ошибка):

newLitera = "О3"

call ChangeLetter

Sub ChangeLetter

 set SelItems = s4app.GetSelectedItems 'получение интерфейса отметок
 SelectedCount = SelItems.SelectedCount
 partsComplete = 0 
if SelItems.FirstSelected = 1 then 'переход к первой отмеченной записи text2 = "Обработано 0 из "& SelectedCount s4app.ShowProgressBarForm "Изменение литеры", "Изменение литеры у отмеченных документов/объектов", text2, SelectedCount For i = 1 to SelItems.SelectedCount 'цикл по отмеченным записям 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 SelItems.NextSelected 'переход к следующей отмеченной записи next s4app.CloseProgressBarForm end if

end Sub