Работа с FTP в 1С 8.2 и 8.3

Общая информация

Для работы с протоколом FTP у технологической платформы 1С имеется два главных объекта — FTPСоединение и FTPФайл, кроме них существует объект ЗащищенноеСоединениеOpenSSL — который используется для подключения к FTPS-серверам (не следует путать с SFTP), а также объект ИнтернетПрокси — который используется для соединения с FTP-сервером через прокси-сервер.

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

FTPФайл служит для получения информации о каталогах и файлах на FTP-сервере — этот объект позволяет получить информацию по объекту на FTP-сервере: имя, путь расширение, размер и тд.

ИнтернетПрокси позволяет указать прокси-сервер используемый для соединения с FTP/FTPS сервером — параметры для подключения к прокси-серверу указываются методом Установить(). Использование свойств «Пароль» и «Пользователь» нежелательно, так как эти свойства являются устаревшими.

ЗащищенноеСоединениеOpenSSL создает защищенное соединение OpenSSL — предоставляет возможность организовать защищенное соединение с FTP-сервером, также имеется возможность конкретный сертификат клиента и/или сертификат удостоверяющего центра.

Практические задачи при работе с FTP

В качестве практических примеров рассмотрим все операции которые позволяет выполнить объект FTPСоединение.

Как подключиться к серверу FTP?

