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

ВЫБРАТЬ
    ПартнерыКонтактнаяИнформация.Представление КАК Представление,
    ПартнерыКонтактнаяИнформация.Ссылка КАК Ссылка
ИЗ
    Справочник.Партнеры.КонтактнаяИнформация КАК ПартнерыКонтактнаяИнформация
11 John83
 
23.04.20
14:07
(10) ладно, буду ковырять
спасибо!
12 John83
 
23.04.20
17:43
в вычисляемые поля можно только функции общего модуля запихнуть?
Хочу из модуля отчета, но не находит.
13 John83
 
24.04.20
17:56
а чего сообщения почистили?
Там же все по теме было.
14 John83
 
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].Номер, "");
                    КонецЕсли;
                    Возврат Помещение;
                КонецЕсли;
                
            КонецЕсли;
        Исключение        
            Возврат РаботаСАдресами.СведенияОбАдресе(Значение)[Часть];        
        КонецПопытки;
    КонецЕсли;
    
    Возврат "";
    
КонецФункции
AdBlock убивает бесплатный контент. 1Сергей