Цитата:
Сообщение от
trud
нет, так нельзя, в Relation доступны только поля таблицы
да и непонятно, как работать с такими таблицами - все переводить на View? т.е. простейший while select не сделаешь
Цитата:
Сообщение от
Logger
Проектировали по-другому структуру данных ? А как ?
Попробую угадать как мыслили себе это проектировщики 2012-й / 365-й
Возьмем связку
InventTrans - SalesLine
или
InventTrans - SalesTable
Раньше (ax4 - ax2009) были связи :
Для
SalesLine
\Data Dictionary\Tables\InventTrans\Relations\SalesOrderLine
условия:
InventTrans.InventTransId == SalesLine.InventTransId
при этом неявно подразумевалось Fixed условие
InventTrans.TransType == 0
Для
SalesTable
\Data Dictionary\Tables\InventTrans\Relations\SalesOrderNum
условия:
InventTrans.TransType == 0
InventTrans.TransRefId == SalesTable.SalesId
Для фильтрации / связи всегда добавлялось условие по InventTrans.TransType
В 2012-й придумали промежуточную табличку со связью
InventTransOriginSalesLine
т.е. чтобы перейти от InventTransOrigin к SalesLine
идет джоин
InventTransOrigin -
InventTransOriginSalesLine -
SalesLine
В каждой связи нет Fixed условия по InventTransOrigin.ReferenceCategory (это аналог InventTrans.TransType).
Его заменила InventTransOriginSalesLine.
т.е. вместо фильтра по полю с типом записи мы просто джоиним нужную табличку сязей.
От
InventTransOrigin к
InventTransOriginSalesLine связь
InventTransOriginSalesLine.InventTransOrigin == InventTransOrigin.RecId
а от
InventTransOriginSalesLine к
SalesLine :
InventTransOriginSalesLine.SalesLineDataAreaId == SalesLine.dataAreaId
InventTransOriginSalesLine.SalesLineInventTransId == SalesLine.InventTransId
Ну в вашем случае, аналогия такая
atest -- InventTransOrigin
atest_cust -- InventTransOriginSalesLine
atest_vend -- InventTransOriginPurchLine
CustTable -- SalesLine
VendTable -- PurchLine
atest_cust новая табличка связей
поля
CustAccount
(если извращаться то refRecId ссылка на atest)
atest_Vend
поля
VendAccount
(если извращаться то refRecId ссылка на atest)
Ну и в случае фильтрации / связи вместо условия на atest.CustVendCode делаем джоин либо с atest_cust либо с atest_vend
А поле atest.CustVendCode как бы и не нужно.
Правда если табличка atest не предполагает других полей, то нужна ли она вообще ? Ее можно заменить union вьюхой от atest_cust и atest_vend
Все это выглядит несколько громоздко и не очень удобно.
Зачем они так сделали ?
Возможно хотели упростить работу оптимизатора запросов SQL.
Если предположить что в нашей табличке для клиентов миллионы записей, а для поставщиков - десятки, то возможно оптимизатору проще будет запросы строить и не промахиваться с оценками.