AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.10.2006, 11:41   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Angry Random!!!!
Доброго времени суток, уважаемые дамы и господа!!! Есть проблема. При заполнении временной таблицы необходимо одно из полей заполнить случайным числом (не спрашивайте почиму - так надо). В аксапте входящим значением в Random является текущее время (вроде). Если в одну секунду заполняются несколько запеисей, то и значение соответственно равны. А так низяяя!!! Как быть??!!! Подскажите пожалуйста... Заранее благодарен.

PHP код:
void fillTmpReqPoGroups()
{
    
ReqPO                     reqPO;
    
ReqGroup                  reqGroup;
    
InventLocationPriority locationPriority;
    
RandomGenerate random = new RandomGenerate();
    ;
    while (
queryRun.next())
    {
        
reqPO    queryRun.get(tablenum(ReqPO));

        
locationPriority InventLocation::find(reqPO.inventDim().InventLocationId).InventLocationPriority;
        
tmpItemInventDimQty.clear();
        
tmpItemInventDimQty.initFromReqPo(reqPO);
        
tmpItemInventDimQty.RandomFactor                 random.randomInt();
        
tmpItemInventDimQty.PlanningWithSubstituteItems  reqGroup.WW_PlanningWithSubstituteItems;
        
tmpItemInventDimQty.DistributionType             reqGroup.WW_DistributionType;
        
tmpItemInventDimQty.MaxQtySubstituteItems        reqGroup.WW_MaxQtySubstituteItems;
        
tmpItemInventDimQty.InventLocationPriority       locationPriority;
        
tmpItemInventDimQty.insert();
    }

PS: действие происходит в рамках транзакции
За это сообщение автора поблагодарили: mazzy (5).
Старый 19.10.2006, 11:42   #2  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
А WinAPI::createGUID(); Не пойдет?
Уникальность гарантируется. Правда это не число.

И все же, расскажите плиз смысл этого. Ну очень любопытно.

Последний раз редактировалось oip; 19.10.2006 в 11:46.
За это сообщение автора поблагодарили: iCloud (2).
Старый 19.10.2006, 11:49   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от oip Посмотреть сообщение
А WinAPI::createGUID(); Правда это не число.
А что это?
Старый 19.10.2006, 11:50   #4  
Dolter is offline
Dolter
1C
1C
 
83 / 18 (1) ++
Регистрация: 18.11.2005
Не знаю как в Аксапте пишется, вот код на одинэске:

Sc = CreateObject("MSScriptControl.ScriptControl");
Sc.Language = "VBscript";
Sc.ExecuteStatement("Randomize");
_Rnd = Sc.Eval("RND");

;-)
Старый 19.10.2006, 11:51   #5  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Sada Посмотреть сообщение
А что это?
Что-то типа "00659fd6-0ea9-4897-b226-8b3c74b85d1b".
Уникальнее не придумаешь.
http://ru.wikipedia.org/wiki/GUID
Старый 19.10.2006, 11:54   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Sada Посмотреть сообщение
При заполнении временной таблицы необходимо одно из полей заполнить случайным числом (не спрашивайте почиму - так надо).
Разберитесь с семейством классов BM*. Это BenchMark*

Задача этого модуля - заполнить таблицы случайными значениями (по заданным правилам и диапазонам) и протестировать скорость выполнения операций по заданным сценариям.


То, что вам нужно, выполняет класс BMrandom.
__________________
полезное на axForum, github, vk, coub.
Старый 19.10.2006, 12:06   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от mazzy Посмотреть сообщение
То, что вам нужно, выполняет класс BMrandom.
А можно пример, а то чтото не выходит у меня. Все время одно число 'генерит'.
Старый 03.06.2011, 14:50   #8  
G.Menshikh is offline
G.Menshikh
Участник
 
16 / 11 (1) +
Регистрация: 25.04.2006
Адрес: Брн
Цитата:
Сообщение от mazzy Посмотреть сообщение
Разберитесь с семейством классов BM*. Это BenchMark*

