Die Abfragesprache in 1C 8 ist ein vereinfachtes Analogon der bekannten „strukturierten Programmiersprache“ (wie sie häufiger als SQL bezeichnet wird). In 1C wird es jedoch nur zum Lesen von Daten verwendet; ein Objektdatenmodell wird zum Ändern von Daten verwendet.
Ein weiterer interessanter Unterschied ist die russische Syntax. Obwohl Sie tatsächlich englischsprachige Konstruktionen verwenden können.
Beispielanfrage:
WÄHLEN
Banks.Name,
Banken.CorrAccount
AUS
Verzeichnis.Banken WIE Banken
Diese Anfrage ermöglicht es uns, Informationen über den Namen und das Korrespondenzkonto aller in der Datenbank vorhandenen Banken einzusehen.
Die Abfragesprache ist die einfachste und effektivste Möglichkeit, Informationen zu erhalten. Wie aus dem obigen Beispiel ersichtlich ist, müssen Sie in der Abfragesprache Metadatennamen verwenden (dies ist eine Liste von Systemobjekten, aus denen die Konfiguration besteht, d. h. Verzeichnisse, Dokumente, Register usw.).
Um Daten zu erhalten, reicht es aus, die Konstruktionen „SELECT“ und „FROM“ zu verwenden. Die einfachste Anfrage sieht so aus:
SELECT * FROM Directories.Nomenclature
Wobei „*“ die Auswahl aller Felder der Tabelle bedeutet und Directories.Nomenclature – der Name der Tabelle in der Datenbank.
Schauen wir uns ein komplexeres und allgemeineres Beispiel an:
WÄHLEN
<ИмяПоля1>WIE<ПредставлениеПоля1>,
Summe(<ИмяПоля2>) WIE<ПредставлениеПоля2>
AUS
<ИмяТаблицы1>WIE<ПредставлениеТаблицы1>
<ТипСоединения>VERBINDUNG<ИмяТаблицы2>WIE<ПредставлениеТаблицы2>
VON<УсловиеСоединениеТаблиц>WO
<УсловиеОтбораДанных>GRUPPIERE NACH
<ИмяПоля1>SORTIERE NACH
<ИмяПоля1>ERGEBNISSE
<ИмяПоля2>
VON
<ИмяПоля1>
In dieser Abfrage wählen wir die Daten der Felder „FieldName1“ und „FieldName1“ aus den Tabellen „TableName1“ und „TableName“ aus, weisen den Feldern mit dem Operator „HOW“ Synonyme zu und verbinden sie über eine bestimmte Bedingung „TableConnectionCondition“. “.
Aus den empfangenen Daten wählen wir nur Daten aus, die die Bedingung aus „WHERE“ „Datenauswahlbedingung“ erfüllen. Als nächstes gruppieren wir die Anfrage nach dem Feld „Feldname1“ und summieren „Feldname2“. Wir erstellen Summen für das Feld „Feldname1“ und das letzte Feld „Feldname2“.
Der letzte Schritt besteht darin, die Anfrage mithilfe des ORDER BY-Konstrukts zu sortieren.
Schauen wir uns die allgemeinen Strukturen der 1C 8.2-Abfragesprache an.
ERSTEN
Mit diesem Operator können Sie die n-Anzahl der ersten Datensätze ermitteln. Die Reihenfolge der Datensätze wird durch die Reihenfolge in der Abfrage bestimmt.
WÄHLEN SIE DIE ERSTEN 100
Banks.Name,
Banken. Code AS BIC
AUS
Verzeichnis.Banken WIE Banken
SORTIERE NACH
Banks.Name
Die Anfrage erhält die ersten 100 Einträge des Verzeichnisses „Banken“, alphabetisch sortiert.
ERLAUBT
Dieses Design ist für die Arbeit mit dem Mechanismus relevant. Der Kern des Mechanismus besteht darin, das Lesen (und andere Aktionen) auf Benutzer für bestimmte Datensätze in einer Datenbanktabelle und nicht für die Tabelle als Ganzes zu beschränken.
Versucht ein Benutzer, über eine Abfrage Datensätze zu lesen, auf die er keinen Zugriff hat, erhält er eine Fehlermeldung. Um dies zu vermeiden, sollten Sie die „ALLOWED“-Konstruktion verwenden, d. h. die Anfrage liest nur Datensätze, die ihr erlaubt sind.
AUSWÄHLEN ERLAUBT
Repository für zusätzliche Informationen. Link
AUS
Verzeichnis.Repository für zusätzliche Informationen
VERSCHIEDEN
Durch die Verwendung von „DIFFERENT“ wird verhindert, dass doppelte Zeilen in das 1C-Abfrageergebnis eingegeben werden. Duplizierung bedeutet, dass alle Anforderungsfelder übereinstimmen.
WÄHLEN SIE DIE ERSTEN 100
Banks.Name,
Banken. Code AS BIC
AUS
Verzeichnis.Banken WIE Banken
EmptyTable
Diese Konstruktion wird sehr selten zum Kombinieren von Abfragen verwendet. Beim Beitritt müssen Sie möglicherweise eine leere verschachtelte Tabelle in einer der Tabellen angeben. Dafür ist der „EmptyTable“-Operator genau das Richtige.
Beispiel aus der 1C 8-Hilfe:
Wählen Sie Linknummer, leere Tabelle (Nr., Artikel, Menge) als Zusammensetzung aus
VON Dokument.Spesenrechnung
ALLES KOMBINIEREN
SELECT Link.Number, Contents.(LineNumber, Product, Quantity)
FROM Dokument.Rechnung Dokument.Rechnung.Zusammensetzung.*
IST NULL
Eine sehr nützliche Funktion, mit der Sie viele Fehler vermeiden können. Mit YesNULL() können Sie den NULL-Wert durch den gewünschten ersetzen. Wird sehr häufig bei der Prüfung auf das Vorhandensein eines Werts in verknüpften Tabellen verwendet, zum Beispiel:
WÄHLEN
Nomenklatur Ref. Link,
IsNULL(Item Remaining.QuantityRemaining,0) AS QuantityRemaining
AUS
Kann auf andere Weise verwendet werden. Wenn beispielsweise für jede Zeile nicht bekannt ist, in welcher Tabelle der Wert vorhanden ist:
ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)
HOW ist ein Operator, der es uns ermöglicht, einer Tabelle oder einem Feld einen Namen (Synonym) zuzuweisen. Ein Anwendungsbeispiel haben wir oben gesehen.
Diese Konstruktionen sind sehr ähnlich – sie ermöglichen es Ihnen, eine Zeichenfolgendarstellung des gewünschten Werts zu erhalten. Der einzige Unterschied besteht darin, dass REPRESENTATION alle Werte in einen String-Typ konvertiert, während REPRESENTATIONREF nur Referenzwerte konvertiert. Es wird empfohlen, REFERENZDARSTELLUNG in Systemabfragen zur Datenkomposition zur Optimierung zu verwenden, es sei denn, das Referenzdatenfeld soll in Auswahlen verwendet werden.
WÄHLEN
View(Link), //string, zum Beispiel „Vorbericht Nr. 123 vom 10.10.2015
View(DeletionMark) AS DeleteMarkText, //string, „Yes“ oder „No“
ViewReferences(DeletionMark) AS DeleteMarkBoolean //boolean, True oder False
AUS
Dokument.Vorabbericht
ÄUSSERN
Mit Express können Sie Feldwerte in den gewünschten Datentyp konvertieren. Sie können einen Wert entweder in einen primitiven Typ oder einen Referenztyp konvertieren.
Express für einen Referenztyp wird verwendet, um die angeforderten Datentypen in Feldern eines komplexen Typs einzuschränken, was häufig zur Optimierung der Systemleistung verwendet wird. Beispiel:
EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).Type of ActivityForTaxAccountingCosts
Bei primitiven Typen wird diese Funktion häufig verwendet, um die Anzahl der Zeichen in Feldern unbegrenzter Länge zu begrenzen (solche Felder sind nicht vergleichbar mit). Um den Fehler zu vermeiden „ Ungültige Parameter im Vergleichsvorgang. Felder können nicht verglichen werden
unbegrenzte Länge und Felder inkompatibler Typen", müssen Sie solche Felder wie folgt ausdrücken:
EXPRESS(Kommentar AS Zeile(150))
DIFFERENZDATUM
Holen Sie sich 267 Video-Lektionen zu 1C kostenlos:
Ein Beispiel für die Verwendung von IS NULL in einer 1C-Anfrage:
WÄHLE AUS
Ref
LINKE VERBINDUNG RegisterAccumulations.ProductsInWarehouses.Remaining AS Product Remaining
Software NomenclatureRef.Link = Sold GoodsCommitteesRemains.Nomenclature
WO NICHT verbleibende Produkte. QuantityRemaining ist NULL
Der Datentyp in einer Abfrage kann mithilfe der Funktionen TYPE() und VALUETYPE() oder mithilfe des logischen REFERENCE-Operators bestimmt werden. Die beiden Funktionen sind ähnlich.
Vordefinierte Werte
Zusätzlich zur Verwendung übergebener Parameter in Abfragen in der 1C-Abfragesprache können Sie vordefinierte Werte oder verwenden. Zum Beispiel Überweisungen, vordefinierte Verzeichnisse, Kontenpläne usw. Hierzu wird das Konstrukt „Value()“ verwendet.
Anwendungsbeispiel:
WHERE Nomenclature.Type of Nomenclature = Value(Directory.Types of Nomenclature.Product)
WHERE Counterparties.Type of Contact Information = Value(Enumeration.Types of Contact Information.Phone)
WHERE Account Balances.Accounting Account = Value(Chart of Accounts.Profit.ProfitsLoss)
Es gibt 4 Arten von Verbindungen: LINKS, RECHTS, VOLLSTÄNDIG, INTERN.
LINKER und RECHTER ANSCHLUSS
Joins werden verwendet, um zwei Tabellen basierend auf einer bestimmten Bedingung zu verknüpfen. Funktion wann LINKS BEITRETEN besteht darin, dass wir die erste angegebene Tabelle vollständig nehmen und die zweite Tabelle bedingt binden. Die Felder der zweiten Tabelle, die nicht durch die Bedingung gebunden werden konnten, werden mit dem Wert gefüllt NULL.
Zum Beispiel:
Es wird die gesamte Tabelle der Kontrahenten zurückgegeben und das Feld „Bank“ nur an den Stellen ausgefüllt, an denen die Bedingung „Counterparties.Name = Banks.Name“ erfüllt ist. Wenn die Bedingung nicht erfüllt ist, wird das Feld Bank auf gesetzt NULL.
RIGHT JOIN in der 1C-Sprache absolut ähnlich Linker Anschluss, mit Ausnahme eines Unterschieds - in ANSCHLUSSRECHT Die „Haupttabelle“ ist die zweite, nicht die erste.
VOLLSTÄNDIGE VERBINDUNG
VOLLSTÄNDIGE VERBINDUNG Der Unterschied zu links und rechts besteht darin, dass alle Datensätze aus zwei Tabellen angezeigt werden und nur diejenigen verbunden werden, die per Bedingung verbunden werden können.
Zum Beispiel:
AUS
VOLLSTÄNDIGE VERBINDUNG
Verzeichnis.Banken WIE BankenVON
Die Abfragesprache gibt beide Tabellen nur dann vollständig zurück, wenn die Bedingung zum Zusammenführen der Datensätze erfüllt ist. Im Gegensatz zu einem Links-/Rechts-Join ist es möglich, dass NULL in zwei Feldern erscheint.
INNER JOIN
INNER JOIN unterscheidet sich von der vollständigen Version dadurch, dass nur die Datensätze angezeigt werden, die gemäß einer bestimmten Bedingung verbunden werden könnten.
Zum Beispiel:
AUS
Verzeichnis. Kontrahenten AS KundenINNER JOIN
Verzeichnis.Banken WIE BankenVON
Clients.Name = Banks.Name
Diese Abfrage gibt nur Zeilen zurück, in denen die Bank und die Gegenpartei denselben Namen haben.
Die Konstrukte JOIN und JOIN ALL kombinieren zwei Ergebnisse zu einem. Diese. Das Ergebnis der Ausführung von zwei wird zu einem gemeinsamen „zusammengeführt“.
Das heißt, das System funktioniert genauso wie normale Systeme, nur für eine temporäre Tabelle.
So verwenden Sie INDEX BY
Allerdings sollte ein Punkt beachtet werden. Auch die Erstellung eines Indexes für eine temporäre Tabelle nimmt Zeit in Anspruch. Daher empfiehlt es sich, die „ “-Konstruktion nur dann zu verwenden, wenn mit Sicherheit bekannt ist, dass mehr als 1-2 Datensätze in der temporären Tabelle vorhanden sein werden. Andernfalls kann der Effekt umgekehrt sein – die Leistung indizierter Felder kompensiert nicht die Zeit, die zum Erstellen des Index benötigt wird.
WÄHLEN
Währungskurse Aktueller Querschnitt. Währung AS Währung,
Währungskurse Aktueller Querschnitt.
PUT-Währungskurse
AUS
Informationen Register.Währungskurse.Letztes Segment (&Periode,) AS WährungskurseLetztes Segment
INDEX NACH
Währung
;
WÄHLEN
PreiseNomenklatur.Nomenklatur,
PreiseNomenklaturen.Preis,
PreiseNomenklaturen.Währung,
Währungskurse.Kurs
AUS
Informationen Register.Nomenklatur Preise.Letzte Scheibe(&Zeitraum,
Nomenklatur B (&Nomenklatur) UND Preistyp = &Preistyp) AS PreisNomenklatur
LEFT JOIN Währungskurse AS Währungskurse
Software PricesNomenclatures.Currency = Währungskurse.Currency
Mit der 1C-Abfragesprache können Sie beim Gruppieren von Abfrageergebnissen spezielle Aggregatfunktionen verwenden. Die Gruppierung kann auch ohne Aggregatfunktionen verwendet werden, um Duplikate zu „eliminieren“.
Es gibt folgende Funktionen:
Betrag, Menge, Anzahl der verschiedenen, Maximum, Minimum, Durchschnitt.
Beispiel 1:
WÄHLEN
Verkauf von Waren und Dienstleistungen. Nomenklatur,
SUM(Sales of GoodsServicesGoods.Quantity) AS Menge,
SUM(Sales of GoodsServicesGoods.Amount) AS Betrag
AUS
GRUPPIERE NACH
Verkauf von Waren und Dienstleistungen. Nomenklatur
Die Anfrage empfängt alle Zeilen mit Waren und fasst diese nach Menge und Beträge nach Artikel zusammen.
Beispiel Nr. 2
WÄHLEN
Bankencode,
QUANTITY(DIFFERENT Banks.Link) ALS Anzahl der Duplikate
AUS
Verzeichnis.Banken WIE Banken
GRUPPIERE NACH
Bankencode
In diesem Beispiel wird eine Liste der BICs im Verzeichnis „Banken“ angezeigt und angezeigt, wie viele Duplikate für jeden von ihnen vorhanden sind.
Ergebnisse sind eine Möglichkeit, Daten aus einem System mit hierarchischer Struktur zu erhalten. Aggregatfunktionen können für Zusammenfassungsfelder ebenso wie für Gruppierungen verwendet werden.
Eine der beliebtesten Möglichkeiten, Ergebnisse in der Praxis zu nutzen, ist die Massenabschreibung von Waren.
WÄHLEN
AUS
Dokument. Verkauf von Waren und Dienstleistungen. Waren, wie man Waren und Dienstleistungen verkauft
SORTIERE NACH
ERGEBNISSE
SUMME(Menge),
SUM(Summe)
VON
Nomenklatur
Das Ergebnis der Abfrage wird wie folgt hierarchisch aussehen:
Allgemeine Ergebnisse
Wenn Sie Summen für alle „Summen“ benötigen, verwenden Sie den Operator „GENERAL“.
WÄHLEN
Verkauf von Waren und Dienstleistungen. Nomenklatur AS-Nomenklatur,
Verkauf von Waren und Dienstleistungen. Link AS-Dokument,
Verkauf von Waren und Dienstleistungen. Menge als Menge,
Verkauf von Waren und Dienstleistungen. Betrag AS Betrag
AUS
Dokument. Verkauf von Waren und Dienstleistungen. Waren, wie man Waren und Dienstleistungen verkauft
SORTIERE NACH
Verkauf von Waren und Dienstleistungen. Link. Datum
ERGEBNISSE
SUMME(Menge),
SUM(Summe)
VON
SIND ÜBLICH,
Nomenklatur
Als Ergebnis der Ausführung der Anfrage erhalten wir das folgende Ergebnis:
Dabei ist eine Gruppierungsebene die Zusammenfassung aller erforderlichen Felder.
Der ORDER BY-Operator wird verwendet, um das Ergebnis einer Abfrage zu sortieren.
Die Sortierung nach primitiven Typen (String, Zahl, Boolescher Wert) erfolgt nach den üblichen Regeln. Bei Referenztypfeldern erfolgt die Sortierung nach der internen Darstellung des Links (dem eindeutigen Bezeichner) und nicht nach Code oder Referenzdarstellung.
WÄHLEN
AUS
Verzeichnis.Nomenklatur AS-Nomenklatur
SORTIERE NACH
Name
Die Anfrage zeigt eine alphabetisch sortierte Liste der Namen im Nomenklaturverzeichnis an.
Automatische Bestellung
Das Ergebnis einer Abfrage ohne Sortierung ist eine chaotisch dargestellte Menge von Zeilen. Entwickler der 1C-Plattform garantieren nicht, dass Zeilen bei der Ausführung identischer Abfragen in derselben Reihenfolge ausgegeben werden.
Wenn Sie Tabellendatensätze in einer konstanten Reihenfolge anzeigen müssen, müssen Sie das Auto-Order-Konstrukt verwenden.
WÄHLEN
Nomenklatur.Name AS Name
AUS
Verzeichnis.Nomenklatur AS-Nomenklatur
AUTOMATISCHE BESTELLUNG
Virtuelle Tabellen in 1C sind ein einzigartiges Merkmal der 1C-Abfragesprache, das in anderen ähnlichen Syntaxen nicht zu finden ist. Eine virtuelle Tabelle ist eine schnelle Möglichkeit, Profilinformationen aus Registern abzurufen.
Jeder Registertyp verfügt über einen eigenen Satz virtueller Tabellen, die je nach Registereinstellungen unterschiedlich sein können.
Für den Lösungsentwickler werden die Daten einer (virtuellen) Tabelle entnommen, tatsächlich entnimmt die 1C-Plattform jedoch viele Tabellen und wandelt sie in die erforderliche Form um.
WÄHLEN
Produkte in Lagerbeständen und Umsatz. Nomenklatur,
ProductsInWarehousesRemainingAndTurnover.QuantityInitialRemaining,
ProductsInWarehousesRemainsAndTurnover.QuantityTurnover,
GoodsInWarehousesRemainsAndTurnover.QuantityIncoming,
GoodsInWarehousesRemainsAndTurnover.QuantityConsumption,
ProductsInWarehousesRemainingsAndTurnover.QuantityFinalRemaining
AUS
Registrieren Sie Accumulations.GoodsInWarehouses.RemainsAndTurnover AS GoodsInWarehousesRemainsAndTurnoverMit dieser Abfrage können Sie schnell eine große Datenmenge abrufen.
Optionen für virtuelle Tische
Ein sehr wichtiger Aspekt bei der Arbeit mit virtuellen Tabellen ist die Verwendung von Parametern. Virtuelle Tabellenparameter sind spezielle Parameter zur Auswahl und Konfiguration.
Für solche Tabellen gilt es als falsch, die Auswahl in der „WHERE“-Konstruktion zu verwenden. Zusätzlich zur Tatsache, dass die Abfrage suboptimal wird, ist es möglich, falsche Daten zu erhalten.
Ein Beispiel für die Verwendung dieser Parameter:
Sammelregister. Waren in Lagern. Salden und Umsätze (& Beginn der Periode, & Ende der Periode, Monat, Bewegungen und Grenzen der Periode, Nomenklatur = & erforderliche Nomenklatur)
Algorithmus für virtuelle Tabellen
Beispielsweise speichert die am häufigsten verwendete virtuelle Tabelle vom Typ „Remains“ Daten aus zwei physischen Tabellen – Salden und Bewegungen.
Bei Verwendung einer virtuellen Tabelle führt das System die folgenden Manipulationen durch:
Solche einfachen Maßnahmen können die Leistung des Gesamtsystems erheblich verbessern.
Abfrage Ersteller– ein in das 1C Enterprise-System integriertes Tool, das die Entwicklung von Datenbankabfragen erheblich erleichtert.
Der Abfrage-Generator verfügt über eine recht einfache, intuitive Benutzeroberfläche. Schauen wir uns dennoch die Verwendung des Abfragekonstruktors genauer an.
Der Abfragetextkonstruktor wird über das Kontextmenü (rechte Maustaste) an der gewünschten Stelle im Programmcode gestartet.
Schauen wir uns die einzelnen Registerkarten des Designers genauer an. Die Ausnahme bildet die Registerkarte „Builder“, die Gegenstand einer weiteren Diskussion ist.
Auf dieser Registerkarte werden die Datenquelle und die Felder angegeben, die im Bericht angezeigt werden müssen. Im Wesentlichen werden hier die Konstruktionen SELECT.. FROM beschrieben.
Die Quelle kann eine physische Datenbanktabelle, eine virtuelle Registertabelle, temporäre Tabellen, verschachtelte Abfragen usw. sein.
Im Kontextmenü virtueller Tabellen können Sie Parameter für virtuelle Tabellen festlegen:
Die Registerkarte dient zur Beschreibung von Verbindungen mehrerer Tabellen und erstellt Konstruktionen mit dem Wort VERBINDUNG.
Auf dieser Registerkarte bietet Ihnen das System die Möglichkeit, die erforderlichen Felder des Tabellenergebnisses zu gruppieren und zusammenzufassen. Beschreibt die Verwendung der Konstruktionen GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF DIFFERENT.
Verantwortlich für alles, was im Anfragetext nach der WHERE-Konstruktion steht, also für alle Bedingungen, die an die empfangenen Daten gestellt werden.
Tab Zusätzlich vollgestopft mit allen möglichen Parametern, die sehr wichtig sind. Schauen wir uns die einzelnen Eigenschaften an.
Gruppierung Datensätze auswählen:
Gruppierung Anfragetyp bestimmt, um welche Art von Anfrage es sich handelt: Datenabruf, Erstellung einer temporären Tabelle oder Zerstörung einer temporären Tabelle.
Darunter befindet sich eine Flagge Empfangene Daten zur späteren Änderung sperren. Damit können Sie die Möglichkeit zum Festlegen einer Datensperre aktivieren, die die Sicherheit der Daten vom Moment des Lesens bis zur Änderung gewährleistet (nur relevant für den automatischen Sperrmodus, Design FÜR ÄNDERUNG).
Auf dieser Registerkarte des Abfrage-Designers können Sie die Möglichkeit festlegen, verschiedene Tabellen und Aliase zu verknüpfen (das HOW-Konstrukt). Die Tabellen sind auf der linken Seite angegeben. Wenn Sie die Flags gegenüber der Tabelle setzen, wird die UNITE-Konstruktion verwendet, andernfalls - UNITE ALL (Unterschiede zwischen den beiden Methoden). Auf der rechten Seite wird die Entsprechung von Feldern in verschiedenen Tabellen angezeigt. Wenn die Entsprechung nicht angegeben ist, gibt die Abfrage NULL zurück.
Dies gibt die Reihenfolge an, in der die Werte sortiert werden (ORDER BY) – absteigend (DESC) oder aufsteigend (ASC).
Es gibt auch eine interessante Flagge - Automatische Bestellung(in der Anfrage - AUTOMATISCHE BESTELLUNG). Standardmäßig zeigt das 1C-System Daten in einer „chaotischen“ Reihenfolge an. Wenn Sie dieses Flag setzen, sortiert das System die Daten nach internen Daten.
Auf der Registerkarte „Abfrage-Designer“ können Sie neue Abfragen erstellen und diese auch als Navigation verwenden. Im Anfragetext werden Pakete durch das Symbol „;“ (Komma) getrennt.
In der unteren linken Ecke des Anfragedesigners befindet sich ein Anfrage-Button, mit dem Sie jederzeit den Anfragetext einsehen können:
In diesem Fenster können Sie Anpassungen an der Anfrage vornehmen und diese ausführen.
Die Abfragekonsole ist eine einfache und bequeme Möglichkeit, komplexe Abfragen zu debuggen und schnell Informationen abzurufen. In diesem Artikel werde ich versuchen, die Verwendung der Abfragekonsole zu beschreiben und einen Link zum Herunterladen der Abfragekonsole bereitzustellen.
Schauen wir uns dieses Tool genauer an.
Um mit der Abfragekonsole arbeiten zu können, müssen Sie sie zunächst von irgendwoher herunterladen. Die Behandlungen werden normalerweise in zwei Arten unterteilt: kontrollierte Formen und konventionelle Formen (manchmal werden sie auch als 8.1 und 8.2/8.3 bezeichnet).
Ich habe versucht, diese beiden Ansichten in einer Verarbeitung zu kombinieren – das gewünschte Formular öffnet sich im gewünschten Betriebsmodus (im verwalteten Modus funktioniert die Konsole nur im Thick-Modus).
Beginnen wir mit der Betrachtung der Abfragekonsole mit einer Beschreibung des Hauptverarbeitungsfensters:
Im Header der Abfragekonsole sehen Sie die Ausführungszeit der letzten Abfrage mit Millisekundengenauigkeit und können so verschiedene Designs hinsichtlich der Leistung vergleichen.
Die erste Schaltflächengruppe in der Befehlsleiste ist für das Speichern aktueller Abfragen in einer externen Datei zuständig. Das ist sehr praktisch: Sie können jederzeit wieder eine komplexe Anfrage verfassen. Oder hinterlegen Sie beispielsweise eine Liste mit typischen Beispielen bestimmter Designs.
Links im Feld „Anfrage“ können Sie neue Anfragen erstellen und diese in einer Baumstruktur speichern. Die zweite Schaltflächengruppe ist für die Verwaltung der Anforderungsliste zuständig. Damit können Sie eine Anfrage erstellen, kopieren, löschen und verschieben.
Anforderungsparameter:
Ermöglicht Ihnen, die aktuellen Parameter für die Anfrage festzulegen.
Im Abfrageparameterfenster ist Folgendes interessant:
Legen Sie einen Parameter mit einer Werteliste fest Es ist ganz einfach: Klicken Sie einfach bei der Auswahl eines Parameterwerts auf die Schaltfläche zum Löschen des Werts (Kreuz). Das System fordert Sie auf, den Datentyp auszuwählen, in dem Sie „Werteliste“ auswählen müssen:
Außerdem gibt es im oberen Bereich eine Schaltfläche zum Aufrufen der Abfragekonsoleneinstellungen:
Hier können Sie Parameter für das automatische Speichern von Abfragen und Parameter für die Abfrageausführung angeben.
Der Anfragetext wird in das Konsolenanfragefeld eingegeben. Dies kann durch einfaches Eingeben eines Abfragetests oder durch Aufrufen eines speziellen Tools – des Abfragedesigners – erfolgen.
Der 1C 8-Abfragedesigner wird über das Kontextmenü (rechte Maustaste) aufgerufen, wenn Sie auf das Eingabefeld klicken:
Außerdem gibt es in diesem Menü nützliche Funktionen wie das Löschen oder Hinzufügen von Zeilenumbrüchen („|“) zur Anfrage oder das Empfangen des Anfragecodes in dieser praktischen Form:
Anfrage = Neue Anfrage;
Request.Text = ”
|AUSWÄHLEN
| Währungen.Link
|VON
| Directory.Currencies AS Currencies“;
RequestResult = Request.Execute();
Im unteren Feld der Abfragekonsole wird das Abfrageergebnisfeld angezeigt, weshalb diese Verarbeitung erstellt wurde:
Außerdem kann die Abfragekonsole zusätzlich zur Liste Daten in Form eines Baums anzeigen – für Abfragen, die Summen enthalten.
Einer der wichtigsten Punkte zur Steigerung der Produktivität von 1C Enterprise 8.3 ist OptimierungAnfragen. Dieser Punkt ist auch sehr wichtig, wenn Bestehen der Zertifizierung. Im Folgenden werden wir über typische Gründe für nicht optimale Abfrageleistung und Optimierungsmethoden sprechen.
Es ist notwendig, Filter nur über die VT-Parameter auf die Details der virtuellen Tabelle anzuwenden. Unter keinen Umständen sollten Sie das WHERE-Konstrukt zur Auswahl in einer virtuellen Tabelle verwenden, da dies aus Optimierungssicht ein schwerwiegender Fehler ist. Bei der Auswahl über WHERE erhält das System tatsächlich ALLE Datensätze und wählt erst dann die erforderlichen aus.
RECHTS:
WÄHLEN
AUS
Register der Ansammlungen. Gegenseitige Abrechnungen mit Teilnehmern von Organisationen. Salden (
,
Organisation = &Organisation
UND individuell = &individuell) WIE gegenseitige Abrechnung mit Teilnehmern von Organisationen Salden
FALSCH:
WÄHLEN
Gegenseitige Abrechnungen mit Teilnehmern von Organisationssalden. Betragssaldo
AUS
Register der Ansammlungen. Gegenseitige Abrechnungen mit Teilnehmern von Organisationen. Salden (,) WIE Gegenseitige Abrechnungen mit Teilnehmern von Organisationen Salden
WO
Gegenseitige Abrechnung mit Teilnehmern von Organisationssalden. Organisation = & Organisation
UND Gegenseitige Abrechnung mit Salden von Teilnehmern von Organisationen. Einzelperson = &Einzelperson
Beim Empfang von Daten eines komplexen Typs in einer Abfrage durch einen Punkt verbindet das System mit einem Left-Join genau so viele Tabellen, wie im Feld des komplexen Typs mögliche Typen vorhanden sind.
Beispielsweise ist es für die Optimierung höchst unerwünscht, auf das Registerdatensatzfeld – Registrar – zuzugreifen. Der Registrar verfügt über einen zusammengesetzten Datentyp, zu dem alle möglichen Dokumenttypen gehören, die Daten in das Register schreiben können.
FALSCH:
WÄHLEN
Datensatzsatz.Recorder.Datum,
RecordSet.Quantity
AUS
RegisterAccumulations.ProductsOrganizations AS SetRecords
Das heißt, eine solche Abfrage greift tatsächlich nicht auf eine Tabelle, sondern auf 22 Datenbanktabellen zu (dieses Register hat 21 Registrartypen).
RECHTS:
WÄHLEN
AUSWAHL
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
THEN EXPRESS(ProductsOrganization.Registrar AS Document.Sales of GoodsServices).Date
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).Date
ENDE ALS DATUM,
ProductsOrg.Quantity
AUS
RegisterAccumulations.ProductsOrganizations AS ProductsOrganization
Oder die zweite Möglichkeit besteht darin, solche Informationen zu den Details hinzuzufügen, in unserem Fall beispielsweise das Hinzufügen eines Datums.
RECHTS:
WÄHLEN
ProdukteOrganisationen.Datum,
ProdukteOrganisationen.Menge
AUS
Sammelregister. Güter von Organisationen AS Güter von Organisationen
Aus Optimierungsgründen ist die Verwendung von Unterabfragen in Join-Bedingungen nicht akzeptabel, da dies die Abfrage erheblich verlangsamt. In solchen Fällen empfiehlt sich der Einsatz einer VT. Zum Herstellen einer Verbindung müssen Sie nur Metadaten und VT-Objekte verwenden, nachdem Sie diese zuvor anhand von Verbindungsfeldern indiziert haben.
FALSCH:
WÄHLEN …
LINKS BEITRETEN (
AUSWÄHLEN AUS RegisterInformation.Limits
WO …
GRUPPIERE NACH...
) VON …
RECHTS:
WÄHLEN …
PUT-Limits
VON Informationsregister.Limits
WO …
GRUPPIERE NACH...
INDEX NACH...;WÄHLEN …
VON Dokument. Verkauf von Waren und Dienstleistungen
LEFT JOIN-Grenzwerte
VON …;
Es gibt Situationen, in denen das System beim Verbinden eines virtuellen Tisches mit anderen nicht optimal funktioniert. Um die Leistung der Abfrage zu optimieren, können Sie in diesem Fall versuchen, die virtuelle Tabelle in einer temporären Tabelle zu platzieren. Vergessen Sie nicht, die verknüpften Felder in der Abfrage der temporären Tabelle zu indizieren. Dies liegt daran, dass VTs häufig in mehreren physischen DBMS-Tabellen enthalten sind. Daher wird eine Unterabfrage zu deren Auswahl erstellt, und das Problem ähnelt dem vorherigen Punkt.
Einer der häufigsten Fehler beim Schreiben von Abfragen ist die Verwendung von Bedingungen für nicht indizierte Felder, was widersprüchlich ist Regeln zur Abfrageoptimierung. Das DBMS kann eine Abfrage nicht optimal ausführen, wenn die Abfrage eine Auswahl für nicht indizierbare Felder umfasst. Wenn Sie eine temporäre Tabelle verwenden, müssen Sie auch die Verbindungsfelder indizieren.
Für jede Bedingung muss ein passender Index vorhanden sein. Ein geeigneter Index ist einer, der die folgenden Anforderungen erfüllt:
Wenn das DBMS nicht die richtigen Indizes auswählt, wird die gesamte Tabelle gescannt – dies wirkt sich sehr negativ auf die Leistung aus und kann zu einer längeren Blockierung des gesamten Satzes von Datensätzen führen.
Das ist alles, in diesem Artikel wurden die grundlegenden Aspekte der Abfrageoptimierung behandelt, die jeder 1C-Experte kennen sollte.
Ein sehr nützlicher kostenloser Videokurs zur Abfrageentwicklung und -optimierung. Ich empfehle dringend für Anfänger und mehr!
Anfragen dienen dazu, Informationen aus der Datenbank zu extrahieren und zu verarbeiten, um sie dem Benutzer in der erforderlichen Form bereitzustellen. Unter Verarbeitung versteht man hier das Gruppieren von Feldern, das Sortieren von Zeilen, das Berechnen von Summen usw. Sie können Daten nicht mithilfe von Abfragen in 1C ändern!
Die Anfrage wird gemäß den gegebenen Anweisungen ausgeführt − Anfragetext. Der Anforderungstext wird entsprechend der Syntax und den Regeln erstellt Abfragesprache. Die Abfragesprache 1C:Enterprise 8 basiert auf dem Standard SQL, weist aber einige Unterschiede und Erweiterungen auf.
Das allgemeine Schema der Bearbeitung einer Anfrage besteht aus mehreren aufeinanderfolgenden Phasen:
1. Objekt Anfrage hat das Grundstück Text, dem Sie den Anfragetext zuordnen müssen.
// Variante 1
Anfrage = Neue Anfrage;
Anfrage . Text =
"WÄHLEN
| Währungskurse.Zeitraum,
| Währungskurse.Währung,
| Währungskurse.Kurs
|VON
|WO
;// Option 2
Anfrage = Neue Anfrage("WÄHLEN
| Währungskurse.Zeitraum,
| Währungskurse.Währung,
| Währungskurse.Kurs
|VON
| Informationsregister.Währungskurse AS Währungskurse
|WO
| Währungskurse.Currency = &Currency");
2. Das Einstellen von Parameterwerten erfolgt mit der Methode SetParameter(< Имя>, < Значение>) . Parameter im Anfragetext sind durch das Symbol „ & " und werden normalerweise in Auswahlbedingungen (WHERE-Abschnitt) und in virtuellen Tabellenparametern verwendet.
Anfrage);
3. Nach der Zuweisung des Textes und der Einstellung der Parameter muss die Anfrage ausgeführt und das Ausführungsergebnis erhalten werden. Die Ausführung erfolgt durch die Methode Execute(), die ein Objekt zurückgibt Abfrageergebnis. Aus dem Abfrageergebnis können Sie:
// Eine Probe erhalten
Probe = Abfrageergebnis. Wählen();// Eine Wertetabelle abrufen
RequestResult = Anfrage. Laufen();
Tisch = Abfrageergebnis. Entladen();
4. Sie können die Auswahl des Abfrageergebnisses mithilfe einer Schleife umgehen:
Tschüss Sample.Next()-Schleife
Bericht(Auswahl.Kurs);
EndCycle;
Ein vollständiges Beispiel für die Arbeit mit einer Anfrage könnte so aussehen:
// Stufe 1. Erstellen einer Anfrage und Festlegen des Anfragetextes
Anfrage = Neue Anfrage;
Anfrage . Text =
"WÄHLEN
| Währungskurse.Zeitraum,
| Währungskurse.Währung,
| Währungskurse.Kurs
|VON
| Informationsregister.Währungskurse AS Währungskurse
|WO
| Währungskurse.Currency = &Currency";// Stufe 2. Parameter einstellen
Anfrage . SetParameter("Currency" , SelectedCurrency);// Stufe 3. Abfrage ausführen und Beispiel abrufen
RequestResult = Anfrage. Laufen();
Probe = Abfrageergebnis. Wählen();// Durchlaufen der Auswahl
Tschüss Sample.Next()-Schleife
Bericht(Auswahl.Kurs);
EndCycle;
Der Anfragetext besteht aus mehreren Abschnitten:
Nur der erste Abschnitt ist obligatorisch.
Die Verwendung wird von der 1C-Abfragesprache unterstützt temporäre Tabellen– Tabellen, die als Ergebnis einer Abfrage erhalten und vorübergehend gespeichert werden.
Es kommt häufig vor, dass Sie nicht Datenbanktabellen als Quelle einer Abfrage verwenden müssen, sondern das Ergebnis der Ausführung einer anderen Abfrage. Dieses Problem kann mithilfe verschachtelter Abfragen oder gelöst werden temporäre Tabellen. Durch die Verwendung temporärer Tabellen können Sie den Text einer komplexen Abfrage vereinfachen, indem Sie ihn in seine Bestandteile aufteilen. Außerdem können Sie in einigen Fällen die Ausführung der Abfrage beschleunigen und die Anzahl der Sperren reduzieren. Um mit temporären Tabellen zu arbeiten, verwenden Sie das Objekt Stundenplan-Manager. Eine temporäre Tabelle wird mit dem Schlüsselwort PLACE gefolgt vom Namen der temporären Tabelle erstellt.
ManagerVT = Neuer TemporaryTablesManager;
Anfrage = Neue Anfrage;
Anfrage . ManagerTemporaryTables = ManagerVT;Anfrage . Text =
"WÄHLEN
| Währungen.Code,
| Währungen.Name
|In Währung platzieren
|VON
| Verzeichnis.Währungen AS Währungen";RequestResult = Anfrage. Ausführen();
Um die temporäre VTVcurrency-Tabelle in anderen Abfragen zu verwenden, müssen Sie diesen Abfragen einen gemeinsamen temporären Tabellenmanager zuweisen – VT Manager.
Batch-Anfrage ist eine Anfrage, die mehrere durch das Zeichen „;“ getrennte Anfragen enthält. Bei der Ausführung einer Batch-Abfrage werden alle darin enthaltenen Abfragen nacheinander ausgeführt und die Ergebnisse aller temporären Tabellen stehen allen nachfolgenden Abfragen zur Verfügung. Die explizite Zuweisung eines temporären Tabellenmanagers zu Batch-Abfragen ist nicht erforderlich. Wenn kein temporärer Tabellenmanager zugewiesen ist, werden alle temporären Tabellen sofort nach Ausführung der Abfrage gelöscht.
Für Batch-Abfragen steht die Methode ExecuteBatch() zur Verfügung, die alle Abfragen ausführt und ein Array von Ergebnissen zurückgibt. Temporäre Tabellen in einer Batch-Abfrage werden durch eine Tabelle mit einer Zeile und einer Spalte „Count“ dargestellt, in der die Anzahl der Datensätze gespeichert wird. Zum Debuggen von Batch-Anfragen können Sie die Methode verwenden Batch mit Zwischendaten ausführen(): Es gibt den tatsächlichen Inhalt temporärer Tabellen zurück, nicht die Anzahl der Datensätze.
// Beispiel für die Arbeit mit einer Batch-Anfrage
Anfrage = Neue Anfrage;
Anfrage . Text =
"WÄHLEN
| Währungen.Name
|VON
| Verzeichnis.Währungen AS Währungen
|;
|AUSWÄHLEN
| Nomenklatur.Name
|VON
| Verzeichnis. Nomenklatur AS Nomenklatur";Batch-Ergebnis = Anfrage. ExecuteBatch();
TZWährungen =PacketResult[ 0 ]. Entladen();
TZNomenclature = Paketergebnis[ 1 ]. Entladen();// Ein Beispiel für die Verwendung temporärer Tabellen in einer Batch-Anfrage
Anfrage = Neue Anfrage;
Anfrage . Text =
"WÄHLEN
| Produkte. Link zum Produkt
|PLACE VTProducts
|VON
| Verzeichnis.Nomenklatur WIE Produkte
|WO
| Products.Manufacturer = &Manufacturer
|;
|AUSWÄHLEN
| VTTProducts.Product,
| Berufsschule. Menge,
| Berufsschule.Preis,
| Berufsschule.Link AS DocumentReceipts
|VON
| VT-Produkte AS VT-Produkte
| Linkes Verbindungsdokument. Waren- und Dienstleistungseingang. Waren als PTU
| Software VTProducts.Product = PTU.Nomenclature";Anfrage . SetParameter( "Hersteller", Hersteller);
RequestResult = Anfrage. Laufen();
Probe = Abfrageergebnis. Wählen();Tschüss Sample.Next()-Schleife
EndCycle;
Virtuelle Tische- Dabei handelt es sich um Tabellen, die nicht in der Datenbank gespeichert, sondern von der Plattform generiert werden. Im Kern handelt es sich dabei um verschachtelte Abfragen für eine oder mehrere physische Tabellen, die von der Plattform ausgeführt werden. Virtuelle Tabellen erhalten Informationen ausschließlich aus Registern und dienen hauptsächlich der Lösung hochspezialisierter Probleme.
Es gibt folgende virtuelle Tabellen (mögliche Parameter sind in Klammern angegeben):
Wenn Sie mit virtuellen Tabellen arbeiten, sollten Sie Auswahlen in den Parametern virtueller Tabellen anwenden und nicht in der WHERE-Bedingung. Die Ausführungszeit der Abfrage hängt stark davon ab.
Um die Eingabe von Abfragetexten zu beschleunigen, verfügt die Plattform über spezielle Tools: Abfragekonstruktor Und Abfragekonstruktor mit Ergebnisverarbeitung. Um Konstruktoren aufzurufen, müssen Sie mit der rechten Maustaste klicken und das gewünschte Element auswählen:
Konstruktoren können auch über das Hauptmenü aufgerufen werden Text.
Mit dem Abfrage-Builder kann der Programmierer den Abfragetext interaktiv erstellen. Wählen Sie dazu mit der Maus die benötigten Tabellen und Felder aus, stellen Sie Beziehungen, Gruppierungen, Summen usw. her. Dieser Ansatz spart Zeit und eliminiert mögliche Fehler. Als Ergebnis seiner Arbeit generiert der Abfragekonstruktor den Abfragetext.
Der Abfragekonstruktor mit Ergebnisverarbeitung erstellt zusätzlich zur Generierung des Abfragetextes ein vorgefertigtes Codefragment zum Empfangen und Verarbeiten von Daten.
Die Plattform ermöglicht es Ihnen, den Anfragetext mithilfe des Objekts programmgesteuert zu erstellen und zu bearbeiten Anforderungsschema. Ein Objekt hat eine einzige Eigenschaft Stapel von Anfragen, in dem das Objekt die Eigenschaften aller aktuell bearbeiteten Abfragen speichert. Das RequestSchema-Objekt unterstützt die folgenden Methoden:
FindParameters() – gibt die Anforderungsparameter zurück.
Schauen wir uns ein Beispiel für die Arbeit mit dem RequestSchema-Objekt an. Um den Anforderungstext programmgesteuert zu generieren
SORTIERE NACH
Währungen.Code
Der eingebettete Sprachcode könnte so aussehen:
RequestScheme = Neues RequestScheme;
Paket 1 = RequestScheme. RequestBatch[ 0 ];
Betreiber1 = Paket1. Operatoren[ 0 ];
// Quelle hinzufügen
RegisterTable = Operator1. Quellen. Hinzufügen( „Verzeichnis.Währungen“, „Währungen“ );
// Felder hinzufügen
FieldLink = Operator1. Auswählbare Felder. Add("Currencies.Link" , 0 );
FieldCode = Operator1. Auswählbare Felder. Add("Currencies.Code", 1);
// Feldaliase angeben
Paket 1 . Spalten[ 0 ]. Alias = „Währung“ ;
Paket 1 . Spalten[ 1 ]. Alias = „Code“ ;
// eine Bedingung hinzufügen
Betreiber1 . Auswahl. Hinzufügen( „NICHT FlagDeletion“);
// Bestellung hinzufügen
Paket 1 . Befehl. Add(FieldCode);
RequestText = RequestScheme. GetQueryText();
Angenommen, wir haben ein Verzeichnis Nomenklatur mit Angaben: „Code“, „Name“, „Artikel“. Dieses Verzeichnis kann in Form einer Tabelle mit gleichnamigen Feldern dargestellt werden:
Nomenklatur
Der Zweck der Abfrage besteht darin, der Datenbank mitzuteilen, was wir auswählen möchten und woher. Zu diesem Zeitpunkt gehen wir davon aus, dass das Ergebnis der Abfrage eine bestimmte Tabelle ist. Nehmen wir an, unser Ziel ist es, alle Details aus dem Verzeichnis „Nomenklatur“ zu erhalten, dann wird der Anfragetext wie folgt aussehen:
Request.Text = "
|AUSWÄHLEN
| Nomenklatur.Code,
| Nomenklatur.Name,
| Nomenklatur.Artikel
|VON
Abfrageergebnis
Ein paar Klarstellungen. Im Abschnitt WÄHLEN(SELECT) listen wir auf, welche Felder bestimmter Tabellen wir in der Ausgabe sehen möchten. Im Kapitel AUS(VON) Wir sagen, von welchen Tischen wir sie nehmen sollen. Bitte beachten Sie, dass das Schlüsselwort WIE(AS) Wir deklarieren einen Alias für die Tabelle Verzeichnis.Nomenklatur, Sie können fast jeden Namen verwenden, mit Ausnahme der Schlüsselwörter und Zahlen der 1C 8-Abfragesprache. Für Felder kann auch ein Alias deklariert werden:
Request.Text = "
|AUSWÄHLEN
| Warencode AS-Code,
| Warenname AS Beschreibung,
| Waren.Artikel WIE Artikel
|VON
| Verzeichnis.Nomenklatur AS Waren"
Die Ausgabe wird eine Tabelle der Form sein:
Sie können auch alle Felder aus der Tabelle auswählen mit „ *
". Es ist erwähnenswert, dass in diesem Fall eine Reihe von Standarddetails, die für ein Verzeichnisobjekt definiert sind, zu den Feldern „Code“, „Name“, „Artikel“ hinzugefügt werden, wie zum Beispiel: „Löschmarkierung“, „Vordefiniert“. usw. Alle anzeigen Sie können Standarddetails auflisten, indem Sie auf der Registerkarte auf die gleichnamige Schaltfläche klicken
Daten irgendein Nachschlagewerk. Beispiel:
Request.Text = "
|SELECT *
|VON
| Verzeichnis. Nomenklatur AS Nomenklatur";
Wenn Felder aus einer Tabelle ausgewählt werden, können Sie ohne Punkt darauf zugreifen, aber niemand schreibt so - es ist nicht lesbar und in der Regel erscheint mehr als eine Tabelle in der Abfrage. Der folgende Anforderungstext wird erfolgreich ausgeführt:
Request.Text = "
|AUSWÄHLEN
| Code,
| Name,
| Herstellerkürzel
|VON
| Verzeichnis.Nomenklatur";
Grundsätzlich darf die Anfrage keinen Abschnitt enthalten AUS, aber in der Regel schreibt niemand so:
Request.Text = "
|AUSWÄHLEN
| Verzeichnis.Nomenklatur.Code,
| Verzeichnis.Nomenklatur.Name,
| Directory.Nomenclature.Article";
Die Anfrage kann nicht nur Infobase-Felder umfassen, sondern auch Felder primitiver Typen, zum Beispiel:
Request.Text = "
|AUSWÄHLEN
| Nomenklatur.Code,
| Nomenklatur.Name,
| Nomenklatur. Artikelnummer,
//Nummer
| 3000 AS Maximalkosten,
//Datum
| DATETIME(2013, 1, 1) AS Lieferdatum,
//boolean
| WAHRHEIT WIE bezahlt,
//Linie
| „MebelStroy“ ALS HERSTELLER
|VON
| Verzeichnis. Nomenklatur AS Nomenklatur";
VERSCHIEDEN– gibt an, dass wir als Ergebnis der Abfrage nur Datensätze mit unterschiedlichen Feldern sehen möchten; doppelte Datensätze werden einfach verworfen:
Request.Text = "
|VERSCHIEDENES AUSWÄHLEN
| Nomenklatur.Name
|VON
| Verzeichnis. Nomenklatur AS Nomenklatur";
Als Ergebnis der Ausführung dieser Abfrage wird kein einziger doppelter Name angezeigt.
ERSTE - gibt an, dass wir nur die ersten n Datensätze im Abfrageergebnis sehen möchten:
Request.Text = "
|ERST 100 AUSWÄHLEN
| Nomenklatur.Name
|VON
| Verzeichnis. Nomenklatur AS Nomenklatur";
ERLAUBT- schränkt die Auswahl entsprechend den Benutzerrechten ein. Ich empfehle Ihnen, immer dieses Schlüsselwort zu verwenden, da Sie nie wissen, wann Sie Benutzern Rechte zuweisen möchten.
; Verschachtelte Abfragen (in Entwicklung).
Empfang von Waren und Dienstleistungen Und Rücksendung der Ware an den Lieferanten für den angegebenen Zeitraum.
Neue Registerkarten: Gewerkschaften/Aliase.
Mit 1C Query Builder können Sie Abfragekombinationen erstellen. Mit ihrer Hilfe können Sie Daten aus mehreren Abfragen nacheinander ausgeben, ohne Verbindungen zu verwenden. Die einzige Bedingung für die Zusammenführung ist, dass in jeder einzelnen Anfrage derselbe Satz von Feldern vorhanden ist.
Gehen Sie im Designer auf die Registerkarte Gewerkschaften/Aliase. Es dient zum Erstellen von Abfrageverknüpfungen und zum Festlegen von Aliasnamen für Abfragefelder. Feldaliase werden benötigt, wenn Sie mit den Standardfeldnamen der Datenbank nicht zufrieden sind. Besteht ein Abfragefeld nur aus einem Datenbanktabellenfeld, ist dafür kein Alias erforderlich. Wenn Sie beim Erstellen eines Felds Abfragesprachenfunktionen verwendet haben, ist ein Alias für ein solches Feld erforderlich. Der Abfragedesigner erstellt Standardaliase für solche Felder Feld1…FeldN, können diese Aliase durch die für Sie passenden ersetzt werden.
Schauen wir uns die Abschnitte der Registerkarte an Gewerkschaften/Aliase:
Schauen wir uns die Lösung des zu Beginn der Lektion gegebenen Problems an. Ich möchte Sie an die Bedingungen erinnern:
Aufgabe: Per Abfrage alle gebuchten Belege selektieren Empfang von Waren und Dienstleistungen Und Rücksendung der Ware an den Lieferanten für den angegebenen Zeitraum.
Als Ergebnis erhalten wir eine Anfrage mit folgendem Text.