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