AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.10.2011, 15:18   #1  
VProk is offline
VProk
Участник
 
25 / 10 (1) +
Регистрация: 07.03.2007
Цитата:
Сообщение от Kadawrik Посмотреть сообщение
Цитата:
Сообщение от VProk Посмотреть сообщение
Все-таки обратите внимание в первую очередь на ключи. Возможно, фильтруются какие-то поля, которые в ключе отсутствуют.
Порядок фильтрации не важен. Посмотрите, что стоит в настойках Кэш объектов (KB) в филиале. Мож там 0?
Вот франиент кода, на котором наблюдаются основные "тормоза":
Код:
SalesInvoiceHeader.SETCURRENTKEY("Order No.");
SalesInvoiceHeader.SETRANGE("Order No.","Sales Invoice Header"."Order No.");
SalesInvoiceHeader.SETFILTER("No.",'..%1',"Sales Invoice Header"."No.");
IF SalesInvoiceHeader.FIND('-') THEN
  REPEAT
    SalesInvoiceLine2.SETRANGE("Document No.",SalesInvoiceHeader."No.");
    SalesInvoiceLine2.SETRANGE("Line No.",SalesInvoiceLine."Line No.");
    SalesInvoiceLine2.SETRANGE(Type,SalesInvoiceLine.Type);
    SalesInvoiceLine2.SETRANGE("No.",SalesInvoiceLine."No.");
    SalesInvoiceLine2.SETRANGE("Unit of Measure Code",SalesInvoiceLine."Unit of Measure Code");
    IF SalesInvoiceLine2.FIND('-') THEN
      REPEAT
        TotalQuantity := TotalQuantity + SalesInvoiceLine2.Quantity;
      UNTIL SalesInvoiceLine2.NEXT = 0;
  UNTIL SalesInvoiceHeader.NEXT = 0;



SalesShipmentLine.SETCURRENTKEY("Order No.","Order Line No.");
SalesShipmentLine.SETRANGE("Order No.","Sales Invoice Header"."Order No.");
SalesShipmentLine.SETRANGE("Order Line No.",SalesInvoiceLine."Line No.");
SalesShipmentLine.SETRANGE("Line No.",SalesInvoiceLine."Line No.");
SalesShipmentLine.SETRANGE(Type,SalesInvoiceLine.Type);
SalesShipmentLine.SETRANGE("No.",SalesInvoiceLine."No.");
SalesShipmentLine.SETRANGE("Unit of Measure Code",SalesInvoiceLine."Unit of Measure Code");
SalesShipmentLine.SETFILTER(Quantity,'<>%1',0);

IF SalesShipmentLine.FIND('-') THEN
  REPEAT
и т.д.
Тормозит на первой части (от "IF SalesInvoiceHeader.FIND('-') THEN" до UNTIL SalesInvoiceHeader.NEXT = 0").
Что здесь можно бы ло бы оптимизировать?
SalesInvoiceHeader.SETFILTER("No.",'..%1',"Sales Invoice Header"."No.");
Т.е. просматриваете все счета начиная с царя-гороха.
Вообще с помощью создания ключей можно это дело ускорить все ж.
Первичный ключ для строк инвойса, это <Document No.,Line No.>, если я не ошибаюсь. Остальные фильтруемые поля остаются за бортом.
Лучше добавить ключ, где все фильтруемые поля входят в него. От цикла лучше избавиться, прописав в этом ключе SumIndexField = Quantity и потом его просто CalsSum-ить.
Со строками отгрузки аналогично..
Старый 14.10.2011, 13:58   #2  
Kadawrik is offline
Kadawrik
Участник
 
279 / 11 (1) +
Регистрация: 04.11.2010
Цитата:
Сообщение от VProk Посмотреть сообщение
Первичный ключ для строк инвойса, это <Document No.,Line No.>, если я не ошибаюсь. Остальные фильтруемые поля остаются за бортом.
Лучше добавить ключ, где все фильтруемые поля входят в него. От цикла лучше избавиться, прописав в этом ключе SumIndexField = Quantity и потом его просто CalsSum-ить.
Со строками отгрузки аналогично..
А стОит ли овчинка выделки? Ради одного отчета создавать такой длинный ключ... ... в свете нашего скорого перехода на SQL, наверное, это все-таки нецелессообразно будет
 

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:59.