Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Разобрать адрес контрагента на составляющие в СКД

Разобрать адрес контрагента на составляющие в СКД
Я
   John83
 
23.04.20 - 12:02
УТ 11.4
Нужно адрес разобрать на город, индекс, улица и т.д.
Как такое можно сделать на СКД?
   VladZ
 
1 - 23.04.20 - 12:25
(0)
1. Получаешь данные
2. Выгружаешь в ТЗ.
3. Корректируешь данные как тебе нужно.
4. Выводишь в СКД.
   Chameleon1980
 
2 - 23.04.20 - 13:39
функцию ом
   John83
 
3 - 23.04.20 - 13:46
(2) функцию чего?
   John83
 
4 - 23.04.20 - 13:47
ааа.. общего модуля
Вот и след. вопрос.
Как разобрать адрес?
Пробую РаботаСАдресами.СведенияОбАдресе, но почему-то не разбирает.
   John83
 
6 - 23.04.20 - 13:50
(5) можешь кодом поделиться?
   John83
 
9 - 23.04.20 - 14:01
(8) то ли лыжи не едут, то ли я очень умный..
ни одного адреса не разобрал, хотя большинство адресов введено правильно, т.е. в карточке контрагента адрес открывается разбитый на составляющие.
Адрес беру отсюда

ВЫБРАТЬ
    ПартнерыКонтактнаяИнформация.Представление КАК Представление,
    ПартнерыКонтактнаяИнформация.Ссылка КАК Ссылка
ИЗ
    Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
   John83
 
11 - 23.04.20 - 14:07
(10) ладно, буду ковырять
спасибо!
   John83
 
12 - 23.04.20 - 17:43
в вычисляемые поля можно только функции общего модуля запихнуть?
Хочу из модуля отчета, но не находит.
   John83
 
13 - 24.04.20 - 17:56
а чего сообщения почистили?
Там же все по теме было.
   John83
 
14 - 24.04.20 - 17:58
что в итоге сделал
В вычисляемые поля добавил 
Расш1_РаботаСАдресами.ПолучитьЧастьАдреса( Значение, "Индекс")

А в расширении сделал такую функцию 

Функция ПолучитьЧастьАдреса(Значение, Часть) Экспорт
    
    Если ЗначениеЗаполнено(Значение) Тогда
        Попытка
            ЧтениеJSON = Новый ЧтениеJSON;
            ЧтениеJSON.УстановитьСтроку(Значение);    
            Данные = ПрочитатьJSON(ЧтениеJSON, Ложь);
            ЧтениеJSON.Закрыть();
            
            Если Данные.addressType = "Административно-территориальный" Тогда
                Если Часть = "Улица" Тогда
                    Улица = ?(СтрДлина(Данные.streettype) > СтрДлина(Данные.street), Данные.streettype, Данные.street);
                    Если НЕ ЗначениеЗаполнено(Улица) Тогда
                        Улица = РаботаСАдресами.СведенияОбАдресе(Значение).Улица;
                    КонецЕсли;
                    Возврат Улица;
                ИначеЕсли Часть = "Индекс" Тогда
                    Индекс  = Данные.ZIPcode;
                    Если НЕ ЗначениеЗаполнено(Индекс) Тогда
                        Индекс = РаботаСАдресами.СведенияОбАдресе(Значение).Индекс;
                    КонецЕсли;
                    Возврат Индекс;
                ИначеЕсли Часть = "Регион" Тогда
                    Регион = Данные.area;
                    Если НЕ ЗначениеЗаполнено(Регион) Тогда
                        Регион = РаботаСАдресами.СведенияОбАдресе(Значение).Регион;
                    КонецЕсли;
                    Возврат Регион;
                ИначеЕсли Часть = "НаселенныйПункт" Тогда
                    НаселенныйПункт = ?(Данные.city <> "", Данные.city, Данные.locality);
                    Если НЕ ЗначениеЗаполнено(НаселенныйПункт) Тогда
                        НаселенныйПункт = РаботаСАдресами.СведенияОбАдресе(Значение).НаселенныйПункт;
                    КонецЕсли;
                    Возврат НаселенныйПункт;
                ИначеЕсли Часть = "Дом" Тогда
                    Дом = Данные.houseNumber;
                    Если НЕ ЗначениеЗаполнено(Дом) Тогда
                        Дом = РаботаСАдресами.СведенияОбАдресе(Значение).Здание.Номер;
                    КонецЕсли;
                    Возврат Дом;
                ИначеЕсли Часть = "Корпус" Тогда
                    Корпус = ?(Данные.buildings.Количество(), Данные.buildings[0].number, "");
                    Если НЕ ЗначениеЗаполнено(Корпус) Тогда
                        Корпуса = РаботаСАдресами.СведенияОбАдресе(Значение).Корпуса;
                        Корпус = ?(Корпуса.Количество(), Корпуса[0].Номер, "");
                    КонецЕсли;
                    Возврат Корпус;
                ИначеЕсли Часть = "Помещение" Тогда
                    Помещение = ?(Данные.apartments.Количество(), Данные.apartments[0].number, "");
                    Если НЕ ЗначениеЗаполнено(Помещение) Тогда
                        Помещения = РаботаСАдресами.СведенияОбАдресе(Значение).Помещения;
                        Помещение = ?(Помещения.Количество(), Помещения[0].Номер, "");
                    КонецЕсли;
                    Возврат Помещение;
                КонецЕсли;
                
            КонецЕсли;
        Исключение        
            Возврат РаботаСАдресами.СведенияОбАдресе(Значение)[Часть];        
        КонецПопытки;
    КонецЕсли;
    
    Возврат "";
    
КонецФункции

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.