Владимир, спасибо.
Это были попытки.. видимо уже не совсем удачные от замыленности..
На самом деле форма изначльно не имеет этот датасорс, я его убрала и пытаюсь навесить программно.
Навесить фильтр пытаюсь кнопкой, считывая значение дисплэя для range
Суть проблемы, что в гриде остаются строки не отфильтрованные
Написала джоб, который интерпретирует запрос кверика, вывела строки в инфолог - все как надо, - остаются только строки, которые нужны по фильтру...
Аналайзер и студия не доступны для использования
код кнопки:
X++:
void clicked()
{
str strSetText = 'PC.Номер счета поставщика';
str strUnSetText = 'Снять "PC.Номер счета поставщика"';
IT_VendInvoice4PaymId invoice4PaymId;
;
invoice4PaymId = custConfirmTrans.IT_invoice4PaymFromInvoiceReg();
super();
info(invoice4PaymId);
if(!bInvoice4PaymFromInvoiceRegFilterSet)
{
if (!Invoice4PaymFromInvoiceRegFilter)
element.setInvoice4PaymFromInvoiceRegFilter();
Invoice4PaymFromInvoiceRegFilter.value(SysQuery::value(invoice4PaymId));
custConfirmTrans_ds.query().recordLevelSecurity(false);
bInvoice4PaymFromInvoiceRegFilterSet = true;
Invoice4PaymFromInvoiceReg.text(strUnSetText);
}
else
{
Invoice4PaymFromInvoiceRegFilter.value(SysQuery::valueUnlimited());
custConfirmTrans_ds.query().recordLevelSecurity(true);
bInvoice4PaymFromInvoiceRegFilterSet = false;
Invoice4PaymFromInvoiceReg.text(strSetText);
}
custConfirmTrans_ds.executeQuery();
// custConfirmTrans_ds.first();
// while (custConfirmTrans_ds.next())
// {
// info (custConfirmTrans.IT_invoice4PaymFromInvoiceReg());
// }
}
код метода создающего фильтр:
X++:
void setInvoice4PaymFromInvoiceRegFilter()
{
QueryBuildDataSource queryCustConfirmTrans;
QueryBuildDataSource queryInvoiceRegLine;
QueryBuildDataSource queryInvoiceReg;
Query q = new Query(custConfirmTrans_ds.queryRun().query());
QueryRun queryRun;
;
queryCustConfirmTrans = q.dataSourceTable(tablenum(custConfirmTrans));
q.dataSourceTable(tablenum(custConfirmTrans)).fetchMode(QueryFetchMode::One2One);
q.dataSourceTable(tablenum(InventTable)).fetchMode(QueryFetchMode::One2One);
q.dataSourceTable(tablenum(CustConfirmJour)).fetchMode(QueryFetchMode::One2One);
q.dataSourceTable(tablenum(RContractTable)).fetchMode(QueryFetchMode::One2One);
queryInvoiceRegLine = queryCustConfirmTrans.addDataSource(tablenum(IT_InvoiceRegLine));
queryInvoiceRegLine.fetchMode(QueryFetchMode::One2One);
queryInvoiceRegLine.addLink(fieldnum(custConfirmTrans, IT_PurchInventTransId), fieldnum(IT_InvoiceRegLine, InventTransId));
queryInvoiceRegLine.joinMode(joinMode::ExistsJoin);
queryInvoiceReg = queryInvoiceRegLine.addDataSource(tablenum(IT_InvoiceRegJour));
queryInvoiceReg.fetchMode(QueryFetchMode::One2One);
queryInvoiceReg.addLink(fieldnum(IT_InvoiceRegLine, InvoiceRegId), fieldnum(IT_InvoiceRegJour, InvoiceRegId));
queryInvoiceReg.joinMode(joinMode::ExistsJoin);
// queryInvoiceReg = queryCustConfirmTrans.addDataSource(tablenum(IT_InvoiceRegJour));
// queryInvoiceReg.fetchMode(QueryFetchMode::One2One);
// queryInvoiceReg.addLink(fieldnum(custConfirmTrans, IT_PurchId), fieldnum(IT_InvoiceRegJour, PurchId));
// queryInvoiceReg.joinMode(joinMode::ExistsJoin);
Invoice4PaymFromInvoiceRegFilter = queryInvoiceReg.addRange(fieldNum(IT_InvoiceRegJour, Invoice4PaymId));
// queryRun = new QueryRun(q);
//
// custConfirmTrans_ds.queryRun(queryRun);
custConfirmTrans_ds.query(q);
}
текст запроса, уходящего на сервер, до наложения фильтра:
PHP код:
SELECT * FROM CustConfirmTrans
JOIN SPIInventProducerId FROM InventTable
WHERE CustConfirmTrans.ItemId = InventTable.ItemId
JOIN * FROM CustConfirmJour
WHERE CustConfirmTrans.SalesId = CustConfirmJour.SalesId
AND CustConfirmTrans.ConfirmId = CustConfirmJour.ConfirmId
AND CustConfirmTrans.ConfirmDate = CustConfirmJour.ConfirmDate
JOIN * FROM RContractTable
WHERE CustConfirmJour.InvoiceAccount = RContractTable.RContractPartnerCode
AND CustConfirmJour.IT_RContractCode = RContractTable.RContractCode
AND CustConfirmJour.IT_RContractAccount = RContractTable.RContractAccount
AND ((RContractPartnerType = 0))
текст запроса после наложения фильтра:
PHP код:
SELECT * FROM CustConfirmTrans
JOIN SPIInventProducerId FROM InventTable
WHERE CustConfirmTrans.ItemId = InventTable.ItemId
JOIN * FROM CustConfirmJour
WHERE CustConfirmTrans.SalesId = CustConfirmJour.SalesId
AND CustConfirmTrans.ConfirmId = CustConfirmJour.ConfirmId
AND CustConfirmTrans.ConfirmDate = CustConfirmJour.ConfirmDate
JOIN * FROM RContractTable
WHERE CustConfirmJour.InvoiceAccount = RContractTable.RContractPartnerCode
AND CustConfirmJour.IT_RContractCode = RContractTable.RContractCode
AND CustConfirmJour.IT_RContractAccount = RContractTable.RContractAccount
AND ((RContractPartnerType = 0))
EXISTS JOIN * FROM IT_InvoiceRegLine
WHERE CustConfirmTrans.IT_PurchInventTransId = IT_InvoiceRegLine.InventTransId
EXISTS JOIN * FROM IT_InvoiceRegJour
WHERE IT_InvoiceRegLine.InvoiceRegId = IT_InvoiceRegJour.InvoiceRegId
AND ((Invoice4PaymId = N'drgd'))
аналайзер нет возможности использовать..
код моего проверочного джоба (правильно отфильтровывает):
X++:
static void Job338(Args _args)
{
custConfirmTrans custConfirmTrans;
InventTable InventTable;
CustConfirmJour CustConfirmJour;
RContractTable RContractTable;
IT_InvoiceRegLine IT_InvoiceRegLine;
IT_InvoiceRegJour IT_InvoiceRegJour;
;
while SELECT CustConfirmTrans
JOIN SPIInventProducerId FROM InventTable
WHERE CustConfirmTrans.ItemId == InventTable.ItemId
JOIN CustConfirmJour
WHERE CustConfirmTrans.SalesId == CustConfirmJour.SalesId
&& CustConfirmTrans.ConfirmId == CustConfirmJour.ConfirmId
&& CustConfirmTrans.ConfirmDate == CustConfirmJour.ConfirmDate
JOIN RContractTable
WHERE CustConfirmJour.InvoiceAccount == RContractTable.RContractPartnerCode
&& CustConfirmJour.IT_RContractCode == RContractTable.RContractCode
&& CustConfirmJour.IT_RContractAccount == RContractTable.RContractAccount
&& ((RContractTable.RContractPartnerType == 0))
EXISTS JOIN IT_InvoiceRegLine
WHERE CustConfirmTrans.IT_PurchInventTransId == IT_InvoiceRegLine.InventTransId
EXISTS JOIN IT_InvoiceRegJour
WHERE IT_InvoiceRegLine.InvoiceRegId == IT_InvoiceRegJour.InvoiceRegId
&& ((IT_InvoiceRegJour.Invoice4PaymId == 'drgd'))
{
info (custConfirmTrans.IT_invoice4PaymFromInvoiceReg());
}
// select count(RecId) from custConfirmTrans;
// info(strfmt('итого %1', custConfirmTrans.RecId));
}
upd: вложила форму