Появилась ли нативная поддержка SFTP в новых релизах 1С и как настроить защищенный обмен?

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

Вопрос поддержки защищенного протокола передачи файлов SFTP (SSH File Transfer Protocol) в среде 1С:Предприятие остается актуальным на протяжении многих лет. Многие разработчики до сих пор путают его с FTPS (FTP через SSL), который поддерживается платформой нативно. Однако для работы с SFTP стандартный объект FTPСоединение не подходит. В этой статье мы разберем текущее состояние вопроса в последних релизах платформы и проанализируем проверенные способы реализации обмена, предложенные экспертами сообщества.

Текущее состояние платформы 1С и протокол SFTP

Проанализируем ситуацию в современных релизах, таких как 8.3.23, 8.3.24 и выше. На текущий момент в основной платформе «1С:Предприятие» нативная поддержка SFTP в объекте FTPСоединение так и не появилась. Платформа по-прежнему ориентирована на работу с классическим FTP и защищенным FTPS. Важно понимать разницу: SFTP работает поверх протокола SSH (порт 22), в то время как FTPS — это расширение обычного FTP с шифрованием через TLS/SSL (порты 21 или 990).

Тем не менее, компания 1С реализовала поддержку SFTP в своих новых продуктах, таких как 1С:Шина (поможет управление обменами и интеграциями на 1С:Шина) и 1С:Исполнитель. Если ваша архитектура позволяет использовать эти инструменты в качестве интеграционного слоя, это будет наиболее «штатным» решением. Но для большинства классических конфигураций на базе 1С:Предприятие 8.3 приходится прибегать к альтернативным методам.

Решение 1: Использование WinSCP через командную строку

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


// Определяем пути и параметры
ПутьWinSCP = "C:\Program Files (x86)\WinSCP\WinSCP.exe";
ПрофильWinSCP = "MySftpSession"; // Заранее настроенный профиль в WinSCP
Лок_ИмяФайла = "C:\Exchange\data.xml";
Внеш_ИмяФайла = "/upload/data.xml";

// Формируем строку запуска для консоли
// Используем параметры: /console /command, option batch abort, open, put, close, exit
СтрокаПрограммы = """" + ПутьWinSCP + """" + " /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """put " + Лок_ИмяФайла + " " + Внеш_ИмяФайла + """ " + """close"" ""exit""";

// Создаем объект для запуска приложения
net = Новый COMОбъект("WScript.Shell");

// Запускаем WinSCP в скрытом режиме (0) и ожидаем завершения (Истина)
Результат = net.Run(СтрокаПрограммы, 0, Истина);

// Результат 0 означает успех, 1 — наличие ошибки
Если Результат = 1 Тогда
    ЗаписьЖурналаРегистрации("Обмен.SFTP", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка передачи: " + СтрокаПрограммы);
Иначе
    ЗаписьЖурналаРегистрации("Обмен.SFTP", УровеньЖурналаРегистрации.Информация, , , "Файл успешно отправлен");
КонецЕсли;

Разберем подробнее этот подход. Мы используем объект WScript.Shell для вызова WinSCP. Ключевым моментом здесь является параметр option batch abort, который заставляет программу немедленно прекратить выполнение при любой ошибке, что позволяет нам корректно обработать Результат. Также обратите внимание на использование профилей WinSCP — это позволяет избежать хранения паролей в открытом виде в коде 1С, так как все настройки подключения (включая SSH-ключи) хранятся внутри настроек самой программы.

Решение 2: Работа через WinSCP .NET Assembly (COM-объект)

Для более сложных задач, где требуется не просто отправить файл, а получить список файлов на сервере или выполнить сложные манипуляции, лучше использовать WinSCPnet.dll. Этот метод позволяет работать с SFTP как с полноценным объектом 1С. Разберем, как это реализовать:

  1. Скачайте WinSCP .NET Assembly с официального сайта.
  2. Зарегистрируйте библиотеку в системе или загружайте её динамически.
  3. Используйте объект Session для управления подключением.

Этот способ позволяет использовать блок Попытка...Исключение для перехвата детальных ошибок непосредственно в процессе выполнения кода, не обращаясь к внешним лог-файлам. Вы сможете проверять существование директорий, права доступа и размер файлов прямо в контексте модуля 1С.

Решение 3: Использование системной утилиты cURL

В современных операционных системах Windows 10/11 и во всех дистрибутивах Linux утилита curl встроена по умолчанию. Если она скомпилирована с поддержкой libssh2, её можно использовать для работы с SFTP без установки стороннего ПО. Выясним, как это выглядит в коде 1С:


// Пример команды curl для загрузки файла по SFTP
// -u пользователь:пароль -T путь_к_файлу sftp://сервер/путь
Команда = "curl -k -u user:password -T ""C:\temp\file.txt"" sftp://sftp.example.com/home/user/";
ЗапуститьПриложение(Команда, , Истина);

Проанализируем преимущества этого метода. Во-первых, это кроссплатформенность. Если ваша 1С работает на сервере под управлением Linux, curl будет работать так же эффективно, как и на Windows. Во-вторых, отсутствие необходимости устанавливать дополнительное ПО, такое как WinSCP, что критично в закрытых корпоративных контурах. Параметр -k позволяет игнорировать проверку сертификатов, если это необходимо, хотя в промышленной эксплуатации рекомендуется настраивать проверку ключей.

Особенности работы в регламентных заданиях

Выясним причину частых ошибок при запуске SFTP-обмена в фоновых заданиях. Когда код выполняется на сервере, у него нет доступа к графическому интерфейсу и профилям пользователя. При использовании WScript.Shell или ЗапуститьПриложение убедитесь в следующем:

Сравнение методов: что выбрать?

Подведем итог и выберем оптимальный инструмент в зависимости от ситуации:

  1. WinSCP через командную строку: Лучший выбор для быстрой реализации простых задач «отправил-забыл» на Windows-серверах. Легко отлаживать, просто писать код.
  2. WinSCP через COM/ .NET: Рекомендуется для сложных интеграций, когда нужно анализировать структуру папок на сервере и обрабатывать ошибки на лету.
  3. cURL: Идеально подходит для систем на Linux или для минимизации стороннего софта в системе.
  4. 1С:Шина: Корпоративный стандарт для крупных систем с большим количеством интеграций.

Проанализировав все доступные варианты, мы видим, что несмотря на отсутствие встроенного объекта SFTPСоединение, экосистема 1С предоставляет достаточно инструментов для безопасной и надежной передачи данных. Выбор конкретного метода зависит от требований к безопасности, операционной среды и сложности бизнес-логики вашего обмена.

← На главную