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