Autor Thema: Etwas performanteres als Schleife ?  (Gelesen 1826 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