heim - Antivirenprogramme
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öglichkeiten

Ich 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“.

Ergebnisse

Es 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.
Lassen Sie uns also ein regelmäßiges Informationsregister erstellen Preis Hier werden die Preise nach Produkt und Lieferant gespeichert. Die Häufigkeit des Registers ist Tag.

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 ACS

Um 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 Anfrage

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

Schlussfolgerungen

Welche 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 Problems

In 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.
Eine direkte Lösung für dieses Problem könnte eine Abfrage in einer Schleife sein: Alle Dokumente mit ihren Daten und Währungen abrufen und im Beispiel auf die virtuelle Tabelle mit einem Ausschnitt des neuesten Registers „Währungskurse“ zugreifen. Aber weil Eine Anfrage in einer Schleife ist „schlecht“. Versuchen wir, die Aufgabe mit einer Anfrage umzusetzen.

Lösung

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

  1. Ermitteln des Zeitraums zum Festlegen des Wechselkurses für jedes Dokument. Die Dokumente sind mit der PHYSISCHEN Tabelle „Währungskurse“ verbunden. Hier sollten Sie auf die Anschlussbedingungen achten. Die Währungen müssen gleich sein und das Dokumentdatum >= der Zeitraum des Informationsregisters sein.
    Als Ergebnis einer solchen Verbindung wird für jedes Dokument eine Reihe von Zeilen erhalten, die die Bedingung erfüllen: alle Datensätze zu Wechselkursen für die Währung des Dokuments, die spätestens zum Datum des Dokuments erstellt wurden.
    Der letzte Schritt besteht darin, die Zeilen zu gruppieren, um den maximalen Tarifzeitraum zu erhalten. Dadurch wird für jedes Dokument der erforderliche Zeitraum für die Festlegung des Wechselkurses für die gewünschte Währung ermittelt (das maximale Datum für die Festlegung des Wechselkurses, jedoch nicht länger als das Datum des Dokuments). Das Ergebnis wird in der temporären Tabelle VTPeriodsSettingRates abgelegt.
  2. Einen Kurs bekommen. Die temporäre Tabelle VTPeriodsSetting Rates ist mit der PHYSICAL-Tabelle „Currency Rates“ verbunden. Die Verbindung erfolgt entsprechend der Dokumentwährung und dem in der zweiten temporären Tabelle definierten Tarifeinstellungszeitraum.

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.

Kopiert von: http://www.kb.mista.ru/article.php?id=92

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 -
Mit der Hauptaufgabe ist eine Anfrage nach dem Informationsregister mit einer Datumsbedingung und einer Suche nach einem Datensatz mit dem maximalen Datum (Zeitraum) verbunden.

Für die allgemeine Entwicklung:
Was ist ein Querschnitt davon in der Plattform?

Abhängig von der Periodizität des Registers (nach Zeit, nach Position des Registrars) wird die VT zu folgender Anfrage erweitert:
1. Nach Zeit (Jahr, Monat, ... Sekunde)

2. Nach der Position des Standesbeamten
In diesem Fall müssen Sie die Auswahl erneut umbrechen

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.
Für die unnötigen Felder „Datum“ und „Währung“ setzen wir zusätzlich die Einschränkungsflags, sodass diese nicht in den verfügbaren Feldern erscheinen.

Kommen wir zum Verbinden der Sets. Fügen Sie auf der Seite „Datensatz-Links“ zwei Links hinzu:
1. Die Quelle der Kommunikation ist das Set „Dokumente“, der Empfänger ist das Set „Währungskurse“. Quellausdruck – „Datum“, Zielausdruck – „Datum“, Parameter – „Datum“
2. Die Quelle der Kommunikation ist das Set „Dokumente“, der Empfänger ist das Set „Währungskurse“. Quellausdruck – „Dokumentwährung“, Zielausdruck – „Währung“, Parameter – „Währung“

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.
Fügen wir eine Gruppierung „Detaillierte Datensätze“ hinzu. In den ausgewählten Feldern geben wir „Käuferbestellung“, „Preis“ und „Vielfalt“ an. Fügen wir die Ressourcen „Document Amount“ und „AmountInCurrencyAccounting“ hinzu.

Sie können einen Bericht erstellen



 


Lesen:



So partitionieren Sie eine Festplatte

So partitionieren Sie eine Festplatte

So teilen Sie eine Festplatte in zwei Partitionen auf, ohne Daten zu verlieren, vorausgesetzt, es gibt eine Partition, die in das Hauptvolume mit dem Buchstaben (C:) umgewandelt wurde, auf...

Wir unterteilen die Festplatte in Partitionen

Wir unterteilen die Festplatte in Partitionen

Bei der Installation von Windows wird die Festplatte traditionell in mindestens zwei Partitionen unterteilt – eine kleinere Systempartition mit dem Buchstaben C und eine größere Benutzerpartition...

Der Computer piept beim Einschalten

Der Computer piept beim Einschalten

Datum der Veröffentlichung: 01.02.2011 Es kann vorkommen, dass sich der Computer nicht einschaltet, sondern zu piepen beginnt. Wenn man zuhört, wird klar, dass...

Dateierweiterungen in Windows richtig ändern So ändern Sie die Archiverweiterung

Dateierweiterungen in Windows richtig ändern So ändern Sie die Archiverweiterung

Windows-Betriebssysteme erfreuen sich großer Beliebtheit, da sie es ermöglichen, Arbeitscomputer nach Belieben des Benutzers zu konfigurieren. Noch kein einziges Betriebssystem...

Feed-Bild RSS