![]() |
|
Как в БП3.0 (БСП) получить структру адреса? | ☑ | ||
---|---|---|---|---|
0
acsent
05.12.13
✎
16:52
|
Это просто п.ц какой то.
ХМЛ перегоняется в объекты неведомой структуры. Как получить Город, улицу, дом? |
|||
1
Леха Дум
05.12.13
✎
17:05
|
Посмотри что происходит при открытии общей формы "ВводАдреса"
|
|||
2
acsent
05.12.13
✎
17:23
|
Там полный ПЭ происходит
|
|||
3
acsent
05.12.13
✎
17:24
|
&НаСервереБезКонтекста
Процедура ЗначениеРеквизитовПоКонтактнойИнформации(Контекст, РедактируемаяИнформация) ДанныеАдреса = РедактируемаяИнформация.Состав; // Общие реквизиты Контекст.ПредставлениеАдреса = РедактируемаяИнформация.Представление; Контекст.Комментарий = РедактируемаяИнформация.Комментарий; // Копия комментария для анализа измененности Контекст.КопияКомментария = Контекст.Комментарий; // Страна по наименованию НаименованиеСтраны = СокрЛП(ДанныеАдреса.Страна); Если ПустаяСтрока(НаименованиеСтраны) Тогда Контекст.Страна = Справочники.СтраныМира.ПустаяСсылка(); Иначе СсылкаНаРоссию = Справочники.СтраныМира.Россия; Если ВРЕГ(НаименованиеСтраны)=ВРЕГ(СокрЛП(СсылкаНаРоссию.Наименование)) Тогда Контекст.Страна = СсылкаНаРоссию; Контекст.КодСтраны = СсылкаНаРоссию.Код; Иначе ДанныеСтраны = Справочники.СтраныМира.ДанныеСтраныМира(, НаименованиеСтраны); Если ДанныеСтраны=Неопределено Тогда // Не нашли ни в справочнике, ни в классификаторе Контекст.Страна = Неопределено; Контекст.КодСтраны = Неопределено; Иначе Контекст.Страна = ДанныеСтраны.Ссылка; Контекст.КодСтраны = ДанныеСтраны.Код; КонецЕсли; КонецЕсли; КонецЕсли; ВычисленноеПредставление = КонтактнаяИнформацияСлужебный.СформироватьПредставлениеКонтактнойИнформации( РедактируемаяИнформация, Контекст.ВидКонтактнойИнформации); Если КонтактнаяИнформацияСлужебный.ЭтоРоссийскийАдрес(ДанныеАдреса) Тогда Контекст.РазрешитьВводАдресаВСвободнойФорме = Не ПустаяСтрока(ДанныеАдреса.Состав.Адрес_по_документу); // Дополнительно проверяем случай, когда представление по документу равно вычисленному Если Контекст.РазрешитьВводАдресаВСвободнойФорме Тогда Если ПредставленияАдресаОдинаковы(ВычисленноеПредставление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) И ПредставленияАдресаОдинаковы(РедактируемаяИнформация.Представление, ДанныеАдреса.Состав.Адрес_по_документу, Истина) Тогда Контекст.РазрешитьВводАдресаВСвободнойФорме = Ложь; ДанныеАдреса.Состав.Адрес_по_документу = ""; КонецЕсли; КонецЕсли; Иначе Контекст.ПредставлениеИностранногоАдреса = Строка(ДанныеАдреса.Состав); КонецЕсли; // Индекс просто ставим Контекст.Индекс = Формат(КонтактнаяИнформацияСлужебный.ПочтовыйИндексАдреса(ДанныеАдреса), "ЧГ="); // Синтетический "Населенный пункт" получаем как представление Контекст.НаселенныйПункт = КонтактнаяИнформацияСлужебный.ПредставлениеНаселенногоПункта(ДанныеАдреса); АнализКлассификатора = КонтактнаяИнформацияСлужебный.НаселенныеПунктыПоПредставлению(Контекст.НаселенныйПункт); Если АнализКлассификатора.ДанныеВыбора.Количество()=1 Тогда ВыбранноеЗначение = АнализКлассификатора.ДанныеВыбора[0].Значение.Значение; Контекст.КодКлассификатораНаселенногоПункта = ВыбранноеЗначение.Код; Контекст.НаселенныйПунктНайденТочно = Истина; Контекст.НаселенныйПункт = ВыбранноеЗначение.Представление; Иначе Контекст.КодКлассификатораНаселенногоПункта = 0; Контекст.НаселенныйПунктНайденТочно = Ложь; // Наименование населенного пункта не трогаем КонецЕсли; СформироватьДетальныйНаселенныйПункт(Контекст, ДанныеАдреса); // Синтетическую "Улицу" получаем как представление Контекст.Улица = КонтактнаяИнформацияСлужебный.ПредставлениеУлицы(ДанныеАдреса); АнализКлассификатора = КонтактнаяИнформацияСлужебный.УлицыПоПредставлению(Контекст.КодКлассификатораНаселенногоПункта, Контекст.Улица); Если АнализКлассификатора.ДанныеВыбора.Количество()=1 Тогда ВыбранноеЗначение = АнализКлассификатора.ДанныеВыбора[0].Значение.Значение; Контекст.КодКлассификатораУлицы = ВыбранноеЗначение.Код; Контекст.УлицаНайденаТочно = Истина; Контекст.Улица = ВыбранноеЗначение.Представление; Иначе Контекст.КодКлассификатораУлицы = 0; Контекст.УлицаНайденаТочно = Ложь; // Наименование улицы не трогаем КонецЕсли; // Дом, строение, помещение ЗданияИПомещения = КонтактнаяИнформацияСлужебный.ЗданияИПомещенияАдреса(ДанныеАдреса); // Первые два здания выделяем отдельно, остальное в списке ТаблицаДанных = ЗданияИПомещения.Здания; // Вид = 1 - признак дома, владения. Вид = 2, доп строение СтрокаДома = ТаблицаДанных.Найти(1, "Вид"); Если СтрокаДома<>Неопределено Тогда Контекст.ТипДома = СтрокаДома.Тип; Контекст.Дом = СтрокаДома.Значение; Контекст.ДомНайденТочно = Истина; ТаблицаДанных.Удалить(СтрокаДома); Иначе Контекст.ДомНайденТочно = Ложь; КонецЕсли; СтрокаДома = ТаблицаДанных.Найти(2, "Вид"); Если СтрокаДома<>Неопределено Тогда Контекст.ТипСтроения = СтрокаДома.Тип; Контекст.Строение = СтрокаДома.Значение; ТаблицаДанных.Удалить(СтрокаДома); КонецЕсли; НомерСтроки = ТаблицаДанных.Количество(); Пока НомерСтроки>0 Цикл НомерСтроки = НомерСтроки - 1; ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеЗдания.Вставить(0), ТаблицаДанных[НомерСтроки]); КонецЦикла; // Первое помещение указываем отдельно, остальные в списке ТаблицаДанных = ЗданияИПомещения.Помещения; НомерСтроки = ТаблицаДанных.Количество(); Если НомерСтроки>0 Тогда Контекст.ТипПомещения = ТаблицаДанных[0].Тип; Контекст.Помещение = ТаблицаДанных[0].Значение; КонецЕсли; Пока НомерСтроки>1 Цикл НомерСтроки = НомерСтроки - 1; ЗаполнитьЗначенияСвойств(Контекст.ДополнительныеПомещения.Вставить(0), ТаблицаДанных[НомерСтроки]); КонецЦикла; // Если переданное представление отличается от вычисленного, то адрес изменен Если Не Контекст.РазрешитьВводАдресаВСвободнойФорме И Не ПредставленияАдресаОдинаковы(Контекст.ПредставлениеАдреса, ВычисленноеПредставление) Тогда Контекст.Модифицированность = Истина; КонецЕсли; КонецПроцедуры |
|||
4
Жан Пердежон
05.12.13
✎
17:25
|
(2) для БСП это норма
|
|||
5
acsent
05.12.13
✎
17:32
|
Может кто знает, как нормальную структуру в стиле старых приложений получить
|
|||
6
zak555
05.12.13
✎
17:35
|
ТЧ КонтактнаяИнформация
не ? |
|||
7
samozvanec
05.12.13
✎
17:39
|
(3) ахренеть. индусы блин. а в ДанныеАдреса нет что ль?
|
|||
8
acsent
05.12.13
✎
17:54
|
(7) данныеАдреса - это хитровы.ный XDTO объект
|
|||
9
acsent
05.12.13
✎
17:55
|
(6) да, нужно получить значения полей
|
|||
10
Wobland
05.12.13
✎
17:58
|
(8) я щас глупость скажу, но схема из оттуда не вынимается никак?
|
|||
11
acsent
05.12.13
✎
18:03
|
Схема и так есть
http://img440.imageshack.us/i/ik3m.png/ |
|||
12
Записьдампа
05.12.13
✎
22:18
|
Эхъэхъэхъ...
1) Громко выматерившись, записаться на курсы http://www.1c.ru/rus/partners/training/uc3/demand1.jsp?id=561, почувствовать свою крутизну. 2) Тихо выматерившись, скачать приказ ФНС России от 31 августа 2011 г. № ММВ-7-1/525@ "Об утверждении Единых требований к описанию адресов" (http://fias.nalog.ru/Public/Docs/prik525.doc), курить приложения, пакет XDTO и код 1С до просветления. 3) Если предыдущее не помогает, то вызвать метод УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |