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

26.10.12

База данных - Инструменты администратора БД

Думаю, что все знают, как работает 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""";

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

 


 

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

14400 руб.

06.12.2023    3589    19    1    

39

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4280    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178645    1083    0    

861

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27924    82    146    

61

Система хранения присоединенных файлов в томах на диске

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    61528    90    59    

74

"Менеджер потоков 2.1": УПП: "Восстановление партий"

Инструменты администратора БД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Платные (руб)

Как оптимизировать то, что, считалось, не поддается оптимизации? Как повысить доступность базы данных? Как проводить самую «времяемкую» операцию не по паре раз в неделю, а по несколько раз в день*? Ответ есть!

20000 руб.

12.09.2019    11855    5    9    

7

Хранилище файлов на SQL

Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Управленческий учет Платные (руб)

Привязка файлов / сканов к объектам 1С с сохранением их на SQL-сервере

12000 руб.

09.10.2019    11170    5    8    

9

Конфигурация Session Monitor

Мониторинг Инструменты администратора БД Платформа 1С v8.3 Россия Платные (руб)

Конфигурация Session Monitor предназначена для мониторинга сервера 1С с целью отслеживания чрезмерной нагрузки от конкретных сеансов и скорости реакции рабочих процессов.

1500 руб.

01.12.2020    14396    33    0    

48
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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
+
2. Lionarus 16 15.05.17 11:22 Сейчас в теме
Так работать с sftp сервером намного удобнее, нежели чем через регистрацию DLL компоненты. Спасибо!
+
3. Maddy18 44 14.06.17 18:24 Сейчас в теме
Пишу обработку для автоматической выгрузки по расписанию. Не получается при запуске на сервере 64. данного кода
База SQLная


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

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

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


В файловом варианте запуска - орабатывает как надо!
Грешу на "WScript.Shell" - не подскажете как быть?


http://infostart.ru/public/195851/ - пробовал тоже не выходит (
+
4. Maddy18 44 22.06.17 19:22 Сейчас в теме
(3) Решил проблему. С помощью скрипта. Загвоздка оказалась в русской букве "С" в пути...
+
5. ring_andrey 26 20.08.19 13:49 Сейчас в теме
для решение проблем при выполнение команды под системной записью помогает установка параметра hostkey=*.

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


для отладки включение лога действий " /log="C:\windows\temp\winscp.log" /loglevel=0"

СтрокаПрограммы = """" + ПутьWinSCP + """" + " /console /log="C:\windows\temp\winscp.log" /loglevel=0 /command " + """option batch abort"" " + """open -hostkey=* " + ПрофильWinSCP + """ " + """put " + КаталогНаСервере1С + "\" +ИмяФайла + " " + КаталогНаSFTPСервере + "/" + ИмяФайла + """ " + """close"" ""exit""";
+
11. drevilo 5 17.05.23 18:39 Сейчас в теме
(5)
hostkey=*.


ключ hostkey=* был в одном, тестовом, релизе WinSCP. Сейчас (на релизе 5.21) он не работает. Мы, в частности, использовали
|open sftp://" + Логин + ":" + Пароль + "@" + Сервер + ":" + Порт + " -hostkey=""ssh-ed25519 255 lmtZ1C... и далее набор символов из логов соединения""
+
6. fixin 4253 03.06.22 21:32 Сейчас в теме
Почитал, спасибо.
Как-то все чересчур усложнено. Какие-то профили, логи...
Вот мой код для записи на SFTP:
	СтрокаПрограммы = """" + ПутьWinSCP + """" + " /console /command " + """option batch abort"" " + """open " + ПрофильWinSCP + """ " + """put " + Лок_ИмяФайла + " " + Внеш_ИмяФайла + """ " + """close"" ""exit""";

	net = Новый COMОбъект("WScript.Shell");
	Результат = net.Run(СтрокаПрограммы, 0, Истина);  //Результат 1 - ошибка, 0 - ок
	

	Если Результат = 1 Тогда
		ЗаписьЖурналаРегистрации("Отладка.SFTP.Ошибка",,,,СтрокаПрограммы);
	Иначе
		ЗаписьЖурналаРегистрации("Отладка.SFTP.ОК",,,,СтрокаПрограммы);
	КонецЕсли;

Показать


Лок_имяфайла через бэкслеш, Внеш_имяФайла через слеш.

Фишка в том, что я не анализирую логи, а получаю код возврата и понимаю, выполнилась операция или нет. Для простых случаев этого достаточно.
+
7. Anatolia 18.03.23 18:08 Сейчас в теме
(6) Попробовал ваш способ, получил код ошибки 2, в журнал регистрации не пишется. Только с помощью анализа логов удалось добиться соединения и отправки файла. В моем случае для настройки нужен файл exe, а не com (мой рабочий вариант: ПутьWinSCP = КаталогWinSCP + "\WinSCP.exe". Путь к папке логов настраивается в WinSCP: Настройки - Протоколирование
+
8. Anatolia 19.03.23 10:01 Сейчас в теме
Дополню: полезно прогнать передачу файлов через WinSCP вручную, проанализировать логи и использовать как образец
fixin; +1
9. fixin 4253 19.03.23 18:32 Сейчас в теме
(8) да, это всегда полезно. Ручки - наше все.
+
10. Tatitutu 3855 30.03.23 12:14 Сейчас в теме
УДАЛИТЬ ФАЙЛ НА СЕРВЕРЕ

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

net = Новый COMОбъект("WScript.Shell");
Результат = net.Run(СтрокаПрограммы, 0, Истина);
+
Оставьте свое сообщение