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