Как исправить ошибку «Неудачная попытка соединения» при загрузке классификатора банков в Альфа-Авто 5?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе в конфигурации Альфа-Авто: Автосалон+Автосервис+Автозапчасти (редакция 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;
КонецФункции

Причины возникновения ошибки

Проанализируем приведенный программный код и выделим основные технические факторы, приводящие к сбою:

  1. Синтаксическая ошибка в адресе сервера: В конструктор объекта HTTPСоединение передается строка "cbrates.rbc.ru/". В платформе 1С:Предприятие первый параметр объекта ожидает исключительно хост (доменное имя или IP-адрес) без косой черты / на конце. Наличие завершающего слэша нарушает корректную резолюцию DNS-имени платформой и приводит к генерации исключения при вызове метода НТТР.Получить().
  2. Использование запуска внешних исполняемых файлов: Обработка скачивает самораспаковывающийся архив bnk.exe, генерирует файл RbkZip.bat и запускает его системным вызовом КомандаСистемы. В современных версиях Windows и на терминальных серверах выполнение сторонних .exe и .bat скриптов из временных каталогов блокируется политиками безопасности (AppLocker, SRP), контролем учетных записей (UAC) или антивирусным ПО.
  3. Особенности сетевых протоколов: Если веб-сервер источника выполняет перенаправление на защищенный протокол HTTPS, стандартный объект HTTPСоединение без явного указания порта 443 и параметра Новый ЗащищенноеСоединениеOpenSSL() не сможет обработать редирект.

Вариант 1. Загрузка классификатора из локального каталога («С диска ИТС»)

Если конфигурация находится на стандартной поддержке и изменение кода нежелательно, воспользуемся штатным альтернативным вариантом загрузки без прямого обращения 1С к сети.

Разберем последовательность действий по шагам:

  1. Открываем любой веб-браузер и переходим по прямому адресу скачивания архива: http://cbrates.rbc.ru/bnk/bnk.exe.
  2. Сохраняем файл bnk.exe на локальный диск сервера или рабочего компьютера.
  3. Распаковываем полученный файл. Поскольку bnk.exe представляет собой самораспаковывающийся ZIP-архив, его можно открыть любым архиватором (7-Zip, WinRAR) или запустить вручную. В результате распаковки появятся файлы классификатора: bnkseek.txt, bnkdel.txt и reg.txt.
  4. В программе Альфа-Авто открываем обработку загрузки классификатора банков.
  5. Выбираем вариант с диска ИТС (диск 2).
  6. В поле выбора пути указываем каталог, в который были извлечены текстовые файлы.
  7. Нажимаем кнопку Загрузить. Программа прочитает данные из файлов и заполнит справочник банков.

Вариант 2. Корректировка программного кода в конфигурации

Если база данных снята с поддержки или в конфигурации используются расширения, исправим программный код для восстановления автоматической загрузки.

Рассмотрим, какие изменения необходимо внести в функцию ПолучитьФайлРБК():

  1. Удаляем завершающий слэш в имени сервера-источника:
    
    // Было:
    // СерверИсточник = "cbrates.rbc.ru/";
    
    // Стало:
    СерверИсточник = "cbrates.rbc.ru";
    
  2. Если требуется обеспечить поддержку безопасного соединения, инициализируем объект HTTPСоединение с поддержкой SSL:
    
    Защита = Новый ЗащищенноеСоединениеOpenSSL();
    HTTP = Новый HTTPСоединение(СерверИсточник, 443,,,,, Защита);
    
  3. Проверяем права учетной записи, под которой запускается сеанс 1С, на создание и запуск файлов в каталоге _tempBik. При необходимости заменяем команду КомандаСистемы на программную распаковку через стандартный объект ЧтениеZipФайла, если файл переименован в .zip.

После внесения данных исправлений обработка восстановит корректное подключение к серверу РБК и выполнит обновление классификатора банков в автоматическом режиме.

← На главную