Список заказов на продажу SetAscending Business Central
Я пытаюсь использовать SetAscending на странице списка заказов Visual Studio Code for Business Central. Он работает, чтобы установить Заказ на продажу "No." по убыванию, однако при этом полоса прокрутки не возвращается в верхнюю часть страницы. Я пробовал добавить его в несколько мест, и он сортирует страницу, но не обновляет полосу прокрутки. Какой код я мог пропустить?
Места, в которые я его добавил: Расширение страницы списка заказов на продажу - OnAfterGetRecord и OnAfterGetCurrRecord События страницы списка заказов на продажу - OnOpenPageEvent, OnAfterGetRecordEvent и OnAfterGetCurrRecordEvent
trigger OnAfterGetCurrRecord()
begin
rec.SetCurrentKey("Document Type", "No.");
rec.SetAscending("No.", false);
end
5 ответов
Вы должны указать странице перейти к новой первой записи.
В триггере OnOpenPage вы делаете следующее:
Rec.SetCurrentKey("Document Type", "No.");
Rec.SetAscending("No.", false);
if Rec.FindSet() then; // use if-then to avoid error if there are no records within the filter
У вас есть 3 метода для использования в качестве НАЙТИ
= Найдите первое вхождение ваших фильтров
Findlast
= Найдите последнее вхождение ваших фильтров
= Найдите множество вхождений вашего фильтра
Вы можете использовать их все вместе с
repeat
а также
until
операторы для циклического просмотра записей.
Разница между и для
Repeat
а также
Until
заключается в том, чтобы найти набор регистров, в то время как
FindFirst
найти только один так
FindSet
он более производительный.
Для вашего случая вам необходимо изменить свойство sourceTableView. Это свойство страницы. FindSet используется для переменных, а не для DataSourceTable в списке страниц.
Создайте ключ в своей таблице, а затем поместите этот ключ в свойство sourceTableView страницы.
Это также работает, если вы программно открываете страницу с помощью Page.RUN:
procedure ShowYTDSalesOrders(DateFilter: Text)
var
salesHeader: Record "Sales Header";
begin
salesHeader.RESET;
salesHeader.SETRANGE("Document Type", salesHeader."Document Type"::Order);
salesHeader.SetFilter("Order Date", DateFilter);
salesHeader.SetCurrentKey("Order Date");
salesHeader.Ascending(false);
salesHeader.SetAscending("Order Date", false);
if salesHeader.FindSet() then
PAGE.RUN(PAGE::"Sales Order List", salesHeader);
end;
Я проверял ответы и читал об этом на docs.microsoft.com, но единственный работающий трюк заключается в следующем:
trigger OnOpenPage()
begin
Rec.SetCurrentKey(SystemCreatedAt);
Rec.Ascending := false;
end;
Примечание. Я сортирую по объекту datetime. Но подсказки таковы:
OnOpenPage
курок,
SetCurrentKey
а также
Ascending
собственность вместо
SetAscending
. Это уникальное решение, которое оставляет полосу прокрутки вверху, по крайней мере, для меня.
Это то, что сработало для меня. Поскольку это стандартная страница списка в Business Central, я не мог изменить SourceTableView. Мне пришлось использовать два триггера для первой сортировки и перемещения курсора в начало списка.
trigger OnAfterGetRecord()
begin
rec.SetCurrentKey("Document Type", "No.");
rec.SetAscending("No.", false);
end;
trigger OnOpenPage()
begin
rec.FindLast();
end;