Как обмануть NAV (подменяем источник данных в форме)

Пускай у нас есть некая функция, которая возвращает временную таблицу (например, таблица Customer) с результатом. Мы хотим отразить ее в форме. Самый простой способ это сделать знают все:

FORM.RUN(FORM::"Customer List", recTmpCustomer);

Но есть и другой способ сделать это — подменить в форме триггеры OnNextRecord, OnFindRecord следующим образом:

OnFindRecord=
VAR
blnFound : Boolean;
BEGIN
recTmpCustomer:=Rec;
recTmpCustomer.COPY(Rec);
blnFound:= recTmpCustomer.FIND(Which);
IF blnFound THEN
Rec := recTmpCustomer;
EXIT(blnFound);
END;

OnNextRecord=
VAR
intResultStep : Integer;
BEGIN
recTmpCustomer:=Rec;
intResultStep  := recTmpCustomer.NEXT(Steps);
IF intResultStep <> 0 THEN
Rec := recTmpCustomer;
EXIT(intResultStep);
END;

Данный вариант полностью работоспособен, за одним исключением — не работают марки. Т.е. конечно, ч0рные точечки ставятся, но к рекорду recTmpCustomer это не имеет никакого отношения. Как же заставить работать марки в этом случае?

Достаточно всего лишь переопределить сочетание клавиш Ctrl+F1, и вызывать по его нажатию свою собственную функцию, которая и будет ставить марки во временной таблице. Функция следующая:

PROCEDURE SetMark();
BEGIN
// Ставим/снимаем метку
recTmpCustomer.GET(Rec."No.");
Rec.MARK(NOT Rec.MARK);
recTmpCustomer.MARK(Rec.MARK);
END;

Как переопределить нажатие клавиш? Для этого надо сделать отдельный пункт в любом MenuButton на форме.
Таким образом, кстати, можно перехватывать любые сочетания.Остальные советы читайте в рубрике «Советы пользователям Navision»

Код оформлен по правилам венгерской нотации для Navision :)

Автор:

В области Navision - с 2003 года. Профессиональные интересы: NAV, MS SQL, .NET, BPMN, IT-менеджмент. Предметная область: логистика, финансы, склады, 3PL.

Количество статей, опубликованных автором: 86.

Добавить комментарий