Как выгрузить все дополнительные обработки и отчеты в каталог? Выгрузить все дополнительные обработки и отчеты в каталог всего за пару кликов. Простейшая обработка в один реквизит и команду.
Набросайте элементы на форму и вставьте код в модуль формы обработки. И без всякого скачивания.
Работоспособность проверена на БП 3.0, Документооборот 1.4-2.0, платформы 1С 8.3.7, 8.3.8
Код 1C v 8.3 #Область ВыборКаталогаДляВыгрузки
// процедура вешается на событие начало выбора у реквизита КаталогВыгрузки.
// Чтобы при нажатии на кнопку выбора открылась форма выбора каталога файловой системы.
&НаКлиенте
Процедура КаталогВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
//открываем диалог выбора файла
ДопПараметры = новый Структура;
ДопПараметры.Вставить("ИмяЭлемента","КаталогВыгрузки");
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборКаталога", ЭтаФорма,ДопПараметры);
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
Если ЗначениеЗаполнено(Объект.КаталогВыгрузки) Тогда
ДиалогОткрытияФайла.Каталог = Объект.КаталогВыгрузки;
КонецЕсли;
ДиалогОткрытияФайла.Показать(ОписаниеОповещения);
КонецПроцедуры
// окончание выбора каталога
&НаКлиенте
Процедура ОбработатьВыборКаталога(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
Объект[ДополнительныеПараметры.ИмяЭлемента] = ВыбранныеФайлы[0];
КонецПроцедуры
#КонецОбласти
#Область НажатиеНаКнопку
// кнопка начала выгрузки
&НаКлиенте
Процедура Выгрузить(Команда)
ОчиститьСообщения();
// проверка на заполнение реквизита, существовавание каталога, на его "не пустоту"
Если НЕ ЗначениеЗаполнено(Объект.КаталогВыгрузки) Тогда
Сообщить("Укажите каталог для выгрузки");
Возврат;
КонецЕсли;
Каталог = Новый Файл(Объект.КаталогВыгрузки);
Если НЕ Каталог.Существует() Тогда
Сообщить("Указанный каталог не существует");
Возврат;
КонецЕсли;
МассивФайлов = НайтиФайлы(Объект.КаталогВыгрузки,"*.*");
Если МассивФайлов.Количество()>0 Тогда
ОписаниеОповещения = новый ОписаниеОповещения("ПодвержденияЗамещения",ЭтаФорма);
ПоказатьВопрос(ОписаниеОповещения,"В каталоге есть файлы. При выгрузке будет выполнение замещение существующих."+Символы.ПС+"Начать выгрузку?",РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ВыгрузкаНачнись(); // проблем не обнаружили, давайте выгружать уже
КонецПроцедуры
// если пользователь передумал затирать файлы в каталоге, выгрузку делать не будем
&НаКлиенте
Процедура ПодвержденияЗамещения(ЧтоОтветилПользователь, Параметры) Экспорт
Если ЧтоОтветилПользователь = КодВозвратаДиалога.Да Тогда
ВыгрузкаНачнись();
Иначе
Возврат;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СамаВыгрузка
&НаКлиенте
Процедура ВыгрузкаНачнись()
ПолучаемыеФайлы = ПодготовимФайлыНаСервере(ЭтаФорма.УникальныйИдентификатор);
Обработчик = Новый ОписаниеОповещения("ОбработкаРезультатаВыгрузки", ЭтотОбъект);
НачатьПолучениеФайлов(Обработчик, ПолучаемыеФайлы, Объект.КаталогВыгрузки, Ложь);
КонецПроцедуры
&НаСервере
Функция ПодготовимФайлыНаСервере(ИдентификаторФормы)
Массив = Новый Массив;
Выборка = Справочники.ДополнительныеОтчетыИОбработки.Выбрать(); // выберем все в справочнике.
Пока Выборка.Следующий() Цикл
Если ТипЗнч(Выборка.ХранилищеОбработки) = Тип("ХранилищеЗначения") Тогда
Адрес = ПоместитьВоВременноеХранилище(Выборка.ХранилищеОбработки.Получить(),ИдентификаторФормы);
Массив.Добавить(Новый ОписаниеПередаваемогоФайла(Выборка.ИмяФайла, Адрес));
КонецЕсли;
КонецЦикла;
Возврат Массив;
КонецФункции
&НаКлиенте
Процедура ОбработкаРезультатаВыгрузки(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
ПоказатьПредупреждение(,"Выгрузка в каталог завершена",10); // все готово, шеф!
КонецПроцедуры
#КонецОбласти
Автор: Михали Задорнов (MZadornov)
Категория:
Внешние печатные формы, отчеты и обработк… Как Выгрузить файлы и папки из каталога на FTP Код 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_Рекурсивно(Соединение, ВыборкаДетальныеЗаписи.FTPКаталогВыгрузки, ВыборкаДетальныеЗаписи.КаталогВыгрузкиДанных);
КонецЦикла;
Как загрузить файлы с FTP Категория:
Работа с Интернет, Почтой (Mail), FTP Как удалить Файл, Каталог? Функция Удаляет указанные файлы.
УдалитьФайлы(<Путь>, <Маска>)
Параметры: <Путь> (обязательный) Тип: Строка. Путь к удаляемым файлам.
<Маска> (необязательный) Тип: Строка. Маска для выбора удаляемых файлов. В строке маски допускается использование символа "*" (звездочка), обозначающего любое число произвольных символов, и "?" (знак вопроса), обозначающего один произвольный символ.
!!! - Если <Маска> не указана, то удаляются все файлы и каталог <Путь>.
Для удаления одного файла, можно передать его полное имя через первый параметр, либо передать путь к нему через первый параметр, а его короткое имя - через второй.
Удаление файлов производится, если в указанных файлах не установлено свойство "Только чтение". В противном случае возникает сообщение об ошибке.
Допускается использование схем http, https и ftp для адресации файлов. При использовании этих схем в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
Код 1C v 8.х // Удаление каталога и всех вложенных в него каталогов и файлов
Попытка
УдалитьФайлы("C:\temp\Works");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Код 1C v 8.2 УП // Удалим в каталоге все файлы CSV
Попытка
УдалитьФайлы(КаталогВыгрузкиДанных, "*.csv");
Исключение
#Если Клиент Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
В 7-рке для удаления используется
Код 1C v 7.x ФС.УдалитьКаталог(Стр);
//или
ФС.УдалитьФайл(Стр);
Как удалить каталог с файлами?
Код 1C v 7.x // пример привел smaharbA
//Данный пример не работает, если в папке есть файлы с атрибутами только для чтения и системные
Функция Рекурсия(Знач Путь,Сп)
Перем А;
ФСО=СоздатьОбъект("ФС");
Стр=ФСО.НайтиПервыйФайл(Путь+"\*.*");
Пока ПустоеЗначение(Стр)=0 Цикл
Если (Стр<>"..") и (Стр<>".") Тогда
Представление="";
Для к=1 По СтрЧислоВхождений(Путь+"\"+Стр,"\") Цикл
Представление=Представление+"\";
КонецЦикла;
Сп.ДобавитьЗначение(Путь+"\"+Стр,Представление+Стр);
ФСО.АтрибутыФайла(Путь+"\"+Стр,,А);
Если Сред(А,4,1)="1" Тогда
Рекурсия(Путь+"\"+Стр,Сп);
КонецЕсли;
КонецЕсли;
Стр=ФСО.НайтиСледующийФайл();
КонецЦикла;
КонецФункции // Рекурсия
//*******************************************
Процедура Сформировать()
Перем Каталог,А;
Если ФС.ВыбратьКаталог(Каталог,"")=0 Тогда
Возврат;
КонецЕсли;
Сп=СоздатьОбъект("СписокЗначений");
Рекурсия(Каталог,Сп);
Сп.СортироватьПоПредставлению(0);
Для к=1 По Сп.РазмерСписка() Цикл
Стр=Сп.ПолучитьЗначение(к);
ФС.АтрибутыФайла(Стр,,А);
Если Сред(А,4,1)="1" Тогда
ФС.УдалитьКаталог(Стр);
Иначе
ФС.УдалитьФайл(Стр);
КонецЕсли;
КонецЦикла;
ФС.УстТекКаталог(Каталог+"\..\");
ФС.УдалитьКаталог(Каталог);
КонецПроцедуры
Категория:
Работа с Файлами и Каталогами