Funkcije
Beispiel mit Spaßction dlStringReplace
Im Bericht '10A - Materialbewegungsbericht - Detailliert', der im Programmmenü 'Waren | Materialbewegung' ist, fügen Sie ein "Text"-Objekt im Band mit dem Namen 'Detail' hinzu und schreiben Sie einen Ausdruck, der die Seriennummern anzeigt, die zur ausgewählten Position und zur ausgewählten Rechnung gehören. Die SQLExp-Funktion gibt alle Datensätze zurück, jeder in seiner eigenen Zeile, aber wir möchten die Seriennummern in einer Zeile anzeigen, getrennt durch Kommas.
[dlStringReplace(SQLExp('SELECT acSerialNo, FROM tHE_MoveItemSerialNo WHERE acKey = ''' + <qReportIzpis."acKey"> + ''' AND acIdent = ''' + <qReportIzpis."acIdent"> + ''' GROUP BY acSerialNo UNION ALL SELECT acSerialNo FROM tHE_OrderItemSerialNo WHERE acKey = ''' + <qReportIzpis."acKey"> + ''' AND acIdent = ''' + <qReportIzpis."acIdent"> + ''' GROUP BY acSerialNo ORDER BY acSerialNo'), #13#10, ', ', 'rfReplaceAll', '')]
Beispiel mit Datumsfeldern
Im Klon des Berichts '241 - Rechnung', der im Programmmenü 'Waren | Ausgabe | Dokument (z.B. 3000 - Verkauf)' ist, fügen Sie den Saldo des Rechnungsempfängers zum Konto 2200 am Tag der Rechnung hinzu. Es ist wichtig, dass das Datum im Format yyyymmddformatiert ist.
[SQLExp('SELECT SUM(anValDebit-anValCredit) from tHE_AcctTransItem where acAcct = 2200 and acSubject=''' + <qReportIzpisD."acReceiver"> + ''' and adDateDoc <= ''' + FormatDateTime('yyyymmdd',<qReportIzpisD."adDateInv">) + '''')]
Beispiel mit Zahlen
In diesem Fall verwenden wir den Bericht '156 - Materialbewegungsbericht - Zusammenfassung nach Artikeln', der im Programmmenü 'Waren | Materialbewegungen' ist und die Menge in der alternativen Maßeinheit anzeigt.
Da wir keinen Faktor für die Umrechnung der Menge in der primären Maßeinheit (U/M) in U/M 2 haben, müssen wir diese aus dem Register der Maßeinheiten mit der SQLExp-Funktion abrufen.
Wir tun dies mit dem folgenden Ausdruck:
[SQLExp('SELECT anUMToUM2 FROM tHE_SetItem WHERE acIdent = ' + dlQuotedStr(<qReportIzpis."acIdent">) + '')]
Der obige Ausdruck gibt die Zahl als Text zurück. Jetzt möchten wir die Menge in U/M2 drucken, also müssen wir den mit der dlStrToFloatDef Funktion erhaltenen Wert in eine Zahl umwandeln. Dann teilen wir den Betrag in der EM durch den erhaltenen Faktor und verwenden die dlDiv Funktion, anstatt ihn von Null zu teilen, anstelle der gewöhnlichen Division. Schließlich erhalten wir:
[dlDiv(<qReportIzpis."anBegState">, dlStrToFloatDef(SQLExp('SELECT anUMToUM2 FROM tHE_SetItem WHERE acIdent = ' + dlQuotedStr(<qReportIzpis."acIdent">) + ''), 1))]
Beispiel mit Datenlesung aus dem PANTHEON-Fenster
Wir werden das folgende Beispiel auf einem Klon des Berichts '16B - Ausgestellte Rechnungen - nach Lieferanten und Artikeln' durchführen, der im Programmmenü 'Waren | Ausgestellte Rechnungsberichte | Ausgestellte Rechnungen/Gewinnmargenbericht' ist. Wenn im Fenster ein Lager ausgewählt ist, zeigt der Ausdruck den gesamten Bestand des Artikels an, andernfalls wird nur der Bestand im ausgewählten Lager gedruckt.
Das Fenster im Programm, von dem der Bericht ausgeht, heißt 'PrometObracunIzdRac', das Eingabefeld, in dem wir das Lager auswählen, hat den Namen 'fWarehouse'. Der Begriff, der den Text in diesem Objekt zurückgibt, ist bereits bekannt:
[GetFormValue('PrometObracunIzdRac.fWarehouse')]
Zuerst überprüfen wir, ob ein Lager ausgewählt ist. Wenn nicht, gibt der erste SQLExp-Ausdruck den gesamten Bestand des ausgewählten Artikels in allen Lagern zurück, andernfalls gibt der zweite nur den Bestand des Artikels im ausgewählten Lager zurück.
[IIF (GetFormValue('PrometObracunIzdRac.fWarehouse') = '',
SQLExp('select SUM (anStock) from tHE_Stock where acIdent = ' +
dlQuotedStr(<qReportIzpis."acIdent">) + ''),
SQLExp('select anStock from tHE_Stock where acIdent = ' +
dlQuotedStr(<qReportIzpis."acIdent">) + ' and acWarehouse = ''' +
GetFormValue('PrometObracunIzdRac.fSkladisce') + ''''))]
Beispiel mit komplexer SELECT-Anweisung
Eine besondere Behandlung verdient der Ausdruck im Bericht '3AR - Mitarbeiterakte', der anzeigt, ob der Arbeiter behindert ist oder nicht. Er befindet sich im Programmmenü 'Personal | Mitarbeiterdateien'. Klicken Sie dann auf das 'Drucken'-Symbol.
Diese Information ist nicht direkt im Datensatz geschrieben, sondern enthält die Behinderungsart im Feld "acDisabilityCode" in der Tabelle "tHR_PrsnHealth". Da sich die Behinderungsart eines einzelnen Arbeiters ändern kann, müssen wir die zuletzt eingegebene abrufen. Das Datum der Änderung der Behinderung wird im Feld "adCreationDate" in derselben Tabelle gespeichert. Der folgende Begriff gibt Ihnen das letzte Datum, an dem die Invaliditätskategorie für den ausgewählten Arbeiter geändert wurde.
[SQLExp('select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + '''')]
Dann erhalten wir mit dem folgenden Begriff die Kategorie der Behinderung des Arbeiters
[SQLExp('select acDisabilityCode from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and adCreatonDate = (select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''')')]
Wenn wir im obigen Begriff das Feld "acDisabilityCode" durch 'JA' ersetzen, gibt der Ausdruck 'JA' zurück, wenn der Arbeiter behindert ist, andernfalls gibt er einen leeren String zurück. Da der Ausdruck im Fall, dass ein Arbeiter nicht behindert ist, 'NEIN' zurückgibt, geben wir den Begriff in den bedingten Satz IIF und erhalten schließlich
[IIF(SQLExp('select ''YES'' from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and adCreatonDate = (select max(adCreatonDate) from tHR_PrsnHealth where acWorker = ''' + <qryDelavec."acWorker"> + ''' and acDisabilityCode > ''0'')') = 'YES','JA','NEIN')]
Sortierung und Gruppierung nach dem Feld, das nicht im Datensatz ist
Eine sehr ungewöhnliche und nützliche Verwendung der Funktion SQLExp ist die Sortierung und Gruppierung nach einem Feld, das nicht im Datensatz ist.
Als Grundlage nehmen wir den Bericht '164 - Ausgestellte Rechnungen - Detailliert', der im Programmmenü 'Waren | Ausgestellte Rechnungsberichte | Ausgestellte Rechnungen/Gewinnmargenbericht' ist. Zuerst erstellen wir einen Klon, auf dem wir arbeiten werden. Die Daten werden nach dem Rechnungssteller gruppiert und nach dem Aussteller und der Dokumentennummer sortiert.
Wir setzen die Eigenschaft "Bedingung" des "GroupHeader-Bands" auf;
SQLExp('select G.acIssuer from tHE_Move G where G.acKey = ''' + <qReportIzpis."acKey"> + '''')
Dann ersetzen wir die Beschreibung, die die Informationen beschreibt, die wir gruppieren, und für die Daten selbst. Wir geben dasselbe wie oben ein, aber setzen es in eckige Klammern (wie im Bild gezeigt). Um die Sortierung zu ändern, ändern Sie das Feld 'Sort By' im Berichtsregister:
(select G.acIssuer from tHE_Move G where G.acKey = P.acKey), G.acKey

