Функция Случайное число, 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) 1382 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) 1500 05.10.11 16:53 Сейчас в теме
И ради такой фигни загружать целую ВК?
9. vkr (vkr) 101 14.10.11 10:00 Сейчас в теме
(2) Чтобы можно было, например, на языке 1С игрушку типа пасьянса реализовать... :D
10. Дмитрий Неважнов (bsturtle) 149 14.10.11 10:53 Сейчас в теме
(8) victuan,

:) и стоит
ради 1С - целый Windows грузить :)))
11. Дмитрий Неважнов (bsturtle) 149 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) 149 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) 149 16.02.12 00:14 Сейчас в теме
18. Алексей Куликов (avers007) 41 16.02.12 18:08 Сейчас в теме
Кроме игрушек бывает еще задача сформировать код доступа куда либо. И чтобы каждый раз был новый. Так что "+"
Оставьте свое сообщение