Запрет входа в базу под одним и тем же пользователем на ПК (1С 7.7, конф. не типовая)

Новая тема
Показывать по сообщений
"По сабжу: надо разрешить входить в базу под одним и тем же пользователем (ОбщийДоступ) с разных ПК, но пресечь попытку входа в базу на одном и том же ПК под одним и тем же пользователем.<br>Проще:<br>можно<br>ПК №1 пользователь ОбщийДоступ<br>ПК №2 пользователь ОбщийДоступ<br>ПК №3 пользователь ОбщийДоступ<br>нельзя<br>ПК №1 пользователь ОбщийДоступ<br>ПК №1 пользователь ОбщийДоступ<br>Вот, что когда-то пытался сделать:<br>при старте системы<br><br> ФС.УстТекКаталог("C:\");<br> Если КаталогПользователя()=КаталогИБ() Тогда<br> ИмяЛокФайла="c:\"+ПолучитьИД(Пользователь)+".dbf";<br> ЛокФайл=СоздатьОбъект("XBase");<br> Если ФС.СуществуетФайл(ИмяЛокФайла)=0 Тогда<br> ЛокФайл.КодоваяСтраница(0);<br> ЛокФайл.ДобавитьПоле("ndx","Число",3,1);<br>    ЛокФайл.СоздатьФайл(ИмяЛокФайла,"c:\ndx.cdx");<br> Иначе<br> Если ЛокФайл.Открыта()=0 Тогда<br>    ЛокФайл.ОткрытьФайл(ИмяЛокФайла,"c:\ndx.cdx",0);<br> КонецЕсли;<br> КонецЕсли;<br> <br> Код=ЛокФайл.КодОшибки();<br> Если Код<>0 Тогда<br> Предупреждение("На данном компьютере вход в 1С под пользователем"+РазделительСтрок+СокрЛП(Пользователь)+" уже осущетвлен!");<br>    ЗавершитьРаботуСистемы(0);<br> КонецЕсли;<br> КонецЕсли;<br>при выходе<br><br> Если КаталогПользователя()=КаталогИБ() Тогда<br> ЛокФайл.ЗакрытьФайл();<br> ФС.УдалитьФайл(ИмяЛокФайла);<br> КонецЕсли;<br><br><br>ЛокФайл и ИмяЛокФайла - глобальные переменные<br><br>Загвоздка, если из базы вылетели и не зарыли файл и не удалили потом при старте он не открывается (код ошибки 70) хотя не блокируется и свободно может быть удален.<br><br>Как победить? "
В SYSLOG\links.tmp система пишет регистрации сессий 1С, по которым строится "монитор пользователей". Данные в файле обновляются с какой то паузой, но не сильно значительной, которая была бы существенна в данном случае. Файл для чтения открыт. Я бы попробовал разобрать его структуру, а, судя по всему, она несложная, и от него оттолкнуться в решении задачи
> В SYSLOG\links.tmp система пишет регистрации сессий 1С, по которым строится "монитор пользователей". Данные в файле обновляются с какой то паузой, но не сильно значительной, которая была бы существенна в данном случае. Файл для чтения открыт. Я бы попробовал разобрать его структуру, а, судя по всему, она несложная, и от него оттолкнуться в решении задачи<br>inks.tmp разобрать то можно, но тут опять попадаем на грабли с вылетами пользователей из 1С и соответственно с сессиями висюками, можно по искать, что и где там лочить нужно, что-бы отличить висюка от нормальной сессии, но это уже не средствами 1С. Потому и пытался на XBase через монопольный доступ к файлу-маячку сделать...
А если сразу при входе, если файл существует, попытаться удалить этот файл. Если не удалился, то занят, а иначе создаем этот файл заново и заходим.<br>
> А если сразу при входе, если файл существует, попытаться удалить этот файл. Если не удалился, то занят, а иначе создаем этот файл заново и заходим.<br>Да вот я то-же подумываю скатиться к данному способу, не так элегантно как с блокировкой файла средствами XBase и попытка его открыть.<br>Жаль метод ФС.УдалитьФайл(... не возвращает значения как прошла операция...
"Все, победил... не надо было заморачиваться с индексом<br>> ЛокФайл.ДобавитьПоле("ndx","Число",3,1);<br>убрано<br><br>> ЛокФайл.СоздатьФайл(ИмяЛокФайла,"c:\ndx.cdx");<br>исправлено на<br>> ЛокФайл.СоздатьФайл(ИмяЛокФайла,);<br><br>> ЛокФайл.ОткрытьФайл(ИмяЛокФайла,"c:\ndx.cdx",0);<br>исправлен на <br>> ЛокФайл.ОткрытьФайл(ИмяЛокФайла,,0);<br><br>Думаю может еще и проверку ЛокФайл.Открыта()=0 убрать?<br><br>Таак...<br>> ЛокФайл.ДобавитьПоле("ndx","Число",3,1);<br>пришлось вернуть обратно"
А после ФС.УдалитьФайл() проверить файл на существование?
"> А после ФС.УдалитьФайл() проверить файл на существование?<br>А как еще по другому? ;)"
> Жаль метод ФС.УдалитьФайл(... не возвращает значения как прошла операция...<br>Значит так и проверять, как прошло удаление.
> Значит так и проверять, как прошло удаление.<br>Ну а куда же при данном способе деться, но про УдалитьФайл все равно жаль, так было бы быстрее и проще...
Читают тему
(гостей: 1)

Быстрый переход