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