Изменение литеры

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

Этот сценарий на языке 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