Статус
В этой теме нельзя размещать новые ответы.

MDvdv

Участник
Здравствуйте, подскажите пожалуйста, правильно ли следующее:
Отношения "один-ко-многим" реализуются через форму связи;
Отношения "многие-ко-многим" реализуются через форму связи и объект связи;
Отношения "один-к-одному" реализуются в таблицах через взаимные ссылки на объекты (выбирать вручную)?

ммм, пока писал, появились еще вопросы (извините за формулировки, я дилетант)

Как глубоко база "видит" родительские отношения между объектами?
К примеру, захотелось мне внести в базу общероссийские классификаторы. Возьмем ОКУД (Общероссийский классификатор управленческой документации), который содержит три уровня:

Унифицированные системы документации
0200000 Унифицированная система организационно-распорядительной документации
0300000 Унифицированная система первичной учетной документации
Подсистемы
- 0211000 Документация по созданию организации, предприятия
- 0281000 Документация по приему на работу
и, собственно, формы документов
0211031 Договор об аренде
0211071 Заявление на государственную регистрацию
0211072 Заявление в финансовые органы об открытии расчетного счета
0211101 Письмо об изготовлении печати, штампа
0211111 Положение о структурном подразделении
0211151 Приказ о создании предприятия
0211152 Приказ о выходе из совхоза
0211191 Свидетельство о регистрации
0211231 Устав
0211241 Учредительный договор

Интересно узнать, форма документа (3 уровень) содержит информацию об отношении к системе документации (1 уровень)?
 

Vladimir

Администратор
Команда форума
Для реализации связи "один-к-одному" используется свойство в объекте "Обратная связь".
Можно просто создать взаимные ссылки друг на друга, но тогда заданное значение в одном объекте не будет взаимно задаваться для другого. Для такой реализации и служит свойство "Обратная связь":
Свойство обратной связи.png
В приложенном ниже проекте создан пример на базе двух объектов "Операция" и "Оплата", где после задания оплаты для операции, после перехода к оплате - видна операция, к которой она привязалась.

Для создания связи "один-ко-многим" служит форма связи, где после создания формы, для неё задаётся дочерний объект с подчинённой связью:
Создание дочерней подчинённой связи.png
При этом в объекте, который назначен дочерним к родительскому, создаётся системное поле ссылки на объект. По умолчанию ему добавляется префикс "~" и в свойство "Источник" для него, в отличии от пользовательской ссылки на объект, заблокировано от изменения:
Системное поле ссылки на родительский объект.png
В приложенном ниже проекте создан пример на базе двух объектов "Заказ", "Состав заказа" и формы "Заказы".
В принципе, поле ссылки на объект уже является реализацией связи "один-ко-многим".

Связь "многие-ко-многим" реализуется в форме связи при добавлении дочернего объекта с равнозначной связью:
Создание дочерней равнозначной связи.png
К примеру возьмём объекты "Курс" и "Ученик". Создаётся форма связи "Курсы" на базе объекта "Курс", и добавляется дочерний объект с равнозначной связью "Ученик". При этом автоматически создаётся служебный системный объект "~Курс-Ученик", который имеет в своей структуре две ссылки на объекты "Курс" и "Ученик". По умолчанию данная форма скрыта, но при необходимости может быть показана в меню проекта для прямого доступа к данным. Это может быть полезно для решения различных задач.
Кроме того, в структуре данной форме можно добавлять другие поля - при этом работа с дочерними связями меняется, позволяя вносить дополнительную информацию для каждой связи Курс-Ученик.
В форме "Курсы" для каждой записи могут добавляться ученики, которые получают при этом ссылку на курс.
Так как системный объект связи "многие-ко-многим" имеет ссылку на два объекта, то можно создать вторую форму "Ученики", для которой назначить дочернюю равнозначную связь с курсами и при этом будет использован уже существующих системный объект "~Курс-Ученик". В форме "Ученики" будут видны все курсы, которые назначены каждому ученику.

Таким же образом в конструкторе реализуется механизм создания уровней доступа для пользователей при сетевой многопользовательской работе. Для этого используется системный объект "~Объекты и формы", где каждому пользователю можно назначить те объекты и формы, к которым он может получать доступ. И соответственно можно создать форму, где будет видно, какому пользователю разрешён доступ к тому или иному объекту/форме.

Как глубоко база "видит" родительские отношения между объектами?
Визуально можно построить связь только между двумя объектами. Но используя свойство "Переход к" в форме связи для объекта и для дочернего списка, можно выстроить цепочку переходов по формам для заполнения информации на каждой ступени:
Свойство перехода в дочернем списке.png Свойство перехода для объекта в форме связи.png
К примеру есть форма договоров с дочерним списком счетов. В счёте переходим по правой кнопке к форме счетов, где у каждого счёта есть свой список товаров и услуг. Настроив отображение родительского объекта в форме счёта, по кнопке перехода можно вернуться к договору для данного счёта. И в каждой форме создаются свои шаблоны документов: договор с клиентом, счета, протоколы, ТТН и пр.

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

Как глубоко база "видит" родительские отношения между объектами?
На внутреннем уровне программа видит всю цепочку связей без ограничения. Если в составном поле или в документе надо получить данные по ссылке, то глубина вложенности может быть любой, запись которой может быть представлена в виде: [Клиент.Договор.Счёт.Товар.Цена] и т.п.
 

Вложения

Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу