ПоляАдресаВJSON (БСП)

Автор: 1С
ОбщийМодуль.РаботаСАдресами
БСП

Поля адреса json. Преобразует структуру описывающую адрес во внутренний формат хранения контактной информации JSON.

// Преобразует структуру описывающую адрес во внутренний формат хранения контактной информации JSON.
//
// Параметры:
//  ПоляАдреса - Структура - адрес с разбивкой по полям. Список полей см. РаботаСАдресамиКлиентСервер.ПоляАдреса.
// 
// Возвращаемое значение:
//  Строка - адрес во внутреннем формате JSON.
//
Функция ПоляАдресаВJSON(ПоляАдреса) Экспорт
	
	Результат = РаботаСАдресамиКлиентСервер.ОписаниеНовойКонтактнойИнформации(
		Перечисления.ТипыКонтактнойИнформации.Адрес);
	
	ТипУникальныйИдентификатор = Тип("УникальныйИдентификатор");
	
	Результат.AddressType = ПоляАдреса.ТипАдреса;
	Если ПоляАдреса.ТипАдреса <> РаботаСАдресамиКлиентСервер.МуниципальныйАдрес()
		И ПоляАдреса.ТипАдреса <> РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес() Тогда
		ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Некорректный тип адреса (%1)'"),
			ПоляАдреса.ТипАдреса);
		ВызватьИсключение ТекстИсключения;
	КонецЕсли;
	
	Если ПоляАдреса.ТипАдреса <> РаботаСАдресамиКлиентСервер.АдминистративноТерриториальныйАдрес() Тогда
		Результат.Value = ПоляАдреса.Представление;
	Иначе
		Результат.Value = ПоляАдреса.МуниципальноеПредставление;
	КонецЕсли;
	
	Результат.Comment     = ПоляАдреса.Комментарий;
	
	Результат.Country     = ПоляАдреса.Страна;
	Результат.CountryCode = ПоляАдреса.КодСтраны;
	
	Результат.ZIPcode     = ПоляАдреса.Индекс;
	
	Результат.AreaCode    = ПоляАдреса.КодРегиона;
	
	Результат.Area     = ПоляАдреса.Регион;
	Результат.AreaType = ПоляАдреса.РегионСокращение;
	
	Результат.City     = ПоляАдреса.Город;
	Результат.CityType = ПоляАдреса.ГородСокращение;
	
	Результат.Street     = ПоляАдреса.Улица;
	Результат.StreetType = ПоляАдреса.УлицаСокращение;
	
	Результат.District     = ПоляАдреса.Район;
	Результат.DistrictType = ПоляАдреса.РайонСокращение;
	
	Результат.MunDistrict     = ПоляАдреса.МуниципальныйРайон;
	Результат.MunDistrictType = ПоляАдреса.МуниципальныйРайонСокращение;
	
	Результат.Settlement     = ПоляАдреса.Поселение;
	Результат.SettlementType = ПоляАдреса.ПоселениеСокращение;
	
	Результат.CityDistrict     = ПоляАдреса.ВнутригородскойРайон;
	Результат.CityDistrictType = ПоляАдреса.ВнутригородскойРайонСокращение;
	
	Результат.Locality     = ПоляАдреса.НаселенныйПункт;
	Результат.LocalityType = ПоляАдреса.НаселенныйПунктСокращение;
	
	Результат.Territory     = ПоляАдреса.Территория;
	Результат.TerritoryType = ПоляАдреса.ТерриторияСокращение;
	
	Результат.HouseType   = ПоляАдреса.Здание.ТипЗдания;
	Результат.HouseNumber = ПоляАдреса.Здание.Номер;
	
	Если ПоляАдреса.Свойство("Идентификаторы") Тогда
		Если ТипЗнч(ПоляАдреса.Идентификаторы.РегионИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.РегионИдентификатор) Тогда
			Результат.AreaID = Строка(ПоляАдреса.Идентификаторы.РегионИдентификатор);
			Результат.ID = Результат.AreaID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.РайонИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.РайонИдентификатор) Тогда
			Результат.DistrictID = Строка(ПоляАдреса.Идентификаторы.РайонИдентификатор);
			Результат.ID         = Результат.DistrictID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.ГородИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ГородИдентификатор) Тогда
			Результат.CityID = Строка(ПоляАдреса.Идентификаторы.ГородИдентификатор);
			Результат.ID     = Результат.CityID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.МуниципальныйРайонИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.МуниципальныйРайонИдентификатор) Тогда
			Результат.MunDistrictID = Строка(ПоляАдреса.Идентификаторы.МуниципальныйРайонИдентификатор);
			Результат.ID            = Результат.MunDistrictID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.ПоселениеИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ПоселениеИдентификатор) Тогда
			Результат.SettlementID = Строка(ПоляАдреса.Идентификаторы.ПоселениеИдентификатор);
			Результат.ID           = Результат.SettlementID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.ВнутригородскойРайонИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ВнутригородскойРайонИдентификатор) Тогда
			Результат.CityDistrictID = Строка(ПоляАдреса.Идентификаторы.ВнутригородскойРайонИдентификатор);
			Результат.ID             = Результат.CityDistrictID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.НаселенныйПунктИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.НаселенныйПунктИдентификатор) Тогда
			Результат.LocalityID = Строка(ПоляАдреса.Идентификаторы.НаселенныйПунктИдентификатор);
			Результат.ID         = Результат.LocalityID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.ТерриторияИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.ТерриторияИдентификатор) Тогда
			Результат.TerritoryID = Строка(ПоляАдреса.Идентификаторы.ТерриторияИдентификатор);
			Результат.ID          = Результат.TerritoryID;
		КонецЕсли;
		
		Если ТипЗнч(ПоляАдреса.Идентификаторы.УлицаИдентификатор) = ТипУникальныйИдентификатор
			И ЗначениеЗаполнено(ПоляАдреса.Идентификаторы.УлицаИдентификатор) Тогда
			Результат.StreetID = Строка(ПоляАдреса.Идентификаторы.УлицаИдентификатор);
			Результат.ID       = Результат.StreetID;
		КонецЕсли;
	КонецЕсли;
	
	Если ПоляАдреса.Свойство("ИдентификаторДома")
		И ТипЗнч(ПоляАдреса.ИдентификаторДома) = ТипУникальныйИдентификатор
		И ЗначениеЗаполнено(ПоляАдреса.ИдентификаторДома) Тогда
		Результат.HouseID = Строка(ПоляАдреса.ИдентификаторДома);
	КонецЕсли;
	
	Если ПоляАдреса.Свойство("ИдентификаторАдресногоОбъекта")
		И ТипЗнч(ПоляАдреса.ИдентификаторАдресногоОбъекта) = ТипУникальныйИдентификатор
		И ЗначениеЗаполнено(ПоляАдреса.ИдентификаторАдресногоОбъекта) Тогда
		Результат.ID = Строка(ПоляАдреса.ИдентификаторАдресногоОбъекта);
	КонецЕсли;
	
	Для Каждого ТекущийКорпус Из ПоляАдреса.Корпуса Цикл
		Результат.Buildings.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТекущийКорпус.ТипКорпуса, ТекущийКорпус.Номер));
	КонецЦикла;
	
	Для Каждого ТекущееПомещение Из ПоляАдреса.Помещения Цикл
		Результат.Apartments.Добавить(УправлениеКонтактнойИнформациейКлиентСервер.ЗначениеСтроенияИлиПомещения(ТекущееПомещение.ТипПомещения, ТекущееПомещение.Номер));
	КонецЦикла;
	
	// Заполнение кода КЛАДР последнего в иерархии адресного объекта.
	Если ПоляАдреса.Свойство("КодыКЛАДР") Тогда
		Если Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Улица) Тогда
			Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Улица;
		ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.НаселенныйПункт) Тогда
			Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.НаселенныйПункт;
		ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Город) Тогда
			Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Город;
		ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Район) Тогда
			Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Район;
		ИначеЕсли Не ПустаяСтрока(ПоляАдреса.КодыКЛАДР.Регион) Тогда
			Результат.CodeKLADR = ПоляАдреса.КодыКЛАДР.Регион;
		КонецЕсли;
	КонецЕсли;
	
	Если ПоляАдреса.Свойство("ДополнительныеКоды") Тогда
		Результат.OKTMO          = ПоляАдреса.ДополнительныеКоды.ОКТМО;
		Результат.OKATO          = ПоляАдреса.ДополнительныеКоды.ОКАТО;
		Результат.IFNSFLCode     = ПоляАдреса.ДополнительныеКоды.КодИФНСФЛ;
		Результат.IFNSULCode     = ПоляАдреса.ДополнительныеКоды.КодИФНСЮЛ;
		Результат.IFNSFLAreaCode = ПоляАдреса.ДополнительныеКоды.КодУчасткаИФНСФЛ;
		Результат.IFNSULAreaCode = ПоляАдреса.ДополнительныеКоды.КодУчасткаИФНСЮЛ;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Результат.Value) Тогда
		РаботаСАдресамиКлиентСервер.ОбновитьПредставлениеАдреса(Результат, Ложь);
	КонецЕсли;
	
	Возврат УправлениеКонтактнойИнформациейСлужебный.СтруктураВСтрокуJSON(Результат);
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

КонструкторПолейАдреса (БСП)

ПоляАдреса (БСП)

СтруктураПолейАдреса (БСП)

АвтоПодборАдреса (БСП)

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

ВывестиГиперссылку (БСП)

ТекстПустогоАдресаВВидеГиперссылки (БСП)

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

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

1С Менеджер конфигураций