Версия для печати темы (http://pro1c.org.ua/index.php?s=230d94e855fe5c131e0cab2447d06d06&showtopic=50955)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Переключение между окнами двух баз

Автор: Bernet 13.03.19, 17:01

Всем привет!

Платформа 8.3.13

Дано: Предположим есть две базы 1С с разными конфигурациями. Мне нужно при определенных действиях пользователя проверить запущена ли вторая база 1С, если не запущена - то запустить, иначе активировать окно второй 1С.

Вопрос: Есть ли у кого-то пример как можно проверить открыта ли вторая база 1С (причем нужно определить что это именно та вторая база, их может быть 100), и если открыта - то активизировать окно? может есть какой-то скрипт? пока все примеры что находил - это утилитки на С# которые выводят на форму перечень запущенных процессов 1С с возможностью их закрытия. Мне же нужно как-то получить этот перечень в 1С, среди всех найти нужный и активировать окно с ним...


Автор: pablo 13.03.19, 17:10

Хинт: Во второй базе настройте заголовок окна, чтобы он содержал имя базы и сервера, а затем уже допиливать внешнюю утилитку, чтобы она по заголовку окна искала/активизировала/открывала.

Как-то так

    Если РольДоступна("ПолныеПрава") Тогда    
        ЗаголовокСистемы = ЗаголовокСистемы + СтрокаСоединенияИнформационнойБазы();
    КонецЕсли;


Автор: Vofka 13.03.19, 17:36

У меня когда-то была подобная задача - выводить на передний план окно сторонней программы, если оно не на переднем плане или свернуто. Делал я это с помощью внешней компоненты, окно искалось по заголовку. Только средствами 1С вряд ли это можно сделать.

О, вот и компонента http://pro1c.org.ua/index.php?showtopic=26216

Автор: Bernet 14.03.19, 9:32

Vofka @ Вчера, 17:36 * ,
Спасибо, посмотрю.
Я думал попробовать Sell-овской командой типа tasklist получить все процессы, фильтрануть их чтобы остались только процессы 1С, а дальше играться с ID процесса как-то. Но не знаю как получить из командной строки Shell результат команды, т.е. грубо говоря считать результат команды в какую-то текстовую переменную в 1С.

Автор: Vofka 14.03.19, 10:47

Bernet, я сомневаюсь, что process id, в данном случае, что-то полезное вам даст. Процесс может быть один, окон от него может быть много. Поэтому тут нужно именно окно искать. Ваша задача, на мой взгляд, сводится к тому, что бы в одной программе как-то узнать заголовок окна второй программы (например, как pablo подсказал либо по каком-либо другому признаку/правилу) и с помощью компоненты его активировать.

Автор: Bernet 14.03.19, 10:51

Vofka @ Сегодня, 10:47 * ,
Попробовал вашу компоненту, получилось активировать окно второй 1С по заголовку. Жалко только что там метод а не функция - программно непонятно смогло оно окно открыть или нет, теперь надо придумать каким способом узнать открыта вторая 1С или нет, если нет то запустить

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
http://pro1c.org.ua