====== Пример интеграции в БП 2.0.48.7 ======
Встраивать панель телефонии стало проще! Доработка конфигурации с минимальными изменениями! Встраивание панели телефонии с помощью **механизма расширений** описано [[astpanel:designer:extension|здесь]].
==== Подготовка конфигурации к изменениям ====
Обязательно перед началом работ выполняйте резервное копирование информационной базы!
=== Включаем возможность изменения конфигурации ===
{{page>astpanel:designer:ut11:poddergka}}
==== Интеграция ====
В конфигурации БП 2.0 отсутствует документ "Событие". Вместо этого документа будет задействована карточка контрагента.
=== Автооткрытие формы обработки при старте 1С ===
**Задача:** Необходимо открывать форму панели телефонии автоматически при старте 1С.
**Решение:**
* Добавим в дерево метаданных внешнюю обработку **"МИКО_ПанельТелефонииДля1С"**
* Добавим в дерево метаданных новую роль с параметрами:
Имя **"МИКО_ИспользованиеСофтфона"**.
Синоним **"Использование панели телефонии Asterisk (МИКО)"**.
Установить права на чтение и использование обработки **"МИКО_ПанельТелефонииДля1С"**.
* Модифицировать модуль обычного приложения
В раздел определения переменных добавим:
// {{doc:panel1cbp20:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
Перем Miko_Ajam Экспорт;// МИКО обработка управления звонками
// {{doc:panel1cbp20:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
В конце процедуры **ПриНачалеРаботыСистемы** добавим код:
// {{doc:panel1cbp20:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
// установка глобадьных переменных
Если РольДоступна("ПолныеПрава")
ИЛИ РольДоступна("МИКО_ИспользованиеСофтфона") Тогда
Попытка
Miko_Ajam = Обработки.МИКО_ПанельТелефонииДля1С.Создать();
Miko_Ajam.ПодключитьСофтФон();
Исключение
Сообщить("Ошибка подключения СофтФона (МИКО):", СтатусСообщения.ОченьВажное);
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
// {{doc:panel1cbp20:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
Создадим новую процедуру **ОбработкаВнешнегоСобытия**
// {{doc:panel1cbp20:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
// {{doc:panel1cbp20:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
Если (Источник = "MikoAjamEvent"
ИЛИ Источник = "MIKO_SoftPhone"
ИЛИ Источник = "hWindow")
И НЕ Miko_Ajam = Неопределено Тогда
Miko_Ajam.ОбработкаВнешнегоСобытияАстериск(Источник, Событие, Данные);
КонецЕсли;
// {{doc:panel1cbp20:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
КонецПроцедуры
В конец процедуры **ПередЗавершениемРаботыСистемы** добавим:
// {{doc:panel1cbp20:{ МИКО }}} НАЧАЛО Панель телефонии Asterisk
// Завершим работу Панель телефонии Asterisk перед выходом из предприятия
Если НЕ Отказ И НЕ Miko_Ajam = Неопределено Тогда
Miko_Ajam.ОтключитьВК();
КонецЕсли;
// {{doc:panel1cbp20:{ МИКО }}} КОНЕЦ Панель телефонии Asterisk
=== Модернизация регистра сведений "Контактная информация" ===
**Задача:** необходимо для поиска номеров в базе использовать запрос не по временной таблице, а непосредственно по регистру сведений **"КонтактнаяИнформация"**.
**Решение:** необходимо модифицировать регистр сведений **"КонтактнаяИнформация"**:
Добавить ресурсы:
* CRM_ПолеХраненияНомера (Параметры :число,длина 32)
* CRM_НомерТелефона (Параметры: переменная, строка, длина 32)
В модуле набора записей изменить процедуру:
Процедура ПередЗаписью(Отказ, Замещение)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Для каждого Запись Из ЭтотОбъект Цикл
// ... ... ... Пропущена часть исходного текста ... ... ...
// Панель телефонии для 1С // НАЧАЛО
#Если Клиент Тогда
Если НЕ Miko_Ajam = Неопределено
И НЕ Miko_Ajam.мОбработкаДанных = Неопределено
И Запись.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
глКоличествоХранимыхЦифрТелефона = Miko_Ajam.ГлобальныеПеременные.глКоличествоХранимыхЦифрТелефона;
мОбработкаДанных = Miko_Ajam.мОбработкаДанных;
ПредставлениеНомера = мОбработкаДанных.УбратьИзНомераТелефонаВсеБуквы(Запись.Поле1 + Запись.Поле2 + Запись.Поле3);
ПредставлениеБаза = мОбработкаДанных.УбратьИзНомераТелефонаВсеБуквы(Запись.Представление);
Если ЗначениеЗаполнено(Запись.Поле4) И НЕ ЗначениеЗаполнено(ПредставлениеНомера) Тогда
Запись.CRM_ПолеХраненияНомера = мОбработкаДанных.ПреобразоватьНомерДляСохранения(Запись.Поле4, глКоличествоХранимыхЦифрТелефона);
Запись.CRM_НомерТелефона = мОбработкаДанных.УбратьИзНомераТелефонаВсеБуквы (Запись.Поле4);
ИначеЕсли НЕ ЗначениеЗаполнено(ПредставлениеНомера + Запись.Поле4) И ЗначениеЗаполнено(ПредставлениеБаза) Тогда
Запись.CRM_ПолеХраненияНомера = мОбработкаДанных.ПреобразоватьНомерДляСохранения(ПредставлениеБаза, глКоличествоХранимыхЦифрТелефона);
Запись.CRM_НомерТелефона = ПредставлениеБаза;
Иначе
Запись.CRM_ПолеХраненияНомера = мОбработкаДанных.ПреобразоватьНомерДляСохранения(ПредставлениеНомера,глКоличествоХранимыхЦифрТелефона);
Запись.CRM_НомерТелефона = ПредставлениеНомера;
КонецЕсли;
КонецЕсли;
// Для возможности сохранения Скайп номера
Если Найти(Запись.Вид,"Skype")>0 Тогда
Запись.CRM_НомерТелефона = Запись.Представление;
КонецЕсли;
#КонецЕсли
// Панель телефонии для 1С// КОНЕЦ
КонецЦикла;
Если Отказ Тогда
Сообщить(СтрокаОтказа);
КонецЕсли;
КонецПроцедуры
После этого добавленные ранее ресурсы, будут заполняться надлежащим образом.
=== Модернизация справочника "Контрагенты" ===
------------------------------------------------------------------------------------------------
**Задача:** Добавить возможность произвести звонок из карточки контрагента.
**Решение:** Необходимо модифицировать форму элемента справочника **"Контрагенты"**:
Добавим в конец процедуры **ПередОткрытием** в модуле формы:
// {{doc:panel1cbp20:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО
Если НЕ Miko_Ajam = Неопределено
И НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда
мОбщийМодуль = Miko_Ajam.мОбщийМодуль;
// добавляем элементы управления на форму
мОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.КоманднаяПанельФормы.Кнопки,
"МИКО_ВыполнитьДействие",
"кнМИКО_НабратьНомерВыбравИзСписка");
мОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.КоманднаяПанельКонтактныеЛица.Кнопки,
"МИКО_ВыполнитьДействие",
"кнМИКО_НабратьНомерВыбравКЛ");
КонецЕсли;
// {{doc:panel1cbp20:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ
Добавим новую процедуру **МИКО_ВыполнитьДействие**
// МИКО // Набор номера по заданному алгоритму
//
Процедура МИКО_ВыполнитьДействие(Кнопка)
Действие = Кнопка.Имя;
Если Miko_Ajam = Неопределено Тогда Возврат; КонецЕсли;
Если Действие = "кнМИКО_НабратьНомерВыбравИзСписка" ТОгда
// Позвонить по телефону, выбранному пользователем из списка телефонов определенных у контрагента и контактного лица
СписокОбъектов = Новый Структура();
СписокОбъектов.Вставить("Контрагент", Ссылка);
СписокОбъектов.Вставить("КонтактноеЛицо", ОсновноеКонтактноеЛицо);
Если НЕ Ссылка = ГоловнойКонтрагент Тогда
СписокОбъектов.Вставить("КонтактноеЛицо", ГоловнойКонтрагент);
КонецЕсли;
Miko_Ajam.ПозвонитьВыбравТелефон(СписокОбъектов);
ИначеЕсли Действие = "кнМИКО_НабратьНомерВыбравКЛ" Тогда
// Позовонить выбранному контактному лицу
ТекущиеДанные = ЭлементыФормы.КонтактныеЛица.ТекущиеДанные;
Если НЕ ТекущиеДанные = Неопределено Тогда
СписокОбъектов = Новый Структура();
СписокОбъектов.Вставить("КонтактноеЛицо", ТекущиеДанные.Ссылка);
Miko_Ajam.ПозвонитьВыбравТелефон(СписокОбъектов);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
==== Модернизация общей формы печати документов ====
=== Отправка факсом текущего документа ===
**Задача:** необходимо, добавить возможность отправки сформированной печатной формы в виде факсимильного сообщения в текущий вызов.
**Решение:** необходимо модифицировать общую форму "**ФормаПечати**":
Процедура ПриОткрытии()
// ... ... ... Пропущена часть исходного текста ... ... ...
// {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО
Если НЕ Miko_Ajam = Неопределено
И НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда
мОбщийМодуль = Miko_Ajam.мОбщийМодуль;
// добавляем элементы управления на форму
мОбщийМодуль.ДобавитьКнопкуОтправкиФаксаНаПанельДействий(ЭлементыФормы.КоманднаяПанель1.Кнопки,
"МИКО_ВыполнитьДействие",
"кнМИКО_ОтправитьФакс");
КонецЕсли;
// {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ
КонецПроцедуры
добавить обработчик нажатия кнопки:
// Набор номера по заданному алгоритму
//
Процедура МИКО_ВыполнитьДействие(Кнопка)
Действие = Кнопка.Имя;
Если Miko_Ajam = Неопределено Тогда Возврат; КонецЕсли;
Если Действие = "кнМИКО_ОтправитьФакс" Тогда
// Обработчик нажатия на кнопку отправки табличного документа в текущий разговор
Miko_Ajam.ОтправитьФаксомТабДок(ЭлементыФормы.ПолеДокумента);
КонецЕсли;
КонецПроцедуры
Общая печатная форма примет вид:
{{ :doc:panel1cut:obschaja_forma_pechati_dokumentov.png? |}}
==== Настройка прав доступа ====
Обязательно укажите для пользователя роль "**Использование панели телефонии Asterisk (МИКО)**". Иначе первый запуск произвести невозможно.
{{ :astpanel:designer:user_rol.png?nolink |}}
На этом встраивание завершено.