![]() |
#1 |
Участник
|
![]()
Возможно, для кого-то это уже не новость, тем не менее. Опубликовал в блогах, как можно по тексту SQL-запроса найти его потенциальные источники в коде X++. Надеюсь, еще кому-нибудь пригодится при оптимизации производительности Аксапты.
|
|
|
За это сообщение автора поблагодарили: fed (5), trud (5), raz (5), sukhanchik (5), Logger (5), PavelX (3), Товарищ ♂uatr (4), axm2017 (5). |
![]() |
#2 |
Участник
|
Цитата:
Сообщение от gl00mie
Здесь t100007_* - это экземпляр временной таблицы AccountingDistributionTmpJournalize
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Участник
|
Я использую запрос для поиска пересечения элементов из запроса, т.е. в каком методе таблицы\поля из запроса одновременно используются:
X++: select distinct p2.Path from xRefPaths p join xRefReferences r on r.ReferencePathRecId = p.RecId join xRefPaths p2 on p2.RecId = r.xRefPathRecId join xRefNames n on n.RecId = r.xRefNameRecId where p.PATH = '\Data Dictionary\Tables\DIMENSIONATTRIBUTEVALUESETITEM' INTERSECT select distinct p2.Path from xRefPaths p join xRefReferences r on r.ReferencePathRecId = p.RecId join xRefPaths p2 on p2.RecId = r.xRefPathRecId join xRefNames n on n.RecId = r.xRefNameRecId where p.PATH = '\Data Dictionary\Tables\DIMENSIONATTRIBUTEVALUESETITEM\FIELDS\DIMENSIONATTRIBUTEVALUESET' INTERSECT <...> X++: SELECT T1.REFERENCEDISTRIBUTION, T4.EXCHANGERATE1, T4.EXCHANGERATE2, T4.REPORTINGEXCHANGERATE1, T4.REPORTINGEXCHANGERATE2 FROM tempdb."DBO".t100007_18B95DDA3C21488C85AC09C9FEB59FE5 T1 CROSS JOIN ACCOUNTINGDISTRIBUTION T2 CROSS JOIN SUBLEDGERJOURNALACCOUNTENTRYDISTRIBUTION T3 CROSS JOIN SUBLEDGERJOURNALACCOUNTENTRY T4 WHERE ((T1.PARTITION = @P1) AND (T1.REFERENCEDISTRIBUTION <> @P2)) AND ((T2.PARTITION = @P3) AND (T2.RECID = T1.REFERENCEDISTRIBUTION)) AND ((T3.PARTITION = @P4) AND (T3.ACCOUNTINGDISTRIBUTION = T1.REFERENCEDISTRIBUTION)) AND ((T4.PARTITION = @P5) AND (T4.RECID = T3.SUBLEDGERJOURNALACCOUNTENTRY)) GROUP BY T1.REFERENCEDISTRIBUTION, T4.EXCHANGERATE1, T4.EXCHANGERATE2, T4.REPORTINGEXCHANGERATE1, T4.REPORTINGEXCHANGERATE2 ORDER BY T1.REFERENCEDISTRIBUTION, T4.EXCHANGERATE1, T4.EXCHANGERATE2, T4.REPORTINGEXCHANGERATE1, T4.REPORTINGEXCHANGERATE2 X++: select distinct p2.Path from xRefPaths p join xRefReferences r on r.ReferencePathRecId = p.RecId join xRefPaths p2 on p2.RecId = r.xRefPathRecId join xRefNames n on n.RecId = r.xRefNameRecId where p.PATH = '\Data Dictionary\Tables\ACCOUNTINGDISTRIBUTION' INTERSECT select distinct p2.Path from xRefPaths p join xRefReferences r on r.ReferencePathRecId = p.RecId join xRefPaths p2 on p2.RecId = r.xRefPathRecId join xRefNames n on n.RecId = r.xRefNameRecId where p.PATH = '\Data Dictionary\Tables\SUBLEDGERJOURNALACCOUNTENTRYDISTRIBUTION' INTERSECT select distinct p2.Path from xRefPaths p join xRefReferences r on r.ReferencePathRecId = p.RecId join xRefPaths p2 on p2.RecId = r.xRefPathRecId join xRefNames n on n.RecId = r.xRefNameRecId where p.PATH = '\Data Dictionary\Tables\SUBLEDGERJOURNALACCOUNTENTRY' INTERSECT select distinct p2.Path from xRefPaths p join xRefReferences r on r.ReferencePathRecId = p.RecId join xRefPaths p2 on p2.RecId = r.xRefPathRecId join xRefNames n on n.RecId = r.xRefNameRecId where p.PATH = '\Data Dictionary\Tables\AccountingDistributionTmpJournalize' \Classes\SubledgerJournalizer\loadaccountingDistributionTmp \Classes\SubledgerJournalizer\loadReferenceDistributionInformation \Classes\SubledgerJournalizer\PSALoadaccountingDistReleaseTmp Предварительно превращаем tableid временной таблицы в имя джобом: X++: info(strFmt("%1", tableId2name(100007))); |
|
|
За это сообщение автора поблагодарили: raz (5), Владимир Максимов (10), Raven Melancholic (10), gl00mie (10). |