MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Compartilhe

    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Sex 29 Ago 2014, 15:06

    Grandes Mestres,

    Estou aqui novamente para pedir ajuda.

    Tenho duas tabelas: Pedidos e Fatura. Na tabela de Pedidos tenho 2 chaves NPedido (número do pedido, que é automático) e CodPro (código do produto) e diversos outros campos normais (data, preço unitário, quantidade, etc.). Na tabela de Fatura tenho basicamente os mesmos campos.
    Qual o meu problema? Existe determinada venda muito grande que só é faturado o pedido na data da entrega. Exemplo: Uma construtora, que está construindo um prédio, compra milhares de sacos de cimento, lajotas, postes, etc., não vai usar tudo da noite para o dia e pede para entregar uma parte hoje, outra daqui a 20 dias, outra quando for necessitando e por aí vai. O problema é que só fatura quando recebe a mercadoria e o vendedor só recebe a comissão quando faturado.
    Queria um código VBA para ler a tabela PEDIDOS, comparar com FATURA para ver se já teve algum produto faturado. Se não tem nada ainda, gravar em uma tabela auxiliar FATURA_AUX, número do pedido, codpro vazio, quantpro (quantidade do produto) vazio, datapro (data do processamento) e campo situação contendo: "Nada faturado para este pedido". Se já foi faturado algum pedido, gravar na mesma tabela auxiliar os mesmos campos com a quantidade faturada e, se quantidade for igual a quantidade do pedido gravar no campo situação: "Fatura completa para este produto". Caso a quantidade seja menor que a do pedido, gravar em situação: "Faturado parte deste produto". Obs.: Em um mesmo pedido de determinado produto pode ser faturado diversas vezes. Ex.: 10000 sacos de cimento. Entregou e faturou 3000, depois entregou e faturou 2000, depois mais 1000 e ainda falta para completar os 10000. Então, para podermos gravar o campo situação contendo "Fatura completa para este produto" (citado anteriormente) temos que primeiro somar o que já foi faturado para aquele produto e depois é que compara com a quantidade do pedido (tabela de pedidos).
    Ainda sou muito fraco em código e peço ajuda para ir melhorando meus conhecimentos. Antes de pedir ajuda já tentei de diversos modos e não deu certo. Principalmente nesta parte em que tem que somar partes que já forma faturas e depois comparar para ver se completou a quantidade da tabela pedidos.

    Desde já fico muito agradecido a todos desde excelente forum.

    Grande abraço

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1602
    Registrado : 11/11/2009

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  Dilson em Seg 01 Set 2014, 15:56

    Olá,

    NO caso você precisa que seja resumo por produto (item a item) ou global ?

    Se for item a item, pode montar uma consulta parecida com um controle de estoque e no agrupamento de entradas e saídas promover as frases de controle. Se não me engano um usuário já postou uma matriz de estoque criada apenas com os recursos do assistente de consulta do access. 

    Me diga se já resolveu ?. Se não resolveu, espere que vou procurar o modelo no meu repositório.


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Seg 01 Set 2014, 17:00

    Caro Dilson,

    Muito grato pelo seu interesse. Continuo tentando sem obter solução.

    Abraço

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1602
    Registrado : 11/11/2009

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  Dilson em Ter 02 Set 2014, 12:33

    Olá bom dia!

    Está aqui:
    [Você precisa estar registrado e conectado para ver este link.]

    Observe o funcionamento desse exemplo e vá no pensamento substituindo a tabela entrada pela tabela pedido e a tabela saida pela tabela fatura e a ConsultaEstoque pela tabela_aux e foque a solução que se encontra na ConsultaEstoque, pois ela estará te trazendo os dados de entrada (Pedidos) e dados de saída (Faturas) e o total que servirá como base para calcular qual frase vai assumir o registro.

    Depois a frente retorne para tratarmos das implementações mais especificas.

    Bom trabalho!


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Ter 02 Set 2014, 17:24

    Caro Amigo. Vi sua mensagem. Estou na rua. Chegando em csa vou testar e retorno. Muito grato.

    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Qua 03 Set 2014, 23:27

    Caro Amigo,

    Baixei o que me foi enviado. Verifiquei como foi feito e vi que funciona certinho para essa questão aí. O caso é, até certo ponto, parecido, mas tem várias arestas que necessitam serem resolvidas.
    Mudei bastante o modo anterior que estava tentando fazer e parece que vai dar certo. Fiz uma primeira consulta que ler uma tabela, uma segunda consulta que totaliza a segunda tabela, uma terceira consulta que compara, uma quarta consulta que ler o resultado da terceira consulta, outra que....etc. São diversas consultas que no final gera uma tabela auxiliar que vai servir de base para todas as consultas, formulários e relatórios que necessito. Até agora está dando certo, mas ainda falta multas opções.
    Mais uma vez MUITO AGRADECIDO POR SEU INTERESSE. Até aqui. Ainda não desisti do outro modo. Quero dizer: para efeito de aprendizado queria um exemplo de código que fizesse quase a mesma coisa da minha primeira solicitação neste tópico. Queria isso para fazer um estudo bem detalhado, passo a passo de cada linha para ver se consigo aprimorar meus conhecimentos em códigos.
    Detalhando o código:
    1. Ler uma tabela AA (registro por registro) que tem duas chaves primárias e diversos outros campos básicos
    2. Verifica, com as duas chaves se existe na tabela BB (que tem a mesma estrutura).
    2.1. Se NÃO EXISTIR gravar todos os mesmos campos em uma terceira tabela CC com a mesma estrutura das anteriores e mais um campo OBSERVE contendo: "Registros da tabela AA não existe na tabela BB" e passar para próximo registro da tabela AA
    2.2. Se EXISTIR gravar os mesmos campos na tabela CC e campo OBSERVE com "Registros da tabela AA existe na tabela BB" e comparar um campo VALOR existente nas duas tabelas se são iguais. Se SIM, OBSERVE_1 = "Valor de AA igual a valor de BB". Se NÃO, OBSERVE_1 = "Valor de AA difere de valor de BB".

    Este exemplo sei que vai ser de grande valia para meus conhecimentos. Já passei por diversas outras situações que a solução parecia com o que lhes solicito. Como não conseguia fazer correto criava dezenas de consultas e tabelas auxiliares que se cruzavam e encontrava o resultado. Mas sei que o caminho não é esse. Quero fazer via CÓDIGO.

    Quem me ajuda?

    Muito grato e um grande abraço.


    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Sex 05 Set 2014, 18:57

    Dilson,

    Cadê você?
    Aceito ajuda de qualquer um mestre. Tem muitos neste forum.

    Abraços

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1602
    Registrado : 11/11/2009

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  Dilson em Seg 08 Set 2014, 13:54

    Olá,

    Olha eu de novo.

    Fiquei em off devido a minha cidade ter perdido o sinal de internet por conta de rompimento de fibra ótica e graças já se normalizou.

    Olha, se o problema te favorece tempo para objeto de estudo, vamos ver o que pode ser feito.


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Seg 08 Set 2014, 16:13

    Olá,

    Tenho todo tempo que for necessário. Fique tranquilo. Fico no aguardo.

    Abraços

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1602
    Registrado : 11/11/2009

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  Dilson em Qua 10 Set 2014, 17:06

    Construí esse exemplo baseado nos seus relatos.

    De um total de 5 tabelas, existe 3 que estão diretamente envolvidas no algoritmo que criei para extrair o resultado na tabela fatura auxiliar, assim como descreveu que gostaria.

    Breve explicação da ação do código nas 3 principais tabelas:
    Temos a tabela Pedidos que contém os pedidos realizados;
    Temos a tabela Itens do pedido que é relacionada com a tabela pedidos e contém os itens de cada pedido;
    Temos a tabela faturas que registra o n° do pedido e o código de todos os produtos que sai do comercio.
    Daí:

    => Faço um laço usando For ... em todos os pedidos da tabela pedidos;
      => A cada laço eu terei um n° de pedido e com esse número eu monto um sql usando o operador IN
    e a expressão Sum. Com o IN eu seleciono todos os produtos faturados de um mesmo pedido e
    o Sum me totaliza cada item de produto;
          => Tendo cada item totalizado faço um laço usando Do While ... Em cada laço vou buscar o
                 total do pedido para comparar com o total faturado;
              => Usando sql (INSERT INTO), faço as inserções do resultado na tabela fatura auxiliar.

    O código:


    'Variáveis
    Dim rsP As Recordset
    Dim rsF As Recordset
    Dim vContador As Long
    Dim pSQL As String
    Dim qPedido As Long
    Dim buscaCodPro As Long
    Dim quantidadeDoPedido As Long
    Dim i As Long
    'Setando o primeiro recordset
    Set rsP = CurrentDb.OpenRecordset("tabPedidos")
    'Indo ao final e voltando ao começo do recordset
    rsP.MoveLast
    rsP.MoveFirst
    'Armazenando o total de registros existentes na tabela pedidos
    vContador = rsP.RecordCount
    'Iniciando laço de registro em registro da tabela pedidos
    For i = 1 To vContador
    pSQL = "SELECT NPedido_e, CodPro_e, Sum(Nz([QuantFat],0)) As Total FROM tabFaturas" _
               & " WHERE NPedido_e" _
               & " IN(SELECT NPedido_ep FROM tabItensDoPedido" _
               & " WHERE NPedido_ep=" & i & ")" _
               & " GROUP BY NPedido_e, CodPro_e"
    'Setando o segundo recordset
    Set rsF = CurrentDb.OpenRecordset(pSQL)
    'Armazenando o total de registros existentes na tabela faturas tendo como base o n° do pedido
    qPedido = rsF.RecordCount
    'Se o pedido não tiver nada faturado, então registra na tabela fatura auxiliar
    If qPedido = 0 Then
    CurrentDb.Execute "INSERT INTO tabFaturaAuxiliar(NPedido_Aux, CodPro_Aux, Quant_Aux, DataPro_Aux, Situacao_Aux)" _
                                   & "VALUES('" & i & "', '" & Now & "', '', '', 'Nada faturado para este pedido')"
    Else
    'Se cheguei aqui é porque o pedido tem itens faturados.
    'Com isso percorrerei fatura por fatura desse pedido.

    Do While Not rsF.EOF
    'Armazena o codigo do produto faturado
    buscaCodPro = rsF("CodPro_e")
    'Ir na tabela Itens do pedido para saber a quantidade feita na tabela pedido.
    quantidadeDoPedido = Nz(DLookup("QuantPed", "tabItensDoPedido", _
                        "CodPro_p =" & buscaCodPro & " And NPedido_ep =" & i & ""))
    'Se o total faturado for igual ao pedido, então registro na tabela fatura auxiliar
    'que esse produto está com a fatura completa

    If rsF("Total") = quantidadeDoPedido Then
    CurrentDb.Execute "INSERT INTO tabFaturaAuxiliar(NPedido_Aux, CodPro_Aux, Quant_Aux, DataPro_Aux, Situacao_Aux)" _
    & "VALUES('" & i & "', '" & rsF("CodPro_e") & "', '" & rsF("Total") & "', '" & Now & "', 'Fatura completa para este produto')"
    'Se o total faturado for menor ao pedido, então registro na tabela fatura auxiliar
    'que esse produto está com parte faturado.

    ElseIf rsF("Total") < quantidadeDoPedido Then
    CurrentDb.Execute "INSERT INTO tabFaturaAuxiliar(NPedido_Aux, CodPro_Aux, Quant_Aux, DataPro_Aux, Situacao_Aux)" _
    & "VALUES('" & i & "', '" & rsF("CodPro_e") & "', '" & rsF("Total") & "', '" & Now & "', 'Faturado parte deste produto')"
    End If
    'Movo para o próximo registro de produto do pedido que lacei no For i = 1 ...
    rsF.MoveNext
    'Recomeço o laço no próximo produto a partir do Do While ...
    Loop
    End If
    'Movo para o Próximo Pedido a partir do For i = 1 ...
    Next i
    'Após todos os laços concluídos em For e Do While, fecho os recordsets
    rsP.Close
    rsF.Close


    O exemplo:
    [Você precisa estar registrado e conectado para ver este link.]


    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Qua 10 Set 2014, 20:23

    Grande Dilson,

    Vi sua resposta aqui no meu celular e no entanto estou no trabalho. Ao chegar em casa vou estudar cada linha desse código detalhadamente, criar tabelas fictícias com dados, conforme você descreveu e vou ver no que dará. Garanto-lhe desde já que isso será de grande valia para mim e que vou absolver minuciosamente cada passo executado.
    Você colocou as descrições muito bem detalhadas. Ficou ótimo

    Mais uma vez, MUITO OBRIGADO.

    Em breve darei retorno.

    Grande abraço

    Dilson
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1602
    Registrado : 11/11/2009

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  Dilson em Ter 30 Set 2014, 15:26

    Olá kinhosinfo,
    Pelo tempo que passou, deduzo que as soluções propostas serviram. Estou marcando o tópico para Resolvido. Se houver alguma outra dúvida continuaremos a conversa sem problemas.



    .................................................................................
    Atenção:
    => Antes de implementar qualquer dica, faça um backup do seu projeto;
    => Retorne para marcar o Resolvido ou continuar a discussão;
    => Sempre realize pesquisas antes de postar uma pergunta;

    kinhosinfo
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 260
    Registrado : 23/03/2010

    Re: [Resolvido]Loop ler tabela, comparar com outra, gravar na terceira tabela

    Mensagem  kinhosinfo em Ter 30 Set 2014, 15:53

    Caro Dilson,

    Desculpas por demorar com retorno. Comecei a fazer um bom estudo de todo o código, que está muito bem detalhado por você, no entanto tive que suspender meus estudos por uns dias em função de atender uns clientes políticos que nesta época de eleições pedem muitos programinhas para controlar suas eleições e fiquei muito atarefado e sem tempo para o código. Posteriormente irei continuar e necessitando eu grito.
    Mias uma vez, muito obrigado.

    Grande abraço

      Data/hora atual: Seg 05 Dez 2016, 16:31