Tanto os programadores quanto os usuários sabem quanto relatórios longos e difíceis são criados no 1C. No entanto, podemos oferecer uma solução não padrão para consideração - isso é carregar dados no OLAP. OLAP - relatórios analíticos online para empresas com a capacidade de criar tabelas e gráficos. Para aqueles que tentaram isso, acabou sendo uma ferramenta extremamente conveniente para criar relatórios analíticos no Microsoft Excel, como costumam dizer, da maneira usual para usuários comuns em empresas que usam 1C: ERP.
Em nosso exemplo, usaremos os bancos de dados do Visual Studio C #, 2 do Microsoft SQL Server - um é 1C: ERP e o segundo para relatórios analíticos OLAP, além de tabelas dinâmicas no Microsoft Excel.
Para obter informações sobre as tabelas e a estrutura do banco de dados 1C: ERP, usaremos o processamento pronto que já está na Internet (GetDatabaseStructure.epf ou base_structure.epf).

Usando essa ferramenta, veremos uma lista de campos para objetos 1C (diretórios, documentos, linhas de documentos, enumerações etc.) e sua finalidade; isso nos será útil no futuro para programar o carregamento de dados no OLAP. Com base nos dados obtidos, prepararemos tabelas em nosso banco de dados separado para relatórios analíticos no Microsoft SQL.
No Visual Studio, adicione a estrutura da tabela 1C ao Linq to SQL

Também adicionaremos a estrutura da tabela do nosso banco de dados analítico no Linq ao SQL e criaremos os relacionamentos entre eles.

Crie uma classe no Visual Studio para recarregar dados da estrutura 1C para a estrutura OLAP
public class DocProductionImporter { DataClasses1DataContext dataContext; s1_DataClasses1DataContext dataContextS1; public DocProductionImporter() { dataContext = new DataClasses1DataContext(); dataContextS1 = new s1_DataClasses1DataContext(); } .... }
Carregamos na memória a lista de identificadores de documentos 1C já disponíveis no banco de dados OLAP. A exclusividade dos documentos em 1C é principalmente suportada pelo IDRRef e Version. A tupla nos ajudará a criar um índice composto, se necessário.
Preencha os índices da tabela SQL do banco de dados OLAP
HashSet<Tuple<System.Data.Linq.Binary,
Fazemos uma seleção de documentos de 1C: ERP e verificamos sua disponibilidade em nosso banco de dados OLAP. O campo _Version contém um valor para reconciliar a modificação do documento em 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; } ....
Crie um novo ou atualize um documento existente
Dentro do loop do documento, selecionamos links para diretórios e outros objetos de dicionários pré-preenchidos.
Preencha o Dicionário para pesquisas subsequentes na memória (acelera significativamente o processo em comparação com a pesquisa nas tabelas do banco de dados 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);
Selecionamos o elemento do diretório no processo de download de documentos
if (fndDepartments.ContainsKey(doc._Fld15867RRef)) { Int64 val; fndDepartments.TryGetValue(doc._Fld15867RRef, out val); dp.DepartmentID = val; } else throw new Exception();
No final do ciclo, salve o documento no banco de dados OLAP
dp.IDRRef = doc._IDRRef; dp.Version = doc._Version; if (doc._Posted == posted)
Com isso, o trabalho no Visual Studio sobre o preenchimento das placas está concluído, passamos para as tabelas dinâmicas no Excel. Adicionar uma nova tabela dinâmica

Desenhamos a tabela no Excel adicionando os campos necessários à parte tabular, o resultado deve ser o seguinte (exemplo)

Examinamos um pequeno exemplo de carregamento de dados em um banco de dados SQL separado para gerar relatórios analíticos em OLAP e Excel a partir de qualquer configuração 1C. O conjunto de fatias e indicadores obtidos no processo desse desenvolvimento está pronto para ser usado pelo usuário final na tabela dinâmica do Microsoft Excel, gerando quaisquer opções de relatório que sejam convenientes para o usuário.
Dê uma olhada no código fonte para obter exemplos no GitHub