Auswahl eines Satzes aus bestimmter Menge

5. Juli 2017 11:55

Hallo zusammen,

ich kann ein kleines bisschen c/al Programmierung. Und ich hoffe ihr könnt mir einen Tipp geben, wie ich das realisieren kann.

Ich möchte aus der Cust-LegdeEntry(21) nur die Posten aufgelistet haben die z.b die höchste Mahnstufe 2 haben.
Also wenn ein Kunde 4 Rechnungen hat und eine davon Mahnstufe 4 und die andere Mahnstufe 2 oder 1. Möchte ich diesen Kunden in meiner liste NICHT habe.
Sondern nur die Kunden bei denen die höchste Mahnstufe 2 haben. Also eine Rechnung mahnstufe 1 die andere 0 und die eine 2, aber keine Mahnstufe die höher ist als 2.

In CustLedgEntry den Filter über den Nummer setzten, dann sehe ich alle Posten ( z.b. 5 Stück) wenn ich nun nach der Mahnstufe 2 filter bekomme ich natürlich auch die Kunden die evtl. eine Rechnung in Mahnstufe 3 oder 4 haben. Wie könnte ich das hinbekommen?

Re: Auswahl eines Satzes aus bestimmter Menge

5. Juli 2017 12:44

ich versuch es einfach mal quick and dirty:
du filterst dir zuerst auf die gewünschte max. mahnstufe -> schreibst die gefundenen posten in einen puffer.
dann suchst du aus jedem datensatz deines puffers in den deb-posten, ob ein datensatz mit einer höheren mahnstufe vorhanden ist -> falls ja, löschst du den datensatz aus dem puffer.

wichtig ist natürlich, dass der puffer temporär ist.

Re: Auswahl eines Satzes aus bestimmter Menge

5. Juli 2017 13:20

Puffer temporär? Kann ich so eine Puffer als Tabelle anlegen in C/AL und diese dann lesen? Mit welchem Attribut bzw. Befehl?

Re: Auswahl eines Satzes aus bestimmter Menge

5. Juli 2017 14:10

als Puffer nimmst du einfach deine CustLedgEntry-Tabelle als neue Variable - schaltest zwingend(!!!!) in den Eigenschaften temporary auf yes.....und befüllst diese dann mit deinen Einträgen.

Wie du Variablen anlegst, weißt du hoffentlich - falls nicht, wäre jetzt der Zeitpunkt, das "Projekt" beiseite zu legen - denn du kannst sehr viel kaputt machen (nicht durch die Anlage der Variablen, aber durch die spätere Programmierung.)

Re: Auswahl eines Satzes aus bestimmter Menge

5. Juli 2017 14:34

OK. Danke erstmal... Ich werde mich mal daran versuchen. Hab hier eine eigene Testumgebung bekommen ;-)

Re: Auswahl eines Satzes aus bestimmter Menge

5. Juli 2017 14:41

sehr gut - bin schonmal beruhigt, dass du dich nicht im Livesystem versuchst :D

Re: Auswahl eines Satzes aus bestimmter Menge

6. Juli 2017 16:37

Hey,

ich bin auch ein Neuling, ich habe hier mal einen Lösungsansatz zusammengebaut.
Ich hoffe, dass er Dich weiterbringt? :)

Vielleicht bekomme ich von dem ein oder anderen Experten ein klein wenig Feedback?

Code:
CustLegdeEntryRecord.SETFILTER("Document Type",'Invoice');
CustLegdeEntryRecord.SETRANGE("Last Issued Reminder Level",3);
OutputTable.INIT;
CustLegdeEntryRecord.FINDFIRST;
REPEAT
 

  OutputTable."No." := CustLegdeEntryRecord."Customer No.";
  CustomerRec.GET(CustLegdeEntryRecord."Customer No.");
  OutputTable.Name := CustomerRec.Name;
  OutputTable.ReminderLevel := CustLegdeEntryRecord."Last Issued Reminder Level"; 
  IF OutputTable.INSERT THEN
    ;

UNTIL CustLegdeEntryRecord.NEXT = 0;

CustLegdeEntryRecord.RESET;
CustLegdeEntryRecord.SETFILTER("Document Type",'Invoice');
CustLegdeEntryRecord.SETRANGE("Last Issued Reminder Level",0,3);
CustLegdeEntryRecord.FINDFIRST;
REPEAT
 

  OutputTable."No." := CustLegdeEntryRecord."Customer No.";
  CustomerRec.GET(CustLegdeEntryRecord."Customer No.");
  OutputTable.Name := CustomerRec.Name;
  OutputTable.ReminderLevel := CustLegdeEntryRecord."Last Issued Reminder Level"; 
  IF OutputTable.INSERT THEN
    ;

UNTIL CustLegdeEntryRecord.NEXT = 0;

OutputTable.SETRANGE("ReminderLevel",3);

REPEAT 
  IF OutputTable.DELETE THEN
    ;
UNTIL OutputTable.NEXT = 0;


Also ich habe eine Tabelle neu erstellt und ihr drei Felder gegeben (siehe Code)
Auf dieser Tabelle habe ich eine Listpage gepackt und ihr eine Action gegeben. Die Action beinhaltet den Code (s. o.)
Natürlich ist es schöner, den Code auszulagern, in eine Codeunit, aber dazu hatte ich gerade nicht so die Lust ;p

Gruss

Re: Auswahl eines Satzes aus bestimmter Menge

14. Juli 2017 12:40

ich werde das mal testen; dauert aber noch etwas.

Re: Auswahl eines Satzes aus bestimmter Menge

14. Juli 2017 13:27

DasChamaeleon hat geschrieben:Vielleicht bekomme ich von dem ein oder anderen Experten ein klein wenig Feedback?
Gruss


bin kein Experte, mag aber trotzdem meinen Senf dazu geben :)

1.) Du machst immer ein hartes FIND (FINDFIRST,....)
Mach doch besser ein weiches daraus
Code:
IF xyz.FINDFIRST THEN BEGIN


2.) Ein Findfirst nutzt man in einer Repeat-Schleife nicht
--> eher FindSet oder Find('-')
--> gibt gute Beiträge zu FindXYZ -> Beispiel: https://mibuso.com/howtos/how-to-work-with-record-variables-version-2

3.) Nimm, wo es möglich ist, SETRANGE
Beispiel:
Code:
 
//CustLegdeEntryRecord.SETFILTER("Document Type",'Invoice'); <--- SETRANGE ist doch auch möglich :)
CustLegdeEntryRecord.SETRANGE("Document Type",CustLegdeEntryRecord."Document Type"::Invoice);


4.) Das versteh ich nicht:
Code:
OutputTable.SETRANGE("ReminderLevel",3);

REPEAT
  IF OutputTable.DELETE THEN
    ;
UNTIL OutputTable.NEXT = 0;


mach doch so:
Code:
Clear(OutPutTable)
OutputTable.SETRANGE("ReminderLevel",3);
IF NOT OutPutTable.ISEMPTY THEN
   OutputTable.DELETEALL


hab mir den Sinn & Zweck des Codes jetzt nicht wirklich angeschaut