1С: работа с регистром «АдресныйОбъект»
Намедни прилетела интересная задача: создать визуальный построитель адреса доставки счёта клиента согласно данным ФИАС в древней не обновляемой конфигурации 1С. Первоначально подумал покопать в сторону сервиса https://fias-public-service.nalog.ru/api/spas/v2.0/swagger/index.html, написал заявку на генерацию ключа API для доступа, отправил её на указанную электронную почту…и тишина. Тащить самому адреса ФИАС и файлов и создавать для этого обвязку в конфигурараторе — трудоёмко. Но неожиданно возникла идея — а есть же обновляемая регулярно конфигурация 1С «Бухгалтерия», где этот справочник вполне используется и регулярно обновляется. Следовательно мы можем просто создать..ну например WEB сервис, при помощи которого будем тянуть данные для построения адреса из Бухгалтерии. Можно данные тянуть из регистров АдресныйОбъект, ДополнительныеАдресныеСведения, ИерархияАдресов и т.д, а можно покопать БСП, найти все нужные функции. За сим и оформил сервис:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | &НаСервере Функция ПолучитьПрокси()	 	Определение = Новый WSОпределения( 							Константы.СК_БУХURLВебСервиса.Получить(), 							Константы.СК_БУХИмяПользователя.Получить(), 							Константы.СК_БУХПароль.Получить() 							//,ИнтернетПрокси 						);     Прокси = Новый WSПрокси( 						Определение, 						Константы.СК_БУХURIПространстваИмен.Получить(), 						"sk_SOAP_Services", 						"sk_SOAP_ServicesSoap" 						); 	Прокси.Пользователь = Константы.СК_БУХИмяПользователя.Получить(); 	Прокси.Пароль = Константы.СК_БУХПароль.Получить(); 	Возврат Прокси; КонецФункции Функция sk_gr_fias_exchange(request, params)   	params=JSONВСтруктуру(params); 	МассивДляВозврата=Новый Массив(); 	if (request="GetAdresses") тогда        		//Parent,Level,TypeAddress,Counts,Poz,FindStr 		ДополнительныеПараметры=Новый Структура("КоличествоЗаписей,Позиция,СтрокаПоиска",params.Counts,params.Poz,params.FindStr); 		ТЗ=АдресныйКлассификаторСлужебный.АдресаДляИнтерактивногоВыбора(Новый УникальныйИдентификатор(params.Parent), params.Level, params.TypeAddress, ДополнительныеПараметры);		 		МассивДляВозврата=Новый Массив(); 		для каждого стр из ТЗ.Данные цикл 			инф=Новый Структура("Идентификатор,Представление",Строка(стр.Идентификатор),Строка(стр.Представление)); 			МассивДляВозврата.Добавить(инф);	 		конеццикла;					 	конецесли;	 	if (request="GetHomes") тогда       	 		ТЗ=АдресныйКлассификаторСлужебный.СписокДомов(Новый УникальныйИдентификатор(params.Parent),params.FindStr,params.Counts);		 		МассивДляВозврата=Новый Массив(); 		для каждого стр из ТЗ цикл 			инф=Новый Структура("Идентификатор,Представление,Индекс",Строка(стр.Идентификатор),Строка(стр.Представление),Строка(стр.Значение.Индекс)); 			МассивДляВозврата.Добавить(инф);	 		конеццикла;						 	конецесли;	 	Возврат СтруктураВСтрокуJSON(МассивДляВозврата); КонецФункции | 
На целевой конфигурации, остаётся только дергать вызовы:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | &НаСервере                                                   Функция ПолучитьСписокАдресов(Родитель,Уровень) // Уровень: 1- регион,2 - район, 3 - муниципальный район, 4-поселение, 5-город, 6 -нс, 7 - территория, 8 - улица 		Прокси=ПолучитьПрокси();		 			params=Новый Структура("Parent,Level,TypeAddress,Counts,Poz,FindStr"); 			params.Parent=Строка(Родитель); 			params.Level=Уровень; 			params.TypeAddress="Административно-территориальный"; 			params.Counts=500; 			params.FindStr=""; 			Результат=Прокси.sk_gr_fias_exchange("GetAdresses",СтруктураВСтрокуJSON(params));  			//сообщить(Результат); 		возврат JSONВСтруктуру(Результат); КонецФункции &НаСервере                                                   Функция ПолучитьСписокДомов(Родитель) 		Прокси=ПолучитьПрокси();		 			params=Новый Структура("Parent,Level,TypeAddress,Counts,Poz,FindStr"); 			params.Parent=Строка(Родитель); 			params.Counts=500; 			params.FindStr=""; 			Результат=Прокси.sk_gr_fias_exchange("GetHomes",СтруктураВСтрокуJSON(params));  			//сообщить(Результат); 		возврат JSONВСтруктуру(Результат);	 КонецФункции | 
И визуализировать всё подобным образом:
