Files
llm/plugins/1c/bridge/additional_attributes_readonly.bsl
2026-08-14 09:40:51 +03:00

86 lines
6.5 KiB
Plaintext

// Общий модуль серверного HTTP-сервиса. Все экспортные методы только читают данные.
// Модуль предназначен для публикации в тестовой конфигурации, а не для выполнения
// из SQL-адаптера. Аутентификацию и разбор HTTP-запроса реализует модуль сервиса.
Функция НайтиДополнительныеРеквизиты(ТекстПоиска = "", ВключатьПомеченныеНаУдаление = Ложь) Экспорт
Результат = Новый Массив;
Выборка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.Выбрать();
Пока Выборка.Следующий() Цикл
Если Не ВключатьПомеченныеНаУдаление И Выборка.ПометкаУдаления Тогда
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(ТекстПоиска)
И СтрНайти(НРег(Выборка.Наименование), НРег(ТекстПоиска)) = 0 Тогда
Продолжить;
КонецЕсли;
ОбъектСвойства = Выборка.ПолучитьОбъект();
СтрокаСвойства = Новый Структура;
СтрокаСвойства.Вставить("ref", Строка(Выборка.Ссылка.УникальныйИдентификатор()));
СтрокаСвойства.Вставить("description", Выборка.Наименование);
СтрокаСвойства.Вставить("marked_for_deletion", Выборка.ПометкаУдаления);
ДобавитьСвойствоЕслиЕсть(СтрокаСвойства, ОбъектСвойства, "Имя", "name");
ДобавитьСвойствоЕслиЕсть(СтрокаСвойства, ОбъектСвойства, "ИдентификаторДляФормул", "identifier_for_formula");
ДобавитьСвойствоЕслиЕсть(СтрокаСвойства, ОбъектСвойства, "НаборСвойств", "property_set");
ДобавитьСвойствоЕслиЕсть(СтрокаСвойства, ОбъектСвойства, "ТипЗначения", "value_type");
// Отдельно фиксируем наличие реквизита в объекте ПВХ. Это позволяет
// SQL-разработке отличить пустое значение от отсутствующей семантики.
СтрокаСвойства.Вставить("semantic_fields", Новый Структура(
"name,identifier_for_formula,property_set,value_type",
СтрокаСвойства.Свойство("name"),
СтрокаСвойства.Свойство("identifier_for_formula"),
СтрокаСвойства.Свойство("property_set"),
СтрокаСвойства.Свойство("value_type")));
Результат.Добавить(СтрокаСвойства);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция МаршрутЗначенийДополнительногоРеквизита(Свойство, ВладелецМетаданных) Экспорт
Если ТипЗнч(Свойство) <> Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда
ВызватьИсключение "Свойство должно быть ссылкой ПВХ ДополнительныеРеквизитыИСведения.";
КонецЕсли;
Если ВладелецМетаданных <> "Справочник.СтруктурныеЕдиницы" Тогда
ВызватьИсключение "Маршрут подтвержден только для Справочник.СтруктурныеЕдиницы.";
КонецЕсли;
// Текст предназначен для СКД и не исполняется сервисом. В этой
// конфигурации значения подтверждённо находятся в табличной части владельца.
Возврат Новый Структура(
"source,object_field,property_field,value_field,query_join,parameter",
"Справочник.СтруктурныеЕдиницы.ДополнительныеРеквизиты",
"Ссылка",
"Свойство",
"Значение",
"ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтруктурныеЕдиницы.ДополнительныеРеквизиты КАК ДополнительныеРеквизиты "
+ "ПО ДополнительныеРеквизиты.Ссылка = СтруктурныеЕдиницы.Ссылка "
+ "И ДополнительныеРеквизиты.Свойство = &Свойство",
Строка(Свойство.УникальныйИдентификатор())
);
КонецФункции
Процедура ДобавитьСвойствоЕслиЕсть(Приемник, Источник, ИмяСвойства, ИмяПоля) Экспорт
ЗначениеСвойства = Неопределено;
Если Источник.Свойство(ИмяСвойства, ЗначениеСвойства) Тогда
Приемник.Вставить(ИмяПоля, ПредставлениеДляJSON(ЗначениеСвойства));
КонецЕсли;
КонецПроцедуры
Функция ПредставлениеДляJSON(ЗначениеСвойства) Экспорт
Если ЗначениеСвойства = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Если ТипЗнч(ЗначениеСвойства) = Тип("Структура") Или ТипЗнч(ЗначениеСвойства) = Тип("Массив") Тогда
Возврат ЗначениеСвойства;
КонецЕсли;
Попытка
УникальныйИдентификатор = ЗначениеСвойства.УникальныйИдентификатор();
Возврат Новый Структура("ref,presentation", Строка(УникальныйИдентификатор), Строка(ЗначениеСвойства));
Исключение
КонецПопытки;
Возврат Строка(ЗначениеСвойства);
КонецФункции