====== Пример интеграции в БП 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 |}} На этом встраивание завершено.