Последние сообщения

#1
7.7 / Процедура Чтото(Знач ПараметрК...
Последний ответ от Злоп - Вчера в 21:32
Что-то где-то когда=-то у меня отложилось, что формальные параметры процедуры/функции с определителем "Знач" в списке параметров должны идти первыми, т.е. сначала все параметры с определеителем "знач" (если их несколько), а потом - остальные параметры...
Есть такие тонкости или меня клинит...?
#2
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от Злоп - Вчера в 21:16
Цитата: cr от Вчера в 00:51Сами-то попробуйте: успеете в таймаут прокрутить список в начало и выбрать строку?
как написал чуть выше - ставить в выбор таймаут 3-5 сек - это кодер, оторваннный от реальности. таких к работе с пользователями подпускать нельзя.
#3
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от Злоп - Вчера в 21:14
Цитата: cr от 06 июля 2026, 19:49Ты что хочешь: задать таймаут 3-5 секунд и чтобы окно выбора закрылось потому что юзер не успел выбрать?
Над пользователем издеваться не надо, но и бардак -  с тем же выбором файла - устраивать тоже не надо. а то везде бардак будет. И если юзер сначала тыкает выбрать файл, а потом 5 минут ищет флешку - это не кодер дятел,а пользователь раздолбай. Ну и выбор файла из произвольного места - вещь редкая, да и за 120-180 сек - если сопли не жевать, напокурить не отвлекаться - файл вполне можно выбрать. А не успел за 120-180 мин флешку найти - ну вернулся процесс в точку "начни выбор файла" - найдет флешку, втыркнет, жмакнет кнопку. Следующий раз может сразу флешку догадается воткнуть. до 180 сек - вполне хватает. Для своих скриптов я обычно ставлю 60, для пользовательских процессов 120-180 сек, тем более - как верно отмечено - место выбора уже в большинстве случаев известно, запомнено в настройках. Так что никакой проюлемы в таймауе выборов всяких - не вижу.
#4
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от cr - Вчера в 00:51
Вот выбор из всех вложенных папок с таймаутом.
Сами-то попробуйте: успеете в таймаут прокрутить список в начало и выбрать строку?
СпКат=СоздатьОбъект("СписокЗначений");
СкриптШелл = СоздатьОбъект("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 Тогда
	Сообщить("Закончился таймаут ("+СокрЛП(ТаймАут)+" сек.)"); 
КонецЕсли; 
Мазахисты!
Вас к юзерам на таймаут нельзя подпускать!
#5
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от cr - 06 июля 2026, 22:42
Вот выбор папки с таймаутом:
СпКат=СоздатьОбъект("СписокЗначений");
ФСВинды= СоздатьОбъект("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 Тогда
   Сообщить("Закончился таймаут ("+СокрЛП(ТаймАут)+" сек.)"); 
КонецЕсли;
#6
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от cr - 06 июля 2026, 19:49
Цитата: Злоп от 06 июля 2026, 04:04И - это самое - повырывать ноги прмяо до гланд тем, кто дает типа Предупреждение("АлеЧтоТо") - без таймаута, ругаюсь, плююсь и атата! и всегда походя сразу вкорячиваю таймаут если есть возможность. Ибо нефиг. Особенно в модуле проведения (в прошлом году не далее как пару раз натыкался на такое в самописке).
Орефков, кажется, рассказывал что контролы окон типа Предупреждения, Вопрос разработчик нарисовал сам, вместо того чтобы взять системные, еще удивлялся, зачем разработчик движка потратил время впустую? Поэтому таймаут там срабатывает.
А выбор файла/каталога - это системное окно.
И "закрыть" это окно (скорее всего, тот же Виндовс) приложению не дают. Таймаут явно срабатывает - кнопки исчезают, но события (закрытия окна) не происходит, поэтому -1 никогда не возвращается.

    
НачВремя=_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);
   КонецПопытки;
Иначе
   Сообщить("Отмена выбора");
КонецЕсли; 

На самом деле, никакого смысла в этом тамауте нет. Потому что окна Предупреждение или Вопрос выводятся программно, а выбор каталога предназначен только для интерактивного действия пользователя - там таймаут не только не имеет смысла, но и просто был бы игрушкой для идиотов и убогих юмористов из предыдущего сообщения.
Ты что хочешь: задать таймаут 3-5 секунд и чтобы окно выбора закрылось потому что юзер не успел выбрать?
Это ты над кем так хочешь издеваться? И для чего? Хорошо если ты ему сразу дашь начальный каталог где-то рядом, а если ему надо выбрать каталог на флешке, которую еще не вставили в комп? Он никода не успеет выбрать по твоему таймауту потому что долго будет его искать. И что он должен делать после этого? Ноги тебе до гланд вырывать за такие фокусы с таймаутом?

#7
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от MWW_Ruza - 06 июля 2026, 11:06
Семерка ещё сырая ;)
#8
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от Злоп - 06 июля 2026, 04:04
Цитата: cr от 05 июля 2026, 10:17
Цитата: Злоп от 04 июля 2026, 19:38Проверил ВыбратьКаталог() у себя на Вин10Хоум.
По таймауту кнопки пропадают.
Ии? Что не так?
А что по-твоему должно произойти после окончания таймаута?
Какая вообще цель указания таймаута для выбора?
Выбор альтернативы - взять файл/отказаться от файла.
Взятие файла приводит к продвижению по шкале процесса "вперед". То есть будут какие-то изменения. Это д.б. осознанный выбор пользователя, т.к. в большинстве случаев это приводит к каким-либо изменениям. Если юзер "задумался/отошел" - оставлять висеть модальное окно есть плохо. Поэтому модальное окно искусственно делаем выбор по таймауту такой, который минимизирует возможный ущерб/последующие действия. Такой выбор из двух - один=отказ.
Поэтому таймаут истек - окно закрылось, процесс дальше не пошел. Я.п. что код должен предусматривать возможность обработки таймаута спецобразом или же как экиваалент отказа. Имхо.
Никогда с таймаутом проблем по логике обработки у меня не было. У себя даже не припомню, чтобы таймаут итерпретировался по коду как-то иначе чем "отказ".
.
И - это самое - повырывать ноги прмяо до гланд тем, кто дает типа Предупреждение("АлеЧтоТо") - без таймаута, ругаюсь, плююсь и атата! и всегда походя сразу вкорячиваю таймаут если есть возможность. Ибо нефиг. Особенно в модуле проведения (в прошлом году не далее как пару раз натыкался на такое в самописке).
#9
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от MWW_Ruza - 05 июля 2026, 12:52
Цитата: cr от 05 июля 2026, 10:17Какая вообще цель указания таймаута для выбора?
Ну, ИМХО - как и везде, окно выбора должно просто закрыться, если юзверь открыл выбор и задумался на долго...

И, просто по тому, что он там есть, и описан в СП.
#10
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от cr - 05 июля 2026, 10:17
Цитата: Злоп от 04 июля 2026, 19:38Проверил ВыбратьКаталог() у себя на Вин10Хоум.
По таймауту кнопки пропадают.
Ии? Что не так?
А что по-твоему должно произойти после окончания таймаута?
Какая вообще цель указания таймаута для выбора?