Daten per Report und C/AL Code löschen (CLCL)

1. April 2011 09:14

Hallo liebe und vorallem sehr hilfsbereite Community,

und zwar habe ich die Aufgabe bekommen, eine NAV Datenbank vom Classic Client zu verkleinern/komprimieren, indem alte Fibu-Daten gelöscht werden. Dies soll mit Hilfe des C/AL Codes geschehen.
Was soll gelöscht werden?
- Sachposten
- Artikelposten
- Bankposten
- Kreditor- und Debitorposten + detaillierte Kreditor- und Debitorposten
- Wertposten
- Postendimensionen

Das ganze mache ich mit Hilfe eines Reports. Das ganze sieht bisher so aus:
Code:
Report - OnPostReport

"g_G/LEntry".RESET;
IF "g_G/LEntry".FINDSET THEN BEGIN
  REPEAT
    LoescheDebitorenposten("g_G/LEntry"."Transaction No.");
    LoescheKreditorenposten("g_G/LEntry"."Transaction No.");
    LoescheBankposten("g_G/LEntry"."Transaction No.");
    LoescheArtikelposten("g_G/LEntry"."Entry No.");
  UNTIL "g_G/LEntry".NEXT = 0;
END;


Und hier ein Beispiel für das löschen von Debitorposten:
Code:
LoescheDebitorenposten("Transnr." : Integer)

g_CustLedgerEntry.RESET;
g_CustLedgerEntry.SETRANGE("Transaction No.", "Transnr.");
g_CustLedgerEntry.SETRANGE(Open, FALSE);
IF g_CustLedgerEntry.FINDSET THEN BEGIN
  REPEAT
    l_DetCustLedgerEntry.RESET;
    l_DetCustLedgerEntry.SETRANGE("Cust. Ledger Entry No.", g_CustLedgerEntry."Entry No.");
    IF l_DetCustLedgerEntry.FINDSET THEN BEGIN
      REPEAT
        l_DetCustLedgerEntry.DELETE;
      UNTIL l_DetCustLedgerEntry.NEXT = 0;
    END;

    l_PostenDim.RESET;
    l_PostenDim.SETRANGE(l_PostenDim."Table ID", 21);
    l_PostenDim.SETRANGE("Entry No.", g_CustLedgerEntry."Entry No.");
    IF l_PostenDim.FINDSET THEN BEGIN
      REPEAT
        l_PostenDim.DELETE;
      UNTIL l_PostenDim.NEXT = 0;
    END;

    l_PostenDim.RESET;
    l_PostenDim.SETRANGE(l_PostenDim."Table ID", 17);
    l_PostenDim.SETRANGE("Entry No.", "g_G/LEntry"."Entry No.");
    IF l_PostenDim.FINDSET THEN BEGIN
      REPEAT
        l_PostenDim.DELETE;
      UNTIL l_PostenDim.NEXT = 0;
    END;

    g_CustLedgerEntry.DELETE;
  UNTIL g_CustLedgerEntry.NEXT = 0;
END;


die anderen Funktionen sehen fast genauso aus.
Bisher funktioniert alles super (Daten werden gelöscht, die die gleiche Transaktionsnr. aufweisen). Wie kann ich aber nun die Sachposten löschen?
Hab schon das ausprobiert: (so werden aber ALLE Sachposten gelöscht)
Code:
...
..
..
    LoescheArtikelposten("g_G/LEntry"."Entry No.");
      "g_G/LEntry".delete;  // so werden alle Posten gelöscht
  UNTIL "g_G/LEntry".NEXT = 0;
END;


Habt ihr ne Idee wie der Code aussehen muss, damit die Sachposten gelöscht werden, hinter denen die Debitorenposten usw. anhang der Transaktionsnr. hinterlegt sind? Ich bin für jede Hilfe dankbar

Lieben Gruß
Zuletzt geändert von okidoki am 19. April 2011 11:06, insgesamt 2-mal geändert.

Re: Daten per Report und C/AL Code löschen

1. April 2011 09:41

okidoki hat geschrieben:Was soll gelöscht werden?
- FiBu Daten
- Alle warenwirtschaftlichen Daten
---> z.B. Artikelposten, Wertposten

Wollt ihr das in Livedatenbanken machen? Wenn ja, braucht ihr mindestens eine rechtliche Beratung, wahrscheinlich aber auch eine technische Beratung.

Code:
IF DeleteData = TRUE THEN BEGIN

DeleteData ist doch bereits ein Boolean, also warum dann noch mal auf TRUE abfragen?!

Re: Daten per Report und C/AL Code löschen

1. April 2011 09:51

Hallo,

!!!!!!Posten werden in NAV nie-, nie-, niemals gelöscht!!!!!!

Das einzige was man machen könnte, sind die evtl. vorhandenen Komprimierungsprogramme unter "Verwaltung\IT-Verwaltung\Daten löschen\Datumskomprimierung" zu benutzen. Aber selbst bei diesen Programmen ist das ganze mit äußerster Vorsicht anzuwenden.

