Как передать или получить весь каталог файлов через FTP в 1С:Предприятие?

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

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

Понимание задачи и подготовка алгоритма

Когда нам необходимо передать не один файл, а целую папку, мы сталкиваемся с тем, что встроенный объект FTPСоединение не поддерживает рекурсивную передачу «одной командой». Поэтому нам предстоит разбить задачу на логические блоки:

  1. Получение списка всех файлов и подпапок в исходном локальном каталоге.
  2. Итерация по полученному списку с помощью циклов.
  3. Проверка типа объекта (файл это или папка).
  4. Динамическое создание структуры каталогов на сервере перед отправкой файлов.

Шаг 1: Получение списка файлов

Для начала работы с файловой системой нам потребуется функция НайтиФайлы. Она позволяет получить массив объектов Файл, которые содержат всю необходимую информацию: имя, путь, размер и признак того, является ли объект каталогом.

Пример использования функции для получения данных:


// Получаем список всех элементов в указанной папке
МассивФайлов = НайтиФайлы("D:/МояПапка/", "*.*");
Для Каждого Элемент Из МассивФайлов Цикл
    Если Элемент.ЭтоКаталог() Тогда
        // Обработка вложенной папки
    Иначе
        // Отправка файла
    КонецЕсли;
КонецЦикла;

Шаг 2: Организация рекурсии и создание папок на сервере

Самым важным аспектом при передаче каталога является сохранение иерархии. Если мы попытаемся отправить файл в папку, которой еще нет на FTP, FTPСоединение вернет ошибку. Поэтому перед вызовом метода Записать необходимо проверить существование удаленного каталога.

Рекомендуем создать вспомогательную процедуру, которая будет вызывать сама себя (рекурсия) при обнаружении вложенных папок. Внутри этой процедуры используйте метод СоздатьКаталог объекта FTPСоединение.

Шаг 3: Обеспечение стабильности процесса

Массовая передача данных подвержена сетевым сбоям. Чтобы ваш алгоритм не «падал» при первой ошибке, придерживайтесь следующих правил:

Альтернативный подход: архивация

Поскольку пофайловая передача через FTPСоединение может быть медленной из-за большого количества сетевых запросов (для каждого файла отправляется отдельный запрос), профессионалы часто используют промежуточный этап:

Разберем логику:

  1. Сначала мы упаковываем содержимое папки в архив Zip.
  2. Передаем один готовый архив на FTP-сервер.
  3. При необходимости, на стороне сервера распаковываем его (если сервер поддерживает управление через КоманднаяСтрока или другие скрипты).

Этот метод значительно экономит время выполнения операции и упрощает поддержку кода, так как вам не нужно вручную отслеживать создание каждой вложенной папки и проверять, успешно ли прошла запись каждого мелкого файла.

Таким образом, для решения задачи вы можете выбрать либо написание рекурсивного обхода дерева файлов с использованием НайтиФайлы, либо стратегию предварительной архивации. Выбор зависит от специфики ваших задач и количества файлов в каталоге.

← На главную