|
28.06.2011, 11:18 | #1 |
Участник
|
Находясь в Оборотной Ведомости Клиента ("Клиент Фин. Оборот. Ведомость") и проваливаясь по Drill-Down (поля Дебет, Кредит, Сальдо) в "Фин. Книгу Операций", получаем такие жуткие "тормоза", что терпение пользователей порой заканчивается... но это происходит не всегда: у кого-то чаще, у кого-то реже.
На SQL-сервере назначены и выполняются задания по Обновлению статистики, Перестроение индексов... Подскажите, пожалуйста, как бороться с данной проблемой? Что может улучшить нашу ситуацию? Буду благодарен за любые советы, т.к. не хотелось бы в определённый момент времени получить коллапс в системе С уважением, Владислав. |
|
28.06.2011, 11:56 | #2 |
Участник
|
Ну тут много всего может быть...
Есть ли тяжелые вычисляемые поля на списке операций? Какой период открывается с тормозмами (может с начала времен)? |
|
28.06.2011, 14:34 | #3 |
Участник
|
В том-то и дело, что строю, допустим, за месяц по счёту 62-100, зависание на 10-15 секунд, потом на экране две операции...
|
|
28.06.2011, 14:34 | #4 |
Участник
|
период - январь 2011
|
|
28.06.2011, 14:37 | #5 |
Участник
|
увеличение периода на 1 год, т.е. с 01.01.10 по 31.01.11 ничего координально не изменило...
|
|
28.06.2011, 14:41 | #6 |
Участник
|
также пользователи говорят о том, что в "оборотке", при "проваливании" в операции, часты случаи зависания Navision, поэтому они его закрывают принудительно что делать???
|
|
28.06.2011, 16:04 | #7 |
NavAx
|
а в формочке "Фин. книга операций", которая открывается по дрилл-дауну, в коде, на OnAfterGetRecord, ничего лишнего-тяжелого не навешано?
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
29.06.2011, 14:47 | #8 |
Участник
|
|
|
29.06.2011, 20:04 | #9 |
Участник
|
Цитата:
А создание нового ключа вряд ли поможет. Когда открывается форма с операциями - какой ключ используется? |
|
28.06.2011, 17:31 | #10 |
Участник
|
Короче, что б не гадать. Есть старый добрый метод: запустите Выполнение Кода, и посмотрите, что ест больше всего времени
|
|
29.06.2011, 08:43 | #11 |
Участник
|
Сегодня буду пробовать...
|
|
29.06.2011, 14:51 | #12 |
Участник
|
у таблицы GL Entry хочу создать ключ: Posting Date,G/L Account No.,Source No.
Также хочу для своего нового ключа заполнить поле SumIndexFields: Amount,Debit Amount,Credit Amount,Additional-Currency Amount,Add.-Currency Debit Amount,Add.-Currency Credit Amount Потом на сервере запущу мененджмент студио и в ней для GL Entry создам новую статистику, используя поля созданного ключа в той же последовательности Может сработать/помочь??? |
|
29.06.2011, 15:35 | #13 |
Участник
|
Что дало Выполнение Кода?
|
|
29.06.2011, 23:05 | #14 |
Administrator
|
|
|
30.06.2011, 10:06 | #15 |
Участник
|
|
|
30.06.2011, 10:21 | #16 |
Участник
|
|
|
30.06.2011, 10:35 | #17 |
Участник
|
|
|
30.06.2011, 17:39 | #18 |
Administrator
|
Цитата:
анализируем, прежде всего, на предмет времени старта той или иной строчки. цвет не важен. если строка 85 запустилась на 20 секунд позже строки 84, то в 84-й строке какая-то фигня, которая выполняется 20 секунд. если на форме 30 строчек, то эти 20 секунд * 30 строчек и вот ваши ожидания открытия формочки. |
|
29.06.2011, 16:48 | #19 |
NavAx
|
Цитата:
Нет, там только простенькая функция, выводящая в поля формы наши внутренние номера учтенных документов: Сч.фактуры и Накладной
__________________
"Моей лошадке ядрышком полмордочки снесло..." А.В.Суворов, письма к дочери |
|
30.06.2011, 10:04 | #20 |
Участник
|
при открытии form 20 выполняется следующий код:
Form - OnOpenForm() IF RunOnTempRec THEN RESET; Form - OnFindRecord(Which : Text[1024]) : Boolean IF RunOnTempRec THEN BEGIN TempGLEntry.COPY(Rec); Found := TempGLEntry.FIND(Which); IF Found THEN Rec := TempGLEntry; EXIT(Found); END ELSE EXIT(FIND(Which)); Form - OnNextRecord(Steps : Integer) : Integer IF RunOnTempRec THEN BEGIN TempGLEntry.COPY(Rec); ResultSteps := TempGLEntry.NEXT(Steps); IF ResultSteps <> 0 THEN Rec := TempGLEntry; EXIT(ResultSteps); END ELSE EXIT(NEXT(Steps)); Form - OnAfterGetRecord() fn_LegCompNo; // $94 >> Form - OnAfterGetCurrRecord() // RA20 >> fn_ViewTotals; // RA20 << fn_ViewTotals() // RA20 IF RunOnTempRec THEN CurrForm.TotalAmount.VISIBLE := g_cduOtherFunctions.fn_ViewTotalGLEntryAmount(TempGLEntry) ELSE CurrForm.TotalAmount.VISIBLE := g_cduOtherFunctions.fn_ViewTotalGLEntryAmount(Rec); CurrForm.TotalDebitAmount.VISIBLE := CurrForm.TotalAmount.VISIBLE; CurrForm.TotalCreditAmount.VISIBLE := CurrForm.TotalAmount.VISIBLE; fn_LegCompNo() // $94 >> IF "Document Type" = "Document Type"::Invoice THEN BEGIN //fn_LegCompNo l_SalesInvoiceHeader.SETRANGE("No.", "Document No."); IF l_SalesInvoiceHeader.FIND('-') THEN BEGIN "Leg. Comp. Posting No." := l_SalesInvoiceHeader."Leg. Comp. Posting No."; l_SalesShptHeader.SETCURRENTKEY("Order No."); l_SalesShptHeader.SETRANGE("Order No.", l_SalesInvoiceHeader."Order No."); IF l_SalesShptHeader.FIND('-') THEN "Leg. Comp. Shipping No." := l_SalesShptHeader."Leg. Comp. Shipping No." ELSE CLEAR("Leg. Comp. Shipping No."); END ELSE BEGIN CLEAR("Leg. Comp. Posting No."); CLEAR("Leg. Comp. Shipping No.") END END ELSE BEGIN CLEAR("Leg. Comp. Posting No."); CLEAR("Leg. Comp. Shipping No.") END // $94 << , но до запуска form 20 выполняется следующая функция, которая и открывает эту форму; она запускается с определённым параметром на соответствующем дрилдауне субформы Оборотной ведомости (form 12406): DrillDownGLEntry(Show : 'StartBalance,Debit,Credit,EndBalance,NetChange') GLEntry.RESET; // $45 >> //GLEntry.SETCURRENTKEY("Source Type","Source No.","G/L Account No.","Global Dimension 1 Code","Global Dimension 2 Code"); GLEntry.SETCURRENTKEY("Source Type","Source No.","G/L Account No.","Global Dimension 1 Code","Global Dimension 2 Code", "Business Unit Code","Posting Date"); // $45 << GLEntry.SETRANGE("Source Type",GLEntry."Source Type"::Customer); GLEntry.SETRANGE("Source No.","No."); GLEntry.SETFILTER("G/L Account No.",GETFILTER("G/L Account Filter")); GLEntry.SETFILTER("Global Dimension 1 Code",GETFILTER("Global Dimension 1 Filter")); GLEntry.SETFILTER("Global Dimension 2 Code",GETFILTER("Global Dimension 2 Filter")); GLEntry.SETFILTER("Posting Date",GETFILTER("Date Filter")); CASE Show OF Show::StartBalance: IF COPYSTR(GETFILTER("Date Filter"),1,2) <> '..' THEN BEGIN IF GETRANGEMIN("Date Filter") <> 0D THEN GLEntry.SETRANGE("Posting Date",0D,GETRANGEMIN("Date Filter") - 1); END ELSE EXIT; Show:ebit: GLEntry.SETFILTER("Debit Amount",'<>%1',0); Show::Credit: GLEntry.SETFILTER("Credit Amount",'<>%1',0); Show::EndBalance: IF GETRANGEMAX("Date Filter") <> 0D THEN // RA26 MBS ERROR >> // GLEntry.SETRANGE("Posting Date",0D,GETRANGEMAX("Date Filter") - 1) GLEntry.SETRANGE("Posting Date",0D,GETRANGEMAX("Date Filter")) // RA26 MBS ERROR << ELSE EXIT; Show::NetChange: GLEntry.SETFILTER(Amount,'<>%1',0); ELSE ERROR(''); END; //GLEntry.SETCURRENTKEY("Posting Date"); // $45 FORM.RUN(0,GLEntry); |
|