Abschnitte der Website
Die Wahl des Herausgebers:
- Unbenutzte Skins nach Spitznamen für Minecraft
- Warum Spiele unter Windows nicht starten Warum Spiele nicht funktionieren
- Laden Sie Minecraft für Android herunter: alle Versionen
- Laden Sie Mods für Minecraft 1 herunter
- Kerlhaut mit 10 englischen Buchstaben
- ModPack Zeus002 Download-Mods hier ist das World Of Tanks-Mod-Pack
- Warum funktioniert Minecraft bei mir nicht?
- Die besten Minecraft-Server mit Mods
- Die besten Mods für Minecraft Mods für Version 1 anzeigen
- Beste Mods für Minecraft Mechanical-Mods für Minecraft 1
Werbung
Ein Teil davon durch eine verschachtelte Abfrage. Funktion zum Erhalten einer Momentaufnahme der neuesten Einträge im Informationsregister |
IN Testkonfiguration Wir verfügen über ein periodisches Informationsregister „PreisNomenklatur“ mit folgenden Quelldaten: Die Abbildung zeigt auch die Struktur der Registry-Metadaten. Wie wir sehen können, enthält das Register die Dimension „Produkt“ mit dem Referenztyp „Produkte“ sowie die numerische Ressource „Preis“ und das Attribut „OldPrice“. Nehmen wir an, wir benötigen in einem Bericht einen Ausschnitt der neuesten Datensätze für Produkte und deren Preise unter der Bedingung, dass der alte Preis kleiner oder gleich 50 ist. Zwei AnfragemöglichkeitenIch sage gleich, dass wir die richtigen und falschen Optionen in Betracht ziehen werden. Beginnen wir mit Letzterem. Dies ist ein Fehler, den unerfahrene Programmierer oft machen. Daher wurde für den Bericht die folgende Abfrage geschrieben: Anfrage = Neue Anfrage; Anfrage. Text = " SELECT | | | | | AUS | Informationsregister. PreiseNomenklaturen. Slice of the Latest HOW-PreiseNomenklaturSlice of the Latest|WO | PreiseNomenklaturSliceNeueste. Alter Preis< = 50 " ; Achten Sie auf die Bedingung im Abschnitt „WO“. Das ist der Hauptfehler! Diese Abfrage gibt keinen einzigen Datensatz zurück, und hier ist der Grund: Bei der Verwendung virtueller Tabellen, in unserem Fall „Last Slice“, werden zuerst Daten gemäß den in der virtuellen Tabelle beschriebenen Bedingungen aus der Datenbank abgerufen, und dann werden die in der beschriebenen Aktionen ausgeführt Abfragetext durchgeführt werden (Gruppierungen, Bedingungen im Abschnitt „WHERE“, Sortierung usw.). Daher gibt die Anfrage in unserem Beispiel kein Ergebnis zurück. Von letzterem erhält er zunächst einen Anteil und setzt erst dann die Bedingung für das Attribut „Alter Preis“. So sieht es im Diagramm aus: Um das Problem richtig zu lösen, muss die Bedingung für das Attribut „Alter Preis“ auf die Bedingungen der virtuellen Tabelle übertragen werden. So sieht der korrekte Anfragetext aus: Anfrage = Neue Anfrage; Anfrage. Text = " AUSWÄHLEN PreiseNomenklaturSliceNeueste. Zeitraum, PreiseNomenklaturSliceNeueste. Produkt, PreiseNomenklaturSliceNeueste. Preis, PreiseNomenklaturSliceNeueste. Alter Preis AUS Informationsregister. PreiseNomenklaturen. SliceLast(, OldPrice< = 50 ) WIE PREISENomenklaturSliceNeueste" Die Abfrage erhält nun die richtigen Daten aufgrund des Slice Aktuelle Preise erhalten unter Berücksichtigung der Konditionen die Voraussetzung „Alter Preis“. ErgebnisseEs versteht sich, dass das oben Gesagte für alle Fälle der Verwendung virtueller Tabellen in Abfragen gilt (für Akkumulationsregister, Abrechnungsregister, Aufgaben usw.). Daraus ergibt sich auch die Hauptregel für die Verwendung virtueller Tabellen: „Achten Sie bei der Verwendung einer virtuellen Tabelle darauf, die Auswahlparameter direkt in der virtuellen Tabelle festzulegen, da die Abfrage sonst unnötige Daten erhält, die dann zur Auswahl verwendet werden.“ : Ein Stück vom Ersten Und Stück vom Letzten Betrachten wir die Arbeit mit diesen virtuellen Tabellen mit 1C. Viel häufiger verwendet Stück vom Letzten, also fangen wir damit an. Mit einem aktuellen Slice können Sie im Rahmen von Messungen den letzten Datensatz des Informationsregisters für ein bestimmtes Datum abrufen. Für die letzte (erste) Slice-Tabelle können zwei Parameter in Klammern, durch Kommas getrennt, angegeben werden. Der erste Parameter enthält das Datum, an dem der Slice erstellt wurde (wenn der Parameter nicht angegeben ist, wird der Slice erstellt). aktuelles Datum). Der zweite Parameter ist eine Bedingung in der 1C-Abfragesprache und ermöglicht Ihnen, verschiedene Auswahlmöglichkeiten festzulegen. In der Regel werden bei diesen Auswahlen Maße verwendet. Das klingt alles ziemlich vage, daher ist es unmöglich, auf ein Beispiel zu verzichten. Das Register enthält die folgenden Einträge Zunächst erhalten wir einen Teil davon ohne Verwendung von Parametern, indem wir die folgende Anfrage ausführen: SELECT PriceSliceLast.Period AS Zeitraum, PriceSliceLast.Product AS Produkt, PriceSliceLast.Supplier AS Lieferant, PriceSliceLast.Amount AS Amount FROM Register Information.Price.SliceLast AS PriceSliceLast Da die Parameter nicht angegeben sind, wird der Slice am aktuellen Datum – 01.02.2017 – durchgeführt. Als Ergebnis erhalten wir die folgende Tabelle Hier sehen wir, dass die Kombination der Dimensionen Produkt + Lieferant einzigartig ist, d. h. Für jede Kombination von Registermessungen wurde die Aufzeichnung mit dem maximalen Datum erstellt und das Aufzeichnungsdatum ist kleiner oder gleich dem aktuellen Datum. Nehmen wir an, wir müssen dasselbe tun, möchten aber Datensätze mit einem Datum erhalten, das kleiner oder gleich dem 15.01.2017 ist. Dazu müssen Sie die Zeile mit der neuesten Slice-Tabelle in der Anfrage wie folgt ändern FROM RegisterInformation.Price.SliceLast(&CutDate,) AS PriceSliceLast Bevor Sie die Anfrage ausführen, müssen Sie ihr natürlich einen Parameter übergeben &Schnittdatum. Nun sieht das Abfrageergebnis so aus Und schließlich stellen wir uns vor, wir müssten einen Schnappschuss der aktuellsten für dasselbe Datum machen, unter der Bedingung, dass wir die Ware haben Bleistift, und der Lieferant Schreibwaren. Geben Sie dazu den zweiten Parameter in der Anfrage an FROM RegisterInformation.Price.Last Cut(&CutDate, Product = &Product AND Supplier = &Supplier) AS PriceLast Cut Als Ergebnis erhalten wir nur einen Datensatz Um sich nicht in all diesen Klammern und Kommas zu verlieren, ist es besser, einen Abfrage-Builder zu verwenden. Ich zeige es Ihnen am Beispiel der letzten Anfrage. Nachdem Sie im Abfrage-Designer eine Tabelle mit einem Ausschnitt der neuesten Tabellen ausgewählt haben, müssen Sie auf die Schaltfläche klicken Optionen für virtuelle Tische und in das sich öffnende Fenster schreiben Es ist nicht schwer zu erraten, dass das Funktionsprinzip für das erste Slice dasselbe ist, außer dass der erste Datensatz nach dem Schnittdatum ausgewählt wird. Nehmen wir an, wir haben eine Aufgabe erhalten, für die der Kunde einen Bericht über die in der Datenbank eingegebenen Dokumente „Verkauf von Waren und Dienstleistungen“ erhalten möchte, und für jedes Dokument muss der Preis aus dem Informationsregister „Artikelpreise“ abgerufen werden ” für das Datum des Dokuments. Der Bericht ist für die Konfigurationsversion 1.3 „Manufacturing Enterprise Management“ geschrieben. Dem Datensatz aus der Dokumententabelle wird ein Datensatz aus der virtuellen Tabelle „Nomenklaturpreise. SliceLast“ gemäß den entsprechenden Bedingungen der Periode, Preisart und Position hinzugefügt. Die Preisart ergibt sich aus den gleichnamigen Belegdetails. Für das Problem gibt es mehrere Möglichkeiten, es zu lösen. Betrachten wir zwei davon: einen Bericht über das Zugangskontrollsystem, der zwei Datensätze verwendet und alle erforderlichen Daten in einer Anfrage erhält. Nun der Reihe nach. Verwenden von ACSUm einen solchen Bericht über das Zugangskontrollsystem zu implementieren, erstellen wir zwei Datensätze im Datenzusammensetzungsschema. Der erste erhält eine Liste der Dokumente, der zweite erhält Preise für Dokumentdaten entsprechend dem ausgewählten Artikel und der Preisart. Die Verbindung zwischen zwei Datensätzen erfolgt nach Artikel, Zeitraum (Belegdatum) und Preisart. Aus dem ersten Satz ist es notwendig, die Parameter „Nomenklatur“, „Preisart“ und „Zeitraum“ in den zweiten Satz zu übertragen. Der erste Datensatz enthält die folgende Abfrage: Die Abfrage wählt aus der Dokumententabelle und dem tabellarischen Teil „Produkte“ folgende Felder aus: „Link“, „Datum“, „Preistyp“, „Nomenklatur“. Schauen wir uns nun den zweiten Datensatz an: Im zweiten Datensatz sollten Sie auf die an die Anfrage übergebenen Parameter achten. Die Liste der auswählbaren Felder enthält die Parameter „Zeitraum“, „Artikel“ und „Preistyp“. Die gleichen Parameter werden in den Parametern der virtuellen Tabelle „Nomenklaturpreise. Slice of Latest“ verwendet. Es ist notwendig, diese Parameter in der anzuzeigen Liste auswählbarer Felder, damit die Werte dieser Parameter vom ersten Satz zum zweiten Satz übertragen werden können. Dies erfolgt mithilfe der Verbindungseinstellungen zwischen Datensätzen auf der Registerkarte „Datensatzverbindungen“ des Datenzusammensetzungsschema-Designers. Kommen wir zu seiner Betrachtung: Das Einrichten von Verbindungen zwischen Datenquellen erfolgt über die Auswahlfelder in der Anfrage. Im zweiten Datensatz haben wir den Auswahlfeldern Abfrageparameter hinzugefügt. Wenn Sie beim Erstellen von Beziehungen zwischen Mengen ein Feld in der Spalte „Parameter“ für die Beziehung auswählen, wird der Wert aus der Spalte „Quellausdruck“ in den „Zielausdruck“ übertragen und der ausgewählte Parameter mit dem entsprechenden Wert gefüllt. Nachdem wir die Berichtsstruktur konfiguriert und generiert haben, erhalten wir folgendes Ergebnis: Der Bericht funktioniert. Betrachten wir nun die Möglichkeiten, den Preis für das Dokumentdatum in einer Anfrage zu erhalten. In einer AnfrageLassen Sie uns einen neuen Bericht mit ähnlichen Ausgabefeldern und Berichtseinstellungen erstellen. Der einzige Unterschied besteht in den Datenquellen. Diesmal enthält der Bericht einen einzelnen Datensatz, in dem alle Dokumentprodukte und die zugehörigen Preise in einer Abfrage ausgewählt werden. Der Anfragetext sieht so aus: "SELECT | DocumentNomenclaturePeriod.Document, | DocumentNomenclaturePeriod.Document.Date AS Date, | DocumentNomenclaturePeriod.Document.PriceType AS TypePrice, | DocumentNomenclaturePeriod.Nomenclature, | PricesNomenclature.Price | FROM | (SELECT | Sales of GoodsServicesProducts. Link AS Document, | SalesTo Sorten von DienstleistungenProdukten.Nomenklatur AS Nomenklatur, | MAXIMUM (Preise der Nomenklatur. Zeitraum) AS Zeitraum | VON | Dokument. Verkäufe von Waren und Dienstleistungen. Waren AS Verkäufe von Waren und Dienstleistungen Waren | LINKE VERBINDUNG Informationsregister. Preise Nomenklatur AS Preise Nomenklatur | Software-Verkäufe von Waren und Dienstleistungen. Nomenklatur = Preise. Nomenklatur. Nomenklatur | Und Verkäufe von Waren und Dienstleistungen. Link. Datum >= Preise. Nomenklatur. Zeitraum | Und Verkäufe von Waren. ServicesGoods.Link.PriceType = PricesNomenclature.TypePrices | | GROUP BY | Verkauf von WarenServicesGoods.Link, | Verkauf von WarenServicesGoods.Nomenclature) AS DocumentNomenclaturePeriod | LINKE VERBINDUNG RegisterInformation.PricesNomenclature AS PricesNomenclatures | BY DocumentNo nomenclaturePeriod.Nomenclature = PricesNomenclature.Nomenclature | Und DocumentNomenclaturePeriod.Document.PriceType = PricesNomenclature.PriceType | Und DocumentNomenclaturePeriod.Period = PricesNomenclature.Period" Das Prinzip der Anfrage besteht darin, das nächstgelegene Datum der Preisänderung für jeden gebrauchten Artikel im tabellarischen Abschnitt des Dokuments zu ermitteln und dann Daten aus der physischen Tabelle „Artikelpreise“ nach Zeitraum, Artikel und Preistyp an das resultierende Abfrageergebnis anzuhängen . Auf den ersten Blick mag die Anfrage kompliziert erscheinen, tatsächlich ist ihre Syntax jedoch recht einfach. Das Ausführungsergebnis ähnelt dem Ergebnis des vorherigen Berichts (siehe Screenshot oben). SchlussfolgerungenWelche Möglichkeit zur Erledigung der Aufgabe ist besser? Es hängt alles von den spezifischen Bedingungen ab. In manchen Situationen ist ein Bericht aus zwei Datensätzen schneller als das Abrufen aller Daten für einen Bericht in einer Abfrage. Im Rahmen dieses Artikels können wir nicht auf Leistungsprobleme für die betrachteten Methoden zur Lösung des Problems eingehen. Es sei auch daran erinnert, dass die Erstellung von Berichten auf der Grundlage von Dokumenttabellen von der Entwicklungsmethodik des Unternehmens 1C nicht empfohlen wird, da davon ausgegangen wird, dass die Informationen in den Dokumenten möglicherweise nicht zuverlässig sind. Alle Meldungen müssen auf Registern basieren. Manchmal müssen Sie eine Abfrage verwenden, um Daten für mehrere Daten gleichzeitig aus einem periodischen Informationsregister abzurufen. Ein typisches Beispiel ist die Arbeit mit Wechselkursen. Betrachten wir einen Algorithmus zur Lösung dieses Problems anhand eines Beispiels. Formulierung des ProblemsIn der Datenbank wurde ein Dokument „Verkäufe von Waren und Dienstleistungen“ erstellt, in dessen Kopfzeile sich das Attribut „Währung“ befindet. Die Anforderung erfordert, dass für jedes Dokument der aktuelle Wechselkurs zum Datum des Dokuments aus der Kopfzeile entnommen wird. Währungskurse werden im periodischen Informationsregister „Währungskurse“ gespeichert. LösungUm das Problem zu lösen, nutzen wir die Tatsache, dass die Tabellen in der Abfrage vorhanden sind kann nicht nur für die Gleichheit der Felder verbunden werden. SELECT Sales of GoodsServices.Link, Sales of GoodsServices.Currency, MAXIMUM(Currency Rates.Period) AS Period PLACE IN TPeriodsSetting Rates FROM Document.Sale of GoodsServices HOW Sales of GoodsServices LEFT CONNECTION Informationsregister.Currency Rates AS Währungskurse Software Sales of Produkte ovServices.Currency = Währungskurse.Währung und Verkäufe von WarenServices.Datum >= Währungskurse.Period GROUP Software Verkäufe von Waren und Dienstleistungen. Link, Verkäufe von Waren und Dienstleistungen. Währung; ///////////////////////////////////////////// // ////////////////////////// SELECT VTPeriodsSetting Rates.Link, VTPeriodsSetting Rates.Currency, RatesCurrency.Rate FROM VTPeriodsSetting Rates AS VTPeriodsSetting Rates LEFT CONNECTION RegisterInformation . Währungskurse AS Währungskurse ON VTPeriodsRate Settings.Period = Währungskurse.Period UND VTPeriodsRate Settings.Currency = Währungskurse.Currency Ablauf der Anfrage:
Dies ist nicht das erste Mal, dass ich auf eine Situation stoße, in der eine Abfrage die Suche nach Salden nicht für ein festes Datum (ein Parameter für den gesamten Bericht), sondern für ein beliebiges Datum (wenn das Datum der Salden in jeder Zeile unterschiedlich ist) erfordert. Ich habe einen Artikel gefunden, der sich für mich als sehr nützlich erwiesen hat. Schade, dass es zu spät ist, da ich mir die erste Option selbst ausdenken musste. Einholen aktueller Daten aus dem Informationsregister zum Zeitpunkt des Eingangs in der Anfrage selbst Es gibt mehrere Möglichkeiten, an die benötigten Daten zu gelangen. 1.Direkt in der Abfrage (über eine echte Registertabelle) Die Methode ist für fast jede Situation geeignet und daher die universellste. Der einzige Nachteil dieser Methode besteht möglicherweise darin, dass, wenn der Benutzer keinen Kurs im Bericht benötigt, bei der Anforderung redundante Daten ausgewählt werden. Der Aufruf von SliceLast() kann nur verwendet werden, indem ein vorbereiteter Wert des Datums übergeben wird, für das Sie die Werte erhalten möchten. Daher wird das Thema durch die Zusammenführung mehrerer Anfragen gebildet - Für die allgemeine Entwicklung: Abhängig von der Periodizität des Registers (nach Zeit, nach Position des Registrars) wird die VT zu folgender Anfrage erweitert: 2. Nach der Position des Standesbeamten All dies lässt sich erkennen, wenn man sich das Technologieprotokoll mit aktiviertem Aansieht 2. Datenkompositionssystem (Übertragung eines Wertesatzes von einer Tabelle an einen virtuellen Tabellenparameter) Diese Methode eignet sich für Berichte. Einer der offensichtlichen Vorteile besteht darin, dass der Kurs (oder andere Daten), die nicht zum Erstellen eines Berichts benötigt werden, vom ACS nicht empfangen werden. Die Leistung eines solchen Berichts kann jedoch etwas geringer sein als bei der ersten Methode. Lassen Sie uns zum Beispiel einen Bericht erstellen – eine Liste der Kundenbestellungen. Dazu erstellen wir einen Datensatz „Dokumente“ – eine Anfrage: Um Datensätze später erfolgreich zu verknüpfen, müssen die Felder „Datum“ und „Dokumentenwährung“ in der Anfrage enthalten sein. Um zu verhindern, dass sie in der Liste der verfügbaren Felder erscheinen, können sie bei Bedarf durch Aktivieren der Einschränkungs-Kontrollkästchen in der Tabelle „Felder“ des Layoutdiagramms entfernt werden. Ansonsten bedarf die Anfrage kaum einer Stellungnahme. Um Informationen über Wechselkurse zu erhalten, werden wir einen zweiten Satz von Abfragedaten hinzufügen, „Währungskurse“: Diese Anfrage hat 2 Parameter: „Datum“ und „Währung“. Diese Parameter werden vom ACS beim Verbinden der Sets eingestellt. Zusätzlich wird in den ausgewählten Feldern der Parameter „Datum“ angezeigt – dieser ist für die Verknüpfung der Tabellen notwendig. Kommen wir zum Verbinden der Sets. Fügen Sie auf der Seite „Datensatz-Links“ zwei Links hinzu: Hier kommt es vor allem auf die Kommunikationsparameter an. Wenn beim Verbinden von Datensätzen ein Parameter angegeben wird, überträgt das ACS die in der Verbindung angegebenen Parameter an den untergeordneten Satz (in unserem Fall die Anfrage „Währungskurse“). Die Parameterwerte sind die Werte der entsprechenden Felder des Quellsatzes. Kommen wir nun zu den berechneten Feldern. Fügen wir ein berechnetes Feld „AmountInAccountingCurrency“ hinzu. Der Feldausdruck lautet „Dokumentbetrag * Rate / Multiplizität“. Als Ressourcen werden wir auch die Felder „Document Amount“ und „AmountInCurrencyAccounting“ angeben Lassen Sie uns den Bericht einrichten. Sie können einen Bericht erstellen |
Beliebt:
Neu
- Warum Spiele unter Windows nicht starten Warum Spiele nicht funktionieren
- Laden Sie Minecraft für Android herunter: alle Versionen
- Laden Sie Mods für Minecraft 1 herunter
- Kerlhaut mit 10 englischen Buchstaben
- ModPack Zeus002 Download-Mods hier ist das World Of Tanks-Mod-Pack
- Warum funktioniert Minecraft bei mir nicht?
- Die besten Minecraft-Server mit Mods
- Die besten Mods für Minecraft Mods für Version 1 anzeigen
- Beste Mods für Minecraft Mechanical-Mods für Minecraft 1
- Internetgeschwindigkeit prüfen: Methoden im Überblick So erfahren Sie die tatsächliche Internetgeschwindigkeit von Ihrem Provider