Инструменты пользователя

Инструменты сайта


astpanel:designer:crm2:modulesrc_2_0_12

Общий модуль "МИКО_Софтфон" для 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 (МИКО)";
		НастройкаПанелиТелефонииОбъект.Записать();
 
	КонецЕсли; 
 
	Возврат Истина;
 
КонецФункции // ПодготовитьНастройкиПВХ()
 
Функция ИспользоватьПанельТелефонииАльфаАвто() Экспорт
 
    Попытка
		пвхНастройкиПользователей 	= Вычислить("ПланыВидовХарактеристик.ПраваИНастройки");
		НастройкаПанелиТелефонии	= пвхНастройкиПользователей["МИКО_ИспользоватьПанельТелефонии"];
    Исключение
    	НастройкаПанелиТелефонии	= Неопределено;
    КонецПопытки; 
 
    Если НастройкаПанелиТелефонии = Неопределено Тогда
    	Возврат Ложь;
    КонецЕсли;
 
 	Попытка
		ПанельТелДоступна = Вычислить("ПравоПользователя(НастройкаПанелиТелефонии)");
	Исключение
		ПанельТелДоступна = Ложь;
	КонецПопытки; 
 
	Возврат ПанельТелДоступна;
 
КонецФункции
astpanel/designer/crm2/modulesrc_2_0_12.txt · Последние изменения: 2019/10/30 07:59 — imal