18.11.2009, 16:22 | #1 |
Участник
|
Проблема с CustTrans
Доброго времени суток, уважаемые программисты, гуру Аксапты
У нас существует отчет "Оплата по группам финансирования", выбирающий данные из таблиц Custtrans, CustInvoiceJour и LedgerJournalTrans (Axapta 3.0 SP5). Работал он работал, и вот однажды утром снова стал работать гораздо медленнее. Включив мониторинг запросов, выяснил, что очень долго проходит кверик по custtrans. Привожу код метода: X++: void insertTmpFromCustTrans() { CustTrans qCustTrans; RContractTable qContractTable, contractTable; ; queryRun.query().dataSourceTable(tableNum(CustTrans)).addRange(fieldNum(CustTrans,TransDate)).value(queryRange(dateNull(),datefrom-1)); if (accountNum) queryRun.query().dataSourceTable(tableNum(CustTrans)).addRange(fieldNum(CustTrans,AccountNum)).value(accountNum); if (contractAccount) { queryRun.query().dataSourceTable(tableNum(RContractTable)).addRange(fieldNum(RContractTable,RContractCode)).value(contractCode); queryRun.query().dataSourceTable(tableNum(RContractTable)).addRange(fieldNum(RContractTable,RContractAccount)).value(contractAccount); queryRun.query().dataSourceTable(tableNum(RContractTable)).addRange(fieldNum(RContractTable,RContractPartnerCode)).value(accountNum); } while (queryRun.next()) { qCustTrans = queryRun.get(tableNum(CustTrans)); qContractTable = queryRun.get(tableNum(RContractTable)); if (qCustTrans) { tmpTable.clear(); tmpTable.GroupFinancName = GroupsFinancTable::find(qContractTable.GroupFinancId).GroupFinancName; tmpTable.AccountNum = qCustTrans.AccountNum; tmpTable.AccountName = CustTable::find(qCustTrans.AccountNum).NameAlias; tmpTable.ContractNumberDate = qContractTable.contractNumberDate; tmpTable.Voucher = qCustTrans.Voucher; tmpTable.Advance = NoYes::No; tmpTable.DebtBeginPeriod = qCustTrans.AmountCur; tmpTable.CurrentPayTotal = tmpTable.BPayCurrent + tmpTable.PayCurrent; tmpTable.PayPeriodTotal = tmpTable.BPay + tmpTable.Pay + tmpTable.CurrentPayTotal; tmpTable.CurrentDebt = tmpTable.AddAmount + tmpTable.CurrentPayTotal; tmpTable.EndDebt = tmpTable.DebtBeginPeriod + tmpTable.AddAmount + tmpTable.PayPeriodTotal; tmpTable.insert(); } } queryRun.query().addDataSource(tableNum(TmpGroupFinancingTable)); } Реиндексацию индексов custtrans делал, не помогло..
__________________
..в каждой программе есть хотя бы одна ошибка.. Последний раз редактировалось Alexanderrrr; 18.11.2009 в 16:53. |
|
|
|