Related Posts
- Получение логина и пароля техподдержки 1С из базы
- Класс для вывода отчета в Excel
- Счет-фактура для УПП
- Библиотека классов для создания внешней компоненты 1С на C#
- Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
- Прайс-лист с артикулом в отдельной колонке
(0) Я даже без теста вижу, что спектр сдесь будет неоднородный — т.е. определённые числа будут выпадать чаще.
Уж лучше цепляться за _GetPerformanceCounter(), чем за ТекущееВремя()
Можно еще так
Функция ПолучитьСлучайноеЧисло(Мин,Макс)
//вместо Randomize
Для н = 1 По 100 Цикл
Уник = Новый УникальныйИдентификатор;
КонецЦикла;
//генерируем GUID
Уник = СокрЛП(Новый УникальныйИдентификатор);
//оставляем только цифры
Уник = СтрЗаменить(Уник,»-«,»»);
Уник = СтрЗаменить(Уник,»a»,»»);
Уник = СтрЗаменить(Уник,»b»,»»);
Уник = СтрЗаменить(Уник,»c»,»»);
Уник = СтрЗаменить(Уник,»d»,»»);
Уник = СтрЗаменить(Уник,»e»,»»);
Уник = СтрЗаменить(Уник,»f»,»»);
//знаменатель должен иметь такое же количество нулей + 1
Знаменатель = 10;
Для н = 2 По (СтрДлина(СтрЗаменить(Уник,Символы.НПП,»»))) Цикл
Знаменатель = Знаменатель * 10;
КонецЦикла;
Случ = Число(Уник) / Знаменатель; //здесь получается дробное случайное число от 0 до 1
//преобразуем его в случайное число из заданного интервала, округляем до целого
ЧислоИзИнтервала = Мин(Макс(Окр(Мин + (Макс-Мин)*Случ),Мин),Макс);
Возврат ЧислоИзИнтервала;
КонецФункции
Показать полностью
(3) можно еще так:
Показать полностью
🙂
(0) Ждать целую секунду? … Долго.
(3) Плюсую.
Мне нужно было получить несколько случайных чисел для 8.0
Вариант из (3) помог, т.к. скорость выполнения была не важна.
Можно просто использовать локальную переменную среды %RANDOM%
Может лучше малость подправленный вариант (3)
Показать
Может лучше малость подправленный вариант (3)
Показать
Автор ArtLy.
Я долго искал возможность создания генератора случайных чисел в 1С7.7 и вот свершилось. Разброс чисел по оценке — отлично. Используется средствами VBScript
//Глобальный модуль
Показать
//Где-то в модуле формы
Показать
Нам нужно было получать случайные числа в заданном диапазоне до 2-х знаков после запятой. Типовой генератор случайных чисел не может нецелые числа генерировать. Вышли из ситуации просто, следующим образом:
ГСЧ = Новый ГенераторСлучайныхЧисел;
СлучЧисло = ГСЧ.СлучайноеЧисло(НецелоеЧисло1*100, НецелоеЧисло2*100);
СлучЧисло=Окр(СлучЧисло/100,2);
Может кому пригодится, генератор от 1 до 99, выручает на семерке
_tmp=СоздатьОбъект(«MSScriptControl.ScriptControl»);
_tmp.language=»javascript»;
_rand= Цел(_tmp.eval(«Math.random()»)*100);
Сообщить(_rand);
ГСЧ = Новый ГенераторСлучайныхЧисел(Формат(ТекущаяДата(),»ДФ=ddMMyyyyhhmmss»));
ТС.НомерДокумента = СтрЗаменить(ГСЧ.СлучайноеЧисло(0,1000),» «,»»);
Проанализировав все что тут написано — объединил в наиболее приемлемое.
Вставлять в глобальный модуль
ЗЫЖ 7.7
Показать
(5) kitt, Эта штатная какашка выдает одно и тоже число((
(11)
Перед вызовом Rnd для инициализации генератора случайных чисел с начальным значением на основе системного таймера воспользуйтесь оператором Randomize без указания аргументов.
Код можно переписать так (будет генерить целые от 1 до 100):
Показать
(16)
Новый ГенераторСлучайныхЧисел(<НачальноеЧисло>)
Параметры:
<НачальноеЧисло> (необязательный)
Тип: Число.
Начальное число, которым инициализируется генератор случайных чисел.
Описание:
Генератор случайных чисел инициализируется начальным числом из параметра.
Последовательность случайных чисел для одного и того же начального числа будет одинакова.
нужно изменяющееся зерно задавать, например так
Не нужно выдумывать велосипед. При создании генератора случайных чисел не задавайте начальное число и все будет работать.
ГСЧ = Новый ГенераторСлучайныхЧисел();
Рэндом = ГСЧ.СлучайноеЧисло(0, 10000);
В синтаксис помощнике хоть и написали, что «Последовательность случайных чисел для одного и того же начального числа будет одинакова.», но почему-то не указали что это генератор не случайных чисел, а псевдослучайных. Такая функция есть почти у всех языков и они псевдослучайные.
Генератор псевдослучайных чисел, то есть устройство, которое выдает последовательность чисел, отвечающую определенным статистическим критериям случайности.
Например можно воспользоватся классов из Win (mscorlib.dll):
Rnd = СоздатьОбъект(«System.Random»);
Сообщить(Rnd.Next());
(20) Спасибо! действительно работает!
перем ч,м,с;
ТекущееВремя(ч,м,с);
чис=ч*ДатаЧисло(ТекущаяДата())+м*ДатаМесяц(ТекущаяДата())+с*ДатаГод(ТекущаяДата());
Сообщить(чис % 10000);
Применяется для генерации промо-кодов.
(3) Подскажите пожалуйста, а как его передать в процедуру и сообщить то число, которое получилось?
Выдает ошибку, к преобразованию значения типу Число не может быть выполнено
{ВнешняяОбработка.ВнешняяОбработка1.Форма.БыкиИКоровыФорма.Форма(30)}: Преобразование значения к типу Число не может быть выполнено
ЧислоИзИнтервала = Мин(Макс(Окр(Мин + (Макс-Мин)*Случ),Мин),Макс);
Help please