Работа с внешними ресурсами для передачи файлов — одна из стандартных задач программиста 1С. Однако при использовании встроенного объекта FTPСоединение разработчики часто сталкиваются с техническими сложностями, которые не всегда очевидны. В этой статье мы подробно разберем, почему возникают ошибки разрешения имени хоста и отказа в доступе, а также проанализируем правильный подход к написанию кода для надежной передачи файлов.
Рассмотрим типичную ситуацию: код написан, параметры переданы, но система выдает ошибку «Не удалось выполнить команду по причине: Ошибка работы с Интернет: ftp://ftp Couldn't resolve host name». Проанализируем причину этого поведения.
Основная ошибка заключается в том, что в параметре АдресСервера объекта FTPСоединение разработчики часто указывают полный URL вместе с протоколом (например, "ftp://ftp3.example.ru"). Для платформы 1С это некорректно. Объект FTPСоединение сам «знает», какой протокол использовать. Ему требуется только доменное имя или IP-адрес.
Как правильно указывать адрес:
ftp://./."ftp3.example.ru" или "192.168.1.100".Посмотрим на пример исправленного конструктора соединения:
// Неправильно: "ftp://ftp3.XXXXXX.ru/"
// Правильно: "ftp3.XXXXXX.ru"
АдресХоста = "ftp3.XXXXXX.ru";
Соединение = Новый FTPСоединение(
АдресХоста, // Только имя хоста
, // Порт (по умолчанию 21)
"Логин",
"Пароль",
, // Прокси
Истина // Пассивный режим
);
После исправления адреса хоста часто возникает следующая проблема: «Ошибка аутентификации при доступе к ресурсу: Access denied to remote resource». При этом через проводник Windows под теми же учетными данными всё работает корректно. Выясним причину этой ситуации.
Проблема часто кроется в контексте выполнения кода. Если код выполняется «НаСервере», то подключение инициирует не текущий пользователь Windows, а системная учетная запись, под которой запущена служба «Агент сервера 1С:Предприятия» (обычно это USR1CV8).
Проанализируем возможные причины отказа в доступе:
USR1CV8 может не быть прав на выход в интернет через брандмауэр или на работу с конкретными портами. Проводник же запускается от имени администратора или пользователя с полными правами, поэтому он работает успешно.ЗащищенноеСоединениеOpenSSL.FTPСоединение в 1С поддерживает только протоколы FTP и FTPS. Если ваш сервер работает по протоколу SFTP (через SSH, обычно порт 22), стандартные средства 1С не смогут подключиться, и сервер будет выдавать ошибку доступа.Если сервер требует шифрования, нам необходимо изменить инициализацию объекта. Рассмотрим, как добавить поддержку защищенного соединения в наш код:
// Создаем объект защищенного соединения
Защита = Новый ЗащищенноеСоединениеOpenSSL();
// Передаем его последним параметром
Соединение = Новый FTPСоединение(
"ftp3.XXXXXX.ru",
21,
"User",
"Pass",
Неопределено,
Истина,
30,
Защита // Теперь соединение защищено TLS/SSL
);
В параметрах FTPСоединение есть булево значение для выбора режима. В 99% случаев в современных сетях (особенно если сервер 1С находится за роутером или в облаке) нужно использовать Пассивный режим (параметр Истина).
В активном режиме сервер пытается сам инициировать соединение с клиентом для передачи данных. Брандмауэры на стороне клиента (сервера 1С) обычно блокируют такие входящие соединения, что приводит к зависаниям или ошибкам при попытке передать файл, хотя сама авторизация проходит успешно.
Еще одна причина ошибки «Access denied» — попытка записи файла в корень сервера, на который у пользователя могут отсутствовать права. В 1С рекомендуется явно переходить в нужную директорию перед отправкой файла.
Разберем правильную последовательность действий:
Попытка
Соединение = ПодключитьсяКFTP(); // Ваша функция подключения
// Установка рабочего каталога
Соединение.УстановитьТекущийКаталог("/upload/reports/");
// Передача файла
Соединение.Записать(ПутьКЛокальномуФайлу, "otchet.xml");
Сообщить("Файл успешно передан!");
Исключение
Сообщить("Произошла ошибка: " + ОписаниеОшибки());
КонецПопытки;
Если программное подключение из 1С все равно не удается, выполните следующие шаги для локализации проблемы:
ftp. Если консоль не подключается — проблема в сетевых доступах (порты 20, 21 закрыты брандмауэром).CWD — смена каталога или AUTH TLS).Подводя итог, можно сказать, что стабильность работы с FTP в 1С зависит от трех факторов: отсутствия лишних префиксов в адресе, правильного выбора режима (пассивный/защищенный) и наличия прав у пользователя службы 1С на сетевую активность.