Laufende Summe zurücksetzen
Rafael Stalder
Hallo,eine kurze Frage.
Ist es möglich, eine laufende Summe (z.b. in den Aggregates eines Detailbands) extern irgendwo auf 0 zurückzusetzen?
Bin dankbar für Ratschläge.
Gruss Rafael
Philipp Knecht
Hi RafaelNein. Aggregatssummen werden ausschliesslich durch die Gruppierung zurückgesetzt.
Falls Gruppierung nicht in Frage kommt musst du halt eine Klassenvariable definieren und diese im GetDataScript (Nicht GenerateScript!) je nach Fall erhöhen.
hth
Rafael Stalder
Hallo,danke für die schnelle Antwort.
Was ich nicht ganz verstehe ist, wieso man diese im GetDataScript erhöhen muss und nicht im GenerateScript?
Gruss Rafael
Rafael Stalder
Habe nochmals kurz eine Frage.Ich habe nun eine öffentliche Variable (Linetotal) erstellt, die ich im GetDataScript erhöhe und dann in einem Textfeld im GroupFooter ausgebe.
Die Variable wird richtig zusammengezählt, doch sobald der GroupFooter auf einer neuen Seite angedruckt wird (die dazugehörigen Detailbändern allerdings noch auf der vorderen Seite sind), wird die Variable auf 0 gesetzt.
Mein Code im Textfeld sieht folgendermassen aus:
textBox68.Value = LD.FStr(LineTotal, "###,###,##0.00")
If GetData("B1_Data.Document.DocumentRow.RowRowItems.QryGroup3") = "Y" Or _
GetData("B1_Data.Document.DocumentRow.ItemCode") = "+" Or _
Right(GetNextText(DocumentRow, "ItemCode"), 1) = "M" Or _
(Right(GetData("B1_Data.Document.DocumentRow.ItemCode"),1) <> "M" And _
Right(GetData("B1_Data.Document.DocumentRow.ItemCode"),1) <> "V") Then
textBox68.Visible = false
Else
textBox68.Visible = True
LineTotal = 0
End If
Wäre dankbar für schnelle Hilfe!
Philipp Knecht
Hi RafaelDas GenerateScript kommt nicht in Frage weil dieses auch 2 Mal pro Datensatz aufgerufen werden kann (Falls das Rendering für dasselbe Element auf einer neuen Seite fortgestezt wird).
Hast du es im DataBand GetDataScript ? Weil im GroupBand GetDataScript wird es nicht funktionieren.
Du musst also dafür sorgen dass der Counter ausschliesslich in diesem GetDatascript erhöht bzw. zurückgesetzt wird und nicht in irgendeinem GenerateScript eines Textfeldes.
hth
Rafael Stalder
Hallo Philipp,ja ich habe es im DataBand GetDataScript.
Das Problem ist, wenn ich es im DataBand zurücksetze, wird die Summe nach dem ersten Artikel zurückgesetzt, und dass darf nicht passierten, denn dieser Artikel muss ja auch noch im Subtotal enthalten sein.
Im Moment ist es so, dass ich die Summe im GetDataScript aufrechne, und in dem oben gezeigten GenerateScript eines GroupFooters auf 0 setze (sofern die gewünschte Textbox angezeigt wird).
Muss ich irgendwie mit einem Counter arbeiten oder was muss ich da genau ändern, dass die Summe vor und nicht nach dem ersten Artikel auf 0 gesetzt wird?
Rafael Stalder
Als Hilfe ist hier noch der Code vom GetDataScript:
If Right(GetData("B1_Data.Document.DocumentRow.ItemCode"),1) = "M" Then
If GetData("B1_Data.Document.DocumentRow.VisOrder")+1 = 1 Then
LineTotal = GetData("B1_Data.Document.DocumentRow.LineTotal")
'Wenn an der ersten Stelle ein ...M - Artikel kommt, soll die Summe nicht erhöht werden
Else
LineTotal = LineTotal + GetData("B1_Data.Document.DocumentRow.LineTotal")
End If
Else If (GetData("B1_Data.Document.DocumentRow.RowRowItems.QryGroup3")= "Y") Then
LineTotal = LineTotal
Else
LineTotal = LineTotal + GetData("B1_Data.Document.DocumentRow.LineTotal")
End If
Philipp Knecht
Hi RafaelDefinier noch ne zweite Variable und merk dir jeweils vor dem Zurücksetzen der Variable den Wert.
Wichtig ist auch dass du das zurücksetzen des Wertes im GetDataScript machst:
Bsp:
If Right(GetData("B1_Data.Document.DocumentRow.ItemCode"),1) = "M" Then
If GetData("B1_Data.Document.DocumentRow.VisOrder")+1 = 1 Then
LineTotal = GetData("B1_Data.Document.DocumentRow.LineTotal")
'Wenn an der ersten Stelle ein ...M - Artikel kommt, soll die Summe nicht erhöht werden
Else
LineTotal = LineTotal + GetData("B1_Data.Document.DocumentRow.LineTotal")
End If
Else If (GetData("B1_Data.Document.DocumentRow.RowRowItems.QryGroup3")= "Y") Then
LineTotal = LineTotal
Else
LineTotal = LineTotal + GetData("B1_Data.Document.DocumentRow.LineTotal")
End If
LineTotalSave = LineTotal
If Zurücksetzbedingung Then
LineTotal = 0
End IfhthRafael Stalder
Hi,aha ok. dann muss ich die Variable LineTotalSave in der entsprechenden TextBox ausgeben und nicht die Variable LineTotal...?
Gruss Rafael
0
Please sign in to leave a comment.
Comments
0 comments