ОБСУЖДЕНИЕ

Представление с дочерними документами

8 ответов 6,3 тыс.
AI-выжимка обсуждения скоро
Пытался уже найти здесь ответ, но те обсуждения, что тут встречаются по отображению респонсов во вьюхе, не дали мне ответа на мой вопрос.

Имеем в БД три типа документов:
1. Родитель (пускай будет с формой Parent)
2. Дочка (форма Responce) - респонс к Родителю
3. Внучка (форма Responce) - респонс к Дочке.
Мне нужно нарисовать вьюху, где проведен отбор по ключевому слову в поле Дочки. Во вьюхе должны отображаться эти Дочки вместе с привязанными к ним Внучками.

Я создал вьюху с откл. галкой отбражения респонсов в иерархии. Добавил Выборку по форме Responce и ключевому слову из поля Дочки, которая выглядит примерно так:
SELECT form="Responce"&(DochkaField="Искомый текст 1"|DochkaField="Искомый текст 2")|@AllChildren
Во вьюхе создал некатегоризированную колонку для отображения значения одного поля из формы Responce.

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

Как-то можно категоризировать такую вьюху, чтобы Внучки наглядно отображались под своей Дочкой?

P.S. Проанализировав ситуацию, пришел к выводу, что надо отображать еще и Родителя, т.к. в самой Дочке и Внучке мало информации.

ИТОГО:Как сделать выборку по значению поля из формы Дочки, но отобразить и связанную с ней Внучку, и ее родительский документ?
 
пиши агента и скидывай всё в папку...
 
не уверен что получиться плясать от дочки. Надо всё таки влясать от родителя(в рожителе хранить флаги какиенибуть) + задавать условия для наследников
 
пиши агента и скидывай всё в папку...
Блин, агента я уже не осилю... Со вьюхой как-то проще было бы, но из всех своих поисков пришел к выводу, что во вьюхе в Селекте плясать можно только сверху вниз, от родителя к потомку.

Впрочем, можно попытаться. Может кто подскажет, от чего хотя бы отталкиваться при написании агента?

Morpheus, это все понятно, в своем первом посте я уже высказал свое огорчение по поводу отсутствия в родителе каких-то доп.полей, флагов и т.д. Задача возникла именно сейчас в текущей БД с текущей структурой и имеет локальный разовый характер.

В качестве обходного решения, видимо, проще всего не в папку пересовывать доки, а натравить агента на текущие документы и значения парочки полей из своего потомка сохранить у себя, и так от потомка к потомку пройтись: Родитель возьмет себе значения Дочки, Дочка - значения Внучки.

Но вот как это реализовать? ))
 
Я правильно понял что во вьюхе документы Родитель не должны вообще отображаться?

Если да, то делайте так:
Дочки и внучки должны быть связаны не через поле $REF, а каком-нить другим полем, а во вьюхе потом используйте DEFAULT $REF := YourRef;

А поле YourRef можно сделать указав в форме внучки в этом поле формулу @InheritedDocumentUniqueID.
 
Я правильно понял что во вьюхе документы Родитель не должны вообще отображаться?
Родителей отображать можно. Мне главное, выборку сделать на определенное значение по одному полю, которое содержится только в Дочке, а отобразить нужно и связанного с Дочкой Родителя и Внучку.

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

Ну тогда без прописывания атрибута в родителя не обойтись.


Твой совет поможет решить проблему на новой базе с новыми документами, в которых будет содержаться доп.служебное поле. Мне же нужно обработать уже имеющиеся документы в старой БД.

Конверсионный агент придется писать по любому.
 
Так и сделал, следующим постом приведу код агента, авось, кому пригодится.
 
Задачка выполнена.
Для истории - вот код агента, сливающий инфу от потомков к родителю, чтобы потом можно было построить вьюху по родителю.
Код:
_Child:=@DbLookup ("";"";"(view)"; @Text(@DocumentUniqueID); "RespField";[FailSilent]);
@If(_Child=""; @Return("");"");
_Child2:=@DbLookup ("";"";"(view)"; @Text(@DocumentUniqueID); "RespFieldDate";[FailSilent]);
@SetDocField($Ref; "F1"; RespField);
@SetDocField($Ref; "FD1"; RespFieldDate);

@SetDocField($Ref; "F2"; _Child);
@SetDocField($Ref; "FD2"; _Child2)
 

Статистика тем

Создано
Wanderstep,
Последний ответ от
Wanderstep,
Ответы
8
Просмотры
6 276