Имя: Пароль:
1C
1С v8
Разобрать адрес в Кладр
0 YF
 
07.10.13
16:08
Подскажите, плиз,  у кого есть функция разбора адреса из строки в Кладр?

Вот, например представление адреса из регистра контактной информации:

163017, Архангельская обл, Архангельск г, КЛДК ул, дом № 5, кв.6

тут не 9 запятых, поэтому нужно проверять каждый элемент на то чем же он является (т.е. какое поле в регистре контактной информации).

Если кому не жалко готовое - киньте
1 eklmn
 
гуру
07.10.13
16:17
я бы тоже от халявы не отказался
2 YF
 
07.10.13
16:50
(1) Ну если есть уже.

Я свое обычно отдаю
3 Maxus43
 
07.10.13
16:57
в типовых же есть?
4 Maxus43
 
07.10.13
16:59
// Функция выполняет "преобразование" строкового представления адреса в структуру
Функция ПолучитьСтруктуруАдресаИзСтроки(Знач СтроковыйАдрес) Экспорт
5 IVT_2009
 
07.10.13
17:00
функция уп(с)
//**
//*аналог команды сокрЛп(Строка(с))
    если с <> неопределено тогда
        возврат сокрЛп(Строка(с));
    иначе
        возврат с;
    конецЕсли;    
конецФункции    //функция уп(с)


функция получитьДанныеФирмы(фирма)
запрос = новый запрос;
запрос.Текст = "ВЫБРАТЬ
               |    Контрагенты.Наименование,
               |    КонтактнаяИнформация.Тип.Ссылка,
               |    КонтактнаяИнформация.Вид.Ссылка,
               |    КонтактнаяИнформация.Представление КАК адрес,
               |    КонтактнаяИнформация.Поле1,
               |    КонтактнаяИнформация.Поле2,
               |    КонтактнаяИнформация.Поле3,
               |    КонтактнаяИнформация.Поле4,
               |    КонтактнаяИнформация.Поле5,
               |    КонтактнаяИнформация.Поле6,
               |    КонтактнаяИнформация.Поле7,
               |    КонтактнаяИнформация.Поле8,
               |    КонтактнаяИнформация.Поле9,
               |    КонтактнаяИнформация.Поле10
               |ИЗ
               |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
               |        ПО КонтактнаяИнформация.Объект = Контрагенты.Ссылка
               |ГДЕ
               |    КонтактнаяИнформация.Вид.Наименование = ""Фактический адрес""
               |    И Контрагенты.Ссылка = &выбФирма";
  запрос.Параметры.Вставить("выбФирма",фирма);
  рез = запрос.Выполнить().Выгрузить();
  если рез.Количество()=0 тогда
      возврат неопределено;
      иначе
      возврат рез[0];
  конецЕсли;
  
конецФункции  //функция получитьДанныеФирмы(фирма)


функция вернутьАдресИМНС(клиент)
//*****
//**вернет адрес имнс для @клиент = спр.контрагенты
//*****
  хх = получитьДанныеФирмы(клиент);
  //+" индекс:"+хх.поле1
   //  +" область:"+хх.поле2+" район:"+хх.поле3
   //  +" город:"+хх.поле4+" нас пункт:"+хх.поле5
   //  +" улица:"+хх.поле6+" дом:"+хх.поле7);
   //643,150043,76,,Ярославль г,,Радищева ул,5а,,В
  
возврат "643"    +","+уп(хх.поле1)
                +","+лев(уп(клиент.кпп),2)
                +","+уп(хх.поле3)
                +","+уп(хх.поле4)
                +","+уп(хх.поле5)
                +","+уп(хх.поле6)
                +","+уп(хх.поле7)
                +",,";

конецФункции //функция вернутьАдресИМНС()
6 Холодильник
 
07.10.13
17:03
писал обработку по проверке адресов на соответствие КЛАДР, если интересно, скину
7 Бледно Золотистый
 
07.10.13
17:07
в УПП модуль есть УправлениеКонтактнойИнформацией там раздел СТАНДАРТНЫЕ ОБРАБОТЧИКИ ПРИ РАБОТЕ С АДРЕСНЫМ КЛАССИФИКАТОРОМ
8 IVT_2009
 
07.10.13
17:08
(7) я долго в типовой бухгалтерии пытался что то из него добыть, оказалось проще свой велосипед построить
9 Serg_1960
 
07.10.13
17:11
В УПП, в ЗУПе... везде, где есть КЛАДР :)
10 mikecool
 
07.10.13
17:14
(0) это представление, а адрес обычно собирается по данным полей в 9-запятную строку
11 Холодильник
 
