1. Отключение пользователей в файловой версии 1С 8.
Для отключение пользователей в файловой версии Я создал *.bat файл с одной строчкой
net session /delete /y
Он отключает все открытые общие файлы на компьютере на котором лежит база.
Далее создал задание (Планировщик заданий Windows), который бы запускал этот файл в назначенное время.
Вы спросите а как же те сеансы которые открыты на компьютере , Я их тоже устранил создав новый *.bat файл со строкой
taskkill /IM 1cv8.exe /f
правда он отключает все запущенные 1С на текущим компьютере , но для меня это не было так страшно так как архивация производилась в ночное время и уже никто не работал в базе, этот батник тоже можно добавить в Планировщик Windows.
Так же по taskkill можете почитать в других источниках , есть возможности отключать процессы в отдельных сеансах
2. Отключение пользователей в клиент-серверной базе.
Так же как и в случае файловой базы Я использовал *.bat файлы.
Создал два *.bat файла , первый отключает сервер 1С предприятие, второй его включает очень просто .
Содержание первого файла :
net stop "1C:Enterprise 8.2 Server Agent"
Содержание второго файла :
net start "1C:Enterprise 8.2 Server Agent"
Добавил два новых задания в планировщик Windows , с разницой во времени 15 минут для того чтобы все зависшие пользователи смогли отключиться, эти действия анологичны Запуск сервера 1С Предприятие и Остановка сервера 1С Предприятие
3. Программный способ отключения пользователей в 1С
Стояла задача выполнять архивацию ежеденевно в 22:30.
В этом способе Я не стал заморачиваться, создал новую роль "НеЗакрывать1С".
Создал новую процедуру в модуле обычного приложения :
Процедура ЗавершениеРаботыПользователей() Экспорт
Если НЕ РольДоступна("НеЗакрывать1С") Тогда
Если Час(моп_ВыполнениеОперацийНаСервере.ТекущаяДатаНаСервере()) >= 22 Тогда // получаю врмемя на сервере
ПрекратитьРаботуСистемы(Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Добавил в процедуру ПриНачалеРаботыСистемы() тоже самое и подключил обработчик ожидания :
Если НЕ РольДоступна("НеЗакрывать1С") Тогда
Если Час(моп_ВыполнениеОперацийНаСервере.ТекущаяДатаНаСервере()) >= 22 Тогда // получаю врмемя на сервере
ПрекратитьРаботуСистемы(Ложь);
КонецЕсли;
КонецЕсли;
ПодключитьОбработчикОжидания("ЗавершениеРаботыПользователей", "600");
Функция текущая дата на сервере выглядит так :
Функция ТекущаяДатаНаСервере() Экспорт
Возврат ТекущаяДата();
КонецФункции
Таким образом мы получаем дату на сервере , в случае если в свойствах общего модуля установлена галочка "Сервер", я поставил только её.
Получается текущий код отрубает пользователей на два часа , но обычно после полночи уже никто не заходит в базу.
Если кому-то помогла эта статья буду очень рад.