Функция ВыгрузитьФайлыИПапкиНа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_Рекурсивно(Соединение, ВыборкаДетальныеЗаписи.FTPКаталогВыгрузки, ВыборкаДетальныеЗаписи.КаталогВыгрузкиДанных); КонецЦикла;