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

30.07.13

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

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

Скачать файлы

Наименование Файл Версия Размер
ЗагрузкаВыгрузкаНаSFTP.epf
.epf 7,69Kb
165
.epf 7,69Kb 165 Скачать
winscp515.zip
.zip 3,67Mb
67
.zip 3,67Mb 67 Скачать
winscp515automation.zip
.zip 41,19Kb
73
.zip 41,19Kb 73 Скачать

Первом делом необходимо скачать установочный пакет (можно так же использовать 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 через командную строку

См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134910    722    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68401    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Воспользовались более 79 предприятий! | Предлагаем приобрести готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | В продаже с 2020г. | Оперативно обновляем правила до актуальных релизов 1С | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

43450 34760 руб.

03.12.2020    34164    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 1С:Управление торговлей 11 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.87.x) и УТ 11.5 (11.5.16.x).

28000 25200 руб.

23.07.2020    46273    196    64    

156

Перенос данных из Парус 10 в ЗГУ ред.3

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Обмен между базами 1C Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9203    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.223.x) и БП 3.0 (3.0.149.x). Правила подходят для версии ПРОФ и КОРП.

28000 25200 руб.

15.12.2021    20232    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

Обмен между базами 1C Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 45650 руб.

10.07.2018    67434    41    122    

46

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150693    367    375    

501
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. LexSeIch 210 31.07.13 11:10 Сейчас в теме
Мир этому дому!
Спасибо за интересную информацию - взял на заметку. Отдельное спасибо за ссылки по теме - будем разбираться.
kashafeev; krosaf4eg; ram3; +3 Ответить
2. Vladuha 31.07.13 12:08 Сейчас в теме
Так ведь 8.3 умеет ЗащищенноеСоединениеOpenSSL
4. awk 741 31.07.13 17:39 Сейчас в теме
(2) Vladuha, SFTP и FTPS - это разные вещи. SFTP - это фтп ssh сервера, а FTPS - это фтп через SSL/TLS.
SagittariusA; Orlando Skibraves; CratosX; krosaf4eg; kashafeev; ram3; +6 Ответить
5. Vladuha 31.07.13 17:48 Сейчас в теме
(4) awk, ваша правда, перепутал
7. vano-ekt 123 01.08.13 15:39 Сейчас в теме
(4) о я тоже думал 8.3 SSL научили, а там тунели запилили
3. ram3 165 31.07.13 12:32 Сейчас в теме
Да действительно, заявлено что 8.3 умеет устанавливать FTPСоединение по SSL, не пробовал. Я привел рабочий пример для 8.2. Спасибо за информацию
6. vano-ekt 123 01.08.13 15:37 Сейчас в теме
норм, а я когда-то лет 7 назад для 8.1 настраивал какого-то ftp-клиента на сервере, прописывал профили, а потом вызывал через КомандаСистемы...
COM - это хорошо
а 8.3 - лучше :)
8. ram3 165 02.08.13 14:53 Сейчас в теме
(6) vano-ekt,
Как выяснилось, 8.3 тоже не умеет работать с SFTP
9. Aragorn 13.08.13 16:01 Сейчас в теме
Спасибо, свое время тоже пришлось поизвращатся с sftp
10. d_control 3 27.01.14 16:33 Сейчас в теме
Добрый день!
Очень благодарен за информацию!

Только у меня не получается подключиться.
Не пойму что нужно указать в поле "SshHostKeyFingerprint"
где взять значение для этого поля?

Через обычного клиента WinSCP подключаюсь нормально. Там просто указываю адрес, юзера и пароль.
11. d_control 3 27.01.14 16:40 Сейчас в теме
Всё, нашел... прошу прощения за неумный вопрос :)
15. sandybaev 196 28.08.14 14:50 Сейчас в теме
(11) d_control, что нашел?
kuznetsov1c; user671801_674711; NDN; +3 Ответить
12. cool.vlad4 2 27.01.14 16:53 Сейчас в теме
http://habrahabr.ru/company/Centrobit/blog/165441/
Вывод: данная реализация позволяет передавать файлы из 1С: Предприятие 8.2. большого размера по защищенному протоколу SFTP. Плюс появляется возможность переносить часть функционала из 1С во внешнюю компоненту, что защищает написанный код и позволяет реализовывать дополнительный, не доступный 1С функционал.

исходники открыты.
69. CratosX 112 16.01.19 13:21 Сейчас в теме
(12) на хабре написали в 2015, что исходники были потеряны
70. cool.vlad4 2 31.01.19 18:25 Сейчас в теме
(69) ты на дату моего поста посмотри
13. John83 26.05.14 16:49 Сейчас в теме
Установил приложение, зарегил библиотеку, но все равно при попытке создать COM-объект в 1С, ругается
{Форма.Форма.Форма(17)}: Ошибка при вызове конструктора (COMОбъект): Класс не зарегистрирован: Класс не зарегистрирован
Кто-нибудь сталкивался?
14. ram3 165 26.05.14 17:47 Сейчас в теме
78. Maznud 28.05.21 09:32 Сейчас в теме
(13)Здравствуйте, как решили проблему?
80. John83 28.05.21 12:45 Сейчас в теме
(78) вообще не помню - уж почти десять лет прошло
81. John83 31.05.21 11:28 Сейчас в теме
16. sandybaev 196 29.08.14 07:00 Сейчас в теме
Ребята, а что таки писать в поле sessionOptions.SshHostKeyFingerprint ?

я вот пишу так:

sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 67:13:89:75:aa:5f:b4:9b:e2:f2:da:87:41:a1:d2:d1";


система мне отвечает так:
Соединение неожиданно разорвано. Сервер вернул код завершения команды 0.

вот от куда беру код:


Прикрепленные файлы:
Roman_Loginov; +1 Ответить
17. ram3 165 29.08.14 11:38 Сейчас в теме
(16) sandybaev,
какая именно команда возвращает ошибку, .Open ? С этими же параметрами через саму программу подключиться удается?
18. sandybaev 196 02.09.14 06:57 Сейчас в теме
(17) ram3, Все, брат. Получилось. В параметр SshHostKeyFingerprint Я передал публичный ключ сгенерированный самим sftp серваком. А ошибка подключения была в изменненом пароле администратора (я об этом узнал потом).

Огромное спасибо вроде все заработало.

ТОлько единственное не пойму зачем ты перемещаешь файл этой командой -
ПереместитьФайл(ВыгруженныйФайл.FileName, ХранилищеВыгруженныхФайлов);

Если на сервер ты уже закидываешь эти файлы командой

session.PutFiles(ПутьВыгрузки, ПутьЗагрузкиНаФТП); ?

Roman_Loginov; +1 Ответить
19. ram3 165 02.09.14 09:53 Сейчас в теме
(18) sandybaev,
.PutFiles это выгрузка на сервер, а мне еще нужно было сохранять локально все успешно выгруженные файлы, поэтому я сначала проверял результат .Check() , а потом в цикле по коллекции результатов выгрузки сохранял эти же файлы локально, для истории
20. sandybaev 196 05.09.14 06:10 Сейчас в теме
34. ferre 17.07.15 12:11 Сейчас в теме
Помогите
Как подключится без пароля с приват ключем.

sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
sessionOptions.HostName = "1.1.1.1";
sessionOptions.UserName = "log";
//sessionOptions.Password = "mypassword";
sessionOptions.PortNumber = "22";
sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 010101010110101001012010";
sessionOptions.SshPrivateKeyPath = "С:\1111.ppk";

session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
//параметр необходимо использовать если пути регистрации DLL и исполняемого файла различны
session.ExecutablePath = "C:\Program Files (x86)\WinSCP\winscp.exe";

// Подключаемся
session.Open(sessionOptions);

Ошибка:
{Обработка.Обработка1.Форма.Форма.Форма(20)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (WinSCPnet): Disconnected: No supported authentication methods available (server sent: publickey)
cafune; kuznetsov1c; +2 Ответить
35. nytlenc 12.02.16 09:18 Сейчас в теме
(34) ferre, файл ключ с паролем?
36. nytlenc 12.02.16 09:18 Сейчас в теме
(34) ferre, если да то добавь sessionOptions.SshPrivateKeyPassphrase = "ТвойПарольНаКлюч";
77. kuznetsov1c 17 26.02.21 22:31 Сейчас в теме
(34) Получилось? У меня такая же проблема
21. sandybaev 196 08.09.14 13:21 Сейчас в теме
(19) ram3,
Не подскажешь.
Как теперь я могу создавать и менять папки на sftp серваке.
Просто тут пишу обработку для обмена а она по ТЗ должна уметь создавать и менять папки.

Заранее спасибо.
22. ram3 165 08.09.14 16:10 Сейчас в теме
(21) sandybaev,
создавать - CreateDirectory, читай мануалы http://winscp.net/eng/docs/library_session , думаю там все найдешь.
и плюсани уж за публикацию)
AlekseyBelyy; sandybaev; +2 Ответить
23. sandybaev 196 10.09.14 08:06 Сейчас в теме
(22) ram3, Все, плюсанул вроде как. Почитаю на досуге. Спасибо большое. Тебе бы дальше эту тему развить. желательно с обилием скринов :)
24. kashafeev 11.09.14 05:16 Сейчас в теме
(22) ram3, отличная публикация! Есть вопрос по такой задаче: необходимо синхронизировать файлы командой SynchronizeDirectories. Пишу:

transferResult = session.SynchronizeDirectories(Local, ПутьЗагрузкиЛокальный, ПутьКФайламНаСервере, Ложь, Ложь, , "*.wav");

Но не знаю, что ставить в первый параметр. По-идее, там должен быть класс SynchronizationMode mode (Например: SynchronizationMode.Local, SynchronizationMode.Remote and SynchronizationMode.Both).

Как его объявить в 1С?
25. ram3 165 11.09.14 11:49 Сейчас в теме
(24) kashafeev,
думаю можно так:
SynchronizationMode = Новый COMОбъект("WinSCP.SynchronizationMode");

но не уверен, надо пробовать.
26. kashafeev 11.09.14 09:51 Сейчас в теме
(25) ram3, пробовал, не получилось. Есть ещё какие-нибудь предложения?
27. ram3 165 11.09.14 12:27 Сейчас в теме
(26) kashafeev,
а так:
WinSCP = Новый COMОбъект("WinSCP");
SynchronizationMode = WinSCP.SynchronizationMode;

мне это не нужно было, сейчас к сожалению времени нет разбираться. Посмотри примеры на сайте разработчика, может что найдешь
31. dagroma 116 03.11.14 13:25 Сейчас в теме
(26) kashafeev,
SynchronizationMode mode: 0 - local, 1 - remote, , 2 - both
SynchronizationCriteria criteria: 0 - None, 1 - Time, 2 - Size, 3 - Either
28. Пользователь 1С 3 22.09.14 19:51 Сейчас в теме
Для 7.7 нечто подобное реально?
29. ram3 165 25.09.14 11:11 Сейчас в теме
(28) Пользователь 1С, почему нет? С COM Объектами 7.7 вроде как умеет. Код только немного переписать
30. krosaf4eg 46 30.10.14 01:55 Сейчас в теме
спасибо за чудесную реализацию!!!
в сети навалом обработок, но все они работают через командную строку, а тут COM-соединение. То что доктор прописал )))) в благодарность скачал, хотя и качать ничего не нужно, все понятно из текста статьи
32. basta-one2007 27.01.15 19:34 Сейчас в теме
Спасибо большое. Статья очень помогла.
33. sandybaev 196 10.02.15 15:09 Сейчас в теме
ребята помогите
есть коренвая директория сервера /public

в ней я программно создаю поддиректорию командой session.CreateDirectory("/public" + "ОбластьКонтрагента")

все ок, создается теперь надо дальше в директории области контрагента создать еще одну папку (последнюю) под названием "НаименованиеКонтрагента"

как это сделать через функции WinSCPnet.dll?

перерыл из форум и хэлп, ничего нет.
37. Dimka74 09.04.16 22:29 Сейчас в теме
Коллеги, подскажите как зарегистрировать WinSCP.dll, дело в том, что я в принципе такого файла найти не могу, нашел WinSCPnet.dll.
Зарегистрировал библиотеку командой

%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb

в ответ получил

Типы зарегистрированы успешно
Сборка экспортирована в "C:\Windows\system32\WinSCPnet.tlb"; библиотека типов зарегистрирована успешно


Пытаюсь соединиться по sftp, 1 ска выдает ошибку:
{ОбщийМодуль.МойМодуль.Модуль(296)}: Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Недопустимая строка с указанием класса


Что не так сделано?
38. ram3 165 11.04.16 11:23 Сейчас в теме
(37) Dimka74,
Коллеги, подскажите как зарегистрировать WinSCP.dll, дело в том, что я в принципе такого файла найти не могу, нашел WinSCPnet.dll.

(37) Dimka74, в статье описание для версии 515, возможно сейчас что-то изменилось. Здесь есть вся информация по установке и регистрации http://winscp.net/eng/docs/library_install#registering
39. Dimka74 11.04.16 20:50 Сейчас в теме
(38) Спасибо за ответ, от туда информацию и черпал.
Может быть теперь ошибка в коде 1с?
Если изменилась библиотека, быть может теперь надо и код 1с править?
Например раньше надо было так:
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions

а сейчас надо так:
sessionOptions = Новый COMОбъект("WinSCPnet.SessionOptions"); //Создаем объект SessionOptions


Хотя может быть мои знания устарели, и передача файла по SFTP в 1с возможна без лишних плясок - напрямую из платформы?
40. ram3 165 12.04.16 10:05 Сейчас в теме
(39) Dimka74,
Может быть теперь ошибка в коде 1с?
Если изменилась библиотека, быть может теперь надо и код 1с править?

Я бы не стал называть это ошибкой, с версией 515 все работает. Если хотите использовать свежую версию, возможно придется адаптировать код. В заголовке статьи написано ПРИМЕР, это не готовое решение на все времена, и пожизненную поддержку никто не обещал.
Хотя может быть мои знания устарели, и передача файла по SFTP в 1с возможна без лишних плясок - напрямую из платформы?

На сколько я знаю, платформа 1С пока не поддерживает sFTP, только FTPS.

92. KAV2 156 01.09.23 20:50 Сейчас в теме
На версии WinSCP 5.21 работает с вариантом COMОбъект("WinSCP.SessionOptions").

Однако если версия платформы 64-битная, необходимо (согласно документации) зарегить 32\64 бит:
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe" WinSCPnet.dll /codebase /tlb:WinSCPnet64.tlb
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" WinSCPnet.dll /codebase /tlb:WinSCPnet.tlb (или WinSCPnet32.tlb)
79. Maznud 28.05.21 09:40 Сейчас в теме
(37) Здравствуйте ,как решили проблему?
41. shved 13.08.16 08:26 Сейчас в теме
что значит ошибка:
{ВнешняяОбработка.WinSCP.Форма.Форма.Форма(51)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (WinSCPnet): Алгоритм обмена ключей diffie-hellman-group1-sha1 не был проверен!

как проверить алгоритм?
42. shved 13.08.16 08:30 Сейчас в теме

при подключение оболочкой спрашивает про тоже самое, но тут можно нажать ДА и все ок.
а как нажать Да через КОМ-соединение?
43. shved 13.08.16 08:58 Сейчас в теме
в оболочке нашел как сдвинуть свой алгоритм наверх.
но как в ком... пока ищю
добавил в парамтерах сессии
bool GiveUpSecurityAndAcceptAnyTlsHostCertificate Give up security and accept any FTPS/WebDAVS server TLS/SSL certificate. To be used in exceptional situations only, when security is not required. When set, log files will include warning about insecure connection. To maintain security, use TlsHostCertificateFingerprint.
но не помогло
Прикрепленные файлы:
44. shved 13.08.16 10:06 Сейчас в теме
версия последняя на седня 5.9.1. так и не победил.
искать старые может. в них видимо такой проверки не было
45. shved 16.08.16 21:16 Сейчас в теме
победил!
sessionOptions.AddRawSettings("Cipher", "des,aes,chacha20,blowfish,3des,arcfour,WARN");
sessionOptions.AddRawSettings("KEX", "dh-group1-sha1,ecdh,dh-gex-sha1,dh-group14-sha1,rsa,WARN");
46. KokaDu 4 12.10.16 22:36 Сейчас в теме
Коллеги, после установки 1С платформы 8.3.9 и обновления WinSCP на 5.9.2 у меня просто "Неизвестная ошибка"
{ВнешняяОбработка.ЗагрузкаФайлаСFTPСервера.Форма.Форма.Форма(92)}: Ошибка при вызове метода контекста (Open)
session.Open(sessionOptions);
по причине:
Неизвестная ошибка
Даже и не знаю куда копать. Может кто подскажет?
47. ram3 165 13.10.16 15:06 Сейчас в теме
(46) KokaDu, два варианта: либо качать старую версию WinSCP, либо смотреть документацию по новой версии и менять вызов метода .Open, видимо здесь "sessionOptions" что-то не соответствует новой версии.
Уже были проблемы с новой версией выше в комментариях. Я с WinSCP уже давно не работаю, проверить к сожалению не могу...
48. KokaDu 4 14.10.16 13:48 Сейчас в теме
(47) ram3, перерыл документацию, ничего нового по "Open" не нашел.
Проблему обошел тем, что создал bat-ник из самого WinSCP , который запускается из 1С.
В любом случае спасибо.
50. Shooroopik111 131 02.02.17 19:02 Сейчас в теме
(48)
(47) ram3, перерыл документацию, ничего нового по "Open" не нашел.
Проблему обошел тем, что создал bat-ник из самого WinSCP , который запускается из 1С.
В любом случае спасибо.

Проблема ошибки OPEN встала очень остро.
Переход на старую версию не помог. ВЫявил следующую закономерность: при простой регистрации компоненты через командную строку и работе на клиенте все ок.
Как только регистрируем компоненту в службе компонентов чтоб работало на серваке- ловим ошибку OPEN. Может быть кто то победил ее?
52. ABudnikov 3 13.03.17 17:15 Сейчас в теме
(50) столкнулся с такой же проблемой. Вам удалось победить регистрацию WinSCP для работы на сервере?
49. Bujnovskij_Pavel 26.10.16 13:25 Сейчас в теме
Спасибо большое!! Очень помогли
51. KokaDu 4 03.02.17 08:39 Сейчас в теме
Сделайте батник по работе с WinSCP, пример во вложении.
Прикрепленные файлы:
PutSFTP.txt
53. KokaDu 4 13.03.17 20:51 Сейчас в теме
После регистрация WinSCP как 64 битного приложения проблема с OPEN остаётся.

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

У меня есть еще решение с использованием Putty, если будет интересно, тоже могу поделиться.
Прикрепленные файлы:
GetSFTP.txt
PutSFTP.txt
59. Anastasia_Obrokova 20.10.17 11:14 Сейчас в теме
Очень интересно решение с использованием Putty, если можно - поделитесь, пожалуйста.
54. shved 13.03.17 21:22 Сейчас в теме
коллеги, у меня длл регается как
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\regasm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet.tlb
сама длл тут https://winscp.net/download/WinSCP-5.9.4-Automation.zip

далее
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
		sessionOptions.HostName 				= "192.168.0.1";
		sessionOptions.UserName 				= "порно";
		sessionOptions.Password 				= "секс";
		sessionOptions.PortNumber 				= 22;
		sessionOptions.SshHostKeyFingerprint 	= "ssh-rsa 1024 7d:43:b7:43:05:30:01:3a:9f:e6:75:d8:29:e6:ca:fd";
		
		sessionOptions.AddRawSettings("Cipher", "des,aes,chacha20,blowfish,3des,arcfour,WARN");
		sessionOptions.AddRawSettings("KEX", "dh-group1-sha1,ecdh,dh-gex-sha1,dh-group14-sha1,rsa,WARN");
		
        session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
	
		// Подключаемся
		session.Open(sessionOptions);
Показать


далее послать принять как обычно

ПС вин2008р2 64. 1с8*64
teembox; aleksey.kubovtsov; +2 Ответить
55. ABudnikov 3 14.03.17 09:10 Сейчас в теме
(54) Спасибо. Заработало. Только я последовательно выполнил
%WINDIR%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet32.tlb
%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe WinSCPnet.dll /codebase /tlb:WinSCPnet64.tlb
на всякий случай чтоб в двух вариантах работало.
И всё заработало.
KAV2; Ivan_777777; KrylovK; Shaldryn; vic_v_v; +5 Ответить
62. Shaldryn 21.02.18 22:28 Сейчас в теме
(55) походу из за того что сервер 1С 64 битный и оська 64 битная, спасибо, помогло
56. denium 117 25.05.17 09:43 Сейчас в теме
Хотел бы добавить, что лично у меня алгоритм шифрования был иной, тогда нужно применить несколько иной метод соединения.

 //Задаем параметры подключения
sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
sessionOptions.ParseUrl("ftpes://User:Pasword@некий.сайт.ru"); 
sessionOptions.TlsHostCertificateFingerprint  =  "XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:04:XX:XX:XX:XX:XX:XX:XX";
session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
//параметр необходимо использовать если пути регистрации DLL и исполняемого файла различны
session.ExecutablePath = "C:\Program Files\WinSCP\winscp.exe";
// Подключаемся
session.Open(sessionOptions);
Показать
Прикрепленные файлы:
57. Dach 372 20.07.17 16:44 Сейчас в теме
Спасибо за статью.

Немного покурив интернеты и мануал, выяснил, что библиотека умеет работать не только с SFTP, но и с FTPS.

Вот рабочий программный код для FTPS, удобно сделать из него функции типа ОтправитьФайлы(), ПолучитьФайлы() и т.д.

//пример использования
//http://infostart.ru/public/195851/

//регистрация компоненты в cmd 
//c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "c:\Program Files (x86)\WinSCP\WinSCPnet.dll" /codebase /tlb

//мануал по DotNet
//https://winscp.net/eng/docs/library
	
Попытка
        
	//Задаем параметры подключения
    sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions
	
	//параметры сессии для SSH (SFTP)
	
	//sessionOptions.HostName = АдресСервера + ":" + Порт;
	//sessionOptions.UserName = Логин;
	//sessionOptions.Password = Пароль;                
	//sessionOptions.SshHostKeyFingerprint = "e0:f9:27:4c:37:28:ba:56:d4:3d:5f:27:e3:32:48:b2:79:f7:03:9c"; //ключ SSH-сертификата сервера	
	
	//параметры сессии для SSL (FTPS)
	
	УРЛ = "ftps://" + Логин + ":" + Пароль + "@" + АдресСервера;
	
	sessionOptions.ParseUrl(УРЛ); 
	//sessionOptions.TlsHostCertificateFingerprint="e0:f9:27:4c:37:28:ba:56:d4:3d:5f:27:e3:32:48:b2:79:f7:03:9c"; //ключ TLS-сертификата (можно посмотреть его, выполнив коннект из самой WinSCP)
	
	//или задать вот это свойство
	sessionOptions.GiveUpSecurityAndAcceptAnyTlsHostCertificate = Истина;
	
	session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
   
    session.ExecutablePath = "C:\Program Files (x86)\WinSCP\winscp.exe";
        
    // Подключаемся
    session.Open(sessionOptions);
		
Исключение
		
	Сообщить(ОписаниеОшибки());
	
КонецПопытки;

//ЗАГРУЗКА с FTP
Попытка
	
	ПутьЗагрузки = "c:\Temp\";
	ПутьНаФТП = "/Rex_In/otrabot/test.xml";
	
	УдалятьФайлыНаФтпПослеЗагрузки = Ложь;
        
	//Загружаем файлы с удаленного сервера
	transferResult = session.GetFiles(ПутьНаФТП, ПутьЗагрузки, УдалятьФайлыНаФтпПослеЗагрузки);
        
	//Проверяем возможные ошибки
	ФайлыУспешноЗагружены = transferResult.Check();
        
	//Обрабатываем результат
	Для каждого ЗагруженныйФайл Из transferResult.Transfers Цикл
		Сообщить("Загружен файл: " + ЗагруженныйФайл.FileName);
		//session.RemoveFiles(ЗагруженныйФайл.FileName); //Удаляем уже скаченные файлы
	КонецЦикла;
        
Исключение
	
	Сообщить(ОписаниеОшибки());
	
КонецПопытки;

//УДАЛЕНИЕ на FTP
Попытка
	ПутьНаФТП = "/Rex_In/otrabot/test.xml";
	session.RemoveFiles(ПутьНаФТП);
Исключение	
	Сообщить(ОписаниеОшибки());	
КонецПопытки;	

//ВЫГРУЗКА на FTP
Попытка
	
	ПутьКФайлам = "c:\Temp";
	ПутьНаФТП = "/Rex_In/otrabot";
        
	//Выгружаем файлы
	УдалятьФайлыПослеВыгрузкиНаФТП = Ложь;
	
	transferResult = session.PutFiles(ПутьКФайлам, ПутьНаФТП, УдалятьФайлыПослеВыгрузкиНаФТП);
        
	//Проверяем результат на возможные ошибки
	transferResult.Check();
        
	//Обрабатываем результат выгрузки
	Для каждого ВыгруженныйФайл Из transferResult.Transfers Цикл
		Сообщить("Выгружен файл: " + ВыгруженныйФайл.FileName);
		//ПереместитьФайл(ВыгруженныйФайл.FileName, ХранилищеВыгруженныхФайлов);
	КонецЦикла;
	
Исключение
	
	Сообщить(ОписаниеОшибки());
	
КонецПопытки;
    
//Разрываем соединение
session.Dispose();
Показать
vic_v_v; ram3; +2 Ответить
58. spetrov77 07.08.17 17:28 Сейчас в теме
Хотел добавить, если вы устанавливаете FTPES соединение
УРЛ = "ftpes://" + Логин + ":" + Пароль + "@" + АдресСервера;
sessionOptions.ParseUrl(УРЛ);

необходима версия WINSCP 5.9.2 и выше
60. alex_gbi 103 07.01.18 19:39 Сейчас в теме
Как выяснилось WinSCP любит .NET framework 2.0 больше чем 4.5
Если у вас появляется ошибка 0x80131700 то стоит установить 2.0.
Возможно кому то помог.
krosaf4eg; +1 Ответить
61. sandybaev 196 15.02.18 14:56 Сейчас в теме
Добавлю к "как выяснилось" к посту выше

скачав с их офф сайта winSCPnet.dll - регистрируете через RegAsm но согласно разрядности вашей ОС.

т.е. для win64 это путь - C:\Windows\Microsoft.NET\Framework64\v4.0.30319
или
для win32 это - C:\Windows\Microsoft.NET\Framework\v4.0.30319

да и если работаете в клиент серверном варианте, то, версия утилиты на сервере должна совпасть с вашей локальной установкой.
Roman_Loginov; +1 Ответить
63. pomestnik 50 15.03.18 13:44 Сейчас в теме
Чтобы не париться с SshHostKeyFingerprint
можно так сделать:

fingerprint = session.ScanFingerprint(sessionOptions,"SHA-256");
sessionOptions.SshHostKeyFingerprint = fingerprint;
Seneka7608; Xytras; LifeRock; gglvov; kf8b31; +5 Ответить
74. MasI 9 09.10.20 14:14 Сейчас в теме
Добрый день!

попробовал написать так как написано у Вас, выдает ошибку

{ВнешняяОбработка.ОбменСSFTP.Форма.Форма.Форма(24)}: Метод объекта не обнаружен (ScanFingerprint)

подскажите почему такая ошибка может выдаваться?
64. pinkz80 150 06.09.18 12:17 Сейчас в теме
Немного не в тему, но с FTPS тоже долго искал инфу, пришлось справку читать :)
Сервер = Новый FTPСоединение(ИПFTP, 21,ЛогинFTP,ПарольFTP,,Истина,300,,УровеньИспользованияЗащищенногоСоединенияFTP.ИспользоватьЕслиВозможно);

