Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Fastreport 6 - Etikettendruck (https://www.delphipraxis.net/206103-fastreport-6-etikettendruck.html)

Doppelmeter 19. Nov 2020 12:17

Fastreport 6 - Etikettendruck
 
Liste der Anhänge anzeigen (Anzahl: 1)
In Fastreport sollen Etiketten gedruckt werden.

Die dazugehörigen Daten liegen als Dataset vor. Es kann eine beliebige Anzahl Datensätze vorliegen. In jedem Datensatz stehen neben den Etikettendaten auch die Anzahl der Etiketten, die jeweils gedruckt werden sollen.

Beispiel für Datensätze, die anliegen
Datensatz|Produkt|...|Anzahletiketten
1........|.......|...|2
2........|.......|...|5
3........|.......|...|4

Das Dataset wird aktviert und Satz für Satz ausgelesen. Bei jedem Durchlauf soll das Etikett mit <Anzahletiketten> gedruckt werden.

Doppelmeter 19. Nov 2020 12:34

AW: Fastreport 6 - Etikettendruck
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das angehängte Bild zeigt die bisherigen Versuche, die aber allesamt gescheitert sind. Es werden in dieser Version die doppelte Anzahl ausgedruckt.

Zur Erläuterung
Im ersten Masterdata wird die Gesamtzahl aller Datensätze addiert.
Zitat:

Select
sum(ceil(cast(ap.Bestellmenge as float) / cast(um.Karton_inhalt as float))) as Gesamtzahl
from printjobs PJ
left join AUFTRAGSKOPF ak on AK.ID = PJ.TAB_ID
left join Auftragsposi AP on AP.Auftrags_ID = AK.ID
left join Artikel art on art.ID = AP.artikel_ID
left join Umschliessungen um on um.ID = art.umschliessung_ID
where PJ.JOB_ID = :Job
Hier steht nur 1 Datensatz mit der Anzahl der Gesamtetiketten


Im zweiten Masterdata wird der gleiche SQL ausgeführt mit dem Unterschied, dass die Anzahl der

Zitat:

Select
ceil(cast(ap.Bestellmenge as float) / cast(um.Karton_inhalt as float)) as Anzahl
from printjobs PJ
left join AUFTRAGSKOPF ak on AK.ID = PJ.TAB_ID
left join Auftragsposi AP on AP.Auftrags_ID = AK.ID
left join Artikel art on art.ID = AP.artikel_ID
left join Umschliessungen um on um.ID = art.umschliessung_ID
where PJ.JOB_ID = :Job
Hier stehen die Anzahl der Etiketten pro Datensatz drin

Zitat:

Im Detaildata stehen dann die Daten für das Etikett drin.
Select
pj.Tab_ID,
Coalesce(ar.ANREDE, '') as Anrede ,
ak.name as NAME1,
ak.NAME2,
...
art.Bezeichnung,
AP.Bestellmenge,
UM.Karton_Inhalt,
ceil(cast(ap.Bestellmenge as float) / cast(um.Karton_inhalt as float)) as Kartonmenge
from printjobs PJ
left join AUFTRAGSKOPF ak on AK.ID = PJ.TAB_ID
left join Auftragsposi AP on AP.Auftrags_ID = AK.ID
left join ANREDEN ar on ak.anreden_ID = ar.ID
left join ANREDEN var on ak.versand_anreden_ID = var.ID
left join Artikel art on art.ID = AP.artikel_ID
left join Umschliessungen um on um.ID = art.umschliessung_ID
where PJ.JOB_ID = :Job
Im Code wird Folgendes abgehandelt

Zitat:

procedure frxReport1OnStartReport(Sender: TfrxComponent);
begin
Job := <printjob_id>;
//Job := 2694;
QuGesamtetiketten.Active := True;
Etikett.Visible := QuGesamtetiketten.FieldByName( 'Gesamtzahl' ).Asinteger > 0;
Etikett.PageCount := QuGesamtetiketten.FieldByName( 'Gesamtzahl' ).Asinteger;
QuAnzahlpositionen.Active := True;
QuEtikett.Active := True;
Karton := 1;
end;

procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
begin
MePalette.Text := 'Karton ' + IntToStr( Karton ) + ' von ' + QuGesamtetiketten.FieldByName( 'Gesamtzahl' ).AsString;
Karton := Karton + 1;

end;

begin

end.

Wer hat eine Idee, wie das funktionsfähig umgesetzt werden kann?

Bin dankbar für jede Anregung.:):):)

himitsu 19. Nov 2020 12:58

AW: Fastreport 6 - Etikettendruck
 
Ohne jetzt viel am FastReport rumfummeln zu müssen, kannst du auch einfach über einen JOIN für "alle" Labels je einen Datensatz bereitstellen.
Also wenn Anzahl=X, dann kommt dieser Datensatz eben x-Mal im DataSet vor.
(hier alles in einem DataSet hinteinander)



Oder via Master/Detail:
Ein Master-DataSet mit allen Datensätzen
und ein Detail-DataSet wo die entsprechende Anzahl an Datensätzen generiert wird (jeweilige Anzahl der Etiketten zum entsprechenden MasterData)
Ähnlich dem ersten Vorschlag: Über einen JOIN die nötogen Spalten des Masta-Datensatzes über einen "Generator" von "1 bis Anzahl" dupplizieren.

Doppelmeter 24. Nov 2020 09:07

AW: Fastreport 6 - Etikettendruck
 
Ok, das hat sich mittlerweile erledigt. Eine Lösung wurde gefunden.

Doppelmeter 24. Nov 2020 09:49

AW: Fastreport 6 - Etikettendruck
 
Liste der Anhänge anzeigen (Anzahl: 1)
Es gibt jetzt noch eine weitere Problematik.

Die Etiketten die gedruckt werden sollen, sollen auf einem Brother Drucker QL560 mit den Etiketten DK-11208 ausgedruckt werden. Diese haben das Format 38 x 90 mm.
Das Format im Report ist auf Hochformat, Breite 3,8 cm, Höhe 9 cm eingestellt.
Wird der Druck dann durchgeführt, kommt zwar am Drucker ein Auftrag an, der Druck wird aber aufgrund einem Formatfehler nicht ausgegeben und die rote Lampe blinkt.
Wird der druck in eine PDF-Datei umgeleitet, wird das Ergebnis dargestellt, wie wenn eine DinA4-Seite gedruckt worden wäre. Möglicherweise ist das aber nur die Darstellung des Adobe-Readers.

Der Anhang zeigt die Einstellungen.

Wer hat Erfahrung mit solchen Druckern/Etikettendrucks? und weiss Abhilfe.

Bin für jeden Tipp dankbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz