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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.06.2008, 14:51   #1  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
? Как подставить вычисляемое значение в Range у query
Задача сделать выпадающий список с таблицы рабочих смен.
Если смена открыта 17.06.2008 с 8:00 до 20:00 в сейчас время к примеру 14 часов.. то запрос выполнится.

А как быть если смена открыта 17.06.2008 23 часа до 18.06.2008 до 6 утра.
а сейчас время 2:00 утра, то запрос не выполнится.
Условие надо поправить так чтоб время открытой смены проверялось между двумя датами queryBuildDataSource.addRange(fieldnum(MilkShifts,StartTime)).value("<"+t);
queryBuildDataSource.addRange(fieldnum(MilkShifts,EndTime)).value(">" + t);

Как это сделать? Что т оне соображу.


X++:
static void lookupIDShift(FormStringControl _ctrl)
{   Query                          query=new Query();
    QueryBuildDataSource    queryBuildDataSource;
    QueryBuildRange         queryBuildRange;
    QueryRun                    qr;

    //Таблицы
    SysCompanyUserInfo      scUI;
    MilkGroupMaterialResponsibilityLine     mGMRLine;

    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tableNum(MilkShifts), _ctrl);


    Str                     t= time2str(timenow(),1,1), d=strfmt("%1", systemdateget()), IDgmt, saveText;
    Str   300               war, warNull;
    ;
 war="Вы не определены ни в одну группу материальной ответственности поэтому не можете создавать складские и производстенные журналы."+
     " Обратитесь к администратору системы или используйте форму [Управление запасами/ Настройка/ Смены/ Группы материальной ответственности]";

 warNull="Ни одна смена для групп материальной ответственности, в которой Вы входите, не является открытой на текущий момент."+
         " Отредактируйте Группы материальной ответственности или используйте периодическую операцию Закрытие смены";

    saveText = _ctrl.text();
    _ctrl.text(""); // Disable filter effects

    sysTableLookup.addLookupfield(fieldNum(MilkShifts,IDShift));
    sysTableLookup.addLookupfield(fieldNum(MilkShifts,StartTime));
    sysTableLookup.addLookupfield(fieldNum(MilkShifts,EndTime));
    sysTableLookup.addLookupfield(fieldNum(MilkShifts,StartDate));
    sysTableLookup.addLookupfield(fieldNum(MilkShifts,EndDate));
    sysTableLookup.addLookupfield(fieldNum(MilkShifts,Milk_IDGroupMaterialResponsibility));

    queryBuildDataSource=query.addDataSource(tablenum(MilkShifts));



    //Ищем сотрудника по пользовательским связям через текущего пользователя
    SELECT firstonly EmplId FROM scUI where scUI.UserId==curUserId();

    //Ищем ID группы материальной ответственности

    while select IDGroupMaterialResponsibility from mGMRLine
          where mGMRLine.EmplId==scUI.EmplId
    {
       IDgmt+=mGMRLine.IDGroupMaterialResponsibility+",";
    }
    IDgmt=substr(IDgmt,1,strlen(IDgmt)-1);

    if (IDgmt=="")  Box::warning( war, "Вы не состоите ни в одной группе материальной ответственности" );
    else {
     // Запрос возвращает номер текущих смен. Надо сравнить с тем есть ли у этой смены ИД группы мат отв.
 
   queryBuildDataSource.addRange(fieldnum(MilkShifts,StartTime)).value("<"+t);

   queryBuildDataSource.addRange(fieldnum(MilkShifts,EndTime)).value(">" +   t); 

   queryBuildDataSource.addRange(fieldnum(MilkShifts,StartDate)).value(".." + d ); 
   queryBuildDataSource.addRange(fieldnum(MilkShifts,EndDate)).value(d + ".."); 

   queryBuildDataSource.addRange(fieldnum(MilkShifts,StatusShift)).value(enum2str(StatusShift::Open)); 
   queryBuildDataSource.addRange(fieldnum(MilkShifts,Milk_IDGroupMaterialResponsibility)).value(IDgmt);// Список групп в которых учавствует пользователь

    qr= new QueryRun(query);
    If(qr.next()) {
      //    sysTableLookup.parmTmpBuffer(MilkShifts);
            sysTableLookup.parmQuery(query);
            sysTableLookup.performFormLookup();
                   }
    else  Box::warning( warNull, "Необходимо открыть смену" );
         }
    _ctrl.text(saveText);
}
запрос в дебагере выглядит так
SELECT * FROM MilkShifts WHERE ((StartTime<53103)) AND ((EndTime>53103)) AND ((StartDate<={ts '2008-06-17 00:00:00.000'})) AND ((EndDate>={ts '2008-06-17 00:00:00.000'})) AND ((StatusShift = 0)) AND ((Milk_IdGroupmaterialResponsibility = N'Гр2'))
Теги
документация, ax2009

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptafreak: Label for query range cannot be modified in AX 5.0 Blog bot DAX Blogs 0 30.08.2007 16:50
axaptafreak: Label for Query Range cannot be modified (still) Blog bot DAX Blogs 2 25.07.2007 10:09
Fred Shen: Date data type in Query Range Value Expression Blog bot DAX Blogs 0 28.10.2006 16:40
Автоматическая подстановка Range в Query Владимир Максимов DAX: Программирование 9 30.03.2004 16:48
Как вытащить информацию о Range из Query raz DAX: База знаний и проекты 1 26.03.2004 11:10

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

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

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