Как обмануть NAV (подменяем источник данных в форме)
Пускай у нас есть некая функция, которая возвращает временную таблицу (например, таблица Customer) с результатом. Мы хотим отразить ее в форме. Самый простой способ это сделать знают все:
Но есть и другой способ сделать это — подменить в форме триггеры OnNextRecord, 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, и вызывать по его нажатию свою собственную функцию, которая и будет ставить марки во временной таблице. Функция следующая:
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.