Имя: Пароль:
1C
 
Не могу оправить файл из 1с на SFTP c использованием WinSCP
0 e053nk
 
05.10.25
23:52
Так как 1с сама не умеет пытаюсь отправить с помощью конструкции:
	ПутьWinSCP="C:\Program Files (x86)\WinSCP\WinSCP.com"; 
	// ПрофильWinSCP="ObmenBI";
	 ПрофильWinSCP="sftp://логин:пароль@сервер:порт/";
	 
	 Лок_ИмяФайла=Путь;
	 Внеш_ИмяФайла="";
	СтрокаПрограммы = """" + ПутьWinSCP + """" + " /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """put -delete " + Лок_ИмяФайла + "\*.csv " + Внеш_ИмяФайла + """ " + """close"" ""exit""";
	net = Новый COMОбъект("WScript.Shell");
	Результат = net.Run(СтрокаПрограммы, 0, Истина); 


1с задумывается не надолго, но ничего не происходит -в Результат приходит 0, код ошибки 0.
При этом ни в логах 1с, ни в логах WinSCP вообще ничего не пишется.

Если беру СтрокаПрограммы ,сформированную уже, копирую в командную строку-обмен проходит, в логе WinSCP виды шаги обмена.

Почему 1с не может запусить этот процесс?
Платформа 8.3, 27
Запуск делаю на сервере 1с (сижу в терминале), Win Server2016
1 Asmody
 
06.10.25
01:06
(0) нафиг com-объект?
2 e053nk
 
06.10.25
01:09
Что нашел на просторах Интернета. Если есть еще варианты-просветите, может чего не понял в реализации обмена.
3 b_ru
 
06.10.25
04:27
КомандаСистемы же есть, не нужен COM.
Надо так:
СтрокаПрограммы = СтрокаПрограммы + " >>C:\Temp\log.txt" // сохраним текст, который написала winscp в консоль, может ошибку прочтем. Ессно каталог такой должен быть и в него должна быть разрешена запись
КомандаСистемы(СтрокаПрограммы);
4 PuhUfa
 
06.10.25
06:23
(0) >>Запуск делаю на сервере 1с (сижу в терминале), Win Server2016
А сервер 1С под кем запущен? А соответствующие права у этого пользователя есть?
А на сервере 1С WinSCP.com то вообще есть?
5 1Снег
 
06.10.25
06:54
Скорее всего winscp предлагает ключ обмена добавить в реестр. А чтобы не спрашивал, надо указывать ключ что-то типа
-hostkey="ssh-rsa 2048 31:3a:7a:3d........"
6 e053nk
 
06.10.25
08:47
(3) попробую КомандаСистемы. Там, где информацию по строке запуска находил, везде почему то Новый COMОбъект("WScript.Shell") рекомендуют. Стандартные методы запуска 1с, по их словам, работают иногда некорректно.
(4) Сервер 1С запущен под своей учеткой (USR1cv8).Какие права нужно ему дать?WinSCP.com -стоит, иначе бы из командной строки не запускался.
(5) Про ключ -hostkey= читал, но не понял, как он формируется. Он от сервера SFTP должен приходить? Или какое то всегда постоянное значение имеет? И почему тогда из командной строки обмен проходит без этого ключа?
7 e053nk
 
06.10.25
09:07
(6) После выполнения :
СтрокаПрограммы = СтрокаПрограммы + " >>C:\Temp\log.txt"
КомандаСистемы(СтрокаПрограммы)

файл log.txt создается, но он пустой.
Да и выполнение КомандаСистемы идет на клиенте, а  нужно будет регламентом выгружать файлы на сервере.
Но в целях отладки пробовать можно. Пока создается впечатление, что из под 1с даже до запуска WinSCP.com не доходит.
8 Галахад
 
гуру
06.10.25
09:42
Вот так делал:

            Сессия = Новый COMОбъект("WinSCP.Session");
            
            Параметры = Новый COMОбъект("WinSCP.SessionOptions");
            Для каждого Элемент Из НастройкиПодключения Цикл
                Параметры[Элемент.Ключ] = Элемент.Значение;
            КонецЦикла;
            
            Сессия.Open(Параметры);
            
            Результат = Сессия.PutFiles(Источник, Получатель);
            Результат.Check();
            
            Сессия.Dispose();
9 Галахад
 
гуру
06.10.25
09:44
Коммент для админа:
Для выгрузки на sFTP нужно будет установить у себя программу WinSCP и зарегистрировать dll, выполнив в командной строке:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe "C:\Program Files (x86)\WinSCP\winscpnet.dll" /codebase /tlb:WinSCPnet.tlb
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "C:\Program Files (x86)\WinSCP\winscpnet.dll" /codebase /tlb:WinSCPnet.tlb
10 Kongo2019
 
06.10.25
09:56
(0) А может нафиг ее эту WinSCP.
У меня скрипт на питоне отлично справляется.
11 Галахад
 
гуру
06.10.25
10:04
Кстати, видимо свеженькие платформы могут работать с SFTP без костылей.
12 e053nk
 
06.10.25
10:05
(10) ну, я готов к экспериментам. Делитесь, если возможно. (8) Такое не пробовал,в  "НастройкиПодключения" что нужно подгружать? Те же параметры , что и в командной строке
или там свои наборы ключей?
13 e053nk
 
06.10.25
10:05
(11) нет,не подтверждено. только конфигуратор
14 bmitkin
 
06.10.25
10:06
Могу посоветовать попробовать curl:
https://curl.se/docs/tutorial.html

curl -T uploadfile -u user:passwd ftp://ftp.example.com/myfile
15 e053nk
 
06.10.25
10:08
(14)  curl работает с SFTP ?
16 bmitkin
 
06.10.25
10:11
(15) Сам SFTP не пробовал, но в Tutorial про него есть.
17 Галахад
 
гуру
06.10.25
10:15
(12) Тоже самое:
    НастройкиПодключения = Новый Структура;
    НастройкиПодключения.Вставить("HostName", "");
    НастройкиПодключения.Вставить("UserName", "");
    НастройкиПодключения.Вставить("Password", "");
    НастройкиПодключения.Вставить("PortNumber", "");
    НастройкиПодключения.Вставить("SshHostKeyFingerprint", "");
18 e053nk
 
06.10.25
10:44
а как проверить -есть у пользователя права на создание Новый COMОбъект( ) или нет? Может у меня на учетку USR1cv8 ограничения стоят, а я в синтаксис WinSCP упираюсь. Есть какой то способ проверки?