Lieferschein mit Sets und Bildern: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Das Ereignis OnBeforePrint)
(Der Code dazu)
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 41: Zeile 41:
 
:Hier wird ein Artikel-Bild angezeigt, wenn es ein Bild bei dem Artikel gibt.
 
: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.
 
:Per Code (s.u.) wird dieses Band nur dann eingeschaltet, wenn es ein Bild zu dem Artikel gibt.
 +
  
 
== Das Ereignis OnBeforePrint ==
 
== Das Ereignis OnBeforePrint ==
  
 
Damit der Report die gewünschten Bänder ein- bzw. ausschalten kann, wird dieses Ereignis verwendet:
 
Damit der Report die gewünschten Bänder ein- bzw. ausschalten kann, wird dieses Ereignis verwendet:
 +
 +
  
 
[[Datei:LieferscheinSetsUndBilder_03Ereigniss.png]]
 
[[Datei:LieferscheinSetsUndBilder_03Ereigniss.png]]
 +
 +
  
 
Es wird ausgelöst, '''bevor''' das Detail-Band gedruckt (also auch angezeigt, exportiert usw.) wird.
 
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.
 
Somit kann man per Code reagieren, um die gewünschten Effekte zu erreichen.
 +
 +
  
 
== Der Code dazu ==
 
== Der Code dazu ==
  
 +
Mit diesem Code wird das Ein- und Ausblenden der Bänder gesteuert:
  
  
Zeile 81: Zeile 89:
 
  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 ==
 
== Die Bilder ==
  
Auf dem Band liegt eine Image-Komponente, die mit diesem Code versehen ist:
+
Auf dem Band liegt eine Image-Komponente auf einem Band, das mit diesem Code bei dem Ereignis "OnBeforePrint" versehen ist:
 +
 
  
  
Zeile 105: Zeile 128:
 
     PictureArtikel.Picture := Nil;
 
     PictureArtikel.Picture := Nil;
 
  end;
 
  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]]
 +
:[[Datei:LieferscheinSetsUndBilder_04ArtStammBsp.png]]
 +
 +
 +
;[[REFLEX]]
 +
:[[Datei:LieferscheinSetsUndBilder_04ArtStammBspRx.png]]
  
 
== Standard-Reports ==
 
== Standard-Reports ==

Aktuelle Version vom 25. November 2020, 11:20 Uhr

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