[Gelöst] Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 14:55

Hallo zusammen,

Ich hoffe ich kann mein Problem einigermaßen deutlich schildern, es ist nämlich nicht ganz ohne... :-D
Beim Schreiben von Daten in die Tabelle A merke ich mir beim Durchlaufen des OnInsertTriggers in einer Nebentabelle B 3 Felder der Tabelle A.
Ziel ist in der Tabelle B für jede vorkommende Datengruppe (Gruppe 1, Gruppe 2, usw.) einen Satz anzulegen. Die Daten kommen aber nicht in Reihenfolge rein, sondern in der Form
Import | Ist | Ziel
Gruppe 1 | Gruppe 1 | Gruppe1
Gruppe 1
Gruppe 1
Gruppe 2 | Gruppe 2 | Gruppe 2
Gruppe 2
Gruppe 3 | Gruppe 3 | Gruppe 3
Gruppe 1 | | Gruppe 1
Gruppe 3 | |Gruppe 3
Gruppe 2 | |Gruppe 2
...
(Die Aufstellung ist etwas wüst, aber ich hoffe sie macht deutlich worauf ich hinaus will...)
Ich schreibe mir die 3 Felder die ich gerade bearbeite in eine SingleInstanceCodeunit um den Gruppenwechsel im OnInsertTrigger realisieren zu können.
Allerdings werden mir die Daten in Tabelle B wie im Fall IST geschrieben, ich brauche sie aber in der Form SOLL.
Den Import möchte ich eigtl. nicht anpassen müssen, da es zuviel Aufwand bedeutet...

Habt ihr eine Idee wie ich die Sortierung realisieren kann (Angenommen Import und Dateiaufbau ist fix)?

Viele Grüße
Herdi
Zuletzt geändert von Herdi am 20. Juli 2010 08:01, insgesamt 1-mal geändert.

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 15:08

Hallo Herdi,

ich denke du musst die Daten nicht sotieren. 8-)

Füge doch in deine Nebentabelle die Daten einfach mit
Code:
IF Nebentabelle.INSERT then;

ein.
Dann musst du dich dann um keine Sortierung oder mit einer Single Instace Codeunit rumschlagen. Wenn der Datensatz schon existiert, wird er ohne Fehler ignoriert, ist er nicht vorhanden, wird er eingefügt.
Ich hoffe ich habe dein Problem richtig verstanden, und das ist die richtige Lösung.

Gruß, Fiddi

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 15:10

Herdi hat geschrieben:Ziel ist in der Tabelle B für jede vorkommende Datengruppe (Gruppe 1, Gruppe 2, usw.) einen Satz anzulegen.

Habe ich nicht verstanden - kannst du ein Beispiel geben?

Und ist deine Aufstellung unten so gemeint?


ImportIstZiel
Gruppe 1Gruppe 1Gruppe1
Gruppe 1
Gruppe 1
Gruppe 2Gruppe 2Gruppe 2
Gruppe 2
Gruppe 3Gruppe 3Gruppe 3
Gruppe 1Gruppe 1
Gruppe 3Gruppe 3
Gruppe 2Gruppe 2


Hab ich leider auch nicht verstanden :oops:

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 15:41

@fiddi: Leider klappt das nicht so einfach, habe es schon so ausprobiert...
Code:
    ParamVerw.HoleCode(SatzArtCodeVar);
    ParamVerw.HoleSatzArtTyp(SatzArtTypVar);
    IF (Satzartencode <> SatzArtCodeVar) OR (Satzartentyp <> SatzArtTypVar) THEN BEGIN
      ParamVerw.SetzeCode(Satzartencode);
      ParamVerw.SetzeSatzArtTyp(Satzartentyp);
      BelegStapelEingelesen.INIT;
      BelegStapelEingelesen.Satzartencode := Satzartencode;
      BelegStapelEingelesen.Satzartentyp := Satzartentyp;
      BelegStapelEingelesen."Belege/BuBlätter autom. erst." := SatzArtTyp."Autom. Belege/Stapel erstellen";
      BelegStapelEingelesen."autom. buchen" := SatzArtTyp."Erst. Belege/Stapel Autobuchen";
      BelegStapelEingelesen."autom. Bericht als PDF" := SatzArtTyp."Erst. Belege/Stapel Autodruck";
//      BelegStapelEingelesen.INSERT(TRUE);
      IF BelegStapelEingelesen.INSERT(TRUE) THEN BEGIN
        "Lfd. Nr. Beleg eingelesen" := BelegStapelEingelesen."Lfd. Nummer";
        ParamVerw.SetzeInteger(BelegStapelEingelesen."Lfd. Nummer");
    END ELSE ParamVerw.HoleInteger("Lfd. Nr. Beleg eingelesen");


@Natalie:
Natalie hat geschrieben:
Herdi hat geschrieben:Ziel ist in der Tabelle B für jede vorkommende Datengruppe (Gruppe 1, Gruppe 2, usw.) einen Satz anzulegen.

Habe ich nicht verstanden - kannst du ein Beispiel geben?


Ich bekomme Daten aus unseren Filialen die nicht sortiert sind. Diese stellen die Grundlage für die Rechnugslegung an die Filialen dar, da sie Dienstleistungen der Zentrale in Anspruch genommen haben. Die Daten in kommen in folgender Form herein:








TypArt
1Auszug
1Auszug
2Druck
2Druck
1Auszug
3Test
3Test


Nun soll in Tabelle B für jeden Typ ein neuer Satz angelegt werden. Kommt dieser Typ ein 2tes Mal vor, soll kein neuer Satz in Tabelle B geschrieben werden sondern die laufende Nr des Eintrages aus Tabelle B geholt werden.

Die Aufstellung war so gemeint:

ImportIstZiel
Gruppe 1Gruppe 1Gruppe1
Gruppe 1
Gruppe 1
Gruppe 2Gruppe 2Gruppe 2
Gruppe 2
Gruppe 3Gruppe 3Gruppe 3
Gruppe 1Gruppe 1
Gruppe 3Gruppe 3
Gruppe 2Gruppe 2


Ist alles etwas schwer zu beschreiben... Tut mir Leid! :-(

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 15:50

Herdi hat geschrieben:@fiddi: Leider klappt das nicht so einfach, habe es schon so ausprobiert...

Was genau hat daran nicht geklappt?

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 15:55

Navision schreibt immernoch für jede Gruppe einen neuen Satz in Tabelle B.

Das wird aber daran liegen, dass der Primary Key ein AutoIncrement ist und somit kein 2ter gleicher Satz angelegt wird.
Kann das sein??

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 16:03

Das ist Korrekt. Ich vergaß zu erwähnen, das der Primärschlüssel deiner Tabelle B die Felder enthalten muss, die nur einmal vorkommen dürfen.

Gruß, Fiddi

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 16:05

Herdi hat geschrieben:Beim Schreiben von Daten in die Tabelle A merke ich mir beim Durchlaufen des OnInsertTriggers in einer Nebentabelle B 3 Felder der Tabelle A.

Die 3 Felder bilden in Tabelle B nicht den Primärschlüssel, richtig?
Dann sollte es so funktionieren:

Angenommen, Tabelle B besteht aus Feldern 1-4, Feld 1 (Lfd. Nr.) bildet den Primärschlüssel.
Es werden übergeben:
Feld 2: Wert 'A'
Feld 3: Wert 'B'
Feld 4: Wert 'C'

Code:
TabB.SETRANGE(Feld2, 'A');
TabB.SETRANGE(Feld3, 'B');
TabB.SETRANGE(Feld4, 'C');
IF TabB.ISEMPTY THEN BEGIN
  TabB.INIT;
  TabB.Feld1 := NeuerInteger;
  TabB.Feld2 := 'A';
  TabB.Feld3 := 'B';
  TabB.Feld4 := 'C';
END;

Re: Sortieren während des Schreiben im OnInsertTrigger

19. Juli 2010 16:05

fiddi hat geschrieben:Das ist Korrekt. Ich vergaß zu erwähnen, das der Primärschlüssel deiner Tabelle B die Felder enthalten muss, die nur einmal vorkommen dürfen.


Ich probiers jetzt nochmal indem ich die Nebentabelle umbaue und einen passenden Primärschlüssel anlege, das sollte dann mein Problem beheben! :idea:

Edit:

Also Tabelle umbauen funktioniert.
Allerdings kann ich leider keinen passenden Schlüssel anlegen, der zu meiner Anforderung passt. Habe mich jetzt dazu durchgerungen den zugehörigen Satz aus der Nebentabelle zu holen:
Code:
      BelegStapelEingelesen.SETRANGE(Satzartencode,Satzartencode);
      BelegStapelEingelesen.SETRANGE(Satzartentyp,Satzartentyp);
      IF NOT BelegStapelEingelesen.FINDLAST THEN BEGIN
        BelegStapelEingelesen.INIT;
        BelegStapelEingelesen.Satzartencode := Satzartencode;
        BelegStapelEingelesen.Satzartentyp := Satzartentyp;
        BelegStapelEingelesen."Belege/BuBlätter autom. erst." := SatzArtTyp."Autom. Belege/Stapel erstellen";
        BelegStapelEingelesen."autom. buchen" := SatzArtTyp."Erst. Belege/Stapel Autobuchen";
        BelegStapelEingelesen."autom. Bericht als PDF" := SatzArtTyp."Erst. Belege/Stapel Autodruck";
        BelegStapelEingelesen.INSERT(TRUE);


Danke für eure Tipps!