1С. Пример выгрузки на SFTP через WinSCP
07 Apr
Функция ВыгрузитьДанныеНаSFTP(ФайлыДанных, ПараметрыВыгрузки) Если Не ПараметрыВыгрузкиНаFTPЗаполнены(ПараметрыВыгрузки) Тогда Возврат Ложь; КонецЕсли; WshShell = Новый COMОбъект("WScript.Shell"); ФайлКлиента = "\WinSCP\WinSCP.com"; Если Не ФайлСуществует(WshShell, "%ProgramFiles(x86)%", ФайлКлиента) И Не ФайлСуществует(WshShell, "%ProgramFiles%", ФайлКлиента) Тогда ВывестиСообщение( "Не обнаружена установленная программа WinSCP для работы с FTP и SFTP (сайт программы: http://winscp.net)." ); Возврат Ложь; КонецЕсли; ФайлСкрипта = "WinSCP_script.txt"; ФайлВывода = "WinSCP_output.txt"; ВременныйКаталог = КаталогВременныхФайлов(); ТекстКомандыFTP = ""; // Включить пакетный режим, в котором при возникновении ошибки продолжается выполнение следующих команд ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "option batch continue"); // Отключить ожидание подтверждений от пользователя ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "option confirm off"); // Показывать текст исполняемых команд скрипта ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "option echo on"); // Подключение ДобавитьСтрокуВТекстКоманды( ТекстКомандыFTP, "open " + ?(ПараметрыВыгрузки.ВыгрузкаSFTP, "s", "") + "ftp://" + ПараметрыВыгрузки.ПользовательFTP + ":" + ПараметрыВыгрузки.ПарольFTP + "@" + ПараметрыВыгрузки.СерверFTP + ":" + ПараметрыВыгрузки.ПортFTP + ?(ПараметрыВыгрузки.ВыгрузкаSFTP, " -hostkey=*", "") ); // Выгрузка файла Если ТипЗнч(ФайлыДанных) = Тип("Строка") Тогда ФайлНаДиске = ПолучитьФайлНаДиске(ФайлыДанных); Если ФайлНаДиске <> Неопределено Тогда ДобавитьСтрокуВТекстКоманды( ТекстКомандыFTP, "put " + ФайлыДанных + " " + ПроверитьИмяКаталогаFTP(ПараметрыВыгрузки.КаталогFTP) + ФайлНаДиске.Имя ); КонецЕсли; ИначеЕсли ТипЗнч(ФайлыДанных) = Тип("Массив") Тогда Для Каждого ФайлДанных Из ФайлыДанных Цикл ФайлНаДиске = ПолучитьФайлНаДиске(ФайлДанных); Если ФайлНаДиске <> Неопределено Тогда ДобавитьСтрокуВТекстКоманды( ТекстКомандыFTP, "put " + ФайлДанных + " " + ПроверитьИмяКаталогаFTP(ПараметрыВыгрузки.КаталогДляФотоFTP) + ФайлНаДиске.Имя ); КонецЕсли; КонецЦикла; КонецЕсли; // Закрыть подключение ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "close"); // Завершить выполнение команд ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "bye"); ЗаписьТекста = Новый ЗаписьТекста( ВременныйКаталог + ФайлСкрипта, КодировкаТекста.UTF8, , , Символы.ПС ); ЗаписьТекста.Записать(ТекстКомандыFTP); ЗаписьТекста.Закрыть(); WshShell.CurrentDirectory = ВременныйКаталог; КоманднаяСтрока = "cmd /C """ + ФайлКлиента + """ /script=" + ФайлСкрипта + " /xmllog=WinSCP_log.xml /log=WinSCP_log.txt > " + ФайлВывода; Результат = WshShell.Run(КоманднаяСтрока, 0, Истина); Если Результат > 0 Тогда ЧтениеТекста = Новый ЧтениеТекста(ВременныйКаталог + ФайлВывода, КодировкаТекста.UTF8); Результат = ЧтениеТекста.Прочитать(); ЧтениеТекста.Закрыть(); ВывестиСообщение(Результат); Возврат Ложь; КонецЕсли; Возврат Истина; КонецФункции
Добавить комментарий