Параметры для подключения указываются в конструкторе, сами параметры достаточно стандартны. Отдельно скажу про два параметра:

  • Таймаут — позволяет указать таймаут в секундах для установки соединения и выполнения операций;
  • Пассивное соединение — определяет тип FTP-соединения: «Ложь» — активный режим, «Истина» — пассивный, значение по умолчанию — «Ложь». Разница заключается в том, кто устанавливает соединение для передачи данных — при активном режиме это делает сервер, при пассивном клиент. Это бывает важно при наличии брандмауэра, так как он часто запрещает входящие соединения на случайные порты.
    &НаКлиенте
    Процедура ПодключениеКFTPИз1С(Команда)
     //самый минималистичный вариант для анонимного пользователя
     Соединение = Новый FTPСоединение("localhost");
     
     //если номер порта стандартный, то его можно не указывать
     //стандартные номера портов: 21 - FTP и 990 - FTPS 
     Соединение = Новый FTPСоединение("localhost",21,"login","password");
     
     //пассивное соединение с таймаутом 10 секунд
     Соединение = Новый FTPСоединение("localhost",21,"login","password",,Истина,10); 
    КонецПроцедуры

    Как подключиться к серверу FTPS?

    Настраивать собственный FTPS-сервер у меня не было никакого желания, поэтому воспользовался публичными серверами test.rebex.net. Различия между FTP и FTPS только в подключении к серверу, различий в работе я не увидел.

  • &НаКлиенте
    Процедура ПодключениеКFTPSИз1с(Команда)
     
     ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
     Соединение = Новый FTPСоединение("test.rebex.net",990,"demo","password",,,,ЗащищенноеСоединение,УровеньИспользованияЗащищенногоСоединенияFTP.Требовать); 
     
     Сообщить(Соединение.ТекущийКаталог());
     
    КонецПроцедуры

    Как искать файлы и каталоги по FTP из 1С?

    В примере ниже показаны варианты использования функции НайтиФайлы() — получение списка файлов, поиск по маске и поиск конкретного файла. Кроме этого пример показывает какие данные о найденном файле/каталоге мы можем получить при помощи объекта FTPФайл.

    &НаКлиенте
    Процедура ПоискФайловНаFTPИз1С(Команда)
     Соединение = Новый FTPСоединение("localhost",21,"login","password"); 
     
     //получим список всех файлов на FTP
     //в результате получаем массив объектов FTPФайл
     НайденныеОбъекты = Соединение.НайтиФайлы("/","*.txt",Истина);
     Если НайденныеОбъекты.Количество()>0 Тогда
     
     Для Каждого ОбъектFTP Из НайденныеОбъекты Цикл
     
     Сообщить("Имя файла: "+ОбъектFTP.ПолноеИмя);
     Сообщить("Имя файла: "+ОбъектFTP.Путь+ОбъектFTP.ИмяБезРасширения+ОбъектFTP.Расширение);
     Сообщить("Это каталог: "+ОбъектFTP.ЭтоКаталог());
     Сообщить("Это файл: "+ОбъектFTP.ЭтоФайл());
     
     Если ОбъектFTP.ЭтоФайл() Тогда
     //размер имеется только у файлов
     Сообщить("Размер: "+ОбъектFTP.Размер()+" байт");
     
     КонецЕсли;
     
     Сообщить("Только для чтения: "+ОбъектFTP.ПолучитьТолькоЧтение());
     Сообщить("Скрытый: "+ОбъектFTP.ПолучитьНевидимость());
     Сообщить("Время изменения: "+ОбъектFTP.ПолучитьВремяИзменения());
     
     КонецЦикла;
     
     КонецЕсли;
     
     //можно поискать что-то более конкретное, например по маске
     НайденныеОбъекты = Соединение.НайтиФайлы("/","*.txt",Истина);
     
     //или просто найти конкретный файл
     НайденныеОбъекты = Соединение.НайтиФайлы("/test_folder_1/file_1.txt");
    КонецПроцедуры

    Как скачивать файлы по FTP из 1С?

    &НаКлиенте
    Процедура СкачатьФайлПоFTPИз1С(Команда)
     
     Соединение = Новый FTPСоединение("localhost",21,"login","password"); 
     
     //классический вариант
     //первый параметр - что скачать, второй параметр - куда скачать
     Соединение.Получить("/test_folder_1/file_1.txt","D:\file.txt");
     
     //вариант с использованием потока
     //первый параметр - что скачать, воторой параметр - поток в который будут помещены полученные данные 
     Поток = Новый ФайловыйПоток("D:\file.txt", РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
     Соединение.Получить("/test_folder_1/file_1.txt",Поток);
     
    КонецПроцедуры

    Как передавать файлы по FTP из 1С?

    &НаКлиенте
    Процедура ПередатьФайлНаFTPИз1С(Команда)
     
     Соединение = Новый FTPСоединение("localhost",21,"login","password"); 
     
     //классический вариант
     //первый параметр - что передать, второй параметр - куда передать
     Соединение.Записать("D:\file.txt","/test_folder_1/file_2.txt");
     
     //вариант с использованием потока
     //первый параметр - куда передать, воторой параметр - поток из которого взять данные
     Поток = Новый ФайловыйПоток("D:\file.txt", РежимОткрытияФайла.Открыть, ДоступКФайлу.Чтение);
     Соединение.Записать("/test_folder_1/file_2.txt",Поток);
     
    КонецПроцедуры

    Прочие действия с файлами и каталогами по FTP из 1С

    Далее приведены короткие примеры, демонстрирующие возможности технологической платформы по выполнению различных простых операций над каталогами и файлами по FTP.  Инициализация переменной «Соединение» (т.е. подключение к FTP-серверу) опущена  для краткости.

    Как получить и установить текущий каталог по FTP из 1С?

    &НаКлиенте
    Процедура ПолучитьИУставновитьТекущийКаталогПоFTPИз1С(Команда)
     
     //получаем текущий каталог
     Сообщить(Соединение.ТекущийКаталог());
     
     //устанавливаем текущий каталог
     Соединение.УстановитьТекущийКаталог("/test_folder_1");
     
    КонецПроцедуры

    Как создать каталог по FTP из 1С?

    &НаКлиенте
    Процедура СоздатьКаталогПоFTPИз1С(Команда)
     
     //создание каталога
     Соединение.СоздатьКаталог("/test_folder_3");
     Соединение.СоздатьКаталог("/test_folder_3/test_subfolder_1");
     
    КонецПроцедуры

    Как удалить каталог  и файлы по FTP из 1С?

  • &НаКлиенте
    Процедура УдалитьКаталогиИФайлыПоFTPИз1С(Команда)
     
     //удаление каталога со всем его содержимым
     Соединение.Удалить("/test_folder_3");
     
     //удаление одного конкретного файла 
     Соединение.Удалить("/test_folder_1/file_1.txt"); 
     
     //удаление файлов по маске
     Соединение.Удалить("/","*.txt");
     
    КонецПроцедуры

    Как переименовать/переместить файл или каталог по FTP из 1С?

    &НаКлиенте
    Процедура ПереименоватьИПереместитьКаталогиИлиФайлыПоFTPВ1С(Команда)
     
     //переименование каталога
     //Соединение.Переместить("/test_folder_1","/test_folder_4");
     
     //перемещение файла
     Соединение.Переместить("/file_1.txt", "/test_folder_2/file_1.txt");
     
    КонецПроцедуры