Добрый день!

Подскажите пожалуйста, кто знает как можно решить:

нужно программно завершить работу "1с предприятие Бух" по кнопке из "1с предприятие УНФ"
или отследить что "1с предприятие Бух" закрыта
---
Добрый день!

Давно закончил, только сейчас дошли руки написать, может кому понадобится)
Вообщем решил задачу путем получения ComОбъекта на Сервере и поместил ComОбъект во временное хранилище
После открываю диалоговое окно, и спрашиваю закрыть базу или нет
Если "Закрыть" тогда достаем ComОбъект из временного хранилища и закрываем Базу клиента и ComОбъект

Код:

```1c
    &НаКлиенте
    Процедура ВыполнитьДействиеВИнформационнойБазе(Команда)
    АдресХранилища = СоздатьComОбъектИПолучитьХранилище(ДанныеПоЗапускуИнформационнойБазы.ИнформационнаяБаза);

    //NG начало 19.11.2020 проверка на успешное подключение
    Если АдресХранилища = Неопределено Тогда
    Сообщить("Открыть базу не удалось, проверьте параметры входа!");
    Возврат;
    КонецЕсли;
    //NG конец

    //NG начало 28.10.2020 (Открыть диалоговое окно, и заблокировать оствльные формы)
    НачатьРаботу("НачатьРаботу");
    ЗадатьВопрос();
    //NG конец

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

    &НаСервере
    Функция СоздатьComОбъектИПолучитьХранилище(ИнформационнаяБаза)

    ИмяCOMОбъекта = "V83C.Application"; //"V83C.Application";
    СтрокаСоединения = ПолучитьСтрокаСоединения(ИнформационнаяБаза);
    Попытка
    ПодключениеКИнформационнойБазе = Новый COMОбъект(ИмяCOMОбъекта);
    УспешноеПодключение = ПодключениеКИнформационнойБазе.Connect(СтрокаСоединения);
    Исключение
    ПодключениеКИнформационнойБазе = Неопределено;
    ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    );
    ВызватьИсключение Информация;
    КонецПопытки;

    Если Не УспешноеПодключение Тогда
    Возврат Неопределено;
    КонецЕсли;

    Результат = Новый Структура();
    Результат.Вставить("ПодключениеКИнформационнойБазе", ПодключениеКИнформационнойБазе);
    Результат.Вставить("УспешноеПодключение", УспешноеПодключение);

    АдресХранилища = ";
    ХранилищеОбъекта = ПоместитьВоВременноеХранилище(Результат, New УникальныйИдентификатор);
    АдресХранилища = ХранилищеОбъекта;

    Возврат АдресХранилища; //Сохраняем путь Временного Хранилища потом понадобиться)

    КонецФункции

    &НаКлиенте
    Процедура ЗадатьВопрос()

    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Закончить работу в базе клиента?" + Символы.ПС + "Нажимая кнопку "Да" база клиента будет закрыта!", РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Нет, "Внимание!");

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

    &НаКлиенте
    Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда

    ЗавершитьComСоединение(АдресХранилища);
    АдресХранилища = Неопределено;

    ЗакончитьРаботу("ЗакончитьРаботу");

    Иначе
    ЗадатьВопрос();
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Процедура ЗавершитьComСоединение(АдресХранилища)

    Результат = ПолучитьИзВременногоХранилища(АдресХранилища);

    //Расскоментировать при необходимости завершать процесс
    Попытка
    Результат.ПодключениеКИнформационнойБазе.ЗавершитьРаботуСистемы(); //ПрекратитьРаботуСистемы();
    Исключение
    ОписаниеОшибки = ОписаниеОшибки();
    КонецПопытки;
    Результат.ПодключениеКИнформационнойБазе = Неопределено;

    КонецПроцедуры
```
---
Такой способ без доработок мне неизвестен, но есть вариант попроще, можно завершить сеанс принудительно через консоль администрирования. Так же с ней возможно программная работа.
---
консоль администрирования. Так же с ней возможно программная работа

То что нужно) подскажи пожалуйста где посмотреть?
как программно можно закрыть другую конфигурацию предприятия 1с?
---
поставить веб камеру
---
Посмотрите любую современную БСП, там есть обработка "активные пользователи" она умеет завершать сеанс пользователей в текущей базе. Думаю не составит труда разобраться и переписать код под другую базу.
---
Либо:
https://infostart.ru/1c/articles/77671/
https://infostart.ru/public/99006/
https://infostart.ru/public/90557/
https://infostart.ru/public/90241/
---
Спасибо!
Возможно это помогло бы если мы работали на своем сереве(. Базы находятся на Рарусе, у них доступ везде обрезан, попытался сделать обработку, выдает ошибку прав доступа

Может есть другие решения?
Или как еще можно связать базы, что бы первая база понимала в какой момент закрылась вторая база?
---
Или как еще можно связать базы, что бы первая база понимала в какой момент закрылась вторая база?
А что значит "закрылась вторая база" ? Как у вас база "закрывается" ?
Или вам надо проверить что в базе не осталось активных сеансов?
---
"закрылась вторая база" имею ввиду что бы открытая ранее база под определенным пользователем был закрыт сеанс
---
А как у вас обмен организован?
Через файл?
---
обмена нет
только открытие одной базы предприятия 1с и ее нужно закрыть по кнопке или как то получить от открытой базы информацию о завершении сеанса
---
У вас доступ к самой консоли администрирования 1С есть?
И вообще как устроена архитектура баз, один кластер или несколько разных?
---
доступа к консоли администрирования 1С нету
архитектура баз: один кластер
---
Вводные задачи:
Есть база УНФ 1.6 в ней есть возможность открытия других баз по кнопке, допустим "открыть Бухгалтерию 3.0" (сервер)
Реализована это кнопка через COMОбъект:

```1c
    Попытка
    ПодключениеКИнформационнойБазе = Новый COMОбъект("V83C.Application");
    УспешноеПодключение = ПодключениеКИнформационнойБазе.Connect(СтрокаСоединения);
    Исключение
    КонецПопытки;
```

Моя задача:
Сделать так что бы при нажатие на кнопку "открыть Бухгалтерию 3.0", все окна в УНФ блокировалась до окончании работы в открывшейся базе Бухгалтерию 3.0

Мои попытки решить задачу:
1. через диалоговое окно:
вопрос:Завершил работу в Бухгалтерии 3.0 ?
Да Нет
Если да тогда завершаем задачу через "ПодключениеКИнформационнойБазе"

```1c
    Попытка
    ПодключениеКИнформационнойБазе.ПрекратитьРаботуСистемы();
    Исключение
    ОписаниеОшибки = ОписаниеОшибки();
    КонецПопытки;
    ПодключениеКИнформационнойБазе = Неопределено;
```

но не могу сохранить "ПодключениеКИнформационнойБазе" в переменную
Может есть по этому решению предложения?

2. думал можно как то соединиться с уже существующим соединением (Найти его), но что то не получается найти как это сделать

3. при открытии передавать какое то значение что бы он его возвращал при закрытии сеанса
---
Сделать так что бы при нажатие на кнопку "открыть Бухгалтерию 3.0", все окна в УНФ блокировалась до окончании работы в открывшейся базе Бухгалтерию 3.0

Откуда такая задача? В чём её смысл?
---
до окончании работы в открывшейся базе Бухгалтерию 3.0
В чем заключается эта работа? Где создается подключение на Клиенте или Сервере?
---
учет времени работы в открываемой базе

на клиенте
---
Тогда храните подключение в клиентской переменной модуля формы.
---
Без доступа к консоли администрирования ни как не выкинуть пользователя из базы.
Разве что вешать в УНФ какой нить обработчик ожидания раз в 5-10-15 минут.
Который будет проверять, взведен ли флаг (константа) и если да, то завершать сеанс работы текущего пользователя, если нет исключения.
Также при запуске базы проверять константу, если кто то попробует запустить базу, то делать отказ = истина, что бы не смогли зайти заного.
---
Добрый день!

Давно закончил, только сейчас дошли руки написать, может кому понадобится)
Вообщем решил задачу путем получения ComОбъекта на Сервере и поместил ComОбъект во временное хранилище
После открываю диалоговое окно, и спрашиваю закрыть базу или нет
Если "Закрыть" тогда достаем ComОбъект из временного хранилища и закрываем Базу клиента и ComОбъект

Код:

```1c
    &НаКлиенте
    Процедура ВыполнитьДействиеВИнформационнойБазе(Команда)
    АдресХранилища = СоздатьComОбъектИПолучитьХранилище(ДанныеПоЗапускуИнформационнойБазы.ИнформационнаяБаза);

    //NG начало 19.11.2020 проверка на успешное подключение
    Если АдресХранилища = Неопределено Тогда
    Сообщить("Открыть базу не удалось, проверьте параметры входа!");
    Возврат;
    КонецЕсли;
    //NG конец

    //NG начало 28.10.2020 (Открыть диалоговое окно, и заблокировать оствльные формы)
    НачатьРаботу("НачатьРаботу");
    ЗадатьВопрос();
    //NG конец

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

    &НаСервере
    Функция СоздатьComОбъектИПолучитьХранилище(ИнформационнаяБаза)

    ИмяCOMОбъекта = "V83C.Application"; //"V83C.Application";
    СтрокаСоединения = ПолучитьСтрокаСоединения(ИнформационнаяБаза);
    Попытка
    ПодключениеКИнформационнойБазе = Новый COMОбъект(ИмяCOMОбъекта);
    УспешноеПодключение = ПодключениеКИнформационнойБазе.Connect(СтрокаСоединения);
    Исключение
    ПодключениеКИнформационнойБазе = Неопределено;
    ТекстОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
    );
    ВызватьИсключение Информация;
    КонецПопытки;

    Если Не УспешноеПодключение Тогда
    Возврат Неопределено;
    КонецЕсли;

    Результат = Новый Структура();
    Результат.Вставить("ПодключениеКИнформационнойБазе", ПодключениеКИнформационнойБазе);
    Результат.Вставить("УспешноеПодключение", УспешноеПодключение);

    АдресХранилища = ";
    ХранилищеОбъекта = ПоместитьВоВременноеХранилище(Результат, New УникальныйИдентификатор);
    АдресХранилища = ХранилищеОбъекта;

    Возврат АдресХранилища; //Сохраняем путь Временного Хранилища потом понадобиться)

    КонецФункции

    &НаКлиенте
    Процедура ЗадатьВопрос()

    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Закончить работу в базе клиента?" + Символы.ПС + "Нажимая кнопку "Да" база клиента будет закрыта!", РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Нет, "Внимание!");

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

    &НаКлиенте
    Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда

    ЗавершитьComСоединение(АдресХранилища);
    АдресХранилища = Неопределено;

    ЗакончитьРаботу("ЗакончитьРаботу");

    Иначе
    ЗадатьВопрос();
    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Процедура ЗавершитьComСоединение(АдресХранилища)

    Результат = ПолучитьИзВременногоХранилища(АдресХранилища);

    //Расскоментировать при необходимости завершать процесс
    Попытка
    Результат.ПодключениеКИнформационнойБазе.ЗавершитьРаботуСистемы(); //ПрекратитьРаботуСистемы();
    Исключение
    ОписаниеОшибки = ОписаниеОшибки();
    КонецПопытки;
    Результат.ПодключениеКИнформационнойБазе = Неопределено;

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