?

Log in

entries friends calendar profile Компания НЭТИ Previous Previous Next Next
Отбор данных с использованием триггеров OnFindRecord, OnNextRecord формы - Сообщество неравнодушных к MD Nav (ex-Navision)
loggerzd
ru_navision
loggerzd
Отбор данных с использованием триггеров OnFindRecord, OnNextRecord формы
Цель данной публикации – описать возможность фильтрации данных в форме по «виртуальным» полям с использованием методов OnFindRecord и OnNextRecord формы. Данный вопрос частично освещён на многих Интернет-ресурсах, но полного разложения «по полочкам» с конкретными примерами найти практически нереально. В рамках подготовки публикации были собраны почти все «шишки» данного метода фильтрации. Если внимательные читатели при анализе решения обнаружат неточность – просим сообщать незамедлительно.


Используемые термины:
• «виртуальное» поле формы – некое поле записи, отображаемое на форме. Не связано ни с одним полем таблицы. Значение поля вычисляется в триггере OnAfterGetRecord формы.

История вопроса
Заказчик имел ряд форм, в которых использовались «виртуальные» поля. Необходимо было сделать механизм отбора записей. При этом пользователь должен был иметь возможность отобрать записи по одному из следующих алгоритмов – все записи, только записи с определённым статусом, только записи без определённого статуса.

Варианты решения
• Использование механизма маркировки записей. Недостаток - много времени уходит на перебор записей и проставление маркировок, затраты времени.
• Подмена записей в форме данными из виртуальной таблицы с использованием методов OnFindRecord и OnNextRecord формы. Недостаток - необходимость управлять временной таблицей при любом изменении записей, затраты времени.
• Игнорирование записей, не удовлетворяющих условию отбора, с использованием методов OnFindRecord и OnNextRecord формы. Недостаток – работает немного дольше, чем обычная форма.

Как догадался читатель, был выбран последний вариант.

Реализация
На форме были добавлены 4 функции:
1. ShowThisRecord
2. FINDPosition
3. NEXTPosition
4. CheckAdditionsExists
В триггеры формы был внесён следующий код:
1. OnFindRecord
2. OnNextRecord

Финализация
Решение работает достаточно быстро и удовлетворяет требования Заказчика.

Загрузить полный код решения на простом примере можно здесь (*.fob) или здесь (*.txt)

Tags: , , ,

Leave a comment