Список заказов на продажу 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;
Другие вопросы по тегам