|
WinSCP и 1С | ☑ | ||
---|---|---|---|---|
0
Kashafeev
11.09.14
✎
13:04
|
Делаю подключение по SFTP по вот этой инструкции (http://infostart.ru/public/195851/#comm). Но, вместо функции session.GetFiles(), мне необходимо использовать функцию SynchronizeDirectories(). Но 1с ругается, если я пишу вот так:
transferResult = session.SynchronizeDirectories(0, ПутьЗагрузкиЛокальный, ПутьКФайламНаСервере, Ложь); Пишет, что такой метод не обнаружен. Есть готовый код на этом сайте (http://winscp.net/eng/docs/library_session_synchronizedirectories), но он под вб и си шарп. Вопрос: как интегрировать этот код под 1С? |
|||
1
Kashafeev
11.09.14
✎
13:19
|
Так же непонятно, что прописывать в первом параметре функции:
mySession.SynchronizeDirectories( SynchronizationMode.Remote, "d:\www", "/home/martin/public_html", False)) Пробовал объявлять как COMОбъект, но 1С ругалась. Также пробовал писать вот так: WinSCP = Новый COMОбъект("WinSCP"); SynchronizationMode = WinSCP.SynchronizationMode; 1С категорически не хочет создавать такие COMОбъекты |
|||
2
Kashafeev
11.09.14
✎
13:35
|
Никто не сталкивался?
|
|||
3
Зеленый пень
11.09.14
✎
13:38
|
Я только через командную строку работал с WinSCP.
Покажи откуда в (0) берется переменаня session ? |
|||
4
Kashafeev
11.09.14
✎
13:41
|
(3)
session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session Вот так. |
|||
5
Kashafeev
11.09.14
✎
13:53
|
Для лучшего понимания приведу весь код
&НаСервере Процедура НачатьНаСервере() Попытка //Задаем параметры подключения sessionOptions = Новый COMОбъект("WinSCP.SessionOptions"); //Создаем объект SessionOptions sessionOptions.HostName = "192.168.100.20"; sessionOptions.PortNumber = 22; sessionOptions.UserName = "root"; sessionOptions.SshHostKeyFingerprint = "ssh-rsa 1040 xx:xx:xx:xx:xx:e6:54:7c:a1:0b:44:ff:1a:88:16:6c"; sessionOptions.SshPrivateKeyPath = "C:\Program Files (x86)\WinSCP\PuTTY\privatekey.ppk"; session = Новый COMОбъект("WinSCP.Session"); //Создаем объект Session //параметр необходимо использовать если пути регистрации DLL и исполняемого файла различны session.ExecutablePath = "C:\Program Files (x86)\WinSCP\winscp.exe"; // Подключаемся session.Open(sessionOptions); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; //ЗАГРУЗКА Попытка ПутьЗагрузкиЛокальный = "F:\Записи_разговоров\Тест"; ПутьКФайламНаСервере = "/storage/usbdisk1/askoziapbx/voicemailarchive/monitor"; //Загружаем файлы с удаленного сервера transferResult = session.SynchronizeDirectories(SynchronizationMode.Local , ПутьЗагрузкиЛокальный, ПутьКФайламНаСервере, Ложь); // Непонятно что такое SynchronizationMode и как прописывать его туда //Проверяем возможные ошибки transferResult.Check(); //Обрабатываем результат Для каждого ЗагруженныйФайл Из transferResult.Transfers Цикл Сообщить("Загружен файл: " + ЗагруженныйФайл.FileName); КонецЦикла; Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; //Разрываем соединение session.Dispose(); КонецПроцедуры |
|||
6
Зеленый пень
11.09.14
✎
13:55
|
(4) Вроде всё правильно.
|
|||
7
Kashafeev
11.09.14
✎
14:00
|
(6) Дак session создаётся нормально и даже подключается, но я как-то неправильно использую метод синхронизации
|
|||
8
Зеленый пень
11.09.14
✎
14:02
|
(7) А точно сообщение "метод не обнаружен" на session.SynchronizeDirectories()?
|
|||
9
Kashafeev
11.09.14
✎
14:10
|
||||
10
Apokalipsec
11.09.14
✎
14:17
|
рекомендую открыть индекс СП и посмотреть что такое session в 1С...
|
|||
11
Kashafeev
11.09.14
✎
14:25
|
(10) в данном случае session это просто переменная ком-объекта "WinSCP.Session"
|
|||
12
Йохохо
11.09.14
✎
14:28
|
а если просто synchronize? а не SynchronizeDirectories
|
|||
13
Apokalipsec
11.09.14
✎
14:30
|
(11) главное увереннее говорить это в монитор.
(12) То есть для 1Са метод другой специально запилили?) |
|||
14
DrZombi
гуру
11.09.14
✎
14:32
|
(12) http://winscp.net/eng/docs/library_session
SynchronizeDirectories Synchronizes local directory with remote directory. http://winscp.net/eng/docs/library_session_synchronizedirectories |
|||
15
Йохохо
11.09.14
✎
14:32
|
(13) лень долго в примерах по винсцп рыться, отсыл на эту функцию там есть
|
|||
16
Kashafeev
11.09.14
✎
14:37
|
(13) В отладчике определяет как COMОбъект. Да и хорошо работает с функцией GetFiles(). Так что причина не в этом. (12) Функция тоже правильная. Попробовал в си шарпе накатать - всё получилось. Но там я в начале объявил библиотеку WinSCP и все функции там нормально работают.
|
|||
17
Йохохо
11.09.14
✎
14:43
|
(16) там есть обертка .Нет, ее используешь? синхадиректорий должна быть в winscpnet.dll
|
|||
18
Kashafeev
11.09.14
✎
14:51
|
(17) И как до неё добраться из 1С?
|
|||
19
Зеленый пень
11.09.14
✎
14:54
|
Версия winscp какая?
А то читаю: 5.6 beta Bug fix: Session.SynchronizeDirectories could not be called via IDispatch |
|||
20
DrZombi
гуру
11.09.14
✎
14:55
|
(19) Откуда это? Я там искал подобное, но не нашел :(
|
|||
21
Зеленый пень
11.09.14
✎
14:56
|
||||
22
Kashafeev
11.09.14
✎
15:14
|
(19) Версия winscp 5.5.5.
Но ведь в СиШарпе всё работает |
|||
23
DrZombi
гуру
11.09.14
✎
15:18
|
(22) Напиши ВК :)
|
|||
24
Kashafeev
11.09.14
✎
15:21
|
(23) vk.com слэш мой здешний ник
|
|||
25
Зеленый пень
11.09.14
✎
15:23
|
(24) ха-ха :)
В общем, напиши, заработает ли на версии 5.6 |
|||
26
Kashafeev
11.09.14
✎
15:32
|
(25) Попробовал, тоже самое
Есть ещё идеи? |
|||
27
Зеленый пень
11.09.14
✎
15:38
|
(26) А точно 5.6 подключилась? Ну там... зарегистрировалась как надо и т.п.
Больше идей нет. |
|||
28
Kashafeev
11.09.14
✎
15:41
|
(27) Сделал тоже самое, что и с версией 5.5.5.
Тема остаётся актуальной |
|||
29
Зеленый пень
11.09.14
✎
15:48
|
Идея - в (23), написать ВК, то бишь внешнюю компоненту, которая будет прослойкой.
Или - через командную строку работать. |
|||
30
Kashafeev
11.09.14
✎
15:58
|
(29) Ну ВК ни разу не писал. Как вариант разобраться.
Мне нужно как-то узнавать название последнего переданного файла, а через командную строку вряд ли так получится. (Хотя не знаю, это ещё один вопрос:)) |
|||
31
Serginio1
11.09.14
✎
21:58
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |