Нет такого программиста 1С, который бы не сталкивался с необходимостью программно передавать данные посредством FTP.
В 90% случаев это использование протокола FTP, в 9% FTPs и в 1% это sFTP (имхо)
Сразу стоит подчеркнуть, что FTPs и sFTP не одно и тоже и кардинально отливается в реализации.
Для любопытных, но ленивых вот ссылки:
https://ru.wikipedia.org/wiki/FTPS
https://ru.wikipedia.org/wiki/SFTP
Теперь рассмотрим реализацию передачи файлов по каждому варианту.
FTP – Легко
Дано:
Передать файл «C:\My.txt» на FTP «myhost.ru/mydir/»
Сервер - myhost.ru
Порт - 21
Подкаталог - mydir
Логин – user
Пароль – pass
При этом настройка в FileZilla будет следующая:
Для реализации в 1С будем использовать следующую конструкцию:
СоединениеFTP = Новый FTPСоединение(Сервер, Порт, Логин, Пароль)
При этом для соединения будет использоваться прокси по умолчанию, и если нам нужно пойти в обход прокси или использовать «особый», то будем этот самый прокси переопределять
Прокси = Новый ИнтернетПрокси(Ложь);//Не использовать прокси по умолчанию
СоединениеFTP = Новый FTPСоединение(Сервер, Порт, Логин, Пароль, Прокси);
После создания соединения начинаем передачу
СоединениеFTP.Записать(«C:\My.txt», «mydir/My.txt»);
Все, файл там, где нужно
FTP – легко и безопасно
Дано:
Передать файл «C:\My.txt» на FTPs «myhost.ru/mydir/»
Сервер - myhost.ru
Порт - 22
Подкаталог - mydir
Логин – user
Пароль – pass
При этом настройка в FileZilla будет следующая:
В данном случае поступаем по аналогии с https-соединением, а именно добавляем описание защищенного соединения и указываем его в параметрах:
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
СоединениеFTP = Новый FTPСоединение(Сервер, Порт, Логин, Пароль,,,, ЗащищенноеСоединение);
FTP – сложно и безопасно
Дано:
Передать файл «C:\My.txt» на sFTP «myhost.ru/mydir/»
Сервер - myhost.ru
Порт - 522
Подкаталог - mydir
Логин – user
Пароль – pass
При этом настройка в FileZilla будет следующая:
Хочу Вас сразу огорчить – с данным соединением 1С не работает и стандартный класс FTPСоединение не поможет.
Для работы с sFTP нужно будет использовать сторонние продукты. Я использую WinSCP, на основе нее и опишу решение передачи.
Скачать WinSCP можно тут https://winscp.net/eng/download.php
Запускать будем с использованием скрипта, т.е. файла, где описаны действия для WinSCP
https://winscp.net/eng/docs/scripting#using_scripting
https://firstwiki.ru/index.php/WinSCP
ТекстСценария = "option batch abort
|option confirm on
|open sftp://" + Логин + ":" + Пароль + "@" + Сервер + ":" + Порт + "
|put C:\My.txt /mydir/My.txt
|exit";
ИмяФайлаСценария = ПолучитьИмяВременногоФайла(".txt");
ФайлСценария = Новый ТекстовыйДокумент;
ФайлСценария.УстановитьТекст(ТекстСценария);
ФайлСценария.Записать(ИмяФайлаСценария);
ПутьWinSCP = "C:\WinSCP\WinSCP.exe";
Команда = """" + ПутьWinSCP + """ /console /script=""" + ИмяФайлаСценария + """";
ЗапуститьПриложение(Команда,,Истина);
По результату выполнения команды файл будет отправлен.
Для ленивых приложу обработину, где в МОДУЛЕ ОБЪЕКТА есть готовые процедуры работы с sFTP.