Имя: Пароль:
1C
1С v8
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
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.