При настройке автоматического обмена данными через FTP-сервер в среде Windows 10 разработчики часто сталкиваются со специфической проблемой. Обработка, которая отлично работает при ручном запуске, начинает выдавать ошибку «unknown PASV reply» при выполнении через планировщик задач или регламентное задание. Ситуация осложняется тем, что стандартный проводник Windows или браузер могут успешно подключаться к этому же серверу без нареканий. Разберем детально, почему это происходит и как настроить стабильную выгрузку.
Ошибка «unknown PASV reply» (неизвестный ответ на команду PASV) возникает на этапе перехода FTP-соединения в пассивный режим. Когда 1С отправляет серверу команду PASV, сервер должен вернуть IP-адрес и номер порта, к которым клиент (1С) подключится для передачи данных. Если формат этого ответа отличается от стандарта или содержит некорректные данные, встроенный механизм платформы 1С не может его распознать.
Проанализируем основные факторы, влияющие на возникновение этой ошибки:
FTPСоединение в 1С может «споткнуться» на этом этапе.Первым делом рассмотрим программный способ управления режимом подключения. В конструкторе объекта FTPСоединение шестым параметром передается булево значение, отвечающее за пассивный режим. По умолчанию во многих конфигурациях (или при старом стиле написания кода) может использоваться активный режим.
Попробуем явно указать использование пассивного режима в коде. Рассмотрим пример инициализации соединения:
// Пример создания соединения в пассивном режиме
АдресСервера = "ftp.example.com";
Порт = 21;
Пользователь = "Robot_1C";
Пароль = "StrongPassword";
Прокси = Неопределено;
ПассивныйРежим = Истина; // Установка этого флага часто решает проблему
Попытка
Соединение = Новый FTPСоединение(АдресСервера, Порт, Пользователь, Пароль, Прокси, ПассивныйРежим);
// Дальнейшая работа с файлами
Исключение
ЗаписьЖурналаРегистрации("FTP.Ошибка", УровеньЖурналаРегистрации.Ошибка, , , ИнформацияОбОшибке().Описание);
КонецПопытки;
Если при значении Истина ошибка сохраняется, попробуем установить Ложь (активный режим). Однако помните, что для работы активного режима на стороне клиента (вашего компьютера) должны быть открыты входящие порты в брандмауэре.
Если программное переключение режимов не помогает, проанализируем настройки операционной системы. В Windows 10 есть функция, которая анализирует FTP-трафик на лету. Она часто становится причиной модификации ответов PASV, что и вызывает ошибку в 1С. Для исправления ситуации выполним следующие шаги:
Эта настройка заставляет брандмауэр Windows пропускать FTP-ответы «как есть», не пытаясь их проинспектировать или изменить.
Рассмотрим ситуацию, когда стандартный объект FTPСоединение продолжает работать нестабильно. В Windows 10 (начиная с версии 1803) встроена мощная консольная утилита curl.exe, которая гораздо лучше справляется со сложными сетевыми условиями, NAT и нестандартными ответами серверов. Мы можем вызвать её напрямую из 1С.
Разберем пример кода для выгрузки файла через curl:
ПутьКФайлу = "C:\Export\data.zip";
FTP_URL = "ftp://ftp.example.com/upload/data.zip";
ЛогинПароль = "user:password";
// Формируем строку запуска
// -T указывает файл для загрузки
// --user задает учетные данные
// -k игнорировать ошибки сертификата (если используется FTPS)
КомандаЗапуска = "curl -T """ + ПутьКФайлу + """ " + FTP_URL + " --user " + ЛогинПароль;
Попытка
ЗапуститьПриложение(КомандаЗапуска, , Истина); // Ждем завершения
Сообщить("Файл успешно отправлен через curl");
Исключение
Сообщить("Ошибка при вызове внешней утилиты: " + ОписаниеОшибки());
КонецПопытки;
Использование curl или сторонних библиотек типа WinSCP часто является самым надежным решением для регламентных заданий, так как они имеют развитые механизмы логирования и повторных попыток при обрыве связи.
Посмотрим на проблему со стороны прав доступа. Когда задача запускается из-под планировщика, она может выполняться под учетной записью SYSTEM или специального администратора. Проанализируем настройки задачи:
%TEMP%), так как 1С при формировании FTP-пакета создает временные файлы.Подведем итог: ошибка «unknown PASV reply» — это чаще всего конфликт между строгим парсером 1С и сетевыми фильтрами Windows 10. Перевод соединения в явный пассивный режим ПассивныйРежим = Истина в сочетании с отключением StatefulFtp через netsh решает проблему в 90% случаев.