Программное закрытие 1с и автоматический запуск

1. wantingstew 31.03.21 17:15 Сейчас в теме
Доброго времени суток. Хочу сделать автоматическое закрытие 1с после проведения заказа клиентов и чтобы после закрытия сразу открывалось окно аутентификации в программе 1с. Все манипуляции делаю из-за нехватки лицензий. Я пробовал использовать команды ПрекратитьРаботуСистемы() и ЗавершитьРаботуСистемы(), они также могут завершить текущий сеанс и запустить клиент, только программа перезапускается не выходя из учетной записи пользователя. Поиск дополнительных параметров для ЗавершитьРаботуСистемы() найти не смог. Подскажите, есть ли альтернативные методы для реализации описанной выше проблемы или знает кто дополнительные параметры для ЗавершитьРаботуСистемы()
По теме из базы знаний
Найденные решения
6. wantingstew 01.04.21 10:28 Сейчас в теме
(5) Проблема уже решена. Вся загвоздка была в тостом клиенте, который перезапускает клиент, не выходя из аккаунта пользователя. Переключение на тонкий клиент решает эту проблема
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. bmk74 237 31.03.21 19:01 Сейчас в теме
(1)
ЗавершитьРаботуСистемы

ЗавершитьРаботуСистемы(<ЗапрашиватьВозможность>, <ПерезапуститьПриЗавершении>, <ДополнительныеПараметрыКоманднойСтроки>)
А если в третьем параметре задать пользователя отличного от текущего, ? что то по типу /user="Иван"
2. AnryMc 849 31.03.21 17:37 Сейчас в теме
База файловая или серверная?

Для серверной доступна работа с сервером 1С

Поищите в публикациях на этом сайте. Там мелькала статья с подробным кодом...
3. wantingstew 31.03.21 18:23 Сейчас в теме
(2) База серверная. Публикацию не получилось найти
5. AnryMc 849 01.04.21 09:17 Сейчас в теме
(3) За 5 минут нашёл:

1) Закрытие незавершенных сеансов https://infostart.ru/public/1125306/
//Ну, а если кому-то необходимо посмотреть или удалить соединения, то вместо процедуры Сеансы() 
//нужно вызвать процедуру Соединения(), показанную ниже, 
//но тогда еще потребуются логин и пароль администратора информационной базы:

Процедура Соединения(Сервер1С, Коннектор, Агент, Кластер, База, 
	АдминКластера, ПарольАдминКластера, АдминИБ, ПарольАдминИБ)
	
	Процессы = Агент.GetWorkingProcesses(Кластер);
	
	Для каждого Процесс из Процессы Цикл
		
		Порт = Процесс.MainPort;
		
		РабПроц = Коннектор.ConnectWorkingProcess(Сервер1С + ":" + Порт);
		Исключение ...
		
		РабПроц.AuthenticateAdmin(АдминКластера, ПарольАдминКластера);
		Исключение ...
		
		РабПроц.AddAuthentication(АдминИБ, ПарольАдминИБ);
		Исключение ...
		
		ИнформационнаяБаза = РабПроц.CreateInfoBaseInfo();
		
		ИнформационнаяБаза.Name = База;
		
		СоединенияБазы = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза);
		Исключение ...
		
		Для Каждого Соединение Из СоединенияБазы Цикл 
			
			РабПроц.Disconnect(Соединение);
			Исключение ...
			
		КонецЦикла;
		
	КонецЦикла;
	
КонецПроцедуры // Соединения()
Показать


2) Выгрузка в dt на сервере 1С по расписанию с завершением соединений и подключением к консоли сервера через com
https://infostart.ru/1c/articles/1225214/
&НаСервере
Процедура ВыгрузитьНаСервере()
    Коннектор = Новый COMобъект("V83.ComConnector");

    Агент = Коннектор.ConnectAgent("localhost");
    Кластер = Агент.GetClusters().GetValue(0);
    Агент.Authenticate(Кластер, "", "");
    
    Процессы = Агент.GetWorkingProcesses(Кластер);
    Для каждого РабочийПроцесс Из Процессы Цикл
        Если РабочийПроцесс.Running И РабочийПроцесс.IsEnable  Тогда
            СтрокаСоединенияСРабочимПроцессом = РабочийПроцесс.HostName + ":" + Формат(РабочийПроцесс.MainPort, "ЧГ=");
            СоединениеСРабочимПроцессом = Коннектор.ConnectWorkingProcess(СтрокаСоединенияСРабочимПроцессом);
            СоединениеСРабочимПроцессом.AddAuthentication("логин", "пароль");    
            базы = СоединениеСРабочимПроцессом.GetInfoBases();
            //запрещаем запуск регламентных заданий
            для каждого база из базы цикл
                Если база.name = "unf" тогда
                    база.ScheduledJobsDenied = истина;
                    СоединениеСРабочимПроцессом.UpdateInfoBase(база);
                КонецЕсли;    
            конецЦикла;        
            
            базы = Агент.GetInfoBases(Кластер);
            
            //обрубаем все соединения с бд
            для каждого база из базы цикл
                Если база.name = "unf" тогда
                    Сеансы = Агент.GetInfoBaseSessions(Кластер, база);                
                    Для каждого Сеанс Из Сеансы Цикл
                        //Если Сеанс.AppID = "SrvrConsole" Тогда
                        //    Продолжить;
                        //КонецЕсли;
                        Агент.TerminateSession(Кластер, Сеанс);    
                        //Сообщить(Сеанс.AppID)
                    КонецЦикла;                    
                КонецЕсли;    
            КонецЦикла;    
              
        КонецЕсли        
        
    КонецЦикла;    
Показать


3) Скрипт - выгонялка пользователей + резервная копия базы. https://infostart.ru/public/175494/

    'Получение рабочего процесса кластера
    For Each WorkProcess In Agent.GetWorkingProcesses(Cluster)

            ConnectString = WorkProcess.HostName & ":" & WorkProcess.MainPort

            Set WorkProcessConnection = Connector.ConnectWorkingProcess(ConnectString)

            'Установка аутентификации в базах. В бухгалтерии и зарплате создан логин "Алексей"
            WorkProcessConnection.AddAuthentication "Алексей", "tystik1233"

           'Получение списков баз на сервере    
            BaseList = WorkProcessConnection.GetInfoBases()

            'Отключение пользователей из Зарплаты
            For i = LBound(BaseList) To UBound(BaseList)
                If BaseList(i).Name = BaseName Then
                        Set Base = BaseList(i)

                        'Получение соединений с базой, отрубаем всех ктоме COM-Администраторов, он вырубится когда закончится скрипт        
                        Connections = WorkProcessConnection.GetInfoBaseConnections(Base)

                        For j = LBound(Connections) To UBound(Connections)
                            Set CurrentConnection = Connections(j)
                            If CurrentConnection.AppID <> "COMConsole" Then
                         'MSGBOX "Пользователь зарплаты : " & CurrentConnection.UserName
                         WorkProcessConnection.Disconnect CurrentConnection
                            End If
                        Next

                   End If
 
                'Отключение пользователей из бухгалтерии
                If BaseList(i).Name = BaseNameAcc Then
                        Set Base = BaseList(i)

                    'Получение соединений с базой, отрубаем всех ктоме COM-Администраторов, он вырубится когда закончится скрипт
                        Connections = WorkProcessConnection.GetInfoBaseConnections(Base)

                        For l = LBound(Connections) To UBound(Connections)
                            Set CurrentConnection = Connections(l)
                            If CurrentConnection.AppID <> "COMConsole" Then
                         'MSGBOX "Пользователь бухгалтерии : " & CurrentConnection.UserName
                         WorkProcessConnection.Disconnect CurrentConnection
                            End If
                        Next
                End If
            Next    

    Next
End Sub
Показать


4) Автоотключение пользователей 8.3 УФ https://infostart.ru/public/667256/
// Разорвать соединения клиентских приложений.
				Для Каждого Соединение Из СоединенияБазы Цикл
					Если нРег(Соединение.AppID) = "backgroundjob" ИЛИ нРег(Соединение.AppID) = "comconsole" Тогда
						Продолжить;
					КонецЕсли;
					Если Соединение.UserName = ИмяПользователя() Тогда
						// это текущий пользователь
						Продолжить;
					КонецЕсли;
					РабПроц.Disconnect(Соединение);
				КонецЦикла;
Показать


5) Программное отключение сеансов 1С 8.2.
https://infostart.ru/1c/articles/77671/

//Отключение сеансов

//Итак у нас есть все необходимые объекты для непосредственного обрыва сессий. При это рекомендую полностью разобраться, //какие именно сессии мы будем разрывать, иначе можно отключить сессию, в которой выполняется этот код Laughing :

 

Сеансы = Агент.GetInfoBaseSessions(Кластер, ИнформационнаяБаза);
Для каждого Сеанс из Сеансы Цикл
    Если нРег(Сеанс.AppID) = "backgroundjob" ИЛИ нРег(Сеанс.AppID) = "designer" Тогда
        // если это сеансы конфигуратора или фонового задания, то не отключаем
        Продолжить;
    КонецЕсли;
    Если Сеанс.UserName = ИмяПользователя() Тогда
        // это текущий пользователь
        Продолжить;
    КонецЕсли;
    Агент.TerminateSession(Кластер, Сеанс);
КонецЦикла;

 

//Также у типа "Сеанс" есть ещё много разных свойств, например, имя компьютера, данные о языке, времени и длительности //подключения и тп.

//Отключение соединений

//Отключение соединений происходит через объект рабочего процесса. Обрабатывает соединение тип "Соединение", у которого //структура свойств напоминает тип "Сеанс". Итак, как отключенить соединения:

 

СоединенияБазы = Агент.GetInfoBaseConnections(Кластер, ИнформационнаяБаза);
// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
    Если нРег(Соединение.Application) = "backgroundjob" ИЛИ нРег(Соединение.Application) = "designer" Тогда
        // если это соединение конфигуратора или фонового задания, то не отключаем
        Продолжить;
    КонецЕсли;
    Если Соединение.UserName = ИмяПользователя() Тогда
        // это текущий пользователь
        Продолжить;
    КонецЕсли;
    РабПроц.Disconnect(Соединение);
КонецЦикла;
Показать
6. wantingstew 01.04.21 10:28 Сейчас в теме
(5) Проблема уже решена. Вся загвоздка была в тостом клиенте, который перезапускает клиент, не выходя из аккаунта пользователя. Переключение на тонкий клиент решает эту проблема
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот