Показать сообщение отдельно
Старый 27.01.2021, 18:59   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от 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.
Если предположить что в нашей табличке для клиентов миллионы записей, а для поставщиков - десятки, то возможно оптимизатору проще будет запросы строить и не промахиваться с оценками.

Последний раз редактировалось Logger; 27.01.2021 в 19:08.
За это сообщение автора поблагодарили: sukhanchik (6).