При разработке мобильных интерфейсов на платформе 1С:Предприятие 8.3 часто возникает задача интеграции с функциями смартфона. Одной из самых востребованных функций является возможность совершить звонок клиенту прямо из интерфейса приложения. В этой статье мы разберем, как сделать номер телефона кликабельным в веб-клиенте, чтобы при нажатии на него мобильное устройство (будь то iOS или Android) автоматически открывало стандартное приложение для набора номера.
Это классический способ, который позволяет встроить стандартную гиперссылку протокола tel: в форму 1С. Рассмотрим пошагово, как это реализовать. Сначала нам необходимо создать на форме реквизит, который будет отвечать за отображение нашего номера.
HTMLТелефон) с типом Строка.Проанализируем пример кода, который позволит вывести номер телефона в удобном для нажатия виде:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НомерТелефона = "+78142332211";
// Формируем HTML-код с использованием протокола tel:
HTMLТелефон = "<html><body><a href='tel:" + НомерТелефона + "' style='font-size: 20px; color: blue;'>" + НомерТелефона + "</a></body></html>";
КонецПроцедуры
В данном примере мы используем стандартный тег <a> с атрибутом href. Браузер мобильного устройства, встречая префикс tel:, понимает, что это не обычный адрес сайта, а команда системному приложению "Телефон". Преимущество этого метода в том, что мы можем гибко управлять стилями отображения (цветом, шрифтом, отступами) прямо через CSS внутри строки HTML.
Если нам не хочется загромождать форму элементами HTML, мы можем воспользоваться штатным методом платформы ПерейтиПоНавигационнойСсылке(). Этот способ считается более "чистым" с точки зрения разработки в 1С, так как он позволяет использовать обычные кнопки или события нажатия на декорации.
Разберем, как реализовать вызов при нажатии на обычную кнопку или гиперссылку в поле надписи. Для этого создадим команду формы и пропишем в ней следующий код:
&НаКлиенте
Процедура ПозвонитьКлиенту(Команда)
// Предположим, номер хранится в реквизите Объект.Телефон
ЧистыйНомер = ОчиститьНомерОтСимволов(Объект.Телефон);
Попытка
ПерейтиПоНавигационнойСсылке("tel:" + ЧистыйНомер);
Исключение
Сообщить("Не удалось инициировать вызов. Возможно, браузер не поддерживает данную функцию.");
КонецПопытки;
КонецПроцедуры
Важный нюанс: метод ПерейтиПоНавигационнойСсылке в веб-клиенте передает управление браузеру. Большинство современных мобильных браузеров корректно перехватывают протокол tel:. Однако помните, что из соображений безопасности вызов должен быть инициирован непосредственным действием пользователя (кликом), а не программным кодом в фоновом режиме.
Рассмотрим еще один элегантный способ — использование объекта ФорматированнаяСтрока. Этот метод идеально подходит для вывода кликабельного номера в декорациях (надписях) на управляемой форме. Выясним, как это настроить:
&НаСервере
Процедура УстановитьНомерНаФорме()
Номер = "+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, что гарантирует стабильную работу на любых устройствах.
Посмотрим на ситуацию шире. Если ваш веб-клиент используется не только на мобильных телефонах, но и на десктопах, вы можете интегрировать его с офисными АТС или софтфонами. Многие приложения (например, Skype, MicroSIP, 3CX) регистрируют в системе свои протоколы, такие как callto: или sip:. Принцип реализации остается таким же, как и с tel:.
Кроме того, в современных CRM-системах на базе 1С часто требуется инициировать переписку в мессенджерах. Рассмотрим примеры ссылок для популярных сервисов:
https://wa.me/79001234567tg://resolve?domain=ИмяПользователя или https://t.me/+79001234567viber://chat?number=+79001234567Используя эти протоколы в методе ПерейтиПоНавигационнойСсылке, вы превращаете веб-клиент 1С в полноценный коммуникационный центр, позволяя менеджеру связываться с клиентом в один клик наиболее удобным способом.
Важно помнить о режиме Sandboxing (песочницы) в современных браузерах. Чтобы предотвратить нежелательные звонки без ведома пользователя, мобильные операционные системы (особенно iOS) всегда показывают подтверждающее окно: "Вызвать номер +7...?". Обойти это окно программно невозможно, да и не нужно с точки зрения безопасности. Ваша задача как разработчика — лишь корректно передать команду браузеру, а взаимодействие с пользователем довершить стандартными средствами ОС.
Подводя итог, мы видим, что задача набора номера из веб-клиента 1С решается достаточно просто. Выбор метода зависит от ваших предпочтений: HTML-поле дает максимальный контроль над дизайном, навигационная ссылка обеспечивает быстроту реализации, а форматированная строка является золотой серединой для стандартных интерфейсов.