Универсальные функции: разложение произвольной строки адреса в структуру

30.12.19

Разработка - Универсальные функции

Процедуры и функции раскладывают произвольную строку адрес в структуру по ключевым словам.

Скачать файлы

Наименование Файл Версия Размер
Универсальные функции разложение произвольной строки адреса в структуру:
.epf 7,25Kb
49
.epf 7,25Kb 49 Скачать

Часто при обмене с другими нетиповыми базами, а также при загрузке документов возникает необходимость приведения адреса в стандартный вид, для этого его необходимо разобрать по составляющим, вот и пришла мне в голову такая идея, которую представляю Вам.

Возможно, кому-нибудь понадобится в работе.

В качестве исходных данных - процедура, выдающая соответствие с ключевыми словами и сокращениями

&НаСервере
Функция ПолучитьСоответствиеДанных()
	МассивИндекс = Новый Массив;
	МассивИндекс.Добавить("Тип_Число");
	
	МассивРайон = Новый Массив;
	МассивРайон.Добавить(" Р-Н");
	МассивРайон.Добавить(" РАЙОН");
	
	МассивОбласть = Новый Массив;
	МассивОбласть.Добавить(" ОБЛ");
	МассивОбласть.Добавить(" РЕСП");
	МассивОбласть.Добавить(" КРАЙ");
	МассивОбласть.Добавить("МО");
 	
	МассивГород = Новый Массив;
	МассивГород.Добавить(" Г");
 	
	МассивПоселение = Новый Массив;
 	МассивПоселение.Добавить(" АУЛ");
 	МассивПоселение.Добавить(" П");
 	МассивПоселение.Добавить(" Х");
	МассивПоселение.Добавить(" С/П");
	МассивПоселение.Добавить("СЕЛА");
	МассивПоселение.Добавить("СЕЛО");
	
	МассивУлица = Новый Массив;
	МассивУлица.Добавить(" УЛ");
  	МассивУлица.Добавить(" МКР");
	МассивУлица.Добавить(" С");
	МассивУлица.Добавить(" ДОР");
	МассивУлица.Добавить(" Ш");
	МассивУлица.Добавить(" ПЕР");
	МассивУлица.Добавить(" ПРОЕЗД");
	МассивУлица.Добавить(" ПР-КТ");
	МассивУлица.Добавить("ТЕРРИТОРИЯ");

	МассивДом = Новый Массив;
	МассивДом.Добавить("ДОМ №");
	//МассивДом.Добавить("СТРОЕНИЕ");
	МассивДом.Добавить("ВЛАДЕНИЕ №");
	
   	МассивКорпус = Новый Массив;
	МассивКорпус.Добавить("КОРПУС");
 	МассивКорпус.Добавить("СТРОЕНИЕ");
 	МассивКорпус.Добавить("ПРОМПЛОЩАДКА №");
 	
	МассивКвартира = Новый Массив;
	МассивКвартира.Добавить("КВ.");
 	МассивКвартира.Добавить("ОФ.");
 	МассивКвартира.Добавить("БОКС");
 	МассивКвартира.Добавить("ПОМЕЩЕНИЕ");
	
 	Результат = Новый Соответствие;
	Результат.Вставить("Индекс",	Новый Структура("Данные,УдалитьИзЗначения",МассивИндекс,	Ложь));
	Результат.Вставить("Район",		Новый Структура("Данные,УдалитьИзЗначения",МассивРайон,		Ложь));
	Результат.Вставить("Область",	Новый Структура("Данные,УдалитьИзЗначения",МассивОбласть,	Ложь));
	Результат.Вставить("Город",		Новый Структура("Данные,УдалитьИзЗначения",МассивГород,		Ложь));
	Результат.Вставить("Поселение",	Новый Структура("Данные,УдалитьИзЗначения",МассивПоселение,	Ложь));
	Результат.Вставить("Улица",		Новый Структура("Данные,УдалитьИзЗначения",МассивУлица,		Ложь));
	Результат.Вставить("Дом",		Новый Структура("Данные,УдалитьИзЗначения",МассивДом,		Истина));
 	Результат.Вставить("Корпус",	Новый Структура("Данные,УдалитьИзЗначения",МассивКорпус,	Истина));
	Результат.Вставить("Квартира",	Новый Структура("Данные,УдалитьИзЗначения",МассивКвартира,	Истина));
	
	
	СтрокаРеквизитов = "Представление";
	Для каждого Реквизит из Результат Цикл
		СтрокаРеквизитов = СтрокаРеквизитов + ","+ СокрЛП(Реквизит.Ключ);
	КонецЦикла;
	
	Возврат Новый Структура("Результат,СтрокаРеквизитов",Результат,СтрокаРеквизитов);
КонецФункции

Причем структура соответствия и задает структуру переменной ответа

Сама процедура, которая все разбирает, весьма проста

