Отношение фильтрации FileMaker Pro не работает

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

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

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

Спасибо,
Бен


person Ben Gribaudo    schedule 22.07.2011    source источник


Ответы (3)


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

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

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

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

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

person Chuck    schedule 24.07.2011

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

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

Чтобы отфильтровать с помощью метода "Найти записи":

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

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


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

Чтобы отфильтровать записи с помощью метода "Фильтр портала":

Предположим, однако, что у вас есть таблица Client, в которой вы хотите видеть только записи с непустым значением «Группировка проверки счетов». Оформление стола будет следующим:

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)

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

person pft221    schedule 23.07.2011

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

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

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

person user2897684    schedule 19.10.2013