Имя: Пароль:
1C
1С v8
Вопрос про функцию НайтиФайлы()
0 SMakcik
 
17.08.11
12:25
Всем привет!

Скажите мне пожалуйста это глюк или что-то я не правильно делаю.
Есть процедура:


Процедура КнопкаВыполнитьНажатие(Кнопка)
   Перем ТаблицаКонтрагентов;
   
   Если НЕ ЗначениеЗаполнено(ПутьДанных) Тогда
       Сообщить("Не указан путь для временного сохранения файлов.");
       Возврат;
   КонецЕсли;    
   
   ТаблицаКонтрагентов = Новый Соответствие;
   
   ТекущийКонтрагент = "";
   Для Каждого СтрокаТаблицы ИЗ ТабДокументов Цикл
       
       ТекущийДокумент = СтрокаТаблицы.Документ.ПолучитьОбъект();
       ТекущийКонтрагент = СокрЛП(ТекущийДокумент.Контрагент.Наименование);
       ТекущийКонтрагент = СтрЗаменить(ТекущийКонтрагент, ".", "");
       ТекущийКонтрагент = СтрЗаменить(ТекущийКонтрагент, " ", "_");
       
       Если ТекущийДокумент <> Неопределено И СтрокаТаблицы.Флаг Тогда
           
           ПараметрыОтбора = Новый Структура;            
           ПараметрыОтбора.Вставить("Флаг", Истина);
           ПараметрыОтбора.Вставить("ВидДокумента", ТекущийДокумент.Метаданные().Имя);
           
           НайденныеСтроки = ПечатныеФормы.НайтиСтроки(ПараметрыОтбора);
           
           Для Каждого НайденнаяСтрока ИЗ НайденныеСтроки Цикл
               
               СтрМакета = ДеревоМакетовПечатиРН.Строки.Найти(НайденнаяСтрока.ПечатнаяФорма, "Имя");
               Если (СтрМакета <> Неопределено) И (СтрМакета.Расшифровка <> Неопределено) Тогда
                   Если ТипЗнч(СтрМакета.Расшифровка) = Тип("Структура") Тогда
                       ТабДокумент = УниверсальныеМеханизмы.НапечататьВнешнююФорму(ТекущийДокумент.Ссылка, СтрМакета.Расшифровка);
                   Иначе
                       //Реализация.Печать(СтрМакета.Расшифровка, ?(ПечататьНаПринтер,КоличествоЭкземпляров1, 0), ПечататьНаПринтер, СокрЛП(ЭлементыФормы.ПринтерыДляДокументов.Значение));
                   КонецЕсли;
               КонецЕсли;
               
               СоздатьКаталог(ПутьДанных + "\" + ТекущийКонтрагент);
               ТабДокумент.Записать(ПутьДанных + "\" + ТекущийКонтрагент + "\" + СокрЛП(НайденнаяСтрока.ДополнениеКФайлу) + "-" + ТекущийДокумент.Номер + " " + НайденнаяСтрока.НазваниеПечатнойФормы + ".xls", ТипФайлаТабличногоДокумента.XLS97);
               
               Если ТаблицаКонтрагентов[ТекущийКонтрагент] = Неопределено Тогда
                   ТаблицаКонтрагентов.Вставить(ТекущийКонтрагент, ПутьДанных + "\" + ТекущийКонтрагент);
               КонецЕсли;
               
               ОбработкаПрерыванияПользователя();
               
           КонецЦикла;
           
       КонецЕсли;    
       
       ОбработкаПрерыванияПользователя();
       
   КонецЦикла;    
   
   
   Для Каждого ЭлементСоответствия ИЗ ТаблицаКонтрагентов Цикл
       
       НайденныеФайлы = Новый Массив;
       
       АрхивныйФайл = Новый ЗаписьZipФайла(ПутьДанных + "\" + ЭлементСоответствия.Ключ + ".zip");
       КаталогДляПоиска = Новый Файл(ПутьДанных + "\" + ЭлементСоответствия.Ключ);
       Если КаталогДляПоиска.Существует() Тогда
           НайденныеФайлы = НайтиФайлы(КаталогДляПоиска.ПолноеИмя);
       КонецЕсли;    
       
       Для Каждого НайденныйФайл ИЗ НайденныеФайлы Цикл
           АрхивныйФайл.Добавить(НайденныйФайл.Имя, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
       КонецЦикла;
       
       АрхивныйФайл.Записать();
       
   КонецЦикла;    
   
КонецПроцедуры

Тут не хитрым образом создаются в определенном указанном каталоге подкаталоги. И тогда когда я хочу добавить в архив файлы из подкаталога (НайтиФайлы()), то функция НайтиФайлы находит только подкаталоги созданные в указанном. И дальше не ищет.
Что это? и как это обойти?
1 vicof
 
17.08.11
12:27
Рекурсия не?
2 SMakcik
 
17.08.11
12:29
Рекурсию не пробывал, но мне пренципиально хочется знать, зачем такая функция нужна?
3 GenV
 
17.08.11
12:30
(0) Если 8.1, то рекурсивно, Если 8.2, то третий параметр.
4 SMakcik
 
17.08.11
12:39
Да не хрена не работает. Зацикливается и все
5 SMakcik
 
17.08.11
12:42
Вот пример:


Процедура ДобавитьФайлыРекурсивно(АрхивныйФайл, КаталогДляПоиска)
   
   НайденныеФайлы = НайтиФайлы(КаталогДляПоиска);
   
   Для Каждого НайденныйФайл ИЗ НайденныеФайлы Цикл
       
       Если НайденныйФайл.ЭтоКаталог() Тогда
           ДобавитьФайлыРекурсивно(АрхивныйФайл, НайденныйФайл.ПолноеИмя);
       КонецЕсли;    
       
       АрхивныйФайл.Добавить(НайденныйФайл.Имя, РежимСохраненияПутейZIP.СохранятьОтносительныеПути, РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
       
   КонецЦикла;
   
КонецПроцедуры    

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
       ........

   Для Каждого ЭлементСоответствия ИЗ ТаблицаКонтрагентов Цикл
       
       КаталогДляПоиска = Новый Файл(ПутьДанных + "\" + ЭлементСоответствия.Ключ);
       Если КаталогДляПоиска.Существует() Тогда
           АрхивныйФайл = Новый ЗаписьZipФайла(ПутьДанных + "\" + ЭлементСоответствия.Ключ + ".zip");
           ДобавитьФайлыРекурсивно(АрхивныйФайл, КаталогДляПоиска.ПолноеИмя);
           АрхивныйФайл.Записать();
       КонецЕсли;    
       
   КонецЦикла;    
   
КонецПроцедуры
6 zak555
 
17.08.11
12:47
описание функции напиши
7 SMakcik
 
17.08.11
12:48
описание какой функции?
8 zak555
 
17.08.11
12:50
НайтиФайлы()
9 GenV
 
17.08.11
12:51
(5) Звездочки во второй параметр добавь. Поиск файлов в каталоге, если задана маска иначе всего будет искать исходный каталог.
10 SMakcik
 
17.08.11
12:57
(9) спасибо. и точно так