FileMaker Pro - Фильтрация отношений не работает - PullRequest
0 голосов
/ 22 июля 2011

Я пытаюсь создать макет FileMaker Pro 11, который исключает записи, содержащие определенное значение. Соответствующие данные находятся в таблице Invoice. Я хочу отфильтровать, чтобы записи счетов-фактур, чье поле «Группировка проверок счетов-фактур» пустое, не отображались в макете.

Я добавил глобальное поле в таблицу счетов-фактур под названием «Пустая группа проверки счетов-фактур» для использования в качестве критерия фильтрации. Я создал отношение самосоединения к таблице счетов-фактур, соединив «Идентификатор счета-фактуры» с «Идентификатором счета-фактуры» и соединив «Группировка проверки счета-фактуры» с «Пустой группой проверки счета-фактуры». Получившаяся таблица называется «Группы проверки счетов».

Макет, который я создаю на основе таблицы «Группы проверки счетов-фактур», показывает все записи в счете-фактуре - он не отфильтровывает записи с пустыми значениями. Что я делаю неправильно?

Спасибо
Бен

Ответы [ 3 ]

2 голосов
/ 24 июля 2011

Макеты показывают записи в таблице (или, точнее, вхождении в таблицу) и не имеют непосредственного отношения к связанным данным.Как упомянуто @ pft221, вы можете использовать отношения для фильтрации, но только при просмотре данных через портал.

Если вы всегда хотите, чтобы конкретный макет отображал данные, основанные на конкретной находке, вы можете сделать это с помощьюскрипт и триггер скрипта.Сначала настройте сценарий для выполнения следующих действий:

Enter Find Mode[]
Set Field["Invoice Check Grouping"; "*" // Find all records with any data in this field
Perform Find[]

Обратите внимание, что вы также можете встроить запрос поиска в шаг выполнения сценария поиска, но я склонен выполнять поиск сценариев описанным выше способом, поскольку его легче увидетьчто такое запрос на поиск в скрипте и переменные могут быть использованы в запросе на поиск.

Теперь вам нужно настроить макет так, чтобы этот скрипт выполнялся всякий раз, когда он загружается.Перейти к макету и войти в режим макета.Выберите «Макеты»> «Настройка макета» в строке меню.Перейдите на вкладку «Триггеры сценариев», установите флажок «OnLayoutEnter» и выберите сценарий, который вы написали выше.Теперь всякий раз, когда вводится макет, этот скрипт запускается и исключает записи, в которых это конкретное поле пусто.

0 голосов
/ 19 октября 2013

Ответы выше на самом деле не помогают Бену с его вопросом.Это обходные пути.

У меня та же проблема, что и у Бена, и я не думаю, что есть решение, даже сейчас, в Filemaker 12. Я думаю, что нет способа определить отношение, которое пропустит связанные записи, где соответствиеполя пусты.

На ум приходят два варианта: в конкретном макете у вас есть более детальный контроль в самом определении портала, и вы можете использовать его для исключения записей. Теперь вы можете использовать запросы SQL для достиженияэтот результат в Filemkaer.

0 голосов
/ 23 июля 2011

Существует много способов фильтрации записей, в зависимости от того, что вы пытаетесь сделать и что вы пытаетесь отобразить для своих пользователей.

Самый распространенный и простой способ фильтрации записей - это простой поиск в виде списка. Из вашего вопроса мне неясно, но я думаю, что вы уже используете представление списка и недопонимание того, как работают отношения FileMaker и таблицы (TO).

Для фильтрации с помощью метода «Поиск записей»:

  1. Создайте новый макет представления списка для любого вхождения таблицы в таблицу счетов-фактур. Скорее всего, вы захотите использовать вхождение таблицы по умолчанию, которое FileMaker создал для вас при создании таблицы.
  2. Поместите поля, которые вы хотите отобразить в этом макете, включая поле «Группировка проверки счетов».
  3. Переключение в режим поиска
  4. Поместите символ '*' в поле "Группировка проверки счетов"
  5. Выполнить поиск

Теперь вы должны увидеть список всех счетов, в которых поле «Группировка проверки счетов» не пустое. (Дополнительные интересные критерии поиска можно найти в раскрывающемся меню «Вставка: операторы» в строке заголовка.)


Теперь вы, возможно, действительно пытаетесь фильтровать связанные записи через портал, но, учитывая, что вы настроили самостоятельное соединение по индексу Invoice в таблице Invoice, я предполагаю, что в лучшем случае это будет показывать либо 0 или 1 запись для каждой записи счета-фактуры, отображаемой в основном макете.

Чтобы отфильтровать записи с помощью метода «Portal Filter»:

Предположим, однако, что у вас есть клиентская таблица, в которой вы хотите видеть только записи со непустым значением "Invoice Check Grouping". Таблица будет выглядеть следующим образом:

Client
  Client ID
  [... other client info ...]

Invoice
  Invoice ID
  Client ID
  Invoice Check Grouping
  [... other invoice info ...]

Со связью в графе отношений:

 Client::Client ID  ------< Invoice::Client ID

Оттуда вы настроите макет формы в клиентском ТО и создадите портал, показывающий записи из счета-фактуры. Из опций для портала вы должны выбрать «Фильтровать записи портала» и использовать формулу, подобную следующей:

 not IsEmpty(Invoice::Invoice Check Grouping)

Наконец, стоит отметить, что фильтр портала не подходит для всех ситуаций отображения или расчетов. Вы можете полностью настроить аналогичный фильтр на графике отношений (как я полагаю, вы уже пытались это сделать). Это снова будет работать для просмотра записей через портал, но не для записей, отображаемых самим макетом.

...