С 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 **** ФС.УдалитьФайл(ИмяФ); КонецПроцедуры