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

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

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


astpanel:designer:utpkz

Интеграция в 1С:Управление торговым предприятием, ред. 2.0

Подготовка

Инструкция актуальна для версии конфигурации 2.0.8.7 и для версии панели 1.2.24.6.
Обязательно перед началом работ выполняйте резервное копирование информационной базы!

Для начала необходимо открыть информационную базу в режиме запуска «Конфигуратор». Для объектов следует установить правило поддержки «Редактируется с сохранением поддержки».

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

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

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

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

2013/08/06 13:54 · nb

Встраивание

Задача: Необходимо открывать форму панели телефонии автоматически при старте 1С.

Добавление обработки в конфигурацию

Добавим в дерево метаданных внешнюю обработку «МИКО_ПанельТелефонииДля1С»

Настройка ролей

Добавим в дерево метаданных новую роль:

  1. Имя «МИКО_ИспользованиеСофтфона».
  2. Синоним «Использование панели телефонии Asterisk (МИКО)«.

Установить права на использование и просмотр обработки «МИКО_ПанельТелефонииДля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
КонецПроцедуры

Модернизация обработки панели телефонии

  • Перейдите к функции «ПолучитьИмяОбщегоМодуля» и отредактируйте её так, как показано ниже:
Функция ПолучитьИмяОбщегоМодуля() Экспорт
 
	// ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ...
 
	ИначеЕсли (ИмяТекущейКонфигурации = "УправлениеТорговлей" И Лев(ВерсияК, 4) = "10.3")
	ИЛИ ИмяТекущейКонфигурации = "УправлениеПроизводственнымПредприятием"
	// {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
	ИЛИ ИмяТекущейКонфигурации = "УправлениеТорговымПредприятиемДляКазахстана"
	// {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
	ИЛИ ИмяТекущейКонфигурации = "КомплекснаяАвтоматизация"
	ИЛИ ИмяТекущейКонфигурации = "УправлениеТорговымПредприятиемДляУкраины" 
 
	// ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ...
  • Откройте форму СтартовыйПомощник в обработке МИКО_ПанельТелефонииДля1С.
  • Перейдите к функции «КонтрольИмениКонфигурации» и измените её так, как показано ниже:
Функция КонтрольИмениКонфигурации() Экспорт
 
 
	// ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ...
 
	ПоддерживаемыеКонфигурации.Добавить("УправлениеТорговлей","Управление торговлей");	
	ПоддерживаемыеКонфигурации.Добавить("УправлениеПроизводственнымПредприятием","Управление производственным предприятием");
	// {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} НАЧАЛО
	ПоддерживаемыеКонфигурации.Добавить("УправлениеТорговымПредприятиемДляКазахстана","Управление торговым предприятием для Казахстана, редакция 2.0");
	// {{doc:panel1cut:{ Панель телефонии Asterisk, МИКО }}} КОНЕЦ
	ПоддерживаемыеКонфигурации.Добавить("УправлениеТорговымПредприятиемДляУкраины","Управление торговым предприятием для Украины");	
	ПоддерживаемыеКонфигурации.Добавить("УправлениеТорговлейДляУкраины","Управление торговлей для Украины");
 
	// ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ...
  • Обновите конфигурацию базы данных.
  • Установите роль для пользователей

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

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

Модернизация документа "Событие"

Связь истории звонков и документа "Событие"

Задача: необходимо хранить связку документа события с записью в истории звонков. При открытии документа события из истории, должен открываться документ сформированный ранее по этой записи.

Решение: для документа «Событие» необходимо добавить новый реквизит:

  • Имя = «CRM_GUIDЗвонка»
  • Тип = Переменная строка 300 символов

Прослушать запись разговора из документа "Событие"

Задача: необходимо добавить возможность прослушать запись разговора, связанного с документом «Событие», из формы документа. Кроме того необходимо добавить возможность набрать номер контрагента, либо его контактного лица из формы документа.

Решение: необходимо модифицировать модуль формы документа:

// Обработчик события ПриОткрытии формы.
//
Процедура ПриОткрытии()
 
    // ... ... ... 
 
	мПоследнееЗначениеЭлементаПоискаПоСтрокеКонтрагент     = Контрагент;
	мПоследнееЗначениеЭлементаПоискаПоСтрокеКонтактноеЛицо = КонтактноеЛицо;
	мТекущаяДатаДокумента                                  = Дата;
	// {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО
	Если НЕ Miko_Ajam = Неопределено
		 И  НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда
		мОбщийМодуль = Miko_Ajam.мОбщийМодуль;
		// добавляем кнопку вызова
		мОбщийМодуль.ДобавитьКнопкуЗвонкаНаПанельДействий(ЭлементыФормы.ДействияФормы.Кнопки,
														  "МИКО_ВыполнитьДействие", 
                                                          "кнМИКО_НабратьНомерВыбравИзСписка");
		// добавляем кнопку прослушивания записи разговора
		мОбщийМодуль.ДобавитьКнопкуПрослушиванияЗаписиНаПанельДействий(ЭлементыФормы.ДействияФормы.Кнопки,
                                                                       "МИКО_ВыполнитьДействие", 
                                                                       "кнМИКО_ПрослушатьЗапись");
	КонецЕсли; 
	// {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ	
	Модифицированность = Ложь;
 
КонецПроцедуры  // ПриОткрытии()

добавить в форму обработчик нажатия кнопок:

// МИКО // Набор номера по заданному алгоритму
// 
Процедура МИКО_ВыполнитьДействие(Кнопка)
 	Действие = Кнопка.Имя;
	Если Miko_Ajam = Неопределено Тогда Возврат; КонецЕсли;
 
	Если Действие = "кнМИКО_НабратьНомерВыбравИзСписка" Тогда
		// Позвонить по телефону выбранному пользователем из списка, определенных у контрагента и контактного лица
		СписокОбъектов = Новый Структура();
		СписокОбъектов.Вставить("Контрагент", Контрагент);
		СписокОбъектов.Вставить("КонтактноеЛицо", КонтактноеЛицо);
		// Данные незарегистрированных контрагентов:
		СписокОбъектов.Вставить("Событие", Ссылка);
 
		Miko_Ajam.ПозвонитьВыбравТелефон(СписокОбъектов);
	ИначеЕсли Действие = "кнМИКО_ПрослушатьЗапись" Тогда
		Если НЕ ЗначениеЗаполнено(CRM_GUIDЗвонка) Тогда
			Сообщить("К событию не прикреплено записи разговора!");
			Возврат;
		КонецЕсли;
		// Прослушать запись разговора, прикрепленного к событию
		Miko_Ajam.ПрослушатьЗаписьРазговора(CRM_GUIDЗвонка);
	КонецЕсли;	
КонецПроцедуры

Документ при открытии будет выглядеть следующим образом:

Модернизация регистра сведений Контактная информация

Задача: необходимо, для поиска номеров в базе использовать запрос не по временной таблице, а непосредственно по регистру сведений «КонтактнаяИнформация».

Решение: необходимо модифицировать регистр сведений «КонтактнаяИнформация»: Добавить ресурсы:

  • «CRM_ПолеХраненияНомера» (число длина 32)
  • «CRM_НомерТелефона» (переменная строка 32)

В модуле набора записей изменить процедуру:

// Обработчик ПередЗаписью контактной информации, набора записей
// 
Процедура ПередЗаписью(Отказ, Замещение)
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
 
	Для каждого Запись Из ЭтотОбъект Цикл
		Если НЕ ЗначениеЗаполнено(Запись.Объект) Тогда
			Отказ = Истина;
			СтрокаОтказа = "Не заполнен объект.";
			Продолжить;
		КонецЕсли; 
		Если Запись.Объект.ЭтоГруппа Тогда
			Отказ = Истина;
			СтрокаОтказа = "Нельзя использовать в качестве объекта контактной информации - группу.";
			Прервать;
		КонецЕсли;
		#Если Клиент Тогда 
		//{{doc:panel1cut:{ МИКО }}} НАЧАЛО Код встраивания "Панель телефонии Asterisk"
		Если НЕ Miko_Ajam = Неопределено                       
                     И НЕ Miko_Ajam.мОбработкаДанных = Неопределено
                     И Запись.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
			ПредставлениеНомера = Запись.Поле1 + Запись.Поле2 + Запись.Поле3;
 
			Если ЗначениеЗаполнено(Запись.Поле4) И НЕ ЗначениеЗаполнено(ПредставлениеНомера) Тогда
				Запись.CRM_ПолеХраненияНомера = Miko_Ajam.мОбработкаДанных.ПреобразоватьНомерДляСохранения(Запись.Поле4,  Miko_Ajam.ГлобальныеПеременные.глКоличествоХранимыхЦифрТелефона);
				Запись.CRM_НомерТелефона      = Miko_Ajam.мОбработкаДанных.УбратьИзНомераТелефонаВсеБуквы   (Запись.Поле4);
			Иначе
				Запись.CRM_ПолеХраненияНомера = Miko_Ajam.мОбработкаДанных.ПреобразоватьНомерДляСохранения (ПредставлениеНомера,  Miko_Ajam.ГлобальныеПеременные.глКоличествоХранимыхЦифрТелефона);
				Запись.CRM_НомерТелефона      = Miko_Ajam.мОбработкаДанных.УбратьИзНомераТелефонаВсеБуквы    (ПредставлениеНомера);
			КонецЕсли;
		КонецЕсли;
 
		// Для возможности сохранения Скайп номера
		Если Найти(Запись.Вид,"Skype")>0 Тогда
			Запись.CRM_НомерТелефона = Запись.Представление;
		КонецЕсли;
		//{{doc:panel1cut:{ МИКО }}} КОНЕЦ
		#конецесли
	КонецЦикла;
 
	Если Отказ Тогда
		Сообщить(СтрокаОтказа);
	КонецЕсли; 
 
КонецПроцедуры

После этого, добавленные ранее ресурсы, будут заполняться надлежащим образом.

Модернизация справочника "Контрагенты"

Звонок из карточки Контрагента

Задача: необходимо, добавить возможность произвести звонок из карточки контрагента.

Решение: необходимо модифицировать форму элемента справочника «Контрагенты»:

// Обработчик события ПриОткрытии формы.
//
Процедура ПриОткрытии()
 
	// ... ... ... Внимание!!! Отсутствует часть исходного кода!!!
 
	// Установить печатную форму по умолчанию.
	РаботаСДиалогами.УстановитьКнопкуПечати(ЭтотОбъект, ЭтаФорма);
	// {{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 (МИКО)». Иначе первый запуск произвести невозможно.

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

astpanel/designer/utpkz.txt · Последние изменения: 2016/05/20 13:59 — icvet