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

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

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

Разбор ошибки «Couldn't resolve host name»

Рассмотрим типичную ситуацию: код написан, параметры переданы, но система выдает ошибку «Не удалось выполнить команду по причине: Ошибка работы с Интернет: ftp://ftp Couldn't resolve host name». Проанализируем причину этого поведения.

Основная ошибка заключается в том, что в параметре АдресСервера объекта FTPСоединение разработчики часто указывают полный URL вместе с протоколом (например, "ftp://ftp3.example.ru"). Для платформы 1С это некорректно. Объект FTPСоединение сам «знает», какой протокол использовать. Ему требуется только доменное имя или IP-адрес.

Как правильно указывать адрес:

  1. Удалите префикс протокола ftp://.
  2. Удалите все завершающие слеши /.
  3. Укажите только хост, например: "ftp3.example.ru" или "192.168.1.100".

Посмотрим на пример исправленного конструктора соединения:


// Неправильно: "ftp://ftp3.XXXXXX.ru/"
// Правильно: "ftp3.XXXXXX.ru"

АдресХоста = "ftp3.XXXXXX.ru";
Соединение = Новый FTPСоединение(
    АдресХоста, // Только имя хоста
    ,           // Порт (по умолчанию 21)
    "Логин", 
    "Пароль", 
    ,           // Прокси
    Истина      // Пассивный режим
);

Проблема «Access denied to remote resource» и права доступа

После исправления адреса хоста часто возникает следующая проблема: «Ошибка аутентификации при доступе к ресурсу: Access denied to remote resource». При этом через проводник Windows под теми же учетными данными всё работает корректно. Выясним причину этой ситуации.

Проблема часто кроется в контексте выполнения кода. Если код выполняется «НаСервере», то подключение инициирует не текущий пользователь Windows, а системная учетная запись, под которой запущена служба «Агент сервера 1С:Предприятия» (обычно это USR1CV8).

Проанализируем возможные причины отказа в доступе:

  1. Ограничения учетной записи службы 1С: У пользователя USR1CV8 может не быть прав на выход в интернет через брандмауэр или на работу с конкретными портами. Проводник же запускается от имени администратора или пользователя с полными правами, поэтому он работает успешно.
  2. Необходимость защищенного соединения: Современные серверы могут блокировать попытки обычного FTP-подключения, требуя FTPS (FTP over SSL). В 1С это реализуется через объект ЗащищенноеСоединениеOpenSSL.
  3. Различие между FTP и SFTP: Это критически важный момент. Объект FTPСоединение в 1С поддерживает только протоколы FTP и FTPS. Если ваш сервер работает по протоколу SFTP (через SSH, обычно порт 22), стандартные средства 1С не смогут подключиться, и сервер будет выдавать ошибку доступа.

Использование защищенного соединения (FTPS)

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


// Создаем объект защищенного соединения
Защита = Новый ЗащищенноеСоединение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 в 1С зависит от трех факторов: отсутствия лишних префиксов в адресе, правильного выбора режима (пассивный/защищенный) и наличия прав у пользователя службы 1С на сетевую активность.

← На главную