Files
bit-flight-deck/bitra-patch/CommonModules/bfd_IntegrationAPIHelpers/Module.bsl
T
Roman Chesnokov e896c2105c fix(bitra-patch): remove ПереносСтрокJSON.БезПереносов (missing in 8.3.14)
Платформа 8.3.14 не имеет значения ПереносСтрокJSON.БезПереносов в перечислении.
Под админом давало 500 на строке 25, под bfd_api_user (Privileged) — 403 без деталей в журнале.
Заменяем на дефолтный конструктор ПараметрыЗаписиJSON без аргументов.
2026-05-15 17:16:17 +05:00

136 lines
5.8 KiB
Plaintext

////////////////////////////////////////////////////////////////////////////////
// Общий модуль bfd_IntegrationAPIHelpers
//
// Назначение: вспомогательные процедуры/функции для HTTP-сервиса bfd_IntegrationAPI
// (read-only REST API для проекта bit-flight-deck).
//
// Свойства модуля (выставить в Конфигураторе):
// Сервер = Истина
// Вызов сервера = Истина
// Внешнее соединение = Истина (для всякого случая)
// Привилегированный = Истина (важно — позволяет читать всё в обход RLS)
////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс
// Формирует HTTPСервисОтвет с JSON-телом.
// Параметры:
// Данные — Произвольный (Структура / Массив / Число / Строка / Дата / Булево / Неопределено)
// Код — Число (по умолчанию 200)
// Возвращаемое значение: HTTPСервисОтвет
//
Функция СформироватьОтветJSON(Знач Данные, Знач Код = 200) Экспорт
ЗаписьJSON = Новый ЗаписьJSON;
// Дефолтные параметры записи JSON (без переносов строк недоступно в 8.3.14 — используем умолчание).
ПараметрыJSON = Новый ПараметрыЗаписиJSON;
ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
ЗаписатьJSON(ЗаписьJSON, Данные);
Ответ = Новый HTTPСервисОтвет(Код);
Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
Ответ.УстановитьТелоИзСтроки(ЗаписьJSON.Закрыть(), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
// Сериализованная ошибка.
//
Функция СформироватьОтветОшибки(Знач СообщениеОшибки, Знач Код = 500) Экспорт
Структура = Новый Структура("error", СообщениеОшибки);
Возврат СформироватьОтветJSON(Структура, Код);
КонецФункции
// Парсит ISO 8601 дату из строки query-параметра.
// Возвращает Дату или '00010101' при ошибке/пусто.
//
Функция ПарсДатуISO(Знач СтрокаДаты) Экспорт
Если ПустаяСтрока(СтрокаДаты) Тогда
Возврат Дата(1, 1, 1);
КонецЕсли;
ОчищеннаяСтрока = СтрЗаменить(СтрЗаменить(СтрокаДаты, "T", " "), "Z", "");
Попытка
Возврат Дата(ОчищеннаяСтрока);
Исключение
Возврат Дата(1, 1, 1);
КонецПопытки;
КонецФункции
// Строковое представление GUID ссылки или пустая строка.
//
Функция UUID(Знач Ссылка) Экспорт
Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
Возврат "";
КонецЕсли;
Возврат Строка(Ссылка.УникальныйИдентификатор());
КонецФункции
// Извлекает email из ТЧ КонтактнаяИнформация пользователя.
//
Функция ИзвлечьEmail(Знач Пользователь) Экспорт
Если НЕ ЗначениеЗаполнено(Пользователь) Тогда
Возврат "";
КонецЕсли;
Попытка
Объект = Пользователь.ПолучитьОбъект();
Исключение
Возврат "";
КонецПопытки;
Если Объект = Неопределено Тогда
Возврат "";
КонецЕсли;
Попытка
Для Каждого Стр Из Объект.КонтактнаяИнформация Цикл
ВидНаименование = "";
Если ЗначениеЗаполнено(Стр.Вид) Тогда
ВидНаименование = Строка(Стр.Вид);
КонецЕсли;
Если СтрНайти(НРег(ВидНаименование), "email") > 0 ИЛИ СтрНайти(НРег(ВидНаименование), "почта") > 0 Тогда
Если ЗначениеЗаполнено(Стр.Представление) Тогда
Возврат Стр.Представление;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Исключение
Возврат "";
КонецПопытки;
Возврат "";
КонецФункции
// Лимит выборки из query-параметра.
//
Функция ПарсЛимит(Знач Запрос, Знач MaxDefault = 1000, Знач MaxAllowed = 10000) Экспорт
Параметр = Запрос.ПараметрыЗапроса.Получить("limit");
Если ПустаяСтрока(Параметр) Тогда
Возврат MaxDefault;
КонецЕсли;
Попытка
Значение = Число(Параметр);
Исключение
Возврат MaxDefault;
КонецПопытки;
Если Значение <= 0 Тогда
Возврат MaxDefault;
КонецЕсли;
Возврат Мин(Значение, MaxAllowed);
КонецФункции
#КонецОбласти