Hintergrund: Alle Bewegungswerte in NAV werden aus der Summe der Posten zur Laufzeit gebildet. D.h. wenn du Posten einfach löschst, fehlen Bewegungsdaten, und die Summen stimmen nicht mehr=> Alle Salden der betroffenen Sachkonten sind danach falsch (Sachposten), die Lagerbestände stimmen nicht mehr (Artikelposten), und die Lagerwerte kannst du auch vergessen(Wertposten).

Merke: Der Posten mit der Lfd. Nummer 1 ist in NAV genauso wichtig, wie der Posten mit der Lfd. Nr. 1000000

Zur Datumskomprimierung: Wenn du z.B. Artikelposten komprimierst und ihr mehrere Lagerorte habt, und du bei der Komprimierung vergisst, den Lagerort zu erhalten, dann kannst du auch deine Lagerbestände vergessen. Durch die Komprimierung gehen Informationen verloren, und man muss sich sehr genau überlegen, was man wie komprimiert.

Gruß, Fiddi

Re: Daten per Report und C/AL Code löschen

1. April 2011 10:22

mhh okay... danke erstmal :)

ich werde wohl jetzt mit meinem Chef sprechen, vielleicht wird er mit der Aufgabenstellung noch etwas konkreter...

Re: [Gelöst] Daten per Report und C/AL Code löschen

1. April 2011 10:25

Hallo,

die Aufgabe hast du doch wohl nicht heute bekommen, oder !? :mrgreen:

Gruß, Fiddi

Re: [Gelöst] Daten per Report und C/AL Code löschen

1. April 2011 12:51

Wird das wohl ein April-Scherz sein? :mrgreen:

Re: Daten per Report und C/AL Code löschen (CLCL)

19. April 2011 11:09

hab die Aufgabe nochmal aktualisiert (siehe Anfang).

Danke für die Hilfe.

Re: Daten per Report und C/AL Code löschen (CLCL)

19. April 2011 11:30

Hallo,

meine Aussage vom 1.April war durchaus ernst gemeint.

Es dürfen in NAV nicht einfach Posten gelöscht werden. Es werden sonst die Daten zerstört.

Wenn du schon Daten komprimieren möchtest, dann benutze die fertigen Reports unter "Verwaltung\IT-Verwaltung\Daten löschen\Datumskomprimierung".

Diese Reports löschen nicht nur Daten, sondern schreiben gleichzeitig neue Daten.

Diese Reports sind mit äußerster Vorsicht, und nur nach Datensicherung und ausführlichem Test in einer Test- DB zu benutzen.

Gruß, Fiddi

Re: Daten per Report und C/AL Code löschen (CLCL)

19. April 2011 11:36

fiddi hat geschrieben:Diese Reports sind mit äußerster Vorsicht, und nur nach Datensicherung und ausführlichem Test in einer Test- DB zu benutzen.

und seinen Wirtschaftsprüfer sollte man auch noch fragen, ob und/oder ab welchem Datum der Posten das für ihn ok ist, da die einzelnen Posten aus den komprimierten nicht wieder herzustellen sind :roll:

Re: Daten per Report und C/AL Code löschen (CLCL)

19. April 2011 11:43

mhh ja die Warnung habe ich auch ernst genommen, aber es handelt sich um eine Standard DB wo ich die Aufgabe bekomme habe, solche Daten zu löschen.

Re: Daten per Report und C/AL Code löschen (CLCL)

19. April 2011 11:53

mhh ja die Warnung habe ich auch ernst genommen, aber es handelt sich um eine Standard DB wo ich die Aufgabe bekomme habe, solche Daten zu löschen.


Das ist sch... Egal in NAV werden keine Posten gelöscht, wenn man nicht den ganzen Mandanten platt machen möchte, und damit Basta.

Bevor du mit so einer Sache anfängst, versuche erst einmal das Postenprinzip und die Flowfields in NAV zu verstehen. Danach wirst du wahrscheinlich verstehen, warum das nicht so einfach geht. :twisted:

Gruß, Fiddi

Re: Daten per Report und C/AL Code löschen (CLCL)

20. April 2011 09:19

Fiddi kann es eigentlich auch noch größer und unterstrichen schreiben. Das ist eines der obersten heiligen Gebote. Posten löschen ist nicht.

Wie groß sind denn die Tabellen? Speicherplatz ist heutzutage immer noch recht günstig, sofern man nicht meint nen SSD-Server aufzusetzen.
Speicherplatz als Begründung für Postenkomprimierung zu benutzen ist einfach mal an der falsche Stelle Kosten sparen.

Wenn Du sowas als Auftrag mit Kündigungsandrohung bekommst, mache ein ganz genaues Konzept, schreibe die Auswirkung, welche fiddi beschrieben hat rein, und lass nach einer FiBu-/Rechtsberatung dies vom Chef abzeichnen.
Andernfalls wirst Du nicht mehr ruhig schlafen können.