Имя: Пароль:
1C
1С v8
Интеграция 1С и АТС ОКТЕЛЛ
,
0 Alex_MA
 
24.06.13
12:10
Всем здравствуйте!

Задача:
Менеджер звонит по SIP телефону (сигнал идет через сервер ОКТЕЛЛ),
сервер ОКТЕЛЛ посылает данные в 1С.

Каким образом создать документ в текущем сеансе пользователя ?
Есть у кого нибудь какие мысли по решению такой задачи ?

За советы премного благодарен.
Спасибо за внимание.
1 1Cv8_accepted
 
24.06.13
12:12
(0) Если какая-нибудь типовая конфигурация, то есть документ "Событие". Создавать при помощи COM-автоматизации, как и любой другой документ из внешнего приложения.
2 MaxisUssr
 
24.06.13
12:14
(0)
Недавно занимался подобным.
Купили панель телефонии со своей компонентой, которая при событиях в Астериске генерила ВнешнееСобытие, которое в свою очередь успешно обрабатывалось в 1С (также была возможность создать документ "Событие", но я сделал регистр для звонков - это удобнее для составления отчетов)
3 Alex_MA
 
24.06.13
12:16
(1)дело в том, что сигнал идет изначально не из программы 1С,  в от сервера ОКТЕЛЛ, поэтому нужно как то "попасть" в нужный сеанс пользователя и перед его "носом" создать документ "Собятие"
4 Alex_MA
 
24.06.13
12:17
(3)+для дальнейшего его заполнения
5 MaxisUssr
 
24.06.13
12:22
(4)
Этот сервер ОКТЕЛЛ внешнее событие генерит? (1С это событие видит?)
6 Alex_MA
 
24.06.13
12:25
(5) Трубка(менеджер) -> ОКТЕЛЛ -> Звонок клиенту и сигнал в 1С
7 Alex_MA
 
24.06.13
12:28
(5)Конечно можно заделать через модуль внешнего соединения, но  как отобразить у конкретного менеджера создание документа ?
8 MaxisUssr
 
24.06.13
12:32
(7)
Судя по описанию (все события генерятся) проблему не понимаю
9 Alex_MA
 
24.06.13
12:34
(8)каким образом откроется новый документ у менеджера ?
10 Alex_MA
 
24.06.13
12:36
(8)ОКТЕЛЛ (стучимся в 1С) -> создаем документ "Событие" - Не проблема.

Дальше как показать документ ?

Можно конечно так:

Запущено регл. задание, которое открывает последний сделанный звонок конкретным менеджером - но мне не нравится, м.б. есть какие другие варианты ?
11 MaxisUssr
 
24.06.13
12:38
(10)
Я бы сделал панель телефонии. Подсмотреть ее внешний вид можно у MIKO или Asterisk. В ней отображать все текущие звонки.
12 Alex_MA
 
24.06.13
12:40
(11)в том то и дело, мне панель телефонии не подойдет. Звонок идет с трубки SIP телефона,а не с панели
13 MaxisUssr
 
24.06.13
12:41
(10)
Т.е. никакого "внешнего события" не возникает - тебе вручную (через COM) приходится создавать документ?
Ну все равно - через тот же COM можно попробовать запустить метод "Оповестить()" с параметром, равным ссылке на документ, и панель телефонии уже примет это оповещение своим методом "ОбработкаОповещения()" и откроет документ, переданный в параметре
14 Alex_MA
 
24.06.13
14:59
оповестить() работает ведь в рамках одного сеанса
15 Alex_MA
 
24.06.13
15:08
тогда получается все сводится к следующему:

1. какая то сторонняя программа подсоединилась к 1С, что то туда записала
2. Как только записала, в сеансе конкретного пользователя - что то случилось, например Hello World

(Без использования регламентных заданий и подключить обработчик ожидания)
16 MaxisUssr
 
24.06.13
16:09
(14)
А если заюзать метод формы ВнешнееСобытие() - ничего он хорошего не ловит после звонка?
17 Alex_MA
 
25.06.13
08:45
Подскажите пожалуйста сработает ли таким образом внешнее событие ?
Допустим я написал внешнюю компоненту, при каждом запуске 1С она происходит ее подключение.
Менеджер выполняет звонок с телефона, сигнал идет через ОКТЕЛЛ, который в свою очередь подключается к экспортной функции модуля внешнего соединения и передает туда какие то данные, а так же, например, вызывает какую либо функцию внешней компоненты, а она в свою очередь инициализирует ОбработкаВнешнегоСобытия именно у того менеджера который выполняет звонок ?
18 ИС-2
 
naïve
25.06.13
09:25
(0) ничего не знаю про октелл, но можно сделать - в промежуточную базу выгружать данные об активных звонках и через COM подключение 1C опрашивать о их наличии
19 Alex_MA
 
25.06.13
10:18
(18)хочу без регламентных функций сделать

Краткая схема такая:
http://s5.uploads.ru/ikzKv.jpg
20 zladenuw
 
25.06.13
10:28
а в октелл, ты знаешь какой менеджер принял звонок ? если да. то можно ведь вызвать внешние событие 1с. передать туда ключ менеджера который обработал звонок. а уже через обработчик ожидание у пользователя открываешь ему документ.
21 Alex_MA
 
25.06.13
10:52
(20) регламентные функции и обработчики ожидания - это разрыв по времени.
22 zladenuw
 
