Имя: Пароль:
1C
1С v8
v8: Случайное число в диапазоне и с шагом?
0 axell
 
17.01.14
16:41
ГЕН = Новый ГенераторСлучайныхЧисел();
ЧислоА = Ген.СлучайноеЧисло(0,8);
МассивЧисел = Новый Массив;
МассивЧисел.Добавить(60);
МассивЧисел.Добавить(65);
МассивЧисел.Добавить(70);
МассивЧисел.Добавить(75);
МассивЧисел.Добавить(80);
МассивЧисел.Добавить(85);
МассивЧисел.Добавить(90);
МассивЧисел.Добавить(95);
МассивЧисел.Добавить(100);
Возврат(МассивЧисел[ЧислоА]);

Ребята всем привет стоит задача получения числа в диапазоне от 60 до 100 с шагом 5. При обращении в цикле к данной функции в отладчике каждый раз получается разное число а в режиме предприятия если без отладчика всегда одинаковое.
Может быть еще кто то делал что то подобное?
1 zladenuw
 
17.01.14
16:44
а где вызываешь ? код покажи вес
2 zladenuw
 
17.01.14
16:46
(0) у нас был прикол. если вызываешь его в функции и возвращаешь значение то оно всегда одинаковое. и симптомы как у тебя. пришлось делать ее глобальной в модуле обработки. тогда проблемы исчезли
3 Волшебник
 
модератор
17.01.14
16:46
гсч = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
4 Asmody
 
17.01.14
16:48
какой кошмар! дарю:

ГЕН = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());
Возврат Ген.СлучайноеЧисло(0,8)*5+60;
5 axell
 
17.01.14
16:51
(3)Почти помогло
60
60
60
70
70
70
70
70
70
65
На 10 записей вот так сгенерировал
6 axell
 
17.01.14
16:53
(4)Виктор по твоему коду вот что получилось
70
70
70
70
70
70
70
70
70
70
7 Волшебник
 
модератор
17.01.14
16:55
(5) Слишком быстро вызываешь. Делай паузу между вызовами, чтобы миллисекунды поменялись.

Кстати, можешь ещё записать белый шум в файл и брать оттуда числа для инициализации ГСЧ
8 axell
 
17.01.14
16:58
(7)Станислав а как паузу сделать??? Про быстрый вызов понял когда ты показал код с ТекущаяУниверсальнаяДатаВМиллисекундах() и понял что когда отладчиком смотришь время дольше длиться.
9 Волшебник
 
модератор
17.01.14
16:59
(8) Пустым циклом можно. Не используй уже использованные миллисекунды.
10 Asmody
 
17.01.14
17:02
не нужно каждый раз заново создавать генератор
11 Волшебник
 
модератор
17.01.14
17:03
(10)+ Да, достаточно создать ГСЧ один раз до начала работы цикла, а потом получать из него последовательность случ.чисел.

Вместо миллисекунд ещё можно сгенерить GUID средствами ОС и взять из него только цифры, которые передать в конструктор ГенераторСлучайныхЧисел.
12 acsent
 
17.01.14
17:06
(11) гуид можно и средствами 1с генерировать
13 acsent
 
17.01.14
17:07
(11) последовательность всегда будет одинакова
14 axell
 
17.01.14
17:37
Ребята всем спасибо!
15 Волшебник
 
модератор
17.01.14
17:38
16 Волшебник
 
модератор
17.01.14
17:55
(13)+ Да, но при каждом старте миллисекунды скорее всего будут разными, так что все числа будут достаточно случайными
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn