При работе в конфигурации Альфа-Авто: Автосалон+Автосервис+Автозапчасти (редакция 5) при попытке обновить классификатор банков через команду Загрузить с сайта агентства РосБизнесКонсалтинг пользователи и администраторы часто сталкиваются с ошибкой «Неудачная попытка соединения». При этом прямой доступ в интернет на сервере или рабочей станции присутствует, а браузер успешно открывает ресурсы и скачивает файлы.
Разберем детально, почему возникает данная ошибка, проанализируем исходный программный код типовой обработки и рассмотрим практические способы решения проблемы.
Для понимания причин сбоя обратимся к процедурам и функциям модуля формы загрузки классификатора. Посмотрим на код функции получения файлов с веб-сервера:
Функция ПолучитьФайлРБК()
СерверИсточник = "cbrates.rbc.ru/";
НТТР = СоздатьСоединение(СерверИсточник);
Адрес = "bnk/bnk.exe";
ВремКаталог = Лев(КаталогВременныхФайлов(), 2) + "\_tempBik";
СоздатьКаталог(ВремКаталог);
Попытка УдалитьФайлы(ВремКаталог,"RbkZip.bat"); Исключение КонецПопытки;
Попытка УдалитьФайлы(ВремКаталог,мИмяФайлаЗип); Исключение КонецПопытки;
Попытка УдалитьФайлы(ВремКаталог,мИмяФайлаБИК); Исключение КонецПопытки;
Попытка УдалитьФайлы(ВремКаталог,мИмяФайлаРег); Исключение КонецПопытки;
Попытка
НТТР.Получить(Адрес, ВремКаталог + "\" + мИмяФайлаЗип);
Исключение
Сообщить("Неудачная попытка соединения.");
Возврат Ложь;
КонецПопытки;
Состояние("Выполняется обработка загрузки");
ИмяБатФайла = "" + ВремКаталог + "\RbkZip.bat";
БатФайл = Новый ТекстовыйДокумент();
БатФайл.Очистить();
БатФайл.ДобавитьСтроку("""" + ВремКаталог + "\" + мИмяФайлаЗип + """");
БатФайл.Записать(ИмяБатФайла,КодировкаТекста.OEM);
КомандаСистемы(""""+ ИмяБатФайла + """",ВремКаталог);
ФайлБИК = Новый Файл(ВремКаталог + "\" + мИмяФайлаБИК);
ФайлРЕГ = Новый Файл(ВремКаталог + "\" + мИмяФайлаРег);
НачальнаяДата = ТекущаяДата();
Пока (НЕ (ФайлБИК.Существует() И ФайлРЕГ.Существует())) И ((ТекущаяДата() - НачальнаяДата) < 10) Цикл
КонецЦикла;
Если (ФайлБИК.Существует() И ФайлРЕГ.Существует()) Тогда
ЗагрузитьКлассификаторСРБК(ВремКаталог);
Иначе
Возврат Ложь;
КонецЕсли;
// Очистка временных файлов
Попытка УдалитьФайлы(ВремКаталог,"RbkZip.bat"); Исключение КонецПопытки;
Попытка УдалитьФайлы(ВремКаталог,мИмяФайлаЗип); Исключение КонецПопытки;
Попытка УдалитьФайлы(ВремКаталог,мИмяФайлаБИК); Исключение КонецПопытки;
Попытка УдалитьФайлы(ВремКаталог,мИмяФайлаРег); Исключение КонецПопытки;
Возврат Истина;
КонецФункции
Функция создания подключения выглядит следующим образом:
Функция СоздатьСоединение(СерверИсточник)
Перем HTTP;
Перем ПроксиСервер;
Если ЗначениеЗаполнено(АдресПроксиСервера) Тогда
ПроксиСервер = Новый ИнтернетПрокси();
ПроксиСервер.Установить("http", СокрЛП(АдресПроксиСервера), ?(обЗначениеНеЗаполнено(ПортПроксиСервера), 80, ПортПроксиСервера));
ПроксиСервер.Пользователь = ИмяПользователя;
ПроксиСервер.Пароль = ПарольПользователя;
HTTP = Новый HTTPСоединение(СерверИсточник,,,, ПроксиСервер);
Иначе
HTTP = Новый HTTPСоединение(СерверИсточник);
КонецЕсли;
Возврат HTTP;
КонецФункции
Проанализируем приведенный программный код и выделим основные технические факторы, приводящие к сбою:
HTTPСоединение передается строка "cbrates.rbc.ru/". В платформе 1С:Предприятие первый параметр объекта ожидает исключительно хост (доменное имя или IP-адрес) без косой черты / на конце. Наличие завершающего слэша нарушает корректную резолюцию DNS-имени платформой и приводит к генерации исключения при вызове метода НТТР.Получить().bnk.exe, генерирует файл RbkZip.bat и запускает его системным вызовом КомандаСистемы. В современных версиях Windows и на терминальных серверах выполнение сторонних .exe и .bat скриптов из временных каталогов блокируется политиками безопасности (AppLocker, SRP), контролем учетных записей (UAC) или антивирусным ПО.HTTPСоединение без явного указания порта 443 и параметра Новый ЗащищенноеСоединениеOpenSSL() не сможет обработать редирект.Если конфигурация находится на стандартной поддержке и изменение кода нежелательно, воспользуемся штатным альтернативным вариантом загрузки без прямого обращения 1С к сети.
Разберем последовательность действий по шагам:
http://cbrates.rbc.ru/bnk/bnk.exe.bnk.exe на локальный диск сервера или рабочего компьютера.bnk.exe представляет собой самораспаковывающийся ZIP-архив, его можно открыть любым архиватором (7-Zip, WinRAR) или запустить вручную. В результате распаковки появятся файлы классификатора: bnkseek.txt, bnkdel.txt и reg.txt.Если база данных снята с поддержки или в конфигурации используются расширения, исправим программный код для восстановления автоматической загрузки.
Рассмотрим, какие изменения необходимо внести в функцию ПолучитьФайлРБК():
// Было:
// СерверИсточник = "cbrates.rbc.ru/";
// Стало:
СерверИсточник = "cbrates.rbc.ru";
HTTPСоединение с поддержкой SSL:
Защита = Новый ЗащищенноеСоединениеOpenSSL();
HTTP = Новый HTTPСоединение(СерверИсточник, 443,,,,, Защита);
_tempBik. При необходимости заменяем команду КомандаСистемы на программную распаковку через стандартный объект ЧтениеZipФайла, если файл переименован в .zip.После внесения данных исправлений обработка восстановит корректное подключение к серверу РБК и выполнит обновление классификатора банков в автоматическом режиме.