Имя: Пароль:
1C
 
Ночной робот (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
AdBlock убивает бесплатный контент. 1Сергей