Как настроить отправку SMS через TurboSMS в 1С 7.7: решение ошибок подключения и проблем с кодировкой

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Интеграция 1С:Предприятие 7.7 с внешними сервисами через SQL-шлюз — это классическая задача, которая часто сопровождается техническими сложностями, особенно при работе на современных 64-битных операционных системах. В этой статье мы разберем процесс подключения к шлюзу TurboSMS через MySQL ODBC драйвер, проанализируем типичные ошибки соединения и выясним, как правильно передавать кириллический текст, чтобы избежать появления «кракозябров».

Архитектура окружения и разрядность драйверов

Первое и самое важное правило при работе с 1С 7.7 на 64-битной ОС: 1С 7.7 является 32-битным приложением. Это означает, что для работы любых внешних компонент или драйверов баз данных (ODBC) вам необходимо использовать исключительно 32-битные версии программного обеспечения. Даже если ваша Windows 10 или Server 2019 имеет разрядность x64, для 1С нужно скачивать и устанавливать MySQL ODBC Driver 32-bit (x86).

Рассмотрим важный нюанс настройки: если вы планируете создавать системный источник данных (DSN), стандартный «Администратор источников данных ODBC» из панели управления может вам не подойти, так как он по умолчанию открывает 64-битную версию. Для настройки 32-битных драйверов запустите утилиту вручную по адресу: C:\Windows\SysWOW64\odbcad32.exe.

