Адресные объекты уровня. Возвращает данные классификатора поля выбора по уровню.
// Возвращает данные классификатора поля выбора по уровню.
//
// Параметры:
// Родитель - УникальныйИдентификатор - Родительский объект.
// Уровень - Число - Требуемый уровень данных. 1-7, 90, 91 - адресные объекты, -1
// - ориентиры.
// ДополнительныеПараметры - Структура - Описание настройке поиска. Поля:
// * ФорматАдреса - Строка - тип используемого классификатора.
//
// * РазмерПорции - Число - Необязательный размер порции возвращаемых данных. Если не указано
// или 0, то возвращает все элементы.
// * ПерваяЗапись - УникальныйИдентификатор - Элемент, с которого начинается порция данных. Сам элемент не
// входит в выборку.
// * Сортировка - Строка - Направление сортировки для порции.
//
// Возвращаемое значение:
// Структура - найденные варианты. Содержит поля:
// * Отказ - Булево - Поставщик не доступен.
// * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ
// = Ложь.
// * КраткоеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ
// = Ложь.
// * Заголовок - Строка - Строка с предложением выбора.
// * Данные - ТаблицаЗначений - Содержит данные для выбора. Колонки:
// ** Неактуален - Булево - Флаг неактуальности строки данных.
// ** Идентификатор - УникальныйИдентификатор - Код классификатора для поиска вариантов по индексу.
// ** Представление - Строка - Представление варианта.
// ** РегионЗагружен - Булево - Имеет смысл только для регионов. Истина, если есть записи.
//
Функция АдресныеОбъектыУровня(Родитель, Уровень, ТипАдреса, Знач СтрокаПоиска = "") Экспорт
ДанныеВыбора = Новый Структура("Данные, Отказ", Новый СписокЗначений, Ложь);
ДанныеВыбора.Вставить("ПодробноеПредставлениеОшибки", "");
ДанныеВыбора.Вставить("КраткоеПредставлениеОшибки", "");
Результат = Новый Структура("Данные", ТаблицаДанныхДляИнтерактивногоВыбора());
СтруктураОписанияОшибкиПоставщика(Результат);
ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ();
ПредлагатьЗагрузкуСведений = (Уровень = 1 И ЗагруженныеАдресныеСведения.Получить("КлассификаторДоступен") = Ложь);
Если ЗначениеЗаполнено(СтрокаПоиска) Тогда
ПреобразоватьВводАдреса(СтрокаПоиска);
КонецЕсли;
Если ЗагруженныеАдресныеСведения.Получить("ИспользоватьЗагруженные") Или Уровень = 1 Тогда
ДополнительныеПараметры = Новый Структура("СтрокаПоиска", СтрокаПоиска);
ЗаполнитьАдресаДляИнтерактивногоВыбораВнутр(Результат, Родитель, Уровень, ТипАдреса, ДополнительныеПараметры);
Для каждого СведенияОбАдресе Из Результат.Данные Цикл
Сведения = Новый Структура();
Сведения.Вставить("Идентификатор", СведенияОбАдресе.Идентификатор);
Сведения.Вставить("Представление", СведенияОбАдресе.Представление);
Сведения.Вставить("Отказ", Ложь);
Если ПредлагатьЗагрузкуСведений Тогда
Сведения.Вставить("ПредлагатьЗагрузкуКлассификатора",
Не СведенияОбАдресе.РегионЗагружен);
Иначе
Сведения.Вставить("ПредлагатьЗагрузкуКлассификатора", Ложь);
КонецЕсли;
ДанныеВыбора.Данные.Добавить(Сведения, СведенияОбАдресе.Представление);
КонецЦикла;
КонецЕсли;
Если Результат.Данные.Количество() = 0 И ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда
// Веб сервис 1С, может быть на обслуживании.
Попытка
СтрокаЗапроса = "select?level=%1&base=0&limit=20";
Если ЗначениеЗаполнено(Родитель) Тогда
СтрокаЗапроса = СтрокаЗапроса + "&parentId=" + СокрЛП(Родитель);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаПоиска) Тогда
СтрокаЗапроса = СтрокаЗапроса + "&text=" + СокрЛП(СтрокаПоиска);
КонецЕсли;
ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаЗапроса, Строка(Уровень));
РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса);
ИмяПоля = ?(ЭтоМуниципальныйАдрес(ТипАдреса), "munName", "name");
ИмяПоляИдентификатор = ?(ЭтоМуниципальныйАдрес(ТипАдреса), "munId", "id");
Для каждого СтрокаДанных Из РезультатВебСервис.Данные Цикл
Если ЗначениеЗаполнено(СтрокаДанных[ИмяПоляИдентификатор]) Тогда
ДанныеВыбора.Данные.Добавить(СтрокаДанных[ИмяПоляИдентификатор], СтрокаДанных[ИмяПоля]);
Иначе
ИмяПоля1 = ?(ИмяПоля = "munName", "name", "munName");
ИмяПоляИдентификатор1 = ?(ИмяПоля = "munName", "id", "munId");
Если ЗначениеЗаполнено(СтрокаДанных[ИмяПоляИдентификатор1]) Тогда
ДанныеВыбора.Данные.Добавить(СтрокаДанных[ИмяПоляИдентификатор1], СтрокаДанных[ИмяПоля1]);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если РезультатВебСервис.Отказ Тогда
ДанныеВыбора.Отказ = Истина;
Возврат ДанныеВыбора;
КонецЕсли;
Исключение
СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке());
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, Результат.ПодробноеПредставлениеОшибки);
ДанныеВыбора.ПодробноеПредставлениеОшибки = Результат.ПодробноеПредставлениеОшибки;
ДанныеВыбора.КраткоеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки;
КонецПопытки;
КонецЕсли;
Возврат ДанныеВыбора;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
СокращенияАдресныхОбъектов (БСП)
ПолноеНаименованиеАдресногоСокращения (БСП)
АктуальныеАдресныеСведения (БСП)