07.10.13
17:25
// Функция ищет адрес в справочнике Адресный классификатор, и если
// не находит указанный регион, район, город, населенный пункт, то возвращает
// Отказ = Истина, в текстеошибки возвращается текст ошибки.
// Если не найдена только улица, то возвращается только ТекстОшибки,
// значение переменной отказ не изменяется.
Функция ПроверитьАдресПоКЛАДР(АдресСписком) Экспорт
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("парамРегион", АдресСписком.Регион);
    Запрос.УстановитьПараметр("парамРайон", АдресСписком.Район);
    Запрос.УстановитьПараметр("парамГород", АдресСписком.Город);
    Запрос.УстановитьПараметр("парамНаселенныйПункт", АдресСписком.НаселенныйПункт);
    Запрос.УстановитьПараметр("парамУлица", АдресСписком.Улица);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ВЫБОР
    |        КОГДА НаселенныйПункт.КодРайонаВКоде = 0
    |                И &ПарамРайон <> """"
    |            ТОГДА "" район""
    |        КОГДА НаселенныйПункт.КодГородаВКоде = 0
    |                И &ПарамГород <> """"
    |            ТОГДА "" город""
    |        КОГДА НаселенныйПункт.КодНаселенногоПунктаВКоде = 0
    |                И &ПарамНаселенныйПункт <> """"
    |            ТОГДА "" населённый пункт""
    |        КОГДА ЕСТЬNULL(АдресныйКлассификатор.КодУлицыВКоде, 0) = 0
    |                И &парамУлица <> """"
    |            ТОГДА ""а улица""
    |        ИНАЧЕ """"
    |    КОНЕЦ КАК СообщениеОбОшибке
    |ИЗ
    |    (ВЫБРАТЬ
    |        Город.КодРегионаВКоде КАК КодРегионаВКоде,
    |        Город.КодРайонаВКоде КАК КодРайонаВКоде,
    |        Город.КодГородаВКоде КАК КодГородаВКоде,
    |        ЕСТЬNULL(АдресныйКлассификатор.КодНаселенногоПунктаВКоде, 0) КАК КодНаселенногоПунктаВКоде
    |    ИЗ
    |        (ВЫБРАТЬ
    |            Район.КодРегионаВКоде КАК КодРегионаВКоде,
    |            Район.КодРайонаВКоде КАК КодРайонаВКоде,
    |            ЕСТЬNULL(АДресныйКлассификатор.КодГородаВКоде, 0) КАК КодГородаВКоде
    |        ИЗ
    |            (ВЫБРАТЬ
    |                Регион.КодРегионаВКоде КАК КодРегионаВКоде,
    |                ЕСТЬNULL(АдресныйКлассификатор.КодРайонаВКоде, 0) КАК КодРайонаВКоде
    |            ИЗ
    |                (ВЫБРАТЬ
    |                    АдресныйКлассификатор.КодРегионаВКоде КАК КодРегионаВКоде
    |                ИЗ
    |                    РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор
    |                ГДЕ
    |                    АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение = &парамРегион
    |                    И АдресныйКлассификатор.ТипАдресногоЭлемента = 1) КАК Регион
    |                    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор
    |                    ПО (АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение = &парамРайон)
    |                        И АдресныйКлассификатор.КодРегионаВКоде = Регион.КодРегионаВКоде
    |                        И (АдресныйКлассификатор.ТипАдресногоЭлемента = 2)) КАК Район
    |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныйКлассификатор КАК АДресныйКлассификатор
    |                ПО (АДресныйКлассификатор.Наименование + "" "" + АДресныйКлассификатор.Сокращение = &парамГород)
    |                    И АДресныйКлассификатор.КодРегионаВКоде = Район.КодРегионаВКоде
    |                    И АДресныйКлассификатор.КодРайонаВКоде = Район.КодРайонаВКоде
    |                    И (АДресныйКлассификатор.ТипАдресногоЭлемента = 3)) КАК Город
    |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор
    |            ПО (АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение = &парамНаселенныйПункт)
    |                И АдресныйКлассификатор.КодРегионаВКоде = Город.КодРегионаВКоде
    |                И АдресныйКлассификатор.КодРайонаВКоде = Город.КодРайонаВКоде
    |                И АдресныйКлассификатор.КодГородаВКоде = Город.КодГородаВКоде
    |                И (АдресныйКлассификатор.ТипАдресногоЭлемента = 4)) КАК НаселенныйПункт
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор
    |        ПО (АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение = &парамУлица)
    |            И АдресныйКлассификатор.КодРегионаВКоде = НаселенныйПункт.КодРегионаВКоде
    |            И АдресныйКлассификатор.КодРайонаВКоде = НаселенныйПункт.КодРайонаВКоде
    |            И АдресныйКлассификатор.КодГородаВКоде = НаселенныйПункт.КодГородаВКоде
    |            И АдресныйКлассификатор.КодНаселенногоПунктаВКоде = НаселенныйПункт.КодНаселенногоПунктаВКоде
    |            И (АдресныйКлассификатор.ТипАдресногоЭлемента = 5)";
    ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
    ТекстОшибки = "";
    Если ВыборкаЗапроса.Следующий() Тогда
        ТекстОшибки = ВыборкаЗапроса.СообщениеОбОшибке;
    Иначе
        ТекстОшибки = " регион";
    КонецЕсли;
    
    Возврат ТекстОшибки
КонецФункции // ПроверитьАдресПоКЛАДР()
12 Холодильник
 
07.10.13
17:25
+ хотя это не то
13 YF
 
07.10.13
17:56
(6) Кидай, интересно
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.