|
|
|
Ночной робот (1С) и монопольный режим. Глюк? Ø |
☑ | ||
|---|---|---|---|---|
|
0
Pack
30.09.05
✎
11:33
|
Есть роботы которые проводят по ночам всякие нужные вещи, и один из них восстанавливает границу последовательности, ессестно в монопольном режиме. Если кто-то из пользователей не выходит из 1С, при попытке зайти монопольно, выскакивает всем известная табличка "Ошибка блокировки метаданных". И 1С ждет нажатия "Ок". Можно какнить убрать это сообщение? Ну чтоб 1С сказала, типа ошибка, и не ожидая нажатия на кнопку, выходила?
|
|||
|
1
Vladimir Kozlov
30.09.05
✎
11:36
|
самое простое - принудительно прибить все процессы 1С на сервере перед запуском робота
|
|||
|
2
Sasha
30.09.05
✎
11:38
|
(1)ага и тогда будет висеть табличка: "Программы была завершена аварийно. Переиндексировать?" :-))
|
|||
|
3
EXH
30.09.05
✎
11:39
|
сначала прибить, а потом запустить тестирование и исправление в пакетном режиме, для переиндексации
|
|||
|
4
Pack
30.09.05
✎
11:53
|
Дык в том и дело, что например, народ изредка на ночь тяжелые отчеты запускает, вот и нужно, чтоб запустился робот, сделал что нужно (ну или не сделал по описанной выше причине) и вышел.
|
|||
|
5
Vladimir Kozlov
30.09.05
✎
11:53
|
(2)
если перед запуском робота снести индексы то никаких вопросов не будет |
|||
|
6
MaratM
30.09.05
✎
12:12
|
Пример батника который проверяет можно ли зайти монопольно.
rem @echo off set pt="D:\copyBases\Торговля и склад\2003" set fl="1SUSERS.DBF" set fe="1SUSERS.DB1" set ph=Н% cd %pt% rem проверка на открытую базу copy %fl% nul goto m%ERRORLEVEL% :m0 echo Базу можно открыть rem проверка на возможность открыть базу монопольно ren %fl% ю% goto answer%ERRORLEVEL% :answer0 rem базу можно открыть монопольно echo Базу можно открыть монопольно ren ю% %fl% cd %ph% wscript batch1.vbs goto end :answer1 rem базу можно открыть не монопольно echo Базу можно открыть не монопольно cd %ph% wscript batch2.vbs goto end :m1 echo Базу нельзя открыть rem базу нельзя открыть goto end :end |
|||
|
7
orefkov
30.09.05
✎
12:16
|
Для дбф баз посмотри вот это (автор artbear)
IBState - Получить состояние базы в виде числа -1-->> "Выполнен некорректный выход из 1С, нужна переиндексация" 0-->> "В базе никого нет" 1-->> "База работает или в монопольном режиме или один пользователь работает в разделенном режиме" 2-->> "1С работает в разделенном режиме" Function StringIBState(strIBDir) StringIBState = IBStateToString( IBState(strIBDir) ) End Function function IBStateToString(iIBState) IBStateToString = "" if iIBState = 0 then IBStateToString = "В базе никого нет" end if if iIBState = 1 then IBStateToString = "База работает или в монопольном режиме или один пользователь работает в разделенном режиме" end if if iIBState = -1 then IBStateToString = "Выполнен некорректный выход из 1С, нужна переиндексация" end if if iIBState = 2 then IBStateToString = "1С работает в разделенном режиме" end if end function Function IBState(strIBDir) ' Пока невозможно разделить монопольный режим или работу одного пользователя в разделенном режиме iIBUsersCount = GetIBUsersCount(strIBDir) bIsAnyUserInIB = not TryFileOpen(strIBDir) if (iIBUsersCount = 0) and not bIsAnyUserInIB then IBState = 0 ' в базе никого нет end if if (iIBUsersCount = 1) and bIsAnyUserInIB then IBState = 1 ' кто-то сидит монопольно или один человек в разделенно режиме end if if (iIBUsersCount > 0) and not bIsAnyUserInIB then IBState = -1 ' некорректный выход из программы, нужна переиндексация end if 'if (iIBUsersCount > 1) and bIsAnyUserInIB then ' IBState = 2 ' все хорошо, и 1С работает в разделенном режиме 'end if End Function Function TryFileOpen(strIBDir) TryFileOpen = false set fso = CreateObject("Scripting.FileSystemObject") strIBDir2 = strIBDir if Right(strIBDir, 1) <> "\" then strIBDir2 = strIBDir & "\" end if on Error resume next ForAppending = 8 set file = fso.OpenTextFile(strIBDir2 & "1susers.dbf", ForAppending) iErrNumber = Err.Number on Error goto 0 if iErrNumber <> 0 then Exit Function end if file.Close TryFileOpen = true End Function Function GetIBUsersCount(strIBDir) GetIBUsersCount = -1 strText = "select usrscnt from 1susers" 'ConnectString = "DRIVER=Microsoft Visual FoxPro Driver;Deleted=Yes;Null=Yes;Collate=RUSSIAN;"+ _ ' "Exclusive=No;SourceType=DBF;SourceDB="+strIBDir ConnectString = "DRIVER=Driver do Microsoft dBase (*.dbf);FIL=dBase 5.0;DriverId=533;CollatingSequence=ASCII;DefaultDir=" & _ strIBDir & ";UID=Admin" set Connection=CreateObject("ADODB.Connection") Connection.ConnectionTimeOut=600 Connection.Open(ConnectString) set Rs=CreateObject("ADODB.RecordSet") Rs.ActiveConnection=Connection on Error resume next Rs.Open strText, Connection iErrNumber = Err.Number on Error goto 0 if iErrNumber = 0 then GetIBUsersCount = CInt(Rs.Fields(0).Value) else GetIBUsersCount = 1 ' монопольный режим end if on Error resume next Rs.Close Connection.Close on Error goto 0 End Function |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |