MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


4 participantes

    [Resolvido]Relatório de hierarquia (Infinito)

    avatar
    edujakel
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 02/02/2012

    [Resolvido]Relatório de hierarquia (Infinito) Empty Relatório de hierarquia (Infinito)

    Mensagem  edujakel 5/3/2012, 14:54

    Tentei localizar um tópico parecido, me perdoem se tinha e nao vi.

    Tenho um banco com 2 tabelas.
    CLIENTES
    - CNPJ
    - RazaoSocial

    SOCIOS
    - CNPJ
    - CNPJSocia

    Preciso montar um relatório (seja no Access ou exportanto pra células Excel) que mostre toda a hierarquia de uma determinada empresa. E suas sócias, e as sócias subsequentes.
    ex:

    Empresa1
    -- SóciaA
    -- SóciaB
    ----- SubSóciaA
    ----- SubSóciaB
    -- SóciaC
    ----- SubSóciaA
    ------- SubSubSóciaA
    ------- SubSubSóciaB
    -- SóciaD

    e por aí vai. Eu quero informar apenas o CNPJ da empresa inicial e montar um relatório que pode ter quantas camadas necessárias pra montar toda a hierarquia da empresa.

    Depois de desistir de fazer pelo relatório do Access imaginei jogar em células do Excel, deslocando 1 célula para o lado e para baixo pra montar as camadas, mas nao consegui desvendar um algoritmo que faça isso automaticamente.

    Alguma sugestão?
    Gilberto Rocha
    Gilberto Rocha
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1027
    Registrado : 21/01/2010

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  Gilberto Rocha 9/3/2012, 21:58

    Não entendi porque desistiu do relatório em access, é bem melhor, mais atraente, pode exportar como pdf, e por ai vai.

    Caso exporte para Excel o layout não ficará com aspecto bom não, recomendo rever e fazer com relatório de Access.
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  criquio 9/3/2012, 22:17

    Explique um pouco melhor como será montada essa estrutura. Quando temos algo assim, pensamos em uma tabela com uma subtabela, uma sub subtabela e por aí vai. Mas, se for esse o caso, precisaria ficar criando subtabelas infinitamente. Como seria a estrutura para se chegar a tal momento?


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    edujakel
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 02/02/2012

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  edujakel 12/3/2012, 14:40

    (digitei um texto mega explicativo e na hora de enviar deu erro. Vou tentar de novo)

    @topbr
    Eu nao sei como fazer um relatório no Access que tenha a recursividade que eu preciso, se me explicar, ficarei muito feliz.

    @criquio
    Vou tentar explicar melhor minha necessidade, dando exemplos.

    Tabelas:
    CLIENTES (campos CNPJ e Razao Social)
    CNPJ123 / Empresa 123 S.A
    CNPJ456 / Empresa 456 LTDA
    CNPJ789 / Empresa 789 LTDA
    CNPJABC / Empresa ABC S.A
    CNPJDEF / Empresa DEF LTDA

    SOCIOS (campos CNPJ e CNPJSocia)
    CNPJ123 / CNPJ456
    CNPJ123 / CNPJ789
    CNPJABC / CNPJ123
    CNPJABC / CNPJDEF

    Relatório: SOlicitar relatório da "Empresa ABC S.A"

    1 CNPJABC - Empresa ABC S.A
    --1.1 CNPJ123 - Empresa 123 S.A
    ----1.1.1 CNPJ456 - Empresa 456 LTDA
    ----1.1.2 CNPJ789 - Empresa 789 LTDA
    --1.2 CNPJDEF - Empresa DEF LTDA

    Consegui montar uma função que pega a empresa e verifica se ela tem sócio, se tiver ela escreve o primeiro nível e chama ela mesma, que vai ver se tem sócio e escrever o segundo nível, até nao ter mais sócio e ir voltando os níveis. Mas nao sei jogar isso num relatório, estou escrevendo no excel e deslocando as celulas, claro q nao é o ideal. Se preciso eu posto o código aqui (que nao está muito bonito. rs)
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  criquio 12/3/2012, 14:46

    Tente fazer uma consulta pegando os campos que precisa de ambas as tabelas, partindo do pressuposto que elas estejam devidamente relacionadas. Depois, crie um relatório pelo wizard usando essa consulta como base. Enquanto vai passando as fases de criação do relatório, observe os níveis de agrupamento que são oferecidos, aonde você pode escolher o campo de primeiro nível, de segundo nível, etc. Em muitos dos casos, isso resolve.


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    edujakel
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 02/02/2012

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  edujakel 19/3/2012, 12:16

    Criquio nao consegui seguir o que voce falou. Tem um passo a passo que explica melhor o que voce falou?
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  Alexandre Neves 19/3/2012, 16:02

    Boa tarde, edu

    Bom desafio!
    Disponibilize tabelas com dados significativos para lhe preparar o caminho (Access 2003).
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  Alexandre Neves 21/3/2012, 08:17

    Bom dia, edu


    'Crie tabela ListaSocios(Socio - string)
    'Cole o seguinte código num módulo
    'Execute o procedimento CriaListaSocios
    Option Compare Database
    Option Explicit
    'criada por Alexandre Neves
    'em 21-03-2012
    'para edujakel
    'do fórum MaximoAccess

    Sub CriaListaSocios()
    Dim Rst As DAO.Recordset, CNPJ As String

    CNPJ = InputBox("Introduza o CNPJ a listar.", "Criar lista de sócios")
    If DCount("*", "Clientes", "CNPJ='" & CNPJ & "'") = 0 Then
    MsgBox "O CNPJ " & CNPJ & " não existe."
    Exit Sub
    End If

    CurrentDb.Execute "DELETE * FROM ListaSocios;"
    'MsgBox DLookup("RazaoSocial", "Clientes", "CNPJ='" & CNPJ & "'")
    CurrentDb.Execute "INSERT INTO ListaSocios(Socio) VALUES ('" & DLookup("RazaoSocial", "Clientes", "CNPJ='" & CNPJ & "'") & "' & ' (" & CNPJ & ")');"
    Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Socios WHERE CNPJ='" & CNPJ & "';")
    Do While Not Rst.EOF
    Call AcrescentaSocio(Rst("CNPJSocios"), 1)
    Rst.MoveNext
    Loop
    End Sub

    Sub AcrescentaSocio(CNPJ As String, Nivel As Integer)
    Dim Rst As DAO.Recordset

    CurrentDb.Execute "INSERT INTO ListaSocios(Socio) VALUES ('" & Hifen(Nivel) & DLookup("RazaoSocial", "Clientes", "CNPJ='" & CNPJ & "'") & "' & ' (" & CNPJ & ")');"
    Set Rst = CurrentDb.OpenRecordset("SELECT * FROM Socios WHERE CNPJ='" & CNPJ & "' and CNPJSocios<>'" & CNPJ & "';")
    Do While Not Rst.EOF
    Call AcrescentaSocio(Rst("CNPJSocios"), Nivel + 1)
    Rst.MoveNext
    Loop
    Nivel = Nivel + 1
    End Sub

    Function Hifen(Quant As Integer) As String
    Dim I As Integer
    Hifen = ""
    For I = 1 To Quant
    Hifen = Hifen & "--"
    Next
    End Function

    Atenção: Nenhuma empresa pode ser sócia/subsócia dela própria, senão cria referência circular e o código entra em circuito fechado e nunca mais acaba!
    criquio
    criquio
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 11229
    Registrado : 30/12/2009

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  criquio 27/3/2012, 14:34

    Conseguiu resolver?


    .................................................................................
    Meu novo site: www.vcssistemas.com.br

    Clique aqui e veja um vídeo que explica como fazer pesquisas no forum.


    DICA: Quando precisar inserir um exemplo do seu aplicativo, siga os procedimentos abaixo:
    1 - faça uma cópia do aplicativo
    2 - retire tudo que não for necessário à solução do problema, exceto o que o aplicativo precisar para funcionar
    3 - use o Compactar/Reparar
    4 - compacte o aplicativo em zip ou rar (zip para postagem como anexo na mensagem)


    Agradeça a quem lhe ajudou, clicando no joinha de uma das mensagens do usuário.
    Positive as mensagens que achar útil, no canto superior direito delas.

    avatar
    edujakel
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 02/02/2012

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  edujakel 29/3/2012, 14:50

    acabei por desistir de fazer o código usando os níveis por numeros. Fiz por simbolo e deu certo. Segue abaixo:


    Public Sub cmdOrganograma_Click()

    Call MontaSimbolo(cmbCNPJ)

    Excel = False
    Cabecalho = False

    End Sub
    ----------

    Public Sub MontaSimbolo(CNPJ)
    'monta o relatorio no excel com o simbolo ==>
    Dim Banco As Database, rst As Recordset, strSQL As String


    If Excel = False Then Call Abre_Excel("Organograma")

    Set Banco = CurrentDb
    strSQL = "SELECT CLIENTE.CNPJ, CLIENTE.RazaoSocial, SOCIOS.CNPJSocia, SOCIOS.Percentual, (SELECT CLIENTE.RazaoSocial FROM CLIENTE Where SOCIOS.CNPJSocia = CLIENTE.CNPJ) AS SOCIA FROM CLIENTE INNER JOIN SOCIOS ON CLIENTE.CNPJ = SOCIOS.CNPJ WHERE SOCIOS.CNPJ = '" & CNPJ & "';"
    Set rst = Banco.OpenRecordset(strSQL)

    'preenche cabeçalho
    If Cabecalho = False Then

    If rst.EOF = True Then
    MsgBox "Empresa informada não possui sócios", vbInformation, "Nenhum sócio encontrado"
    Exit Sub
    Else
    xls.ActiveCell(1, 1) = "CNPJ e Razão Social"
    'preenche empresa do combo
    xls.ActiveCell(2, 1) = Format(rst!CNPJ, "00\.000\.000\/0000-00") & " - " & rst!RazaoSocial
    xls.cells.select
    xls.Selection.NumberFormat = "0.00"
    xls.Range("A1").select
    Cabecalho = True

    'inicializa variaveis de linha, coluna e tabulacao
    Linha = 2
    Col = 1
    Num = "'="
    End If
    End If

    xls.Visible = True

    xls.worksheets("Organograma").Activate

    Linha = Linha + 1

    If rst.EOF Then
    Exit Sub
    Else
    'se tiver sócio aumenta um nível
    Col = Col + 1
    Num = Num & "=>"
    End If

    While Not rst.EOF


    'numeracao

    xls.ActiveCell(Linha, Col) = Num

    xls.ActiveCell(Linha, Col + 1) = rst!Percentual
    If Len(rst!CNPJSocia) = 14 Then
    xls.ActiveCell(Linha, Col + 2) = rst!Socia & " - " & Format(rst!CNPJSocia, "00\.000\.000\/0000-00")
    Else
    xls.ActiveCell(Linha, Col + 2) = rst!Socia & " - " & Format(Trim(rst!CNPJSocia), "000\.000\.000-00")
    End If

    'ajusta coluna das células
    xls.ActiveCell(Linha, Col).ColumnWidth = 7


    Call MontaSimbolo(rst!CNPJSocia)

    rst.MoveNext

    Wend

    Col = Col - 1
    Num = Left(Num, (Len(Num) - 2))

    End Sub

    ----------

    Public Sub Abre_Excel(Tipo As String)

    Dim strLivro As String

    Set xls = CreateObject("Excel.Application")
    xls.Visible = True
    xls.workbooks.Add
    xls.sheets.Add().Name = Tipo
    Excel = True

    End Sub

    ------

    desta forma os niveis foram montados, quando tentei por numeros ao retornar os niveis as primeiras linhas iniciavam sempre pelo numero 1. exemplo:
    1.1
    --1.1.1
    --1.1.2
    ----1.1.2.1
    --1.1.1 (erro aqui, deveria ser 1.1.3)

    Se alguem tiver interesse em corrigir, posso postar o código montando com numeros.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8443
    Registrado : 05/11/2009

    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  Alexandre Neves 30/7/2012, 18:57

    Tópico resolvido, por falta de retorno atempado.

    Conteúdo patrocinado


    [Resolvido]Relatório de hierarquia (Infinito) Empty Re: [Resolvido]Relatório de hierarquia (Infinito)

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/3/2024, 21:40