Как реализовать автоматический набор номера телефона из отчета 1С в веб-клиенте на Android

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При автоматизации работы менеджеров по продажам или специалистов call-центров часто возникает задача организации быстрого обзвона клиентов прямо из базы 1С. Особенно актуально это становится при мобильной работе, когда сотрудники используют планшеты или смартфоны под управлением ОС Android и подключаются к базе через мобильный веб-клиент в браузере Google Chrome.

В стандартном сценарии пользователь видит сформированный табличный документ (например, отчет «Обзвон по клиентам»), в котором выведен текстовый номер телефона. Однако просто скопировать этот номер в буфер обмена или кликнуть по нему для вызова в браузере получается далеко не всегда из-за ограничений безопасности песочницы веб-клиента 1С. Ниже мы детально разберем, как обойти эти ограничения и настроить удобный набор номера в один клик.


Метод 1. Использование системного протокола tel: и обработка выбора ячейки

Самым простым и элегантным способом связать веб-страницу (которой по сути является веб-клиент 1С в браузере) и операционную систему Android является использование стандартного протокола tel:. Когда операционная система получает запрос на открытие ссылки вида tel:+79110000000, она автоматически перенаправляет этот запрос в стандартное приложение для совершения звонков (номеронабиратель).

Давайте разберем по шагам, как настроить такую интеграцию в табличном документе отчета:

  1. Подготовка макета отчета. Для ячейки, в которую выводится номер телефона, необходимо программно или в свойствах макета установить свойство Гиперссылка = Истина. Это визуально выделит номер телефона и изменит поведение курсора при наведении.
  2. Заполнение расшифровки. Вместо простого текста в качестве значения расшифровки ячейки (свойство Расшифровка) мы будем передавать строку с номером телефона, предварительно очищенную от лишних символов (скобок, дефисов, пробелов) и приведенную к международному формату с префиксом tel:.

Проанализируем пример кода, который очищает строку номера телефона от лишних символов:


&НаКлиенте
Функция ПодготовитьНомерДляЗвонка(Знач ИсходныйНомер)
    ОчищенныйНомер = "";
    Для Поз = 1 По СтрДлина(ИсходныйНомер) Цикл
        Символ = Сред(ИсходныйНомер, Поз, 1);
        Если Найти("0123456789+", Символ) > 0 Тогда
            ОчищенныйНомер = ОчищенныйНомер + Символ;
        КонецЕсли;
    КонецЦикла;
    
    // Приводим к международному стандарту, если номер начинается с 8
    Если Лев(ОчищенныйНомер, 1) = "8" Тогда
        ОчищенныйНомер = "+7" + Сред(ОчищенныйНомер, 2);
    КонецЕсли;
    
    Возврат "tel:" + ОчищенныйНомер;
КонецФункции

Теперь нам необходимо перехватить нажатие на ячейку отчета. Для этого в модуле формы отчета мы будем использовать обработчик события РезультатВыбор нашего табличного документа. Разберем этот обработчик:


&НаКлиенте
Процедура РезультатВыбор(Элемент, Область, СтандартнаяОбработка)
    // Проверяем, что клик совершен по ячейке с установленной гиперссылкой
    Если Область.Гиперссылка Тогда
        СтандартнаяОбработка = Ложь; // Отменяем стандартное открытие расшифровки 1С
        
        // Получаем строку с телефоном из данных расшифровки
        НомерТелефона = ПолучитьТелефонИзРасшифровки(Область.Расшифровка);
        
        Если ЗначениеЗаполнено(НомерТелефона) Тогда
            СсылкаЗвонка = ПодготовитьНомерДляЗвонка(НомерТелефона);
            
            // Запускаем переход по навигационной ссылке.
            // Браузер Chrome на Android перенаправит эту ссылку в системную утилиту набора номера.
            ПерейтиПоНавигационнойСсылке(СсылкаЗвонка);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Для корректного извлечения данных расшифровки на клиенте (если расшифровка хранит сложную структуру или идентификатор объекта) мы можем использовать серверный контекст для получения реального текстового поля телефона:


&НаСервереБезКонтекста
Функция ПолучитьТелефонИзРасшифровки(Знач ДанныеРасшифровкиАдрес, Знач ИдентификаторРасшифровки)
    Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровкиАдрес);
    Если ТипЗв(Данные) = Тип("ДанныеРасшифровкиКомпоновкиДанных") Тогда
        Элемент = Данные.Элементы[ИдентификаторРасшифровки];
        Если ТипЗв(Элемент) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
            Для Каждого ЗначениеПоля Из Элемент.ПолучитьПоля() Цикл
                Если ЗначениеПоля.Поле = "Телефон" Тогда
                    Возврат Строка(ЗначениеПоля.Значение);
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
    Возврат "";
КонецФункции

Метод 2. Использование поля HTML-документа в отчете

Иногда стандартный табличный документ в веб-клиенте на мобильных устройствах может отображаться некорректно или накладывать ограничения на обработку жестов тач-скрина. В таких ситуациях мы можем пойти по альтернативному пути — выводить отчет не в стандартную таблицу 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 с предложением совершить вызов.


Метод 3. Переход на «1С:Мобильный клиент»

Если ваша база 1С уже опубликована на веб-сервере (IIS или Apache) для работы сотрудников через Chrome, мы рекомендуем рассмотреть замену веб-клиента на специализированное приложение «1С:Мобильный клиент», доступное для установки на Android-устройства.

Мобильный клиент работает с той же самой базой данных, но предоставляет коду 1С прямой доступ к аппаратным возможностям планшета или смартфона. В этом случае нам не нужно использовать обходные пути с веб-ссылками. Мы можем напрямую обратиться к встроенным средствам телефонии мобильного устройства.

Рассмотрим, как реализовать вызов в мобильном клиенте с помощью системного глобального контекста СредстваТелефонии:


&НаКлиенте
Процедура ВыполнитьЗвонокНаМобильном(НомерТелефона)
    #Если МобильныйКлиент Тогда
        Если СредстваТелефонии.ПоддерживаетсяНаборНомера() Тогда
            // Второй параметр Истина открывает системное приложение набора с подставленным номером.
            // Если передать Ложь — звонок начнется мгновенно в фоновом режиме (требует разрешений в Android).
            СредстваТелефонии.НабратьНомер(НомерТелефона, Истина);
        Иначе
            ПоказатьПредупреждение(, "Данное устройство не поддерживает совершение звонков!");
        КонецЕсли;
    #Иначе
        // Резервный вариант для обычного веб-клиента
        ПерейтиПоНавигационнойСсылке("tel:" + НомерТелефона);
    #КонецЕсли
EndПроцедуры

Использование директивы препроцессора #Если МобильныйКлиент гарантирует, что конфигурация останется работоспособной как на стационарных компьютерах в офисе, так и на мобильных устройствах в полях.


Метод 4. Интеграция с виртуальной АТС (Click-to-Call)

Если перед компанией стоит задача не просто облегчить ручной набор номера, но и фиксировать историю звонков, записывать разговоры и автоматически создавать документы «Событие» или «Телефонный звонок» в 1С, лучшим выбором станет интеграция с корпоративной телефонией (IP-АТС).

В этом сценарии физический звонок совершается не через сим-карту планшета, а через сервер телефонии:

  1. Пользователь нажимает на ячейку с телефоном в отчете веб-клиента.
  2. 1С отправляет асинхронный HTTP-запрос к API вашей телефонии (например, Asterisk, Mango Office, UIS и т.д.).
  3. Виртуальная АТС совершает сначала вызов на SIP-аккаунт сотрудника (это может быть софтфон, запущенный параллельно на том же планшете, или его мобильный телефон).
  4. Как только сотрудник поднимает трубку, АТС начинает дозвон клиенту и соединяет их в один канал.

Такой подход полностью независим от используемого браузера, версии Android и модели планшета, так как вся логика коммутации звонка выполняется на стороне сервера телефонии.

Выбор конкретного метода зависит от технических требований проекта и используемой инфраструктуры. Для простого и быстрого старта идеально подойдет Метод 1 с протоколом tel:, а для масштабных отделов продаж рекомендуется смотреть в сторону полноценной интеграции с телефонией.

← На главную