При работе с устаревшими версиями конфигурации 1С:Управление нашей фирмой (релизы ветки 1.6.4) пользователи часто сталкиваются с некорректным поведением подсистемы взаимодействия с SMS-шлюзами. Проблема проявляется двояко: во-первых, в персональных настройках введенное имя отправителя «сбрасывается» или не фиксируется в базе данных; во-вторых, при попытке автоматической отправки сообщения по какому-либо событию (например, при изменении статуса заказа) система выдает критическую ошибку «недостаточно параметров». В этой статье мы подробно разберем причины возникновения этих сбоев, проанализируем внутренние механизмы конфигурации и найдем способы решения проблемы без необходимости полного обновления системы.
Для начала проанализируем ситуацию с технической точки зрения. Ошибка «Недостаточно параметров» при программной отправке СМС в 1С обычно возникает не в интерфейсе, а на уровне исполнения кода в общем модуле, отвечающем за интеграцию с провайдером. Рассмотрим, как это работает изнутри.
Система 1С:УНФ использует Библиотеку стандартных подсистем (БСП). Процесс отправки инициируется вызовом функции, которая формирует структуру данных для передачи на сервер провайдера (МТС, Билайн, SMS.ru и другие). Для успешного вызова функции ОтправитьSMS в структуре параметров должны присутствовать обязательные ключи:
НомерПолучателя — номер телефона в международном формате.ТекстСообщения — содержание СМС.ИмяОтправителя — буквенный идентификатор, зарегистрированный у провайдера.
Выясним причину ошибки: в версии 1.6.4 существовал баг, при котором программный код, инициирующий «событие», не подтягивал настройки из персональных данных пользователя или констант. В результате в функцию передавалась структура, где поле ИмяОтправителя было пустым (Неопределено или пустая строка). Провайдер или сам внутренний обработчик 1С отклонял такой запрос, генерируя исключение о нехватке параметров.
Разберем вторую часть проблемы — невозможность зафиксировать настройки. В релизах 1.6.4 механизмы сохранения данных в хранилище общих настроек иногда работали нестабильно. Рассмотрим основные факторы, препятствующие сохранению:
ПриЗаписиНаСервере или ПередЗаписью отсутствовал явный вызов команды фиксации данных в регистре сведений НастройкиSMS. Пользователь нажимал «Записать и закрыть», форма закрывалась, но данные оставались только в оперативной памяти сеанса.Рассмотрим по шагам, как можно исправить ситуацию, если обновление на актуальную версию конфигурации (3.0 и выше) на данный момент невозможно.
Для того чтобы точно определить, какой параметр отсутствует, нам необходимо пройтись отладчиком по коду. Найдем общий модуль ОтправкаSMS (название может варьироваться в зависимости от версии БСП, например, ВзаимодействиеСSMS). Установим точку останова в функции отправки и проанализируем содержимое структуры ПараметрыОтправки.
Посмотрим на пример типичного кода, где может возникать ошибка:
// Пример некорректного заполнения структуры
ПараметрыОтправки = Новый Структура;
ПараметрыОтправки.Вставить("Номер", Объект.НомерТелефона);
ПараметрыОтправки.Вставить("Текст", "Ваш заказ готов");
// Если здесь забыто заполнение ИмениОтправителя, возникнет ошибка
Результат = СМССообщения.ОтправитьSMS(ПараметрыОтправки);
Если в процессе отладки мы видим, что поле ИмяОтправителя отсутствует, нам необходимо внести правки в место вызова функции.
Вместо изменения типовой конфигурации, мы рекомендуем использовать механизм расширений. Мы можем перехватить процедуру формирования структуры параметров и принудительно добавить туда имя отправителя из константы.
Рассмотрим пример кода в расширении для модуля СМССообщения:
&После("ПодготовитьСтруктуруОтправки")
Процедура Расш_ПодготовитьСтруктуруОтправки(Параметры)
// Проверяем, заполнено ли имя отправителя
Если Не Параметры.Свойство("ИмяОтправителя") Или ПустаяСтрока(Параметры.ИмяОтправителя) Тогда
// Подставляем имя из надежного источника (константы или напрямую)
Параметры.Вставить("ИмяОтправителя", "MYCOMPANY");
КонецЕсли;
КонецПроцедуры
Если стандартный интерфейс персональных настроек дает сбой, попробуем обойти его. Перейдем в меню «Функции для технического специалиста» (ранее «Все функции») и найдем регистр сведений или справочник, где хранятся настройки СМС-провайдеров. Зачастую это регистр НастройкиSMS или аналогичный. Попробуем создать запись напрямую в таблице данных. Это позволит избежать программных ошибок формы и гарантированно сохранит значение в базе.
Проанализируем ситуацию с точки зрения требований операторов связи. Даже если мы программно исправим ошибку «недостаточно параметров», СМС может не уйти по следующим причинам:
ИмяОтправителя практически всегда ведет к техническим сбоям на стороне API шлюза.Подведем итог: проблема в УНФ 1.6.4 носит программный характер и связана с несовершенством ранних версий БСП. Для исправления ситуации мы рекомендуем сначала проверить корректность заполнения настроек напрямую в регистрах, а если это не помогает — воспользоваться отладчиком и внедрить небольшое расширение, которое будет гарантированно передавать ИмяОтправителя в структуру параметров. Однако самым правильным стратегическим решением будет постепенный переход на современные версии конфигурации, где данные механизмы работают стабильно «из коробки».