Обмен файлами с FTP сервером средствами Windows Код 1C v 8.х // Передать файл по 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");
КонецПроцедуры
Код 1C v 7.x // Пример от 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;
КонецФункции
Код 1C v 7.x //БЛОК ВЫГРУЗКИ НА ФТП
ТекстВыгрузки.Записать(КаталогПользователя()+(ИмяПрайса+".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");
Исключение
тПротокол = ТекущееВремя()+" ПРОИЗОШЛА ОШИБКА ВО ВРЕМЯ ЗАГРУЗКИ СФОРМИРОВАННОГО ФАЙЛА НА СЕРВЕР ИНЕТРНЕТ-МАГАЗИНА"+РазделительСтрок+тПротокол;
тПротокол = ТекущееВремя()+ИмяПрайса+РазделительСтрок+тПротокол;
Форма.Обновить();
ТекстВыгрузки.Показать();
ТекстВыгрузки = "";
КонецПопытки;
Категория:
Работа с Интернет, Почтой (Mail), FTP Коды ошибок 1Сv7 10 Ошибка закрытия файла
20 Ошибка создания файла
30 Ошибка определения длины файла
40 Ошибка установки длины файла
50 Ошибка при попытке заблокировать файл
60 Ошибка при открытии файла
70 Ошибка чтения файла
80 Ошибка удаления файла
90 Ошибка переименования файла
100 Ошибка позиционирования в файле
110 Ошибка снятия блокировки с файла
120 Ошибка записи в файл
200 Файл не является базой данных DBF-формата
210 Неопознанное имя поля
220 Неопознанный тип поля
230 Запись слишком длинная
300 Индексный файл не содержит информации о записи
310 Нарушение структуры индексного файла
330 Указанное имя индекса недоступно
340 Ошибка уникальности индекса
400 Ожидается запятая или скобка
410 Выражение не завершено
422 IFF требует параметров одинаковой длины
425 У STR и SUBSTR 2-й и 3-й параметры – константы
430 Неверное число параметров
440 Слишком сложное выражение
450 Пропущена правая скобка
460 Неверный тип подвыражения
470 Неопознанная функция
480 Неопознанный оператор
500 Выражение не завершено символом двойной кавычки
920 Недостаточно памяти
Категория:
Системные Ошибки