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