При автоматизации работы менеджеров по продажам или специалистов call-центров часто возникает задача организации быстрого обзвона клиентов прямо из базы 1С. Особенно актуально это становится при мобильной работе, когда сотрудники используют планшеты или смартфоны под управлением ОС Android и подключаются к базе через мобильный веб-клиент в браузере Google Chrome.
В стандартном сценарии пользователь видит сформированный табличный документ (например, отчет «Обзвон по клиентам»), в котором выведен текстовый номер телефона. Однако просто скопировать этот номер в буфер обмена или кликнуть по нему для вызова в браузере получается далеко не всегда из-за ограничений безопасности песочницы веб-клиента 1С. Ниже мы детально разберем, как обойти эти ограничения и настроить удобный набор номера в один клик.
Самым простым и элегантным способом связать веб-страницу (которой по сути является веб-клиент 1С в браузере) и операционную систему Android является использование стандартного протокола tel:. Когда операционная система получает запрос на открытие ссылки вида tel:+79110000000, она автоматически перенаправляет этот запрос в стандартное приложение для совершения звонков (номеронабиратель).
Давайте разберем по шагам, как настроить такую интеграцию в табличном документе отчета:
Гиперссылка = Истина. Это визуально выделит номер телефона и изменит поведение курсора при наведении.Расшифровка) мы будем передавать строку с номером телефона, предварительно очищенную от лишних символов (скобок, дефисов, пробелов) и приведенную к международному формату с префиксом tel:.Проанализируем пример кода, который очищает строку номера телефона от лишних символов:
&НаКлиенте
Функция ПодготовитьНомерДляЗвонка(Знач ИсходныйНомер)
ОчищенныйНомер = "";
Для Поз = 1 По СтрДлина(ИсходныйНомер) Цикл
Символ = Сред(ИсходныйНомер, Поз, 1);
Если Найти("0123456789+", Символ) > 0 Тогда
ОчищенныйНомер = ОчищенныйНомер + Символ;
КонецЕсли;
КонецЦикла;
// Приводим к международному стандарту, если номер начинается с 8
Если Лев(ОчищенныйНомер, 1) = "8" Тогда
ОчищенныйНомер = "+7" + Сред(ОчищенныйНомер, 2);
КонецЕсли;
Возврат "tel:" + ОчищенныйНомер;
КонецФункции
Теперь нам необходимо перехватить нажатие на ячейку отчета. Для этого в модуле формы отчета мы будем использовать обработчик события РезультатВыбор нашего табличного документа. Разберем этот обработчик:
&НаКлиенте
Процедура РезультатВыбор(Элемент, Область, СтандартнаяОбработка)
// Проверяем, что клик совершен по ячейке с установленной гиперссылкой
Если Область.Гиперссылка Тогда
СтандартнаяОбработка = Ложь; // Отменяем стандартное открытие расшифровки 1С
// Получаем строку с телефоном из данных расшифровки
НомерТелефона = ПолучитьТелефонИзРасшифровки(Область.Расшифровка);
Если ЗначениеЗаполнено(НомерТелефона) Тогда
СсылкаЗвонка = ПодготовитьНомерДляЗвонка(НомерТелефона);
// Запускаем переход по навигационной ссылке.
// Браузер Chrome на Android перенаправит эту ссылку в системную утилиту набора номера.
ПерейтиПоНавигационнойСсылке(СсылкаЗвонка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Для корректного извлечения данных расшифровки на клиенте (если расшифровка хранит сложную структуру или идентификатор объекта) мы можем использовать серверный контекст для получения реального текстового поля телефона:
&НаСервереБезКонтекста
Функция ПолучитьТелефонИзРасшифровки(Знач ДанныеРасшифровкиАдрес, Знач ИдентификаторРасшифровки)
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровкиАдрес);
Если ТипЗв(Данные) = Тип("ДанныеРасшифровкиКомпоновкиДанных") Тогда
Элемент = Данные.Элементы[ИдентификаторРасшифровки];
Если ТипЗв(Элемент) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
Для Каждого ЗначениеПоля Из Элемент.ПолучитьПоля() Цикл
Если ЗначениеПоля.Поле = "Телефон" Тогда
Возврат Строка(ЗначениеПоля.Значение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат "";
КонецФункции
Иногда стандартный табличный документ в веб-клиенте на мобильных устройствах может отображаться некорректно или накладывать ограничения на обработку жестов тач-скрина. В таких ситуациях мы можем пойти по альтернативному пути — выводить отчет не в стандартную таблицу 1С, а генерировать облегченную HTML-страницу и отображать ее через реквизит формы с типом Поле HTML документа.
В этом случае задача решается еще проще на уровне разметки страницы. Номера телефонов оборачиваются в стандартный тег ссылки:
&НаСервере
Функция СформироватьHTMLОтчета()
HTMLКод = "<html><body>";
HTMLКод = HTMLКод + "<h2>Список контактов для обзвона</h2>";
HTMLКод = HTMLКод + "<table border='1'>";
// Пример обхода выборки контрагентов
Выборка = Справочники.Контрагенты.Выбрать();
Пока Выборка.Следующий() Цикл
ОчищенныйНомер = ОчиститьСтрокуНомера(Выборка.Телефон); // Функция очистки знаков
HTMLКод = HTMLКод + "<tr>";
HTMLКод = HTMLКод + "<td>" + Выборка.Наименование + "</td>";
HTMLКод = HTMLКод + "<td><a href='tel:" + ОчищенныйНомер + "'>" + Выборка.Телефон + "</a></td>";
HTMLКод = HTMLКод + "</tr>";
КонецЦикла;
HTMLКод = HTMLКод + "</table></body></html>";
Возврат HTMLКод;
КонецФункции
Когда менеджер нажмет на такую ссылку в поле HTML-документа на своем планшете, мобильный браузер мгновенно распознает директиву tel: и откроет системное диалоговое окно Android с предложением совершить вызов.
Если ваша база 1С уже опубликована на веб-сервере (IIS или Apache) для работы сотрудников через Chrome, мы рекомендуем рассмотреть замену веб-клиента на специализированное приложение «1С:Мобильный клиент», доступное для установки на Android-устройства.
Мобильный клиент работает с той же самой базой данных, но предоставляет коду 1С прямой доступ к аппаратным возможностям планшета или смартфона. В этом случае нам не нужно использовать обходные пути с веб-ссылками. Мы можем напрямую обратиться к встроенным средствам телефонии мобильного устройства.
Рассмотрим, как реализовать вызов в мобильном клиенте с помощью системного глобального контекста СредстваТелефонии:
&НаКлиенте
Процедура ВыполнитьЗвонокНаМобильном(НомерТелефона)
#Если МобильныйКлиент Тогда
Если СредстваТелефонии.ПоддерживаетсяНаборНомера() Тогда
// Второй параметр Истина открывает системное приложение набора с подставленным номером.
// Если передать Ложь — звонок начнется мгновенно в фоновом режиме (требует разрешений в Android).
СредстваТелефонии.НабратьНомер(НомерТелефона, Истина);
Иначе
ПоказатьПредупреждение(, "Данное устройство не поддерживает совершение звонков!");
КонецЕсли;
#Иначе
// Резервный вариант для обычного веб-клиента
ПерейтиПоНавигационнойСсылке("tel:" + НомерТелефона);
#КонецЕсли
EndПроцедуры
Использование директивы препроцессора #Если МобильныйКлиент гарантирует, что конфигурация останется работоспособной как на стационарных компьютерах в офисе, так и на мобильных устройствах в полях.
Если перед компанией стоит задача не просто облегчить ручной набор номера, но и фиксировать историю звонков, записывать разговоры и автоматически создавать документы «Событие» или «Телефонный звонок» в 1С, лучшим выбором станет интеграция с корпоративной телефонией (IP-АТС).
В этом сценарии физический звонок совершается не через сим-карту планшета, а через сервер телефонии:
Такой подход полностью независим от используемого браузера, версии Android и модели планшета, так как вся логика коммутации звонка выполняется на стороне сервера телефонии.
Выбор конкретного метода зависит от технических требований проекта и используемой инфраструктуры. Для простого и быстрого старта идеально подойдет Метод 1 с протоколом tel:, а для масштабных отделов продаж рекомендуется смотреть в сторону полноценной интеграции с телефонией.