Имя: Пароль:
1C
1С v8
Разбор адреса из КЛАДР
0 Darhon
 
24.05.13
12:40
Здравствуйте! Подскажите пожалуйста как разобрать адрес из КЛАДР так, чтобы название улицы и тип улицы были раздельно. Например:
"Партизанская ул" преобразовывалось бы в "Партизанская"  и "ул"

Вот мой код для отсечения самого названия:

Улица = "";
                    Для А = 0 По СтрДлина(ПредставлениеУлица) Цикл
                        Символ = НРег(Сред(ПредставлениеУлица, А, 1));
                        Если Символ<>" " Тогда
                            Улица = Улица + Символ;
                        КонецЕсли;
                    КонецЦикла;




В итоге получается переменная типа: "партизанскаяул". Заранее спасибо.
1 zak555
 
24.05.13
12:40
> ПредставлениеУлица

откуда берёшь ?
2 zak555
 
24.05.13
12:41
и что за конфа ?
3 Gucci76
 
24.05.13
12:41
Улица может из двух слов быть
4 Ursus maritimus
 
24.05.13
12:42
И даже из трех
5 Масянька
 
24.05.13
12:43
В "ПредставлениеУлица" - что? "Партизанская" или "Партизанская ул"?
6 Gucci76
 
24.05.13
12:43
В самом кладр уже есть сокращение.
Значит надо выделить не из КЛАДР, а из представления адреса.
Верно?
7 Darhon
 
24.05.13
12:48
(1) Из запроса. Конфа 1с 8.2 ЗуП
(3) Может я вот как раз и думаю как это лучше реализовать. В таком виде этот код название из 2 слов не обработает.
(5) "Партизанская ул"
8 YurAnt
 
24.05.13
12:50
Вариантов два (если я правильно предполагаю):
1) Либо изучите реквизиты (и реквизиты родителей - см. структуру кладра - есть ли возможность выдернуть информацию оттуда ?)
2) Писать парсер строки предусмотрев все возможные варианты
9 dk
 
24.05.13
12:50
там вроде есть файл с сокращениями (ул, пр, ..) вот на него и ориентируйся
10 Масянька
 
24.05.13
12:51
(7) Какой тип у "ПредставлениеУлица"? Как он формируется?
Полностью согласна с (8): сначала изучается структура Кладра'а, а потом - делай, что хошь и как хошь :)
11 Darhon
 
24.05.13
12:52
(9) Да есть. Список сокращений я получаю. Меня интересует почему мой код возвращает слитный результат. И как предусмотреть название из 2 или 3 слов...
12 Масянька
 
24.05.13
12:52
+(10) Согласна с (8) п. 1.
13 Darhon
 
24.05.13
12:53
(10) Строка - тип ПредставленияУлица.
Формируется так:
.....
|    КонтактнаяИнформация.Поле6,
.....
ПредставлениеУлица=Выборка.Поле6;
14 Масянька
 
24.05.13
12:54
(13) Найди, открой и посмотри в общих модулях ФормированиеАдреса или ПредставлениеАдреса (что-то в этом роде).
15 Масянька
 
24.05.13
13:00
Если мне не изменяет память - улица, проспект, переулок - там завязан код поля "Улица".
16 zak555
 
24.05.13
13:09
это ты хочешь чтобы юзеры руками это не делали или что ?
17 НЕА123
 
24.05.13
13:21
Улица = "";
Стр = СтрЗаменить(ПредставлениеУлица, " ", Символы.ПС);
Для к = 1 по СтрЧислоСтрок(Стр) - 1 Цикл
 Улица =?(к=1,""," ") + СТрПОлучитьСтроку(Стр, к);
КонецЦикла;
18 zak555
 
24.05.13
13:26
подсказка



Функция глАдресСоответствуетТребованиямМНС(Адрес) Экспорт
   
   АдресСписком = глРазложить(Адрес);
   
   Если      СтрКоличествоСтрок(Адрес) <> 1 Тогда     // недолжно быть переводов строк
       Возврат 0;
   ИначеЕсли СтрЧислоВхождений(Адрес, ",") <> 9 Тогда // должно быть 9 запятых
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(1))  > 3  Тогда   // код страны не > 3 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(2))  > 6  Тогда   // индекс не > 6 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(3))  > 50 Тогда   // наим.региона не > 50 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(4))  > 50 Тогда   // наим.района не > 50 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(5))  > 50 Тогда   // наим.города не > 50 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(6))  > 50 Тогда   // наим.нас.пункта не > 50 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(7))  > 50 Тогда   // наим.улицы не > 50 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(8))  > 10  Тогда   // номер дома не > 10 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(9))  > 10  Тогда   // номер корпуса не > 10 символов
       Возврат 0;
   ИначеЕсли СтрДлина(АдресСписком.ПолучитьЗначение(10)) > 10  Тогда   // номер квартиры не > 10 символов
       Возврат 0;
       
   Иначе
       Возврат 1;
       
   КонецЕсли;
   
КонецФункции // глАдресСоответствуетТребованиямМНС()
AdBlock убивает бесплатный контент. 1Сергей