&НаКлиенте
Функция _РазложитьАдрес(СтрокаАдреса)
	
	Данные = ПолучитьСоответствиеДанных();
	Результат = Новый Структура(Данные.СтрокаРеквизитов);
	СоставАдреса = Разложить(СокрЛП(СтрокаАдреса),",");
	Результат.Представление = СокрЛП(СтрокаАдреса);
	ДанныеКонтроля = Данные.результат;
	Для каждого Состав из СоставАдреса Цикл	
		Для каждого Контроль из ДанныеКонтроля Цикл
			ЗначениеКлюч = Контроль.Ключ;
			Значение = Контроль.Значение;
			Для каждого Строка из Значение.Данные  Цикл	
				Если Строка = "Тип_Число" ТОгда
					Попытка
						_Число = Число(СокрЛП(Состав));
						Если _Число <> 0 Тогда
							Результат[ЗначениеКлюч] = СокрЛП(Состав);
						КонецЕсли;
					Исключение
					КонецПопытки;
				КонецЕсли;	
				Если стрНайти(ВРЕГ(Состав),ВРЕГ(Строка)) <> 0 ТОгда
					Если Значение.УдалитьИзЗначения ТОгда
						Результат[ЗначениеКлюч] = СокрЛП(стрЗаменить(ВРЕГ(СокрЛП(Состав)),ВРЕГ(Строка),""));
					Иначе
						Результат[ЗначениеКлюч] = СокрЛП(Состав);
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;						
		КонецЦикла;			
	КонецЦикла;
	Возврат Результат;
КонецФункции

 

Вызов для обработки данных происходит


    СтрокаАдрес = "..........сама строка адреса.......";

	Ответ = _РазложитьАдрес(СтрокаАдрес);

Тестировалась на платформе 1С:Предприятие 8.3 (8.3.15), конфигурация УТ 11, БП 3.0, УАТ

P.S. Здесь не используются типовые процедуры и функции, поэтому нет разницы, в какой конфигурации будете это использовать

Надеюсь, кому-то данная информация облегчит жизнь)

разложение произвольной строки адреса

См. также

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4316    atdonya    22    

41

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3883    ke.92@mail.ru    16    

60

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8560    YA_418728146    6    

139

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2020    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16012    131    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7200    quazare    8    

108
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Vlan 36 30.12.19 11:46 Сейчас в теме
У Вас ТЕРРИТОРИЯ с ошибкой.
3. user774630 30.12.19 12:35 Сейчас в теме
(1) +1
МассивУлица.Добавить("ТЕРРИТРОИЯ");
4. vik070777 292 30.12.19 12:39 Сейчас в теме
(3) Найдешь ошибку прими за улыбку
6. vik070777 292 30.12.19 12:42 Сейчас в теме
2. FesenkoA 57 30.12.19 12:07 Сейчас в теме
Ненависти пост:

СтРАНЫЕ менеджеры, я понимаю конечно что у вас нет тех 10 секунд чтобы заполнить все поля правильно, и в дальнейшем работать а не дергать программиста, но адрес "Мех 12/25" это что? Ну вот как понять что это значит " г.Харьков ул.Василя Стуса, дом 12 кв 25", или "С СБ 120" - "г.Сумы, ул. С.Бандеры 120" ну и коронное "Умань базар", ну еперный балет, это при том что у вас А) РЛС на своих клиентов Б) Есть упрощенная форма ввода данных пользователей Ц) База клиентов не ваша личная, вам ее выдали блин, и сами вы ее вести не будете, потому что у вас нет производства, а фирма-то производит! И я уже молчу про то что телефоны пишутся в виде "0987654321" в комментарии "+1 в конце", и да, потому что номер "0987654322", но программа с таким номером не пускает, потому что это дубль, а дубль потому что это не ваш клиент, а менеджера который сейчас на больничном, и ты ж, мать щенка, его заменяешь! Почему бы при общении с клиентом не нажать на кнопку "холд", которую я специально для вас же и сделал, и включить мозг на 10 секунд, чтобы избежать потом проблем вида "ааа, мы потеряли дебеторку" "оооо, мы теперь не видим адреса, мы же в представление всегда писали" "ууууу, как теперь звонить, номер то не подходит" которые отнимут несоизмеримое количество времени

Извините, выговорился
zif74; AlexK_2012; товарищ Ын; sogesti; manlak; AnatolPopov; mrChOP93; +7 Ответить
5. vik070777 292 30.12.19 12:40 Сейчас в теме
(2) Так то да, но в 1С 7.7. есть конфигурации как бы не вносили все равно абра кадабра получается, при переносе данных с этим приходится бороться :)
10. AnatolPopov 165 05.01.20 00:38 Сейчас в теме
(2) Как я вас понимаю... ;)
Я на ваш крик души длинный ответ написал:
https://infostart.ru/public/1176209/
7. AnatolPopov 165 30.12.19 14:40 Сейчас в теме
Если интересно, на каникулах поделюсь, как я делал сравнение адресов, введенных с разной степенью небрежности ;)
Там не было как таковой задачи разложить адрес, а надо было сопоставить всякие разные данные из двух карточек, взятых из разных баз, и решить, относятся ли они к одному и тому же гражданину. В частности, сравнить адреса. В итоге решил просто приводить адреса к некоему формализованному виду и сравнивать то, что получилось.
8. vik070777 292 30.12.19 16:13 Сейчас в теме
(7)Весьма интересно, опубликуйте и скиньте сюда ссылку для ознакомления)
9. AnatolPopov 165 05.01.20 00:32 Сейчас в теме
11. пользователь 27.10.20 11:37
Сообщение было скрыто модератором.
...
12. user1628996 12.01.22 07:58 Сейчас в теме
Добрый день! Возможна ли пакетная обработка? Например, обработать 200 адресов за раз.
13. vik070777 292 12.01.22 12:58 Сейчас в теме
Ответ = _РазложитьАдрес(СтрокаАдрес);

Вы можете данную строку запустить в цикле списка адресов для разложения
Оставьте свое сообщение