Computer und moderne Geräte

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.).

Beschreibung von Abfragesprachenkonstrukten

Abfragestruktur

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.

Allgemeine Designs

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)

Verbindungen

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 Banken

VON

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 Kunden

INNER JOIN
Verzeichnis.Banken WIE Banken

VON
Clients.Name = Banks.Name

Diese Abfrage gibt nur Zeilen zurück, in denen die Bank und die Gegenpartei denselben Namen haben.

Verbände

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

Gruppierung

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

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.

Arrangieren

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 Tische

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.

  • Schnitt des ersten;
  • Ausschnitt aus letzterem.
  • Reste;
  • Revolutionen;
  • Salden und Umsätze.
  • Bewegungen von Subconto;
  • Revolutionen;
  • Geschwindigkeit Dt Kt;
  • Reste;
  • Salden und Umsätze
  • Unterkonto.
  • Base;
  • Diagrammdaten;
  • tatsächliche Gültigkeitsdauer.

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 GoodsInWarehousesRemainsAndTurnover

Mit 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:

  1. In der Summentabelle erhalten wir den nächstliegenden berechneten Wert hinsichtlich Datum und Maßen.
  2. Wir „addieren“ den Betrag aus der Bewegungstabelle zum Betrag aus der Summentabelle.


Solche einfachen Maßnahmen können die Leistung des Gesamtsystems erheblich verbessern.

Verwenden des Abfrage-Generators

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.

Beschreibung des 1C-Anfragekonstruktors

Schauen wir uns die einzelnen Registerkarten des Designers genauer an. Die Ausnahme bildet die Registerkarte „Builder“, die Gegenstand einer weiteren Diskussion ist.

Registerkarte „Tabellen und Felder“.

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:

Registerkarte „Verbindungen“.

Die Registerkarte dient zur Beschreibung von Verbindungen mehrerer Tabellen und erstellt Konstruktionen mit dem Wort VERBINDUNG.

Registerkarte „Gruppierung“.

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.

Registerkarte „Bedingungen“.

Verantwortlich für alles, was im Anfragetext nach der WHERE-Konstruktion steht, also für alle Bedingungen, die an die empfangenen Daten gestellt werden.

Registerkarte „Erweitert“.

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:

  • Erst ein– ein Parameter, der nur N Datensätze an die Abfrage zurückgibt (der FIRST-Operator)
  • Keine Duplikate– stellt die Einzigartigkeit der empfangenen Datensätze sicher (Operator DIFFERENT)
  • Erlaubt– ermöglicht Ihnen, nur die Datensätze auszuwählen, die das System unter Berücksichtigung (ZULÄSSIGE Konstruktion) zur Auswahl zulässt.

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).

Registerkarte „Verknüpfungen/Aliase“.

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.

Registerkarte „Bestellung“.

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.

Registerkarte „Abfragestapel“.

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.

Schaltfläche „Abfrage“ im Abfrage-Designer

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.


Verwenden der Abfragekonsole

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.

Laden Sie die 1C-Abfragekonsole herunter

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).

Beschreibung der 1C-Abfragekonsole

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.

  • AusführenAnfrage– einfache Ausführung und Ergebnisse
  • Paket ausführen– ermöglicht Ihnen die Anzeige aller Zwischenabfragen in einem Abfragestapel
  • Temporäre Tabellen anzeigen– ermöglicht es Ihnen, die Ergebnisse anzuzeigen, die temporäre Abfragen für eine Tabelle zurückgeben

Anforderungsparameter:

Ermöglicht Ihnen, die aktuellen Parameter für die Anfrage festzulegen.

Im Abfrageparameterfenster ist Folgendes interessant:

  • Taste Von der Anfrage erhalten Findet zur Vereinfachung für den Entwickler automatisch alle Parameter in der Anfrage.
  • Flagge Gemeinsame Parameter für alle Anfragen– Wenn es installiert ist, löscht seine Verarbeitung die Parameter nicht, wenn in der allgemeinen Liste der Anfragen von Anfrage zu Anfrage gewechselt wird.

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.

Abfrageoptimierung

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.

Auswahlen in einer virtuellen Tabelle mithilfe des WHERE-Konstrukts

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

Ermitteln des Werts eines Felds eines komplexen Typs mithilfe eines Punkts

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

Unterabfragen in einer Join-Bedingung

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 …;

Datensätze mit virtuellen Tabellen verbinden

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.

Verwendung von Auswahlen basierend auf nicht indizierten Feldern

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:

  1. Der Index enthält alle in der Bedingung aufgeführten Felder.
  2. Diese Felder stehen ganz am Anfang des Index.
  3. Diese Auswahlen sind aufeinanderfolgend, das heißt, Werte, die nicht an der Abfragebedingung beteiligt sind, werden nicht zwischen ihnen „eingeklemmt“.

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.

Verwendung von logischem ODER in Bedingungen

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.

Schema der Arbeit mit einer Anfrage

Das allgemeine Schema der Bearbeitung einer Anfrage besteht aus mehreren aufeinanderfolgenden Phasen:

  1. Erstellen eines Anfrageobjekts und Festlegen des Anfragetexts;
  2. Anforderungsparameter festlegen;
  3. Eine Anfrage ausführen und das Ergebnis erhalten;
  4. Umgehen des Anfrageergebnisses und Verarbeiten der empfangenen Daten.

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:

  • Holen Sie sich eine Auswahl mit der Select-Methode (< ТипОбхода>, < Группировки>, < ГруппировкиДляЗначенийГруппировок>) ;
  • Laden Sie Werte mithilfe der Upload-Methode in eine Wertetabelle oder einen Wertebaum hoch (< ТипОбхода>) .

// 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;

Zusammensetzung des Anfragetextes

Der Anfragetext besteht aus mehreren Abschnitten:

  1. Beschreibung der Anfrage— Liste auswählbarer Felder und Datenquellen;
  2. Abfragen zusammenführen— Ausdrücke „UNITE“ und „UNITE ALL“;
  3. Ergebnisse organisieren— der Ausdruck „ORDER BY...“;
  4. Automatische Bestellung— Ausdruck „AUTO-BESTELLUNG“;
  5. Beschreibung der Ergebnisse- der Ausdruck „RESULTS ... BY …“.

Nur der erste Abschnitt ist obligatorisch.

Temporäre Tabellen und Batch-Abfragen

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

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):

  • Für Informationsregister:
    • SliceFirst(<Период>, <Условие>) – die frühesten Aufzeichnungen für das angegebene Datum;
    • SliceLast(<Период>, <Условие>) – die neuesten Datensätze für das angegebene Datum;
  • Für Akkumulationsregister:
    • Reste(<Период>, <Условие>) – Salden zum angegebenen Datum;
    • Revolutionen(<НачалоПериода>, <КонецПериода>, <Периодичность>, <Условие>) - Periodentransaktionen;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <Условие>) – Salden und Umsätze für den Zeitraum;
  • Für Buchhaltungsregister:
    • Reste(<Период>, <УсловиеСчета>, <Субконто>, <Условие>) — Salden zum angegebenen Datum nach Konto, Dimensionen und Unterkonten;
    • Revolutionen(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчета>, <Субконто>, <Условие>, <УсловиеКорСчета>, <КорСубконто>) – Umsatz für den Zeitraum im Rahmen von Konten, Messungen, Korr. Konten, Unterkonto, Kor. Unterkonto;
    • RemainsAndTurnover(<НачалоПериода>, <КонецПериода>, <Периодичность>, <МетодДополненияПериодов>, <УсловиеСчета>, <Субконто>, <Условие>) – Salden und Umsätze im Rahmen von Konten, Messungen und Unterkonten;
    • UmsatzDtKt(<НачалоПериода>, <КонецПериода>, <Периодичность>, <УсловиеСчетаДт>, <СубконтоДт>, <УсловиеСчетаКт>, <СубконтоКт>, <Условие>) — Umsatz für den Zeitraum nach Konto Dt, Konto Kt, Subconto Dt, Subconto Kt;
    • BewegungenSubconto(<НачалоПериода>, <КонецПериода>, <Условие>, <Порядок>, <Первые>) – Bewegungen zusammen mit Unterkontowerten;
  • Für Berechnungsregister:
    • Base(<ИзмеренияОсновногоРегистра>, <ИзмеренияБазовогоРегистра>, <Разрезы>, <Условие>) — Grunddaten des Berechnungsregisters;
    • DataGraphics(<Условие>) – Diagrammdaten;
    • ActualActionPeriod(<Условие>) ist die tatsächliche Gültigkeitsdauer.

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.

Abfragekonstruktor

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.

RequestSchema-Objekt

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:

  • SetQueryText(< Текст>) – füllt die Eigenschaft „Abfragepaket“ basierend auf dem übermittelten Anforderungstext;
  • GetQueryText() – gibt den Anforderungstext zurück, der basierend auf der Eigenschaft „Request Packet“ generiert wurde;
  • 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";

Anweisungen des SELECT-Abschnitts

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.

Theoretischer Teil der Lektion Nr. 4

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:

  • Anfragen(roter Rahmen). Dieser Abschnitt enthält eine Tabelle, die alle kombinierten Abfragen anzeigt. Über das Menü oberhalb dieses Abschnitts können Sie neue hinzufügen, vorhandene kopieren, ausgewählte löschen und auch deren Position ändern. Beim Hinzufügen oder Kopieren einer Anfrage wechselt der Designer zur Registerkarte Tabellen und Felder, wo Sie Datenbanktabellen und die erforderlichen Felder für eine neue Abfrage angeben können. Sie können zwischen Abfragen wechseln, indem Sie die Registerkarten verwenden, die auf der rechten Seite des Designers angezeigt werden, wenn neue 1c-Abfragen hinzugefügt werden.

  • In der Tabelle Anfragen zwei Spalten:
    • Name. Wird automatisch im Format eingestellt Anfrage 1…Anfrage N;
    • Keine Duplikate. Legen Sie fest, wann beim Zusammenführen mit einer vorherigen Abfrage doppelte Zeilen ausgeschlossen werden müssen. Es ist zu beachten, dass dieses Flag nur beim Zusammenführen der Anfrage, in der es gesetzt ist, mit der vorherigen Anfrage wirkt.

  • Spitznamen(blauer Rahmen). In diesem Abschnitt können Sie Aliase für Abfragefelder sowie die Korrespondenz von Feldern für kombinierte Abfragen festlegen, sodass sie sich als Ergebnis der Abfrage in derselben Spalte befinden und unter einem Alias ​​angezeigt werden. Wenn die Felder in den zusammengeführten Abfragen den gleichen Namen haben, wird die Entsprechung zwischen ihnen automatisch angepasst. Um den Feldabgleich zu konfigurieren, müssen Sie die Zeile mit dem gewünschten Alias ​​in der Tabelle finden, die erforderliche Abfrage in den Spalten finden und das Feld in der Dropdown-Liste auswählen.

Praktischer Teil der Lektion Nr. 4

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.

  1. Lassen Sie uns eine neue Anfrage erstellen.
  2. Starten wir den Abfrage-Designer.
  3. Wählen wir eine Tabelle aus Empfang von Waren und Dienstleistungen aus dem Thread Dokumentation;
  4. Vom Tisch Empfang von Waren und Dienstleistungen Wählen Sie ein Feld aus Verknüpfung;
  5. Gehen wir zur Registerkarte Bedingungen;
  6. Im Kapitel Felder, lasst uns den Thread eröffnen Empfang von Waren und Dienstleistungen mit der „+“-Taste;
  7. Lasst uns die Requisiten finden Datum Ziehen Sie es in den Abschnitt „Bedingungen“ und wählen Sie den Vergleichsoperator aus Zwischen und geben Sie beispielsweise die Parameter für den Beginn und das Ende des Zeitraums an Beginn der Periode Und Ende des Zeitraums;
  8. Gehen wir zur Registerkarte Gewerkschaften/Aliase.
  9. Fügen Sie eine neue Anfrage hinzu und markieren Sie sie Keine Duplikate es besteht keine Notwendigkeit, es anzusprechen, da wir verschiedene Arten von Dokumenten verwenden;

  10. 1C Query Builder wechselt automatisch zur Registerkarte Tabellen und Felder. Auf der rechten Seite des Fensters sehen Sie, dass die zweite Beitrittsanfrage aktiv ist;


  11. Wiederholen wir die Punkte 1 - 7 für die Tabelle Rücksendung der Ware an den Lieferanten;
  12. Gehen wir noch einmal zur Registerkarte Gewerkschaften/Aliase. In der Alias-Tabelle können Sie die Felder sehen Verknüpfung beide Tabellen befinden sich in derselben Zeile, was bedeutet, dass Links zu beiden Dokumenten als Ergebnis der Abfrage in derselben Spalte gefunden werden;
  13. Ändern wir den Spaltennamen von Verknüpfung An Dokumentieren(Legen Sie den Feldalias fest). Doppelklicken Sie dazu mit der linken Maustaste auf den Feldnamen. Danach können Sie Ihren Namen festlegen und dort schreiben Dokumentieren;

  14. Die Anfrage ist fertig. Klicken Sie unten im Designerfenster auf die Schaltfläche „OK“.

Als Ergebnis erhalten wir eine Anfrage mit folgendem Text.

Wenn Sie einen Fehler bemerken, wählen Sie einen Textabschnitt aus und drücken Sie Strg+Eingabetaste
AKTIE:
Computer und moderne Geräte