Страница: 1 |
Вопрос: Ошибка в работе скрипта подключающего базы 1С8 | Добавлено: 23.10.07 13:12 |
Автор вопроса: ![]() |
Написал скриптик, для подключения баз юзерам. Задумка следующая - в скрипт передается в виде параметров имя сервера и базы а так же параметр отвечающий за то, будет ли выполнятся предварительно отчистка списка баз.
Скрипт вот: 'Скрипт 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 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 28 |
Профиль | Цитата | #1 | Добавлено: 17.12.07 07:59 |
Мое мнение такое использование вот этого: On Error Resume Next ведет к тому что вы не можете получить ошибку при которой она возникает а в скрипте не предусмотрена обработка такой ситуации. Может в это время были недоступны сетевые диски или еще чего нибуть что нельзя предусмотреть !!! |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 315701199 Вопросов: 2 Ответов: 5 |
Профиль | Цитата | #2 | Добавлено: 17.12.07 14:47 |
On Error Resume Next используется только при запуске скрипта, так сказать "в боевом режиме". При отладке эта строка комменитруется. А вот проблема остается. Более того. Если создать батник, который последовательно запускает этот скрипт несколько раз, но с разными параметрами, то базы подключаются нормально |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 3 Ответов: 28 |
Профиль | Цитата | #3 | Добавлено: 19.12.07 11:30 |
Если вы думаете что проблема только в последовательности выполнения то можно разбит подключение баз по подпрограммам или функциям что позволит строго соблюсти последовательность выполнения например если функция отработала нормально то ей присваивается True иначе False
а следущую выполнять в зависимости от результата предыдещей. 2 вариант это просто натыкать в сценарий в нужные места вот это WScript.Sleep (500) в принципе это тоже должно помочь соблюсти последовательность |
Страница: 1 |
|