на удивление заработало. 8.3.11, в режиме совместимости 8.2.16
65. ram3 165 06.09.18 12:44 Сейчас в теме
(64) SFTP и FTPS - это разные вещи
66. user776571 31.10.18 10:53 Сейчас в теме
Мои 5 копеек:
// Подключаемся

session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session
session.open(sessionOptions);

версия WinSCP 5.11.3
67. ram3 165 31.10.18 11:37 Сейчас в теме
68. user776571 31.10.18 12:17 Сейчас в теме
(67) в моих глазах ))), в исходном примере потерял )))
71. Bale 19.07.19 11:06 Сейчас в теме
Подскажите пожалуйста, я могу получить файлы (например *.txt) с sFTP, не выгружая в каталог на диске, а сразу в 1С?
72. MasI 9 21.07.20 13:15 Сейчас в теме
Добрый день! подскажите можно же выгружать файл txt из 1с в каталог и отправлять на sftp сторонними средствами? Этот вариант хуже, чем использовать WinSCP ?
73. KokaDu 4 21.07.20 17:53 Сейчас в теме
Это вариант не хуже, не лучше, а альтернативный вариант.
Для примера, можете использовать putty.
75. MasI 9 14.10.20 17:23 Сейчас в теме
Добрый день!

подскажите правильно ли я понимаю, что для получения и работы с полем sessionOptions.SshHostKeyFingerprint нужно сгенерировать открытый ключ и разместить его на сервере SFTP, а приватный ключ зарегистрировать на своем компьютере и только после этого можно обращаться обработкой из 1с на sftp сервер?
76. alexey.kutya 301 09.11.20 18:51 Сейчас в теме
(75)
SshHostKeyFingerprint


