REFLEX Angebot/Auftrag Styles Code: Unterschied zwischen den Versionen
(→Code) |
(→Code) |
||
Zeile 5: | Zeile 5: | ||
== Code == | == Code == | ||
+ | Der Code ist die Blöcke Kopf, Positionen und Fuss eingeteilt. Technisch gesehen ist das nicht notwendig, die Prozeduren könnten stehen wo sie wollen. Es erhöht aber die Übersichtlichkeit. | ||
+ | Auf den ersten Blick wirkt das erschreckend viel. Allerdings wiederholen sich die Befehle immer wieder, weil es in der Hauptsache darum geht: | ||
+ | |||
+ | * Bereiche (Bänder) oder Felder ein- oder auszublenden | ||
+ | * Felder (Memos, Textfelder) mit Inhalten zu füllen. | ||
+ | |||
+ | === Kopf === | ||
+ | |||
+ | Diese Prozedur wird aufgerufen, bevor der oberste Bereich (also das oberste Band) des Reports gedruckt wird. | ||
+ | |||
+ | Hier werden generelle Einstellungen des Reports gemacht: | ||
+ | |||
+ | * Das Memo-Feld (Text-Feld) für die Anschrift wird gefüllt. Hier werden also die Anschriften-Felder nicht direkt auf dem Report platziert, sondern es gibt ein Memo <code>memoAnschrift</code>, in das die Zeilen (Lines) angefügt werden. Das hat den Vorteil, dass z.B. das Ansprechpartner-Feld keine Leerzeile verursacht, wenn es gar keinen Ansprechpartner gibt. | ||
+ | |||
+ | * Abhängig von den [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen]] werden Bänder ein- oder ausgeblendet. | ||
+ | |||
+ | |||
+ | // Kopf: | ||
procedure MasterDataAnschriftOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataAnschriftOnBeforePrint(Sender: TfrxComponent); | ||
Zeile 56: | Zeile 74: | ||
end; | end; | ||
+ | |||
+ | Diese Prozedur kommt aus dem Basis-Report, das zeigt das Wort <code>_inherited</code> ("geerbt"). Abhängig vom [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen]] ein das Logo im Kopf ein- oder ausgeblendet. | ||
procedure pictureBasisKopfLogoOnBeforePrint_inherited(Sender: TfrxComponent); | procedure pictureBasisKopfLogoOnBeforePrint_inherited(Sender: TfrxComponent); | ||
Zeile 62: | Zeile 82: | ||
pictureBasisKopfLogo.Visible := False; | pictureBasisKopfLogo.Visible := False; | ||
end; | end; | ||
− | + | ||
− | + | ||
− | + | Da die Seitennummer im Kopf der ersten Seite steht, wird dieser Bereich auf der ersten Seite unterdrückt: | |
− | |||
− | |||
procedure HeaderSeitenNummerOnBeforePrint(Sender: TfrxComponent); | procedure HeaderSeitenNummerOnBeforePrint(Sender: TfrxComponent); | ||
Zeile 77: | Zeile 95: | ||
end; | end; | ||
+ | |||
+ | Das Band mit den Feldern Raum/Stand wird ausgeblendet, wenn die Felder leer sind: | ||
procedure MasterDataVARaumOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataVARaumOnBeforePrint(Sender: TfrxComponent); | ||
Zeile 84: | Zeile 104: | ||
MasterDataVARaum.Visible := False; | MasterDataVARaum.Visible := False; | ||
end; | end; | ||
+ | |||
+ | |||
+ | Das Band mit dem Standard-Kopftext (aus den Programmparametern ⇒ Formular-Texte) wird ausgeblendet, wenn das Feld leer ist: | ||
procedure MasterDataStandardTextKopfOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataStandardTextKopfOnBeforePrint(Sender: TfrxComponent); | ||
Zeile 92: | Zeile 115: | ||
MasterDataStandardTextKopf.Visible:= True; | MasterDataStandardTextKopf.Visible:= True; | ||
end; | end; | ||
+ | |||
+ | |||
+ | Das Band mit dem Kopftext (aus dem Auftragskopf) wird ausgeblendet, wenn das Feld leer ist: | ||
procedure MasterDataKopftextOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataKopftextOnBeforePrint(Sender: TfrxComponent); | ||
Zeile 100: | Zeile 126: | ||
MasterDataKopftext.Visible:= True; | MasterDataKopftext.Visible:= True; | ||
end; | end; | ||
+ | |||
+ | |||
+ | Die Bänder für die Bereiche Miete bzw. Verkauf (aus dem Auftragskopf) werden wechselweise aus-/eingeblendet, abhängig von dem Bereichskennzeichen des Auftrags: | ||
procedure MasterDataKopfMieteOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataKopfMieteOnBeforePrint(Sender: TfrxComponent); | ||
Zeile 140: | Zeile 169: | ||
MasterDataKopfVerkauf.Visible := True; | MasterDataKopfVerkauf.Visible := True; | ||
end; | end; | ||
− | + | ||
+ | |||
+ | |||
+ | === Positionen === | ||
+ | |||
// Positionen: | // Positionen: | ||
Zeile 310: | Zeile 343: | ||
end; | end; | ||
+ | |||
+ | |||
+ | === Fuss === | ||
+ | |||
// FUSS: | // FUSS: |
Version vom 15. Juli 2016, 11:03 Uhr
Inhaltsverzeichnis
1 Allgemeines
Hier finden Sie den Programm-Code, der in den Standard-Style-Reports für Angebot/Auftrag verwendet wird.
2 Code
Der Code ist die Blöcke Kopf, Positionen und Fuss eingeteilt. Technisch gesehen ist das nicht notwendig, die Prozeduren könnten stehen wo sie wollen. Es erhöht aber die Übersichtlichkeit.
Auf den ersten Blick wirkt das erschreckend viel. Allerdings wiederholen sich die Befehle immer wieder, weil es in der Hauptsache darum geht:
- Bereiche (Bänder) oder Felder ein- oder auszublenden
- Felder (Memos, Textfelder) mit Inhalten zu füllen.
2.1 Kopf
Diese Prozedur wird aufgerufen, bevor der oberste Bereich (also das oberste Band) des Reports gedruckt wird.
Hier werden generelle Einstellungen des Reports gemacht:
- Das Memo-Feld (Text-Feld) für die Anschrift wird gefüllt. Hier werden also die Anschriften-Felder nicht direkt auf dem Report platziert, sondern es gibt ein Memo
memoAnschrift
, in das die Zeilen (Lines) angefügt werden. Das hat den Vorteil, dass z.B. das Ansprechpartner-Feld keine Leerzeile verursacht, wenn es gar keinen Ansprechpartner gibt.
- Abhängig von den REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen werden Bänder ein- oder ausgeblendet.
// Kopf: procedure MasterDataAnschriftOnBeforePrint(Sender: TfrxComponent); begin // Dies ist der erste Bereich des Reports, der gedruckt wird (außer dem PagerHeader des Basis-Reports). // Hier kann man generelle Einstellungen des Reports vornehmen. // Anschriftenfeld zusammenstellen: memoAnschrift.Lines.Clear; memoAnschrift.Lines.Add( <AuftragsKopf."NameFirma"> ); if <Ansprechpartner."Briefanrede"> > then memoAnschrift.Lines.Add( <Ansprechpartner."Briefanrede"> ); memoAnschrift.Lines.Add( <AuftragsKopf."Str"> ); memoAnschrift.Lines.Add( <AuftragsKopf."PLZ"> + ' ' + <AuftragsKopf."Ort"> ); memoAnschrift.Lines.Add( UpperCase( <Adresse."Landname"> ) ); // Kennzeichen 3 = Rabatt im Fuss Ja/Nein if <AuftragsKopf."KENNZ3"> = 'Nein' then ChildMaterialRabatt.Visible := False; // Kennzeichen 5 = Kapitelpreise Ja/Nein if <AuftragsKopf."KENNZ5"> = 'Nein' then begin memoKapitelBetrag.Visible := False; GroupFooterKapitel.Visible := False; end; // Kapitel-Summe im Fuss: if <AuftragsKopf."KENNZ7"> = 'Nein' then GroupFooterKapitel.Visible := False; // Bänder nur für ANGEBOT (bzw. ANFRAGE): if <AuftragsKopf."StatusNr"> in [3,7,103,107] then // ANGEBOT, ANFRAGE, ANGEBOT im Archiv, ANFRAGE im Archiv begin // Angebots-Text im Fuß: ChildAngebotAuftragserteilung.Visible := True; // Wenn keine Arbeitszeit im Auftrag: Band unterdrücken: MasterDataArbeitszeitAng.Visible := <AuftragsFuss."SummeArbzeit"> > 0; end else begin // Wenn kein Angebot, müssen diese Bereiche IMMER ausgeblendet werden: ChildAngebotAuftragserteilung.Visible := False; MasterDataArbeitszeitAng.Visible := False; end; end;
Diese Prozedur kommt aus dem Basis-Report, das zeigt das Wort _inherited
("geerbt"). Abhängig vom REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen ein das Logo im Kopf ein- oder ausgeblendet.
procedure pictureBasisKopfLogoOnBeforePrint_inherited(Sender: TfrxComponent); begin if <AuftragsKopf."KENNZ1"> = 'Nein' then pictureBasisKopfLogo.Visible := False; end;
Da die Seitennummer im Kopf der ersten Seite steht, wird dieser Bereich auf der ersten Seite unterdrückt:
procedure HeaderSeitenNummerOnBeforePrint(Sender: TfrxComponent); begin // Seitennummer auf der ersten Seite unterdrücken: if <Page>=1 then HeaderSeitenNummer.Visible := False else HeaderSeitenNummer.Visible := True; end;
Das Band mit den Feldern Raum/Stand wird ausgeblendet, wenn die Felder leer sind:
procedure MasterDataVARaumOnBeforePrint(Sender: TfrxComponent); begin // Wenn beide Felder leer sind: Ausblenden! if ( <AuftragsKopf."VA-OrtKurzname"> = ) and ( <AuftragsKopf."VA-Raum"> = ) then MasterDataVARaum.Visible := False; end;
Das Band mit dem Standard-Kopftext (aus den Programmparametern ⇒ Formular-Texte) wird ausgeblendet, wenn das Feld leer ist:
procedure MasterDataStandardTextKopfOnBeforePrint(Sender: TfrxComponent); begin if <StandardTextKopf."StandardText"> = then MasterDataStandardTextKopf.Visible:= False else MasterDataStandardTextKopf.Visible:= True; end;
Das Band mit dem Kopftext (aus dem Auftragskopf) wird ausgeblendet, wenn das Feld leer ist:
procedure MasterDataKopftextOnBeforePrint(Sender: TfrxComponent); begin if <AuftragsKopf."Kopftext"> = then MasterDataKopftext.Visible:= False else MasterDataKopftext.Visible:= True; end;
Die Bänder für die Bereiche Miete bzw. Verkauf (aus dem Auftragskopf) werden wechselweise aus-/eingeblendet, abhängig von dem Bereichskennzeichen des Auftrags:
procedure MasterDataKopfMieteOnBeforePrint(Sender: TfrxComponent); begin if <AuftragsKopf."Bereich_1Verkauf_2Miete_3Mietverkauf"> <> 2 then MasterDataKopfMiete.Visible := False else begin MasterDataKopfMiete.Visible := True; // Bei Miete Datumsfelder im Kopf nur sichtbar, wenn Text drin steht: if <AuftragsKopf."AufbauText"> = then begin AuftragsKopfAufbauDatum.Visible := False; AuftragsKopfAufbauText.Visible := False; AuftragsKopfAufbauZeit.Visible := False; end; if <AuftragsKopf."AbbauText"> = then begin AuftragsKopfAbbauDatum.Visible := False; AuftragsKopfAbbauText.Visible := False; AuftragsKopfAbbauZeit.Visible := False; end; if <AuftragsKopf."ProbeText"> = then begin AuftragsKopfProbeDatum.Visible := False; AuftragsKopfProbeText.Visible := False; AuftragsKopfProbeZeit.Visible := False; end; end; end; procedure MasterDataKopfVerkaufOnBeforePrint(Sender: TfrxComponent); begin if <AuftragsKopf."Bereich_1Verkauf_2Miete_3Mietverkauf"> = 2 then MasterDataKopfVerkauf.Visible := False else MasterDataKopfVerkauf.Visible := True; end;
2.2 Positionen
// Positionen: procedure ChildDetailPositionenOnBeforePrint(Sender: TfrxComponent); begin if ( <Positionen."TextPosition"> = ) or ( <AuftragsKopf."KENNZ8"> = 'Nein' ) then ChildDetailPositionen.Visible := False else ChildDetailPositionen.Visible := True; end; procedure MemoTitelHeaderPositionenOnBeforePrint(Sender: TfrxComponent); begin // Auf der 1. Seite unterdrücken: if <Page> = 1 then HeaderSeitenNummer.Visible := False else HeaderSeitenNummer.Visible := True; end; procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Gruppenkopf-Band (die Kapitel-Überschrift) ausgegeben wird. // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist: if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then Engine.NewPage; // Neue Seite, Seitenkopf usw. drucken end; procedure ChildGroupHeader1OnBeforePrint(Sender: TfrxComponent); begin // Unterdrücken, wenn kein Zusatztext vorhanden ist: if <Positionen."TextPosition"> = then ChildGroupHeader1.Visible := False else ChildGroupHeader1.Visible := True; end; procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band // ausgegeben wird. // Grundeinstellung: Erst mal alles einschalten, unten u.U. wieder aus: MemHeaderEinzPreis.Visible := True; memoHeaderRabattTitel.Visible := True; memoHeaderGesPreis.Visible := True; memoPositionenRabattProz.Visible := True; memoPosEinzelPreis.Visible := True; memoPosGesBetrag.Visible := True; // Derzeit unbenutzt: AuftrStatistikSummeRabatt.Visible:= True; // Kennzeichen 4 = Einzelpreise sichtbar Ja/Nein: if <AuftragsKopf."KENNZ4"> = 'Nein' then begin MemHeaderEinzPreis.Visible := False; memoHeaderRabattTitel.Visible := False; memoHeaderGesPreis.Visible := False; end; // Wenn der Gesamtpreis 0 ist, den Einzelpreis unterdrücken: // (z.B. bei 100 % Rabatt) if <Positionen."GesBetrag"> = 0 then begin memoPosEinzelPreis.Visible := False; memoPositionenRabattProz.Visible := False; end; // Titel "Rabatt" in Überschrift unterdrücken, wenn keine // Rabatt-Postion vorhanden ist. // (Hinweis: Hinter diesem Feld liegt ein leeres Textfeld, das den Rahmen anzeigt, wenn dieses Feld unsichtbar ist!) if <AuftrStatistik."AnzahlRabattPos"> = 0 then memoHeaderRabattTitel.Visible := False; // Kennzeichen 2 = Rabatt Ja/Nein if <AuftragsKopf."KENNZ2"> = 'Nein' then begin memoHeaderRabattTitel.Visible := False; memoPositionenRabattProz.Visible := False; // Derzeit unbenutzt: AuftrStatistikSummeRabatt.Visible := False; end; // Kapitel-Position ausblenden: // Kennzeichen "Nur Kapitel" = 'Ja': Positionen unterdrücken: if ( <Positionen."PosNr"> = 0 ) or ( <AuftragsKopf."KENNZ6"> = 'Ja' ) then begin DetailPositionen.Visible := False; end else DetailPositionen.Visible := True; // Rabatt % unterdrücken, wenn's keinen Rabatt-Betrag gibt: if <Positionen."RabattBetrag"> = 0 then memoPositionenRabattProz.Visible := False; // Einzelpreise sichtbar abhängig vom Kennzeichen 4: if <AuftragsKopf."KENNZ4"> = 'Nein' then begin memoPosEinzelPreis.Visible := False; memoPositionenRabattProz.Visible := False; memoPosGesBetrag.Visible := False; end; // Bei Mietartikeln den Mietpreisfaktor anzeigen, // bei Arbeitszeit die Stunden/Tage: PositionenMietFaktor.Visible := False; PositionenStundenSoll_BeiArbZeit.Visible := False; if <Positionen."Artikelart_1MT_2VK_3DL_4AZ"> = 1 then begin PositionenMietFaktor.Visible := True; end; if <Positionen."Artikelart_1MT_2VK_3DL_4AZ"> = 4 then begin PositionenStundenSoll_BeiArbZeit.Visible := True; end; // Alternativ-Position kennzeichnen: // Markierung mit " * " nur bei Alternativ-Position anzeigen // (und nicht beim Kapitel, das auch das Alternativ-Kennzeichen hat!) if (<Positionen."Alternativ_0_1"> = 1) and (<Positionen."PosNr"> > 0 ) then begin memoPosGesBetrag.Font.Color := clGray; // clWindowFrame; MemoAlternativStern.Visible := True; end else begin MemoAlternativStern.Visible := False; memoPosGesBetrag.Font.Color := clBlack; // clWindowText; end; // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist: if <Positionen."PosNr"> > 0 then // NICHT bei Kapitel-Position, das wird da schon gemacht! if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then Engine.NewPage; // Neue Seite, Seitenkopf usw. drucken end; procedure HeaderPositionenOnBeforePrint(Sender: TfrxComponent); begin // Auf der 1. Seite unterdrücken: if <Page> = 1 then begin MemoAuftrNrTitelHeaderPositionen.Visible := False; HeaderSeitenNummer.Visible := False; HeaderPositionen.Visible := False; end else begin MemoAuftrNrTitelHeaderPositionen.Visible := True; HeaderSeitenNummer.Visible := True; HeaderPositionen.Visible := True; end; end; procedure ChildHeaderPositionenOnBeforePrint(Sender: TfrxComponent); begin // Überschriftszeile unterdrücken, wenn keine Positionen mehr kommen: if DetailPositionen.DataSet.EOF then ChildHeaderPositionen.Visible := False else ChildHeaderPositionen.Visible := True; end;
2.3 Fuss
// FUSS: procedure FussPositionenOnBeforePrint(Sender: TfrxComponent); begin // Kennzeichen 2 = Rabatt Ja/Nein if <AuftragsKopf."KENNZ2"> = 'Nein' then begin // Derzeit unbenutzt: AuftrStatistikSummeRabatt.Visible:= False; MemoFooterGespreis.Visible:= False; end; // Ohne Mwst.: Mwst-Felder unterdrücken: if <AuftragsFuss."MwstBetrag"> = 0 then begin AuftragsFussMwstBetrag.Visible:= False; AuftragsFussMwstSatzProzent.Visible:= False; memoFussGesamtbetragText.Visible:= False; AuftragsFussGesamtBetragBrutto.Visible:= False; end; // Rabatt % berechnen: if ( <AuftragsFuss."KalkSummeGesamt"> > 0 ) then Set( 'FussRabattProzent', 100 - ( (<AuftragsFuss."SummeMiete"> + <AuftragsFuss."SummeVerkauf"> ) / <AuftragsFuss."KalkSummeGesamt"> * 100 ) ) else Set( 'FussRabattProzent',0); end; procedure AuftrStatistikAnzahlAlternativPosOnBeforePrint(Sender: TfrxComponent); begin // Hinweis aus Alternativ-Positionen: if <AuftrStatistik."AnzahlAlternativPos"> = 0 then AuftrStatistikAnzahlAlternativPos.Visible := False else AuftrStatistikAnzahlAlternativPos.Visible := True; end; begin
end.