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