程序员和用户都知道在1C中创建了多长时间和困难的报告。 但是,我们可以考虑提供非标准解决方案-这是将数据加载到OLAP中。 OLAP-具有构建表和图形功能的企业的在线分析报告。 对于那些尝试过此操作的人来说,事实证明,对于使用1C:ERP的企业中的普通用户来说,它是用Microsoft Excel构建分析报告的一种极为方便的工具。
在我们的示例中,我们将使用Visual Studio C#,2个Microsoft SQL Server数据库-一个是1C:ERP,另一个是OLAP分析报告,以及Microsoft Excel中的数据透视表。
要获取有关表和1C:ERP数据库的结构的信息,我们将使用Internet上已经存在的现成处理(GetDatabaseStructure.epf或base_structure.epf)。

使用这样的工具,我们将看到1C对象的字段列表(目录,文档,文档行,枚举等)及其用途,这对将来对将数据加载到OLAP中进行编程很有用。 根据获得的数据,我们将在单独的数据库中准备表,以使用Microsoft SQL进行分析报告。
在Visual Studio中,将1C表结构添加到Linq to SQL

我们还将在Linq中将分析数据库的表结构添加到SQL中,并在它们之间创建关系。

在Visual Studio中创建一个类,以将数据从1C结构重新加载到OLAP结构
public class DocProductionImporter { DataClasses1DataContext dataContext; s1_DataClasses1DataContext dataContextS1; public DocProductionImporter() { dataContext = new DataClasses1DataContext(); dataContextS1 = new s1_DataClasses1DataContext(); } .... }
我们将OLAP数据库中已经可用的1C文档标识符列表加载到内存中。 IDCRef和Version主要支持1C中文档的唯一性。 必要时,元组将帮助我们创建一个复合索引。
填写OLAP数据库的SQL表中的索引
HashSet<Tuple<System.Data.Linq.Binary,
我们从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; } ....
创建新文件或更新现有文档
在文档循环内,我们从预填字典中选择目录和其他对象的链接。
填写字典以在内存中进行后续搜索(与从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);
我们在下载文件的过程中选择目录元素
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)
至此,Visual Studio中完成了填充板的工作,我们转到Excel中的数据透视表。 添加一个新的数据透视表

我们通过在表格部分中添加必要的字段在Excel中绘制表格,结果应如下所示(示例)

我们研究了一个简短的示例,该示例将数据加载到单独的SQL数据库中,以便从任何1C配置中在OLAP和Excel中生成分析报告。 在这种开发过程中获得的一组切片和指示符已准备好供最终用户在Microsoft Excel数据透视表中使用,从而生成任何对用户方便的报告选项。
仔细查看GitHub上示例的源代码