Продукт в документе - сложная связь

Здравствуйте!

Стоит задача в "Продуктах в документе" учесть принадлежность продукта к определенной записи из детали раздела "Объекты", запись которого связана с документом.

1. Добавил в таблицу tbl_OfferingInDocument поле SiteID (ID объекта) и BorderID (ID записи с детали Объекта).
2. В запросе sq_OfferingInDocument добавил SiteID, BorderID и BorderName:
[tbl_Document].[SiteID] AS [SiteID], // выбираем продукту ID объекта и таблицы документа.
[tbl_ServiceBorders].[Name] AS [BorderName], // название записи на детали
[tbl_ServiceBorders].[ID] AS [BorderID] // ID записи на детали.
3. По аналогии с уже имевшимся:
LEFT OUTER JOIN
[dbo].[tbl_Document] AS [tbl_Document] ON [tbl_Document].[ID] = [tbl_OfferingInDocument].[DocumentID]

Присоединил таблицу детали:
LEFT OUTER JOIN
[dbo].[tbl_ServiceBorders] AS [tbl_ServiceBorders] ON [tbl_ServiceBorders].[SitesID] = [tbl_OfferingInDocument].[SiteID]

В таблице tbl_ServiceBorders в поле SitesID лежат соответственно ID объектов.

Соответственно создал в датасете ds_OfferingInDocument поле справочника, которое привязал к BorderID, источник данных ds_ServiceBorders, отображение BorderName.

В форме врисовал LookupDataControl, связал с полем датасета.

Проблема в том, что в этом поле вываливаются вообще все детали всех объектов, а не того объекта, с которым связан документ, в который добавляется продукт.
Пробовал разными типами JOIN подсоединять tbl_ServiceBorders - не помогло.

Подскажите, где ошибка в логике?

Нравится

1 комментарий

Попробовал немного другим путем -

function edtBorderOnPrepareSelectWindow(LookupDataControl, SelectWindow) {
SiteID = GetParentSiteID();
ApplyDatasetFilter(LookupDataControl.DataField.LookupDataset, 'SitesID', SiteID, true);
}

function GetParentSiteID() {
var WorkspaceDataset = GetParentWorkspaceDataset();
if (!Assigned(WorkspaceDataset)) {
return null;
}
var DataField = WorkspaceDataset.DataFields('SiteID');
var SiteID = GetFieldValueFromDisabledField(WorkspaceDataset,
DataField.Name);
return SiteID;
}

- на OnPrepare контрола фильтрую его, вынимая SiteID из датасета документа. Все получилось.

Показать все комментарии