Перейти к содержанию

Связи (relations): различия между версиями

Материал из Химсофт Вики
Новая страница: « ==Создание связи== ==Редактирование связи==»
 
 
(не показано 38 промежуточных версий этого же участника)
Строка 1: Строка 1:
Между двумя источниками данных можно установить связь типа <code>главный-подчиненный</code> (или <code>родительский-дочерний</code>).


Например:
*одна запись в запросе <code>LaboratoryFilter</code> может иметь множество подчиненных записей в запросе <code>Indicators</code>;
*оба запроса имеют поле <code>lab_id</code>, по которому можно установить связь.


Есть 2 способа построить отчет с подобными взаимоотношениями.


==Способ 1 - Бэнды==


Первый способ дает возможность строить отчеты типа <code>главный-подчиненный</code> (<code>master-detail</code>).
===Алгоритм===
Для этого используются два бэнда <code>Данные</code>:
*главный бэнд привязывается к главному источнику данных;
*подчиненный бэнд привязывается к подчиненному источнику данных;
*в фильтре подчиненного источника задается выражение (сопоставление соответствующих полей).
:<syntaxhighlight lang="java">
[Indicators.lab_id] == [LaboratoryFilter.lab_id]
</syntaxhighlight>
===Результат===
Итоговый отчет может выглядеть, например, так:
[[Файл: data_link_1.png|center|border]]
Если такой отчет запустить, то на печать будет выведен список показателей для каждой лаборатории со следующей структурой:
[[Файл: data_link_2.png|center|border|500px]]
==Способ 2 - Связи==
Второй способ позволяет из подчиненного источника обращаться к главному, учитывая имеющуюся связь между двумя источниками:
[[Файл: data_link_3.png|center|border]]
Мы видим, что среди полей источника <code>Indicators</code> есть ссылка на родительскую таблицу <code>LaboratoryFilter</code>.
===Алгоритм===
Таким образом, для реализации такого типа отчета нужно:
*[[Связи (relations)#Создание связи|создать связь между источниками данных]];
*перетащить в дереве данных из подчиненного источника поле родительского источника <code>[Indicators.LaboratoryFilter.lab_name]</code>;
*перетащить в дереве данных из подчиненного источника поле <code>[Indicators.ind_name]</code>.
===Результат===
Итоговый отчет будет выглядеть следующим образом:
[[Файл: data_link_4.png|center|border]]
Если его запустить, мы увидим следующее:
[[Файл: data_link_5.png|center|border|500px]]


==Создание связи==
==Создание связи==
Для того чтобы создать связь:
*в окне <code>Данные</code> нажать кнопку <code>Действия</code> и выбрать пункт <code>Новая связь...</code> - откроется окно <code>Редактор связи</code>:
[[Файл: data_link_6.png|center|border]]
*выбрать главную и подчиненную таблицы;
*выбрать одну или несколько пар полей – для каждой таблицы соответственно;
*закрыть редактор связи кнопкой <code>ОК</code>.
Созданную связь можно увидеть в окне <code>Данные</code> (если выбрать подчиненный источник данных и раскрыть список его полей - среди полей мы увидим связь с родительским источником):
[[Файл: data_link_3.png|center|border]]


==Редактирование связи==
==Редактирование связи==
Для того чтобы отредактировать связь:
*откройте список полей дочернего источника данных;
*найдите нужную связь;
*нажмите кнопку <code>Редактировать...</code> на панели инструментов.
При этом будет вызван редактор связи, который мы рассматривали выше.

Текущая версия от 09:35, 16 октября 2026

Между двумя источниками данных можно установить связь типа главный-подчиненный (или родительский-дочерний).

Например:

  • одна запись в запросе LaboratoryFilter может иметь множество подчиненных записей в запросе Indicators;
  • оба запроса имеют поле lab_id, по которому можно установить связь.

Есть 2 способа построить отчет с подобными взаимоотношениями.

Способ 1 - Бэнды

Первый способ дает возможность строить отчеты типа главный-подчиненный (master-detail).

Алгоритм

Для этого используются два бэнда Данные:

  • главный бэнд привязывается к главному источнику данных;
  • подчиненный бэнд привязывается к подчиненному источнику данных;
  • в фильтре подчиненного источника задается выражение (сопоставление соответствующих полей).
[Indicators.lab_id] == [LaboratoryFilter.lab_id]

Результат

Итоговый отчет может выглядеть, например, так:

Если такой отчет запустить, то на печать будет выведен список показателей для каждой лаборатории со следующей структурой:

Способ 2 - Связи

Второй способ позволяет из подчиненного источника обращаться к главному, учитывая имеющуюся связь между двумя источниками:

Мы видим, что среди полей источника Indicators есть ссылка на родительскую таблицу LaboratoryFilter.

Алгоритм

Таким образом, для реализации такого типа отчета нужно:

  • создать связь между источниками данных;
  • перетащить в дереве данных из подчиненного источника поле родительского источника [Indicators.LaboratoryFilter.lab_name];
  • перетащить в дереве данных из подчиненного источника поле [Indicators.ind_name].

Результат

Итоговый отчет будет выглядеть следующим образом:

Если его запустить, мы увидим следующее:

Создание связи

Для того чтобы создать связь:

  • в окне Данные нажать кнопку Действия и выбрать пункт Новая связь... - откроется окно Редактор связи:
  • выбрать главную и подчиненную таблицы;
  • выбрать одну или несколько пар полей – для каждой таблицы соответственно;
  • закрыть редактор связи кнопкой ОК.

Созданную связь можно увидеть в окне Данные (если выбрать подчиненный источник данных и раскрыть список его полей - среди полей мы увидим связь с родительским источником):

Редактирование связи

Для того чтобы отредактировать связь:

  • откройте список полей дочернего источника данных;
  • найдите нужную связь;
  • нажмите кнопку Редактировать... на панели инструментов.

При этом будет вызван редактор связи, который мы рассматривали выше.