Тема: Некоторые замечания и советы по использованию TechnologiCS АПИ

Проблема Как поднять скорость выполнения скрипта при работе с большим набором данных.

Здесь небольшие примеры, показывающие как можно значительно повысить скорость работы в таких случаях

Возьмите большой набор данных (>10 тысяч строк) и выполните такой пример (пробежка по набору данных)

1.1. Простая пробежка по набору данных( пример 1 )

Sub FormMacro_Test(TCSActiveModule)
  TCSActiveModule.First
  Call TCSApp.ShowMessageBox( "", "Start" )
  While Not TCSActiveModule.Eof
    Call TCSActiveModule.Next    
  Wend
End Sub

1.2 Простая пробежка по набору данных( пример 2, с большим ускорением )

Sub FormMacro_Test(TCSActiveModule)
  TCSActiveModule.First
  Call TCSApp.ShowMessageBox( "", "Start" )
  Call TCSActiveModule.BeginUpdate
  While Not TCSActiveModule.Eof
    Call TCSActiveModule.Next    
  Wend
  Call TCSActiveModule.EndUpdate
  Call TCSApp.ShowMessageBox( "", "End" )
End Sub


2.1. Чтение данных в цикле пробежки по данным

Sub FormMacro_Test(TCSActiveModule)
  TCSActiveModule.First
  Call TCSApp.ShowMessageBox( "", "Start" )
  Call TCSActiveModule.BeginUpdate
  While Not TCSActiveModule.Eof
    For I = 0 To TCSActiveModule.PropertiesCount-1
      If TCSActiveModule.Properties(i).IsSimpleType Then  D = TCSActiveModule.Properties(i).Value
    Next
    Call TCSActiveModule.Next    
  Wend
  Call TCSActiveModule.EndUpdate
  Call TCSApp.ShowMessageBox( "", "End" )
End Sub

2.2. Чтение данных в цикле пробежки по данным ( со значительным ускорением)

Sub FormMacro_Test(TCSActiveModule)
  TCSActiveModule.First
  Call TCSApp.ShowMessageBox( "", "Start" )
  Call TCSActiveModule.BeginUpdate
  Dim Props(100)
  For I = 0 To TCSActiveModule.PropertiesCount-1
    If TCSActiveModule.Properties(i).IsSimpleType Then 
        Set Props(I) = TCSActiveModule.Properties(i)
      Else 
        Set Props(I) = Nothing
    End If
  Next
  While Not TCSActiveModule.Eof
    For I = 0 To TCSActiveModule.PropertiesCount-1
      If Not Props(I) Is Nothing Then D = Props(I).Value
    Next
    Call TCSActiveModule.Next    
  Wend
  Call TCSActiveModule.EndUpdate
  Call TCSApp.ShowMessageBox( "", "End" )
End Sub

Re: Некоторые замечания и советы по использованию TechnologiCS АПИ

Пример как желательно обрабатывать ошибки при работе программы, не теряя информацию об ошибке, а обрабатывая ее с показом нормального сообщения пользователю.

Sub Test                   
    'On Error Resume Next - Указывает, что возникновение ошибки выполнения приводит к передаче управления на инструкцию,
    'непосредственно следующую за инструкцией, при выполнении которой возникла ошибка.
    On Error Resume Next 'начало блока обработки ошибок.  
    a = 12/0  ' деление на 0                      
    If Err Then    'если произошла ошибка, то обрабатываем её  
        'Err.Description - описание ошибки
        'Err.Source      - где произошла ошибка       
        Call TCSApp.ShowMessageBox(Err.Source, "Описание: "+Err.Description)        
        Err.Clear ' очищаем информацию об ошибке
    End If                       
    Set b = CreateObject( "NoObject.ThisIsObject" )
    If Err Then    'если произошла ошибка, то обрабатываем её  
        'Err.Description - описание ошибки
        'Err.Source      - где произошла ошибка       
        Call TCSApp.ShowMessageBox(Err.Source, "Описание: "+Err.Description)        
        Err.Clear ' очищаем информацию об ошибке
    End If                       
    On Error goto 0 ' останавливаем обработку ошибок              
End Sub

Пример  как самому сгенерировать ошибку и таким образом прервать выполнение кода (и отлавливать ошибку если нужно)

Function TestRaise(a, b) 
    TestRaise = 0
    If b = 0 Then  
        Call Err.Raise(100, "TestRaise", "Деление на 0 [ "+CStr(a)+"/0 ]") 
    Else  
        TestRaise = a / b    
    End If
End Function
         
Sub Test2 
    'Err.Raise(number[, source, description, helpfile, helpcontext])
    On Error Resume Next 'начало блока обработки ошибок.    
        Call TestRaise(12, 0)                            
        If Err Then    'если произошла ошибка, то обрабатываем её       
            Call TCSApp.ShowMessageBox(Err.Source, "Описание: "+Err.Description)        
            Err.Clear ' очищаем информацию об ошибке
        End If                       
    On Error goto 0 ' останавливаем обработку ошибок              
End Sub