Задача этого модуля - заполнить таблицы случайными значениями ....
Спасибо за подсказку про это семейство

Вопросик возник
Есть класс BMText метод new
там есть такая строка
textBase = ' 0123456789abcdefghijklmnopqrstuvwxyzжшеABCDEFGHIJKLMNOPQRSTUVWXYZЖШЕ';

Не могу понять нафига там русские буквы ЖШЕ
это может уже наши со временем дописали или так в стандарте?
Старый 19.10.2006, 11:55   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
В сводном планировании создаются спланированные переносы. У каждого склада есть свой приоритет. Раздаем товар сначала складам у которых есть приоритеты (в зависимости от значения приоритета), а затем рэндомом генерим приоритеты тем складам у которых значение ноль. Вот для того чтобы времы от времени появлялся товар на этих складах (где приоритет ноль) и выставляю этот рэндом - некий такой виртуальный приоритет. Мож не совсем по 'научному' объяснил, но вот как то так...
Старый 19.10.2006, 12:02   #10  
Bil Meshkoff is offline
Bil Meshkoff
former champion
Аватар для Bil Meshkoff
 
83 / 30 (2) +++
Регистрация: 09.08.2006
Адрес: USSR
Цитата:
Сообщение от Sada Посмотреть сообщение
Раздаем товар сначала складам у которых есть приоритеты (в зависимости от значения приоритета), а затем рэндомом генерим приоритеты тем складам у которых значение ноль. Вот для того чтобы времы от времени появлялся товар на этих складах (где приоритет ноль) и выставляю этот рэндом - некий такой виртуальный приоритет
Похоже, Ваш руководитель - еще тот массовик-затейник!
__________________
"Let's get ready to r-r-r-um-m-m-mble!!!" (с) M.Buffer
Старый 19.10.2006, 12:04   #11  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Цитата:
Сообщение от Bil Meshkoff Посмотреть сообщение
Похоже, Ваш руководитель - еще тот массовик-затейник!
Скучать не приходиться! А это плюс!!!
За это сообщение автора поблагодарили: Bil Meshkoff (1).
Старый 19.10.2006, 12:40   #12  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Случилось чудо!!! Только метод new этого класса немного доработал...

