|
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
|
|
| 07.02.2007, 16:10 | |
|
Ответы с готовыми решениями:
11
Как правильно реализовать связывание двух документов? Слепить Response из двух документов Связывание таблиц из разных документов WORD |
|
0 / 0 / 0
Регистрация: 18.11.2006
Сообщений: 293
|
||
| 08.02.2007, 12:06 | ||
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
|
|
| 11.02.2007, 11:04 | |
|
Помогаю со студенческими работами здесь
12
Связывание двух форм Связывание двух форм Связывание двух Combobox
Связывание из двух таблиц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
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. Пошагово создадим проект для загрузки изображения. . .
|