25.06.13
10:54
(21) почему ? делаешь оповестить пользователя по внешнему событию. если это Уф то можно передать ссылку на документ и пользователь может его сам открыть
23 Alex_MA
 
25.06.13
11:12
Т.е. внешнее событие не в рамках одного сеанса ?
24 Jonny_Khomich
 
25.06.13
11:44
(0) вообще на форуме (r.oktell.ru) был кусок кода как делать связь с 1с.
25 Alex_MA
 
25.06.13
11:58
(24)если вы про это:
http://r.oktell.ru/wiki/category14/175/
то это не решает проблемы

а вот тут http://infostart.ru/public/176512/ люди каким то образом решили проблему.

ЦИТАТА

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

КОНЕЦИТАТЫ
26 Jonny_Khomich
 
25.06.13
12:03
(25) вот надо обращаться к Илье Соколову, человек знающий, я на него работал.
Есть у него проекты (внедрял до меня), где 1ска выдаёт карточку контрагента при входящем звонке в Oktell.
27 Alex_MA
 
25.06.13
12:08
(26)вот этот момент и интересует, как при входящем или исходящем звонке идентифицируется нужный сеанс где нужно что то сделать...
28 Jonny_Khomich
 
25.06.13
12:27
(27) вся работа через com-объект, я этим не занимался, настраивал карточку звонка стандартными решениями октелла.
29 Alex_MA
 
25.06.13
15:33
У пользователя постоянно висит какая-то обработка. На внешнее событие формы этой обработки приходит массив данных из сервера 1С. По приходу массива происходит обработка программными средствами 1С.

Каким образом можно осуществить внешнее событие ?
30 smotritel
 
25.06.13
15:40
31 MaxisUssr
 
25.06.13
15:47
(29)
Если отправлять событие через Внешнюю Компоненту - в инете есть темы на форумах, поищи по фразе "как отправить внешнее событие 1с". Может поможет.
32 MaxisUssr
 
25.06.13
15:49
ExternalEvent
33 Alex_MA
 
25.06.13
15:51
(30)мне консоль в 1С не нужна.
Звонок будет с трубки телефона.
34 Alex_MA
 
25.06.13
15:52
(32)уже скачал один проект на VS2010, подключил компоненту для тестов. Пока что работает в рамках одного сеанса.
35 MaxisUssr
 
25.06.13
15:56
(34)
Получается, что внешнее событие генерится в винде - естественно оно перехватывается только теми сеансами 1С, которые находятся на том же компе...
36 smotritel
 
25.06.13
15:59
(33) "консоль" там необязательна, её можно не использовать.

p.s. по ссылке вообще-то можно демо-конфигурацию скачать. она не особо и закрыта.
просто для серьезной работы нужен ещё плагин к Октеллу и сценарии для него же описанные в нём же - без них конфа не сильно полезна.

но с точки зрения работы с событиями компоненты - ты там что-то сможешь посмотреть.
37 Alex_MA
 
25.06.13
16:04
(35)я имею ввиду в рамках одного сеанса 1С
38 MaxisUssr
 
25.06.13
16:08
(37)
Я к тому, что нужно чтобы некая внешняя компонента, установленная на каждом компьютере, мониторила сервер Октелл и уже по прошествии некоего события отсылала "транзитом" это событие в 1С
39 Волесвет
 
25.06.13
16:14
эммм, из октелла не вытащить данные кто кому и сколько звонил ? и нафига это в 1с?
40 Alex_MA
 
26.06.13
08:55
например есть компонента icq для 1С
http://infostart.ru/public/14457/

а 1С работает много пользователей - каким образом реализована отправка сообщения конкретному пользователю ?
41 Alex_MA
 
26.06.13
12:57
Каким образом утилита отдает данные в нужный список получателей ? Т.е. как она выдает внешннее событие для всех?

Опишу подробнее:

У меня написана внешнаяя компонента, она выполняет деление двух чисел,
если мы делим на 0, тогда вызывается внешнее событие в 1С

Вот реализация внешнего события во внешней компоненте, если деление на 0 тогда вызывается процедура ExternalEvent - ОбработкаВнешнегоСоединения, которая у меня в модуле управляемого приложения.

public int Go(int Param1, int Param2)

{
try
{
return (Param1 / Param2);
}

catch (Exception e)
{
asyncEvent.ExternalEvent("AddIn", "error", e.ToString());
return 0;
}
}

1. Открыл 1 сеанс и обработку, которая выполняет подкоючение ВК и выполняет деление

при нажатии x/0 (деление на ноль) - вызывается обработка внешнего события - все ОК.

Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Сообщить("123");
КонецПроцедуры


2. Открываем еще сеанс и ту же обработку, которая выполняет подкоючение ВК.
При выполнении действия в сеансе №1 деления на 0, ОбработкаВнешнегоСобытия в сеансе №2 не вызывается.

Почему ?
42 Alex_MA
 
26.06.13
20:56
кому интересно завершение дискуссии:
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=613974#613974
43 Torquader
 
28.06.13
01:04
А может проблему решать немного по-другому?
Внешняя компонента по TCP-IP общается с сервером телефонии, когда приходит звонок, она посылает сообщение всем клиентам, и у них на форме в 1С светится информация о входящем звонке - кто-то из менеджеров нажимает кнопку принять, и звонок приходит на его рабочее место ?
Думаю, что в таком случае не будет ситуации, когда телефон менеджера звонит, а он ответить не может.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн