// Общий модуль серверного 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", Строка(УникальныйИдентификатор), Строка(ЗначениеСвойства)); Исключение КонецПопытки; Возврат Строка(ЗначениеСвойства); КонецФункции