Добрый день!
Возникла такая задача: есть некий журнал изменения состояний объектов StatesLog. В нем несколько полей, в том числе: поле-идентификатор объекта (ObjectId), поле с кодом состояния (StateId), поле даты изменения состояния (ChgDate). Состояния каждого объекта меняются не чаще 1 раза в сутки. Необходимо сделать режим отображения только текущих состояний объектов, но отображать при этом все поля журнала.
Что сделал я: попытался присоединить StatesLog к самой себе по exists join, линк по полям ObjectId и ChgDate, с установленной группировкой по ObjectId и выбором максимума по ChgDate. Вот код метода init():
PHP код:
QueryBuildDatasource qbds;
super();
qbds = StatesLog_Q.dataSourceTable(tableNum(StatesLog)).addDataSource(tableNum(StatesLog));
qbds.joinMode(JoinMode::ExistsJoin);
qbds.fetchMode(0);
qbds.addLink(fieldNum(StatesLog, ChgDate), fieldNum(StatesLog, ChgDate));
qbds.addLink(fieldNum(StatesLog, ObjectId), fieldNum(StatesLog, ObjectId));
qbds.addSelectionField(fieldNum(StatesLog, ChgDate), SelectionField::Max);
qbds.addSelectionField(fieldNum(StatesLog, ObjectId));
qbds.orderMode(OrderMode::GroupBy);
qbds.addSortField(fieldNum(StatesLog, ObjectId));
АХАРТА генерит правильный запрос на Х++, но при переводе его в SQL зачем-то добавляет лишнюю внешнюю группировку по ObjectId, используя при этом алиас из внутреннего запроса, на что SQL ругается со словами "Не знаю такого алиаса или таблицы". Т.е. видно, что в запросе присутствуют две абсолютно одинаковые фразы group by, во внутреннем и внешнем запросе.
1. Как вы думаете, почему так происходит и как это побороть?
2. Может быть, есть другой способ решить задачу? Не забываем, что нужно отображать
все поля журнала. Группировку по всем полям не предлагать, с этим есть проблемы, т.к. я привел упрощенный вариант задачи.
АХАРТА 3.0СП2
Спасибо