Коды адреса коды. Определение кодов КЛАДР и ОКАТО, ОКТМО, налоговых инспекций ФНС и др. адреса.
// Определение кодов КЛАДР и ОКАТО, ОКТМО, налоговых инспекций ФНС и др. адреса.
//
// Параметры:
// Адрес - Строка - Адрес в формате XML или структура с полями адреса.
// ИдентификаторАдресногоОбъекта - Строка - идентификатор адреса.
// Источник - Строка - Источник получения кодов адреса, Варианты: "Сервис1С", "ЗагруженныеДанные".
// Возвращаемое значение:
// Структура - Содержит 2 структуры: Коды адреса и Коды КЛАДР.
//
Функция КодыАдресаИКодыКЛАДР(Знач Адрес, Знач ИдентификаторАдресногоОбъекта = "", Источник = Неопределено) Экспорт
Результат = КонструкторКодовАдреса();
КодКЛАДРЗаполнены = Ложь;
ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ();
КешДомов = Новый Структура("НомерКорпуса, НомерСтроения, ТипСтроения");
Для каждого Корпус Из Адрес.Buildings Цикл
Если СтрСравнить(Корпус.Type, "Корпус") = 0 Тогда
КешДомов.НомерКорпуса = Корпус.Number;
Иначе
КешДомов.ТипСтроения = Корпус.Type;
КешДомов.НомерСтроения = Корпус.Number;
КонецЕсли;
КонецЦикла;
Если ПустаяСтрока(ИдентификаторАдресногоОбъекта) Тогда
Если Не ЗначениеЗаполнено(Адрес.ID) Тогда
УстановитьИдентификаторыАдреса(Адрес, Источник);
КонецЕсли;
ИдентификаторАдресногоОбъекта = Адрес.ID;
КонецЕсли;
Результат.КодыАдреса.Идентификатор = ИдентификаторАдресногоОбъекта;
Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] И Источник <> "Сервис1С" Тогда
ОсновныеКодыЗаполнены = Ложь;
// Основные коды
Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда
СведенияОДоме = СведенияОДоме();
СведенияОДоме.НомерДома = Адрес.HouseNumber;
СведенияОДоме.ТипДома = Адрес.HouseType;
СведенияОДоме.НомерКорпуса = КешДомов.НомерКорпуса;
СведенияОДоме.НомерСтроения = КешДомов.НомерСтроения;
СведенияОДоме.ТипСтроения = КешДомов.ТипСтроения;
ОсновныеКодыЗаполнены = ЗаполнитьКодыАдреса(Результат.КодыАдреса, ИдентификаторАдресногоОбъекта, СведенияОДоме);
КонецЕсли;
КодКЛАДРЗаполнены = Ложь;
Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда
// Основные КЛАДР
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
| АдресныеОбъекты.КодКЛАДР КАК КодКЛАДР
|ИЗ
| РегистрСведений.АдресныеОбъекты КАК АдресныеОбъекты
|ГДЕ
| АдресныеОбъекты.Идентификатор = &Идентификатор");
Запрос.УстановитьПараметр("Идентификатор", ИдентификаторАдресногоОбъекта);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
КодКЛАДР = Формат(РезультатЗапроса.Выгрузить()[0].КодКЛАДР, "ЧГ=0");
Если СтрДлина(КодКЛАДР) = 14 Тогда
КодКЛАДР = "0" + КодКЛАДР + "00";
ИначеЕсли СтрДлина(КодКЛАДР) = 15 Тогда
КодКЛАДР = КодКЛАДР + "00"; // добавляем признак актуальности
ИначеЕсли СтрДлина(КодКЛАДР) = 16 Тогда
КодКЛАДР = "0" + КодКЛАДР;
КонецЕсли;
Результат.КодыАдреса.КодКЛАДР = КодКЛАДР;
СформироватьКодыКЛАДР(КодКЛАДР, Адрес, Результат.КодыКЛАДР);
КодКЛАДРЗаполнены = Истина;
КонецЕсли;
КонецЕсли;
Если КодКЛАДРЗаполнены И ОсновныеКодыЗаполнены Тогда
Возврат Результат;
КонецЕсли;
КонецЕсли;
// Получаем код КЛАДР из веб-сервиса.
Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] Или Источник = "Сервис1С" Тогда
Если ЗначениеЗаполнено(ИдентификаторАдресногоОбъекта) Тогда
ТекстGETЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("selectByCode?code=%1&codeType=ID",
Строка(ИдентификаторАдресногоОбъекта));
РезультатВебСервис = ВыполнитьЗапросЧерезВебСервис(ТекстGETЗапроса);
Если НЕ РезультатВебСервис.Отказ И РезультатВебСервис.Данные.Количество() > 0 Тогда
Сведения = РезультатВебСервис.Данные[0];
Если Не КодКЛАДРЗаполнены Тогда
Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR;
СформироватьКодыКЛАДР(Результат.КодыАдреса.КодКЛАДР, Адрес, Результат.КодыКЛАДР);
КонецЕсли;
Результат.КодыАдреса.КодКЛАДР = Сведения.codeKLADR;
Результат.КодыАдреса.Идентификатор = Сведения.Id;
Результат.КодыАдреса.ОКАТО = Сведения.okato;
Результат.КодыАдреса.ОКТМО = Сведения.oktmo;
Результат.КодыАдреса.КодИФНСФЛ = Сведения.ifnsFlCode;
Результат.КодыАдреса.КодИФНСЮЛ = Сведения.ifnsUlCode;
Результат.КодыАдреса.КодУчасткаИФНСФЛ = Сведения.ifnsFlAreaCode;
Результат.КодыАдреса.КодУчасткаИФНСЮЛ = Сведения.ifnsUlAreaCode;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
КодСериализацииОбъектаАдресации (БСП)
КодСериализацииПочтовогоИндекса (БСП)