// Передать файл по FTP Процедура ПередатьПоFTP(ИмяФайла,ПутьФТП=Неопределено) Экспорт Если ПутьФТП = Неопределено Тогда ТекПутьФТП = ПараметрыСеанса.FTPПуть; Иначе ТекПутьФТП = ПутьФТП; КонецЕсли; //создаем скрипт для соединения и отправки Скрипт=Новый ТекстовыйДокумент; Скрипт.ДобавитьСтроку("open "+ПараметрыСеанса.FTP); Скрипт.ДобавитьСтроку("user"); Скрипт.ДобавитьСтроку(ПараметрыСеанса.FTPЛогин); Скрипт.ДобавитьСтроку(ПараметрыСеанса.FTPПароль); Скрипт.ДобавитьСтроку("binary"); //при необходимости входим в каталог, возможно, таких команд будет несколько Скрипт.ДобавитьСтроку("cd "+ТекПутьФТП); Скрипт.ДобавитьСтроку("put "+ПараметрыСеанса.ПутьКФайлуОбраза+"\"+ИмяФайла); Скрипт.ДобавитьСтроку("bye"); //записываем скрипт на диск Файл = Новый Файл(ПараметрыСеанса.ПутьКФайлуОбраза+"\"+"ftp.txt"); Скрипт.Записать(ПараметрыСеанса.ПутьКФайлуОбраза+"\"+"ftp.txt", "windows-1251"); //а теперь запускаем его выполнение КомандаСистемы("ftp -n -s:"+ПараметрыСеанса.ПутьКФайлуОбраза+"\ftp.txt"); КонецПроцедуры // Получить файл по FTP Процедура ПолучитьПоFTP(ИмяФайла,ПутьФТП=Неопределено) Экспорт Если ПутьФТП = Неопределено Тогда ТекПутьФТП = ПараметрыСеанса.FTPПуть; Иначе ТекПутьФТП = ПутьФТП; КонецЕсли; //создаем скрипт для соединения и отправки Скрипт=Новый ТекстовыйДокумент; Скрипт.ДобавитьСтроку("open "+ПараметрыСеанса.FTP); Скрипт.ДобавитьСтроку("user"); Скрипт.ДобавитьСтроку(ПараметрыСеанса.FTPЛогин); Скрипт.ДобавитьСтроку(ПараметрыСеанса.FTPПароль); Скрипт.ДобавитьСтроку("binary"); //при необходимости входим в каталог, возможно, таких команд будет несколько Скрипт.ДобавитьСтроку("cd "+ТекПутьФТП); Скрипт.ДобавитьСтроку("get"); Скрипт.ДобавитьСтроку(ИмяФайла); Скрипт.ДобавитьСтроку(ПараметрыСеанса.ПутьКФайлуОбраза+"\"+ИмяФайла); Скрипт.ДобавитьСтроку("bye"); //записываем скрипт на диск Файл = Новый Файл(ПараметрыСеанса.ПутьКФайлуОбраза+"\"+"ftp.txt"); Скрипт.Записать(ПараметрыСеанса.ПутьКФайлуОбраза+"\"+"ftp.txt", "windows-1251"); //а теперь запускаем его выполнение КомандаСистемы("ftp -n -s:"+ПараметрыСеанса.ПутьКФайлуОбраза+"\ftp.txt"); КонецПроцедуры
// Пример от 0xFFFFFF // Может быть проблема в том, что 1С естественно не дожидается окончания перемещения файлов (movehere) // и пока копируются файлы, код продолжает выполняться далее. Функция ОтправитьФайлыЧерезFTP() //подключаемся, отправляем Попытка Шел=СоздатьОбъект("shell.application"); ПапкаФТП=Шел.namespace("ftp://" +СокрЛП(ФТП_Пользователь)+ ":" +СокрЛП(ФТП_Пароль)+ "@" + СокрЛП(ФТП_УРЛ) + "/" +СокрЛП(ФТП_ПутьИсходящих)); ПапкаИсточник=Шел.namespace(КаталогИсходящих); ПапкаЗагруженных = Шел.namespace(КаталогЗагруженных); Предупреждение("Подключение к FTP серверу...",1); Темы=ПапкаИсточник.items(); ПапкаЗагруженных.copyhere(Темы); //Темы.filter(64,"*.txt"); ПапкаФТП.movehere(Темы); Исключение Предупреждение("Внимание! Не удалось передать файлы адресату через FTP! Возможно, параметры FTP заданы неверно, либо отсутствует связь."); Возврат 0; КонецПопытки; //проверяем ФС.УстТекКаталог(КаталогИсходящих); ПопытокПроверки = 3; Для Сч = 1 По ПопытокПроверки Цикл Если НЕ ((СокрЛП(ФС.НайтиПервыйФайл("*.*"))="") или (СокрЛП(ФС.НайтиПервыйФайл("*.*"))=".")) Тогда Если Сч = ПопытокПроверки Тогда Предупреждение("Внимание! Не удалось передать файлы адресату через FTP! Попробуйте совершить обмен позже."); Возврат 0; КонецЕсли; Предупреждение("Передача файлов....", 3); КонецЕсли; КонецЦикла; Возврат 1; КонецФункции Функция ПолучитьФайлыЧерезFTP() //подключаемся Попытка Шел=СоздатьОбъект("shell.application"); ПапкаФТП=Шел.namespace("ftp://" +СокрЛП(ФТП_Пользователь)+ ":" +СокрЛП(ФТП_Пароль)+ "@" + СокрЛП(ФТП_УРЛ) + "/" +СокрЛП(ФТП_ПутьВходящих)); ПапкаПриемник=Шел.namespace(КаталогВходящих); ПапкаЗагруженных = Шел.namespace(КаталогЗагруженных); Предупреждение("Подключение к FTP серверу...",1); Темы=ПапкаФТП.items(); ПапкаЗагруженных.copyhere(Темы); //Темы.filter(64,"*.txt"); ПапкаПриемник.movehere(Темы); Исключение Предупреждение("Внимание! Не удалось получить файлы через FTP! Возможно, параметры FTP заданы неверно, либо отсутствует связь."); Возврат 0; КонецПопытки; //проверяем ПопытокПроверки = 3; Для Сч = 1 По ПопытокПроверки Цикл Если ПапкаФТП.items().count>0 Тогда Если Сч = ПопытокПроверки Тогда Предупреждение("Внимание! Не удалось получить файлы через FTP! Попробуйте совершить обмен позже."); Возврат 0; КонецЕсли; Предупреждение("Получение файлов....", 3); КонецЕсли; КонецЦикла; Возврат 1; КонецФункции
//БЛОК ВЫГРУЗКИ НА ФТП ТекстВыгрузки.Записать(КаталогПользователя()+(ИмяПрайса+".csv")); ТекстВыгрузки = ""; ТекстВыгрузки = СоздатьОбъект("Текст"); ТекстВыгрузки.ДобавитьСтроку("open " + "192.168.0.1"); //адрес ТекстВыгрузки.ДобавитьСтроку("****"); //логин ТекстВыгрузки.ДобавитьСтроку("*****"); //пароль ТекстВыгрузки.ДобавитьСтроку("put " + КаталогПользователя() + (ИмяПрайса+".csv")); ТекстВыгрузки.ДобавитьСтроку("bye"); ТекстВыгрузки.Записать(КаталогПользователя() + "ftp.txt"); ТекстВыгрузки = ""; КомандаСистемы("ftp -s:" + КаталогПользователя() + "Ftp.txt>> " + (КаталогПользователя() + "report.txt")); ФС.УдалитьФайл(КаталогПользователя() + "ftp.txt"); ТекстВыгрузки = СоздатьОбъект("Текст"); ТекстВыгрузки.Открыть(КаталогПользователя() + "report.txt"); КС = ТекстВыгрузки.КоличествоСтрок()-4; //если все нормально - то в этой строке файла должно быть соотв.сообщение //проверим его Попытка строкаКомплете = ТекстВыгрузки.ПолучитьСтроку(КС); Если Найти(Нрег(строкаКомплете),"226 transfer complete") = 0 Тогда а=1; а=а/0; КонецЕсли; тПротокол = ТекущееВремя()+" файл данных успешно отправлен на сервер интернет-магазина"+РазделительСтрок+тПротокол; Форма.Обновить(); ТекстВыгрузки = ""; ФС.УдалитьФайл(КаталогПользователя() + (ИмяПрайса+".csv")); ФС.УдалитьФайл(КаталогПользователя() + "report.txt"); Исключение тПротокол = ТекущееВремя()+" ПРОИЗОШЛА ОШИБКА ВО ВРЕМЯ ЗАГРУЗКИ СФОРМИРОВАННОГО ФАЙЛА НА СЕРВЕР ИНЕТРНЕТ-МАГАЗИНА"+РазделительСтрок+тПротокол; тПротокол = ТекущееВремя()+ИмяПрайса+РазделительСтрок+тПротокол; Форма.Обновить(); ТекстВыгрузки.Показать(); ТекстВыгрузки = ""; КонецПопытки;