Die Arbeit mit großen Datenmengen ist eines der häufigsten Probleme, mit denen 1C-Entwickler konfrontiert sind. Langsame Berichte, hängende Verarbeitung und unzufriedene Benutzer sind alles Folgen eines falschen Ansatzes bei der Arbeit mit Daten. Lassen Sie uns herausfinden, wie man es richtig macht.
Warum treten Leistungsprobleme auf?
Wenn sich mehrere tausend Dokumente in der Datenbank befinden, funktioniert alles schnell. Aber sobald die Daten auf Hunderttausende oder Millionen von Datensätzen anwachsen, beginnt der Code, der zuvor sofort ausgeführt wurde, minutenlang zu arbeiten. Der Grund ist einfach: Jeder Zugriff auf die Datenbank braucht Zeit, und nicht optimierte Abfragen können viel mehr Daten verarbeiten als nötig.
Grundprinzipien der Arbeit mit Big Data
1. Verwenden Sie Abfragen anstelle von Schleifen
Der häufigste Fehler von Anfängern in der Entwicklung ist die Verarbeitung von Daten in Schleifen. Wenn Sie beispielsweise die Restbestände der Waren im Lager abrufen müssen, sollten Sie nicht alle Waren in einer Schleife durchgehen und für jede eine separate Anfrage stellen.
❌ Schlecht:
Для Каждого Товар Из СписокТоваров Цикл
Запрос = Новый Запрос;
Запрос.Текст = "SELECT Remainder WHERE Nomenclature = &Nomenclature";
Запрос.УстановитьПараметр("Nomenclature", Товар);
// Wird hunderte Male ausgeführt!
КонецЦикла;✅ Gut:
Запрос = Новый Запрос;
Запрос.Текст =
"SELECT
| Nomenclature,
| Balance
|FROM RegisterAccumulation.BalanceGoods.Balance
|WHERE Nomenclature IN (&List of Goods)";
Запрос.УстановитьПараметр("List of goods", СписокТоваров);
// Wird einmal ausgeführt!Wichtig: Eine Anfrage statt Hunderte — das ist der Unterschied zwischen einer Sekunde und einer Minute Arbeit.
2. Beschränken Sie die Datenauswahl
Laden Sie nicht alle Felder, wenn sie nicht benötigt werden. Wählen Sie nicht alle Einträge aus, wenn Sie nur einen Teil benötigen.
// Wir wählen nur die erforderlichen Felder aus
Запрос.Текст =
"SELECT
| Document.Number,
| Document.Date,
| Document.Amount
| FROM Document.SaleOfGoodsServices AS Document
|WHERE Document.Date BETWEEN &StartDate AND &EndDate
| AND Document.Posted = TRUE";Verwenden Sie WHERE-Bedingungen, um Daten auf Datenbankebene zu filtern, nicht im Code, nachdem Sie alle Datensätze erhalten haben.
3. Verwenden Sie Indizes
Indizes machen die Suche in einer Datenbank schnell. In 1C werden Indizes automatisch für als indizierbar markierte Attribute erstellt. Wenn Sie Daten häufig nach einem bestimmten Attribut filtern, stellen Sie sicher, dass dafür ein Index erstellt wurde.
4. Verwenden Sie temporäre Tabellen
Wenn Sie mehrere miteinander verknüpfte Abfragen ausführen müssen, helfen temporäre Tabellen dabei, Zwischenergebnisse zu speichern und die Haupttabellen nicht erneut zu verwenden.
Запрос = Новый Запрос;
Запрос.Текст =
"SELECT
| Counterparty,
| AMOUNT (Amount) AS TotalAmount
| PLACE InAmountsByCounterparties | FROM Document.SaleOfGoodsServices
| GROUP BY Counterparty |; | | SELECT
| InAmountsByCounterparties.Counterparty,
| InAmountsByCounterparties.TotalAmount
| FROM VtAmountsByCounterparties | WHERE VtAmountsByCounterparties.TotalAmount> 100000";
5. Arbeiten Sie in Paketen
Wenn Sie eine Million Datensätze verarbeiten müssen, laden Sie nicht alle auf einmal hoch. Verarbeiten Sie Daten in Portionen von 1000-10000 Datensätzen.
СчётчикПорции = 0;
РазмерПорции = 5000;
Пока Истина Цикл
Запрос.Текст =
"SELECT FIRST " + РазмерПорции + "
| Link
|FROM Reference Book.Nomenclature
| WHERE Link> & LastLink | SORT BY Link";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Прервать;
КонецЕсли;
// Wir verarbeiten die Portion
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
// Elementbearbeitung
ПоследняяСсылка = Выборка.Ссылка;
КонецЦикла;
КонецЦикла;6. Verwenden Sie die Akkumulationsregister richtig
Akkumulationsregister sind ein leistungsstarkes Werkzeug für die Arbeit mit quantitativen Daten. Sie ermöglichen es Ihnen, schnell Salden und Umsätze zu erhalten, ohne die gesamte Historie der Bewegungen neu berechnen zu müssen.
// Erhalt der Rückstände zum Datum
Запрос.Текст =
"SELECT
| Remainders.Nomenclature,
| Remainders.QuantityRemainder
| FROM AccumulationRegister. GoodsInWarehouses. Remains (& Date) AS Remains";7. Optimieren Sie Tabellenverbindungen
Wenn eine Abfrage Verbindungen (JOIN) verwendet, sind die Reihenfolge und der Typ der Verbindung wichtig. Verbinden Sie zuerst die Tabellen mit der geringsten Anzahl von Datensätzen.
Praktische Tipps
Analysieren Sie die Abfragepläne. In der 1C-Abfragekonsole können Sie genau sehen, wie die Abfrage ausgeführt wird und wo Engpässe auftreten.
Verwenden Sie Leistungsmessungen. Mit den integrierten 1C-Tools können Sie langsame Vorgänge finden. Nicht raten, messen!
Vermeiden Sie verschachtelte Abfragen. Meistens können sie durch Verbindungen oder temporäre Tabellen mit besserer Leistung ersetzt werden.
Zwischenspeichern Sie unveränderliche Daten. Wenn sich die Daten selten ändern, speichern Sie sie in den Variablen des Moduls oder verwenden Sie Informationsregister mit der Möglichkeit des Cachings.
Häufige Fehler
Alle Felder über "AUSWÄHLEN *" anstatt expliziter Auflistung der erforderlichen Felder erhalten
Verwendung komplexer Berechnungen in WHERE-Bedingungen anstelle von Vorkalkulationen
Fehlende Filterbedingungen, wenn die Auswahl eingeschränkt werden kann
Mehrere Aufrufe der Datenbank anstelle einer Batch-Anfrage
Befund
Die Arbeit mit Big Data in 1C erfordert ein Verständnis der Prinzipien von Datenbanken und Abfragen. Die Grundregeln sind einfach: Minimieren Sie die Anzahl der Zugriffe auf die Datenbank, verwenden Sie Abfragen anstelle von Schleifen, wählen Sie nur die benötigten Daten aus und verwenden Sie die richtigen Tools für die richtigen Aufgaben.
Denken Sie daran: Optimierung ist keine vorzeitige Komplikation des Codes, sondern ein kompetentes Design von Anfang an. Die Gewohnheit, effektive Abfragen zu schreiben, spart Ihnen in Zukunft Stunden an Debugging und Wochen an Optimierung.
🚀 Möchten Sie mehr erfahren?
Sie können dieses und viele andere Themen studieren in Kodike — unsere Plattform für angehende Entwickler! Wir haben strukturierte Kurse erstellt, die Ihnen helfen, die Entwicklung von Grund auf bis zu einem sicheren Niveau zu erlernen.
Und wir haben auch cooler Telegram-Kanal mit einer freundlichen Community, wo erfahrene Entwickler Anfängern helfen, Erfahrungen austauschen und aktuelle Programmierfragen diskutieren.
