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 " + КодСостояния + ": " + Описание; + +КонецФункции + #КонецОбласти