Как получить подробный текст ошибки при сбое подключения к FTP в 1С?

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

При работе с внешними сетевыми ресурсами через платформу 1С:Предприятие разработчики часто сталкиваются с ситуацией, когда инициализация объекта FTPСоединение завершается аварийно и управление передается в блок Исключение. При этом попытка зафиксировать причину сбоя стандартными средствами иногда возвращает пустую строку, что затрудняет локализацию проблемы. Разберем подробнее, как правильно перехватывать и регистрировать системные ошибки 1С, а также проанализируем основные причины, из-за которых может не устанавливаться FTP-соединение.

Правильное получение текста ошибки в блоке Исключение

Рассмотрим причину, по которой функция ОписаниеОшибки() может возвращать пустую строку. Системное описание исключения актуально непосредственно в момент возникновения сбоя. Если внутри блока Исключение перед вызовом функции выполняются другие методы платформы или операции, вызывающие внутренние некритичные сбои, контекст ошибки может быть очищен. Поэтому считывать информацию необходимо в самую первую очередь.

Кроме того, в современных версиях платформы 1С:Предприятие 8.3 функция ОписаниеОшибки() считается устаревшей. Для получения полной картины сбоя, включая стек вызовов, рекомендуется использовать объект ИнформацияОбОшибке() в сочетании с функциями форматирования:

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

Посмотрим на пример корректной организации блока перехвата ошибки с записью в журнал регистрации:


Попытка
    // Инициализация соединения и передача файла
    FTPСоединение = Новый FTPСоединение(АдресСервера, Порт, Логин, Пароль, , ПассивныйРежим);
    FTPСоединение.Записать(ПолныйПутьКФайлу, ИмяФайлаНаСервере);
Исключение
    // Получаем информацию об ошибке в самом начале блока обработки
    СведенияОбОшибке = ИнформацияОбОшибке();
    ПодробныйТекстОшибки = ПодробноеПредставлениеОшибки(СведенияОбОшибке);
    
    ТекстСообщения = "Ошибка при работе с FTP-сервером " + АдресСервера + ": " + Символы.ПС + ПодробныйТекстОшибки;
    
    #Если Клиент Тогда
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, СтатусСообщения.ОченьВажное);
    #КонецЕсли
    
    ЗаписьЖурналаРегистрации(
        НСтр("ru = 'Выгрузка на FTP'"),
        УровеньЖурналаРегистрации.Ошибка,
        ,
        ,
        ТекстСообщения
    );
КонецПопытки;

Частые причины сбоев при инициализации FTPСоединение

Если даже при правильном перехвате исключения текст ошибки указывает на невозможность соединения, выясним технические причины, которые чаще всего приводят к падению конструктора FTPСоединение:

  1. Некорректный формат адреса: в параметр Сервер необходимо передавать исключительно IP-адрес или DNS-имя (например, "ftp.mysite.ru" или "192.168.1.10"). Указание префиксов протокола ("ftp://", "ftps://") или путей к подпапкам вызывает ошибку инициализации.
  2. Неверный тип данных порта: параметр Порт должен иметь числовой тип (например, 21). Передача строкового значения "21" приводит к возникновению исключения.
  3. Блокировка активного режима брандмауэром: по умолчанию конструктор может использовать активный режим передачи. Если сервер 1С или FTP-сервер находится за NAT или межсетевым экраном, активные соединения часто блокируются. В таком случае необходимо явно передавать Истина в параметр ПассивныйРежим.
  4. Несоответствие протокола (SFTP против FTPS/FTP): объект FTPСоединение платформы 1С не предназначен для работы по протоколу SFTP (SSH File Transfer Protocol, использующему по умолчанию порт 22). Для защищенного соединения FTPS (FTP over SSL/TLS) требуется инициализировать параметры ЗащищенноеСоединениеOpenSSL и указывать уровень использования защищенного соединения.
  5. Ограничения контекста регламентного задания: фоновые и регламентные задания выполняются на стороне сервера от имени системного пользователя службы (например, usr1cv8). У этой учетной записи должны быть права на чтение локального файла по пути ПолныйПутьКФайлу, а на сервере должны быть открыты исходящие сетевые порты к FTP-хосту.

Диагностика сетевых ошибок на уровне платформы

Проанализируем ситуацию, когда ошибка возникает на уровне сокетов операционной системы, а 1С возвращает общую ошибку ввода/вывода без деталей. В этом случае для углубленной диагностики рекомендуется настроить сбор технологического журнала платформы 1С. Для перехвата сетевых сбоев и исключений достаточно отслеживать события EXCP и EXCPCNX, что позволит увидеть точный ответ удаленного FTP-сервера и сетевой статус разрыва сессии.

← На главную