Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/133: Рейтинг темы: голосов - 133, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329

Связывание двух документов

07.02.2007, 16:10. Показов 25133. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Довольно часто бывает необходимо "связать" документы двух типов. Назовем их A и B. Нужно, чтобы из документа типа A можно было увидеть список документов типа B через встроенное представление. А из документов типа B увидеть список документов типа A. Чтобы было более понятно, я это изобразил на рисунке.
Предполагается, что для связи будут использованы UNID (хотя, это не столь важно).
Вроде бы, сделать достаточно просто. В документе типа A создаем поле, которое содержит список UNID документов типа B. И наоборот. И чтобы связать два документа, нужно в соответствующие поля добавить их UNID.
Но тут возникают некоторые неудобства. А именно вероятность появления конфликта записи или репликации при добавлении ссылок. Частично этого можно избежать использованием функции блокировки документов, что тоже не совсем удобно.
Поэтому я хочу узнать, как вы решали эту проблему.
У меня есть метод и я опишу его чуть позже.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.02.2007, 16:10
Ответы с готовыми решениями:

Как правильно реализовать связывание двух документов?
Поле документа А берет значение из документа Б (при выборе человеком). Через некоторое время документ Б меняется. Как мне обновить документ...

Слепить Response из двух документов
Коллеги, добрый день! Подскажите, пожалуйста, как можно с наименьшей кровью на LS сделать вот это: Есть два документа А и B,...

Связывание таблиц из разных документов WORD
Доброго времени суток. Искал, тщательно, решение своей проблемы, по советам смог написать макрос под excel для переноса данных из одних...

11
0 / 0 / 0
Регистрация: 18.11.2006
Сообщений: 293
08.02.2007, 12:06
Цитата Сообщение от Medevic
...
Вроде бы, сделать достаточно просто. В документе типа A создаем поле, которое содержит список UNID документов типа B. И наоборот. И чтобы связать два документа, нужно в соответствующие поля добавить их UNID. Но тут возникают некоторые неудобства. А именно вероятность появления конфликта записи или репликации при добавлении ссылок.
...
1) А эти поля не должны быть статическими. Их достаточно вычислять при открытии документа.

2) Еще можно сделать вид с двумя категориями Тип "А" и Тип "Б" и ограничивать встроенный вид в отображении одной из них.
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.02.2007, 12:24
<!--QuoteBegin-Fossil Code+9:02:2007, 12:53 -->
<span class="vbquote">(Fossil Code @ 9:02:2007, 12:53 )</span><!--QuoteEBegin-->1) А эти поля не должны быть статическими. Их достаточно вычислять при открытии документа.
[snapback]55576" rel="nofollow" target="_blank[/snapback]?[/quote]
Каким образом? Если через @DbLookUp, то все равно в других документах(которые мы должны показать в встроенном представлении) должна быть какая-то информация (UNID в нашем случае), связанная с открываемым документом. По-моему, от этого ничего не изменится.

<!--QuoteBegin-Fossil Code+9:02:2007, 12:53 -->
<span class="vbquote">(Fossil Code @ 9:02:2007, 12:53 )</span><!--QuoteEBegin-->2) Еще можно сделать вид с двумя категориями Тип "А" и Тип "Б" и ограничивать встроенный вид в отображении одной из них.
[snapback]55576" rel="nofollow" target="_blank[/snapback]?[/quote]
Можно. Только задача не в том как показать, а как связать документы.
0
0 / 0 / 0
Регистрация: 18.11.2006
Сообщений: 293
08.02.2007, 13:10
Извините, извините! Цитирую: Довольно часто бывает необходимо "связать" два типа документа. Назовем их A и B. Нужно, чтобы из документа типа A можно было увидеть список документов типа B через встроенное представление. А из документов типа B увидеть список документов типа A.

