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