SQL Exp
 |
In den meisten Fällen ist es besser, Abfragen im Bericht anstelle von SQLExp zu verwenden Funktion. |
SQLExp ist die Funktion, die es Ihnen ermöglicht, auf Daten zuzugreifen, die im ursprünglichen Datensatz des Berichts sonst nicht verfügbar sind. Auf diese Weise können Sie Daten aus anderen Tabellen in benutzerdefinierte Berichte einfügen.
Header
Funktion SQLExp(sql:String): String;
Einfaches Beispiel
Schauen wir uns zunächst zwei einfache Beispiele an, die in jedem Bericht verwendet werden können. Der erste Ausdruck gibt die Adresse des Subjekts mit dem Namen 'Factory' zurück
[SQLexp('select acAddress from tHE_SetSubj where acSubject = ''Factory''')]
Das zweite Beispiel gibt den Namen unseres Unternehmens zurück. Es verwendet einen Join von zwei Tabellen
[SQLexp('select S.acSubject from tHE_SetSubj S, tPA_SysParam P where S.acSubject = P.acOurCompany')]
Beispiel der Verwendung im Bericht 103 - Auftragsbericht - detailliert
Sie sammeln Verkaufsaufträge und liefern diese einmal pro Woche an die Empfänger. Im Verkaufsauftragsbericht können Sie einen Bericht über nicht versandte Aufträge mit eingegebenem Lieferung Feld (Liefermethode) Lieferung - mit eigenem Lkw.
Im Datensatz des Verkaufsauftragsberichts sind die Adresse und die Post des Kunden nicht angegeben. Alle diese Daten sind im Register der Subjekte verfügbar, da die Subjekt-ID bereits im Datensatz des '103 - Auftragsbericht - detailliert Berichts' vorhanden ist.
Alle Kriterien wurden erfüllt, um die Funktion SQLExp in einem Bericht zu verwenden. Lassen Sie uns schauen!
Fügen Sie das "Text"-Objekt in den Bericht ein. Klicken Sie auf das Objekt, um den Texteditor zu öffnen. Schreiben Sie den Ausdruck im Editor. Sie müssen den Ausdruck in eckige Klammern setzen, da er als Ausdruck im "Text"-Objekt geschrieben ist.

[SQLExp('select acAddress from tHE_SetSubj where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Erklärung
acConsignee ist das Feld im Datensatz qReportIzpis , das verwendet wird, um einen Bericht zu generieren.
Die Funktion dlQuotedStr (registriert für den Bericht von Datalab) konvertiert den String in eine zitierte Version.
Nach dem Ersetzen von dlQuotedStr(<qReportIzpis."acConsignee">) lautet der SQL-Befehl:
'select acAddress from tHE_SetSubj where acSubject = '''Customer&Co.''' '
und somit ist die ausgeführte Abfrage:
select acAddress from tHE_SetSubj where acSubject = 'Customer&Co.''
 |
Da die Namen der Datensätze und Felder in jedem Bericht unterschiedlich sein können, müssen Sie den Namen des Datensatzes und der Felder für jeden konkreten Bericht überprüfen. |
Bericht des Kundenstandorts aus dem Verkaufsauftrag
Die SQL-Klausel ist in diesem Fall ein Join von zwei Tabellen
[SQLExp('select P.acName from tHE_SetSubj S left join tHE_SetPostCode P on S.acPost = P.acPost where acSubject = ' + dlQuotedStr(<qReportIzpis."acConsignee">) + '')]
Beispiel einer Sammelrechnung
Schauen wir uns ein Beispiel an, bei dem die Sammelrechnung (Quittung oder Ausgabe) aus internen Dokumenten (Quittungen oder Ausgaben) erstellt wurde, in denen Sie Waren erhalten oder ausgegeben haben, die durch Seriennummern verfolgt werden.
Der Bericht über eine Sammelrechnung oder eine Übersicht über Seriennummern liefert keine Informationen über die erhaltenen oder ausgegebenen Seriennummern von Artikeln aus der Sammelrechnung, da diese Seriennummern durch interne Dokumente erhalten oder ausgegeben wurden.
Aber Sie können eine Liste der erhaltenen oder ausgegebenen Seriennummern melden! Dazu verwenden Sie die SQLExp-Funktion. Seriennummern werden direkt über die Verknüpfungstabelle gemeldet, in der der Typ der Verknüpfung zwischen dem internen Dokument und der Sammelrechnung 4 ist.
Berichte dieser Art werden verwendet, um Seriennummern in einer Sammelrechnung zu melden, die direkt aus internen Dokumenten erstellt wurde.
Erstellen Sie einen neuen Klon eines bereits vorhandenen Berichts für eine Rechnung. Fügen Sie das neue Textobjekt hinzu und schreiben Sie den folgenden SQL-Satz:
[SQLExp('select S.acSerialNo + '' ('' + LTrim(Str(Sum(S.anQty), 10, 2)) + '')'' as SN from tHE_MoveItemSerialNo S, tHE_LinkMoveItemMoveItem V where V.acLnkKey = S.acKey and V.anLnkNo = S.anNo and V.acType = ''4'' and V.acKey = ''' + <tbIzpisPrometPoz."acKey"> + ''' and V.anNo = ' + VarToStr(<tbIzpisPrometPoz."anNo">) + ' group by S.acSerialNo')]
Beispiel eines Sammeldokuments, das mit internen Dokumenten erstellt wurde
Schauen wir uns ein Beispiel an, bei dem die Sammelrechnung (Quittung oder Ausgabe) aus internen Ausgabedokumenten erstellt wurde, in denen Sie Konsignationswaren ausgegeben haben, die durch Seriennummern verfolgt werden.
Der Bericht über eine Sammelrechnung oder eine Übersicht über Seriennummern liefert keine Informationen über die ausgegebenen Seriennummern von Artikeln aus der Sammelrechnung, da diese Seriennummern durch ein Ausgabedokument für den Kunden ausgegeben wurden.
Aber Sie können eine Liste der ausgegebenen Seriennummern melden! Dazu verwenden Sie die SQLExp-Funktion. Seriennummern werden direkt über die Verknüpfungstabelle gemeldet, in der die Verknüpfung zwischen dem internen Dokument und der Sammelrechnung mit dem Typ V eingegeben wird.
1. Erstellen Sie eine neue Kopie des Berichts eines bereits vorhandenen Berichts für eine Rechnung. Fügen Sie ein neues Textobjekt hinzu und schreiben Sie den folgenden SQL-Satz:
[SQLExp('select S.acSerialNo + '' ('' + LTrim(Str(Sum(S.anQty), 10, 2)) + '')'' as SN from tHE_MoveItemSerialNo S, tHE_LinkMoveItemMoveItem V where V.acLnkKey = S.acKey and V.anLnkNo = S.anNo and V.acType = ''V'' and V.acKey = ''' + <tbIzpisPrometPoz."acKey"> + ''' and V.anNo = ' + VarToStr(<tbIzpisPrometPoz."anNo">) + ' group by S.acSerialNo')]
Der Unterschied zum vorherigen Beispiel besteht nur darin, dass der Verknüpfungstyp in diesem Fall "V" anstelle von 4 ist.
Beispiel für den Aufruf einer gespeicherten Prozedur
Der Funktionsparameter kann auch die gespeicherte Prozedur sein. Das folgende Beispiel gibt den Standort unseres Unternehmens mit dem Aufruf der gespeicherten Prozedur "fHE_GetOurCompanyCity" zurück
[SQLExp('select dbo.fHE_GetOurCompanyCity()]