Разбор ошибки подключения 10060 (Can't connect to MySQL server)

Если при попытке открыть соединение Соединение.Open(СтрокаСоединение) вы получаете ошибку 10060, это сигнализирует о невозможности установить сетевой контакт с сервером. Проанализируем основные причины:

  1. Неверный IP-адрес сервера: Сервисы часто меняют адреса своих шлюзов. Вместо устаревших адресов (например, 77.120.116.10) следует использовать актуальный IP шлюза TurboSMS — 94.249.146.189 или доменное имя sql.turbosms.ua.
  2. Закрытый порт: MySQL работает по протоколу TCP через порт 3306. Убедитесь, что ваш брандмауэр и офисный роутер разрешают исходящие соединения на этот порт.
  3. Настройки MySQL-сервера: Шлюз должен быть настроен на прием внешних соединений, что на стороне TurboSMS обычно включено по умолчанию, но требует регистрации вашего IP.

Безопасность и ошибка Access denied

После того как связь с сервером установлена, может возникнуть ошибка Access denied for user.... Важно понимать, что TurboSMS ограничивает доступ к своей базе данных не только логином и паролем, но и белым списком IP-адресов. Разберем шаги для исправления:

Зайдите в личный кабинет TurboSMS в раздел настроек SQL-подключения. Там обязательно нужно добавить ваш внешний IP-адрес в список разрешенных. Без этой манипуляции сервер будет сбрасывать авторизацию, даже если логин и пароль в коде указаны верно.

Решение проблемы с кодировкой (UTF-8)

Одной из самых сложных задач в 1С 7.7 является работа с кодировкой UTF-8, которую ожидает сервер MySQL. По умолчанию 1С работает в кодировке Windows-1251. Если просто отправить текст, получатель увидит нечитаемые символы. Проанализируем два способа решения.

Способ 1: Использование функции преобразования. Мы можем вручную перекодировать каждый символ строки в формат UTF-8 перед вставкой в SQL-запрос. Посмотрим на пример такой функции:


Функция ПреобразоватьСтрокуВУТФ8(Стр) Экспорт
    Длина=СтрДлина(Стр);
    Итог="";
    Для Н=1 По Длина Цикл
        Знак=Сред(Стр,Н,1);
        Код=КодСимв(Знак);
        Если Код < 128 Тогда
            Итог=Итог+Знак;
        Иначе
            Если (Код >= КодСимв("А")) И (Код <= КодСимв("п")) Тогда
                Итог=Итог+Симв(208)+Симв(144+Код-КодСимв("А"));
            ИначеЕсли (Код >= КодСимв("р")) И (Код <= КодСимв("я")) Тогда
                Итог=Итог+Симв(209)+Симв(128+Код-КодСимв("р"));
            ИначеЕсли (Знак="ё") Тогда
                Итог=Итог+Симв(209)+Симв(145);
            ИначеЕсли (Знак="Ё") Тогда
                Итог=Итог+Симв(208)+Симв(129);
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Возврат Итог;
КонецФункции

Способ 2: Настройка драйвера ODBC (рекомендуемый). Вместо сложных функций перекодирования в 1С, мы можем заставить сам драйвер MySQL выполнять конвертацию. Для этого в строку соединения необходимо добавить специальный параметр инициализации stmt=SET NAMES 'utf8';.

Результирующий код интеграции

Сведем все полученные знания в единую функцию, которую можно разместить в Глобальном модуле вашей конфигурации. Проанализируем структуру строки соединения и метод выполнения запроса.


Функция ОтправитьТурбоСМС(Номер, ТекстСМС, Подпись = "MAGAZIN") Экспорт
    // Создаем объект подключения через ADO
    Соединение = СоздатьОбъект("ADODB.Connection");
    
    // Формируем строку соединения с учетом актуального IP и кодировки
    // Используем драйвер версии 3.51 (наиболее стабильный для 7.7)
    Сервер = "94.249.146.189";
    База   = "users";
    Логин  = "ВашЛогин";
    Пароль = "ВашПароль";
    
    СтрокаСоединения = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=" + Сервер + 
                       ";DataBase=" + База + ";UID=" + Логин + 
                       ";PWD=" + Пароль + ";stmt=SET NAMES 'utf8';";
    
    // Устанавливаем таймауты, чтобы 1С не зависала при сбоях связи
    Соединение.ConnectionTimeout = 15;
    Соединение.CommandTimeout = 30;
    
    Попытка 
        Соединение.Open(СтрокаСоединения);
    Исключение
        Сообщить("Ошибка подключения к шлюзу TurboSMS: " + ОписаниеОшибки());
        Возврат 0;
    КонецПопытки;
    
    // Формируем SQL запрос на вставку записи в таблицу сообщений
    // Имя таблицы обычно совпадает с логином пользователя
    ТекстЗапроса = "INSERT INTO " + Логин + " (number, sign, message) 
                   |VALUES ('" + СокрЛП(Номер) + "', '" + СокрЛП(Подпись) + "', '" + СокрЛП(ТекстСМС) + "')";
    
    Попытка
        Соединение.Execute(ТекстЗапроса);
        Соединение.Close();
        Возврат 1; // Успешно отправлено в очередь
    Исключение
        Сообщить("Ошибка выполнения SQL-запроса: " + ОписаниеОшибки());
        Соединение.Close();
        Возврат 0;
    КонецПопытки;
КонецФункции

Дополнительные рекомендации

При эксплуатации данной системы обратите внимание на следующие моменты:

  1. Альфа-имя (подпись): Поле sign должно содержать только ту подпись, которая прошла модерацию в вашем кабинете TurboSMS. Если указать произвольное имя, сообщение может быть принято базой, но не будет отправлено абоненту.
  2. Формат номера: Рекомендуется передавать номер телефона в международном формате (например, 380671234567) без знака «+».
  3. Логирование: Поскольку 1С 7.7 не всегда стабильно работает с внешними соединениями, рекомендуем записывать результат выполнения функции в текстовый лог-файл или в отдельный справочник, чтобы оперативно выявлять проблемы на стороне провайдера.

Таким образом, мы выяснили, что для успешной работы достаточно правильно выбрать разрядность драйвера, разрешить доступ по IP и корректно инициализировать сессию UTF-8 в строке подключения ADODB.Connection.

← На главную