АдресаДляИнтерактивногоВыбора (БСП)

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

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

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

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

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

ДобавитьПослеВыбораРежимаСоздания (БСП)

ДобавитьФайл (БСП)

АдресЕАЭС (БСП)

ИнтерактивныйРежимДоступен (БСП)

РаспознатьАдрес (БСП)

ЭтоМуниципальныйАдрес (БСП)

МуниципальныйАдрес (БСП)

ПредставлениеАдреса (БСП)

ИностранныйАдрес (БСП)

TurboConf - расширение Конфигуратора 1С