Autor Thema: Etwas performanteres als Schleife ?  (Gelesen 1862 mal)

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Etwas performanteres als Schleife ?
« am: 01.08.12 - 13:07:53 »
Hallo,

wir haben eine Einkauf-Datenbank mit den
- Kostenstelle-Budget-Dokumenten (ein paar Hundert)
- Ticket-Bestell-Dokumenten (ein paar Tausend).

In jedem Ticket wird die zugehörige Kostenstelle-Nummer manuell eingetragen.
Sowie auch die Beträge für Angebote, Rechnungen u.ä.

In jedem Budget-Dokument werden die summierten Beträge für Angebote, Rechnungen u.ä. täglich per Agenten aktualisiert.

Dieser Agent läuft alle Budget-Dokumente in der Ansicht "view" sowie alle Tickets in der Ansicht "view1" durch, was auch prima funktioniert nur etwas zu lange dauert, so dass DDM meckert...

Könnte man das Verfahren erheblich verbessern bzw. wie ?

Gruß
Leo

Code
' Anfang der großen Schleife über alle Budget-Dokumente in view
Set doc = view.GetFirstDocument ' das erste aller Budget-Dokumente
While Not doc Is Nothing ' Schleife bis alle Budget-Dokumente abgearbeitet sind
MyKey = doc.GetItemValue("JbNummer")(0) ' die JAHR-Budget-Nummer im Budget-Dokument ermitteln
Set doc2 = view1.GetFirstDocument ' das erste aller Ticket-Dokumente in view1
While Not doc2 Is Nothing ' Schleife bis alle Tickets abgearbeitet sind
' Überpüfung ob die gleiche JAHR und KOSTENSTELLE-Budget-Nummer wie im Budget-Dokument.
If MyKey = Cstr (doc2.GetItemValue("JnumK")(0) ) Then
tmp1 = tmp1 + doc2.GetItemValue("wBer_2")(0) ' Werte im Feld wBer_2 aller Tickets werden summiert
tmp2 = tmp2 + doc2.GetItemValue("wBer_3")(0) ' Werte im Feld wBer_3 aller Tickets werden summiert
tmp3 = tmp3 + doc2.GetItemValue("wBer_5")(0) ' Werte im Feld wBer_5 aller Tickets werden summiert
tmp4 = tmp4 + doc2.GetItemValue("wBer_6")(0) ' Werte im Feld wBer_6 aller Tickets werden summiert
'30.07.2012 wenn alle Tickets zu diesem K.Budget abgearbeitet sind,
'dann keine weiteren Tickets in View1 überprüfen
If Not view1.GetNextDocument(doc2) Is Nothing Then
If MyKey <> CStr (view1.GetNextDocument(doc2).GetItemValue("JnumK")(0)) Then
GoTo SpeichernK
End If
End If
End If
Set doc2 = view1.GetNextDocument(doc2) ' das nächste Ticket in der Ansicht view1 wird angesprochen
Wend
SpeichernK:
' (Falls was geändert) Eintragen der ermitelten Summen ins Budget-Dokument und Speichern
If CStr(tmp1) <> CStr(doc.GetItemValue("Ber_2")(0)) Or CStr(tmp2) <> CStr(doc.GetItemValue("Ber_3")(0)) Or _
CStr(tmp3) <> CStr(doc.GetItemValue("Ber_5")(0)) Or CStr(tmp4) <> CStr(doc.GetItemValue("Ber_6")(0)) Then
If CStr(tmp1) <> CStr(doc.GetItemValue("Ber_2")(0)) Then '30.07.2012
Set item = doc.ReplaceItemValue ( "Ber_2", tmp1 )
End If
If CStr(tmp2) <> CStr(doc.GetItemValue("Ber_3")(0)) Then '30.07.2012
Set item = doc.ReplaceItemValue ( "Ber_3", tmp2 )
End If
If CStr(tmp3) <> CStr(doc.GetItemValue("Ber_5")(0)) Then '30.07.2012
Set item = doc.ReplaceItemValue ( "Ber_5", tmp3 )
End If
If CStr(tmp4) <> CStr(doc.GetItemValue("Ber_6")(0)) Then '30.07.2012
Set item = doc.ReplaceItemValue ( "Ber_6", tmp4 )
End If
Set item = doc.ReplaceItemValue ( "WannBer", Now ) ' Eintragen der Zeit der Aktualisierung ins Budget-Dokument
Call doc.Save( False, True )
End If '30.07.2012
' Setzen Variablen auf 0
tmp1 = 0
tmp2 = 0
tmp3 = 0
tmp4 = 0
' Ende der großen Schleife über alle Budget-Dokumente in view
Set doc = view.GetNextDocument(doc) ' das nächste Budget-Dokument in der Ansicht wird angesprochen
Wend


« Letzte Änderung: 01.08.12 - 13:15:38 von Bruce Willis »
nobody is perfect but i'm pretty close 

Offline ascabg

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.697
  • Geschlecht: Männlich
Re: Etwas performanteres als Schleife ?
« Antwort #1 am: 01.08.12 - 13:16:34 »
Hallo,

Gibt es in der Ansicht der Ansicht der Budget-Dokumente (view) die betreffende Nummer nur einmal?

Warum suchst Du in der Ansicht der Tiket-Dokumente nicht mit einem Search oder sortierts die 2. Ansicht (view1) nach dieser gesuchten Nummer und nimmst dann ein view1.GetAllDocumentsByKey


Andreas

Offline Bruce Willis

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.002
  • Geschlecht: Männlich
  • Wer nicht wagt...
Re: Etwas performanteres als Schleife ?
« Antwort #2 am: 02.08.12 - 09:45:04 »
...sortierts die 2. Ansicht (view1) nach dieser gesuchten Nummer und nimmst dann ein view1.GetAllDocumentsByKey

Hallo Andreas,

vielen Dank für die schnelle Antwort und den guten Vorschlag!
Das hat geholfen.

Gruß
Leo

« Letzte Änderung: 02.08.12 - 09:47:13 von Bruce Willis »
nobody is perfect but i'm pretty close 

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz