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


2 participantes

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

    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 29/8/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 1/9/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.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 1/9/2014, 17:00

    Caro Dilson,

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

    Abraço
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 2/9/2014, 12:33

    Olá bom dia!

    Está aqui:
    https://dl.dropboxusercontent.com/u/8080696/ajudas/Integrado/Matriz%20para%20montagem%20de%20Estoque.rar

    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!
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 2/9/2014, 17:24

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


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 3/9/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.

    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 5/9/2014, 18:57

    Dilson,

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

    Abraços
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 8/9/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.
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 8/9/2014, 16:13

    Olá,

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

    Abraços
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 10/9/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:
    https://dl.dropboxusercontent.com/u/8080696/ajudas/Integrado/LoopPedidoFatura.rar
    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 10/9/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
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Dilson 30/9/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.

    Finformática
    Finformática
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Finformática 30/9/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

    Conteúdo patrocinado


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

    Mensagem  Conteúdo patrocinado


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