Функция РазложитьАдресДляФИАС(Адрес)
Улица=0;
Дом=0;
Корпус=0;
Квартира=0;
//Сообщить("1)"+Адрес);
Адрес = СтрЗаменить(Адрес, " ", " ");
Адрес = СтрЗаменить(Адрес, " ", " ");
Адрес = СтрЗаменить(Адрес, " ", " ");
Адрес = СтрЗаменить(Адрес, " ", " ");
Адрес = СтрЗаменить(Адрес, " ", " ");
Адрес = СтрЗаменить(Адрес, " ", " ");
Адрес = СтрЗаменить(Адрес, " ", " ");
Если Лев(Адрес,1)<>"," Тогда
Если (Найти(нрег(Адрес),", д.")>0) Тогда
Адрес = СтрЗаменить(Адрес, ", д.",", дом № ");
Адрес = СтрЗаменить(Адрес, ", Д.",", дом № ");
ИначеЕсли (Найти(нрег(Адрес),",д.")>0) Тогда
Адрес = СтрЗаменить(Адрес, ",Д.",", дом № ");
Адрес = СтрЗаменить(Адрес, ",д.",", дом № ");
КонецЕсли;
// Для адреса который никто не пытался внести по кладру корпус не выделен, вероятно не разложится
//Если Найти("0123456789",Лев(НомерДома,1))>0 Тогда
// Если СтрДлина(НомерДома)>1 Тогда
//...
Если (Найти(нрег(Адрес),", кв.")>0) Тогда
Адрес = СтрЗаменить(Адрес, ", кв.",", квартира ");
Адрес = СтрЗаменить(Адрес, ", Кв.",", квартира ");
Адрес = СтрЗаменить(Адрес, ", КВ.",", квартира ");
ИначеЕсли (Найти(нрег(Адрес),",кв.")>0) Тогда
Адрес = СтрЗаменить(Адрес, ",кв.",", квартира ");
Адрес = СтрЗаменить(Адрес, ",Кв.",", квартира ");
Адрес = СтрЗаменить(Адрес, ",КВ.",", квартира ");
КонецЕсли;
Возврат Адрес;
Иначе
Если ((Найти(Адрес,"ул.,")=0)ИЛИ(Найти(Адрес,"ул. ,")=0))И(Найти(Адрес,"ул.")>0) Тогда
Адрес = СтрЗаменить(Адрес,"ул.","ул");
Если Найти(Адрес,",дом № ")=0 Тогда
ПредставитьАдресВФорматеМНС(Адрес);
Если Найти(Адрес,Улица+",")>0 Тогда
ПозицияКонецУлицы = Найти(Адрес,Улица+",")+СтрДлина(Улица);
Иначе
ПозицияКонецУлицы = Найти(Адрес,СокрЛП(Улица+" ,"))+СтрДлина(Улица);
КонецЕсли;
Иначе
Адрес = СтрЗаменить(Адрес,",дом № ","ул,дом № ");
ПозицияКонецУлицы = Найти(нрег(Адрес)," ул,")+3;
КонецЕсли;
ИначеЕсли Найти(нрег(Адрес)," ул,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," ул,")+3;
ИначеЕсли Найти(нрег(Адрес)," пр-кт,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," пр-кт,")+6;
ИначеЕсли Найти(нрег(Адрес)," пер,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," пер,")+4;
ИначеЕсли Найти(нрег(Адрес)," ш,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," ш,")+2;
ИначеЕсли Найти(нрег(Адрес)," проезд,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," проезд,")+7;
ИначеЕсли Найти(нрег(Адрес)," нп,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," нп,")+3;
ИначеЕсли Найти(нрег(Адрес)," мкр,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," мкр,")+4;
ИначеЕсли Найти(нрег(Адрес)," б-р,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," б-р,")+4;
ИначеЕсли Найти(нрег(Адрес),"а/я")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес),"а/я")+3;
ИначеЕсли Найти(нрег(Адрес)," площадь")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," площадь,")+8;
ИначеЕсли Найти(нрег(Адрес)," проспект,")>0 Тогда
ПозицияКонецУлицы = Найти(нрег(Адрес)," проспект,")+9;
Иначе
ПозицияКонецУлицы = СтрДлина(Адрес);
КонецЕсли;
ПредАдресНачало = Лев(Адрес,ПозицияКонецУлицы);
АдресНачало = ПредАдресНачало;
Если Прав(АдресНачало,3)<>"ул," Тогда
Если Прав(АдресНачало,1)="," Тогда
АдресНачало = Лев(АдресНачало,СтрДлина(АдресНачало)-1);
КонецЕсли;
АдресНачало = СокрЛП(АдресНачало)+" ул,";
КонецЕсли;
АдресКонец = СтрЗаменить(Адрес,ПредАдресНачало,"");
АдресКонецТрансляция1 = нрег(АдресКонец);
АдресКонецТрансляция2 = СтрЗаменить(АдресКонецТрансляция1," ул,"," ул########## дом № ");
ФактическийАдрес2=АдресНачало+АдресКонецТрансляция2;
//Сообщить("2)"+ФактическийАдрес2);
Если Найти(АдресКонецТрансляция2,"##########")=0 Тогда
ВыделенныйНомерДомаНачало = 0;
Иначе
ВыделенныйНомерДомаНачало = Найти(АдресКонецТрансляция2," ул########## дом № ")+20;
КонецЕсли;
АдресКонецТрансляция2ДоНомераДома = Лев(АдресКонецТрансляция2,ВыделенныйНомерДомаНачало);
//Сообщить("АдресКонецТрансляция2ДоНомераДома = "+АдресКонецТрансляция2ДоНомераДома);
ВыделенныйНомерДомаБезКонца = СтрЗаменить(АдресКонецТрансляция2,АдресКонецТрансляция2ДоНомераДома,"");
//Сообщить("ВыделенныйНомерДомаБезКонца = "+ВыделенныйНомерДомаБезКонца);
Пока Лев(ВыделенныйНомерДомаБезКонца,1)="," Цикл
ВыделенныйНомерДомаБезКонца = Прав(ВыделенныйНомерДомаБезКонца,СтрДлина(ВыделенныйНомерДомаБезКонца)-1);
КонецЦикла;
КонецНомераДома = Найти(ВыделенныйНомерДомаБезКонца,",");
Если КонецНомераДома = 0 Тогда
КонецНомераДома = Найти(ВыделенныйНомерДомаБезКонца,";");
КонецЕсли;
Если КонецНомераДома = 0 Тогда
НомерДома = СокрЛП(ВыделенныйНомерДомаБезКонца);
//проверить на неправильный корпус и т.д.
//Сообщить("НомерДома1 = "+НомерДома);
Если Найти("0123456789",Лев(НомерДома,1))>0 Тогда
Если СтрДлина(НомерДома)>1 Тогда
Если Найти("0123456789",Сред(НомерДома,2,1))>0 Тогда
Если СтрДлина(НомерДома)>2 Тогда
Если Найти("0123456789",Сред(НомерДома,3,1))>0 Тогда
Если СтрДлина(НомерДома)>3 Тогда
Если Найти("0123456789",Сред(НомерДома,4,1))>0 Тогда
Если СтрДлина(НомерДома)>4 Тогда
Если Найти("0123456789",Сред(НомерДома,5,1))>0 Тогда
//Сообщить("Номер дома не корректный "+Адрес);
Корпус = "";
Иначе
Корпус = "";
КонецЕсли;
КонецЕсли;
Иначе
Корпус = СокрЛП(Сред(НомерДома,4,100));
НомерДома = СокрЛП(Лев(НомерДома,3));
КонецЕсли;
КонецЕсли;
Иначе
Корпус = СокрЛП(Сред(НомерДома,3,100));
НомерДома = СокрЛП(Лев(НомерДома,2));
КонецЕсли;
КонецЕсли;
Иначе
Корпус = СокрЛП(Сред(НомерДома,2,100));
НомерДома = СокрЛП(Лев(НомерДома,1));
КонецЕсли;
КонецЕсли;
Иначе
Корпус = НомерДома;
НомерДома = "";
КонецЕсли;
Иначе
НомерДома = Лев(ВыделенныйНомерДомаБезКонца,КонецНомераДома-1);
Если Найти(ВыделенныйНомерДомаБезКонца,",,")>0 Тогда
ПозКвартиры = Найти(ВыделенныйНомерДомаБезКонца,",,")+1;
Квартира = Прав(ВыделенныйНомерДомаБезКонца,СтрДлина(ВыделенныйНомерДомаБезКонца)-ПозКвартиры);
КонецЕсли;
Корпус = "";
Если (Лев(НомерДома,2)="д.")
ИЛИ (Лев(НомерДома,2)="Д.") Тогда
НомерДома = СокрЛП(Прав(НомерДома,СтрДлина(НомерДома)-2));
КонецЕсли;
//Сообщить("НомерДома2 = "+НомерДома);
Если Найти("0123456789",Лев(НомерДома,1))>0 Тогда
Если СтрДлина(НомерДома)>1 Тогда
Если Найти("0123456789",Сред(НомерДома,2,1))>0 Тогда
Если СтрДлина(НомерДома)>2 Тогда
Если Найти("0123456789",Сред(НомерДома,3,1))>0 Тогда
Если СтрДлина(НомерДома)>3 Тогда
Если Найти("0123456789",Сред(НомерДома,4,1))>0 Тогда
Если СтрДлина(НомерДома)>4 Тогда
Если Найти("0123456789",Сред(НомерДома,5,1))>0 Тогда
//Сообщить("Номер дорма не корректный "+Адрес);
Корпус = "";
Иначе
Корпус = СокрЛП(Сред(НомерДома,5,100));
НомерДома = СокрЛП(Лев(НомерДома,4));
КонецЕсли;
КонецЕсли;
Иначе
Корпус = СокрЛП(Сред(НомерДома,4,100));
НомерДома = СокрЛП(Лев(НомерДома,3));
КонецЕсли;
КонецЕсли;
Иначе
Корпус = СокрЛП(Сред(НомерДома,3,100));
НомерДома = СокрЛП(Лев(НомерДома,2));
КонецЕсли;
КонецЕсли;
Иначе
Корпус = СокрЛП(Сред(НомерДома,2,100));
НомерДома = СокрЛП(Лев(НомерДома,1));
КонецЕсли;
КонецЕсли;
Иначе
Корпус = НомерДома;
НомерДома = "";
КонецЕсли;
Если Корпус = "" Тогда
КолвоЗнаковНомерДома = СтрДлина(НомерДома)+1;//увеличили на запятую
АдресКонецТрансляция3 = СокрЛП(Прав(ВыделенныйНомерДомаБезКонца,СтрДлина(ВыделенныйНомерДомаБезКонца)-КолвоЗнаковНомерДома));
Если СокрЛП(АдресКонецТрансляция3)>"" Тогда
Если Найти("0123456789",Лев(АдресКонецТрансляция3,1))=1 Тогда
ПредполагаемаяКвартира = АдресКонецТрансляция3;
КонецПредполагаемойКвартиры = Найти(ПредполагаемаяКвартира,",");
Если КонецПредполагаемойКвартиры = 0 Тогда
// все что записано в переменной квартира это действительно квартира
Квартира = СокрЛП(ПредполагаемаяКвартира);
Сообщить("КвартираБезКорпуса = "+Квартира);
Иначе
// оказывается это была не квартира а корпус
Корпус = Лев(ПредполагаемаяКвартира,КонецПредполагаемойКвартиры);
//Сообщить("Корпус = "+Корпус);
Квартира = СтрЗаменить(АдресКонецТрансляция3,Корпус+",","");
//Сообщить("Квартира = "+Квартира);
КонецЕсли;
ИначеЕсли Лев(АдресКонецТрансляция3,1)="," Тогда
Корпус = "";
Квартира = СтрЗаменить(АдресКонецТрансляция3,",","");
Иначе
//это корпус
КонецКорпуса = Найти(АдресКонецТрансляция3,",");
Корпус = Лев(АдресКонецТрансляция3,КонецКорпуса);
Корпус = СтрЗаменить(Корпус,",","");
АдресКонецТрансляция3 = Прав(АдресКонецТрансляция3,СтрДлина(АдресКонецТрансляция3)-СтрДлина(Корпус));
//Сообщить("Корпус = "+Корпус);
Если Найти(АдресКонецТрансляция3,",")>0 Тогда
Квартира = СокрЛП(Прав(АдресКонецТрансляция3,СтрДлина(АдресКонецТрансляция3)-КонецКорпуса+1));
КонецЕсли;
Квартира = СтрЗаменить(АдресКонецТрансляция3,",","");
КонецЕсли;
КонецЕсли;
ИначеЕсли Лев(Корпус,1)=";" Тогда
Корпус = СокрЛП(Прав(Корпус,СтрДлина(Корпус)-1));
КонецЕсли;
КонецЕсли;
Если СокрЛП(НомерДома)>"" Тогда
Если Найти(АдресНачало,", дом №")=0 Тогда
Если Прав(АдресНачало,1)="," Тогда
ФактическийАдрес3=АдресНачало+" дом № "+НомерДома;
Иначе
ФактическийАдрес3=АдресНачало+", дом № "+НомерДома;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если СокрЛП(Корпус)>"" Тогда
ФактическийАдрес3=ФактическийАдрес3+", корпус "+Корпус;
КонецЕсли;
Если СокрЛП(Квартира)>"" Тогда
ФактическийАдрес3=ФактическийАдрес3+", квартира "+Квартира;
КонецЕсли;
//Сообщить("3)"+ФактическийАдрес3);
Возврат ФактическийАдрес3;
КонецЕсли;
КонецФункции