From 17e5a81a1daee94dcd03751d8481c4871df8a791 Mon Sep 17 00:00:00 2001 From: mihailkudravcev Date: Tue, 11 Aug 2026 15:42:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=83=D0=B1=D0=BB=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B8=D1=81=D1=85=D0=BE=D0=B4=D0=BD=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=98=D0=91=20(crm)=20=D1=81=20=D0=BF=D0=BE=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BD=D1=8B=D0=BC=20=D0=B8=D1=81=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=D0=BC=20?= =?UTF-8?q?=D1=81=D0=B5=D0=B0=D0=BD=D1=81=D0=BE=D0=B2=20=D0=BE=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D0=B5=D1=82=20HTTP=20400=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=20=D0=B7=D0=B0=D0=B3=D0=BE=D0=BB=D0=BE=D0=B2=D0=BA=D0=B0?= =?UTF-8?q?=20=D1=81=D0=B5=D0=B0=D0=BD=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 11 +++++++++ README.md | 2 ++ .../РК_ОбменСВнешнейБазой/Ext/Module.bsl | 24 ++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 547daa2..5b2e6f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,17 @@ --- +## 1.3.1.54 (2026-08-11) + +### Исправлено + +- `РК_ОбменСВнешнейБазой`: заголовок `IBSession: start` при вызовах Transfer API — + иначе публикация с повторным использованием сеансов отвечает HTTP 400 + («Не указан заголовок управления сеансами…»). +- Краткий текст ошибки HTTP (из `` XML-ответа платформы) для формы проверки. + +--- + ## 1.3.1.53 (2026-08-11) ### Исправлено diff --git a/README.md b/README.md index 08856f8..5d0ec1d 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,8 @@ // Р.Успех, Р.Текст, Р.Ответ, Р.Ошибка — GET /v1/health через РК_ОбменСВнешнейБазой ``` +HTTP-клиент передаёт `IBSession: start` (публикация с повторным использованием сеансов) и `X-Transfer-Token`. + Пара: расширение **`ws-rhana`** на исходной ИБ (≥ 0.0.0.30 для складов/остатков; health — с ранних версий). ### Обработки и формы diff --git a/src/CommonModules/РК_ОбменСВнешнейБазой/Ext/Module.bsl b/src/CommonModules/РК_ОбменСВнешнейБазой/Ext/Module.bsl index 0fe99bf..b64749c 100644 --- a/src/CommonModules/РК_ОбменСВнешнейБазой/Ext/Module.bsl +++ b/src/CommonModules/РК_ОбменСВнешнейБазой/Ext/Module.bsl @@ -158,6 +158,8 @@ ?(Разбор.HTTPS, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено)); ЗапросHTTP = Новый HTTPЗапрос(ПутьЗапроса); + // Повторное использование сеансов HTTP на публикации 1С (иначе HTTP 400 без IBSession). + ЗапросHTTP.Заголовки.Вставить("IBSession", "start"); // X-Transfer-Token не конфликтует с Basic Auth пользователя публикации (см. README ws-rhana). Если Не ПустаяСтрока(Ключ) Тогда ЗапросHTTP.Заголовки.Вставить("X-Transfer-Token", Ключ); @@ -187,7 +189,7 @@ Если ОтветHTTP.КодСостояния < 200 Или ОтветHTTP.КодСостояния >= 300 Тогда ЗаписьЖурналаРегистрации("РК_ОбменСВнешнейБазой", УровеньЖурналаРегистрации.Ошибка, , , "HTTP " + ОтветHTTP.КодСостояния + " " + Относительный + ": " + ТекстОтвета); - ВызватьИсключение "Ошибка HTTP " + ОтветHTTP.КодСостояния + ": " + ТекстОтвета; + ВызватьИсключение КраткийТекстОшибкиHTTP(ОтветHTTP.КодСостояния, ТекстОтвета); КонецЕсли; Чтение = Новый ЧтениеJSON; @@ -228,4 +230,24 @@ КонецФункции +Функция КраткийТекстОшибкиHTTP(КодСостояния, ТекстОтвета) + + Описание = СокрЛП(Строка(ТекстОтвета)); + ПозицияDescr = СтрНайти(Описание, ""); + Если ПозицияDescr > 0 Тогда + Хвост = Сред(Описание, ПозицияDescr + 7); + ПозицияКонец = СтрНайти(Хвост, ""); + Если ПозицияКонец > 0 Тогда + Описание = СокрЛП(Лев(Хвост, ПозицияКонец - 1)); + КонецЕсли; + КонецЕсли; + + Если СтрДлина(Описание) > 500 Тогда + Описание = Лев(Описание, 500) + "…"; + КонецЕсли; + + Возврат "Ошибка HTTP " + КодСостояния + ": " + Описание; + +КонецФункции + #КонецОбласти