На первый взгляд кажется, что это совершенно лишнее. Потому что просто запросив sourceField из связанной таблицы мы получим то же самое.
Но, оказывается, все устроено гораздо хитрее: функция lookup таит в себе очень полезное свойство.
Давайте разберем на примере.
Допустим, у нас есть основная таблица BaseTable и в ней есть поле SEARCH
Есть связанная таблица RelatedTable и в ней поле MatchField
Таблицы связаны следующим образом:
BaseTable::SEARCH = RelatedTable::MatchField
Мы хотим получить содержимое некоего поля в RelatedTable, если в ней имеется хотя бы одна запись, соответствующая тексту, вбитому в SEARCH.
Так вот.
Обычные средства позволяют нам получить информацию об этом только в одном случае: если мы завершили и подтвердили изменение поля SEARCH. Только после Commit реляция будет обновлена и мы увидим, какие записи по реляции подтянулись.
Не буду распространяться на тему того, как это неудобно, многие, думаю, сталкивались с этим.
Функция Lookup(sourceField) позволяет без коммитов(!) и рефрешей, немедленно после изменения хотя бы одного символа поля SEARCH узнать, как это изменение повлияло на записи в связанной таблице.
Вы можете обработать изменение поля триггером OnObjectModify, используя в скрипте функцию Lookup.
Если искомое поле вычисляется, то будет возвращено его значение. Если вычисление невозможно, потому что связанные записи не обнаруживаются, то будет возвращен символ "?"
Если вам нужно просто знать, появились ли или исчезли связанные записи в процессе редактирования поля, то используйте функцию IsValid, которая возвращает булево 1, если записи есть, и 0, если соответствующие записи в связанной таблице отсутствуют.
Код: Выделить всё
IsValid (
Lookup ( RelatedTable::MatchField )
)