РезультатПроверкиАдресовПоКлассификатору (БСП)

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

Результат проверки адресов по классификатору. Проверяет данные на соответствие классификатору.

// Проверяет данные на соответствие классификатору.
//
// Параметры:
//     Адреса - Массив - Проверяемые адреса. Содержит структуры с полями:
//         * Адрес                             - ОбъектXDTO, Строка - Проверяемый адрес
//                                               ((http://www.v8.1c.ru/ssl/AddressSystem) АдресРФ) или его
//                                               XML-сериализация.
//         * ФорматАдреса - Строка - Тип используемого классификатора для проверки.
// 
// Возвращаемое значение:
//     Структура -  найденные варианты. Содержит поля:
//       * Отказ                        - Булево - Поставщик не доступен.
//       * ПодробноеПредставлениеОшибки - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ
//                                                 = Ложь.
//       * КраткоеПредставлениеОшибки   - Строка - Описание ошибки, если поставщик недоступен. Неопределено, если Отказ
//                                                 = Ложь.
//       * Данные                       - Массив - Результаты проверки. Индекс результата совпадает с индексом
//                                                 параметра Адреса.
//                                                 Каждый элемент массива - структура, содержащая поля:
//           ** Ошибки   - Массив     - Описание ошибок поиска в классификаторе. Состоит из структур с полями.
//               *** Ключ      - Строка - Служебный идентификатор места ошибки - путь XPath в объекте XDTO.
//               *** Текст     - Строка - Текст ошибки.
//               *** Подсказка - Строка - Текст возможного исправления ошибки.
//           ** Варианты - Массив     - Содержит описание найденных вариантов. Каждый элемент - структура с полями:
//               *** Идентификатор    - УникальныйИдентификатор  - Код классификатора объекта - варианта.
//               *** Индекс           - Число - Почтовый индекс объекта - варианта.
//               *** КодКЛАДР         - Число - Код КЛАДР ближайшего объекта.
//               *** OKATO            - Число - Данные ФНС.
//               *** ОКТМО            - Число - Данные ФНС.
//               *** КодИФНСФЛ        - Число - Данные ФНС.
//               *** КодИФНСЮЛ        - Число - Данные ФНС.
//               *** КодУчасткаИФНСФЛ - Число - Данные ФНС.
//               *** КодУчасткаИФНСЮЛ - Число - Данные ФНС.
//
Функция РезультатПроверкиАдресовПоКлассификатору(Адреса) Экспорт
	
	Результат = Новый Структура("Данные", Новый Массив);
	СтруктураОписанияОшибкиПоставщика(Результат);
	
	// Приводим типы
	МестоПроверки = Новый Структура("ЗагруженныеСведения, ВебСервис", Новый Массив, Новый Массив);
	
	Если ТипЗнч(Адреса) <> Тип("Массив") Тогда
		Если Адреса.Свойство("Area") Тогда
			ЗагруженныеСведения = СведенияОРегионе(Адреса.Area + " "+ Адреса.AreaType);
			Если ЗагруженныеСведения.Загружен Тогда
				МестоПроверки.ЗагруженныеСведения.Добавить(Адреса);
			Иначе
				МестоПроверки.ВебСервис.Добавить(Адреса);
			КонецЕсли;
		КонецЕсли;
	Иначе
		Для каждого АдресПроверки Из Адреса Цикл
			Если АдресПроверки.Адрес.Свойство("Area") Тогда
				Если ЗначениеЗаполнено(АдресПроверки.Адрес.Area) Тогда
					ЗагруженныеСведения = СведенияОРегионе(АдресПроверки.Адрес.Area + " "+ АдресПроверки.Адрес.AreaType);
					Если ЗагруженныеСведения.Загружен Тогда
						МестоПроверки.ЗагруженныеСведения.Добавить(АдресПроверки);
					Иначе
						МестоПроверки.ВебСервис.Добавить(АдресПроверки);
					КонецЕсли;
				Иначе
					МестоПроверки.ЗагруженныеСведения.Добавить(АдресПроверки);
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	ЗагруженныеАдресныеСведения = АдресныйКлассификаторПовтИсп.СведенияОЗагрузкеСубъектовРФ();
	Если ЗагруженныеАдресныеСведения["ИспользоватьЗагруженные"] Тогда
		ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуВнутр(Результат, МестоПроверки.ЗагруженныеСведения);
	КонецЕсли;
	
	Если ЗагруженныеАдресныеСведения["КлассификаторДоступен"] = Истина Тогда
		
		Для каждого АдресаДляПроверки Из МестоПроверки.ВебСервис Цикл
				
				Попытка
					
					ЗаполнитьРезультатПроверкиАдресаПоКлассификаторуСервис1С(Результат, АдресаДляПроверки);
					
				Исключение
					СтруктураОписанияОшибкиПоставщика(Результат, ИнформацияОбОшибке());
					ЗаписьЖурналаРегистрации( СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , Результат.ПодробноеПредставлениеОшибки);
				КонецПопытки;
				
		КонецЦикла;
	Иначе
		
		Для каждого АдресаДляПроверки Из МестоПроверки.ВебСервис Цикл
			
			РезультатПроверки = Новый Структура();
			РезультатПроверки.Вставить("id",            "");
			РезультатПроверки.Вставить("АдресПроверен", Ложь);
			РезультатПроверки.Вставить("Варианты",      Новый Массив);
			РезультатПроверки.Вставить("Ошибки",        Новый Массив);
			
			Результат.Данные.Добавить(РезультатПроверки);
		
		КонецЦикла;
	
	КонецЕсли;
		
	Возврат Результат;
	
КонецФункции

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

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

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

ПараметрыЗагрузкиКлассификатораАдресов (БСП)

ВернутьРезультатКакАдресВоВременномХранилище (БСП)

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

АдресаПоПочтовомуИндексуКлассификатора (БСП)

РезультатЗаданияПроверкиНаличияОбновлений (БСП)

ДополнитьНастройкиПроверкиАдреса (БСП)

УстановитьИдентификаторыАдреса (БСП)

РезультатПроверкиОграниченияДоступа (БСП)

ФоновоеЗаданиеЗагрузкиКлассификатораАдресов (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз