Для начала следует разблокировать головной объект конфигурации для внесения изменений.
Порядок действий следующий.
Теперь конфигурация готова к внесению изменений.
Необходимо встроить внешнюю обработку (панель телефонии) в конфигурации, настроить права доступа и ее автоматический запуск в фоновом режиме.
Для работы панели телефонии в фоне и ее автоматического запуска внесем изменения в модуль управляемого приложения.
// PT1C / Панель телефонии Asterisk / Начало Перем сфпФормаТелефон Экспорт; // PT1C / Панель телефонии Asterisk / Конец
// PT1C / Панель телефонии Asterisk / Начало Попытка Отказ = Ложь; // получим форму - основной "модуль" панели телефонии сфпФормаТелефон = ПолучитьФорму("Обработка.МИКО_ПанельТелефонииДля1С.Форма.Форма"); Исключение сфпФормаТелефон = Неопределено; //Нет прав на обработку КонецПопытки; Если НЕ сфпФормаТелефон = Неопределено Тогда сфпФормаТелефон.ИнициализироватьПанельТелефонии(Истина, Отказ); КонецЕсли; // проверим успешность инициализации Если Отказ Тогда Сообщить("Не удалось запустить ""МИКО Панель телефонии Asterisk"""); КонецЕсли; // PT1C / Панель телефонии Asterisk / Конец
// PT1C / Панель телефонии Asterisk / Начало Если сфпФормаТелефон <> Неопределено Тогда сфпФормаТелефон.ЗавершитьРаботу(Истина); КонецЕсли; // PT1C / Панель телефонии Asterisk / Конец
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Если сфпФормаТелефон <> Неопределено Тогда Если сфпФормаТелефон.Открыта() Тогда сфпФормаТелефон.Активизировать(); Иначе сфпФормаТелефон.Открыть(); КонецЕсли; КонецЕсли; КонецПроцедуры
Перейдите к обработке «МИКО_ПанельТелефонииДля1С». Откройте модуль объекта. Далее необходимо изменить функцию «ОпределитьПараметрыКонфигурации» следующим образом:
Функция ОпределитьПараметрыКонфигурации() Экспорт // *** *** *** // ВНИМАНИЕ ПРОПУЩЕНА ЧАСТЬ ИСХОДНОГО КОДА // *** *** *** ИначеЕсли ТекущаяКонфигурация = "УправлениеТорговлей" //Для Казахстана /Начало ИЛИ ТекущаяКонфигурация = "УправлениеТорговлейДляКазахстана" //Для Казахстана /Конец ИЛИ ТекущаяКонфигурация = "УправлениеТорговлейБазовая" ИЛИ ТекущаяКонфигурация = "УправлениеТорговлей_CRM_2" ИЛИ ТекущаяКонфигурация = "УправлениеПредприятием" ИЛИ ТекущаяКонфигурация = "УправлениеПредприятием_CRM" ИЛИ ТекущаяКонфигурация = "УправлениеТорговлейДляУкраины" Тогда ТекущаяКонфигурация = ?(ТекущаяКонфигурация = "УправлениеТорговлейБазовая","УправлениеТорговлей",ТекущаяКонфигурация); ЭтоУТ11 = (ТекущаяКонфигурация = "УправлениеТорговлей" //Для Казахстана /Начало ИЛИ ТекущаяКонфигурация = "УправлениеТорговлейДляКазахстана" //Для Казахстана /Конец ИЛИ ТекущаяКонфигурация = "УправлениеТорговлейДляУкраины" ИЛИ ТекущаяКонфигурация = "УправлениеПредприятием"); // *** *** *** // ВНИМАНИЕ ПРОПУЩЕНА ЧАСТЬ ИСХОДНОГО КОДА // *** *** *** КонецФункции
Перейдите к функции «ПоддерживаемыеКонфигурации» и добавьте строку, как показано ниже:
Функция ПоддерживаемыеКонфигурации() Экспорт // *** *** *** // ВНИМАНИЕ ПРОПУЩЕНА ЧАСТЬ ИСХОДНОГО КОДА // *** *** *** //Для Казахстана Результат.Добавить("УправлениеТорговлейДляКазахстана", "Управление торговлей для Казахстана, редакция 3.1"); Возврат Результат; КонецФункции
Обновите конфигурацию базы данных.
Для автоматизации набора номера телефона добавим кнопку «Позвонить» в область команд форм некоторых справочников и документов.
Порядок действий следующий.
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Если сфпФормаТелефон <> Неопределено Тогда СписокУчастников = ПолучитьСсылкуНаУчастникаИзДокумента(ПараметрКоманды); Если СписокУчастников <> Неопределено Тогда сфпФормаТелефон.ПозвонитьВыбравТелефон(СписокУчастников); КонецЕсли; КонецЕсли; КонецПроцедуры // Для документов будет возвращено значение реквизита "Контрагент" // Для справочников - возвращается ссылка на элемент // В случае ошибки возвращается "Неопределено" // Функция ПолучитьСсылкуНаУчастникаИзДокумента(Знач Ссылка) Экспорт Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда МассивОбъектов = Новый Массив(1); МассивОбъектов[0] = Ссылка; Возврат МассивОбъектов; ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Ссылка)) Тогда МассивОбъектов = Новый Массив; ДобавитьЗначениеРеквизитаВМассив(Ссылка, МассивОбъектов, "Контрагент"); ДобавитьЗначениеРеквизитаВМассив(Ссылка, МассивОбъектов, "Партнер"); ДобавитьЗначениеРеквизитаВМассив(Ссылка, МассивОбъектов, "КонтактноеЛицо"); ДобавитьЗначениеРеквизитаВМассив(Ссылка, МассивОбъектов, "АбонентКонтакт"); Возврат МассивОбъектов; КонецЕсли; КонецФункции // ПолучитьСсылкуНаУчастникаИзДокумента() // Получате значение раквизита, если значение заполнено - добавляет его в массив. // Функция ДобавитьЗначениеРеквизитаВМассив(Знач Ссылка, Массив, ИмяРеквизита) Экспорт Если Ссылка.Метаданные().Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда Возврат Ложь; КонецЕсли; Если ЗначениеЗаполнено(Ссылка[ИмяРеквизита]) Тогда Массив.Добавить(Ссылка[ИмяРеквизита]); КонецЕсли; Возврат Истина; КонецФункции // ДобавитьЗначениеРеквизитаВМассив()
.
Для ранее созданной роли «МИКО_Софтфон» добавьте права на доступ к команде «Позвонить».
Вы может указать и другие типы объектов, в которых будет отображена команда «Позвонить». Основным критерием для выбора таких объектов является наличие табличной части «КонтактнаяИнформация», если это справочник, или реквизита «Контрагент», если это документ. В ином случае может потребоваться изменение текста модуля команды.
При желании можно добавить картинку на кнопку команды, предварительно разместив ее в библиотеке картинок.
Обновите конфигурацию базы данных и запустите программу в режиме «Предприятие». Результат работы показан на рисунке ниже.
В формах некоторых справочников (например, «Контрагент») присутствует закладка «Контактная информация». Для полей адреса и электронной почты уже разработан механизм добавляющий кнопку с соответствующим действием. Добавим для поля телефон аналогичную кнопку с действием «Позвонить».
Порядок действий следующий.
Функция Действие(Форма, Тип, ИмяРеквизита, ГруппаДействий, КоличествоАдресов, ЕстьКомментарий = Ложь) МожноСоздаватьДействие = Истина; Если Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСПочтовымиСообщениями") Тогда МодульРаботаСПочтовымиСообщениями = ОбщегоНазначения.ОбщийМодуль("РаботаСПочтовымиСообщениями"); Если НЕ МодульРаботаСПочтовымиСообщениями.ДоступнаОтправкаПисем() Тогда МожноСоздаватьДействие = Ложь; КонецЕсли; Иначе МожноСоздаватьДействие = Ложь; КонецЕсли; КонецЕсли; Если МожноСоздаватьДействие И ((Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница // PT1C / Панель телефонии Asterisk / Начало Или Тип = Перечисления.ТипыКонтактнойИнформации.Телефон // PT1C / Панель телефонии Asterisk / Конец Или Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты) Или (Тип = Перечисления.ТипыКонтактнойИнформации.Адрес И КоличествоАдресов > 1)) Тогда // Есть действие ... Если Тип = Перечисления.ТипыКонтактнойИнформации.Адрес Тогда ... ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.ВебСтраница Тогда ... ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда ... // PT1C / Панель телефонии Asterisk / Начало ИначеЕсли Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда Элемент.Заголовок = НСтр("ru='Позвонить'"); Команда.Подсказка = НСтр("ru='Позвонить'"); Команда.Картинка = БиблиотекаКартинок.МИКО_Телефон; // PT1C / Панель телефонии Asterisk / Конец КонецЕсли; ... Иначе ... КонецЕсли; Возврат Элемент; КонецФункции
Функция ПодключаемаяКоманда(Форма, Знач ИмяКоманды) Экспорт ... Если КомандаКонтекстногоМеню Тогда ... ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда ... ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда ... ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда ... // PT1C / Панель телефонии Asterisk / Начало ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда ПозвонитьПоТелефону(Форма, ИмяРеквизита); // PT1C / Панель телефонии Asterisk / Конец КонецЕсли; Возврат Неопределено; КонецФункции
По завершению работы помощника первоначальной настройки для документа будет создано свойство «ID_Звонок», назначение которого - хранить ссылку на запись.
Порядок действий:
&НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Если сфпФормаТелефон <> Неопределено Тогда ID_Звонок = ПолучитьИдентификаторЗвонка(ПараметрКоманды); Если ID_Звонок <> Неопределено Тогда сфпФормаТелефон.ПрослушатьЗвонокПоИдентификатору(ID_Звонок); КонецЕсли; КонецЕсли; КонецПроцедуры Функция ПолучитьИдентификаторЗвонка(Ссылка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СобытиеДополнительныеРеквизиты.Значение, | СобытиеДополнительныеРеквизиты.ТекстоваяСтрока |ИЗ | Документ.ТелефонныйЗвонок.ДополнительныеРеквизиты КАК СобытиеДополнительныеРеквизиты |ГДЕ | СобытиеДополнительныеРеквизиты.Ссылка = &ДокументСсылка | И СобытиеДополнительныеРеквизиты.Свойство В | (ВЫБРАТЬ | ДополнительныеРеквизитыИСведения.Ссылка | ИЗ | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения | ГДЕ | ДополнительныеРеквизитыИСведения.Наименование = &НаименованиеДопСвойства)"; Запрос.УстановитьПараметр("НаименованиеДопСвойства", "ID_Звонок"); Запрос.УстановитьПараметр("ДокументСсылка", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); Возврат Выборка.Значение; КонецЕсли; КонецФункции // ПолучитьИдентификаторЗвонка()
Данная команда будет доступна только для пользователей с полными правами.
Обновите конфигурацию базы данных и запустите программу в режиме «Предприятие». Результат работы показан на рисунке ниже.