Вы говорите одно, а отображаете другое, и эти два не совпадают.
Если второй блок табличный , его макет должен выглядеть как
Nationality Paid Non-paid
----------- ---- --------
USA 65 35
France 70 30
т.е. не так, как у вас; ваш макет форма , а не табличный . Я предлагаю вам удалить этот блок и создать его с нуля, но на этот раз обращая внимание на то, что просит Мастер.
Это также решит проблему, которая у вас есть в настоящее время; форма макет отображает одну запись за раз. В табличном формате отображается несколько записей.
Насколько я понял, между этими двумя блоками нет никакой связи. Значения, используемые в первом, используются для ограничения строк, возвращаемых во втором блоке. Следовательно, второй блок должен быть блоком базы данных на основе таблицы (не делайте это управляющим блоком , если это то, что у вас есть сейчас). При этом, даже если в первом блоке ничего нет, когда вы находитесь во втором блоке и выполните запрос , вы получите все строки, хранящиеся в этой таблице. Формы делают это автоматически, вам не нужно писать ни одной строки кода.
FOR
l oop вы упомянули? На мой взгляд, вам следует избегать этого. Это почти всегда неправильный выбор в блоке базы данных, но может использоваться в блоке управления. Но зачем? Позвольте Forms делать грязную работу.
Теперь вернемся к ограничению результата: вы можете использовать триггер PRE-BLOCK
во втором блоке и использовать встроенное свойство SET_BLOCK_PROPERTY
и его ONETIME_WHERE
, используя элементы даты. из первого блока, например,
set_block_property('second_block',
onetime_where,
'date_column between :first_block.date_from and :second_block.date_to');
Или используйте палитру свойств второго блока и установите для предложения WHERE
значение
where date_column between :first_block.date_from and :second_block.date_to