Sowohl Programmierer als auch Benutzer wissen, wie lange und schwierige Berichte in 1C erstellt werden. Wir können jedoch eine nicht standardmäßige Lösung in Betracht ziehen - dies ist das Laden von Daten in OLAP. OLAP - Online-Analyseberichte für Unternehmen mit der Fähigkeit, Tabellen und Grafiken zu erstellen. Für diejenigen, die dies ausprobiert haben, erwies es sich als äußerst praktisches Tool zum Erstellen von analytischen Berichten in Microsoft Excel, wie sie sagen, wie es für normale Benutzer in Unternehmen, die 1C: ERP verwenden, üblich ist.
In unserem Beispiel verwenden wir Visual Studio C #, 2 Microsoft SQL Server-Datenbanken - eine ist 1C: ERP und die zweite für OLAP-Analyseberichte sowie Pivot-Tabellen in Microsoft Excel.
Um Informationen über die Tabellen und die Struktur der 1C: ERP-Datenbank zu erhalten, verwenden wir eine vorgefertigte Verarbeitung, die sich bereits im Internet befindet (GetDatabaseStructure.epf oder base_structure.epf).

Mit einem solchen Tool sehen wir eine Liste von Feldern für 1C-Objekte (Verzeichnisse, Dokumente, Dokumentzeilen, Aufzählungen usw.) und deren Zweck. Dies wird uns in Zukunft nützlich sein, um das Laden von Daten in OLAP zu programmieren. Basierend auf den erhaltenen Daten werden wir Tabellen in unserer separaten Datenbank für die analytische Berichterstellung in Microsoft SQL vorbereiten.
Fügen Sie in Visual Studio die 1C-Tabellenstruktur zu Linq to SQL hinzu

Wir werden auch die Tabellenstruktur unserer analytischen Datenbank in Linq zu SQL hinzufügen und die Beziehungen zwischen ihnen erstellen

Erstellen Sie in Visual Studio eine Klasse, um Daten aus der 1C-Struktur in die OLAP-Struktur neu zu laden
public class DocProductionImporter { DataClasses1DataContext dataContext; s1_DataClasses1DataContext dataContextS1; public DocProductionImporter() { dataContext = new DataClasses1DataContext(); dataContextS1 = new s1_DataClasses1DataContext(); } .... }
Wir laden die Liste der 1C-Dokumentkennungen, die bereits in der OLAP-Datenbank verfügbar sind, in den Speicher. Die Eindeutigkeit von Dokumenten in 1C wird hauptsächlich von IDRRef und Version unterstützt. Tupel hilft uns bei Bedarf, einen zusammengesetzten Index zu erstellen.
Füllen Sie die Indizes aus der SQL-Tabelle der OLAP-Datenbank aus
HashSet<Tuple<System.Data.Linq.Binary,
Wir treffen eine Auswahl von Dokumenten aus 1C: ERP und prüfen deren Verfügbarkeit in unserer OLAP-Datenbank. Das Feld _Version enthält einen Wert zum Abgleichen der Änderung des Dokuments in 1C
var prodDocs = from c in dataContextS1._Document581s where c._Posted == posted select c; int i = 0; foreach (_Document581 doc in prodDocs) { if (fndDocVer.Contains(Tuple.Create(doc._IDRRef, doc._Version)) == true) { i++; continue; } ....
Erstellen Sie ein neues oder aktualisieren Sie ein vorhandenes Dokument
Innerhalb der Dokumentschleife wählen wir Links zu Verzeichnissen und anderen Objekten aus vorgefüllten Wörterbüchern aus.
Füllen Sie das Wörterbuch für nachfolgende Suchvorgänge im Speicher aus (beschleunigt den Vorgang im Vergleich zur Suche aus SQL-Datenbanktabellen erheblich).
Dictionary<System.Data.Linq.Binary, Int64> fndDepartments = new Dictionary<System.Data.Linq.Binary, Int64>(); var fDepartments = from g in dataContext.DimDepartments select g; foreach (DimDepartments fd in fDepartments) { fndDepartments.Add(fd.IDRRef, fd.ID);
Wir wählen das Verzeichniselement beim Herunterladen von Dokumenten aus
if (fndDepartments.ContainsKey(doc._Fld15867RRef)) { Int64 val; fndDepartments.TryGetValue(doc._Fld15867RRef, out val); dp.DepartmentID = val; } else throw new Exception();
Speichern Sie das Dokument am Ende des Zyklus in der OLAP-Datenbank
dp.IDRRef = doc._IDRRef; dp.Version = doc._Version; if (doc._Posted == posted)
Damit ist die Arbeit in Visual Studio zum Ausfüllen der Platten abgeschlossen, wir wenden uns den Pivot-Tabellen in Excel zu. Fügen Sie eine neue Pivot-Tabelle hinzu

Wir zeichnen die Tabelle in Excel, indem wir die erforderlichen Felder zum tabellarischen Teil hinzufügen. Das Ergebnis sollte wie folgt sein (Beispiel).

Wir haben ein kurzes Beispiel für das Laden von Daten in eine separate SQL-Datenbank untersucht, um analytische Berichte in OLAP und Excel aus beliebigen 1C-Konfigurationen zu generieren. Die im Verlauf einer solchen Entwicklung erhaltenen Slices und Indikatoren können vom Endbenutzer in der Microsoft Excel-Pivot-Tabelle verwendet werden, um alle für den Benutzer geeigneten Berichtsoptionen zu generieren.
Schauen Sie sich den Quellcode genauer an, um Beispiele für GitHub zu finden