إنشاء نظام إعداد تقارير لـ 1C: ERP يعتمد على OLAP و Excel

يعرف كل من المبرمجين والمستخدمين المدة التي يتم بها إنشاء التقارير وصعوبة في 1C. ومع ذلك ، يمكننا تقديم حل غير قياسي للنظر فيه - وهو تحميل البيانات إلى OLAP. OLAP - التقارير التحليلية عبر الإنترنت للمؤسسات التي لديها القدرة على إنشاء الجداول والرسوم البيانية. بالنسبة لأولئك الذين جربوا ذلك ، اتضح أنه أداة ملائمة للغاية لإنشاء التقارير التحليلية في Microsoft Excel ، كما يقولون ، بالطريقة المعتادة للمستخدمين العاديين في المؤسسات التي تستخدم 1C: ERP.



في مثالنا ، سوف نستخدم Visual Studio C # و 2 من قواعد بيانات Microsoft SQL Server - واحدة هي 1C: ERP والثانية لإعداد التقارير التحليلية OLAP ، وكذلك الجداول المحورية في Microsoft Excel.


للحصول على معلومات حول الجداول وهيكل قاعدة بيانات 1C: ERP ، سوف نستخدم معالجة جاهزة موجودة بالفعل على الإنترنت (GetDatabaseStructure.epf أو base_structure.epf).




باستخدام مثل هذه الأداة ، سنرى قائمة بالحقول الخاصة بالكائنات 1C (الدلائل والمستندات وخطوط المستندات والتعدادات ، وما إلى ذلك) والغرض منها ، وسيكون هذا مفيدًا لنا في المستقبل لبرمجة تحميل البيانات في OLAP. بناءً على البيانات التي تم الحصول عليها ، سنقوم بإعداد الجداول في قاعدة البيانات المنفصلة الخاصة بنا لإعداد التقارير التحليلية في Microsoft SQL.


في Visual Studio ، أضف بنية الجدول 1C إلى Linq إلى SQL




سنضيف أيضًا هيكل جدول قاعدة البيانات التحليلية في Linq إلى SQL وإنشاء العلاقات بينهما.




إنشاء فئة في Visual Studio لإعادة تحميل البيانات من بنية 1C إلى بنية OLAP


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

نحمل في الذاكرة قائمة معرفات مستندات 1C المتاحة بالفعل في قاعدة بيانات OLAP. يتم دعم تفرد المستندات في 1C بشكل أساسي بواسطة IDRRef و Version. سوف يساعدنا Tuple على إنشاء فهرس مركب ، إذا لزم الأمر.


املأ الفهارس من جدول SQL لقاعدة بيانات 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)); } 

نقوم بعمل مجموعة مختارة من المستندات من 1C: ERP ونتحقق من توفرها في قاعدة بيانات OLAP. يحتوي الحقل _Version على قيمة لتسوية تعديل المستند في 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; } .... 

قم بإنشاء مستند جديد أو تحديث مستند موجود


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

داخل حلقة الوثيقة ، نختار روابط لأدلة وكائنات أخرى من القواميس المملوءة مسبقًا.


املأ "القاموس" بالبحث اللاحق في الذاكرة (يسرع العملية بشكل كبير مقارنة بالبحث من جداول قاعدة بيانات 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 } 

نختار عنصر الدليل في عملية تنزيل المستندات


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

في نهاية الدورة ، احفظ المستند في قاعدة بيانات 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(); 

على هذا ، انتهى العمل في Visual Studio على ملء اللوحات ، ننتقل إلى الجداول المحورية في Excel. إضافة جدول محوري جديد



نرسم الجدول في Excel عن طريق إضافة الحقول اللازمة إلى الجزء المجدول ، والنتيجة يجب أن تكون على النحو التالي (مثال)




درسنا مثالًا قصيرًا لتحميل البيانات في قاعدة بيانات SQL منفصلة لإنشاء تقارير تحليلية في OLAP و Excel من أي تكوينات 1C. مجموعة الشرائح والمؤشرات التي تم الحصول عليها في سياق هذا التطوير جاهزة للاستخدام من قبل المستخدم النهائي في الجدول المحوري لـ Microsoft Excel ، مما يؤدي إلى إنشاء خيارات تقرير ملائمة للمستخدم.


ألق نظرة فاحصة على الكود المصدري للحصول على أمثلة على GitHub

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


All Articles