Tanto los programadores como los usuarios saben cuánto tiempo se crean los informes difíciles en 1C. Sin embargo, podemos ofrecer una solución no estándar para su consideración: esto es cargar datos en OLAP. OLAP: informes analíticos en línea para empresas con la capacidad de crear tablas y gráficos. Para aquellos que intentaron esto, resultó ser una herramienta extremadamente conveniente para crear informes analíticos en Microsoft Excel, como dicen, de la manera habitual para usuarios comunes en empresas que usan 1C: ERP.
En nuestro ejemplo, utilizaremos Visual Studio C #, 2 bases de datos de Microsoft SQL Server: una es 1C: ERP y la segunda para informes analíticos OLAP, así como tablas dinámicas en Microsoft Excel.
Para obtener información sobre las tablas y la estructura de la base de datos 1C: ERP, utilizaremos el procesamiento listo que ya está en Internet (GetDatabaseStructure.epf o base_structure.epf).

Usando dicha herramienta, veremos una lista de campos para objetos 1C (directorios, documentos, líneas de documentos, enumeraciones, etc.) y su propósito, esto nos será útil en el futuro para programar la carga de datos en OLAP. En base a los datos obtenidos, prepararemos tablas en nuestra base de datos separada para informes analíticos en Microsoft SQL.
En Visual Studio, agregue la estructura de tabla 1C a Linq to SQL

También agregaremos la estructura de tabla de nuestra base de datos analítica en Linq a SQL y crearemos las relaciones entre ellos.

Cree una clase en Visual Studio para recargar datos de la estructura 1C a la estructura OLAP
public class DocProductionImporter { DataClasses1DataContext dataContext; s1_DataClasses1DataContext dataContextS1; public DocProductionImporter() { dataContext = new DataClasses1DataContext(); dataContextS1 = new s1_DataClasses1DataContext(); } .... }
Cargamos en la memoria la lista de identificadores de documentos 1C ya disponibles en la base de datos OLAP. La unicidad de los documentos en 1C está respaldada principalmente por IDRRef y Version. Tuple nos ayudará a crear un índice compuesto, si es necesario.
Complete los índices de la tabla SQL de la base de datos OLAP
HashSet<Tuple<System.Data.Linq.Binary,
Hacemos una selección de documentos de 1C: ERP y verificamos su disponibilidad en nuestra base de datos OLAP. El campo _Version contiene un valor para conciliar la modificación del documento en 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; } ....
Crear un documento nuevo o actualizar un documento existente
Dentro del bucle de documentos, seleccionamos enlaces a directorios y otros objetos de diccionarios precompletados.
Complete el Diccionario para búsquedas posteriores en la memoria (acelera significativamente el proceso en comparación con la búsqueda en tablas de bases de datos 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);
Seleccionamos el elemento del directorio en el proceso de descarga de documentos
if (fndDepartments.ContainsKey(doc._Fld15867RRef)) { Int64 val; fndDepartments.TryGetValue(doc._Fld15867RRef, out val); dp.DepartmentID = val; } else throw new Exception();
Al final del ciclo, guarde el documento en la base de datos OLAP
dp.IDRRef = doc._IDRRef; dp.Version = doc._Version; if (doc._Posted == posted)
En esto, el trabajo en Visual Studio para completar los platos está terminado, pasamos a las tablas dinámicas en Excel. Agregar una nueva tabla dinámica

Dibujamos la tabla en Excel agregando los campos necesarios a la parte tabular, el resultado debe ser el siguiente (ejemplo)

Examinamos un breve ejemplo de carga de datos en una base de datos SQL separada para generar informes analíticos en OLAP y Excel desde cualquier configuración 1C. El conjunto de sectores e indicadores obtenidos en el curso de dicho desarrollo está listo para ser utilizado por el usuario final en la tabla dinámica de Microsoft Excel, generando cualquier opción de informe que sea conveniente para el usuario.
Eche un vistazo más de cerca al código fuente para ver ejemplos en GitHub