[gelöst] Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 16:08

Hallo liebe Nav Gemeinde,

ich bin gerade dabei, ein Report zu basteln, welcher ersteinmal folgende Eigenschaften haben soll:

Zählen aller Kunden (Tabelle Customer), welche nicht in der Tabelle 21 (Wertposten) auftauchen.
Die Verbindung besteht ja via Customer No. (Cust Ledger Entry) = No. (Customer).

So habe ich mir folgendes überlegt:

Code:
number := 0;
IF Customer.FIND('-') THEN
REPEAT
IF  Customer."No."="Cust. Ledger Entry"."Customer No." THEN
number := number - 1 ELSE number := number + 1 ;
UNTIL Customer.NEXT = 0;
MESSAGE('Es gibt %1 Kunden ohne Wertposten',number);


Wenn der erste Kunde gefunden wird, so soll er anfangen zu zählen.
Ist die Kundennummer(Customer) die selbe wie Kundennummer(Cust. Ledger Entry), so soll die Zahl -1 gezählt werden.
Ist sie nicht die selbe so + 1.

Für mich wäre das eine nachvollziehbare Rechnung, jedoch führt dies zu dem selben Ergebnis wie:

number:= Customer.COUNT;

Wo ist mein Fehler? Wäre für jede Hilfe / Tipp dankbar.

Gruß
Heiko_D
Zuletzt geändert von Heiko_D am 25. November 2009 17:30, insgesamt 1-mal geändert.

Re: Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 16:18

Du musst schon nach der Kundennummer in den Debitorenposten suchen, sonst wird er nie etwas finden und pro Kunde plus Eins rechnen. Dann kommt logischerweise die Gesamtzahl an Kunden heraus.

Re: Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 17:05

Danke ersteinmal für deine Hilfe.

Nur verstehe ich sie nicht, bzw bekomme nun 0 Einträge.

Code:
number := 0;
IF "Cust. Ledger Entry".FIND(Customer."No.") THEN
REPEAT
IF Customer."No." <>"Cust. Ledger Entry"."Customer No." THEN
number := number + 1 ;
UNTIL Customer.NEXT = 0;

Re: Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 17:25

Du brauchst sowas ähnliches wie
Code:
if Customer.find('-') then repeat
  CustLedgerEntry.SetRange("Customer No.",Customer."No.");
  if not CustLedgerEntry.find('-') then
    AnzahlKundenOhnePosten+=1;
until Customer.next=0;


Da es bei dir offensichtlich noch bei dem Finden von Datensätzen hapert, würde ich dir diesen Beitrag schwer ans Herz legen wollen: viewtopic.php?f=19&t=8341

Re: Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 17:30

ok werde ich mir zu herzen nehmen und gleich einmal durchlesen.

Vielen dank nocheinmal. Auf diese Lösung wäre ich nie alleine gekommen, danke.

Gruß
Heiko_D

Re: [gelöst] Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 18:02

Die Lösung habt Ihr ja bereits, hier noch eine kleine Ergänzung (da die Postentabellen u.a. recht groß sein können) um die Performance zu optimieren:
Code:
CustLedgerEntry.SETCURRENTKEY("Debitorennr.",Währungscode,Buchungsdatum);
if Debitor.FINDSET then BEGIN                     // FINDSET, statt FIND('-')
  repeat
    CustLedgerEntry.SetRange(("Debitorennr.",Debitor."Nr.");
    IF CustLedgerEntry.ISEMPTY THEN              // ISEMPTY arbeitet ohne Cursoranfragen!
      AnzahlKundenOhnePosten+=1;
  until Debitor.next=0;
END;


**Edit by Mikka**
Das SETCURRENTKEY fehlte

Re: [gelöst] Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 18:48

Da vermutlich viele (>500) Datensätze gefunden werden, würde ich hier FIND('-') statt FINDSET nehmen.

Re: [gelöst] Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 19:39

Natalie hat geschrieben:Da vermutlich viele (>500) Datensätze gefunden werden, würde ich hier FIND('-') statt FINDSET nehmen.

Abgesehen davon gibt es unter 3.x die Befehle FINDSET, FINDFIRST und FINDLAST noch nicht.
(Diese wurden erst mit Version 4.0 SP1 eingeführt.)

Re: [gelöst] Zählen in Abhängigkeit einer anderen Tabelle

25. November 2009 19:46

Timo Lässer hat geschrieben:
Natalie hat geschrieben:Da vermutlich viele (>500) Datensätze gefunden werden, würde ich hier FIND('-') statt FINDSET nehmen.

Abgesehen davon gibt es unter 3.x die Befehle FINDSET, FINDFIRST und FINDLAST noch nicht.
(Diese wurden erst mit Version 4.0 SP1 eingeführt.)


:oops:
Oh, da habe nicht aufgepasst, danke Timo für dden Hinweiß.


@Natalie
Nach dem was ich bisher herausfinden konnte (z.B. Waldos Blog - What impact does my C/AL have on SQL?, macht es keinen wesentlichen Unterschied, wenn es mehr als 500 DS sind.Die Empfehlungen die ich gelesen habe, sind (ab Version 4) die neuen Befehle zu nutzen.