Разработка и Конфигурация · 9 мин
1С: как записать файл на FTP
Как записать файл на FTP из 1С через FTPСоединение: установка соединения, запись файла, работа с каталогами, пассивный режим, ошибки и примеры кода.
В платформе 1С:Предприятие 8.3 для работы с FTP предусмотрен встроенный объект FTPСоединение, доступный на сервере и в толстом клиенте. Он позволяет подключиться к FTP-серверу, передать туда файл, создать каталог и проверить результат записи — без внешних компонент и сторонних программ.
Типовая задача выглядит так: сформировать файл (выгрузку, отчёт, изображение), сохранить его во временный каталог, установить FTP-соединение и вызвать метод Записать(). Ниже разобран полный рабочий сценарий: от установки соединения до проверки, что файл действительно лёг на сервер, а также типичные ошибки — таймауты, пассивный режим и права доступа.
Как установить FTP-соединение из 1С
Соединение создаётся конструктором Новый FTPСоединение. Минимально нужны адрес сервера, порт (по умолчанию 21), логин и пароль. Дополнительно задаются таймаут и признак пассивного режима — именно эти параметры чаще всего решают проблемы с подключением через файрвол.
ФТП = Новый FTPСоединение(
"ftp.example.com", // сервер
21, // порт
"user", // логин
"password", // пароль
, // прокси (не используется)
Истина, // пассивный режим
30 // таймаут, секунд
);
Пассивный режим (ПассивноеСоединение = Истина) почти всегда нужен, если клиент 1С находится за NAT или корпоративным файрволом. В активном режиме сервер сам инициирует обратное соединение для передачи данных, и оно блокируется сетевым оборудованием — внешне это выглядит как зависание или ошибка после успешной авторизации.
Как записать файл на FTP: базовый пример
После установки соединения файл передаётся методом Записать(). Первый параметр — полный путь к локальному файлу, второй — путь и имя файла на FTP-сервере относительно текущего каталога соединения.
Процедура ВыгрузитьФайлНаFTP()
ЛокальныйФайл = ПолучитьИмяВременногоФайла("xml");
// ... формирование и сохранение файла ...
Попытка
ФТП = Новый FTPСоединение("ftp.example.com", 21, "user", "password", , Истина, 30);
ФТП.Записать(ЛокальныйФайл, "/upload/data.xml");
Исключение
Сообщить("Ошибка FTP: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Код выше выполняется на сервере 1С (в серверной процедуре общего модуля или фоновом задании) либо в толстом клиенте. В тонком и веб-клиенте объект недоступен — типовое решение: передать данные на сервер и выполнить отправку там.
ФТП = Новый FTPСоединение("ftp.example.com", 21, "user", "pass", , Истина, 30);
ФТП.Записать("C:\Temp\report.xml", "/upload/report.xml");Работа с каталогами на FTP-сервере
Метод Записать() не создаёт промежуточные каталоги автоматически: если путь /upload/2026/ не существует, запись завершится ошибкой. Поэтому перед передачей каталог проверяют и при необходимости создают.
// Проверка наличия каталога
Найденные = ФТП.НайтиФайлы("/upload");
Если Найденные.Количество() = 0 Тогда
ФТП.СоздатьКаталог("/upload");
КонецЕсли;
// Смена текущего каталога
ФТП.УстановитьТекущийКаталог("/upload");
ФТП.Записать(ЛокальныйФайл, "data.xml"); // теперь можно без полного пути
Полезные методы для навигации: ТекущийКаталог() — узнать, где находится соединение, НайтиФайлы(маска) — получить список файлов и каталогов, Удалить() — удалить файл на сервере. Обратите внимание: пути на FTP указываются через прямой слэш / независимо от операционной системы сервера 1С.
Как проверить, что файл записался
Отсутствие исключения при вызове Записать() — хороший признак, но для ответственных выгрузок стоит явно убедиться, что файл появился на сервере и имеет ненулевой размер.
Файлы = ФТП.НайтиФайлы("/upload/data.xml");
Если Файлы.Количество() > 0 Тогда
Размер = Файлы[0].Размер();
Если Размер > 0 Тогда
// файл успешно записан
КонецЕсли;
КонецЕсли;
Как проверить результат
НайтиФайлы возвращает один объект с нужным именем
Коллекция пустая — файл не записался
Размер больше нуля и близок к размеру локального файла
Размер 0 байт — передача оборвалась
Записать() отработал без ошибки
Ошибка таймаута или доступа в ОписаниеОшибки()
Типичные ошибки и их причины
Большинство проблем при записи на FTP связаны не с кодом 1С, а с сетевым окружением и настройками сервера. Ниже — ситуации, которые встречаются чаще всего.
Отдельный частый случай — кодировка имён файлов. Если на сервере имена с кириллицей отображаются «кракозябрами» или запись такого файла не удаётся, используйте латиницу и цифры в именах файлов на FTP — это самое надёжное решение без привязки к настройкам конкретного сервера.
Организация регулярной выгрузки
Если файл нужно отправлять по расписанию, логику записи оформляют в общем серверном модуле и вызывают из регламентного задания. Логин и пароль при этом не хранят в коде: их выносят в константы, регистр сведений или защищённое хранилище, доступное только администраторам.
- 1Создайте серверную процедуру: формирование файла, соединение, запись, проверка
- 2Обработайте исключения и запишите ошибку в журнал регистрации
- 3Создайте регламентное задание, вызывающее эту процедуру
- 4Настройте расписание и проверьте выполнение в консоли заданий
- 5Проверьте на FTP-сервере, что файлы появляются по расписанию
Для больших файлов учитывайте, что регламентное задание может быть прервано по таймауту сеанса. В таких случаях файл разбивают на части, либо выгрузку выносят во внешнюю обработку, запускаемую планировщиком Windows, либо используют архивирование для уменьшения объёма передачи.
Альтернативы встроенному FTPСоединение
Встроенный объект закрывает большинство задач, но у него есть ограничения: нет поддержки SFTP, нет докачки файлов, ограниченная диагностика ошибок протокола.
Сравнение вариантов
Подходит для обычного FTP и простых выгрузок; не поддерживает SFTP и докачку
Нужна для SFTP, сложных сценариев и логирования; требует установки утилиты на сервер 1С
Вариант, если приёмник можно заменить на HTTP-сервис; надёжнее проходит через прокси и файрволы
Выбор зависит от требований приёмной стороны. Если контрагент принимает файлы только по SFTP, встроенными средствами задача не решается — используют вызов внешней утилиты из кода 1С через ЗапуститьПриложение() или Shell на сервере.
FAQ
Можно ли записать файл на FTP из тонкого клиента 1С?
Нет, объект FTPСоединение недоступен в тонком и веб-клиенте. Передайте данные на сервер через серверный вызов и выполните отправку в серверной процедуре общего модуля.
Почему соединение устанавливается, но файл не передаётся?
Классический признак работы в активном режиме за файрволом: канал команд открывается, а канал данных блокируется. Установите пассивный режим (параметр ПассивноеСоединение = Истина) и проверьте, что на файрволе разрешены исходящие соединения на порты данных.
Как записать файл с русским именем на FTP?
Технически это возможно, но результат зависит от кодировки FTP-сервера — имя может исказиться. Надёжнее формировать имя файла латиницей, цифрами и символами подчёркивания, а русское название хранить внутри файла или в базе.
Поддерживает ли 1С протокол SFTP?
Нет, встроенный объект работает только с FTP и FTPS. Для SFTP (по SSH) вызывают внешние утилиты — например, WinSCP в режиме командной строки или curl — через ЗапуститьПриложение() на сервере.
Как передать сразу несколько файлов?
Метод Записать() принимает и маску: например, ФТП.Записать("C:\Temp\*.xml", "/upload/") передаст все подходящие файлы каталога. Либо перебирайте файлы циклом через НайтиФайлы() локально и записывайте каждый по отдельности — так проще контролировать ошибки.
Что делать, если передача большого файла обрывается?
Увеличьте таймаут соединения, проверьте стабильность канала и ограничения FTP-сервера на размер файла. Если обрывы продолжаются, сжимайте файл архивом или разбивайте выгрузку на части — встроенной докачки в FTPСоединение нет.
Что важно запомнить
Запись файла на FTP в 1С выполняется объектом FTPСоединение методом Записать(). Включайте пассивный режим, создавайте каталоги заранее, проверяйте результат через НайтиФайлы и выполняйте код на сервере. Пароли держите вне кода конфигурации.