#!/opt/bin/perl -U use pal; package pal; # Setze das Gefahrgutkennzeichen auf "J" oder ""(nix) #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # Setzen globale Variablen #------------------------------------------------------------------------------ $AB1000_DA = $ENV{ 'AB1000_DA' }; $AB1000_DA || die "Shellvariable AB1000_DA nicht gesetzt\n"; $AB1000_ALL = $ENV{ 'AB1000_ALL' }; $AB1000_ALL || die "Shellvariable AB1000_ALL nicht gesetzt\n"; $LOGNAME = $ENV{ 'LOGNAME' }; # Login-Name, Sachbearbeiter $BASIS_DA = $ENV{'BASIS'}; $ENV{'PAKET'} = ab1000; $FIRMAKURZ = $ENV{ 'FIRMAKURZ' }; $PARAMETER{'LOG_SACHB'} = 0; dbopen(ART,"artikel") || msk_message ("Die Datei artikel kann nicht geöffnet werden",2); if ($FIRMAKURZ eq "TECHNO_001") { $haupt = 771811; $ABSPFAD = "$BASIS_DA/ab1000/daten/IWETEC_001/"; $abslief = 772901; } if ($FIRMAKURZ eq "IWETEC_001") { $haupt = 772901; $ABSPFAD = "$BASIS_DA/ab1000/daten/TECHNO_001/"; $abslief = 771811; } hole_artikel_verechpreis(); setze_abs_daten(); # --------------------------------------------------------------------------- # Schliesse die Dateien wieder # --------------------------------------------------------------------------- dbflush(ART); dbclose(ART); exit(0); # --------------------------------------------------------------------------- # Subroutinen # --------------------------------------------------------------------------- sub hole_artikel_verechpreis { %artverpr = (); dbunselect( ART); dbinitrec(ART); dbselinit( ART); dbselect(ART,'art_hauptlief','==',$haupt); for ($status = dbfind(ART); $status; $status = dbnext(ART)) { next if ($art_sperrkz == 4 || $art_sperrkz == 5 || $art_sperrkz == 6); if ($FIRMAKURZ eq "IWETEC_001") { $artverpr{$art_nr} = $art_vkpreis_017; } elsif ($FIRMAKURZ eq "TECHNO_001") { $artverpr{$art_nr} = $art_vkpreis_016; } } # Ende for } # Ende setze_artikel sub setze_abs_daten { # Nach dem Füllen von %artverpr: Erzeuge ABS-Ausgabedatei und protokolliere my $outfile = "$ABSPFAD/verechnugs_preis2ABS_${FIRMAKURZ}.txt"; my $logfile = "/tmp/verechnugs_preis2ABS_${FIRMAKURZ}.log"; if (!-d $ABSPFAD) { warn "Zielverzeichnis $ABSPFAD existiert nicht, versuche anzulegen...\n"; mkdir $ABSPFAD or warn "Konnte $ABSPFAD nicht anlegen: $!\n"; } open(my $outfh, '>', $outfile) or die "Kann Ausgabedatei $outfile nicht schreiben: $!\n"; open(my $logfh, '>>', $logfile) or warn "Kann Logdatei $logfile nicht öffnen: $!\n"; print $outfh "# ArtNr;Preis;Lieferant;Datum\n"; print $logfh "Start: " . scalar(localtime) . " - Firma: $FIRMAKURZ Haupt: $haupt Lieferant: $abslief\n" if $logfh; for my $art_nr (sort keys %artverpr) { my $preis = $artverpr{$art_nr} // 0; # Fallback für undef next unless $preis; # nur Preise > 0 übertragen my $preis_form = sprintf("%.2f", $preis); my $line = "$art_nr;$preis_form;$abslief;" . scalar(localtime) . "\n"; print $outfh $line; print $logfh "W -> $line" if $logfh; } print $logfh "Fertig: " . scalar(localtime) . " Ausgabedatei: $outfile\n" if $logfh; close $outfh; close $logfh if $logfh; # Optional: bestehende ABS-Datenbank prüfen und Informationen ausgeben (falls vorhanden) if (eval { dbopen(ABS,"$ABSPFAD/artbestelldat"); 1 }) { for my $art_nr (sort keys %artverpr) { my $preis = $artverpr{$art_nr} // 0; dbinitrec(ABS); dbselinit(ABS); dbselect( ABS, 'abs_lieferant', '==', "$abslief"); dbselect( ABS, 'abs_liefartnr', '==', "$art_nr"); for ($status = dbfind(ABS); $status; $status = dbnext(ABS)) { print ("Lieferartnr: $abs_liefartnr Lieferant: $abs_lieferant Bestellek: $abs_ek NeuerPreis: $preis \n"); } } dbclose(ABS); } else { warn "Keine ABS-Datenbank $ABSPFAD/artbestelldat zum Nachprüfen geöffnet.\n"; } }