Отключить кэширование функции на сервере

1. getnull 17.07.24 16:38 Сейчас в теме
Добрый день!
1С:Предприятие 8.3 (8.3.21.1895)

Написал функцию генерации пароля, при вызове этой функции из цикла возвращается одно и то же значение, а не разные, такое ощущение что функция выполняестя один раз и далее возвращает кэш.


Для теста создал обработку и две команды
&НаКлиенте
Процедура ВыполнитьНаКлиенте (Команда)
	
	Для Счетчик = 1 По КоличествоПаролей Цикл
        НовыйПароль = СоздатьНовыйПароль();
		Сообщить(НовыйПароль); 
	КонецЦикла
	
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьНаСервере(Команда)
	
	ЗапускССервера(); 
	
КонецПроцедуры
 
&НаСервере
Процедура ЗапускССервера()
	
	Для Счетчик = 1 По КоличествоПаролей Цикл
        НовыйПароль = СоздатьНовыйПароль();
		Сообщить(НовыйПароль); 
	КонецЦикла; 
	
КонецПроцедуры 

&НаСервере
Функция СоздатьНовыйПароль()
	
	ГСЧ = Новый ГенераторСлучайныхЧисел();
  	Пароль = "";
	ИспользуемыеСимволы = "243456789AQWERTYUPASDFGHJKZXCVBNMqwertyupasdfghjkzxcvbnm";
	Н = СтрДлина(ИспользуемыеСимволы);
	Пока СтрДлина(Пароль) < 8 Цикл
	    НекийСимвол = Сред(ИспользуемыеСимволы ,(ГСЧ.СлучайноеЧисло(1, Н)),1);
	    Пароль = Пароль + НекийСимвол;
	КонецЦикла;        
	
	Возврат Пароль;
	
КонецФункции 
Показать


Например делаем КоличествоПаролей = 2
При выполнении команды ВыполнитьНаКлиенте генерируются всегда разные пароли.
При выполнении команды ВыполнитьНаСервере, генерируется один и тот же пароль в цикле. Словно функция из общего модуля не выполняется, а берется кэшированное значение. При этом если мы ставим точку остановы куда-нибудь внутри цикла, то будут сгенерированы разные пароли.

Если использовать клиент-серверный вариант 1С, проблема имеется.
Если использовать файловый вариант, проблемы нет.
По теме из базы знаний
Найденные решения
2. SlavaKron 17.07.24 16:47 Сейчас в теме
(1)
ГСЧ = Новый ГенераторСлучайныхЧисел();
Передавайте параметр в конструктор.
4. spacecraft 17.07.24 17:25 Сейчас в теме
(3) там в любом случае подставляется число. Просто если его не подставлять, то подставляется:
"Генератор случайных чисел инициализируется источником энтропии".
Что при быстром выполнении это одно и тоже значение.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 17.07.24 16:47 Сейчас в теме
(1)
ГСЧ = Новый ГенераторСлучайныхЧисел();
Передавайте параметр в конструктор.
3. getnull 17.07.24 17:22 Сейчас в теме
(2) Спасибо, при передаче параметра результат меняется

Сделал примерно вот такое:
НачальноеЧисло = НачальноеЧисло+ 1;

&НаСервере
Функция СоздатьНовыйПароль(НачальноеЧисло)
    
    ГСЧ = Новый ГенераторСлучайныхЧисел(НачальноеЧисло);
      Пароль = "";
    ИспользуемыеСимволы = "243456789AQWERTYUPASDFGHJKZXCVBNMqwertyupasdfghjkzxcvbnm";
    Н = СтрДлина(ИспользуемыеСимволы);
    Пока СтрДлина(Пароль) < 8 Цикл
        НекийСимвол = Сред(ИспользуемыеСимволы ,(ГСЧ.СлучайноеЧисло(1, Н)),1);
        Пароль = Пароль + НекийСимвол;
    КонецЦикла;        
    
    Возврат Пароль;
    
КонецФункции 
Показать


Но интересно почему, когда ставится точка остановы внутри цикла, то генерируются разные пароли. А если точку остановы не ставить то возвращает одно и то же значение.
4. spacecraft 17.07.24 17:25 Сейчас в теме
(3) там в любом случае подставляется число. Просто если его не подставлять, то подставляется:
"Генератор случайных чисел инициализируется источником энтропии".
Что при быстром выполнении это одно и тоже значение.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот