Отключить кэширование функции на сервере
Добрый день!
1С:Предприятие 8.3 (8.3.21.1895)
Написал функцию генерации пароля, при вызове этой функции из цикла возвращается одно и то же значение, а не разные, такое ощущение что функция выполняестя один раз и далее возвращает кэш.
Для теста создал обработку и две команды
Например делаем КоличествоПаролей = 2
При выполнении команды ВыполнитьНаКлиенте генерируются всегда разные пароли.
При выполнении команды ВыполнитьНаСервере, генерируется один и тот же пароль в цикле. Словно функция из общего модуля не выполняется, а берется кэшированное значение. При этом если мы ставим точку остановы куда-нибудь внутри цикла, то будут сгенерированы разные пароли.
Если использовать клиент-серверный вариант 1С, проблема имеется.
Если использовать файловый вариант, проблемы нет.
1С:Предприятие 8.3 (8.3.21.1895)
Написал функцию генерации пароля, при вызове этой функции из цикла возвращается одно и то же значение, а не разные, такое ощущение что функция выполняестя один раз и далее возвращает кэш.
Для теста создал обработку и две команды
&НаКлиенте
Процедура ВыполнитьНаКлиенте (Команда)
Для Счетчик = 1 По КоличествоПаролей Цикл
НовыйПароль = СоздатьНовыйПароль();
Сообщить(НовыйПароль);
КонецЦикла
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьНаСервере(Команда)
ЗапускССервера();
КонецПроцедуры
&НаСервере
Процедура ЗапускССервера()
Для Счетчик = 1 По КоличествоПаролей Цикл
НовыйПароль = СоздатьНовыйПароль();
Сообщить(НовыйПароль);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция СоздатьНовыйПароль()
ГСЧ = Новый ГенераторСлучайныхЧисел();
Пароль = "";
ИспользуемыеСимволы = "243456789AQWERTYUPASDFGHJKZXCVBNMqwertyupasdfghjkzxcvbnm";
Н = СтрДлина(ИспользуемыеСимволы);
Пока СтрДлина(Пароль) < 8 Цикл
НекийСимвол = Сред(ИспользуемыеСимволы ,(ГСЧ.СлучайноеЧисло(1, Н)),1);
Пароль = Пароль + НекийСимвол;
КонецЦикла;
Возврат Пароль;
КонецФункции
ПоказатьНапример делаем КоличествоПаролей = 2
При выполнении команды ВыполнитьНаКлиенте генерируются всегда разные пароли.
При выполнении команды ВыполнитьНаСервере, генерируется один и тот же пароль в цикле. Словно функция из общего модуля не выполняется, а берется кэшированное значение. При этом если мы ставим точку остановы куда-нибудь внутри цикла, то будут сгенерированы разные пароли.
Если использовать клиент-серверный вариант 1С, проблема имеется.
Если использовать файловый вариант, проблемы нет.
По теме из базы знаний
- 1С8:борьба - личный опыт работы с платформой 1с8
- 1С:Предприятие Бухгалтерия переход с редакции 2.0 на 3.0. Практика перевода информационной базы для работы в управляемом приложении.
- Ускорение чтения правил обмена в УПП 1.3 в 20 раз!
- Описание почти всех событий технологического журнала
- Пайплайны Jenkins - программирование и настройка. Загружаемые модули. Цикл "Многопоточный CI для 1С", часть 5
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Спасибо, при передаче параметра результат меняется
Сделал примерно вот такое:
НачальноеЧисло = НачальноеЧисло+ 1;
Но интересно почему, когда ставится точка остановы внутри цикла, то генерируются разные пароли. А если точку остановы не ставить то возвращает одно и то же значение.
Сделал примерно вот такое:
НачальноеЧисло = НачальноеЧисло+ 1;
&НаСервере
Функция СоздатьНовыйПароль(НачальноеЧисло)
ГСЧ = Новый ГенераторСлучайныхЧисел(НачальноеЧисло);
Пароль = "";
ИспользуемыеСимволы = "243456789AQWERTYUPASDFGHJKZXCVBNMqwertyupasdfghjkzxcvbnm";
Н = СтрДлина(ИспользуемыеСимволы);
Пока СтрДлина(Пароль) < 8 Цикл
НекийСимвол = Сред(ИспользуемыеСимволы ,(ГСЧ.СлучайноеЧисло(1, Н)),1);
Пароль = Пароль + НекийСимвол;
КонецЦикла;
Возврат Пароль;
КонецФункции
ПоказатьНо интересно почему, когда ставится точка остановы внутри цикла, то генерируются разные пароли. А если точку остановы не ставить то возвращает одно и то же значение.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот