====== Интеграция в 1С:Управление торговым предприятием, ред. 2.0 ======
===== Подготовка =====
Инструкция актуальна для версии конфигурации 2.0.8.7 и для версии панели 1.2.24.6.
Обязательно перед началом работ **выполняйте резервное копирование** информационной базы!
Для начала необходимо открыть информационную базу в режиме запуска «**Конфигуратор**». Для объектов следует установить правило поддержки «**Редактируется с сохранением поддержки**».
{{page>astpanel:designer:ut11:poddergka}}
===== Встраивание =====
**Задача:** Необходимо открывать форму панели телефонии автоматически при старте 1С.
=== Добавление обработки в конфигурацию===
Добавим в дерево метаданных внешнюю обработку **"МИКО_ПанельТелефонииДля1С"**
=== Настройка ролей ===
Добавим в дерево метаданных новую роль:
- Имя **"МИКО_ИспользованиеСофтфона"**.
- Синоним **"Использование панели телефонии Asterisk (МИКО)"**.
Установить права на **использование** и **просмотр** обработки "МИКО_ПанельТелефонииДля1С".
{{ :astpanel:designer:d.png?nolink | }}
При настройке прав пользователей необходимо добавить эту роль тем, кто будет работать непосредственно с телефонией.
=== Изменение типовых объектов===
* Модифицировать модуль обычного приложения
Определите глобальную переменную в начале модуля до раздела процедур.
// {{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, МИКО }}} КОНЕЦ
ПоддерживаемыеКонфигурации.Добавить("УправлениеТорговымПредприятиемДляУкраины","Управление торговым предприятием для Украины");
ПоддерживаемыеКонфигурации.Добавить("УправлениеТорговлейДляУкраины","Управление торговлей для Украины");
// ... ... ... Внимание!!! Пропущена часть кода!!! ... ... ...
* Обновите конфигурацию базы данных. {{ :doc:panel1ccrm20:confupd.png? |}}
* Установите роль для пользователей
Откройте меню **Администрирование - Пользователи** и укажите для пользователя роль "**Использование панели телефонии Asterisk (МИКО)**". Иначе первый запуск произвести невозможно.
{{ :astpanel:designer:user_rol.png?nolink |}}
На этом встраивание завершено.
==== Модернизация документа "Событие" ====
=== Связь истории звонков и документа "Событие" ===
**Задача:** необходимо хранить связку документа события с записью в истории звонков. При открытии документа события из истории, должен открываться документ сформированный ранее по этой записи.
**Решение:** для документа "Событие" необходимо добавить новый реквизит:
* Имя = "**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Звонка);
КонецЕсли;
КонецПроцедуры
Документ при открытии будет выглядеть следующим образом:
{{ :doc:panel1cut:dokument_sobytie.jpg? |}}
==== Модернизация регистра сведений Контактная информация ====
**Задача:** необходимо, для поиска номеров в базе использовать запрос не по временной таблице, а непосредственно по регистру сведений "КонтактнаяИнформация".
**Решение:** необходимо модифицировать регистр сведений **"КонтактнаяИнформация"**:
Добавить ресурсы:
* "**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:forma_kontragenta.png? |}}
==== Модернизация общей формы печати документов ====
=== Отправка факсом текущего документа ===
**Задача:** необходимо, добавить возможность отправки сформированной печатной формы в виде факсимильного сообщения в текущий вызов.
**Решение:** необходимо модифицировать общую форму "ПечатьДокументов":
// Обработчик "ПриОткрытии" формы печати
//
Процедура ПриОткрытии()
ЭлементыФормы.ПолеТабличногоДокумента.ВставитьОбласть(ПечатныйДокумент.Область());
ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьЗаголовки = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.ОтображатьСетку = Ложь;
ЭлементыФормы.ПолеТабличногоДокумента.Защита = Защита;
ЭлементыФормы.ПолеТабличногоДокумента.ТолькоПросмотр = Истина;
ЭлементыФормы.ПолеТабличногоДокумента.ИмяПараметровПечати = ПечатныйДокумент.ИмяПараметровПечати;
ЭлементыФормы.ПолеТабличногоДокумента.ПовторятьПриПечатиСтроки = ПечатныйДокумент.ПовторятьПриПечатиСтроки;
// {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} НАЧАЛО
Если НЕ Miko_Ajam = Неопределено
И НЕ Miko_Ajam.мОбщийМодуль = Неопределено Тогда
мОбщийМодуль = Miko_Ajam.мОбщийМодуль;
// добавляем элементы управления на форму
мОбщийМодуль.ДобавитьКнопкуОтправкиФаксаНаПанельДействий(ЭлементыФормы.КоманднаяПанельФормы.Кнопки,
"МИКО_ВыполнитьДействие",
"кнМИКО_ОтправитьФакс");
КонецЕсли;
// {{doc:panel1cut:{ МИКО Панель телефонии Asterisk }}} КОНЕЦ
КонецПроцедуры
добавить обработчик нажатия кнопки:
// Набор номера по заданному алгоритму
// Параметры
// Кнопка - элемент управления формы с типом "КнопкаКоманднойПанели"
Процедура МИКО_ВыполнитьДействие(Кнопка)
Действие = Кнопка.Имя;
Если Miko_Ajam = Неопределено Тогда Возврат; КонецЕсли;
Если Действие = "кнМИКО_ОтправитьФакс" Тогда
// Обработчик нажатия на кнопку отправки табличного документа в текущий разговор
Miko_Ajam.ОтправитьФаксомТабДок(ЭлементыФормы.ПолеТабличногоДокумента);
КонецЕсли;
КонецПроцедуры
Общая печатная форма примет вид:
{{ :doc:panel1cut:obschaja_forma_pechati_dokumentov.png? |}}
===== Назначение роли "Телефония" =====
Обязательно укажите для пользователя роль "**Использование панели телефонии Asterisk (МИКО)**". Иначе первый запуск произвести невозможно.
{{ :astpanel:designer:user_rol.png?nolink |}}
На этом встраивание завершено.