Lieferschein mit Sets und Bildern

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Allgemeines

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


2 Ergebnis

So soll der Lieferschein aussehen:

LieferscheinSetsUndBilder 01Bsp.png

(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


3 Der Report dazu

LieferscheinSetsUndBilder 02Report.png


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.


4 Das Ereignis OnBeforePrint

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


LieferscheinSetsUndBilder 03Ereigniss.png


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.


5 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!

6 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
LieferscheinSetsUndBilder 04ArtStammBsp.png


REFLEX
LieferscheinSetsUndBilder 04ArtStammBspRx.png

7 Standard-Reports


8 Links