24. Juni 2016 07:19
SummeLager := 0;
EKDeckProdPlanungszeilen.SETRANGE(Artikelkategoriecode,'DECKLAGEN'); //Anzahl der Datensätze sind hier 870
IF EKDeckProdPlanungszeilen.FINDSET THEN BEGIN
REPEAT
VerbrArtikelStückliste.RESET;
VerbrArtikelStückliste.SETRANGE("Artikel Nr.",EKDeckProdPlanungszeilen.Artikelnr);
IF VerbrArtikelStückliste.FINDSET THEN BEGIN //Anzahl der Datensätze sind hier 2544
REPEAT
WarehouseEntry.RESET;
WarehouseEntry.SETRANGE("Location Code",'XXX');
WarehouseEntry.SETRANGE("Bin Code",'451');
WarehouseEntry.SETRANGE("Item No.",VerbrArtikelStückliste."Verbr. Artikel Nr.");
//WarehouseEntry.SETRANGE("Quantity Bin",0.01,10000000);
IF WarehouseEntry.FINDSET THEN BEGIN //Anzahl der Datensätze sind hier 11891
REPEAT
WarehouseEntry.CALCFIELDS("Quantity Bin");
IF WarehouseEntry."Quantity Bin" > 0 THEN BEGIN
i += 1;
SummeLager += WarehouseEntry.Quantity;
END;
UNTIL WarehouseEntry.NEXT = 0;
END;
UNTIL VerbrArtikelStückliste.NEXT = 0;
END;
EKDeckProdPlanungszeilen.EKDecklagerbestandNacharbeit := SummeLager;
EKDeckProdPlanungszeilen.MODIFY;
SummeLager := 0;
UNTIL EKDeckProdPlanungszeilen.NEXT = 0;
END;
24. Juni 2016 08:17
WarehouseEntry.CALCSUMS("Quantity Bin");
SummeLager := WarehouseEntry."Quantity Bin";
Microsoft Dynamics NAV Documentation
CALCSUMS Function (RECORD)
Calculates the total of a column of SumIndexFields in a C/SIDE table. Using parameters, you can specify which fields to calculate.
[Ok :=] Record.CALCSUMS (Field1, [Field2],...)
Parameters
Record
Type: Record
The record that contains the SumIndexFields that you want to calculate.
Field1, Field2, …
Type: Decimal
The fields that you want to calculate. Each field is a decimal field, defined as a SumIndexField, in the current key.
Collapse imageProperty Value/Return Value
Type: Boolean
If you omit this optional return value and if one of the fields is not a SumIndexField, a runtime error occurs. If you include a return value, you must handle any errors.
Collapse imageRemarks
Use this function to total columns in a table. This function operates only on records that meet the conditions of any filters associated with the record.
Collapse imageExample
This example shows how to use the CALCSUMS function.
CopyCode imageCopy Code
"Cust. Ledger Entry".SETCURRENTKEY("Customer No.","Date");
"Cust. Ledger Entry".SETRANGE("Customer No.", 'AAA 1050');
"Cust. Ledger Entry".SETRANGE("Date", 010196D, 123196D);
"Cust. Ledger Entry".CALCSUMS("Amount");
The first line selects a key. The second and third lines set filters for the fields Customer No. and Date in the Cust. Ledger Entry record so the total is only calculated within the specified range. The CALCSUMS function then finds the net change in account AAA 1050 for 1996. The Amount field will show the result of the calculation.
24. Juni 2016 08:45
24. Juni 2016 08:49
SilverX hat geschrieben:Ich würde dafür eine Query erstellen. Dort aber bitte auch immer die zugrunde liegenden Tabellen verwenden und nicht auf FlowFields filtern.
24. Juni 2016 09:27
ich habe folgenden Programmteil, der meiner Meinung nach viel zu langsam ist.
24. Juni 2016 09:48
26. Juni 2016 17:27
26. Juni 2016 21:36
enh hat geschrieben:...außerdem sehe ich kein SETCURRENTKEY im Code.
27. Juni 2016 08:00
Ist nicht mehr nötig. Der SQL Server sucht sich selbst den performantesten Index raus