PHP код:
void new(int seed date2num(SystemDateGet()) + timeNow())
{
    
Session session = new Session();
    
int     _sessionId session.sessionId();
    if (
_sessionId>32768)
        
_sessionId 65536-_sessionId;
    if (
seed == 0// due to midnight timenow() is 0
        
seed 17;
    
prevFraction this.fraction(logn(seed)+logn(_sessionId));
 
//   BMINFO::logEntry(strfmt("%1 %2 %3",prevFraction,_sessionId,seed));

Старый 03.05.2008, 22:16   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Sada Посмотреть сообщение
В аксапте входящим значением в Random является текущее время (вроде).
О-о-о-о! В 4ке также.
Всю голову изломал - почему в отладчике данные случайные, а при нормальной работе много повторяющихся значений.

Т.е. new надо делать один раз, а потом вызывать один экземпляр, или делать singleton...
Спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 05.05.2008, 13:06   #14  
ivas is offline
ivas
Участник
Аватар для ivas
 
252 / 68 (3) ++++
Регистрация: 22.12.2005
можно в каждой итерации написать
random.parmSeed(WinApi::getTickCount());
WinApi::getTickCount()
гдето 50-100 раз в секунду меняется


__________________
aLL woRk aNd nO JoY MAKes jAck a dULL Boy

Последний раз редактировалось ivas; 05.05.2008 в 13:27.
За это сообщение автора поблагодарили: mazzy (2).
Старый 05.05.2008, 14:15   #15  
epetrov is offline
epetrov
Участник
 
13 / 22 (1) +++
Регистрация: 27.10.2005
Адрес: Казань
Если 4-ка, то можно использовать .Net класс System.Random
X++:
static void Job501(Args _args)
{
    System.Random random;
    Int i;
    Int r;
    ;
    
    random = new System.Random();
    
    for (i=1; i<=10; i++)
    {
        r = random.Next(0, 10);
        info(int2Str(r));
 
    }

}
Старый 05.05.2008, 18:00   #16  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
ivas, спасибо.

Цитата:
Сообщение от epetrov Посмотреть сообщение
Если 4-ка, то можно использовать .Net класс System.Random
Ой, надо бы протестировать на производительность.
__________________
полезное на axForum, github, vk, coub.
Старый 06.05.2008, 12:48   #17  
epetrov is offline
epetrov
Участник
 
13 / 22 (1) +++
Регистрация: 27.10.2005
Адрес: Казань
Цитата:
Ой, надо бы протестировать на производительность.
Результаты тестирования System.Random против RandomGenerate
X++:
static void Job502(Args _args)
{
    System.Random  randomNet;
    RandomGenerate randomAx;
    Int r;
    ;

    randomNet = new System.Random(); // 343112 Такты
    randomAx = new RandomGenerate(); // 43827   Такты
    r = randomNet.Next(0, 10);                // 119623 Такты
    r = randomAx.randomInt(0, 10);         //  279566 Такты
}
Т.е. получилось, что .Net класс почти в 8 раз проигрывает при создании объекта, но 2.3 раза выигрывает при генерации случайного значения. При этом время создания объекта System.Random сопоставимо с временем генерации случайного значения из RandomGenerate.

Последний раз редактировалось epetrov; 06.05.2008 в 12:55.
За это сообщение автора поблагодарили: mazzy (5).
Старый 06.05.2008, 13:00   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
спасибо.
Т.е. как и Аксаптовский, дотнетовский рандом лучше создавать один раз, а потом вызывать-вызывать-вызывать.

еще бы анализ случайности и воспроизводимости...
__________________
полезное на axForum, github, vk, coub.
Старый 22.05.2008, 02:58   #19  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от epetrov Посмотреть сообщение
Результаты тестирования System.Random против RandomGenerate
X++:
static void Job502(Args _args)
{
    System.Random  randomNet;
    RandomGenerate randomAx;
    Int r;
    ;

    randomNet = new System.Random(); // 343112 Такты
    randomAx = new RandomGenerate(); // 43827   Такты
    r = randomNet.Next(0, 10);                // 119623 Такты
    r = randomAx.randomInt(0, 10);         //  279566 Такты
}
Т.е. получилось, что .Net класс почти в 8 раз проигрывает при создании объекта, но 2.3 раза выигрывает при генерации случайного значения. При этом время создания объекта System.Random сопоставимо с временем генерации случайного значения из RandomGenerate.
System.Random не создается на сервере. Надо разбираться, но сил никаких нет. Завтра...

Текст ошибки
Цитата:
Error Сообщение (03:06:33) Сбой запроса на разрешение типа "InteropPermission".
(S)\Classes\InteropPermission\demand
(S)\Classes\CLRObject\new
(S)\Classes\Random_RNR\new - line 4
(S)\Classes\Random_RNR\construct - line 3
*****************несколько классов*************
(S)\Classes\MenuFunction\runServer

Error Сообщение (03:06:33) Объект "CLRObject" не может быть создан
__________________
полезное на axForum, github, vk, coub.
Старый 06.05.2008, 13:13   #20  
epetrov is offline
epetrov
Участник
 
13 / 22 (1) +++
Регистрация: 27.10.2005
Адрес: Казань
Цитата:
еще бы анализ случайности и воспроизводимости...
Что Вы понимаете под воспроизводимостью? поясните.
Теги
random, документация, случайное число

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ruslan Goncharov: Stereogram in AX Blog bot DAX Blogs 0 30.05.2008 18:05
Программирование и перенос Layer-а на другую апликацию, выдает random-ошибки .. Delfins DAX: Программирование 10 04.04.2006 17:03
random() ? slava DAX: Программирование 2 26.09.2002 12:22

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:08.