helpf.pro
Регистрация
 +1 
Распечатать

Как принудительно завершить работу всех пользователей информационной базы?

Для этого можно воспользоваться возможностью программного доступа к серверу 1С:Предприятия 8. Нужно создать COM-коннектор и выполнить метод ConnectWorkingProcess(), который позволяет подключиться к указанному серверу.
Затем следует аутентифицироваться с правами администратора в выбранной информационной базе, получить все клиентские соединения этой базы и разорвать их.
Завершение работы пользователей
Код 1C v 8.х
 Коннектор = Новый COMОбъект("V81.COMConnector");
Сервер = Коннектор.ConnectWorkingProcess("TestServer");

// Аутентифицироваться с административными правами в нужной базе.
Сервер.AddAuthentication("Администратор", " ");

// Создать объект нужной информационной базы.
ИнформационнаяБаза = Сервер.CreateInfoBaseInfo();
ИнформационнаяБаза.Name = "Test_Base";

// Получить соединения базы.
СоединенияБазы = Сервер.GetIBConnections(ИнформационнаяБаза);

// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
Сервер.Disconnect(Соединение);
КонецЦикла;
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 59550
 +1 
Распечатать
Возможно, вас также заинтересует
10060 (0x0000274C): Попытка установить соединение была безуспешной 24
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 50
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш
1C медленно работает по сети с базой на SQL Server 22
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
Посмотреть все результаты поиска похожих
Комментарии
E_Migachev
16.08.2013 14:38Комментарий: 8
E_Migachev
FunDoorIn, длинный код сюда вставить нельзя, используйте задать вопрос
FunDoorIn
16.08.2013 06:07Комментарий: 7
FunDoorIn
Как сюда код вставить? Пишет вы ввели слишком длинное слово...
FunDoorIn
16.08.2013 05:52Комментарий: 6
FunDoorIn
У меня что-то с типами данных не так, везде возвращается comобъект
вот код:
theelectric
13.09.2012 16:07Комментарий: 5
theelectric
Только еще - надо чтобы в консоли был прописан админ, логин и пароль которого ты указываешь при соединении в коде!
theelectric
13.09.2012 15:58Комментарий: 4
theelectric
Код 1C v 8.2 УП
 Соединитель = Новый COMОбъект("V82.COMConnector");
СоединениеСАгентом = Соединитель.ConnectAgent("upp");
//СоединениеСАгентом.AuthenticateAgent("<admin>", "<pass>");
Кластеры = СоединениеСАгентом.GetClusters();
Кластер = Кластеры.GetValue(Кластеры.GetLowerBound()); // первый кластер
СоединениеСАгентом.Authenticate(Кластер, "<admin>", "<pass>");
РабочиеПроцессы = СоединениеСАгентом.GetWorkingProcesses(Кластер);
РабочийПроцесс = РабочиеПроцессы.GetValue(РабочиеПроцессы.GetLowerBound()); // первый рабочий процесс
АдресРабочегоПроцесса = "tcp://" + РабочийПроцесс.HostName + ":" + XMLСтрока(РабочийПроцесс.MainPort);
СоединениеСРабочимПроцессом = Соединитель.ConnectWorkingProcess(АдресРабочегоПроцесса);
//получаем все инфобазы
ИнформационныеБазы = СоединениеСРабочимПроцессом.GetInfoBases();
ИнформационнаяБаза = ИнформационныеБазы.GetValue(ИнформационныеБазы.GetUpperBound()); // последняя информационная база
СоединениеСРабочимПроцессом.AddAuthentication("<admin-user>", "<user>");

// Создать объект нужной информационной базы.
ИнформационнаяБаза = СоединениеСРабочимПроцессом.CreateInfoBaseInfo();
ИнформационнаяБаза.Name = "for_test";

// Получить соединения базы.
СоединенияБазы = СоединениеСРабочимПроцессом.GetInfoBaseConnections(ИнформационнаяБаза);
//СоединенияБазы = ПолучитьСеансыИнформационнойБазы();

// Разорвать соединения клиентских приложений.
Для Каждого Соединение Из СоединенияБазы Цикл
СоединениеСРабочимПроцессом.Disconnect(Соединение);
КонецЦикла;
theelectric
13.09.2012 15:56Комментарий: 3
theelectric
Я бы немного подправил код, так как сервак не всегда пускает, когда ему указывают просто имя сервера - необходим также порт, который в свою очередь меняется динамически... Ниже код, который "вылавливает" этот порт и собирает полный адрес... Мною лично проверено - никаких ошибок типа "Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение." не вываливается!

Код 1C v 8.2 УП
 Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение.   
arbuzyka2525
22.12.2011 14:10Комментарий: 2
arbuzyka2525
День добрый. пишу всё так но вот выдает ошибку:

{Форма.Форма.Форма(4)}: Ошибка при вызове метода контекста (ConnectWorkingProcess)
Сервер = Коннектор.ConnectWorkingProcess("server19");
по причине:
Произошла исключительная ситуация (V82.COMConnector.1): server_addr=tcp://server19:1542 descr=Ошибка сетевого доступа к серверу
(Windows Sockets - 10061(0x0000274D). Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение. ) line=589 file=Src\DataExchangeTcpClientImpl.cpp
FeliceYa
05.01.2011 13:55Комментарий: 1
FeliceYa
Но не все же работают в серверном режиме.... Для файлового варианта подойдёт например какой код:
Код 1C v 8.х
 Процедура ПриНачалеРаботыСистемы()
ПодключитьОбработчикОжидания("ЗавершитьПриНеобходимостиРаботуСистемы", 300);
КонецПроцедуры

Процедура ЗавершитьПриНеобходимостиРаботуСистемы()

ОтключитьОбработчикОжидания("ЗавершитьПриНеобходимостиРаботуСистемы");

БлокировкаБД = ПолучитьБлокировкуУстановкиСоединений();
Если БлокировкаБД.Установлена Тогда
Если БлокировкаБД.Начало < ТекущаяДата() И ТекущаяДата() < БлокировкаБД.Конец Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецЕсли;

ПодключитьОбработчикОжидания("ЗавершитьПриНеобходимостиРаботуСистемы", 300);

КонецПроцедуры


Разместить его следует в модуле приложения. Далее: Устанавливаете блокировку соединений с информационной базой методом (БлокировкаУстановкиСоединений) и в течении, в данном примере, 5-ти минут (300 секунд) все пользовательские сеансы будут завершины! Независимо от режима работы - файловый или серверный.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.