добрый день,

в программе WinSCP на нужном соединении открываете Manage - Generate Session URL/Code...
Далее на закладке URL установите опцию SSH host key.
Внизу в окне URL появится строка вида fingerprint=ecdsa-sha2-ххххххххххххххххххххххххххх
строку после fingerprint= присваиваете sessionOptions.SshHostKeyFingerprint. Это и есть ключ.
machneff; +1 Ответить
82. gonnahard 30.03.22 09:40 Сейчас в теме
Добрый день,
для тех у кого прокси :
sessionOptions.AddRawSettings("ProxyMethod", "2")    ; // SOCKS5
	sessionOptions.AddRawSettings("ProxyHost", "Имя вашего прокси сервера")    ;	
	sessionOptions.AddRawSettings("ProxyPort", "ваш прокси порт")                           ;
	sessionOptions.AddRawSettings("ProxyUsername", "Имя пользователя прокси")               ;
	sessionOptions.AddRawSettings("ProxyPassword", "пароль пользователя прокси")                ;


Вот эту всю историю нужно написать до .Оpen
Seneka7608; ram3; +2 Ответить
83. varovinm 05.05.22 06:58 Сейчас в теме
Отмечу с какими сложностями столкнулся при установке библиотеки:

1. Версия библиотеки должна быть равна версии winscp. Для этого смотрим в winscp его версию: Справка -- О программе. И меняем в ссылке для скачивания библиотеки часть пути с версией. Например, если версия winscp равна 5.19.6, то ссылка меняется https://winscp.net/download/WinSCP-5.17.10-Automation.zip --> https://winscp.net/download/WinSCP-5.19.6-Automation.zip

2. При регистрации библиотеки (Приложение №3) необходимо установить рабочий каталог тот в который вы распаковали библиотеку. т.е. прежде чем в cmd исполнить %WINDIR%\Microsoft.NET\Framework\<version>\RegAsm.exe WinSCPnet.dll /codebase /tlb
необходимо исполнить cd ПутьКкаталогуБиблиотеки
Например cd C:\test

3. SshHostKeyFingerprint можно взять в winscp . Для этого подключаемся к sftp, главное меню -- соединение -- Информация о протоколе сервере. В открывшемся окне копируем значение MD5. При вставке к нему добавится ssh...
84. Roman_Loginov 26.10.22 08:55 Сейчас в теме
Добрый день, как правильно выглядит значение SshHostKeyFingerprint? Если в отпечатке сертификата в winscp есть sha-256 и sha-1
85. Roman_Loginov 26.10.22 09:28 Сейчас в теме
Вот пример скачанного winscp и пример зарегистрированного com
Прикрепленные файлы:
86. Roman_Loginov 26.10.22 09:52 Сейчас в теме
Вот такая ошибка когда доходит до кода sessionOptions.SshHostKeyFingerprint="ssh-rsa 2048 SHA256:..............";
Прикрепленные файлы:
87. Roman_Loginov 26.10.22 10:15 Сейчас в теме
Нашел решение ошибки по SshHostKeyFingerprint. Скрины приложены в каком формате должен быть и откуда.
Прикрепленные файлы:
88. Roman_Loginov 26.10.22 12:58 Сейчас в теме
Теперь другая проблема пишет сервер неожиданно закрыл соединение.
Прикрепленные файлы:
89. Roman_Loginov 26.10.22 13:00 Сейчас в теме
90. Roman_Loginov 26.10.22 14:14 Сейчас в теме
получилось открыть соединение использовал ParseUrl("s3://user:pasword@hostname/rootpath/"). Этот метод заполнил параметры соединения.
rootpath это имя бакета
Прикрепленные файлы:
91. Roman_Loginov 26.10.22 15:40 Сейчас в теме
перед этим всем чтобы код работал еще зарегистрировал comcntr.dll нужной версии платформы
Прикрепленные файлы:
Оставьте свое сообщение