|
Вопрос про функцию НайтиФайлы() | ☑ | ||
---|---|---|---|---|
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) спасибо. и точно так
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |