Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - ASP и VBScript

Страница: 1 |

 

  Вопрос: Ошибка в работе скрипта подключающего базы 1С8 Добавлено: 23.10.07 13:12  

Автор вопроса:  Yarryk | ICQ: 315701199 
Написал скриптик, для подключения баз юзерам. Задумка следующая - в скрипт передается в виде параметров имя сервера и базы а так же параметр отвечающий за то, будет ли выполнятся предварительно отчистка списка баз.
Скрипт вот:

'Скрипт AddSQLBase1C8.vbs
'Аффтар Ярик Киселев
'Скрипт добавляет 1С8 в список баз. Для работы нужно запустить скрипт с параметрами
'AddSQLBase1C8.vbs Параметр1 Параметр2 Параметр3 Параметр4 , - где:
' Параметр1 - имя сервера 1С8 (для не SQL-ной базы - путь к каталогу информационной базы)
' Параметр2 - имя базы на сервере  (для не SQL-ной базы - наименование базы в списке)
' Параметр3 - Наименование базы в списке (обязательно латиницей)
' Параметр4 - Очистка списка баз (1 - отчистить, 2 - не отчищать)

Option Explicit
On Error Resume Next
Dim fso1, ts, txtStreamOut, Shell
Dim strBLFile
Dim strSearchStr
Dim strAppPath
Dim strSrvName
Dim strBaseName
Dim strBaseLabel
Dim strBaseListFolder, strBaseListPath
Dim iFlg
Dim nVar

Set Shell = CreateObject("WScript.Shell")
Set fso1 = WScript.CreateObject("Scripting.FileSystemObject")
Err.Number = 0
'____ Получение параметров ________
strSrvName = WScript.Arguments(0)
If Err.Number <> 0 Then
nVar = MsgBox("Проверьте параметры или обратитесь к системному администратору", vbCritical, "Ошибка")
WScript.Quit(-1)
End If

strBaseName = WScript.Arguments(1)
If Err.Number <> 0 Then
nVar = MsgBox("Проверьте параметры или обратитесь к системному администратору", vbCritical, "Ошибка")
WScript.Quit(-1)
End If
strBaseLabel = WScript.Arguments(2)
If Err.Number <> 0 Then
nVar = MsgBox("Проверьте параметры или обратитесь к системному администратору", vbCritical, "Ошибка")
WScript.Quit(-1)
End If
iFlg = WScript.Arguments(3)
If Err.Number <> 0 Then
nVar = MsgBox("Проверьте параметры или обратитесь к системному администратору", vbCritical, "Ошибка")
WScript.Quit(-1)
End If

