Заказ звонка

Закрыть

*
*
*

Отключение прорисовки и прогрессбар во ремя работы скрипта

Страницы: 1
RSS
Отключение прорисовки и прогрессбар во ремя работы скрипта
Доброго дня!

Есть ли возможность отключения прорисовки выполняемых действий (например в случае прохода по множеству позиций спецификации расчётного документа) для ускорения работы скрипта? И есть ли в api возможность отображать прогрессбар, чтобы пользователь не боялся, что всё зависло?

И если есть, то как?

С уважением,
Дмитрий.
Приветствую.

Если есть доступ к скрипту, то закомментируйте строки, котрые начинаются так:
Call TCSApp.ShowProgressMessage

Ну и ответ на вторую часть вопроса. Для отображение прогресс бара во время длительной операции используйте
Call TCSApp.ShowProgressMessage ("Основной текст","Дополнительный текст")
а для скрытия прогресс бара
TCSApp.HideProgressMessage
Со второй частью вопроса разобрался, спасибо! )

А вот с первой чуть-чуть иначе.
Имеется ввиду самописный скрипт. Он пробегает по спецификации документа и творит всякое непотребство с параметрами. Делает он это довольно-таки не быстро, отрисовывая каждый переход на следующую строку. (Аттачем приложил гифку с изображением, от чего хочется избавиться.)

В Excel меня от этого спасало отключение отрисовки каждого действия. Время работы скрипта сокращалось с нескольких минут до нескольких секунд.
tmp_tcs_sp.gif (106.89 КБ) [ Скачать ]
Тут сложно ответить, не видя самого кода скрипта. Вполне возможно, что озвученный Вами способ не поможет и придется, например, использовать SQL запросы, или писать отдельную программу и подключать ее (как сделано для макросов "Производство и закупка комплектующих", "Расчёт себестоимости" и т.д.). В любом случае нужно видить текущую реализацию скрипта.
Здравствуйте,

Чтобы кардинально ускорить, надо использовать другую технологию. Делайте не скрипт "пробегающий по строчкам", а вытаскивайте нужные данные запросом (через "вьюхи"), обрабатывайте их программно и сохраняйте обратно в нужное место нужные значения. Таким образом можно получить ускорение на несколько порядков.
Андрей, текущая реализация основной части скрипта:
Код
'...
'SpVal - значение параметра

TCSActiveModule.First
Do While Not TCSActiveModule.EOF
   Set CalcDocsSpecParams = TCSActiveModule.Properties("Parameters").AsIDispatch
   CalcDocsSpecParams.First
   NoSp=True 
   Do While Not CalcDocsSpecParams.EOF
      If CalcDocsSpecParams.Properties("PAR_ID").AsSafeString = "1944" Then
         NoSp=False
      End If
      CalcDocsSpecParams.Next
   Loop
   If NoSp=True Then
      I=CalcDocsSpecParams.SetParameterValueByParId(1944, SpVal, 0, True)   
   End If   
   TCSActiveModule.Next
Loop
'...


Константин, а допустимо ли через вьюхи создавать параметры спецификаций расчётного документа?
view - это представление данных, которое используется для их чтения. Очень быстрого чтения.
Создавать, модифицировать и т.п. - это через API.
Для более быстрой работы я бы предложил сделать так:
1. Используя "Do While Not TCSActiveModule.EOF" получить список необходимых документов.
2. С помощью функции ExecSQL получить все привязанные параметры с необходимыми условиями (http://www.tcsdev.com/support/rukovodstvo_razrabotchika_tcs/index.html?itcs_application6_execsql.htm)
3. Для полученных значений выполнить "I=CalcDocsSpecParams.SetParameterValueByParId(1944, SpVal, 0, True)"

Т.е. относительно текущей реализации и логики необходимо только правильно написать SQL запрос и, наверно, все, но в итоге скорость работы вырастет в разы.
Андрей, так я, конечно, избавлюсь от проверки необходимости создания параметра на каждой позиции. Но ведь всё равно нужно будет на каждой строке сверяться со списком id, полученным из запроса?
Или есть способ получать интерфейс CalcDocsSpecParams сразу по id позиции спецификации?

Да, стоит уточнить, что новый параметр будет создаваться для подавляющего большинства позиций.
Изменено: dbudakov - 05.08.2014 15:37:07
Вот именно, что не придется сверяться! Вы получите список ID который передадите в SQL запрос:

Код
RowsCount = TCSActiveModule.SelectedRowsCount
If RowsCount > 0 Then                                  'есть ли выбранные строки
    For I = 0 To RowsCount - 1                         'перебираем выделенные записи
        If TCSActiveModule.GotoSelectedRow(I) Then     'позиционирование на очередную выделенную запись
            RecID =  RecID + TCSActiveModule.Properties("ID").AsSafeString + ", "
        End If     
    Next                      
Else                                                    
       TCSActiveModule.First                            'если выбранных строк нет, то используем все, что видны
    Do While Not TCSActiveModule.Eof
        RowsCount = RowsCount + 1
        RecID =  RecID + TCSActiveModule.Properties("ID").AsSafeString + ", "
    Call TCSActiveModule.Next
    Loop
End If                                                  
RecID = left(RecID,Len(RecID)-2)  


Dim SqlQuery
SqlQuery = "SELECT * FROM NMK" &_    
" WHERE NMKID IN ("& RecID &")" 


Ну а дальше SQL сервер сделает всю работу по поиску параметров и выдаст dModule объект, "пробежав" по которому создавайте нужные параметры.
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)