gifts2017

Пример работы 1с 8.2 с sFTP или FTPs серверами

Опубликовал Олександр (d.alexandr) в раздел Администрирование - Системное

Думаю, что все знают, как работает 1с с FTP сервером, но вот как работать с sFTP или FTPs сервером?

Первое что Вам нужно сделать - это установить бесплатную программу WinSCP, скачать ее Вы сможете здесь, также там есть вся необходимая литература по пользованию данной программы.

После того как Вы установили программу, Вам нужно добавить сессию, там все просто, прописываете узел, порт, логин и пароль к серверу.

Так же посоветую Вам вести логи данной программы, что бы потом можно было в любой момент посмотреть из-за чего не произошел обмен данными или проверять лог на успех или не успех синхронизации файлов. Для того что бы у Вас создавался лог нужно зайти на закладку «Журнализация» установить флажок записывать у файл и выбрать путь, имя файл советую сделать таким образом !S!Y!M!D.txt, это означает, что каждый день будет создаваться новый файл для лога с таким наименованием S – имя сессии, Y – год, M – месяц, D – день, то есть Вам потом будет намного удобнее считывать данные из логов.

Теперь приступим непосредственно к программирования в 1с и для этого нам нужно только знать основные команды WinSCP, весь список которых можно посмотреть на сайте программы. А я Вам приведу только те команды которые использовал я и которых на мой взгляд хватит для того что бы 1с успешно обменивалось данными с sFTP или FTPs серверами. Также я напишу что, зачем и в какой последовательности делал:

1. Перед тем как делать синхронизацию данных, нужно проверить есть ли вообще соединение с сервером, для этого мы делаем следующее:

ПроверимСоединение = """" + ПутьWinSCP + """" + " /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + " ""close"" ""exit""";

net = Новый COMОбъект("WScript.Shell");

net.Run(ПроверимСоединение, 0, Истина);

где ПутьWinSCP – строка – путь к программе (c:\Program Files (x86)\WinSCP\WinSCP.com, ОБРАТИТЕ внимание, что расширение файла должно быть com), ПрофильWinSCP – строка – профиль сессии, то как Вы назвали Вашу сессию, к примеру test_sFTP.

2. После тога как мы выполнили предыдущую команду, настоятельно рекомендую делать следующее, искать по дате лог WinSCP и проверять его, не было ли ошибки в соединении, вариантов как это сделать много, но я делал так: с конца текста искал строку «Failed», до тех пор, пока не находил «Session name: " + ПрофильWinSCP», после этого поиск прерываем, ну и собственно если была обнаружена строка «Failed», то при подключении была ошибка.

3. Делаем синхронизацию файлов:

