====== Панель телефонии для БП. Интеграция. ======
Панель телефонии может работать в безинтеграцонном режиме. В этом разделе будут описаны достоинства и недостатки данного режима работы. Кроме того, будет описан способ интеграции панели на примере конфигурации Бухгалтерия предприятия, редакция 2.0, что позволит использовать функционал панели в полной мере.
===== Достоинства безинтеграционного режима работы: =====
* Не требуется изменение конфигурации. Панель может быть запущена через главное меню **“Файл -Открыть”**. При этом доступен практически весь функционал панели.
===== Особенности и ограничения: =====
* Для определения контрагента по номеру телефона используется временная таблица контактной информации, эта таблица обновляется с периодичностью, указанной в настройках панели. Врменная таблица - своего рода кэш контактной информации.
* Нет возможности набирать номер телефона контрагента из его карточки.
* Нет возможности отправки факса в текущий разговор средствами стандартной общей формы печати.
* Пользователю необходим расширенный набор прав: разрешить открытие внешних обработок.
В конфигурации БП 2.0 отсутствует документ "Событие". Вместо этого документа будет задействована карточка контрагента.
===== Пример интеграции в **БП 2.0.35.5**.=====
Далее будет описан пример интеграции панели, в котором будет предложен вариант преодоления ограничений.
Обязательно перед началом работ выполняйте резервное копирование информационной базы!
------------------------------------------------------------------------------------------------
**Задача:** Необходимо открывать форму панели телефонии автоматически при старте 1С.
**Решение:**
* Добавим в дерево метаданных обработку **"МИКО_ПанельТелефонииAsterisk"**
* Добавим в дерево метаданных новую роль:
Имя **"МИКО_ИспользованиеСофтфона"**.
Синоним **"Использование панели телефонии Asterisk (МИКО)"**.
Установить права на чтение и использование обработки "МИКО_ПанельТелефонииAsterisk".
* Модифицировать модуль обычного приложения
Раздел определения переменных:
... ... ...
// {{{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
Перем Miko_Ajam Экспорт;// МИКО обработка управления звонками
// {{{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
... ... ...
// Процедура - обработчик события "При начале работы системы".
//
Процедура ПриНачалеРаботыСистемы()
// ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ...
// {{{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО Софтфон MIKO_Ajam
// установка глобадьных переменных
Если РольДоступна("ПолныеПрава")
ИЛИ РольДоступна("МИКО_ИспользованиеСофтфона") Тогда
Попытка
Miko_Ajam = Обработки.МИКО_ПанельТелефонииAsterisk.Создать();
Miko_Ajam.ПодключитьСофтФон();
Исключение
Сообщить("Ошибка подключения СофтФона (МИКО):", СтатусСообщения.ОченьВажное);
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
// {{{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
КонецПроцедуры // ПриНачалеРаботыСистемы()
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// {{{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
Если Источник = "MikoAjamEvent" Тогда
Miko_Ajam.ОбработкаВнешнегоСобытияАстериск(Источник, Событие, Данные);
КонецЕсли;
// {{{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
КонецПроцедуры
Процедура ПередЗавершениемРаботыСистемы(Отказ)
// ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ...
// {{{ МИКО }}} НАЧАЛО Панель телефонии Asterisk
// Завершим работу Панель телефонии Asterisk перед выходом из предприятия
Если НЕ Miko_Ajam = Неопределено Тогда
Miko_Ajam.ОтключитьВК();
КонецЕсли;
// {{{ МИКО }}} КОНЕЦ Панель телефонии Asterisk
КонецПроцедуры
------------------------------------------------------------------------------------------------
**Задача:** необходимо, для поиска номеров в базе использовать запрос не по временной таблице, а непосредственно по регистру сведений "КонтактнаяИнформация".
**Решение:** необходимо модифицировать регистр сведений **"КонтактнаяИнформация"**:
Добавить ресурсы:
* CRM_ПолеХраненияНомера (число длина 32)
* CRM_НомерТелефона (переменная строка 32)
В модуле набора записей изменить процедуру:
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Для каждого Запись Из ЭтотОбъект Цикл
// ... ... ... Пропущена часть исходного текста ... ... ...
//{{{ МИКО }}} НАЧАЛО Код встраивания "Панель телефонии Asterisk"
Если НЕ Miko_Ajam = Неопределено
И НЕ Miko_Ajam.МИКО_ОбщийМодуль = Неопределено
И Запись.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
МИКО_ПредставлениеНомера = Запись.Поле1
+Запись.Поле2
+Запись.Поле3;
Если ЗначениеЗаполнено(Запись.Поле4) И НЕ ЗначениеЗаполнено(МИКО_ПредставлениеНомера) Тогда
Запись.CRM_ПолеХраненияНомера = Miko_Ajam.МИКО_ОбщийМодуль.ПреобразоватьНомерДляСохранения(Запись.Поле4,
Miko_Ajam.глКоличествоХранимыхЦифрТелефона);
Запись.CRM_НомерТелефона = Miko_Ajam.МИКО_ОбщийМодуль.УдалитьБуквыИзНомераТелефона(Запись.Поле4);
Иначе
Запись.CRM_ПолеХраненияНомера = Miko_Ajam.МИКО_ОбщийМодуль.ПреобразоватьНомерДляСохранения (МИКО_ПредставлениеНомера,
Miko_Ajam.глКоличествоХранимыхЦифрТелефона);
Запись.CRM_НомерТелефона = Miko_Ajam.МИКО_ОбщийМодуль.УдалитьБуквыИзНомераТелефона(МИКО_ПредставлениеНомера);
КонецЕсли;
КонецЕсли;
//{{{ МИКО }}} КОНЕЦ
КонецЦикла;
Если Отказ Тогда
Сообщить(СтрокаОтказа);
КонецЕсли;
КонецПроцедуры
После этого, добавленные ранее ресурсы, будут заполняться надлежащим образом.
==== Справочник "Контрагенты" ====
------------------------------------------------------------------------------------------------
**Задача:** необходимо, добавить возможность произвести звонок из карточки контрагента.
**Решение:** необходимо модифицировать форму элемента справочника "Контрагенты":
Процедура ПриОткрытии()
// !!! пропущена часть исходно текста !!!
// {{{ МИКО Панель телефонии Asterisk }}} НАЧАЛО
Если НЕ Miko_Ajam = Неопределено
И Miko_Ajam.МИКО_ОбщийМодуль.ИспользоватьСофтФон() Тогда
МИКО_ОбщийМодуль = Miko_Ajam.МИКО_ОбщийМодуль;
// добавляем элементы управления на форму
МИКО_ОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.КоманднаяПанельФормы.Кнопки,
"МИКО_ВыполнитьДействие",
"кнМИКО_НабратьНомерВыбравИзСписка");
//
ЭлементыФормы.КоманднаяПанельФормы.ИзменяетДанные = Ложь;
КонецЕсли;
// {{{ МИКО Панель телефонии Asterisk }}} КОНЕЦ
КонецПроцедуры // ПриОткрытии()
// Набор номера по заданному алгоритму
//
Процедура МИКО_ВыполнитьДействие(Кнопка)
Действие = Кнопка.Имя;
Если НЕ Miko_Ajam.глИспользоватьСофтФонMIKO_Ajam Тогда Возврат; КонецЕсли;
Если Действие = "кнМИКО_НабратьНомерВыбравИзСписка" ТОгда
// Позвонить по телефону, выбранному пользователем из списка телефонов определенных у контрагента и контактного лица
СписокОбъектов = Новый Структура();
СписокОбъектов.Вставить("Контрагент", Ссылка);
СписокОбъектов.Вставить("КонтактноеЛицо", ОсновноеКонтактноеЛицо);
Если НЕ Ссылка = ГоловнойКонтрагент Тогда
СписокОбъектов.Вставить("КонтактноеЛицо", ГоловнойКонтрагент);
КонецЕсли;
Miko_Ajam.ПозвонитьВыбравТелефон(СписокОбъектов);
КонецЕсли;
КонецПроцедуры
==== Общая форма печати документов ====
**Задача:** необходимо, добавить возможность отправки сформированной печатной формы в виде факсимильного сообщения в текущий вызов.
**Решение:** необходимо модифицировать общую форму "ПечатьДокументов":
Процедура ПриОткрытии()
//ЭлементыФормы.КоманднаяПанель1.Кнопки.ТолькоПросмотр.Доступность = ЗначениеЗаполнено(Документ);
//ЭлементыФормы.ПолеДокумента.ТолькоПросмотр = ЗначениеЗаполнено(Документ);
ОбновитьДанные();
// ... ... ... Пропущена часть исходного текста ... ... ...
ЭлементыФормы.КоманднаяПанель1.Кнопки.ТолькоПросмотр.Пометка = Истина;
КоличествоКопий = Макс(ЭлементыФормы.ПолеДокумента.КоличествоЭкземпляров, 1);
// {{{ МИКО Панель телефонии Asterisk }}} НАЧАЛО
Если НЕ Miko_Ajam = Неопределено
И Miko_Ajam.МИКО_ОбщийМодуль.ИспользоватьСофтФон() Тогда
МИКО_ОбщийМодуль = Miko_Ajam.МИКО_ОбщийМодуль;
// добавляем элементы управления на форму
МИКО_ОбщийМодуль.ДобавитьКнопкуОтправкиФаксаНаПанельДействий(ЭлементыФормы.КоманднаяПанель1.Кнопки,
"МИКО_ВыполнитьДействие",
"кнМИКО_ОтправитьФакс");
КонецЕсли;
// {{{ МИКО Панель телефонии Asterisk }}} КОНЕЦ
КонецПроцедуры
// Набор номера по заданному алгоритму
//
Процедура МИКО_ВыполнитьДействие(Кнопка)
Действие = Кнопка.Имя;
Если НЕ Miko_Ajam.глИспользоватьСофтФонMIKO_Ajam Тогда Возврат; КонецЕсли;
Если Действие = "кнМИКО_ОтправитьФакс" Тогда
// Обработчик нажатия на кнопку отправки табличного документа в текущий разговор
Miko_Ajam.ОтправитьФаксомТабДок(ЭлементыФормы.ПолеДокумента);
КонецЕсли;
КонецПроцедуры
===== Полезные ссылки =====
[[doc:panel1cut:config_bezint|Интеграция панели телефонии с УТ 10.3]]