Имя: Пароль:
1C
1С v8
Запустить форму в другом сеансе.
0 Джон Тирби
 
12.06.12
09:08
Сори заранее если чето не так спрошу...Есть ли в 1с возможность обратившись к серверу и получив список активных сеансов дать команду на выполнение определенной процедуры в одном из сеансов юзеров? В моем случае это открытие формы в которую будете передан номер входящего звонка с миниАТС. Заранее спасибо.
1 Ork
 
12.06.12
09:10
(0) Есть возможность из сеанса сходить на сервер прочитать там " номер входящего звонка с миниАТС" и открыть или не открыть форму.
2 Джон Тирби
 
12.06.12
09:15
если я вас правильно понял то это нада постоянно ломится на сервер миниАТС и глядеть нет ли входящего звонка...хотелось бы красивее сделать...
3 Humandra
 
12.06.12
09:19
(2) Можно ломиться не на сервер миниАТС, а на сервер 1С. МиниАТС пишет какой-то признак, что нужное событие произошло (в регистр сведений 1с, файл или еще куда, не суть важно). А обработчик ожидания 1С это место сканирует. Ну да, постоянно, конечно.
4 Ork
 
12.06.12
09:20
Красивее было бы сделать на сокетах. Если сервер АТС это умеет.
5 Джон Тирби
 
12.06.12
09:21
(4) По подробнее плиз..
6 Джон Тирби
 
12.06.12
09:25
вот нашел пример выгонялки из 1С всех активных юзеров...

Коннектор = Новый COMОбъект("v82.COMConnector");
Агент = Коннектор.ConnectAgent(Сервер);
Кластеры = Агент.GetClusters();
Для каждого Кластер из Кластеры Цикл
   // получим и береберем процессы кластера

   Агент.Authenticate(Кластер,Пользователь, Пароль);
   Процессы = Агент.GetWorkingProcesses(Кластер);
   Для каждого Процесс из Процессы Цикл
       Порт = Процесс.MainPort;
       Попытка
           // теперь есть адрес и порт для подключения к рабочему процессу

           РабПроц = Коннектор.ConnectWorkingProcess(Сервер + ":" + СтрЗаменить(Порт, Символы.НПП, ""));
           // логин админа кластера

           РабПроц.AuthenticateAdmin(Пользователь, Пароль);
           // логин админа базы

           РабПроц.AddAuthentication(ПользовательБазы,ПарольБазы);
           
           ИнформационнаяБаза = РабПроц.CreateInfoBaseInfo();
           ИнформационнаяБаза.Name = База;
           СоединенияБазы = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза);
           // Разорвать соединения клиентских приложений.

           Для Каждого Соединение Из СоединенияБазы Цикл

соединение - COMОбъект..может можно сдесь чето передать в юзерский сеанс?
7 Ork
 
12.06.12
09:27
(5)Для примера (используется WinSock) : http://www.codenet.ru/progr/vbasic/winsock.php
8 Джон Тирби
 
12.06.12
10:34
через сокеты чето сложно...неосилю...может все-таки есть решения через COM-соединение?
9 Живой Ископаемый
 
12.06.12
10:35
может тогда уж через обработку ожидания? совсем просто
10 fisher
 
12.06.12
10:36
(8) Фишка в том, что инициировать событие в клиентском сеансе можно только из него самого. Без вариантов. Хоть через обработку ожидания, хоть через внешнюю компоненту.
11 Джон Тирби
 
12.06.12
10:42
(10)ясно...жаль..прийдется извращатся..
12 fisher
 
12.06.12
10:54
(11) В идеале надо к клиенту подключать внешнюю компоненту, которая мини веб-сервером работает. Которая сможет слушать порт и инициировать нужное событие в 1С.
Ошибка? Это не ошибка, это системная функция.