Всем привет!
Пересмотрел несколько
похожих тем, но к сожалению, из-за нехватки опыта, понимания так и не пришло.
Задача такова: На форме (не важно какой, у формы 1 источник данных) нужно организовать фильтр по полю ItemId. Т.к. область значений может быть достаточна велика, то я решил использовать временную таблицу, заполнить ее нужными значениями (ItemId) и сдлеать join к постоянной таблице, являющейся источником данных на форме.
Я пытаюсь в executeQuery() сформировать запрос и присвоить его datasource формы.
Вот примерный код:
X++:
public void executeQuery()
{
Query query;
QueryBuildDataSource qbdsRetailPriceBuffer, qbdsTmpTable;
TmpTable tmpTable = TmpTable::InitOnServer();
;
query = new Query();
qbdsRetailPriceBuffer = query.addDataSource(tablenum(RetailPriceBuffer));
if(InventLocationFilter.valueStr() && CustomSectionFilter.valueStr())
{
tmpTable.data(GetCustomSectionFilterResult(InventLocationFilter.valueStr(), CustomSectionFilter.valueStr()));
qbdsTmpTable = qbdsRetailPriceBuffer.addDataSource(tablenum(TmpTable));
qbdsTmpTable.addLink(fieldnum(RetailPriceBuffer, ItemId), fieldnum(TmpTable, ItemId));
qbdsTmpTable.joinMode(JoinMode::ExistsJoin);
qbdsTmpTable.fetchMode(false);
}
this.query(query);
super();
}
В методе TmpTable::InitOnServer() возвращается курсор временной таблицы созданной на сервере:
X++:
public static server TmpTable InitOnServer()
{
TmpTable tmpTable;
select firstonly tmpTable;
return tmpTable;
}
В методе GetCustomSectionFilterResult(), заполняется и возвращается табл. переменная временной таблицы:
X++:
public static server TmpTable GetCustomSectionFilterResult(InventLocationId _inventLocationId, CustomSectionId _customSectionId)
{
TmpTable tmpTable = TmpTable::InitOnServer();
;
//Заполнение tmpTable...
return tmpTable;
}
Когда выполняется super(), выдает:
"Временные таблицы должны быть вложенными (inner), когда вы объединяете их оператором join с постоянными таблицами".
Что же я делаю не так?
Помогите пожалуйста, если кто сталкивался.
С уважением, Евгений.