Subpage Performance Problem

Bild Microsoft Dynamics NAV 2017

Subpage Performance Problem

Beitragvon stony » 12. März 2021 14:20

Hallo,
ich habe in einer Subpage eine Zeile, welche fĂĽr eine Artikel eine Summenzeile hat und darunter die einzelnen Zeilen.
Es gibt nun ein Boolean (Produzieren) und wenn ich dieses in der Summenzeile anklicke, möchte ich es auch bei den entsprechenden Zeile für den Artikel setzen.
DafĂĽr habe ich folgenden Code im Trigger OnValidate
Code: Alles auswählen
l_produzieren := Produzieren;
l_Gruppenmerkmal := Gruppenmerkmal;
l_Untergruppenmerkmal := UnterGruppenmerkmal;
l_Artikelnr := "Artikelnr.";

IF XTagTyp = XTagTyp::Artikelgruppe THEN BEGIN
  RESET;
  SETRANGE("Feinplanungsnr.","Feinplanungsnr.");
  SETRANGE(Gruppenmerkmal,l_Gruppenmerkmal);
  SETRANGE(UnterGruppenmerkmal,l_Untergruppenmerkmal);
  SETRANGE("Artikelnr.",l_Artikelnr);
  SETRANGE(XTagTyp,XTagTyp::Artikel); 
  MODIFYALL(Produzieren,l_produzieren,FALSE); 
  RESET;   
END;


Es funktioniert zwar aber es dauert ca. 10 Sekunden bis das Programm dies gemacht hat.
Wie könnte ich das lösen?

Danke und lg stony
stony
 
Beiträge: 1100
Registriert: 24. April 2006 11:31
Bezug zu Microsoft Dynamics: End-Anwender

Re: Subpage Performance Problem

Beitragvon Timo Lässer » 12. März 2021 14:25

Gibt es in der Tabelle auch einen Key, welcher alle Felder enthält, auf die du filterst?

Je nachdem, wieviele Datensätze in der Tabelle enthalten sind, kann ein Full Table Scan ziemlich lange dauern, bis der SQL-Server alle Datensätze gefunden hat.
Gruß, Timo Lässer

Frage beantwortet? Schreibe bitte "[Gelöst]" vor den Titel deines ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, E-Mail, Instant Messanger, Soziale Netzwerke, Telefon oder Fax! DafĂĽr ist dieses Forum da.
Hier kannst du fĂĽr MSDynamics.de spenden.
Benutzeravatar
Timo Lässer
Administrator
Administrator
 
Beiträge: 5279
Registriert: 14. November 2004 22:18
Wohnort: DE 49716 Meppen
Arbeitsort: DE 49733 Haren (Ems)
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 1.10a - 2018, BC14, BC21

Re: Subpage Performance Problem

Beitragvon stony » 12. März 2021 14:31

Habe den Key nun hinzugefĂĽgt.
Leider hat es sich nicht verbessert und aktuell sind nur ca. 20 Datensätze in der Tabelle.
stony
 
Beiträge: 1100
Registriert: 24. April 2006 11:31
Bezug zu Microsoft Dynamics: End-Anwender

Re: Subpage Performance Problem

Beitragvon enh » 12. März 2021 16:57

SETCURRENTKEY ?

Vielleicht die Ă„nderungen nicht in Rec sondern einer anderen Variable durchfĂĽhren + CurrPage.UPDATE ?
enh
 
Beiträge: 2341
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Subpage Performance Problem

Beitragvon DanielF » 12. März 2021 17:59

Statt Modifyall durchloopen und pro Rec das modify durchfĂĽhren. Meine irgendwo gelesen zu haben dass einzelnes modify schneller ist als modifyall?! Habe leider die Quelle nicht mehr - nur versuchen wenn du sehr verzweifelt bist.
Benutzeravatar
DanielF
Microsoft Partner
Microsoft Partner
 
Beiträge: 110
Registriert: 27. April 2015 16:03
Realer Name: Daniel Forster
Arbeitsort: Bodensee
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2015

Re: Subpage Performance Problem

Beitragvon stony » 15. März 2021 07:12

Habe ich beides versucht. Leider keine Verbesserung.
stony
 
Beiträge: 1100
Registriert: 24. April 2006 11:31
Bezug zu Microsoft Dynamics: End-Anwender

Re: Subpage Performance Problem

Beitragvon Timo Lässer » 15. März 2021 10:46

DanielF hat geschrieben:Meine irgendwo gelesen zu haben dass einzelnes modify schneller ist als modifyall?!

Das bezweifel ich aber mal ganz stark, da bei einzelnen MODIFYs jeder Datensatz (in einer Schleife) von Server geholt werden muss, um dann je Datensatz ein SQL-Statement an den SQL-Server geschickt wird.
Bei einem MODIFYALL werden keine Datensätze vom Server geholt und nur ein einziges SQL-Statement an den Server geschickt.

Bei nur wenigen Datensätzen wird man als Anwender keinen Unterschied bemerken, wenn es aber um hunderte oder mehr Datensätze geht, dann kann man schon einen Performance-Unterschied spüren.

Aber Vorsicht!
Wenn man auch den OnModify-Trigger bei allen Datensätzen ausführen möchte/muss, dann kann es (je nach Build-Version) vorkommen, dass dieser bei MODIFYALL(<Feld>,<NeuerWert>,TRUE) trotzdem nicht ausgeführt wird.
Ich habe diesbezĂĽglich schon mehrere Build-Versionen erlebt, bei denen der Trigger nicht durchlaufen wurde.
Seit dem nutze ich MODIFYALL nur, wenn ich den Trigger nicht ausführen möchte. Möchte ich den Trigger ausführen, dann nutze ich (trotz der schlechteren Performance) MODIFY(TRUE) in einer Schleife.
Gruß, Timo Lässer

Frage beantwortet? Schreibe bitte "[Gelöst]" vor den Titel deines ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, E-Mail, Instant Messanger, Soziale Netzwerke, Telefon oder Fax! DafĂĽr ist dieses Forum da.
Hier kannst du fĂĽr MSDynamics.de spenden.
Benutzeravatar
Timo Lässer
Administrator
Administrator
 
Beiträge: 5279
Registriert: 14. November 2004 22:18
Wohnort: DE 49716 Meppen
Arbeitsort: DE 49733 Haren (Ems)
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 1.10a - 2018, BC14, BC21

Re: Subpage Performance Problem

Beitragvon Raik Zobel » 16. März 2021 10:10

enh hat geschrieben:Vielleicht die Ă„nderungen nicht in Rec sondern einer anderen Variable durchfĂĽhren + CurrPage.UPDATE ?


Das wĂĽrde ich auch eher so machen.

Probiere es so:

Aufruf im OnValidate Trigger des Produzieren Feldes:
Code: Alles auswählen
IF UpdateLinesFromTotalLine(Rec,xRec) THEN
  CurrPage.UPDATE(FALSE);

Die Funktion:
Code: Alles auswählen
UpdateLinesFromTotalLine(TotalLineRecord,xTotalLineRecord) : Boolean

IF TotalLineRecord.XTagTyp <> XTagTyp::Artikelgruppe THEN
  EXIT;

IF TotalLineRecord.Produzieren = xTotalLineRecord.Produzieren THEN
  EXIT;

LineRecord.SETRANGE("Feinplanungsnr.",TotalLineRecord."Feinplanungsnr.");
LineRecord.SETRANGE(Gruppenmerkmal,TotalLineRecord.Gruppenmerkmal);
LineRecord.SETRANGE(UnterGruppenmerkmal,TotalLineRecord.UnterGruppenmerkmal);
LineRecord.SETRANGE("Artikelnr.",TotalLineRecord.Artikelnr);
LineRecord.SETRANGE(XTagTyp,LineRecord.XTagTyp::Artikel);
IF NOT LineRecord.ISEMPTY THEN BEGIN
  LineRecord.MODIFYALL(Produzieren,TotalLineRecord.Produzieren,FALSE);
  EXIT(TRUE);
END;
Benutzeravatar
Raik Zobel
 
Beiträge: 279
Registriert: 4. März 2013 13:43
Realer Name: Raik Zobel
Arbeitsort: Leipzig
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 4.00SP3, 2013R2, 2016

Re: Subpage Performance Problem

Beitragvon Kowa » 29. März 2021 12:42

Timo Lässer hat geschrieben:Wenn man auch den OnModify-Trigger bei allen Datensätzen ausführen möchte/muss, dann kann es (je nach Build-Version) vorkommen, dass dieser bei MODIFYALL(<Feld>,<NeuerWert>,TRUE) trotzdem nicht ausgeführt wird.

Auch aktuell gibt es einen bestätigten Bug bei Einsatz von MODIFYALL mit globalen Recordvariablen.
https://github.com/microsoft/AL/issues/6515
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7849
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Subpage Performance Problem

Beitragvon Kowa » 2. Februar 2022 10:08

Kowa hat geschrieben:Auch aktuell gibt es einen bestätigten Bug bei Einsatz von MODIFYALL mit globalen Recordvariablen.
https://github.com/microsoft/AL/issues/6515

Die Doku ist jetzt um den Einschub bei "Important" erweitert worden (danke Natalie, fĂĽr den Hinweis :wink:):
https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods-auto/record/record-deleteall-method#remarks
https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/methods-auto/record/record-modifyall-method#remarks
Docs hat geschrieben:By design, the global variables of the record instance being modified will be initialized to their default value during the ModifyAll/DeleteAll method execution, independently of the value that was previously set.
GruĂź, Kai

Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, Messenger oder Telefon! DafĂĽr ist dieses Forum da.

Download: Dynamics NAV Object Text Explorer (Alternativlink). MVP Alumni
Benutzeravatar
Kowa
Moderator
Moderator
 
Beiträge: 7849
Registriert: 17. Juni 2005 17:32
Wohnort: Bremen
Realer Name: Kai Kowalewski
Arbeitsort: Osterholz-Scharmbeck
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics 365
Microsoft Dynamics Version: BC, NAV 2018 bis Navision 2.01

Re: Subpage Performance Problem

Beitragvon fiddi » 2. Februar 2022 10:54

Hallo,

ein MODIFYALL mit Runtrigger=true ist nicht unbedingt ein Performance Gewinn, weil er im Endeffekt nichts anderes als ein Repeat- Until- Next mit Modify(true) in der Schleife ist.

Das der dann allerdings den aktuellen Record nicht benutzt, kann schon ein wenig Tricky werden. Wenn jemand z.B. den SalesHeader in einer SalesLine von extern temproär gesetzt hat, und dann ein SalesLine.ModifyAll(true) macht, der auch Daten aus dem SalesHeader im OnModify zur Aktualisierung benutzt.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7095
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell


ZurĂĽck zu NAV 2017

Wer ist online?

Mitglieder in diesem Forum: Unbekannter Bot und 1 Gast

cron