Загрузка справочника БИК банков с сайта Национального банка Республики Беларусь http://www.nbrb.by для конфигураций 1С 7.7 используя AddIn.V7HttpReader с разбором файла ответа в формате JSON

Обработки - Обработка справочников

Загрузка файла из интернет программно 1С 7.7 HTTPСоединение JSON Классификатор банков РБ

1
Обработка для загрузки справочника БИК банков с сайта Национального банка Республики Беларусь. Пример скачивания файла из интернет из 1С 7.7, пример простого разбора файла JSON из 1С 7.7.

С 4 июля 2017г. в Республике Беларусь осуществлен переход на международный формат номера банковского счета IBAN (International Bank Account Number) и новые банковские идентификационные коды банков BIC (Bank Identifier Code). На сайте Национального банка Республики Беларусь представлен перечень действующих БИК банков, с описанием АPI по справочнику БИК можно ознакомиться по ссылке: http://www.nbrb.by/apihelp/bic. Файл-ответ с сайта содержит файл в формате JSON.

Обработка получает файл-ответ в формате JSON c сайта (используется внешняя компонента v7plus.dll), разбирает файл JSON и записывает новые банки в справочник банков конфигурации 1С 7.7.

Обработка тестировалось на версиях конфигураций 1С 7.7 Юкола. Бухгалтерский учет. Типовая настройка для РБ; Мисофт. Бухгалтерский учет, редакция 4,5.

//Вспомогательная функция
Функция ПреобразоватьСтрокуИзУТФ8(Стр) 
	Длина = СтрДлина(Стр); 
	Итог = ""; 
	Для Н=1 По Длина Цикл 
		Знак = Сред(Стр, Н, 1); 
		Код = КодСимв(Знак); 
		Если Код < 128 Тогда 
			Итог = Итог + Знак; 
		ИначеЕсли (Код >= 128) И (Код < 192) Тогда 
		Иначе 
			Н = Н + 1; 
			Знак2 = Сред(Стр,Н,1); 
			Код2 = КодСимв(Знак2); 
			Если Код = 208 Тогда 
				Итог=Итог + Симв(КодСимв("А")  +Код2 - 144); 
			ИначеЕсли Код = 209 Тогда 
				Итог=Итог + Симв(КодСимв("р") + Код2 - 128); 
			КонецЕсли; 
		КонецЕсли; 
	КонецЦикла; 
	Возврат Итог; 
КонецФункции 

Процедура Сформировать()
	///**** 1 **** Подключить внешнюю компоненту
	Если ЗагрузитьВнешнююКомпоненту("v7plus.dll") <> 1 Тогда
        Сообщить("Компонента v7plus.dll не найдена!");
        Возврат;
    КонецЕсли;
    ///**** 1 ****
	
	///**** 2 **** Скачать файл из интернета средствами 1С 7.7
    HTTPСоединение=СоздатьОбъект("AddIn.V7HttpReader");
    URL ="http://www.nbrb.by/API/BIC"; 
	//Описание API: http://www.nbrb.by/apihelp/bic
    ИмяФ = КаталогВременныхФайлов() + "bic.txt"; 
    Попытка
        HTTPСоединение.ПолучитьКакФайл(URL, ИмяФ);
    Исключение
        Ответ = HTTPСоединение.СтрокаСостоянияОтвета;
        Сообщить(Ответ);
        Возврат;
    КонецПопытки;
	///**** 2 ****
	 
	///**** 3 **** Разобрать файл JSON программно из 1С 7.7, заполнить ТаблицуЗначений
	//Образец описания банка в формате JSON
	//{"typ":"Банк","CDBank":"ABLTBY22","CDHeadBank":"ABLTBY22","NrBank":"898","BICStatus":"0",
	//"NmBankShort":"ЗАО 'АБСОЛЮТБАНК'","AdrBank":"Г.МИНСК","CdControl":null,"DtControl":null,"CdBankSuccessor":null} 
	ТЗ = СоздатьОбъект("ТаблицаЗначений");
	ТЗ.НоваяКолонка("КодБанка"); 
	ТЗ.НоваяКолонка("НомерБанка");
	ТЗ.НоваяКолонка("НазваниеБанка");
	ТЗ.НоваяКолонка("АдресБанка");
	Файл = СоздатьОбъект("Текст");
	Файл.Открыть(ИмяФ);
	Файл.КодоваяСтраница(1);
	Для инд = 1 По Файл.КоличествоСтрок() Цикл
		Стр = Файл.ПолучитьСтроку(инд); 
		Стр = ПреобразоватьСтрокуИзУТФ8(Стр);
		НачалоБанка = Найти(Стр, "{");
		Пока НачалоБанка > 0 Цикл 
			КонецБанка = Найти(Стр, "}");
			СтрокаБанка = Сред(Стр, НачалоБанка, КонецБанка - НачалоБанка + 1);
			Стр = СтрЗаменить(Стр, СтрокаБанка, "");
			НачалоБанка = Найти(Стр, "{");
			
			ТЗ.НоваяСтрока();
			
			Нач = Найти(СтрокаБанка, "CDBank");
			Кон = Найти(СтрокаБанка, "CDHeadBank");
			ТЗ.КодБанка = Сред(СтрокаБанка, Нач + 9, Кон - Нач - 12);  
			
			Нач = Найти(СтрокаБанка, "NrBank");
			Кон = Найти(СтрокаБанка, "BICStatus");
			ТЗ.НомерБанка = Сред(СтрокаБанка, Нач + 9, Кон - Нач - 12);
			
			Нач = Найти(СтрокаБанка, "NmBankShort");
			Кон = Найти(СтрокаБанка, "AdrBank");
			ТЗ.НазваниеБанка = Сред(СтрокаБанка, Нач + 14, Кон - Нач - 17);
			
			Нач = Найти(СтрокаБанка, "AdrBank");
			Кон = Найти(СтрокаБанка, "CdControl");
			ТЗ.АдресБанка = Сред(СтрокаБанка, Нач + 10, Кон - Нач - 13);
			
		КонецЦикла;
	КонецЦикла;
	///**** 3 ****
	
	///**** 4 **** Записать новые банки Республики Беларусь в справочник банков 1С 7.7 (МИСОФТ/ЮКОЛА)
	Банки = СоздатьОбъект("Справочник.Банки");
	ТЗ.ВыбратьСтроки();
	Пока ТЗ.ПолучитьСтроку() = 1 Цикл
		Если Банки.НайтиПоКоду(ТЗ.КодБанка) <> 0 Тогда
			Продолжить; //Банк уже существует в справочнике
		КонецЕсли;                                         
		Банки.Новый();
		Банки.Код = ТЗ.КодБанка;
		Банки.Наименование = ТЗ.НазваниеБанка;
		Банки.Адрес = ТЗ.АдресБанка;
		Банки.Записать();
		Сообщить("Загружен банк " + Тз.НазваниеБанка + " " + ТЗ.КодБанка);
	КонецЦикла;
	///**** 4 ****

	ФС.УдалитьФайл(ИмяФ);

КонецПроцедуры
1

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

Наименование Файл Версия Размер
Загрузка справочника БИК банков с сайта Нацонального банка Республики Беларусь http://www.nbrb.by для конфигураций 1С 7.7 используя AddIn.V7HttpReader с разбором файла ответа в формате JSON:
.ert 42,50Kb
07.04.18
1
.ert 42,50Kb 1 Скачать

См. также

Комментарии
Избранное Подписка Сортировка: Древо
1. Dnki 03.09.18 00:57 Сейчас в теме
Благодарю за идею - не знал про API сайта.
Скачиваю в знак благодарности.
Как замечание могу только сказать: из всего списка банков есть несколько со статусом "Закрыт", "Ликвидирован". Вы их обрабатываете как нормальные банки.
2. Dnki 03.09.18 01:11 Сейчас в теме
А здорово, когда есть в распоряжении инструменты! Набросал аналог на 8-ке:
Функция Загрузить()
	
	//	Запрос
	Соединение = Новый HTTPСоединение("www.nbrb.by");
	Попытка
	АшТТП_Ответ		= Соединение.Получить(Новый HTTPЗапрос("/API/BIC"));
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат Ложь;
	КонецПопытки;
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(АшТТП_Ответ.ПолучитьТелоКакСтроку());
	Т_Массив = ПрочитатьJSON(ЧтениеJSON, Ложь);
	
	//	Разбор
	КолНов = 0;
	КолУдл = 0;
	СпрМен = Справочники.Банки;
	Для каждого ТекЭлемент Из Т_Массив Цикл
		Т_Статус= ТекЭлемент.CdControl;
		Т_Удл	= (СтрНайти("ЛИКВ,ЗАКР", Т_Статус) > 0);
		Т_БИК	= ТекЭлемент.CdBank;
		
		//	Поиск
		СпрСылка = СпрМен.НайтиПоКоду(Т_БИК);
		
		//	Есть
		Если ЗначениеЗаполнено(СпрСылка) Тогда
			Если Т_Удл И НЕ СпрСылка.ПометкаУдаления Тогда
				СпрОбъект = СпрСылка.ПолучитьОбъект();
				СпрОбъект.УстановитьПометкуУдаления(Истина);
				Увеличить(КолУдл);
			КонецЕсли;

		//	Нету
		Иначе
			Если НЕ Т_Удл Тогда
				СпрОбъект = СпрМен.СоздатьЭлемент();
				СпрОбъект.Код			= Т_БИК;
				СпрОбъект.Наименование	= ТекЭлемент.NmBankShort;
				СпрОбъект.Адрес			= ТекЭлемент.AdrBank;
				Попытка
				СпрОбъект.Записать();
				Исключение
					Сообщить(ОписаниеОшибки());
				КонецПопытки;
				Увеличить(КолНов);
			КонецЕсли;
		КонецЕсли;	// ЗначениеЗаполнено(СпрСылка)
	КонецЦикла;	// Т_Массив

	Предупреждение("Новых: "+ КолНов+ Символы.ПС+ "Удалено: "+ КолУдл, 10);
	Возврат Истина;
КонецФункции	// Загрузить
Показать
Оставьте свое сообщение