Почему в 1С:УНФ не сохраняется имя отправителя СМС и возникает ошибка недостаточно параметров

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

При работе с устаревшими версиями конфигурации 1С:Управление нашей фирмой (релизы ветки 1.6.4) пользователи часто сталкиваются с некорректным поведением подсистемы взаимодействия с SMS-шлюзами. Проблема проявляется двояко: во-первых, в персональных настройках введенное имя отправителя «сбрасывается» или не фиксируется в базе данных; во-вторых, при попытке автоматической отправки сообщения по какому-либо событию (например, при изменении статуса заказа) система выдает критическую ошибку «недостаточно параметров». В этой статье мы подробно разберем причины возникновения этих сбоев, проанализируем внутренние механизмы конфигурации и найдем способы решения проблемы без необходимости полного обновления системы.

Разбор причины ошибки «Недостаточно параметров»

Для начала проанализируем ситуацию с технической точки зрения. Ошибка «Недостаточно параметров» при программной отправке СМС в 1С обычно возникает не в интерфейсе, а на уровне исполнения кода в общем модуле, отвечающем за интеграцию с провайдером. Рассмотрим, как это работает изнутри. Система 1С:УНФ использует Библиотеку стандартных подсистем (БСП). Процесс отправки инициируется вызовом функции, которая формирует структуру данных для передачи на сервер провайдера (МТС, Билайн, SMS.ru и другие). Для успешного вызова функции ОтправитьSMS в структуре параметров должны присутствовать обязательные ключи:

  1. НомерПолучателя — номер телефона в международном формате.
  2. ТекстСообщения — содержание СМС.
  3. ИмяОтправителя — буквенный идентификатор, зарегистрированный у провайдера.

Выясним причину ошибки: в версии 1.6.4 существовал баг, при котором программный код, инициирующий «событие», не подтягивал настройки из персональных данных пользователя или констант. В результате в функцию передавалась структура, где поле ИмяОтправителя было пустым (Неопределено или пустая строка). Провайдер или сам внутренний обработчик 1С отклонял такой запрос, генерируя исключение о нехватке параметров.

Почему имя отправителя не сохраняется в настройках

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

Методы исправления: отладка и программная корректировка

Рассмотрим по шагам, как можно исправить ситуацию, если обновление на актуальную версию конфигурации (3.0 и выше) на данный момент невозможно.

1. Использование отладчика для поиска пустого параметра

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


// Пример некорректного заполнения структуры
ПараметрыОтправки = Новый Структура;
ПараметрыОтправки.Вставить("Номер", Объект.НомерТелефона);
ПараметрыОтправки.Вставить("Текст", "Ваш заказ готов");
// Если здесь забыто заполнение ИмениОтправителя, возникнет ошибка
Результат = СМССообщения.ОтправитьSMS(ПараметрыОтправки);

Если в процессе отладки мы видим, что поле ИмяОтправителя отсутствует, нам необходимо внести правки в место вызова функции.

2. Создание расширения для принудительной подстановки имени

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

Рассмотрим пример кода в расширении для модуля СМССообщения:


&После("ПодготовитьСтруктуруОтправки")
Процедура Расш_ПодготовитьСтруктуруОтправки(Параметры)
    // Проверяем, заполнено ли имя отправителя
    Если Не Параметры.Свойство("ИмяОтправителя") Или ПустаяСтрока(Параметры.ИмяОтправителя) Тогда
        // Подставляем имя из надежного источника (константы или напрямую)
        Параметры.Вставить("ИмяОтправителя", "MYCOMPANY");
    КонецЕсли;
КонецПроцедуры

3. Прямое заполнение данных через «Все функции»

Если стандартный интерфейс персональных настроек дает сбой, попробуем обойти его. Перейдем в меню «Функции для технического специалиста» (ранее «Все функции») и найдем регистр сведений или справочник, где хранятся настройки СМС-провайдеров. Зачастую это регистр НастройкиSMS или аналогичный. Попробуем создать запись напрямую в таблице данных. Это позволит избежать программных ошибок формы и гарантированно сохранит значение в базе.

Важные нюансы работы с провайдерами

Проанализируем ситуацию с точки зрения требований операторов связи. Даже если мы программно исправим ошибку «недостаточно параметров», СМС может не уйти по следующим причинам:

  1. Регистрация имени: Ваше имя отправителя должно быть предварительно одобрено провайдером в личном кабинете. Если в 1С написано "SuperShop", а у провайдера зарегистрировано только "Global", СМС будет отклонено с ошибкой авторизации или параметров.
  2. Формат имени: Имя должно состоять строго из латинских букв и цифр (не более 11 символов). Использование кириллицы в поле ИмяОтправителя практически всегда ведет к техническим сбоям на стороне API шлюза.

Заключение

Подведем итог: проблема в УНФ 1.6.4 носит программный характер и связана с несовершенством ранних версий БСП. Для исправления ситуации мы рекомендуем сначала проверить корректность заполнения настроек напрямую в регистрах, а если это не помогает — воспользоваться отладчиком и внедрить небольшое расширение, которое будет гарантированно передавать ИмяОтправителя в структуру параметров. Однако самым правильным стратегическим решением будет постепенный переход на современные версии конфигурации, где данные механизмы работают стабильно «из коробки».

← На главную