MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Word com várias tabelas e algumas vazias

    avatar
    vileman
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 579
    Registrado : 25/05/2011

    [Resolvido]Word com várias tabelas e algumas vazias Empty [Resolvido]Word com várias tabelas e algumas vazias

    Mensagem  vileman em 1/2/2020, 14:48

    Bom dia,
    Já havia feito há algum tempo em 2012 através da solução apresentada ambas pelo colega Alexandre Neves nos tópicos: https://www.maximoaccess.com/t8831-resolvidoword-com-dados-de-consulta-x-um-para-muitos e um outro em 2017: https://www.maximoaccess.com/t30872-resolvidoword-com-relacionamento-1-para-varios

    Agora estou precisando acrescentar algo que na época não acontecia nas rotinas citadas, mas após várias tentativas não consegui o que queria, conforme segue abaixo:
    São 10 tabelas envolvidas na rotina, mas como irão seguir a mesma lógica para todas, vou incluir apenas uma no exemplo a seguir:

    1) T30_LDBPessoas
    CodPessoa (Autonumeração)
    NomePessoa (Texto)
    e outros campos

    2) T301_PessoasXVinculos
    CodVinculoPF (Autonumeração)
    IDPessoa (Número – inteiro longo)
    TipoVinculo (Texto)
    NomeVinculo (Texto)
    CPFVinculo (Texto)

    No Formulário "F30_LDBPessoas" (Fonte de registro: T30_LDBPessoas) tem o subformulário: “F301_LDBPessoasXVinculos” (Fonte de registro: T301_PessoasXVinculos) que acrescenta vários registros com vários tipos de vinculos através de Caixa de Combinação do campo ‘TipoVinculo’ (Exemplo: Pai, Mãe, Filho, etc).
    Relacionamento: Formulário principal x subformulário
    Tabela “T30_LDBPessoas” está com Relacionamento [1 para vários] com o campo ‘CodPessoa’ e o campo “IDPessoa” da Tabela “T301_PessoasXVinculos”, respectivamente (1 Pessoa pode ter vários tipos de Vinculos)

    Até esse ponto está tudo perfeito. O que preciso implementar é quando for gerado o documento word (rotina já em funcionamento) e for trazido os dados inseridos nos vínculos está funcionando parcialmente através da rotina:

    'AUTORIA: Alexandre Neves em 2012 – Adaptada por mim para outra BD em 2019
    'FONTE: https://www.maximoaccess.com/t8831-resolvidoword-com-dados-de-consulta-x-um-para-muitos

    'Tabelas envolvidas: Tabela: T30_LDBPessoas (PAI) + T301_PessoasXVinculos (FILHO)
    Dim rst1 As DAO.Recordset, PFVinculo As String
    Set rst1 = CurrentDb.OpenRecordset("SELECT TipoVinculo, CPFVinculo, NomeVinculo FROM T301_PessoasXVinculos LEFT JOIN T30_LDBPessoas ON T30_LDBPessoas.CodPessoa=T301_PessoasXVinculos.IDPessoa WHERE CodPessoa=" & CodPessoa)
    PFVinculo = ""
    Do While Not rst1.EOF
    If PFVinculo = "" Then PFVinculo = rst1(0) & " - " & rst1(1) & " - " & rst1(2) Else PFVinculo = PFVinculo & vbCr & rst1(0) & " - " & rst1(1) & " - " & rst1(2)
       rst1.MoveNext
    Loop
    Set rst1 = Nothing
    .ActiveDocument.Bookmarks("Campo29").Select
    .Selection.Text = PFVinculo

    O problema é quando na tabela secundária: ”T301_PessoasXVinculos” não tem dados a serem transportados para o documento word, pois preciso apresentar o texto: “SEM LANÇAMENTO E/OU INFORMAÇÕES DE DADOS”, ou seja, mostrar esse texto no local do indicador que está no documento matriz do Word, mostrando que a tabela está vazia para determinada pessoa.

    Provisoriamente fiz o seguinte: Acrescentei no documento matriz do Word acima do campo com indicador “Campo29” o Texto:  “SEM LANÇAMENTO E/OU INFORMAÇÕES DE DADOS”, então ocorre 2 situações:
    1. quando gera o documento word no formulário principal e tem dados aparece o texto acima indicado e os dados logo abaixo do mesmo, o que fica incoerente, então pedi para que cada usuário apagasse essa linha quando houvesse dados abaixo da mesma;
    2. quando gera o documento word no formulário principal e não tem dados aparece o texto acima indicado e o campo do indicador abaixo fica vazio.

    Então, é mesmo algo que deveria ser provisório, e arcaico, falando em termos de sistema.

    Fiz vários testes para tentar solucionar o problema, conforme adiante:
    'TESTE 1: 26/11/2019 ... Funcionou ? NÃO (Salva direto no arquivo matriz e não gera o novo documento)
    ' If DCount("*", " T301_PessoasXVinculos ") = 0 Then
    '    .ActiveDocument.Bookmarks("Campo29").Select
    '    .Selection.Text = "SEM LANÇAMENTO DE DADOS."
    ' Else
    '    Exit Sub
    ' End If
    '============================================================================
    'TESTE 2: 26/11/2019 ... Funcionou ? NÃO (Gera novo documento com nome da Pessoa Física)
    '.ActiveDocument.Bookmarks("Campo29").Select
    ' If DCount("*", " T301_PessoasXVinculos ") = 0 Then
    '    .Selection.Text = "SEM LANÇAMENTO DE DADOS."
    ' End If
    '=============================================================================
    'TESTE 3: 26/11/2019 ... Funcionou ? NÃO (Gera novo documento com nome da Pessoa Física)
    'Dim Vazio As String
    'Vazio = "SEM LANÇAMENTO DE DADOS."
    '.ActiveDocument.Bookmarks("Campo29").Select
    ' If DCount("*", " T301_PessoasXVinculos ") = 0 Then
    '    .Selection.Text = Me!Vazio
    ' Else
    ' End If
    '================================================================================
    'TESTE 4: 27/11/2019 ... Funcionou ? Parcialmente (COM Dados: Funciona. SEM Dados: Não funciona)
    Dim rst1 As DAO.Recordset, PFVinculo As String
    Set rst1 = CurrentDb.OpenRecordset("SELECT TipoVinculo, CPFVinculo, NomeVinculo FROM T301_PessoasXVinculos LEFT JOIN T30_LDBPessoas ON T30_LDBPessoas.CodPessoa=T301_PessoasXVinculos.IDPessoa WHERE CodPessoa=" & CodPessoa)
    PFVinculo = ""
    Do While Not rst1.EOF
    If PFVinculo = "" Then PFVinculo = rst1(0) & " - " & rst1(1) & " - " & rst1(2) Else PFVinculo = PFVinculo & vbCr & rst1(0) & " - " & rst1(1) & " - " & rst1(2)
       rst1.MoveNext
    Loop
    Set rst1 = Nothing

    '.ActiveDocument.Bookmarks("Campo29").Select
    '.Selection.Text = (CStr(IIf(DCount("*", "T301_PessoasXVinculos ") = 0, "- SEM LANÇAMENTO E/OU INFORMAÇÕES DE DADOS. -", " ")))
    '============================================================================================
    'TESTE 5: 27/11/2019 ... Funcionou ? Parcialmente (COM Dados: Funciona. SEM Dados: Não funciona. OU VICE-VERSA)
    'criar 2 IF para campo29: Com dados e Sem dados
    '    .ActiveDocument.Bookmarks("Campo29").Select
    '    Dim rst1 As DAO.Recordset, T301_PessoasXVinculos As String
    ‘    Set rst1 = CurrentDb.OpenRecordset("SELECT TipoVinculo, CPFVinculo, NomeVinculo FROM T301_PessoasXVinculos")
    '    If DCount("*", "T301_PessoasXVinculos") > 0 Then
    '       .Selection.Text = " "
    '    ElseIf IsNull("T301_PessoasXVinculos ") Then
    '       .Selection.Text = "- SEM LANÇAMENTO E/OU INFORMAÇÕES DE DADOS. -"
    '    End If
    '============================================================================================
    'TESTE 6: 27/11/2019 ... Funcionou ? Parcialmente (COM Dados: Funciona. SEM Dados: Não funciona. OU VICE-VERSA)
    '.ActiveDocument.Bookmarks("Campo29").Select
    ' If IsNull(PFVinculo) Then
    '   .Selection.Text = "- SEM LANÇAMENTO E/OU INFORMAÇÕES DE DADOS. -"
    'Else
    '   .Selection.Text = "com dados" 'equivalente a vazio, coloquei o texto apenas para testes
    'End If
    '============================================================================================

    No entanto, ou não funciona ou funciona parcialmente com dados, o problema é justamente quando não tem dados na tabela e preciso informar isso para o documento word no local do indicador do “Campo29”

    Agradeço se alguém puder ajudar.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Word com várias tabelas e algumas vazias Empty Re: [Resolvido]Word com várias tabelas e algumas vazias

    Mensagem  Alexandre Neves em 1/2/2020, 17:40

    Boa tarde
    1-Retire o texto que acrescentou ao marcador
    2-No código, onde tem
    .Selection.Text = PFVinculo
    coloque
    If PFVinculo="" Then PFVinculo = "SEM LANÇAMENTO E/OU INFORMAÇÕES DE DADOS"
    .Selection.Text = PFVinculo


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 579
    Registrado : 25/05/2011

    [Resolvido]Word com várias tabelas e algumas vazias Empty Word com várias tabelas e algumas vazias

    Mensagem  vileman em 2/2/2020, 01:20

    Alexandre, boa noite

    Ficou perfeito, 03 vezes mais obrigado, se fosse aqui no Brasil, você iria pedir uma música no Fantástico, rsrs

    Aproveitando este tópico gostaria de saber se seria possível incluir na rotina quando gerasse o documento Word cada registro ficasse separado por uma linha horizontal.
    Exemplo:
    TipoVinculo - CPFVinculo         - NomeVinculo

    Conjuge      - 456.565.456-98 - Maria José da Silva
    ______________________________________________
    Irmão         - 156.156.895-78 - José Mendes da Silva
    ______________________________________________
    Irmã           - 259.788.474-54 - Helena Mendes da Silva
    ______________________________________________

    Também gostaria de saber se seria possível colocar o CPF com a máscara (pontos e traço), se não for não tem problema, bastaria a linha horizontal separando os registros, claro se também for possível.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    [Resolvido]Word com várias tabelas e algumas vazias Empty Re: [Resolvido]Word com várias tabelas e algumas vazias

    Mensagem  Alexandre Neves em 2/2/2020, 14:35

    Boa tarde
    Tente com o método ActiveDocument.Shapes.addline


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    vileman
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 579
    Registrado : 25/05/2011

    [Resolvido]Word com várias tabelas e algumas vazias Empty Word com várias tabelas e algumas vazias

    Mensagem  vileman em 2/2/2020, 20:10

    Boa tarde, Alexandre

    Valeu pela dica, dei uma rápida olhada no método e realmente é o que busco, vou estudar com mais tempo e calma.

    Vou dar o tópico como Resolvido, pois já atendeu minha expectativa.

    Mais uma vez muito obrigado.

    Um abraço e muita Paz.



      Data/hora atual: 24/9/2020, 05:13