Т.е. "связываются" _типы_ документов, а цель "связывания" -- показ через встроенное представление. Вы ведь так писали? И говорили, что Юнид -- так, для примера. Другой хороший пример для _типа_ документа -- название его формы. Согласны, что такая трактовка допускается постановкой задачи, и при этом ее предельно упрощает?

1) Если делать поле динамическим, т.е. вычислять его при открытии документа, пользуясь для отбора нужным типом, а тогда информация о всех документах будет браться из актуальной БД, а задачи обновления полей по всем документам не будет. Тем самым уменьшится риск конфликта репликации и устранится риск конфликта сохранения, по крайней мере за счет устранения массовых операций перезаписи, связанных с этой процедурой.

2) Это решает поставленную задачу показа и устранения конфликтов (см.1). Иначе нужно определить, что бы означало "связывание" и его цель.
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.02.2007, 13:15
<!--QuoteBegin-Fossil Code+9:02:2007, 13:57 -->
<span class="vbquote">(Fossil Code @ 9:02:2007, 13:57 )</span><!--QuoteEBegin-->Согласны, что такая трактовка допускается постановкой задачи, и при этом ее предельно упрощает?
[snapback]55597" rel="nofollow" target="_blank[/snapback]?[/quote]
Согласен. Извиняюсь. Под вечер правописание волнует меня меньше всего.
Правильно будет: связать документы двух типов. Сейчас поправлю.
0
0 / 0 / 0
Регистрация: 15.12.2006
Сообщений: 641
08.02.2007, 13:51
А почему обязательно надо в форме А иметь эмбеддед вью документов Б? Может просто поля типа список будет достаточно?
У нас сделано так: хотспот который при клике на этот список открывает маленький диалог с выбором названий этих документов, и потом открывает выбранный документ. А в форме Б ембеддед вью.
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.02.2007, 14:07
Для: K-Fire
Можно. Но это менее удобно и требует дополнительных телодвижений. К тому же лично мне не нравится, когда в одном месте используется встроенное представление, а в другом выбор из списка. Результат один и то же, а способы его получение разные.
0
0 / 0 / 0
Регистрация: 15.12.2006
Сообщений: 641
08.02.2007, 14:27
Ну тогда напишите агент, который ночью будет отрабатывать документы А, в которых проставлены ссылки на документы Б, и проставлять кросс-ссылки в док-ты Б. Конфликтов сохранения не будет.

Можно еще придумать более извратно: ввести промежуточную сущность, и показывать ее в ембеддед вьюхах. А в самой вью на queryopendocument подсовывать уже либо док-ты А, либо Б
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.02.2007, 14:38
<!--QuoteBegin-K-Fire+9:02:2007, 15:14 -->
<span class="vbquote">(K-Fire @ 9:02:2007, 15:14 )</span><!--QuoteEBegin-->Ну тогда напишите агент, который ночью будет отрабатывать документы А, в которых проставлены ссылки на документы Б, и проставлять кросс-ссылки в док-ты Б. Конфликтов сохранения не будет.
[snapback]55623" rel="nofollow" target="_blank[/snapback]?[/quote]
Имхо, это как раз извращение. Ждать целый день.

<!--QuoteBegin-K-Fire+9:02:2007, 15:14 -->
<span class="vbquote">(K-Fire @ 9:02:2007, 15:14 )</span><!--QuoteEBegin-->Можно еще придумать более извратно: ввести промежуточную сущность, и показывать ее в ембеддед вьюхах. А в самой вью на queryopendocument подсовывать уже либо док-ты А, либо Б
[snapback]55623" rel="nofollow" target="_blank[/snapback]?[/quote]
А вот так сделал я. Через дополнительный документ. Правда без извращений с queryopendocument и остальным. Во встроенном представлении показываются нормальные документы. Т.е. для пользователей совершенно ничего не изменилось. Минус в том, что при связывании трех документов(A, B и C) между собой я уже начал путаться. И метод сам по себе немного перегруженный.
0
0 / 0 / 0
Регистрация: 15.12.2006
Сообщений: 641
08.02.2007, 15:05
<!--QuoteBegin-Medevic+9:02:2007, 14:25 -->
<span class="vbquote">(Medevic @ 9:02:2007, 14:25 )</span><!--QuoteEBegin-->А вот так сделал я. Через дополнительный документ. Правда без извращений с queryopendocument и остальным. Во встроенном представлении показываются нормальные документы.
[snapback]55628" rel="nofollow" target="_blank[/snapback]?[/quote]

А вот тут можно поподробнее? Во встроенном представлении в форме А показываются документы Б. Для этого в документе Б должен быть айтем, по значению которого делаем отбор, правильно?
Значит вы каким-то способом прописываете это значение в Б ? Как это вы делаете используя документ С ?
0
0 / 0 / 0
Регистрация: 04.12.2004
Сообщений: 3,329
08.02.2007, 15:42
<!--QuoteBegin-K-Fire+9:02:2007, 15:52 -->
<span class="vbquote">(K-Fire @ 9:02:2007, 15:52 )</span><!--QuoteEBegin-->А вот тут можно поподробнее? Во встроенном представлении в форме А показываются документы Б. Для этого в документе Б должен быть айтем, по значению которого делаем отбор, правильно?
Значит вы каким-то способом прописываете это значение в Б ? Как это вы делаете используя документ С ?

[snapback]55637" rel="nofollow" target="_blank[/snapback]?[/quote]
Документ C - это третий тип документа. Это у меня в реальности три типа документов. Для связывания используется другой. Да и связь можно сделать только типа один ко многих. Поэтому и спрашиваю, какие есть способы.
Для двух типов документа конструкция простая.
Пусть, нужно создать документ типа A (назовем его A) и два связанных с ним документа типа B (назовем их B1 и B2).
При первом сохранении A создается дополнительный(связующий) документ, которое содержит два поля. Одно - UNID A, второе потом будет содержать UNIDы B1 и B2. В A записываем UNID это дополнительного документа.
Потом создаем документ B1 (у меня для этого есть кнопка в документе A). В момент создания B1 мы прописываем в определенное поле UNID связующего документа (который создали при сохранении A). И добавляем UNID B1 в соответствующе поле связующего документа.
Также делаем со вторым документом B2.
В результате имеем документ A, и два документа B1 и B2, которые содержат UNID общего связующего документа.
Теперь легко их отобрать во встроенном представлении друг у друга по этому UNID.
0
0 / 0 / 0
Регистрация: 18.11.2006
Сообщений: 293
11.02.2007, 11:04
Ну просто удивительно, как разные товарищи, например, Medevic и Fossil Code, могут обсуждать что-то одно, говоря не вполне об одном предмете, или об одном предмете, но о разных его сторонах! :D

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

Как упомянутые значения в документы заносить -- вопрос тесно связанный с желаемым интерфейсом пользователя и логикой работы базы и процедурными связями между документами. Вот Вы показали, каким приемом для данной цели пользуетесь. Понятно. Своей методой, я, кажется, тоже сумел поделиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2007, 11:04
Помогаю со студенческими работами здесь

Связывание двух форм
Нашел пример как связать две формы через поле owner, но проблема в том, что не могу объявить переменную класса Form1 в файле Form2, хотя...

Связывание двух форм
Есть две формы. Если Если в разделе Uses взаимно их прописать,то выходит ошибка о циркулярной связи. Почему это происходит? Почему нельзя...

Связывание двух Combobox
Помогите пжлст не знаю как реализовать запрос, необходимо связать два Combobox. Чтоб при выборе группы из 1го Combobox, во второй...

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

Связывание из двух таблиц
Есть 2 таблицы с разными названиями-но полностью индентичными столбцами ,делается к одной и другой таблицы запросы индентичные запросы.Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru