АдресныеОбъектыУровня (БСП)

Автор: 1С
ОбщийМодуль.АдресныйКлассификаторСлужебный
БСП

Адресные объекты уровня. Возвращает данные классификатора поля выбора по уровню.

// Возвращает данные классификатора поля выбора по уровню.
//
// Параметры:
//     Родитель                - УникальныйИдентификатор - Родительский объект.
//     Уровень                 - Число                   - Требуемый уровень данных. 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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

СокращенияАдресныхОбъектов (БСП)

ПолноеНаименованиеАдресногоСокращения (БСП)

АктуальныеАдресныеСведения (БСП)

ЧтениеРазрешено (БСП)

ИзменениеРазрешено (БСП)

СокращенияОбъектовАдресацииАдресаРФ (БСП)

СписокДомов (БСП)

ЕстьСписокДомов (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз