Функция Случайное число, RANDOM, RND для 1С 7.7

Опубликовал Дмитрий Неважнов (bsturtle) в раздел Программирование - Практика программирования

В 1С нет функции случайного числа. представляю Вам свою. основана на получении идентификатора и из него случайного числа. от 0 до 10, от 0 до 100 и от 0 до 1000.

функция ПолучитьСлучайноеЧисло (ВерхняяВилка=1);

    Если
ЗагрузитьВнешнююКомпоненту("V7Plus.dll") <> 1 Тогда
       
Сообщить("Ошибка загрузки компоненты V7+");
        возврат
0;
    КонецЕсли;

   
НТТРСистИнформ = СоздатьОбъект("AddIn.V7SysInfo");

   
//получим уникальный идентификатор:
   
СлучайнаяСтрока = СокрЛП(НТТРСистИнформ.СоздатьGUID()); // вида:11CADC0A-96C4-4547-81E4-889CB89634BB

    //Суммируем коды всех символов этой случайной строки
   
Куча=1;
    для
СчетчикСимволов=1 по СтрДлина(СлучайнаяСтрока) цикл
       
куча = куча+КодСимв(Сред(СлучайнаяСтрока,СчетчикСимволов,1))*СчетчикСимволов;
    Конеццикла;

    возврат
куча % ВерхняяВилка;
конецфункции

//*******************************************
Процедура Сформировать()
   
НеБолееТысячи = 1000;
   
НеБолееСта = 100;
   
НеБолееДесяти = 10;

   
сообщить("Случайное число не более тысячи:"+ПолучитьСлучайноеЧисло(НеБолееТысячи));
   
сообщить("Случайное число не более ста:"+ПолучитьСлучайноеЧисло(НеБолееСта));
   
сообщить("Случайное число не более Десяти:"+ПолучитьСлучайноеЧисло(НеБолееДесяти));
КонецПроцедуры

Скачать файлы

Наименование Файл Версия Размер
пример использования. обработка ert
.ert 45,00Kb
28.09.11
16
.ert 45,00Kb 16 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Тимофей Шантин (ShantinTD) 85 28.09.11 20:03 Сейчас в теме
У нас извратились на получение "случайного" числа из
_GetPerformanceCounter();
2. Доржи Балбаров (Angeros) 29.09.11 04:56 Сейчас в теме
Всегда интересовало нафига в учетной системе функция рандом?
3. Ирина Пятакова (Alraune) 1362 29.09.11 07:56 Сейчас в теме
В 1С нет функции случайного числа

в 8 есть
4. Иван Иванов (Famza) 80 29.09.11 08:30 Сейчас в теме
(2) А распределение зарплаты?
5. Доржи Балбаров (Angeros) 29.09.11 10:18 Сейчас в теме
6. Alex210 (janber) 29.09.11 11:42 Сейчас в теме
Оригинально!
Хорошо бы еще для полноты картины добавить параметр "нижняя вилка"
7. Александр Лыткин (TrinitronOTV) 29.09.11 12:03 Сейчас в теме
Famza пишет:

(2) А распределение зарплаты?

хорошо хоть не размер самой зарплаты
8. Victor Nespyatin (victuan) 1440 05.10.11 16:53 Сейчас в теме
И ради такой фигни загружать целую ВК?
9. vkr (vkr) 102 14.10.11 10:00 Сейчас в теме
(2) Чтобы можно было, например, на языке 1С игрушку типа пасьянса реализовать... :D
10. Дмитрий Неважнов (bsturtle) 150 14.10.11 10:53 Сейчас в теме
(8) victuan,

:) и стоит
ради 1С - целый Windows грузить :)))
11. Дмитрий Неважнов (bsturtle) 150 14.10.11 10:54 Сейчас в теме
(9) vkr, А я делал эту функцию для того чтобы табели отработанного времени охранникам формировать )))
12. Доржи Балбаров (Angeros) 16.10.11 07:25 Сейчас в теме
(11) Ну ну. купить среду для бизнес приложений, чтобы в пасьянс погонять. :)
13. Ruslan (flash82) 09.02.12 08:35 Сейчас в теме
прикольно, буду иметь ввиду...
14. Gen Tay (GenTay) 15.02.12 22:23 Сейчас в теме
Хорошая вещь, у себя реализовал прикольно.
15. Дмитрий Неважнов (bsturtle) 150 15.02.12 22:37 Сейчас в теме
16. Кошки Рулят (Кошки рулят) 15.02.12 23:43 Сейчас в теме
Фигня.
Я пользуюсь всегда вот такой функцией.
Из всех, что мне давелось попробовать, я считаю, эта дает самый хороший результат.

Перем КакоеТоЧисло;
Функция ДатьСлучайноеЧисло()
m35=34359738368;
m36=68719476736;
m37=137438953472;
КакоеТоЧисло=5*КакоеТоЧисло;
Если КакоеТоЧисло>=m37 Тогда КакоеТоЧисло=КакоеТоЧисло-m37 КонецЕсли;
Если КакоеТоЧисло>=m36 Тогда КакоеТоЧисло=КакоеТоЧисло-m36 КонецЕсли;
Если КакоеТоЧисло>=m35 Тогда КакоеТоЧисло=КакоеТоЧисло-m35 КонецЕсли;
Возврат Цел(КакоеТоЧисло/m35*101);
КонецФункции // ДатьСлучайноеЧисло()
Процедура ПриОткрытии(Настр)
КакоеТоЧисло=_GetPerformanceCounter()*_GetPerformanceCounter();
КонецПроцедуры // ПриОткрытии
Процедура СлучайноеЧисло()
СлучайноеЧисло=ДатьСлучайноеЧисло();
СлучайноеЧисло=СлучайноеЧисло%(Предел-1)+1;
КонецПроцедуры // СлучайнаяПозиция()

Таким образом получается ХорошоСлучайное число в диапазоне от 1 до Предел.
А всякие простые алгоритмы, типа GetPerformanceCounter()% Предел дают фуфло и для использования в игрушках не канают совершенно. Проверено много раз ...
17. Дмитрий Неважнов (bsturtle) 150 16.02.12 00:14 Сейчас в теме
18. Алексей Куликов (avers007) 39 16.02.12 18:08 Сейчас в теме
Кроме игрушек бывает еще задача сформировать код доступа куда либо. И чтобы каждый раз был новый. Так что "+"