Иногда нам нужно фильтровать сетку формы на основе статуса идентификатора ссылки транзакции. Предположим, что мы хотим отображать заказы на поставку с подтверждением состояния документа в форме обзора прибытия. Поле состояния документа находится в таблице покупок. С этой целью я пытаюсь подключиться к WMSArrivalOverviewTmp, чтобы очистить таблицу и добавить Range. Однако результаты не такие, как я ожидал. Это код, который я пробовал в событии инициализированного источника данных:
[FormDataSourceEventHandler(formDataSourceStr(WMSArrivalOverview, WMSArrivalOverviewTmp), FormDataSourceEventType::Initialized)]
public static void WMSArrivalOverviewTmp_OnInitialized(FormDataSource sender, FormDataSourceEventArgs e)
{
QueryBuildDataSource qbds = sender.queryBuildDataSource();
QueryBuildDataSource qbdsPO;
qbdsPO = qbds.addDataSource(tableNum(PurchTable));
qbdsPO.clearRange(fieldNum(PurchTable, DocumentState));
qbdsPO.joinMode(JoinMode::OuterJoin);
qbdsPO.fetchMode(QueryFetchMode::One2One);
qbdsPO.addLink(fieldNum(WMSArrivalOverviewTmp, InventTransRefId ),fieldNum(PurchTable, PurchId), qbds.name());
qbdsPO.relations(false);
qbdsPO.addRange(fieldNum(PurchTable, DocumentState)).value(SysQuery::value(VersioningDocumentState::Confirmed));
info(sender.query().toString());
}
Это запрос, который был показан:
ВЫБРАТЬ FIRSTFAST * ИЗ WMSArrivalOverviewTmp (WMSArrivalOverviewTmp) ВНЕШНЕЕ СОЕДИНЕНИЕ ИЗ PurchTable (PurchTable_1) НА WMSArrivalOverviewTmp.InventTransRefId = PurchTable.PurchId И ((DocumentState = 40))
Кроме того, я изменил тип события на выполнение запроса, но получаю ошибки:
[Microsoft] [Драйвер ODBC 17 для SQL Server] [SQL Server] Ошибка преобразования типа данных nvarchar в bigint. Невозможно выбрать запись в заказах на покупку (PurchTable). База данных SQL выдала ошибку.
P.S. Я заметил, что ошибка возникает, когда я нажимаю кнопку обновления после заполнения одного из полей в разделе фильтра (вариант прибытия). Например, когда я заполняю номер счета или склад. Кроме того, я заметил, что когда я нажимаю кнопку обновления, когда поля не заполнены в разделе фильтра, операция объединения не применяется правильно, то есть отображаются заказы на покупку, которые имеют статус черновика.