Как отправить SMS из 1С с помощью USB 3G-модема: пошаговое руководство

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

Рассылка СМС-уведомлений напрямую из учетной системы 1С — это отличный способ информировать клиентов или мониторить состояние базы данных без привлечения дорогостоящих сторонних СМС-шлюзов. Для небольших объемов отправки (в пределах 50–100 сообщений в день) идеально подходит обычный USB 3G/4G-модем с SIM-картой. Однако при программной реализации этой задачи разработчики часто сталкиваются с аппаратными тонкостями, особенностями синтаксиса AT-команд и блокировками со стороны оборудования.

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

Шаг 1. Подготовка модема и определение рабочего COM-порта

Прежде чем приступать к написанию кода в 1С, необходимо правильно настроить и подготовить аппаратную часть. Подключим USB-модем к компьютеру или серверу и выполним следующие действия:

  1. Отключение запроса PIN-кода. Это критически важно. Установите SIM-карту в обычный мобильный телефон и полностью отключите запрос PIN-кода при включении. Если этого не сделать, модем заблокирует любые попытки работы с сетью до ввода кода разблокировки.
  2. Поиск нужного COM-порта. После установки драйверов модема в диспетчере устройств Windows появится несколько последовательных портов (например, Mobile Connect - Application Interface и Mobile Connect - PC UI Interface). Вопреки многим стандартным инструкциям, порт интерфейса управления (PC UI) далеко не всегда подходит для непосредственной отправки СМС.

Проанализируем ситуацию: для точного определения рабочего порта рекомендуется использовать сторонние терминальные программы, например, PuTTY или HyperTerminal. Подключаясь поочередно к доступным портам на стандартной скорости (обычно 9600 или 115200), введите команду AT. Тот порт, который вернет в ответ заветное OK, и является нашим рабочим каналом связи.

Шаг 2. Разбор структуры AT-команд для отправки СМС

Общение с модемом через COM-порт происходит посредством текстовых AT-команд. Давайте пошагово разберем классический сценарий отправки СМС в текстовом режиме:

  1. ATZ — команда инициализации (мягкого сброса) модема. Она переводит устройство в исходное стабильное состояние.
  2. AT+CMGF=1 — переключение модема в текстовый режим работы (Text Mode). По умолчанию многие модемы работают в сложном двоичном режиме PDU, но для простых задач латиницы текстовый режим гораздо удобнее.
  3. AT+CMGS="+79261234567" — команда инициации отправки СМС. Обратите внимание: номер телефона получателя обязательно должен быть заключен в двойные кавычки и указан в международном формате. Отсутствие кавычек — это самая частая ошибка, из-за которой модем возвращает ошибку выполнения.
  4. Передача текста сообщения. После ввода команды адресата модем перейдет в режим ожидания ввода текста (в терминале появится символ-приглашение >).
  5. Завершение ввода. Чтобы дать модему команду "отправить", в порт необходимо передать специальный управляющий символ конца ввода — Ctrl+Z (в таблице ASCII это символ с кодом 26), за которым следует возврат каретки.

Шаг 3. Реализация отправки СМС на языке 1С

Рассмотрим пример готового программного кода в 1С. Для записи данных в COM-порт мы будем использовать встроенный объект платформы ЗаписьТекста, открывая физический адрес порта в режиме монопольного доступа.

Ниже представлен рабочий шаблон процедуры отправки сообщения (поддерживает латиницу):


Процедура ОтправитьСМСЧерезМодем(ПортНомер, ТелефонПолучателя, ТекстСообщения) Экспорт
    
    // Формируем системный путь к COM-порту
    ПутьКПорту = "\\.\COM" + СокрЛП(ПортНомер);
    
    Попытка
        // Открываем порт в кодировке ANSI
        ЗаписьВПорт = Новый ЗаписьТекста(ПутьКПорту, КодировкаТекста.ANSI);
        
        // 1. Инициализируем модем
        ЗаписьВПорт.ЗаписатьСтроку("ATZ");
        
        // 2. Устанавливаем текстовый режим работы
        ЗаписьВПорт.ЗаписатьСтроку("AT+CMGF=1");
        
        // 3. Передаем команду отправки с номером получателя в двойных кавычках
        // Используем экранирование кавычек в строке 1С
        ЗаписьВПорт.ЗаписатьСтроку("AT+CMGS=""" + СокрЛП(ТелефонПолучателя) + """");
        
        // 4. Записываем текст сообщения и обязательно завершаем его спецсимволом Ctrl+Z (ASCII 26)
        ЗаписьВПорт.ЗаписатьСтроку(ТекстСообщения + Символ(26));
        
        // Закрываем порт для освобождения ресурса операционной системой
        ЗаписьВПорт.Закрыть();
        
        Сообщить("Команды успешно отправлены в порт " + ПутьКПорту);
        
    Исключение
        ВызватьИсключение "Не удалось получить доступ к COM-порту " + ПутьКПорту + ". Описание ошибки: " + ОписаниеОшибки();
    КонецПопытки;
    
КонецПроцедуры

Важные нюансы и ограничения "слепого" метода записи

Разберем важные особенности работы с COM-портом через объект ЗаписьТекста:

← На главную