Membuat sistem pelaporan untuk 1C: ERP berdasarkan OLAP dan Excel

Baik pemrogram dan pengguna tahu berapa lama dan sulit laporan dibuat dalam 1C. Namun, kami dapat menawarkan solusi non-standar untuk pertimbangan - ini memuat data ke OLAP. OLAP - pelaporan analitis online untuk perusahaan dengan kemampuan membuat tabel dan grafik. Bagi mereka yang mencoba ini, ternyata menjadi alat yang sangat nyaman untuk membangun pelaporan analitis dalam Microsoft Excel, seperti yang mereka katakan, dengan cara yang biasa untuk pengguna biasa di perusahaan yang menggunakan 1C: ERP.



Dalam contoh kami, kami akan menggunakan Visual Studio C #, 2 database Microsoft SQL Server - satu adalah 1C: ERP dan yang kedua untuk pelaporan analitik OLAP, serta tabel pivot di Microsoft Excel.


Untuk mendapatkan informasi tentang tabel dan struktur 1C: database ERP, kami akan menggunakan pemrosesan siap pakai yang sudah ada di Internet (GetDatabaseStructure.epf atau base_structure.epf).




Dengan menggunakan alat seperti itu, kita akan melihat daftar bidang untuk objek 1C (direktori, dokumen, baris dokumen, enumerasi, dll.) Dan tujuannya, ini akan berguna bagi kita di masa depan untuk pemrograman pemuatan data ke OLAP. Berdasarkan data yang diperoleh, kami akan menyiapkan tabel di basis data kami yang terpisah untuk pelaporan analitis dalam Microsoft SQL.


Dalam Visual Studio, tambahkan struktur tabel 1C ke Linq ke SQL




Kami juga akan menambahkan struktur tabel database analitik kami di Linq ke SQL dan membuat hubungan di antara mereka.




Buat kelas di Visual Studio untuk memuat ulang data dari struktur 1C ke struktur OLAP


public class DocProductionImporter { DataClasses1DataContext dataContext; s1_DataClasses1DataContext dataContextS1; public DocProductionImporter() { dataContext = new DataClasses1DataContext(); dataContextS1 = new s1_DataClasses1DataContext(); } .... } 

Kami memuat ke dalam memori daftar pengidentifikasi dokumen 1C sudah tersedia di database OLAP. Keunikan dokumen dalam 1C terutama didukung oleh IDRRef dan Versi. Tuple akan membantu kami membuat indeks komposit, jika perlu.


Isi indeks dari tabel SQL dari database OLAP


  HashSet<Tuple<System.Data.Linq.Binary, // IDRRef, Version System.Data.Linq.Binary>> fndDocVer = new HashSet<Tuple<System.Data.Linq.Binary, System.Data.Linq.Binary>>(); foreach (DocProduction doc in docs) { fndDocVer.Add(Tuple.Create(doc.IDRRef, doc.Version)); } 

Kami membuat pilihan dokumen dari 1C: ERP dan memeriksa ketersediaannya di basis data OLAP kami. Bidang _Version berisi nilai untuk merekonsiliasi modifikasi dokumen dalam 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; } .... 

Buat yang baru atau perbarui dokumen yang ada


  // NEW DocProduction dp = new DocProduction(); dp.NumberPrefix = doc._NumberPrefix; dp.DocNumber = doc._Number; 

Di dalam loop dokumen, kami memilih tautan ke direktori dan objek lain dari kamus yang sudah diisi sebelumnya.


Isi Kamus untuk pencarian berikutnya dalam memori (secara signifikan mempercepat proses dibandingkan dengan mencari dari tabel database SQL)


  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); //   1    OLAP } 

Kami memilih elemen direktori dalam proses mengunduh dokumen


  if (fndDepartments.ContainsKey(doc._Fld15867RRef)) { Int64 val; fndDepartments.TryGetValue(doc._Fld15867RRef, out val); dp.DepartmentID = val; } else throw new Exception(); //      

Di akhir siklus, simpan dokumen dalam database OLAP


  dp.IDRRef = doc._IDRRef; dp.Version = doc._Version; if (doc._Posted == posted) //     1 dp.Active = true; else dp.Active = false; dataContext.DocProductions.InsertOnSubmit(dp); dataContext.SubmitChanges(); 

Pada ini, pekerjaan di Visual Studio tentang mengisi piring selesai, kita beralih ke tabel pivot di Excel. Tambahkan tabel pivot baru



Kami menggambar tabel di Excel dengan menambahkan bidang yang diperlukan ke bagian tabular, hasilnya harus sebagai berikut (contoh)




Kami memeriksa contoh singkat memuat data ke dalam database SQL terpisah untuk menghasilkan pelaporan analitis dalam OLAP dan Excel dari konfigurasi 1C apa pun. Seperangkat irisan dan indikator yang diperoleh selama pengembangan tersebut siap digunakan oleh pengguna akhir dalam tabel pivot Microsoft Excel, menghasilkan opsi laporan apa saja yang nyaman bagi pengguna.


Lihatlah lebih dekat pada kode sumber untuk contoh di GitHub

Source: https://habr.com/ru/post/id449264/


All Articles