Каталог решений - Пример загрузки/выгрузки файлов на SFTP сервер из 1С

Пример загрузки/выгрузки файлов на SFTP сервер из 1С

Пример загрузки/выгрузки файлов на SFTP сервер из 1С

В наличии

К сожалению 1С пока не позволяет своими средствами обмениваться файлами с SFTP сервером.
Столкнувшись с этой проблемой, оптимальным для себя выбрал вариант с использованием бесплатного SFTP клиента:WinSCP.
Я не нашел в сети примеров работы 1С с этой утилитой через COM-соединение, поэтому выкладываю свой. Возможно кому-то будет полезен.

Категория:

Описание

Первом делом необходимо скачать установочный пакет (можно так же использовать portable-версию) и COM-библиотеку с сайта WinSCP и зарегистрировать ее:

%WINDIR%\Microsoft.NET\Framework\версия\RegAsm.exe WinSCP.dll /codebase /tlb

Подробнее об установке здесь

Теперь можно работать с ней из 1С: 

//СОЕДИНЕНИЕ
	Попытка
		
		//Задаем параметры подключения
		sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
		sessionOptions.HostName = "example.com";
		sessionOptions.UserName = "user";
		sessionOptions.Password = "mypassword";
		sessionOptions.SshHostKeyFingerprint = "ssh-rsa 1024 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx";
		
		
		session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
		
		//параметр необходимо использовать если пути регистрации DLL и исполняемого файла различны
		session.ExecutablePath = "C:\Program Files (x86)\WinSCP\winscp.exe";
		
		// Подключаемся
		session.Open(sessionOptions);
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат;
	КонецПопытки;
	
	//ВЫГРУЗКА
	Попытка
		ПутьВыгрузки = Объект.КаталогВыгрузки+"*";
		ПутьЗагрузкиНаФТП = Объект.КаталогЗагрузкиНаФТПСервере;
		
		//Выгружаем файлы
		transferResult = session.PutFiles(ПутьВыгрузки, ПутьЗагрузкиНаФТП);
		
		//Проверяем результат на возможные ошибки
		transferResult.Check();
		
		//Обрабатываем результат выгрузки
		Для каждого ВыгруженныйФайл Из transferResult.Transfers Цикл
			Сообщить("Выгружен файл: "+ВыгруженныйФайл.FileName);
			ПереместитьФайл(ВыгруженныйФайл.FileName, ХранилищеВыгруженныхФайлов);
		КонецЦикла;	
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	
	//ЗАГРУЗКА
	Попытка
		ПутьЗагрузки = Объект.КаталогЗагрузки+"\*";
		ПутьВыгрузкиНаФТП = Объект.КаталогВыгрузкиНаФТПСервере;
		
		//Загружаем файлы с удаленного сервера
		transferResult = session.GetFiles(ПутьВыгрузкиНаФТП, ПутьЗагрузки);
		
		//Проверяем возможные ошибки
		transferResult.Check();
		
		//Обрабатываем результат
		Для каждого ЗагруженныйФайл Из transferResult.Transfers Цикл
			Сообщить("Загружен файл: "+ЗагруженныйФайл.FileName);
			session.RemoveFiles(ЗагруженныйФайл.FileName); //Удаляем уже скаченные файлы
		КонецЦикла;
		
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;		
	
	//Разрываем соединение
	session.Dispose();

Все необходимые файлы и пример обработки обмена во вложении.

Я привел пример только основных возможностей, которые сам использовал. У библиотеки довольно много классов и методов и при необходимости возможности использования можно значительно расширить. Мануал здесь

Пример работы с WinSCP через командную строку

has been added to your cart:
Оформление заказа