strAppPath = Shell.SpecialFolders("APPDATA")
strBaseListPath = strAppPath & "\1C\1Cv8\v8ib.lst" 'Устанавливаем путь к списку баз
If iFlg = 1 Then       ' Проверка - нужно ли отчищать список баз
If fso1.FileExists (strBaseListPath) Then fso1.DeleteFile(strBaseListPath)   'Отчистка списка баз
End If
'подключение не скульной базы
If InStr(strSrvName,"\\") Then
If fso1.FileExists (strBaseListPath) Then
Set ts = fso1.OpenTextFile(strBaseListPath, 1, True)
strBLFile = ts.ReadAll
ts.Close
strSearchStr = "File=" & Chr(34) & strSrvName  & Chr(34)
If InStr(strBLFile,strSearchStr) = 0 Then 'Проверка на наличие базы в списке баз
Set ts = fso1.OpenTextFile(strBaseListPath,8) 'Подключение базы
ts.WriteLine "[" & strBaseLabel & "]"
ts.WriteLine "Connect=File=" & Chr(34) & strSrvName & Chr(34) & ";"
ts.WriteLine "ID=69809a06-e249-4a73-96ab-bf4ef9b7ec4a"
ts.WriteLine "OrderInList=2"
ts.WriteLine "Folder=/"
ts.WriteLine "OrderInTree=2" & Chr(10)
ts.Close
End If
Else
strBaseListFolder = strAppPath & "\1C"             'Подключение базы после отчистки списка
If Not fso1.FolderExists(strBaseListFolder) Then fso1.CreateFolder(strBaseListFolder)
strBaseListFolder = strAppPath & "\1C\1Cv8"
If Not fso1.FolderExists(strBaseListFolder) Then fso1.CreateFolder(strBaseListFolder)
Set ts = fso1.CreateTextFile(strBaseListPath,8)
ts.WriteLine Chr(239) & Chr(187) & Chr(191)
ts.WriteLine "[" & strBaseLabel & "]"
ts.WriteLine "Connect=File=" & Chr(34) & strSrvName  & Chr(34) & ";"
ts.WriteLine "ID=69809a06-e249-4a73-96ab-bf4ef9b7ec4a"
ts.WriteLine "OrderInList=2"
ts.WriteLine "Folder=/"
ts.WriteLine "OrderInTree=2" & Chr(10)
ts.Close
End If
WScript.Sleep (1000)
Set fso1 = Nothing
WScript.Quit(0)
End If
''подключение скульной базы
If fso1.FileExists (strBaseListPath) Then
Set ts = fso1.OpenTextFile(strBaseListPath, 1, True)
strBLFile = ts.ReadAll
ts.Close                                                             'Проверка на наличие базы в списке баз
strSearchStr = "Srvr=" & Chr(34) & strSrvName  & Chr(34) & ";Ref=" & Chr(34) & strBaseName & Chr(34)
If InStr(strBLFile,strSearchStr) = 0 Then           'Подключение базы
Set ts = fso1.OpenTextFile(strBaseListPath,8)
ts.WriteLine "[" & strBaseLabel & "]"
ts.WriteLine "Connect=Srvr=" & Chr(34) & strSrvName  & Chr(34) & ";Ref=" & Chr(34) & strBaseName & Chr(34) & ";"
ts.WriteLine "ID=609255fb-7001-41d7-a2e3-cb072b9844a1"
ts.WriteLine "OrderInList=1"
ts.WriteLine "Folder=/"
ts.WriteLine "OrderInTree=1" & Chr(10)
ts.Close
End If
Else
strBaseListFolder = strAppPath & "\1C"         'Подключение базы после отчистки списка
If Not fso1.FolderExists(strBaseListFolder) Then fso1.CreateFolder(strBaseListFolder)
strBaseListFolder = strAppPath & "\1C\1Cv8"
If Not fso1.FolderExists(strBaseListFolder) Then fso1.CreateFolder(strBaseListFolder)
Set ts = fso1.CreateTextFile(strBaseListPath,8)
ts.WriteLine Chr(239) & Chr(187) & Chr(191)
ts.WriteLine "[" & strBaseLabel & "]"
ts.WriteLine "Connect=Srvr=" & Chr(34) & strSrvName  & Chr(34) & ";Ref=" & Chr(34) & strBaseName & Chr(34) & ";"
ts.WriteLine "ID=609255fb-7001-41d7-a2e3-cb072b9844a1"
ts.WriteLine "OrderInList=1"
ts.WriteLine "Folder=/"
ts.WriteLine "OrderInTree=1" & Chr(10)
ts.Close
End If
WScript.Sleep (1000)
Set fso1 = Nothing
WScript.Quit(0)

В GPO 4 раза вызывается данный скрипт - подключается 4 базы. Проблема следующая - на терминальных станциях скрипт работает всегда, на моем компе - всегда, на компах юзеров то работает нормально, то подключает только 1-2 базы, то не срабатывает совсем. Как найти откуда ноги растут у трабла? Где искать?

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 alroy



Вопросов: 3
Ответов: 28
 Профиль | | #1 Добавлено: 17.12.07 07:59
Мое мнение такое использование вот этого: On Error Resume Next ведет к тому что вы не можете получить ошибку при которой она возникает а в скрипте не предусмотрена обработка такой ситуации. Может в это время были недоступны сетевые диски или еще чего нибуть что нельзя предусмотреть !!!

Ответить

Номер ответа: 2
Автор ответа:
 Yarryk



ICQ: 315701199 

Вопросов: 2
Ответов: 5
 Профиль | | #2 Добавлено: 17.12.07 14:47
On Error Resume Next используется только при запуске скрипта, так сказать "в боевом режиме". При отладке эта строка комменитруется. А вот проблема остается. Более того. Если создать батник, который последовательно запускает этот скрипт несколько раз, но с разными параметрами, то базы подключаются нормально

Ответить

Номер ответа: 3
Автор ответа:
 alroy



Вопросов: 3
Ответов: 28
 Профиль | | #3 Добавлено: 19.12.07 11:30
Если вы думаете что проблема только в последовательности выполнения то можно разбит подключение баз по подпрограммам или функциям что позволит строго соблюсти последовательность выполнения например если функция отработала нормально то ей присваивается True иначе False
а следущую выполнять в зависимости от результата предыдещей.
2 вариант это просто натыкать в сценарий в нужные места вот это WScript.Sleep (500) в принципе это тоже должно помочь соблюсти последовательность

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам