====== Интеграция в 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 |}} На этом встраивание завершено.