05.12.2008, 13:36 | #1 |
Участник
|
Не получается сформировать lookup по запросу с outer join
Здравствуйте.
Может кто-нибудь подсказать, как реализовать лукап, для такого запроса: while select EmployeeTable where EmployeeTable.IsNotInUse == NoYes::No && EmployeeTable.EmployeeId != FCurrentEmployeeId /* var */ outer join TimeSheetTable where TimeSheetTable.EmployeeId == EmployeeTable.EmployeeId && TimeSheetTable.CurrentDate == FCurrentDate /* var */ { if ((!TimeSheetTable) || (EmploymentTable::find(TimeSheetTable.EmploymentAssessment).Value == 0) { // Нужно получить эти значения } } Условно схема такая: Таблица сотрудников: EmployeeTable; // EmployeeId, FullName Табель учета сотрудников: TimeSheetTable; // EmployeeId, EmploymentId, CurrentTime Таблица оценок занятости: EmploymentTable; // EmploymentId, Value Проблема состоит в том, что я не знаю, как отфильтровать условие ...if (!TimeSheetTable), которое в данном случае является необходимым. Пример кода: // 1 query = new Query(); masterSource = query.addDataSource(tableNum(EmployeeTable)); masterSource.orderMode(OrderMode::GroupBy); masterSource.addSortField(fieldNum(EmployeeTable, EmployeeId)); masterSource.addSortField(fieldNum(EmployeeTable, ScheduledNumber)); masterSource.addSortField(fieldNum(EmployeeTable, FullName)); masterSource.addRange(fieldNum(EmployeeTable, IsNotInUse)).value(StrFmt('%1', NoYes::No)); filterString = StrFmt('(%1 != "%2")', fieldStr(EmployeeTable, EmployeeId), TimeSheetTable.EmployeeId); // TimeSheetTable = ds masterSource.addRange(fieldNum(EmployeeTable, EmployeeId)).value(filterString); // 2 slaveSource = masterSource.addDataSource(tableNum(TimeSheetTable)); slaveSource.orderMode(OrderMode::GroupBy); slaveSource.joinMode(JoinMode::OuterJoin); slaveSource.addLink(fieldNum(EmployeeTable, EmployeeId), fieldNum(TimeSheetTable, EmployeeId)); filterString = Date2Str(FCurrentDate, 123, 2, 2, 2, 2, 2); slaveSource.addRange(fieldNum(TimeSheetTable, CurrentDate)).value(filterString); filterString = StrFmt('(%1 != "")', fieldStr(TimeSheetTable, EmploymentAssessment)); while select tEmploymentTable where (tEmploymentTable.Value == 0) { filterString += StrFmt(' || (%1 == "%2")', fieldStr(TimeSheetTable, EmploymentAssessment), tEmploymentTable.EmploymentId); } // Получается, что этот фильтр не работает... slaveSource.addRange(fieldNum(TimeSheetTable, EmploymentAssessment)).value(filterString); // 3 sysTableLookup = SysTableLookup::newParameters(tableNum(EmployeeTable), _formControl); sysTableLookup.addLookupfield(fieldNum(EmployeeTable, EmployeeId)); sysTableLookup.addLookupfield(fieldNum(EmployeeTable, ScheduledNumber)); sysTableLookup.addLookupfield(fieldNum(EmployeeTable, FullName)); sysTableLookup.parmQuery(query); sysTableLookup.performFormLookup(); Возможно я в чем-то ошибаюсь... Заранее спасибо. |
|