7.7 Рандом (random) в 1С

Тема в разделе "Общие вопросы "1С:Предприятие 7.7"", создана пользователем jaw, 23 ноя 2007.

  1. TopicStarter Overlay
    jaw
    Offline

    jaw

    Регистрация:
    13 сен 2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Как я понял стандартной функции выбирающей число наугад в 1С нету. Мож кто писал себе такую? Поделитесь. Или посоветуйте как написать.
  2. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    У 1С есть такая конфа "Экзаменатор".
    Здесь выложу одну процедуру (должна помочь разобраться), но сразу предупреждаю, что нужно ее подработать.
    Код:
    //********************************************************************************
    //**********   МЕХАНИЗМ ПОДБОРА ВОПРОСОВ
    //**** "Генератор случайных чисел"
    //___________________________________________________________________________________
    //Получение случайного числа
    //Возвращаемое значение - случайное число (номер вопроса)
    
    Функция глСлучайность(В, Н, Условие = 0) Экспорт
    //учитываем день, чтобы каждый день было по разному
    //учитываем время, чтобы каждую секунду было по разному
    //учитываем вызовы процедуры, чтобы при нескольких вызовах в одну секунду было по разному    
    
    Шаг     = Константа.ШагВызоваГСЧ;
    День    = НомерДняГода(ТекущаяДата());
    Вр      = ТекущееВремя(Ч, М, С);
    Вызовы  = ?(Вызовы > 7*Шаг, Шаг, Вызовы + Шаг);
    
    Если Условие = 1 Тогда  //это для ответов (макс=5) сделаем число поменьше, чтобы быстрее работало.
    СлЧисло = Цел(((С + 7 + Н)/Н)) + Н*5 + Вызовы;
    
    Иначе   //это для вопросов, их может быть много, поэтому получим число с запасом (побольше)
    СлЧисло = (В + Ч*3600 + М*60 + С + Н) - Цел((С + Н)/Н - Н) + СлЧисло*11 + Вызовы + День;  //получим случайное число
    
    КонецЕсли; 
    
    СлЧисло = Макс(СлЧисло, - СлЧисло);    // число должно быть всегда положительным 
    
    Пока СлЧисло > В Цикл          //Уменьшим число, чтобы оказаться в пределах общего количества вопросов
    СлЧисло = СлЧисло - В;
    
    КонецЦикла;
    
    Возврат(СлЧисло);
    
    КонецФункции  //глСлучайность
    
    
  3. yourname
    Offline

    yourname Опытный в 1С

    Регистрация:
    15 июл 2007
    Сообщения:
    84
    Симпатии:
    0
    Баллы:
    26
    Такую тему уже открывал. См в поиске. А вообще 3 варианта:
    1) Как уже писал WaRDeR, генерировать псевдослучайное из Даты/Времени
    2) Vbscript
    3) Addon1c.dll
  4. TopicStarter Overlay
    jaw
    Offline

    jaw

    Регистрация:
    13 сен 2007
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Спс. Буду смотреть.
  5. 1Yes
    Offline

    1Yes

    Регистрация:
    15 сен 2007
    Сообщения:
    30
    Симпатии:
    0
    Баллы:
    1
    Где-то неделю назад я открыл новые сообщения и там были 2 таких темы про генератор. Я отписался в другой а эту нечаянно закрыл а открывать было лень :)
    Вот ссылка: http://www.1c-pro.ru/index.php?showtopic=8162
  6. Savant
    Offline

    Savant Опытный в 1С

    Регистрация:
    19 ноя 2007
    Сообщения:
    252
    Симпатии:
    4
    Баллы:
    29
    Есть ещё идейка:

    Код:
    // Запускаем генератор случайных чисел
    Процедура ЗапускГСЧ(НижнийПредел,ВерхнийПредел) Экспорт
    Перем Часы;
    Перем Минуты;
    Перем Секунды;
    НижнийПределГСЧ=НижнийПредел;
    ВерхнийПределГСЧ=ВерхнийПредел;
    ТекущееВремя(Часы,Минуты,Секунды);
    ПоследнееСлучайноеЧисло=(Число(Секунды)*1000000+Число(Часы)*10000+Число(Минуты)*100+Число(Секунды))/100000000;
    ЗапущенГСЧ=1;
    КонецПроцедуры
    
    // А после с помощью фунции "СлучайноеЧисло" возвращаем случайное число
    Функция СлучайноеЧисло() Экспорт
    Если ЗапущенГСЧ=1 Тогда
    Врем=((ПоследнееСлучайноеЧисло*11+3.1415926)-Цел(ПоследнееСлучайноеЧисло*11+3.1415926));
    ПоследнееСлучайноеЧисло=Врем;
    Возврат Цел(Врем*(ВерхнийПределГСЧ-НижнийПределГСЧ))+НижнийПределГСЧ;
    Иначе
    Возврат -1;
    КонецЕсли;
    КонецФункции
    
    
Похожие темы
  1. yourname
    Ответов:
    5
    Просмотров:
    4.028
Загрузка...

Поделиться этой страницей