СтрокаСинхронизация = """" + ПутьWinSCP + """" + " /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """synchronize both " + КаталогНаСервере1С + " " + КаталогНаSFTPСервере + """ " + """ close"" ""exit""";

net = Новый COMОбъект("WScript.Shell");

net.Run(СтрокаСинхронизация, 0, Истина);

После этого снова проверяем лог.

Остальные команды которые могут Вам понадобится:

Запись файла на SFTP сервер:

СтрокаПрограммы = """" + ПутьWinSCP + """" + " /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """put " + КаталогНаСервере1С + "\" +ИмяФайла + " " + КаталогНаSFTPСервере + "/" + ИмяФайла + """ " + """close"" ""exit""";

net = Новый COMОбъект("WScript.Shell");

net.Run(СтрокаПрограммы, 0, Истина);

Скопировать файл с SFTP сервера:

СтрокаПрограммы = """" + ПутьWinSCP + """" + " /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """get " + КаталогНаSFTPСервере + "/" + ИмяФайлаСтр + " " + КаталогНаСервере1С + "\" + """ " + """close"" ""exit""";

net = Новый COMОбъект("WScript.Shell");

net.Run(СтрокаПрограммы, 0, Истина);

Получить список файлов на SFTP серверу и записать его в файл:

СтрокаПрограммы = "cmd.exe /c """"" + ПутьWinSCP + """ /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """ls " + КаталогНаSFTPСервере + """""" + """ " + """ close""" + " > FMfiles.txt 2>&1" + """ " + """ exit""";

ЗапуститьПриложение(СтрокаПрограммы, ПутьКЛогам, Истина, КодВозврата);

 


 

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение

Комментарии

1. Иван (John83) 14.07.14 18:09
Пытаюсь копировать файл с sftp на диск, но ничего не происходит. В логе непонятно, почему не копируется. Может кто подскажет?

. 2014-07-14 18:06:59.171 --------------------------------------------------------------------------
. 2014-07-14 18:06:59.171 WinSCP Версия 5.5.3 (сборка 4214) (OS 6.1.7601 Service Pack 1 - Windows 7 Professional)
. 2014-07-14 18:06:59.171 Configuration: HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2\
. 2014-07-14 18:06:59.172 Local account: REDIUS\telnov
. 2014-07-14 18:06:59.172 Working directory: D:\Рабочая папка
. 2014-07-14 18:06:59.172 Process ID: 2384
. 2014-07-14 18:06:59.172 Command-line: "C:\Program Files (x86)\WinSCP\winscp.exe" /console=553 /consoleinstance=_3252_323 "/console" "/command" "option batch abort" "open redius.sbp.ru@redius.spb.ru" "get /htdocs/.exchange/orders.csv D:\temp\" "close" "exit"
. 2014-07-14 18:06:59.172 Time zone: Current: GMT+4 (Азербайджанское время (зима)), No DST
. 2014-07-14 18:06:59.172 Warning: System option "Automatically adjust clock for Daylight Saving Time" is disabled, timestamps will not be represented correctly
. 2014-07-14 18:06:59.172 Login time: 14 Июль 2014 г. 18:06:59
. 2014-07-14 18:06:59.172 --------------------------------------------------------------------------
. 2014-07-14 18:06:59.172 Script: Retrospectively logging previous script records:
> 2014-07-14 18:06:59.172 Script: option batch abort
< 2014-07-14 18:06:59.172 Script: batch abort
> 2014-07-14 18:06:59.172 Script: open redius.sbp.ru@redius.spb.ru
. 2014-07-14 18:06:59.172 --------------------------------------------------------------------------
. 2014-07-14 18:06:59.172 Session name: redius.sbp.ru@redius.spb.ru (Modified site)
. 2014-07-14 18:06:59.172 Host name: redius.spb.ru (Port: 22)
. 2014-07-14 18:06:59.172 User name: redius.sbp.ru (Password: No, Key file: No)
. 2014-07-14 18:06:59.172 Tunnel: No
. 2014-07-14 18:06:59.172 Transfer Protocol: SFTP (SCP)
. 2014-07-14 18:06:59.172 Ping type: -, Ping interval: 30 sec; Timeout: 15 sec
. 2014-07-14 18:06:59.172 Proxy: none
. 2014-07-14 18:06:59.172 Send buffer: 262144
. 2014-07-14 18:06:59.172 SSH protocol version: 2; Compression: No
. 2014-07-14 18:06:59.172 Bypass authentication: No
. 2014-07-14 18:06:59.172 Try agent: Yes; Agent forwarding: No; TIS/CryptoCard: No; KI: Yes; GSSAPI: No
. 2014-07-14 18:06:59.172 Ciphers: aes,blowfish,3des,WARN,arcfour,des; Ssh2DES: No
. 2014-07-14 18:06:59.172 SSH Bugs: A,A,A,A,A,A,A,A,A,A
. 2014-07-14 18:06:59.172 Simple channel: Yes
. 2014-07-14 18:06:59.172 Return code variable: Autodetect; Lookup user groups: A
. 2014-07-14 18:06:59.172 Shell: default
. 2014-07-14 18:06:59.172 EOL: 0, UTF: 2
. 2014-07-14 18:06:59.172 Clear aliases: Yes, Unset nat.vars: Yes, Resolve symlinks: Yes
. 2014-07-14 18:06:59.172 LS: ls -la, Ign LS warn: Yes, Scp1 Comp: No
. 2014-07-14 18:06:59.172 SFTP Bugs: A,A
. 2014-07-14 18:06:59.172 SFTP Server: default
. 2014-07-14 18:06:59.172 Local directory: default, Remote directory: home, Update: Yes, Cache: Yes
. 2014-07-14 18:06:59.172 Cache directory changes: Yes, Permanent: Yes
. 2014-07-14 18:06:59.172 DST mode: 1; Timezone offset: 0h 0m
. 2014-07-14 18:06:59.172 --------------------------------------------------------------------------
. 2014-07-14 18:06:59.172 Looking up host "redius.spb.ru"
. 2014-07-14 18:06:59.186 Connecting to 84.204.252.3 port 22
. 2014-07-14 18:06:59.205 Server version: SSH-2.0-OpenSSH_6.1_hpn13v11 FreeBSD-20120901
. 2014-07-14 18:06:59.205 Using SSH protocol version 2
. 2014-07-14 18:06:59.205 We claim version: SSH-2.0-WinSCP_release_5.5.3
. 2014-07-14 18:06:59.212 Doing Diffie-Hellman group exchange
. 2014-07-14 18:06:59.323 Doing Diffie-Hellman key exchange with hash SHA-256
. 2014-07-14 18:06:59.834 Verifying host key rsa2 0x23,0xb513b870b15e1d22 e1667a7047dd6896 237f55154c2d8e1d c3edaffd526cb15b 5c362c6cb42d5dab 036fb9f1333e6d94 a1e5886da54455dd e122ed38aa088b91 2816b91ebbc5dfd8 2df7f414077eb488 02d4379b03fd4b39 b444f4b8dcb94678 e1c4960fb8caa9a4 69126d42424e17f8 c0b3599cbba5dd47 4a211234744de70d 0225ebed7b3a8a18 f53f0b43f1148533 8d57aaada251e5b7 e8af5cd4f2f58bb8 7248bade5aaf70bf ad1d877d6961347b 5673654273f96dc0 8ed88bff6e7b2fd2 5c911e5d7472012e 36523a5f2c161a77 a7acc6e15dbafaaa 55673b9dc00ac768 41433ee664e4c77d 0d8f454f0969ecf7 91a70c88d020f0ab a67269d1cb8c42e1 with fingerprint ssh-rsa 2048 29:c7:3b:e8:70:46:b4:83:dd:06:76:0d:85:22:af:37
. 2014-07-14 18:06:59.834 Asking user:
. 2014-07-14 18:06:59.834 **Продолжить подключение к неизвестному серверу и добавить его ключ в кэш?**
. 2014-07-14 18:06:59.834
. 2014-07-14 18:06:59.834 Ключ хоста сервера не найден в кэше. Нельзя гарантировать, что это тот самый сервер, который вам нужен.
. 2014-07-14 18:06:59.834
. 2014-07-14 18:06:59.834 Отпечаток ключа сервера rsa2:
. 2014-07-14 18:06:59.834 ssh-rsa 2048 29:c7:3b:e8:70:46:b4:83:dd:06:76:0d:85:22:af:37
. 2014-07-14 18:06:59.834
. 2014-07-14 18:06:59.834 Если вы доверяете этому хосту, нажмите «Да». Для подключения без добавления ключа хоста в кэш нажмите «Нет». Чтобы прервать подключение, нажмите «Отмена». ()
. 2014-07-14 18:06:59.834 Attempt to close connection due to fatal exception:
* 2014-07-14 18:06:59.834 Отпечаток ключа хоста - ssh-rsa 2048 29:c7:3b:e8:70:46:b4:83:dd:06:76:0d:85:22:af:37.
* 2014-07-14 18:06:59.834 (Exception) Ключ сервера не проверялся!
. 2014-07-14 18:06:59.834 Closing connection.
. 2014-07-14 18:06:59.834 Sending special code: 12
Прикрепленные файлы:
redius.sbp.ru@redius.spb.ru.log
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа