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

#11
7.7 / Re: Процедура Чтото(Знач Парам...
Последний ответ от Злоп - 09 июля 2026, 11:32
Цитата: Харлампий Дымба от 08 июля 2026, 23:04Есть только пара приколов с опущенными / неопущенными запятыми.
где-то было подробно описано, надо бы перечитать
#12
7.7 / Re: Процедура Чтото(Знач Парам...
Последний ответ от Злоп - 09 июля 2026, 11:31
Цитата: ADirks от 08 июля 2026, 07:30:))
Вообще пофигу, хоть первыми, хоть последними, хоть вперемежку.
Модификатор 'Знач' говорит о том, что параметр передается по значению, а не по ссылке.

В 1С вообще нет таких приколов с привязкой к расположению формальных параметров.
Понял, значит меня переклинило...
#13
7.7 / Re: Процедура Чтото(Знач Парам...
Последний ответ от Харлампий Дымба - 08 июля 2026, 23:04
Цитата: ADirks от 08 июля 2026, 07:30В 1С вообще нет таких приколов с привязкой к расположению формальных параметров.
Есть только пара приколов с опущенными / неопущенными запятыми.

#14
7.7 / Re: Глюк, фича, или я чего-то ...
Последний ответ от Харлампий Дымба - 08 июля 2026, 22:37
Цитата: cr от 07 июля 2026, 00:51Мазахисты!
Вас к юзерам на таймаут нельзя подпускать!
Я совсем другое увидел в этой теме.
MWW_Ruza обнаружил забавный баг и проиллюстрировал его на форуме (не рабочим кодом - а чтоб быстро проверить поставил в коде 5 секунд). Баг, на который никто никогда не натыкался, просто потому что мало кто пользовался таймаутом в выборе файла вообще, мало кто пользовался коротким временем таймаута, мало кто проверял, что там случится после работы таймаута.
Все посмотрели, проверили, намотали на ус - таймаут не работает как предполагается и использовать его в функциях выбора файлов и каталогов не стоит.
Плюс теперь в теме есть куча интересного кода для организации выбора другими средствами.
Все в плюсе.


#15
7.7 / Re: Процедура Чтото(Знач Парам...
Последний ответ от ADirks - 08 июля 2026, 07:30
:))
Вообще пофигу, хоть первыми, хоть последними, хоть вперемежку.
Модификатор 'Знач' говорит о том, что параметр передается по значению, а не по ссылке.

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