Для начала необходимо открыть информационную базу в режиме запуска «Конфигуратор». Для объектов следует установить правило поддержки «Редактируется с сохранением поддержки».
Для начала следует разблокировать корневой объект конфигурации для внесения изменений.
Порядок действий следующий:
Теперь конфигурация готова к внесению изменений.
Задача: Необходимо открывать форму панели телефонии автоматически при старте 1С.
Добавим в дерево объектов конфигурации внешнюю обработку «МИКО_ПанельТелефонииДля1С». Она находится корневой папке скаченного комплекта.
Добавим в дерево метаданных новую роль:
Для этой роли с корневого элемента дерева объектов конфигурации снимите все права.
Установить права на использование и просмотр обработки «МИКО_ПанельТелефонииДля1С».
Определите глобальную переменную в начале модуля до раздела процедур.
// {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО Перем Miko_Ajam Экспорт;// МИКО обработка управления звонками // {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
Процедура ПриНачалеРаботыСистемы() // ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ... // {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО // установка глобадьных переменных Если РольДоступна("ПолныеПрава") ИЛИ РольДоступна("МИКО_ИспользованиеСофтфона") Тогда Попытка Miko_Ajam = Обработки.МИКО_ПанельТелефонииДля1С.Создать(); Miko_Ajam.ПодключитьСофтФон(); Исключение Сообщить("Ошибка подключения СофтФона (МИКО):", СтатусСообщения.ОченьВажное); Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЕсли; // {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ КонецПроцедуры // ПриНачалеРаботыСистемы()
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные) // ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ... // {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО Если (Источник = "MikoAjamEvent" ИЛИ Источник = "MIKO_SoftPhone" ИЛИ Источник = "hWindow") И НЕ Miko_Ajam = Неопределено Тогда Miko_Ajam.ОбработкаВнешнегоСобытияАстериск(Источник, Событие, Данные); КонецЕсли; // {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ КонецПроцедуры // ОбработкаВнешнегоСобытия()
Процедура ПередЗавершениемРаботыСистемы(Отказ) // ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ... // {{doc:panel1cut:{ МИКО }}} НАЧАЛО Панель телефонии Asterisk // Завершим работу Панель телефонии Asterisk перед выходом из предприятия Если НЕ Отказ И НЕ Miko_Ajam = Неопределено Тогда Miko_Ajam.ОтключитьВК(); КонецЕсли; // {{doc:panel1cut:{ МИКО }}} КОНЕЦ Панель телефонии Asterisk КонецПроцедуры
Откройте меню Администрирование - Пользователи и укажите для пользователя роль «Использование панели телефонии Asterisk (МИКО)». Иначе первый запуск произвести невозможно.
На этом встраивание завершено.
Задача: необходимо хранить связку документа события с записью в истории звонков. При открытии документа события из истории, должен открываться документ сформированный ранее по этой записи.
Решение: для документа «Событие» необходимо добавить новый реквизит:
Задача: необходимо добавить возможность прослушать запись разговора, связанного с документом «Событие», из формы документа. Кроме того необходимо добавить возможность набрать номер контрагента, либо его контактного лица из формы документа.
Решение: необходимо модифицировать модуль формы документа:
// Обработчик события ПриОткрытии формы. // Процедура ПриОткрытии() // ... ... ... мПоследнееЗначениеЭлементаПоискаПоСтрокеКонтрагент = Контрагент; мПоследнееЗначениеЭлементаПоискаПоСтрокеКонтактноеЛицо = КонтактноеЛицо; мТекущаяДатаДокумента = Дата; // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО Если НЕ Miko_Ajam = Неопределено И НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда мОбщийМодуль = Miko_Ajam.мОбщийМодуль; // добавляем кнопку вызова мОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.ДействияФормы.Кнопки, "МИКО_ВыполнитьДействие", "кнМИКО_НабратьНомерВыбравИзСписка"); // добавляем кнопку прослушивания записи разговора мОбщийМодуль.ДобавитьКнопкуПрослушиванияЗаписиНаПанельДействий(ЭлементыФормы.ДействияФормы.Кнопки, "МИКО_ВыполнитьДействие", "кнМИКО_ПрослушатьЗапись"); КонецЕсли; ПодключитьОбработчикОжидания("МИКО_СформироватьСтрокуТипаВида", 1, Истина); // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ Модифицированность = Ложь; КонецПроцедуры // ПриОткрытии()
добавить в форму обработчик нажатия кнопок:
// МИКО // Набор номера по заданному алгоритму // Процедура МИКО_ВыполнитьДействие(Кнопка) Действие = Кнопка.Имя; Если Miko_Ajam = Неопределено Тогда Возврат; КонецЕсли; Если Действие = "кнМИКО_НабратьНомерВыбравИзСписка" Тогда // Позвонить по телефону выбранному пользователем из списка, определенных у контрагента и контактного лица СписокОбъектов = Новый Структура(); СписокОбъектов.Вставить("Контрагент", Контрагент); СписокОбъектов.Вставить("КонтактноеЛицо", КонтактноеЛицо); // Данные незарегистрированных контрагентов: СписокОбъектов.Вставить("Событие", Ссылка); Miko_Ajam.ПозвонитьВыбравТелефон(СписокОбъектов); ИначеЕсли Действие = "кнМИКО_ПрослушатьЗапись" Тогда Если НЕ ЗначениеЗаполнено(CRM_GUIDЗвонка) Тогда Сообщить("К событию не прикреплено записи разговора!"); Возврат; КонецЕсли; // Прослушать запись разговора, прикрепленного к событию Miko_Ajam.ПрослушатьЗаписьРазговора(CRM_GUIDЗвонка); КонецЕсли; КонецПроцедуры Процедура МИКО_СформироватьСтрокуТипаВида() Экспорт // актуально для УТ 10.3.34.2 СформироватьСтрокуТипаВида(); КонецПроцедуры // МИКО_СформироватьСтрокуТипаВида()
Документ при открытии будет выглядеть следующим образом:
Задача: необходимо, для поиска номеров в базе использовать запрос не по временной таблице, а непосредственно по регистру сведений «КонтактнаяИнформация».
Решение: необходимо модифицировать регистр сведений «КонтактнаяИнформация»: Добавить ресурсы:
В модуле набора записей изменить процедуру:
// Обработчик ПередЗаписью контактной информации, набора записей // Процедура ПередЗаписью(Отказ, Замещение) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Для каждого Запись Из ЭтотОбъект Цикл Если НЕ ЗначениеЗаполнено(Запись.Объект) Тогда Отказ = Истина; СтрокаОтказа = "Не заполнен объект."; Продолжить; КонецЕсли; Если Запись.Объект.ЭтоГруппа Тогда Отказ = Истина; СтрокаОтказа = "Нельзя использовать в качестве объекта контактной информации - группу."; Прервать; КонецЕсли; // Панель телефонии для 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С// КОНЕЦ КонецЦикла; Если Отказ Тогда Сообщить(СтрокаОтказа); КонецЕсли; КонецПроцедуры
После этого, добавленные ранее ресурсы, будут заполняться надлежащим образом.
В некоторых случаях удобно не регистрировать нового клиента, а сохранить его просто в документе «Событие».
В этом случае данные будут сохранены в регистре сведений «ДанныеНезарегистрированныхКонтрагентов».
В стандартном исполнении регистр не позволяет сохранить сведения по коду страны. Исправим это.
Функцию заполнения ресурса возьмет на себя панель телефонии (поддерживается в версии 1.2.24.7+).
При регистрации неизвестного контрагента из документа Событие «пропадает» из номера телефона код страны, исправим этот момент. Откроем форму обработки «РедактированиеДанныхНезарегистрированныхКонтрагентов», в модуле формы найдем функцию «Зарегистрировать()» и дополним участок кода:
// Контактная инфомация контрагента // Телефон контрагента Если ЗначениеЗаполнено(Запись.ВидТелефонаКонтрагента) И НЕ ПустаяСтрока(Запись.НомерТелефонаКонтрагента) Тогда НоваяЗапись = ФормаКонтрагента.НаборКонтактнойИнформации.Добавить(); НоваяЗапись.Вид = Запись.ВидТелефонаКонтрагента; НоваяЗапись.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон; НоваяЗапись.Объект = НовыйКонтрагент.Ссылка; НоваяЗапись.Поле3 = Запись.НомерТелефонаКонтрагента; НоваяЗапись.Поле4 = Запись.ДобавочныйНомерТелефонаКонтрагента; НоваяЗапись.Поле2 = Запись.КодГородаТелефонаКонтрагента; // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО //Заполним код страны врСтруктураЗаполнения = Новый Структура("МИКО_КодСтраны", ""); ЗаполнитьЗначенияСвойств(врСтруктураЗаполнения, Запись); НоваяЗапись.Поле1 = врСтруктураЗаполнения.МИКО_КодСтраны; // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ УправлениеКонтактнойИнформацией.СформироватьПредставлениеТелефона(НоваяЗапись); КонецЕсли;
Задача: необходимо, добавить возможность произвести звонок из карточки контрагента.
Решение: необходимо модифицировать форму элемента справочника «Контрагенты»:
// Обработчик события ПриОткрытии формы. // Процедура ПриОткрытии() // ... ... ... Внимание!!! Отсутствует часть исходного кода!!! // Установить печатную форму по умолчанию. РаботаСДиалогами.УстановитьКнопкуПечати(ЭтотОбъект, ЭтаФорма); // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО Если НЕ Miko_Ajam = Неопределено И НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда мОбщийМодуль = Miko_Ajam.мОбщийМодуль; // добавляем элементы управления на форму мОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.ДействияФормы.Кнопки, "МИКО_ВыполнитьДействие", "кнМИКО_НабратьНомерВыбравИзСписка"); мОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.КоманднаяПанельКонтактнаяИнформация.Кнопки, "МИКО_ВыполнитьДействие", "кнМИКО_НабратьНомерИзКИ"); мОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.КоманднаяПанельКонтактныеЛицаКонтрагента.Кнопки, "МИКО_ВыполнитьДействие", "кнМИКО_НабратьНомерВыбравКЛ"); КонецЕсли; // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ КонецПроцедуры
добавить обработчик нажатия кнопок:
// МИКО // Набор номера по заданному алгоритму // Параметры // Кнопка - элемент управления формы с типом "КнопкаКоманднойПанели" Процедура МИКО_ВыполнитьДействие(Кнопка) Действие = Кнопка.Имя; Если Miko_Ajam = Неопределено Тогда Возврат; КонецЕсли; Если Действие = "кнМИКО_НабратьНомерИзКИ" Тогда // Позвонить по выбранному контакту ТекущаяСтрока = ЭлементыФормы.КонтактнаяИнформация.ТекущиеДанные; Если НЕ ТекущаяСтрока = Неопределено Тогда Miko_Ajam.НабратьНомерКИ(ЭлементыФормы.КонтактнаяИнформация.ТекущиеДанные); КонецЕсли; ИначеЕсли Действие = "кнМИКО_НабратьНомерВыбравИзСписка" ТОгда // Позвонить по телефону, выбранному пользователем из списка телефонов определенных у контрагента и контактного лица СписокОбъектов = Новый Структура(); СписокОбъектов.Вставить("Контрагент", Ссылка); СписокОбъектов.Вставить("КонтактноеЛицо", ОсновноеКонтактноеЛицо); Если НЕ Ссылка = ГоловнойКонтрагент Тогда СписокОбъектов.Вставить("КонтактноеЛицо", ГоловнойКонтрагент); КонецЕсли; Miko_Ajam.ПозвонитьВыбравТелефон(СписокОбъектов); ИначеЕсли Действие = "кнМИКО_НабратьНомерВыбравКЛ" Тогда // Позовонить выбранному контактному лицу ТекущиеДанные = ЭлементыФормы.КонтактныеЛицаКонтрагента.ТекущиеДанные; Если НЕ ТекущиеДанные = Неопределено Тогда СписокОбъектов = Новый Структура(); СписокОбъектов.Вставить("КонтактноеЛицо", ТекущиеДанные.Ссылка); Miko_Ajam.ПозвонитьВыбравТелефон(СписокОбъектов); КонецЕсли; ИначеЕсли Действие = "УстановитьДоступностьКнопокСофтфона" Тогда Miko_Ajam.мОбщийМодуль.УстановитьДоступностьКнопокСофтфона(ЭлементыФормы.КонтактнаяИнформация.ТекущиеДанные, ЭлементыФормы.КоманднаяПанельКонтактнаяИнформация.Кнопки, "кнМИКО_НабратьНомерИзКИ"); КонецЕсли; КонецПроцедуры
Кнопки должны быть доступны только для контактной информации с типом «Телефон»
// Обработчик события ПриАктивизацииСтроки элемента формы КонтактнаяИнформация. // Процедура КонтактнаяИнформацияПриАктивизацииСтроки(Элемент) УправлениеКонтактнойИнформацией.КонтактнаяИнформацияПриАктивизацииСтрокиТаблицы(Элемент, ЭлементыФормы.КоманднаяПанельКонтактнаяИнформация.Кнопки.УстановитьОсновным); // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО Если НЕ Miko_Ajam = Неопределено И НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда МИКО_ВыполнитьДействие(Новый Структура("Имя","УстановитьДоступностьКнопокСофтфона")); КонецЕсли; // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ КонецПроцедуры
Задача: необходимо, добавить возможность отправки сформированной печатной формы в виде факсимильного сообщения в текущий вызов.
Решение: необходимо модифицировать общую форму «ПечатьДокументов»:
// Обработчик "ПриОткрытии" формы печати // Процедура ПриОткрытии() ЭлементыФормы.ПолеТабличногоДокумента.ВставитьОбласть(ПечатныйДокумент.Область()); ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьЗаголовки = Ложь; ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьСетку = Ложь; ЭлементыФормы.ПолеТабличногоДокумента.Защита = Защита; ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = Истина; ЭлементыФормы.ПолеТабличногоДокумента.ИмяПараметровПечати = ПечатныйДокумент.ИмяПараметровПечати; ЭлементыФормы.ПолеТабличногоДокумента.ПовторятьПриПечатиСтроки = ПечатныйДокумент.ПовторятьПриПечатиСтроки; // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО Если НЕ Miko_Ajam = Неопределено И НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда мОбщийМодуль = Miko_Ajam.мОбщийМодуль; // добавляем элементы управления на форму мОбщийМодуль.ДобавитьКнопкуОтправкиФаксаНаПанельДействий(ЭлементыФормы.КоманднаяПанельФормы.Кнопки, "МИКО_ВыполнитьДействие", "кнМИКО_ОтправитьФакс"); КонецЕсли; // {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ КонецПроцедуры
добавить обработчик нажатия кнопки:
// Набор номера по заданному алгоритму // Параметры // Кнопка - элемент управления формы с типом "КнопкаКоманднойПанели" Процедура МИКО_ВыполнитьДействие(Кнопка) Действие = Кнопка.Имя; Если Miko_Ajam = Неопределено Тогда Возврат; КонецЕсли; Если Действие = "кнМИКО_ОтправитьФакс" Тогда // Обработчик нажатия на кнопку отправки табличного документа в текущий разговор Miko_Ajam.ОтправитьФаксомТабДок(ЭлементыФормы.ПолеТабличногоДокумента); КонецЕсли; КонецПроцедуры
Обязательно укажите для пользователя роль «Использование панели телефонии Asterisk (МИКО)». Иначе первый запуск произвести невозможно.
На этом встраивание завершено.