=== Общий модуль "МИКО_Софтфон" === // Проверят возможность запуска софтфона, наличие прав доступа // Функция МожноИспользовать() Экспорт ТребуетсяОбновление = ?(ОбщегоНазначенияПовтИсп.РазделениеВключено(), ОбновлениеИнформационнойБазыСлужебный.НеобходимоОбновлениеНеразделенныхДанныхИнформационнойБазы(), ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() ); ПравДостаточно = РольДоступна(Метаданные.Роли.ПолныеПрава) Или РольДоступна(Метаданные.Роли.МИКО_ИспользованиеСофтфона); Возврат (Не ТребуетсяОбновление) И ПравДостаточно; КонецФункции // МожноИспользовать() // Добавление кнопки позвонить в боковую панель контактной информации // Процедура ДобавитьКнопкиНаПанельКИ(ЭтаФорма) Экспорт ИменаЭлементов = Новый Массив(2); ИменаЭлементов[0] = "РасшифровкаСпискаКонтрагентТелефон"; ИменаЭлементов[1] = "РасшифровкаСпискаКонтактноеЛицоТелефон"; Для Каждого ИмяЭлемента Из ИменаЭлементов Цикл ПолеТелефон = ЭтаФорма.Элементы.Найти(ИмяЭлемента); Если ПолеТелефон <> Неопределено Тогда ГруппаРасшифровкаСписка = ПолеТелефон.Родитель; ИмяКоманды = ПолеТелефон.Имя + "Позвонить"; Если ЭтаФорма.Команды.Найти(ИмяКоманды) <> Неопределено Тогда Продолжить; КонецЕсли; ГруппаТелефон = ЭтаФорма.Элементы.Вставить("Группа" + ГруппаРасшифровкаСписка.Имя + "Телефон", Тип("ГруппаФормы"), ГруппаРасшифровкаСписка, ПолеТелефон); ГруппаТелефон.Вид = ВидГруппыФормы.ОбычнаяГруппа; ГруппаТелефон.ОтображатьЗаголовок = Ложь; ГруппаТелефон.Отображение = ОтображениеОбычнойГруппы.Нет; ГруппаТелефон.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; ЭтаФорма.Элементы.Переместить(ПолеТелефон, ГруппаТелефон); Команда = ЭтаФорма.Команды.Добавить(ИмяКоманды); Команда.Подсказка = НСтр("ru='Позвонить по телефону'"); Команда.Заголовок = "#"; Команда.Действие = "Подключаемый_НажатиеНаИнформационнуюСсылку"; КнопкаПозвонить = ЭтаФорма.Элементы.Добавить(ГруппаТелефон.Имя + "Позвонить", Тип("КнопкаФормы"), ГруппаТелефон); КнопкаПозвонить.ИмяКоманды = ИмяКоманды; КнопкаПозвонить.ЦветРамки = ЦветаСтиля.ЦветФонаФормы; КонецЕсли; КонецЦикла; КонецПроцедуры // ДобавитьКнопкиНаПанельКИ() // Проверяет имеет ли реквизит документа хотя бы один из указанных типов // Функция РеквизитИмеетТип(Реквизит, НаборТипов) Экспорт Для Каждого ЭлементТип Из НаборТипов Цикл Если Реквизит.Тип.СодержитТип(ЭлементТип) Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции // РеквизитИмеетТип() // Формирует массив справочников, в которых присутствует табличная часть // с контактной информацией // Функция ОпределитьСправочникиСКонтактнойИнформацией() Экспорт Результат = Новый Массив; Для каждого Источник Из Метаданные.Справочники Цикл // наличие таблицы КИ КонтактнаяИнформация = Источник.ТабличныеЧасти.Найти("КонтактнаяИнформация"); Если КонтактнаяИнформация = Неопределено Тогда Продолжить; КонецЕсли; // наличие прав доступа к таблице КИ Если НЕ ПравоДоступа("Чтение", Источник) ИЛИ НЕ ПравоДоступа("Чтение", Источник.ТабличныеЧасти.КонтактнаяИнформация) Тогда Продолжить; КонецЕсли; // наличие реквизитов Если КонтактнаяИнформация.реквизиты.Найти("НомерТелефона")=Неопределено Тогда Продолжить; КонецЕсли; //ТипИсточника = Тип(СтрЗаменить(Источник.ПолноеИмя(), "Справочник", "СправочникСсылка")); Результат.Добавить(Источник.Имя); КонецЦикла; Возврат Результат; КонецФункции // ОпределитьОбъектыСКонтаткнойИнформацией() // Определяет номера телефонов для указанного массива объектов // Функция ОпределитьНомераТелефонов(Объекты, ТипыОбъектов) Экспорт ШаблонЗапроса = "ВЫБРАТЬ {РАЗРЕШЕННЫЕ} | {Имя}КонтактнаяИнформация.Ссылка КАК Абонент, | {Имя}КонтактнаяИнформация.Ссылка.Наименование КАК Наименование, | {Имя}КонтактнаяИнформация.НомерТелефона КАК НомерТелефона, | {Имя}КонтактнаяИнформация.Представление КАК Представление, | {Вес} КАК Вес |//{ПОМЕСТИТЬ} ВТ |ИЗ | Справочник.{Имя}.КонтактнаяИнформация КАК {Имя}КонтактнаяИнформация |ГДЕ | {Имя}КонтактнаяИнформация.Тип = Значение(Перечисление.ТипыКонтактнойИнформации.Телефон) | И {Имя}КонтактнаяИнформация.Ссылка В (&Объекты)"; ТекстЗапроса = ""; Для Каждого ТипСправочника Из ТипыОбъектов Цикл ТекИмя = СтрЗаменить(Строка(ТипСправочника), "Ссылка", ""); Если Не ТекстЗапроса = "" Тогда ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС; врЗапрос = СтрЗаменить(ШаблонЗапроса, "{РАЗРЕШЕННЫЕ}", ""); Иначе врЗапрос = СтрЗаменить(ШаблонЗапроса, "{РАЗРЕШЕННЫЕ}", "РАЗРЕШЕННЫЕ"); //врЗапрос = СтрЗаменить(врЗапрос, "//{ПОМЕСТИТЬ}", "ПОМЕСТИТЬ"); КонецЕсли; врЗапрос = СтрЗаменить(врЗапрос, "{Имя}", ТекИмя); Вес = 0; Если ТекИмя = "Партнеры" Тогда Вес = 5; ИначеЕсли ТекИмя = "Контрагенты" Тогда Вес = 4; ИначеЕсли ТекИмя = "КонтактныеЛица" Тогда Вес = 3; ИначеЕсли ТекИмя = "ФизическиеЛица" Тогда Вес = 2; КонецЕсли; врЗапрос = СтрЗаменить(врЗапрос, "{Вес}", ""+Вес); ТекстЗапроса = ТекстЗапроса + Символы.ПС + врЗапрос + Символы.ПС; КонецЦикла; ТекстЗапроса = ТекстЗапроса + Символы.ПС + "УПОРЯДОЧИТЬ ПО Вес УБЫВ"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Объекты", Объекты); Результат = Новый СписокЗначений; ШрифтНазвания = Новый Шрифт(,, Истина); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Результат.Добавить(Выборка.Абонент, Выборка.Наименование + " " + Выборка.Представление); КонецЦикла; Возврат Результат; КонецФункции // ОпределитьНомераТелефонов()