Имя: Пароль:
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)+ Да, но при каждом старте миллисекунды скорее всего будут разными, так что все числа будут достаточно случайными
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой