Имя: Пароль:
1C
1С v8
Отказ от модальности
0 NewBieOneS
 
17.10.17
20:38
Всем привет!

Пишу обработку, одной из функций которой является поиск всех файлов и каталогов по заданному пути и вывод найденных файлов в таблицу, содержащую следующие колонки: "Имя файла", "Путь", "Признак каталога". Привожу часть кода, которая реализует вышесказанное:

&НаКлиенте
Процедура ЗаполнитьТаблицуИмен()
    Оповещение = Новый ОписаниеОповещения("ЗаполнитьТаблицуИмен_ПоискФайлов", ЭтаФорма);
    НачатьПоискФайлов(Оповещение, ИсходныйПуть, "*.*", Истина);    
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьТаблицуИмен_ПоискФайлов(НайденныеФайлы, ДополнительныеПараметры) Экспорт
    ТаблицаИмен.Очистить();
    Для Каждого НайденныйФайл Из НайденныеФайлы Цикл
        Оповещение = Новый ОписаниеОповещения("ЗаполнитьТаблицуИмен_ПроверкаНаКаталог", ЭтаФорма, НайденныйФайл);
        НайденныйФайл.НачатьПроверкуЭтоКаталог(Оповещение);    
    КонецЦикла;        
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьТаблицуИмен_ПроверкаНаКаталог(ЭтоКаталог, ДополнительныеПараметры) Экспорт
    НоваяСтрока = ТаблицаИмен.Добавить();    
    НоваяСтрока.ЭтоКаталог = ЭтоКаталог;
    НоваяСтрока.Имя = ДополнительныеПараметры.Имя;
    НоваяСтрока.Путь = ДополнительныеПараметры.Путь;
КонецПроцедуры


Учитывая, что проверка на каталог выполняется в цикле и итерации будут продолжаться не дожидаясь окончания проверки я не могу узнать, когда завершится весь процесс. После окончания заполнения таблицы и получения всех файлов нужно выполнить еще действия. Как решить подобную проблему? Подскажите, пожалуйста.
1 Филиал-msk
 
17.10.17
21:23
Выносишь найденные файлы и указатель на текущий проверяемый в глобальную область видимости, проверяешь поодиночке двигая указатель пока не дойдешь до конца.
2 NewBieOneS
 
17.10.17
22:58
А зачем в глобальную область? Нельзя, например, создать реквизит формы (счетчик) и его увеличивать? Или я что-то не понимаю?
3 Филиал-msk
 
17.10.17
23:00
(2) Не понимаешь. Реквизит формы - уже глобальная область по отношению к процедуре.
4 Otark
 
18.10.17
06:07
Я Понимаю отказ от модальности и все такое, но че с отключенной модальностью ЭтоКаталог() выдает ошибку? Вроде как можно пользоваться?
5 Otark
 
18.10.17
06:57
Да и немодальный поиск файлов здесь с какой целью? Какая то есть на это причина?
6 Филиал-msk
 
18.10.17
07:48
(4)(5) ТС банально называет асинхронность отказом от модальности. Типичная фича для 97% одинесников, так же как и путаница "регламентное"-"фоновое" и т.п.
7 NewBieOneS
 
18.10.17
14:13
(6) Я понимаю, что такое асинхронность. По Вашему - каждая проверка на "ЭтоКаталог" выполняется параллельно (в отдельном потоке или процессе)? Т.е. "здравствуй, многопоточность"? ))) Если так, то с решением все понятно. Я думал есть более "красивые" способы решить подобную проблему.

(4) А зачем тогда нужны немодальные функции поиска файлов, проверки на каталог? В чем смысл их использования, если можно юзать старые?
8 Otark
 
19.10.17
05:31
(7)Они нужны тогда, когда нет возможности или необходимости ждать ответа от клиента. Есть возможность обработать ответ клиента, когда событие произойдет. Это очень удобно бывает местами. Здесь этот случай?
9 NewBieOneS
 
19.10.17
13:57
(8) В моем случае такой необходимости нет. Спасибо за ответ.

Кстати, асинхронности в настоящем понимании этого слова в рассматриваемом вопросе нет. Это именно "НеМодальность". Параллельных вычислений, к сожалению, не организуешь.