![]() |
#1 |
Модератор
|
![]()
Задача сделать выпадающий список с таблицы рабочих смен.
Если смена открыта 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 |
|
|