Как реализовать набор телефонного номера из веб-клиента 1С на мобильных устройствах?

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

При разработке мобильных интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача интеграции с функциями смартфона. Одной из самых востребованных функций является возможность совершить звонок клиенту прямо из интерфейса приложения. В этой статье мы разберем, как сделать номер телефона кликабельным в веб-клиенте, чтобы при нажатии на него мобильное устройство (будь то iOS или Android) автоматически открывало стандартное приложение для набора номера.

Способ 1: Использование поля HTML-документа

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

  1. Добавим на форму реквизит (например, с именем HTMLТелефон) с типом Строка.
  2. Установим у этого реквизита вид Поле HTML-документа.
  3. В коде модуля формы сформируем HTML-верстку, содержащую гиперссылку.

Проанализируем пример кода, который позволит вывести номер телефона в удобном для нажатия виде:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    НомерТелефона = "+78142332211";
    // Формируем HTML-код с использованием протокола tel:
    HTMLТелефон = "<html><body><a href='tel:" + НомерТелефона + "' style='font-size: 20px; color: blue;'>" + НомерТелефона + "</a></body></html>";
КонецПроцедуры

В данном примере мы используем стандартный тег <a> с атрибутом href. Браузер мобильного устройства, встречая префикс tel:, понимает, что это не обычный адрес сайта, а команда системному приложению "Телефон". Преимущество этого метода в том, что мы можем гибко управлять стилями отображения (цветом, шрифтом, отступами) прямо через CSS внутри строки HTML.

Способ 2: Использование метода ПерейтиПоНавигационнойСсылке

Если нам не хочется загромождать форму элементами HTML, мы можем воспользоваться штатным методом платформы ПерейтиПоНавигационнойСсылке(). Этот способ считается более "чистым" с точки зрения разработки в 1С, так как он позволяет использовать обычные кнопки или события нажатия на декорации.

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


&НаКлиенте
Процедура ПозвонитьКлиенту(Команда)
    // Предположим, номер хранится в реквизите Объект.Телефон
    ЧистыйНомер = ОчиститьНомерОтСимволов(Объект.Телефон);
    Попытка
        ПерейтиПоНавигационнойСсылке("tel:" + ЧистыйНомер);
    Исключение
        Сообщить("Не удалось инициировать вызов. Возможно, браузер не поддерживает данную функцию.");
    КонецПопытки;
КонецПроцедуры

Важный нюанс: метод ПерейтиПоНавигационнойСсылке в веб-клиенте передает управление браузеру. Большинство современных мобильных браузеров корректно перехватывают протокол tel:. Однако помните, что из соображений безопасности вызов должен быть инициирован непосредственным действием пользователя (кликом), а не программным кодом в фоновом режиме.

Способ 3: Использование типа ФорматированнаяСтрока

Рассмотрим еще один элегантный способ — использование объекта ФорматированнаяСтрока. Этот метод идеально подходит для вывода кликабельного номера в декорациях (надписях) на управляемой форме. Выясним, как это настроить:

  1. Разместим на форме декорацию типа Надпись.
  2. В коде программно установим её значение.

&НаСервере
Процедура УстановитьНомерНаФорме()
    Номер = "+7 (900) 123-45-67";
    // Создаем гиперссылку внутри форматированной строки
    Элементы.ДекорацияНомерТелефона.Заголовок = Новый ФорматированнаяСтрока(Номер, , , , "tel:+79001234567");
КонецПроцедуры

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

Правильное форматирование номера телефона

Проанализируем технические требования к строке номера. Хотя человеческий глаз привык видеть номера в формате +7 (999) 000-00-00, для технических протоколов связи (стандарт RFC 3966) рекомендуется использовать "очищенный" формат. Выясним причину: некоторые старые версии мобильных браузеров или специфические надстройки телефонии могут некорректно обрабатывать пробелы и скобки в ссылке.

Рекомендуем всегда очищать номер перед подстановкой в tel:. Рассмотрим простую функцию для очистки строки:


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

Таким образом, пользователь увидит красиво отформатированный номер +7 (999) 123-45-67, но система передаст в набор команду tel:+79991234567, что гарантирует стабильную работу на любых устройствах.

Интеграция с IP-телефонией и мессенджерами

Посмотрим на ситуацию шире. Если ваш веб-клиент используется не только на мобильных телефонах, но и на десктопах, вы можете интегрировать его с офисными АТС или софтфонами. Многие приложения (например, Skype, MicroSIP, 3CX) регистрируют в системе свои протоколы, такие как callto: или sip:. Принцип реализации остается таким же, как и с tel:.

Кроме того, в современных CRM-системах на базе 1С часто требуется инициировать переписку в мессенджерах. Рассмотрим примеры ссылок для популярных сервисов:

Используя эти протоколы в методе ПерейтиПоНавигационнойСсылке, вы превращаете веб-клиент 1С в полноценный коммуникационный центр, позволяя менеджеру связываться с клиентом в один клик наиболее удобным способом.

Ограничения и безопасность

Важно помнить о режиме Sandboxing (песочницы) в современных браузерах. Чтобы предотвратить нежелательные звонки без ведома пользователя, мобильные операционные системы (особенно iOS) всегда показывают подтверждающее окно: "Вызвать номер +7...?". Обойти это окно программно невозможно, да и не нужно с точки зрения безопасности. Ваша задача как разработчика — лишь корректно передать команду браузеру, а взаимодействие с пользователем довершить стандартными средствами ОС.

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

← На главную