Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

1C_IBM_MQ_CONN_ERR 1С:Предприятие и СУБД

Использование очередей IBM MQ в 1С для высоконадежной доставки транзакций

Обновлено: 26.08.2026 · Официальная документация ↗

При интеграции 1С с банковскими и enterprise-системами на базе IBM MQ возникают сбои:

  • Ошибки подключения к Queue Manager: MQRC 2035 (MQRC_NOT_AUTHORIZED) или MQRC 2059 (MQRC_Q_MGR_NOT_AVAILABLE).
  • Потеря сообщений при аварийном разрыве сессии во время обработки пакета.
  • Зависание очереди при переполнении Dead Letter Queue (DLQ).
  • Ошибки кодовых страниц EBCDIC/ASCII при передаче кириллических строк.

1. Архитектура интеграции IBM MQ с 1С

Взаимодействие с IBM MQ может осуществляться двумя путями:

  • IBM MQ REST API (Рекомендуемый современный стандарт): Отправка сообщений через HTTPS-шлюз брокера (порт 9443) без установки C-клиентов.
  • IBM MQ C Client / Java Bridge: Подключение через внешнюю Native-компоненту 1С.

2. Отправка сообщения в очередь IBM MQ через REST API

&НаСервере
Функция ОтправитьСообщениеВ_IBMMQ(ИмяОчереди, ТекстСообщенияJSON, QM_Name)
    
    ПараметрыTLS = Новый ПараметрыЗащищенногоСоединенияOpenSSL();
    HTTPСоединение = Новый HTTPСоединение(
        "ibmmq.bank.corp", 
        9443, 
        "mq_user", 
        "mq_secret_pass", 
        , 
        30, 
        Новый ЗащищенноеСоединениеOpenSSL(ПараметрыTLS)
    );
    
    Путь = СтрШаблон("/ibmmq/rest/v1/messaging/qmgr/%1/queue/%2/message", QM_Name, ИмяОчереди);
    
    HTTPЗапрос = Новый HTTPЗапрос(Путь);
    HTTPЗапрос.Заголовки.Вставить("ibm-mq-rest-csrf-token", "csrf_token_val");
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "text/plain;charset=utf-8");
    
    HTTPЗапрос.УстановитьТелоИзСтроки(ТекстСообщенияJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Попытка
        HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
        
        Если HTTPОтвет.КодСостояния <> 201 Тогда
            ВызватьИсключение СтрШаблон("Ошибка IBM MQ (%1): %2", 
                HTTPОтвет.КодСостояния, HTTPОтвет.ПолучитьТелоКакСтроку());
        КонецЕсли;
        
        Возврат Истина;
    Исключение
        ЗаписьЖурналаРегистрации("IBM_MQ", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
        ВызватьИсключение;
    КонецПопытки;
    
КонецФункции

3. Чтение и удаление сообщения из очереди (Destructive Read)

&НаСервере
Функция ВычитатьСообщениеИз_IBMMQ(ИмяОчереди, QM_Name)
    
    ПараметрыTLS = Новый ПараметрыЗащищенногоСоединенияOpenSSL();
    HTTPСоединение = Новый HTTPСоединение("ibmmq.bank.corp", 9443, "mq_user", "mq_secret_pass",, 30, Новый ЗащищенноеСоединениеOpenSSL(ПараметрыTLS));
    
    Путь = СтрШаблон("/ibmmq/rest/v1/messaging/qmgr/%1/queue/%2/message", QM_Name, ИмяОчереди);
    HTTPЗапрос = Новый HTTPЗапрос(Путь);
    HTTPЗапрос.Заголовки.Вставить("ibm-mq-rest-csrf-token", "csrf_token_val");
    
    // DELETE запрос извлекает и удаляет сообщение из очереди в одной операции
    HTTPОтвет = HTTPСоединение.ВызватьHTTPМетод("DELETE", HTTPЗапрос);
    
    Если HTTPОтвет.КодСостояния = 200 Тогда
        Возврат HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
    ИначеЕсли HTTPОтвет.КодСостояния = 204 Тогда
        Возврат Неопределено; // Очередь пуста
    Иначе
        ВызватьИсключение "Ошибка чтения IBM MQ: " + HTTPОтвет.ПолучитьТелоКакСтроку();
    КонецЕсли;
    
КонецФункции
💡 Практика специалистов: При работе с IBM MQ через REST API всегда обрабатывайте HTTP статус 204 No Content как штатную ситуацию отсутствия сообщений в очереди, чтобы фоновое задание не падало по ошибке.

Частые вопросы (FAQ)

Что означает код ошибки MQRC 2035?

MQRC 2035 (MQRC_NOT_AUTHORIZED) указывает, что учетная запись, под которой подключается 1С, не имеет прав на подключение к каналу (CHLAUTH) или прав PUT/GET на целевую очередь.

Что такое Dead Letter Queue (DLQ) в IBM MQ?

Это специальная системная очередь недоставленных сообщений, куда брокер перемещает сообщения, которые не могут быть помещены в целевую очередь (например, при ее переполнении или отсутствии прав).

Зачем передавать заголовок ibm-mq-rest-csrf-token?

IBM MQ REST API требует обязательной защиты от Cross-Site Request Forgery (CSRF). Заголовок должен присутствовать во всех POST/DELETE запросах (значение может быть любым непустым при базовой аутентификации).

Как гарантировать транзакционность обработки пакета?

Используйте режим синхроточек (Syncpoint / 2PC). Сообщение подтверждается и удаляется из брокера только после успешной фиксации транзакции СУБД в базе 1С.

Полезные материалы
Рекомендуем