Имя: Пароль:
1C
1С v8
MSScriptControl.ScriptControl AddCode
0 zladenuw
 
19.12.12
21:23
ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");
       ScrptCtrl.Language="vbscript";
       ScrptCtrl.AddCode("
Можно ли в данный код добавить несколько функций и получить значения ?
1 zladenuw
 
19.12.12
21:24
получаю ошибку
Ошибка при вызове метода контекста (AddCode): Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Предполагается наличие идентификатора


ScrptCtrl=Новый COMОбъект("MSScriptControl.ScriptControl");
       ScrptCtrl.Language="vbscript";
       ScrptCtrl.AddCode("
       |Function MkPropVal( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue
       |Dim oPropertyValue As New com.sun.star.beans.PropertyValue
       |If Not IsMissing( cName ) Then
       |        oPropertyValue.Name = cName
       |EndIf
       |If Not IsMissing( uValue ) Then
       |        oPropertyValue.Value = uValue
       | EndIf
       |MkPropVal() = oPropertyValue
       |End Function
       |Function oExpOptions()
       |    oExpOptions = Array(_
       |               MkPropVal( 'Overwrit', 'true'))
       |End Function
       |");
       MassivParametrovSave = ScrptCtrl.Run("oExpOptions");
2 Jaap Vduul
 
19.12.12
22:16
(1)
Запихнуть в ScriptControl код на обычном VB не получится.
В VBScript нет строгой типизации.
Интерпретатор не понимает, что такое "As String" и "As com.sun.star.beans.PropertyValue".
Также ему неведомы ключевое слово Optional и функция IsMissing.
Строковые константы в бэйсиках обозначаются двойными кавычками.
И т.д. и т.п.
3 Jaap Vduul
 
19.12.12
22:19
+(2)
И вообще, для работы с объектной моделью OO, в восьмёрке нет необходимости извращаться со ScriptControl...
4 zladenuw
 
19.12.12
22:30
5 zladenuw
 
19.12.12
23:02
6 zladenuw
 
20.12.12
12:15
(1,2) и все таки можно было так
script             = Новый COMОбъект("ScriptControl");
   script.Language     = "vbs";
   script.AddCode
   (
       "Dim Parameters()
       |  
       |Sub InitParameters(Size)
       |    
       |    Erase Parameters
       |
       |    If Size > 0 Then
       |        Redim Parameters(Size - 1)
       |    End If
       |
       |End Sub
       |    
       |Sub SetParameter(ServiceManager, Name, Value, Index)
       |
       |    Set PropertyValue     = ServiceManager.Bridge_GetStruct(""com.sun.star.beans.PropertyValue"")
       |    PropertyValue.Name     = Name
       |    PropertyValue.Value     = Value
       |    
       |    Set Parameters(Index) = PropertyValue
       |
       |End Sub
       |    
       |Sub SetBooleanParameter(ServiceManager, Name, Value, Index)
       |    
       |    SetParameter ServiceManager, Name, Cbool(Value), Index
       |
       |End Sub
       |
       |Function LoadDocument(ComponentLoader, URL, TargetFrameName, SearchFlags)
       |  
       |    Set LoadDocument = ComponentLoader.loadComponentFromURL(URL, TargetFrameName, SearchFlags, Parameters)
       |
       |End Function
       |
       |Sub CloseDocument(Document)
       |
       |    Document.Close True
       |
       |End Sub"
   );
     
   script.Run("InitParameters", 2);
   script.Run("SetBooleanParameter", ServiceManager, "Hidden",         1, 1);
Программист всегда исправляет последнюю ошибку.