Внимание!
Эта wiki об устаревших версиях
Документация к актуальной версии интеграции 1С и телефонии доступна по ссылке

Инструменты пользователя

Инструменты сайта


astpanel:designer:bp20

Пример интеграции в БП 2.0.48.7

Встраивать панель телефонии стало проще! Доработка конфигурации с минимальными изменениями! Встраивание панели телефонии с помощью механизма расширений описано здесь.

Подготовка конфигурации к изменениям

Обязательно перед началом работ выполняйте резервное копирование информационной базы!

Включаем возможность изменения конфигурации

Для начала следует разблокировать корневой объект конфигурации для внесения изменений.

Порядок действий следующий:

  1. Сперва убедитесь, что все пользователи завершили свою работу с программой. После чего запустите программу в режиме «Конфигуратор».
  2. Откройте окно настройки поддержки.
  3. Включите возможность изменения конфигурации. На предупреждение программы ответьте утвердительно.
  4. В появившемся окне укажите, что объекты поставщика не редактируются.
  5. Затем для корневого объекта конфигурации установите правило поддержки «Объект поставщика редактируется с сохранением поддержки».

Теперь конфигурация готова к внесению изменений.

2013/08/06 13:54 · nb

Интеграция

В конфигурации БП 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.ОтправитьФаксомТабДок(ЭлементыФормы.ПолеДокумента);
	КонецЕсли; 
 
КонецПроцедуры

Общая печатная форма примет вид:

Настройка прав доступа

Обязательно укажите для пользователя роль «Использование панели телефонии Asterisk (МИКО)». Иначе первый запуск произвести невозможно.

На этом встраивание завершено.

astpanel/designer/bp20.txt · Последние изменения: 2018/09/11 13:09 — tpor