Выполнить команду. Обработчик команды, связанной с контактной информацией (написать письмо, открыть адрес, и т.п.).
// Обработчик команды, связанной с контактной информацией (написать письмо, открыть адрес, и т.п.).
// Вызывается из подключаемых действий при внедрении подсистемы "Контактная информация".
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма владельца контактной информации.
// ИмяКоманды - Строка - имя автоматически сгенерированной команды действия.
//
Процедура ВыполнитьКоманду(Знач Форма, Знач ИмяКоманды) Экспорт
Если СтрНачинаетсяС(ИмяКоманды, "КонтактнаяИнформацияДобавитьПолеВвода") Тогда
ИмяЭлементаДляРазмещения = Сред(ИмяКоманды, СтрДлина("КонтактнаяИнформацияДобавитьПолеВвода") + 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)