ВыполнитьКоманду (БСП)

Автор: 1С
ОбщийМодуль.УправлениеКонтактнойИнформациейКлиент
1С БСП

Выполнить команду. Обработчик команды, связанной с контактной информацией (написать письмо, открыть адрес, и т.п.).

// Обработчик команды, связанной с контактной информацией (написать письмо, открыть адрес, и т.п.).
// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация".
//
// Параметры:
//     Форма      - ФормаКлиентскогоПриложения - форма владельца контактной информации.
//     ИмяКоманды - Строка           - имя автоматически сгенерированной команды действия.
//
Процедура ВыполнитьКоманду(Знач Форма, Знач ИмяКоманды) Экспорт
	
	Если СтрНачинаетсяС(ИмяКоманды, "КонтактнаяИнформацияДобавитьПолеВвода") Тогда
		
		ИмяЭлементаДляРазмещения = Сред(ИмяКоманды, СтрДлина("КонтактнаяИнформацияДобавитьПолеВвода") + 1);
		Оповещение = Новый ОписаниеОповещения("КонтактнаяИнформацияДобавитьПолеВводаЗавершение", ЭтотОбъект, Новый Структура);
		Оповещение.ДополнительныеПараметры.Вставить("Форма", Форма);
		Оповещение.ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения);
		Оповещение.ДополнительныеПараметры.Вставить("ИмяКоманды", ИмяКоманды);
		Форма.ПоказатьВыборИзМеню(Оповещение, Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].СписокДобавляемыхЭлементов, Форма.Элементы[ИмяКоманды]);
		Возврат;
		
	ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "Команда") Тогда
		
		ИмяРеквизита = СтрЗаменить(ИмяКоманды, "Команда", "");
		КомандаКонтекстногоМеню = Неопределено;
		
	ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "МенюПодменюАдрес") Тогда
		
		ИмяРеквизита         = СтрЗаменить(ИмяКоманды, "МенюПодменюАдрес", "");
		Позиция              = СтрНайти(ИмяРеквизита, "_КонтактнаяИнформацияПоле");
		ИмяРеквизитаИсточник = Лев(ИмяРеквизита, Позиция -1);
		ИмяРеквизита         = Сред(ИмяРеквизита, Позиция + 1);
		КомандаКонтекстногоМеню = Неопределено;
		
	ИначеЕсли СтрНачинаетсяС(ИмяКоманды, "КартаЯндексМеню") 
		ИЛИ СтрНачинаетсяС(ИмяКоманды, "КартаGoogleМеню") Тогда
		
		КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды);
		ИмяРеквизита = Сред(КомандаКонтекстногоМеню.ИмяРеквизита, 5);
		
	Иначе
		
		КомандаКонтекстногоМеню = КомандаКонтекстногоМеню(ИмяКоманды);
		ИмяРеквизита = КомандаКонтекстногоМеню.ИмяРеквизита;
		
	КонецЕсли;
	
	Результат = Новый Структура("ИмяРеквизита", ИмяРеквизита);
	НайденныеСтроки = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат);
	Если НайденныеСтроки.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	НайденнаяСтрока          = НайденныеСтроки[0];
	ТипКонтактнойИнформации  = НайденнаяСтрока.Тип;
	ИмяЭлементаДляРазмещения = НайденнаяСтрока.ИмяЭлементаДляРазмещения;
	Результат.Вставить("ИмяЭлементаДляРазмещения", ИмяЭлементаДляРазмещения);
	
	Если КомандаКонтекстногоМеню <> Неопределено Тогда
		Если КомандаКонтекстногоМеню.Команда = "Комментарий" Тогда
			ВвестиКомментарий(Форма, КомандаКонтекстногоМеню.ИмяРеквизита, НайденнаяСтрока, Результат);
		ИначеЕсли КомандаКонтекстногоМеню.Команда = "История" Тогда
			ОткрытьФормуИсторииИзменений(Форма, НайденнаяСтрока);
		ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаЯндекс" Тогда
			ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "Яндекс.Карты");
		ИначеЕсли КомандаКонтекстногоМеню.Команда = "КартаGoogle" Тогда
			ПоказатьАдресНаКарте(НайденнаяСтрока.Представление, "GoogleMaps");
		Иначе
			ПервыйЭлемент = НайденнаяСтрока.ИмяРеквизита;
			Индекс = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Индекс(НайденнаяСтрока);
			Если КомандаКонтекстногоМеню.НаправлениеПеремещения = 1 Тогда
				Если Индекс < Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Количество() - 1 Тогда
					ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс + 1).ИмяРеквизита;
				КонецЕсли;
			Иначе
				Если Индекс > 0 Тогда
					ВторойЭлемент = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Получить(Индекс - 1).ИмяРеквизита;
				КонецЕсли;
			КонецЕсли;
			Результат = Новый Структура("ПоменятьМестамиЭлементы, ПервыйЭлемент, ВторойЭлемент", Истина, ПервыйЭлемент, ВторойЭлемент);
			Форма.ТекущийЭлемент = Форма.Элементы[ВторойЭлемент];
			ОбновитьКонтактнуюИнформациюФормы(Форма, Результат);
		КонецЕсли;
		
	ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда
		
		Результат = Новый Структура("ИмяРеквизита", ИмяРеквизитаИсточник);
		СтрокаПотребитель = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Результат)[0];
		
		Комментарий = СтрокаПотребитель.Комментарий; // Сохраняем старый комментарий.
		Если СтрокаПотребитель.Свойство("МеждународныйФорматАдреса") И СтрокаПотребитель.МеждународныйФорматАдреса Тогда
			
			ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Комментарий");
			ПредставлениеАдреса = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(НайденнаяСтрока.Представление);
			СтрокаПотребитель.Представление        = ПредставлениеАдреса;
			Форма[СтрокаПотребитель.ИмяРеквизита]  = ПредставлениеАдреса;
			СтрокаПотребитель.Значение             = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияПоПредставлению(ПредставлениеАдреса, ТипКонтактнойИнформации);
			
		Иначе
			
			ЗаполнитьЗначенияСвойств(СтрокаПотребитель, НайденнаяСтрока, "Значение, Представление,Комментарий");
			Форма[СтрокаПотребитель.ИмяРеквизита] = НайденнаяСтрока.Представление;
			
		КонецЕсли;
		
		Форма.Модифицированность = Истина;
		Результат = Новый Структура();
		Результат.Вставить("ОбновитьКонтекстноеМеню",  Истина);
		Результат.Вставить("ИмяРеквизита",             СтрокаПотребитель.ИмяРеквизита);
		Результат.Вставить("Комментарий",              Комментарий);
		Результат.Вставить("ИмяЭлементаДляРазмещения", НайденнаяСтрока.ИмяЭлементаДляРазмещения);
		ОбновитьКонтактнуюИнформациюФормы(Форма, Результат);
		
	ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда
		АдресПочты = Форма.Элементы[ИмяРеквизита].ТекстРедактирования;
		ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].Владелец;
		СоздатьЭлектронноеПисьмо("", АдресПочты, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации);
	ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Тогда
		МожноОтправлятьSMS = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].МожноОтправлятьSMS;
		
		Параметры = Новый Структура("НомерТелефона, ТипКонтактнойИнформации, ИсточникКонтактнойИнформации");
		Параметры.НомерТелефона = Форма.Элементы[ИмяРеквизита].ТекстРедактирования;
		Параметры.ТипКонтактнойИнформации = ТипКонтактнойИнформации;
		Параметры.ИсточникКонтактнойИнформации = Форма.ПараметрыКонтактнойИнформации[ИмяЭлементаДляРазмещения].Владелец;
		
		Если ПустаяСтрока(Параметры.НомерТелефона) Тогда
			Если МожноОтправлятьSMS Тогда
				ТекстПредупреждения = НСтр("ru = 'Для совершения звонка или отправки SMS требуется ввести номер телефона.'");
			Иначе
				ТекстПредупреждения = НСтр("ru = 'Для совершения звонка требуется ввести номер телефона.'");
			КонецЕсли;
			ПоказатьПредупреждение(, ТекстПредупреждения);
		ИначеЕсли МожноОтправлятьSMS Тогда
			Список = Новый СписокЗначений;
			Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'"),, БиблиотекаКартинок.Позвонить);
			Список.Добавить("ОтправитьSMS", НСтр("ru = 'Отправить SMS...'"),, БиблиотекаКартинок.ОтправитьSMS);
			ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюТелефон", ЭтотОбъект, Параметры);
			Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]);
		Иначе
			ПозвонитьПоТелефону(Параметры.НомерТелефона);
		КонецЕсли;
		
	ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype") Тогда
		Параметры = Новый Структура("ЛогинSkype");
		Параметры.ЛогинSkype = Форма.Элементы[ИмяРеквизита].ТекстРедактирования;
		Список = Новый СписокЗначений;
		Список.Добавить("Позвонить", НСтр("ru = 'Позвонить'"));
		Список.Добавить("НачатьЧат", НСтр("ru = 'Начать чат'"));
		ОповещениеМеню = Новый ОписаниеОповещения("ПослеВыбораИзМенюSkype", ЭтотОбъект, Параметры);
		Форма.ПоказатьВыборИзМеню(ОповещениеМеню, Список, Форма.Элементы[ИмяКоманды]);
		
	ИначеЕсли ТипКонтактнойИнформации = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.ВебСтраница") Тогда
		АдресСсылки = Форма.Элементы[ИмяРеквизита].ТекстРедактирования;
		ПерейтиПоВебСсылке("", АдресСсылки, ТипКонтактнойИнформации);
	КонецЕсли;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ВыполнитьКоманду (БСП)

КомандаВыполнить (БСП)

ВыполнитьКомандуВФоне (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз