![]() |
#4 |
Участник
|
По-моему это немного не то, поскольку поле voucher заполняется только для фактур по предоплатам, в остальных случаях оно пустое
Цитата:
Сообщение от Kashesh
![]() X++: SELECT A.FACTUREID,A.FACTUREDATE,A.FACTUREAMOUNT,A.FACTURETAX,A.CURRENCYCODE,A.CUSTVENDINVOICEACCOUNT,A.FACTUREEXTERNALID,A.NUMBERSEQUENCEGROUPID,A.NONREALREVENUE,A.OFFSESSIONID,A.CONSIGNEE,A.FACTUREROUNDOFF,A.CONSIGNOR,A.PRINTINMST,A.MODULE,A.FACTURETYPE,A.DOCUMENTNUM,A.DOCUMENTDATE,A.REVERSED,A.VOUCHER,A.CUSTVENDTRANSRECID,A.POSTINGLOGRECID,A.LANGUAGEID,A.DELIVERYADDRESS,A.FACTUREDATE_EXTERNAL,A.REVERSEDATE,A.KDV_STORNOFACTUREEID,A.KDV_STORNO,A.KDV_PRINTFACTUREEID,A.KDV_PRINTFACTUREEIDEDIT,A.KDV_PRINTFACTUREID,A.KDV_STORNOINVOICEID,A.KDV_STORNORECID,A.KDV_OLDPRINTFORM,A.MODIFIEDDATE,A.MODIFIEDTIME,A.RECVERSION,A.RECID FROM FACTUREJOUR_RU A WITH( NOLOCK) WHERE ((A.DATAAREAID='SLK') AND (((A.MODULE=0) AND (A.CUSTVENDINVOICEACCOUNT='Ю-РЕЧТРАНС')) AND (A.FACTUREID>='СФВК-051145'))) AND EXISTS (SELECT 'X' FROM FACTURETRANS_RU B WITH( NOLOCK) WHERE ((B.DATAAREAID='SLK') AND ((A.FACTUREID=B.FACTUREID) AND (A.MODULE=B.MODULE))) AND EXISTS (SELECT 'X' FROM CUSTINVOICETRANS C WITH( NOLOCK) WHERE ((C.DATAAREAID='SLK') AND (((((((B.MODULE=0) AND (B.FACTURELINETYPE=0)) AND (B.INVOICELINENUM=C.LINENUM)) AND (B.INVOICEDATE=C.INVOICEDATE)) AND (B.INVOICEID=C.INVOICEID)) AND (B.SALESPURCHID=C.SALESID)) AND (B.NUMBERSEQUENCEGROUP=C.NUMBERSEQUENCEGROUP))) AND EXISTS (SELECT 'X' FROM CUSTINVOICEJOUR D WITH( NOLOCK) WHERE ((D.DATAAREAID='SLK') AND ((((C.SALESID=D.SALESID) AND (C.INVOICEID=D.INVOICEID)) AND (C.INVOICEDATE=D.INVOICEDATE)) AND (C.NUMBERSEQUENCEGROUP=D.NUMBERSEQUENCEGROUP))) AND EXISTS (SELECT 'X' FROM CUSTTRANS E WITH( NOLOCK) WHERE ((E.DATAAREAID='SLK') AND (((D.INVOICEID=E.INVOICE) AND (D.INVOICEACCOUNT=E.ACCOUNTNUM)) AND (D.INVOICEDATE=E.TRANSDATE))) AND EXISTS (SELECT 'X' FROM CUSTTRANSOPEN F WITH( NOLOCK) WHERE ((F.DATAAREAID='SLK') AND ((E.ACCOUNTNUM=F.ACCOUNTNUM) AND (E.RECID=F.REFRECID)))))))) ORDER BY A.FACTUREID,A.MODULE OPTION(FAST 1) 1. CustInvoiceTrans здесь лишний, можно без него (посмотрите relation на FactureTrans_RU к CustInvoiceJour) 2. Связь с CustTrans было бы нелохо строить по полям (e.voucher = d.ledgerVoucher, e.accountNum = d.invoiceAccount, e.transdate = d.invoicedate), но для этого нужно проверить, чтобы у вас все проводки по клиентам, имели тот же voucher, что и накладные создавшие данные проводки Также можно добавить индекс на custTrans по полям запроса, или включить поле Invoice в уже сущетсвующие индексы 3. Также может быть Вам поможет добавление индекса на таблице FactureJour_RU - (factureId, custVendInvoiceAccount, module) 4. Кстати, насчет полей в связанных таблицах, возможно если оставить только индексированные поля, то поиск будет быстрее Вы написали, что запрос тяжелый ![]() Если можно : 1. Выложите план запроса из AX и его cost в AX(SQL трассировка запросов) 2. И если есть доступ на СУБД, выполните его там и выложите сюда cost из СУБД. Поверьте, чем больше информации будет предоставлено, тем легче будет Вам помочь
__________________
Sergey Nefedov Последний раз редактировалось SRF; 31.07.2009 в 13:34. Причина: добавлен пункт 3 |
|
Теги |
оптимизация |
|
![]() |
||||
Тема | Ответов | |||
Срочно нужна помощь по платежам | 8 | |||
Нужна помощь. | 9 | |||
опять нужна помощь новичку | 18 | |||
Очень нужна Ваша помощь!!! | 2 | |||
Управление резервированием - нужна помощь! | 8 |
|