СпКат=СоздатьОбъект("СписокЗначений");
СкриптШелл = СоздатьОбъект("WScript.Shell");
НачПапка=КаталогИБ();
СпКат.ДобавитьЗначение(?(Прав(НачПапка,1)="\",Сред(НачПапка,1,СтрДлина(НачПапка)-1) ,НачПапка));
ВременныйФайл = СкриптШелл.ExpandEnvironmentStrings("%TEMP%\dir_out.txt");
СкриптШелл.Run("%comspec% /c dir """ + НачПапка + """ /b /s /ad > """ + ВременныйФайл + """", 0, 1);
Текст=СоздатьОбъект("Текст");
Текст.КодоваяСтраница(1);
Текст.Открыть(ВременныйФайл);
Для Н=1 По Текст.КоличествоСтрок() Цикл
Стр=Текст.ПолучитьСтроку(Н);
СпКат.ДобавитьЗначение(Стр);
КонецЦикла;
Текст.Очистить();
ФСВинды = СоздатьОбъект("Scripting.FileSystemObject");
ФСВинды.DeleteFile(ВременныйФайл, 1);
Для Н=1 По СпКат.РазмерСписка() Цикл
Путь=СокрЛП(СпКат.ПолучитьЗначение(Н));
ИмяПапки="";
Для Бкв=-СтрДлина(Путь) По -1 Цикл
ТекБуква=Сред(Путь,-Бкв,1);
Если ТекБуква="\" Тогда
Прервать;
КонецЕсли;
ИмяПапки=ТекБуква+ИмяПапки;
КонецЦикла;
СпКат.УстановитьЗначение(Н,Путь,ИмяПапки);
КонецЦикла;
ВыбЗнач="";
ТаймАут=5;
РезВыбора=СпКат.ВыбратьЗначение(ВыбЗнач,"Выберите каталог для сохранения файлов выгрузок",,ТаймАут,0);
Если РезВыбора=1 Тогда
ПутьККат=ВыбЗнач;
Сообщить(""+ВыбЗнач);
ИначеЕсли РезВыбора=0 Тогда
Сообщить("Отмена выбора");
ИначеЕсли РезВыбора=-1 Тогда
Сообщить("Закончился таймаут ("+СокрЛП(ТаймАут)+" сек.)");
КонецЕсли;
СпКат=СоздатьОбъект("СписокЗначений");
ФСВинды= СоздатьОбъект("Scripting.FileSystemObject");
НачПапка=ФСВинды.GetFolder(КаталогИБ());
СпКат.ДобавитьЗначение(НачПапка.Path, НачПапка.Name);
Подпапки = НачПапка.SubFolders;
Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
Скрипт.Language = "JScript";
Скрипт.AddCode("function ПолучитьПеречислитель(Коллекция) { return new Enumerator(Коллекция); }");
ПеречислительПапок = Скрипт.Run("ПолучитьПеречислитель", Подпапки);
Пока ПеречислительПапок.atEnd(0) = 0 Цикл
СпКат.ДобавитьЗначение(ПеречислительПапок.item(0).Path, ПеречислительПапок.item(0).Name);
ПеречислительПапок.moveNext(0);
КонецЦикла;
ВыбЗнач="";
ТаймАут=5;
РезВыбора=СпКат.ВыбратьЗначение(ВыбЗнач,"Выберите каталог для сохранения файлов выгрузок",,ТаймАут,0);
Если РезВыбора=1 Тогда
ПутьККат=ВыбЗнач;
Сообщить(""+ВыбЗнач);
ИначеЕсли РезВыбора=0 Тогда
Сообщить("Отмена выбора");
ИначеЕсли РезВыбора=-1 Тогда
Сообщить("Закончился таймаут ("+СокрЛП(ТаймАут)+" сек.)");
КонецЕсли;
Цитата: Злоп от Вчера в 04:04И - это самое - повырывать ноги прмяо до гланд тем, кто дает типа Предупреждение("АлеЧтоТо") - без таймаута, ругаюсь, плююсь и атата! и всегда походя сразу вкорячиваю таймаут если есть возможность. Ибо нефиг. Особенно в модуле проведения (в прошлом году не далее как пару раз натыкался на такое в самописке).Орефков, кажется, рассказывал что контролы окон типа Предупреждения, Вопрос разработчик нарисовал сам, вместо того чтобы взять системные, еще удивлялся, зачем разработчик движка потратил время впустую? Поэтому таймаут там срабатывает.
НачВремя=_GetPerformanceCounter();
ПутьК="";
ТаймАут=5;
Ответ=ФС.ВыбратьКаталог(ПутьК, "Выберите каталог для сохранения файлов выгрузок", ТаймАут);
КонВремя=_GetPerformanceCounter();
Если Ответ=0 Тогда
Если (КонВремя-НачВремя+1)/1000 > ТаймАут Тогда
Сообщить("Закончился таймаут ("+СокрЛП(ТаймАут)+" сек.)");
Иначе
Сообщить("Отмена выбора");
КонецЕсли;
Иначе
ПутьККат=ПутьК;
Сообщить(""+ПутьК);
КонецЕсли;
КонецЕсли;
ФСВинды = СоздатьОбъект("Shell.Application");
НачПапка=ФСВинды.NameSpace(КаталогИБ());
Попытка
ВыбКат = ФСВинды.BrowseForFolder(0,"Выберите каталог для сохранения файлов выгрузок",1+16,0); // НачПапка
Исключение
КонецПопытки;
Если ПустоеЗначение(ВыбКат)=0 Тогда
Попытка
ПутьККат=""+ВыбКат.Items().Item().Path;
Сообщить(""+ВыбКат.Items().Item().Type+": "+ВыбКат.Items().Item().Path);
Исключение
ПутьККат="";
Сообщить(""+ВыбКат.title);
КонецПопытки;
Иначе
Сообщить("Отмена выбора");
КонецЕсли;
Цитата: cr от 05 июля 2026, 10:17Выбор альтернативы - взять файл/отказаться от файла.Цитата: Злоп от 04 июля 2026, 19:38Проверил ВыбратьКаталог() у себя на Вин10Хоум.Ии? Что не так?
По таймауту кнопки пропадают.
А что по-твоему должно произойти после окончания таймаута?
Какая вообще цель указания таймаута для выбора?
Цитата: cr от 05 июля 2026, 10:17Какая вообще цель указания таймаута для выбора?Ну, ИМХО - как и везде, окно выбора должно просто закрыться, если юзверь открыл выбор и задумался на долго...
Цитата: Злоп от 04 июля 2026, 19:38Проверил ВыбратьКаталог() у себя на Вин10Хоум.Ии? Что не так?
По таймауту кнопки пропадают.
ФСО = СоздатьОбъект("ФС");
ФСО.ВыбратьКаталог();