Часто при обмене с другими нетиповыми базами, а также при загрузке документов возникает необходимость приведения адреса в стандартный вид, для этого его необходимо разобрать по составляющим, вот и пришла мне в голову такая идея, которую представляю Вам.
Возможно, кому-нибудь понадобится в работе.
В качестве исходных данных - процедура, выдающая соответствие с ключевыми словами и сокращениями
&НаСервере
Функция ПолучитьСоответствиеДанных()
МассивИндекс = Новый Массив;
МассивИндекс.Добавить("Тип_Число");
МассивРайон = Новый Массив;
МассивРайон.Добавить(" Р-Н");
МассивРайон.Добавить(" РАЙОН");
МассивОбласть = Новый Массив;
МассивОбласть.Добавить(" ОБЛ");
МассивОбласть.Добавить(" РЕСП");
МассивОбласть.Добавить(" КРАЙ");
МассивОбласть.Добавить("МО");
МассивГород = Новый Массив;
МассивГород.Добавить(" Г");
МассивПоселение = Новый Массив;
МассивПоселение.Добавить(" АУЛ");
МассивПоселение.Добавить(" П");
МассивПоселение.Добавить(" Х");
МассивПоселение.Добавить(" С/П");
МассивПоселение.Добавить("СЕЛА");
МассивПоселение.Добавить("СЕЛО");
МассивУлица = Новый Массив;
МассивУлица.Добавить(" УЛ");
МассивУлица.Добавить(" МКР");
МассивУлица.Добавить(" С");
МассивУлица.Добавить(" ДОР");
МассивУлица.Добавить(" Ш");
МассивУлица.Добавить(" ПЕР");
МассивУлица.Добавить(" ПРОЕЗД");
МассивУлица.Добавить(" ПР-КТ");
МассивУлица.Добавить("ТЕРРИТОРИЯ");
МассивДом = Новый Массив;
МассивДом.Добавить("ДОМ №");
//МассивДом.Добавить("СТРОЕНИЕ");
МассивДом.Добавить("ВЛАДЕНИЕ №");
МассивКорпус = Новый Массив;
МассивКорпус.Добавить("КОРПУС");
МассивКорпус.Добавить("СТРОЕНИЕ");
МассивКорпус.Добавить("ПРОМПЛОЩАДКА №");
МассивКвартира = Новый Массив;
МассивКвартира.Добавить("КВ.");
МассивКвартира.Добавить("ОФ.");
МассивКвартира.Добавить("БОКС");
МассивКвартира.Добавить("ПОМЕЩЕНИЕ");
Результат = Новый Соответствие;
Результат.Вставить("Индекс", Новый Структура("Данные,УдалитьИзЗначения",МассивИндекс, Ложь));
Результат.Вставить("Район", Новый Структура("Данные,УдалитьИзЗначения",МассивРайон, Ложь));
Результат.Вставить("Область", Новый Структура("Данные,УдалитьИзЗначения",МассивОбласть, Ложь));
Результат.Вставить("Город", Новый Структура("Данные,УдалитьИзЗначения",МассивГород, Ложь));
Результат.Вставить("Поселение", Новый Структура("Данные,УдалитьИзЗначения",МассивПоселение, Ложь));
Результат.Вставить("Улица", Новый Структура("Данные,УдалитьИзЗначения",МассивУлица, Ложь));
Результат.Вставить("Дом", Новый Структура("Данные,УдалитьИзЗначения",МассивДом, Истина));
Результат.Вставить("Корпус", Новый Структура("Данные,УдалитьИзЗначения",МассивКорпус, Истина));
Результат.Вставить("Квартира", Новый Структура("Данные,УдалитьИзЗначения",МассивКвартира, Истина));
СтрокаРеквизитов = "Представление";
Для каждого Реквизит из Результат Цикл
СтрокаРеквизитов = СтрокаРеквизитов + ","+ СокрЛП(Реквизит.Ключ);
КонецЦикла;
Возврат Новый Структура("Результат,СтрокаРеквизитов",Результат,СтрокаРеквизитов);
КонецФункции
Причем структура соответствия и задает структуру переменной ответа
Сама процедура, которая все разбирает, весьма проста
&НаКлиенте
Функция _РазложитьАдрес(СтрокаАдреса)
Данные = ПолучитьСоответствиеДанных();
Результат = Новый Структура(Данные.СтрокаРеквизитов);
СоставАдреса = Разложить(СокрЛП(СтрокаАдреса),",");
Результат.Представление = СокрЛП(СтрокаАдреса);
ДанныеКонтроля = Данные.результат;
Для каждого Состав из СоставАдреса Цикл
Для каждого Контроль из ДанныеКонтроля Цикл
ЗначениеКлюч = Контроль.Ключ;
Значение = Контроль.Значение;
Для каждого Строка из Значение.Данные Цикл
Если Строка = "Тип_Число" ТОгда
Попытка
_Число = Число(СокрЛП(Состав));
Если _Число <> 0 Тогда
Результат[ЗначениеКлюч] = СокрЛП(Состав);
КонецЕсли;
Исключение
КонецПопытки;
КонецЕсли;
Если стрНайти(ВРЕГ(Состав),ВРЕГ(Строка)) <> 0 ТОгда
Если Значение.УдалитьИзЗначения ТОгда
Результат[ЗначениеКлюч] = СокрЛП(стрЗаменить(ВРЕГ(СокрЛП(Состав)),ВРЕГ(Строка),""));
Иначе
Результат[ЗначениеКлюч] = СокрЛП(Состав);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
Вызов для обработки данных происходит
СтрокаАдрес = "..........сама строка адреса.......";
Ответ = _РазложитьАдрес(СтрокаАдрес);
Тестировалась на платформе 1С:Предприятие 8.3 (8.3.15), конфигурация УТ 11, БП 3.0, УАТ
P.S. Здесь не используются типовые процедуры и функции, поэтому нет разницы, в какой конфигурации будете это использовать
Надеюсь, кому-то данная информация облегчит жизнь)