Контактная информация структуру json. Преобразует формат из XML в JSON
// Преобразует формат из XML в JSON
//
Функция КонтактнаяИнформацияВСтруктуруJSON(КонтактнаяИнформация, Представление = "") Экспорт
Результат = ОписаниеНовойКонтактнойИнформации();
НаименованиеСтраны = "";
Если ТипЗнч(КонтактнаяИнформация) = Тип("Строка") Тогда
Если ЭтоКонтактнаяИнформацияВXML(КонтактнаяИнформация) Тогда
XDTOАдрес = ДесериализацияАдресаXDTO(КонтактнаяИнформация);
Если XDTOАдрес.Свойства().Получить("Представление") <> Неопределено Тогда
Результат.Value = XDTOАдрес.Представление;
КонецЕсли;
Если XDTOАдрес.Свойства().Получить("Комментарий") <> Неопределено И ТипЗнч(XDTOАдрес.Комментарий) = Тип("Строка") Тогда
Результат.Comment = XDTOАдрес.Комментарий;
КонецЕсли;
ИначеЕсли ЭтоКонтактнаяИнформацияВJSON(КонтактнаяИнформация) Тогда
АдресИзJSON = JSONВКонтактнуюИнформациюПоПолям(КонтактнаяИнформация);
ЗаполнитьЗначенияСвойств(Результат, АдресИзJSON);
УстановитьИдентификаторыАдреса(Результат);
Возврат Результат;
Иначе
Возврат Результат;
КонецЕсли;
Иначе
Возврат Результат;
КонецЕсли;
ПространствоИмен = ПространствоИмен();
Состав = XDTOАдрес.Состав;
Если Состав = Неопределено Тогда
Возврат Результат;
КонецЕсли;
XDTOТип = Состав.Тип();
Если XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен, "Адрес")
Или XDTOТип = ФабрикаXDTO.Тип("http://www.v8.1c.ru/ssl/contactinfo", "Адрес") Тогда
Если Состав.Свойства().Получить("Страна") <> Неопределено И ЗначениеЗаполнено(Состав.Страна) Тогда
НаименованиеСтраны = Состав.Страна;
Иначе
НаименованиеСтраны = ОсновнаяСтрана();
КонецЕсли;
АдресРФ = Состав.Состав;
ИначеЕсли XDTOТип = ФабрикаXDTO.Тип(ПространствоИмен(), "АдресРФ") Тогда
АдресРФ = Состав;
Иначе
Возврат Результат;
КонецЕсли;
Если АдресРФ = Неопределено Тогда
Возврат Результат;
ИначеЕсли ТипЗнч(АдресРФ) = Тип("Строка") Тогда
Если СтрЧислоВхождений(АдресРФ, ",") = 9 Тогда
Результат.AddressType = АдминистративноТерриториальныйАдрес();
ЧастиАдреса = СтрРазделить(АдресРФ, ",");
Результат.ZIPCode = ЧастиАдреса[1];
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[2]);
Результат.Area = НаименованиеИСокращение.Наименование;
Результат.AreaType = НаименованиеИСокращение.Сокращение;
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[3]);
Результат.District = НаименованиеИСокращение.Наименование;
Результат.DistrictType = НаименованиеИСокращение.Сокращение;
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[4]);
Результат.City = НаименованиеИСокращение.Наименование;
Результат.CityType = НаименованиеИСокращение.Сокращение;
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[5]);
Результат.Locality = НаименованиеИСокращение.Наименование;
Результат.LocalityType = НаименованиеИСокращение.Сокращение;
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[6]);
Результат.Street = НаименованиеИСокращение.Наименование;
Результат.StreetType = НаименованиеИСокращение.Сокращение;
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[7]);
Результат.HouseNumber = НаименованиеИСокращение.Сокращение;
Результат.HouseType = НаименованиеИСокращение.Наименование;
Если ЗначениеЗаполнено(ЧастиАдреса[8]) Тогда
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[8]);
Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование));
КонецЕсли;
Если ЗначениеЗаполнено(ЧастиАдреса[9]) Тогда
НаименованиеИСокращение = НаименованиеИСокращение(ЧастиАдреса[9]);
Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(
НаименованиеИСокращение.Сокращение, НаименованиеИСокращение.Наименование));
КонецЕсли;
КонецЕсли;
Иначе
Если ЗначениеЗаполнено(АдресРФ.Адрес_по_документу) Тогда
Результат.AddressType = АдресВСвободнойФорме();
Иначе
Результат.AddressType = АдминистративноТерриториальныйАдрес();
КонецЕсли;
Результат.Country = НаименованиеСтраны;
Результат.ZIPCode = ПочтовыйИндексАдреса(АдресРФ);
Результат.OKTMO = Формат(АдресРФ.ОКТМО, "ЧГ=0");
Результат.OKATO = Формат(АдресРФ.ОКАТО, "ЧГ=0");
СубъектРФ = НаименованиеИСокращение(АдресРФ.СубъектРФ);
Результат.Area = Строка(СубъектРФ.Наименование);
Результат.AreaType = Строка(СубъектРФ.Сокращение);
РайонАдреса = НаименованиеИСокращение(РайонАдреса(АдресРФ));
Результат.District = Строка(РайонАдреса.Наименование);
Результат.DistrictType = Строка(РайонАдреса.Сокращение);
Город = НаименованиеИСокращение(АдресРФ.Город);
Результат.City = Строка(Город.Наименование);
Результат.CityType = Строка(Город.Сокращение);
НаселПункт = НаименованиеИСокращение(АдресРФ.НаселПункт);
Результат.Locality = Строка(НаселПункт.Наименование);
Результат.LocalityType = Строка(НаселПункт.Сокращение);
Улица = НаименованиеИСокращение(АдресРФ.Улица);
Результат.Street = Строка(Улица.Наименование);
Результат.StreetType = Строка(Улица.Сокращение);
ВнутригРайон = НаименованиеИСокращение(АдресРФ.ВнутригРайон);
Результат.CityDistrict = Строка(ВнутригРайон.Наименование);
Результат.CityDistrictType = Строка(ВнутригРайон.Сокращение);
ЗначениеДополнительныхЭлементов = ЗначениеДополнительныхЭлементов(АдресРФ);
Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент) Тогда
ДополнительныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ДополнительныйЭлемент);
Результат.Territory = Строка(ДополнительныйЭлемент.Наименование);
Результат.TerritoryType = Строка(ДополнительныйЭлемент.Сокращение);
КонецЕсли;
Если ЗначениеЗаполнено(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент) Тогда
ПодчиненныйЭлемент = НаименованиеИСокращение(ЗначениеДополнительныхЭлементов.ПодчиненныйЭлемент);
Результат.Street = Строка(ПодчиненныйЭлемент.Наименование);
Результат.StreetType = Строка(ПодчиненныйЭлемент.Сокращение);
КонецЕсли;
ЗданияИПомещения = ЗданияИПомещенияАдреса(АдресРФ);
Для каждого Здание Из ЗданияИПомещения.Здания Цикл
Если Здание.Вид = 1 Тогда
Результат.HouseType = Здание.Тип;
Результат.HouseNumber = Здание.Значение;
Иначе
Результат.Buildings.Добавить(ЗначениеСтроенияИлиПомещения(Здание.Тип, Здание.Значение));
КонецЕсли;
КонецЦикла;
Для каждого Помещение Из ЗданияИПомещения.Помещения Цикл
Результат.Apartments.Добавить(ЗначениеСтроенияИлиПомещения(Помещение.Тип, Помещение.Значение));
КонецЦикла;
КонецЕсли;
УстановитьИдентификаторыАдреса(Результат);
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
СтруктураКонтактнойИнформацииПоТипу (БСП)
КонтактнаяИнформацияОрганизации (БСП)
ПриОпределенииКонтактнойИнформацииОрганизации (БСП)
КонтактнаяИнформацияИндивидуальногоПредпринимателя (БСП)
ПараметрыФормыКонтактнойИнформации (БСП)
СтруктураВидаКонтактнойИнформации (БСП)
ПриОпределенииКонтактнойИнформацииОбособленногоПодразделения (БСП)