Lieferschein mit Sets und Bildern

Aus GEVITAS
Zur Navigation springen Zur Suche springen

Allgemeines

Hier wird die Verwendung eines Reports für einen Lieferschein beschrieben, der Sets besonders hervorheben soll und Artikel-Bilder anzeigt.


Ergebnis

So soll der Lieferschein aussehen:

(1) Position mit dem Set-Häuptling in Fettschrift

(2) Position mit den Set-Positionen eingerückt nicht fett

(3) Position ohne Set nicht eingerückt, nicht fett

(4) Artikel-Bilder


Der Report dazu


Beschreibung der Bänder (Bereiche):

MasterData1
Kopf des Lieferscheins mit Lieferschein- und Auftragsdaten, wie Empfänger, Produktion (Veranstaltung) und die Überschrift für die Postionen.
DetailData1
Positionen des Lieferscheins mit Positionsnummer, Menge, Bezeichnung und Inventar-Nummer.
Per Code (s.u.) wird dieses Band ausgeschaltet, wenn es sich um eine Set-Unterposition handelt. In diesem Fall wird das Child-Band "ChildDetailSetpos" eingeschaltet, das sonst unsichtbar ist.
ChildDetailSetpos
Wenn die Position eine Set-Unterposition ist, wird hier eingerückt Positionsnummer, Menge, Bezeichnung und Inventar-Nummer ausgegeben.
Per Code (s.u.) wird dieses Band ausgeschaltet, wenn es sich um eine "normale" Position handelt. In diesem Fall wird das Band "DetailData1" eingeschaltet.
SubdetailData1
Hier wird ein Artikel-Bild angezeigt, wenn es ein Bild bei dem Artikel gibt.
Per Code (s.u.) wird dieses Band nur dann eingeschaltet, wenn es ein Bild zu dem Artikel gibt.


Das Ereignis OnBeforePrint

Damit der Report die gewünschten Bänder ein- bzw. ausschalten kann, wird dieses Ereignis verwendet:



Es wird ausgelöst, bevor das Detail-Band gedruckt (also auch angezeigt, exportiert usw.) wird. Somit kann man per Code reagieren, um die gewünschten Effekte zu erreichen.


Der Code dazu

Mit diesem Code wird das Ein- und Ausblenden der Bänder gesteuert:


procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
begin
 // Erst mal Grundstellung für alles, was unten verändert werden kann:                                                                                                                                                            
 DetailData1.Visible := True;
 ChildDetailSetPos.Visible := False;
 memoLieferscheinPositionenBezeichnung.Font.Style := 0;
 // Besonderheiten bei Set's:
 if <AuftrPosZuLieferschPos."SetNr"> > 0 then
 begin
   // Position kommt aus einem Set! Schrift in Fett:                                     
   if StrToInt( <AuftrPosZuLieferschPos."SetNrHauptArtikel"> ) > 0 then
   begin
     // Es ist der Hauptartikel des Set's:
     memoLieferscheinPositionenBezeichnung.Font.Style := fsBold; // Fett                  
   end
   else
   begin
     // Es ist NICHT der Hauptartikel des Set's:
     DetailData1.Visible := False;       // Das eigentliche Detail-Band ausschalten. Dazu Option "Child drucken wenn unsichtbar!" einschalten!                                                                                                                                                                                                                                      
     ChildDetailSetPos.Visible := True;  // Das Child-Band mit den Einrückungen einschalten.                                                                                                                
   end;
 end;
end;


Die Kommentare hinter "//" sollten eigentlich alles erklären!

Wichtig 1
Dataset im Report
  • Das Dataset (die Tabelle) "AuftrPosZuLieferschPos" muss im Report aktiviert sein!
Das geht über das Menü "Report ⇒ Daten"
Dort dann das Häkchen bei "AuftrPosZuLieferschPos" setzen.
  • Wenn "AuftrPosZuLieferschPos" nicht in der Liste steht:
  • Report-Vorschau einmal starten.
  • Dann steht das Dataset in der Liste.
Wichtig 2
Sortierung
  • Damit die Positionen in der richtigen Reihenfolge stehen, muss die Sortierung im Druckfenster auf "Lieferschein-Positionen" stehen!
  • Wenn dort z.B. "Artikelgruppen" ausgewählt wurde, stehen die Positionen der Sets in der falschen Reihenfolge und werden scheinbar willkürlich eingerückt!

Die Bilder

Auf dem Band liegt eine Image-Komponente auf einem Band, das mit diesem Code bei dem Ereignis "OnBeforePrint" versehen ist:


procedure SubdetailData1OnBeforePrint(Sender: TfrxComponent);
begin
 if <ArtikelBild."DateiName"> >  then
 begin
   if ( Pos( '.JPG',Uppercase(<ArtikelBild."DateiName">) ) > 0 )
   or ( Pos( '.JPEG',Uppercase(<ArtikelBild."DateiName">) ) > 0 )
   or ( Pos( '.PNG',Uppercase(<ArtikelBild."DateiName">) ) > 0 )
   or ( Pos( '.BMP',Uppercase(<ArtikelBild."DateiName">) ) > 0 )
   or ( Pos( '.WMF',Uppercase(<ArtikelBild."DateiName">) ) > 0 )
   or ( Pos( '.EMF',Uppercase(<ArtikelBild."DateiName">) ) > 0 )
   or ( Pos( '.ICO',Uppercase(<ArtikelBild."DateiName">) ) > 0 ) then
      PictureArtikel.Picture.LoadFromFile( trim(<ArtikelBild."Pfadname">) + trim(<ArtikelBild."Dateiname">) )
   else
     PictureArtikel.Picture := Nil;
 end
 else
   PictureArtikel.Picture := Nil;
end;


if ( Pos( '.JPG',Uppercase(<ArtikelBild."DateiName">) ) > 0 )
"Pos" ist eine eingebaute Funktion, die in einem String (Text) nach einem anderen String sucht.
Wenn "Pos" größer als 0 ist, wurde der String gefunden!
Uppercase()
wandelt den String in Großbuchstaben um.
Da die Datei-Erweiterungen im Code (".JPG" usw.) in Großbuchstaben angegeben sind, ist es unerheblich, ob die Dateinamen in Groß- oder Kleinbuchstaben stehen.
Wozu das Ganze?
Dieser Code soll sicherstellen, dass nur Datei-Typen in die Picture-Komponente geladen werden, diese diese auch anzeigen kann. Ist z.B. eine PDF-Datei hinterlegt, kann diese nicht als Bild angezeigt werden!
Hinweis
Ein Bild-Verweis in den Artikelstammdaten wird hier nur verwendet, wenn die Option (Datenbank-Feld "MArtBild.BildKennz") eingeschaltet ist!


GEVAS-Professional


REFLEX

Standard-Reports