SQL-Anweisung / script zum Neuspeichern von Artikeln/Dienstleistungen mit neuer Artikelnummer und neuer Buchungsgruppe

Von Reinhard Kalchmair vor mehr als 1 Jahr hinzugefügt

Hallo zusammen !

Nachdem ich mit SQL Anweisungen nicht so fit bin bräuchte ich etwas Hilfestellung
Ich möchte hier mehrere Buchungsgruppen verwenden um die verschiedenen Unternehmensbereiche in Bezug auf die Erlöskonten zu trennen, dazu muss ich ja bestehende Artikel oder Dienstleistungen, die bereits einmal in Verwendung waren mit einer neuen Artikelnummer speichern, erst dann kann ich die Buchungsgruppe ändern
Ich bräuchte jetzt, falls das möglich ist, eine SQL Anweisung, ein makro oder ähnlich, daß mir z.B. sämtliche Dienstleistungen deren Artikelnummer mit WARTxxxx beginnt neu speichert unter der Artikelnummer WARTRWAxxxx mit der Buchungsgruppe ID 381365 speichert sowie die "alten" Dienstleistungen / Artikeln als ungültig erklärt

Hat da wer eine Idee ? Ich hab hier rund 2300 aktive Artikel sowie rund 3060 Dienstleistungen

Danke
Reinhard


Antworten (1)

RE: SQL-Anweisung / script zum Neuspeichern von Artikeln/Dienstleistungen mit neuer Artikelnummer und neuer Buchungsgruppe - Von G. Richardson vor mehr als 1 Jahr hinzugefügt

Der Hauptgrund, warum das nachträgliche Ändern der Buchungsgruppen von bereits verwendeten Artikeln nicht erlaubt ist, ist daß bei einem Storno von Rechnungen mit diesen Artikeln dann die ursprünglichen Buchungen nicht umgekehrt werden, sondern das neue Erlös/Aufwandskonto bebucht wird. Wenn man sich sicher ist, daß das nicht mehr vorkommen wird, und man eh schon direkt an die Datenbank geht, könnte man die auch direkt ändern.

Für Massenänderungen, die nicht performancekritisch sind, nutze ich mittlerweile gerne das console Skript statt direkter SQL Befehle, wenn es sich nicht um einfache Updates handelt, wie z.B. alle Artikel auf ungültig setzen. Dann kann man alles mit Perl und Rose kontrollieren, und wenn man zufrieden ist auch ein Upgradeskript daraus machen.

Ich habe mal ein grobes Beispiel skizziert wie man das machen könnte, das ist aber völlig ungetestet und setzt etwas Wissen von Rose und der console voraus.

my $bg = SL::DB::Manager::Buchungsgruppe->find_by( description => 'NAME DER NEUEN BUCHUNGSGRUPPE' );
my $parts = SL::DB::Manager::Part->get_all( where => [ partnumber => { like => 'WART%' } ] );
foreach my $part ( @{ $parts } ) {
  my $newpart = Rose::DB::Object::Helpers::clone_and_reset( $part );
  my ($pre,$post) = $part->partnumber =~ /^(WART)(.*)$/;
  $newpart->partnumber( $pre . "RWA" . $post );
  $newpart->buchungsgruppen_id( $bg->id );
  $newpart->save;
  $part->obsolete(1);
  $part->save(changes_only => 1);
}

Ein Nachteil von solchen Massenänderungen ist allerdings, daß diese nicht in der Historie der Artikel auftauchen.

(1-1/1)