Код 1C v 8.2 УП
Функция ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно(Соединение, НачальныйКаталогВыгрузкиFTP, НачальнаяПапкаВыгрузкиКомп, ТекущаяПапка=Неопределено)
Рез = Истина ;
Если ТекущаяПапка = Неопределено Тогда ТекущаяПапка = НачальнаяПапкаВыгрузкиКомп КонецЕсли ;
МассивФайлов = НайтиФайлы( ТекущаяПапка, "*" ) ;
ТекКаталог = СтрЗаменить( НачальныйКаталогВыгрузкиFTP + СтрЗаменить( СтрЗаменить( ТекущаяПапка, НачальнаяПапкаВыгрузкиКомп, "" ) , "\" , "/" ) , "//" , "/" ) ;
Если Прав( ТекКаталог, 1 ) < > "/" Тогда
ТекКаталог = ТекКаталог + "/" ;
КонецЕсли ;
Для Каждого НайденныйФайл Из МассивФайлов Цикл
Файл = Новый Файл( НайденныйФайл. ПолноеИмя) ;
Если Файл. ЭтоКаталог( ) Тогда
ЕстьТакаяПапка = Соединение. НайтиФайлы( НачальныйКаталогВыгрузкиFTP + СтрЗаменить( СтрЗаменить( НайденныйФайл. Путь, НачальнаяПапкаВыгрузкиКомп + "\" , "" ) , "\" , "/" ) , НайденныйФайл. Имя) . Количество( ) > 0 ;
Если не ЕстьТакаяПапка Тогда
НомерПопытки = 1 ;
Успешно = Ложь ;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение. УстановитьТекущийКаталог( ТекКаталог) ;
Успешно = Истина ;
Исключение
Сообщить( "Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки( ) ) ;
НомерПопытки = НомерПопытки + 1 ;
КонецПопытки ;
КонецЦикла ;
Если Не Успешно Тогда
Возврат Ложь ;
КонецЕсли ;
НомерПопытки = 1 ;
Успешно = Ложь ;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение. СоздатьКаталог( НайденныйФайл. Имя) ;
Успешно = Истина ;
Исключение
Сообщить( "Попытка №" + НомерПопытки + ", каталог " + НайденныйФайл. Имя + " - " + ОписаниеОшибки( ) ) ;
НомерПопытки = НомерПопытки + 1 ;
КонецПопытки ;
КонецЦикла ;
Если Не Успешно Тогда
Возврат Ложь ;
КонецЕсли ;
КонецЕсли ;
НомерПопытки = 1 ;
Успешно = Ложь ;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение. УстановитьТекущийКаталог( НачальныйКаталогВыгрузкиFTP + СтрЗаменить( СтрЗаменить( НайденныйФайл. ПолноеИмя, НачальнаяПапкаВыгрузкиКомп + "\" , "" ) , "\" , "/" ) + "/" ) ;
Успешно = Истина ;
Исключение
Сообщить( "Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки( ) ) ;
НомерПопытки = НомерПопытки + 1 ;
КонецПопытки ;
КонецЦикла ;
Если Не Успешно Тогда
Возврат Ложь ;
КонецЕсли ;
ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно( Соединение, НачальныйКаталогВыгрузкиFTP, НачальнаяПапкаВыгрузкиКомп, НайденныйФайл. ПолноеИмя) ;
Если не Рез Тогда
Возврат Ложь ;
КонецЕсли ;
Иначе
НомерПопытки = 1 ;
Успешно = Ложь ;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение. УстановитьТекущийКаталог( ТекКаталог) ;
Успешно = Истина ;
Исключение
Сообщить( "Попытка №" + НомерПопытки + ", установка каталога " + ТекКаталог + " - " + ОписаниеОшибки( ) ) ;
НомерПопытки = НомерПопытки + 1 ;
КонецПопытки ;
КонецЦикла ;
Если Не Успешно Тогда
Возврат Ложь ;
КонецЕсли ;
НомерПопытки = 1 ;
Успешно = Ложь ;
Пока НомерПопытки < 4 и не Успешно Цикл
Попытка
Соединение. Записать( НайденныйФайл. ПолноеИмя, НайденныйФайл. Имя) ;
Успешно = Истина ;
Исключение
Сообщить( "Попытка №" + НомерПопытки + ", файл " + НайденныйФайл. ПолноеИмя + " - " + ОписаниеОшибки( ) ) ;
НомерПопытки = НомерПопытки + 1 ;
КонецПопытки ;
КонецЦикла ;
Если Не Успешно Тогда
Возврат Ложь ;
КонецЕсли ;
#Если Клиент Тогда
Состояние( "Выгрузка файла: " + НайденныйФайл. ПолноеИмя) ;
#КонецЕсли
КонецЕсли ;
КонецЦикла ;
Возврат Рез;
КонецФункции
КаталогиДляПередачиНаFTP = Новый Соответствие;
КаталогиДляПередачиНаFTP. Вставить( СсылкаНаЭлементСправочника) ;
Для Каждого Выборка из КаталогиДляПередачиНаFTP Цикл
ВыборкаДетальныеЗаписи = Выборка. Ключ;
Соединение = Новый FTPСоединение( ВыборкаДетальныеЗаписи. FTPСервер,
ВыборкаДетальныеЗаписи. FTPПорт,
ВыборкаДетальныеЗаписи. FTPПользователь,
ВыборкаДетальныеЗаписи. FTPПароль, , Ложь ) ;
ВыгрузитьФайлыИПапкиНаFTP_Рекурсивно( Соединение, ВыборкаДетальныеЗаписи. FTPКаталогВыгрузки, ВыборкаДетальныеЗаписи. КаталогВыгрузкиДанных) ;
КонецЦикла ;