Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 08:18

Перенос данных на ftp

Автор kota89, 17 фев 2014, 12:47

0 Пользователей и 1 гость просматривают эту тему.

kota89

Ребят объясните лаймеру как перенести данные на ftp по концу месяца на сервер?
PS. Вот листинг! Зарание благодарен вам!

Функция ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно(Соединение, НачальныйКаталогВыгрузкиFTP, НачальнаяПапкаВыгрузкиКомп, ТекущаяПапка=Неопределено)
Рез = Истина;
Если ТекущаяПапка = Неопределено Тогда ТекущаяПапка = НачальнаяПапкаВыгрузкиКомп КонецЕсли;
МассивФайлов = НайтиФайлы(ТекущаяПапка, "");
ТекКаталог = СтрЗаменить(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(ТекущаяПапка, НачальнаяПапкаВыгрузкиКомп, ""), "\", "/"), "//", "/");
Если Прав(ТекКаталог, 1) <> "/" Тогда
ТекКаталог = ТекКаталог + "/";
КонецЕсли;

Для Каждого НайденныйФайл Из МассивФайлов Цикл
Файл = Новый Файл(НайденныйФайл.ПолноеИмя);
Если Файл.ЭтоКаталог() Тогда
ЕстьТакаяПапка = Соединение.НайтиФайлы(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(НайденныйФайл.Путь, НачальнаяПапкаВыгрузкиКомп + "\", ""), "\", "/"), НайденныйФайл.Имя).Количество() > 0;

Если не ЕстьТакаяПапка Тогда
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.УстановитьТекущийКаталог(ТекКаталог);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;

НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.СоздатьКаталог(НайденныйФайл.Имя);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", " + НайденныйФайл.Имя + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;

Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;


КонецЕсли;

НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.УстановитьТекущийКаталог(НачальныйКаталогВыгрузкиFTP + СтрЗаменить(СтрЗаменить(НайденныйФайл.ПолноеИмя, НачальнаяПапкаВыгрузкиКомп + "\", ""), "\", "/") + "/");
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;

ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно(Соединение, НачальныйКаталогВыгрузкиFTP, НачальнаяПапкаВыгрузкиКомп, НайденныйФайл.ПолноеИмя);

Если не Рез Тогда
Возврат Ложь;
КонецЕсли;

Иначе
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.УстановитьТекущийКаталог(ТекКаталог);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;
Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;



// почему-то иногда при большой выгрузке глюкает ((
// а со второй попытки выкладывается.... странно...
НомерПопытки = 1;
Успешно = Ложь;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение.Записать(НайденныйФайл.ПолноеИмя, НайденныйФайл.Имя);
Успешно = Истина;
Исключение
Сообщить("Попытка №" + НомерПопытки + ", файл " + НайденныйФайл.ПолноеИмя + " - " + ОписаниеОшибки());
НомерПопытки = НомерПопытки + 1;
КонецПопытки;
КонецЦикла;

Если Не Успешно Тогда
Возврат Ложь;
КонецЕсли;

#Если Клиент Тогда
Состояние("Выгрузка файла: " + НайденныйФайл.ПолноеИмя);
#КонецЕсли

КонецЕсли;
КонецЦикла;

Возврат Рез;

КонецФункции

Кошки рулят

КомФайл=СоздатьОбъект("Текст");
КомФайл.ДобавитьСтроку("open ");           // сервер
КомФайл.ДобавитьСтроку("");           // логин
КомФайл.ДобавитьСтроку("");              // пароль

Для Н=1 По СписокФайлов.РазмерСписка() Цикл
     КомФайл.ДобавитьСтроку("send "+СписокФайлов.ПолучитьЗначение(Н));     // отправка локального файла на ftp-сервер
КонецЦикла;
КомФайл.ДобавитьСтроку("quit");                                                            // отключение от ftp-сервера
КомФайл.Записать(КаталогВременныхФайлов()+"send.txt");                               // сохраним командный файл в Темпе пользователя

Попытка
Шелл=СоздатьОбъект("WScript.Shell");
Исключение 
Шелл="";
КонецПопытки;   

// теперь выполнение командного файла   
Если Шелл="" Тогда
// если WScript не работает, придется по 1С-овски показывать черные окна
ЗапуститьПриложение("ftp -s:"+КаталогВременныхФайлов()+"send.txt");
Иначе
// тоже самое, но без показа черных окон
Шелл.Run("ftp.exe -s:"+КаталогВременныхФайлов()+"send.txt" ,0,1);
КонецЕсли;

Если ФС.СуществуетФайл(КаталогВременныхФайлов()+"send.txt")=1 Тогда
   ФС.УдалитьФайл(КаталогВременныхФайлов()+"send.txt");
КонецЕсли;

GRADUS

Цитата: Кошки рулят от 19 апр 2014, 19:03
КомФайл=СоздатьОбъект("Текст");
КомФайл.ДобавитьСтроку("open ");           // сервер
КомФайл.ДобавитьСтроку("");           // логин
КомФайл.ДобавитьСтроку("");              // пароль

Для Н=1 По СписокФайлов.РазмерСписка() Цикл
     КомФайл.ДобавитьСтроку("send "+СписокФайлов.ПолучитьЗначение(Н));     // отправка локального файла на ftp-сервер
КонецЦикла;
КомФайл.ДобавитьСтроку("quit");                                                            // отключение от ftp-сервера
КомФайл.Записать(КаталогВременныхФайлов()+"send.txt");                               // сохраним командный файл в Темпе пользователя

Попытка
Шелл=СоздатьОбъект("WScript.Shell");
Исключение 
Шелл="";
КонецПопытки;   

// теперь выполнение командного файла   
Если Шелл="" Тогда
// если WScript не работает, придется по 1С-овски показывать черные окна
ЗапуститьПриложение("ftp -s:"+КаталогВременныхФайлов()+"send.txt");
Иначе
// тоже самое, но без показа черных окон
Шелл.Run("ftp.exe -s:"+КаталогВременныхФайлов()+"send.txt" ,0,1);
КонецЕсли;

Если ФС.СуществуетФайл(КаталогВременныхФайлов()+"send.txt")=1 Тогда
   ФС.УдалитьФайл(КаталогВременныхФайлов()+"send.txt");
КонецЕсли;


Что за извращение? В 1с есть свой ftp клиент.

Кошки рулят

Цитата: GRADUS от 20 апр 2014, 18:49

Что за извращение? В 1с есть свой ftp клиент.
Извращение - это клиент в 1С. К тому же, его там нет. А ftp.exe есть в любой винде, работает одинаково стабильно (например, в отличии от MSSOAP, не зависит от разрядности) не зависит ни от каких релизов и багов с Утиной улицы ...

GRADUS

Цитата: Кошки рулят от 20 апр 2014, 20:30
Цитата: GRADUS от 20 апр 2014, 18:49

Что за извращение? В 1с есть свой ftp клиент.
Извращение - это клиент в 1С. К тому же, его там нет. А ftp.exe есть в любой винде, работает одинаково стабильно (например, в отличии от MSSOAP, не зависит от разрядности) не зависит ни от каких релизов и багов с Утиной улицы ...

Ну назови его объектом. Главное он есть и работает :bleh:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск