Поля адреса 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
///////////////////////////////////////////////////////////////////////////////////////////////////////
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)