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

    Converter Orçamento para Pedido

    avatar
    marcofar07
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/04/2019

    Converter Orçamento para Pedido Empty Converter Orçamento para Pedido

    Mensagem  marcofar07 20/3/2022, 23:01

    Boa noite amigo, alguém poderia me ajudar?
    tenho um sistema que transforma Orçamento para pedido, com uma tabela (OcamentoDetalhe para PedidoDetalhe ) de serviços <--Aqui tudo certo
    Agora foi criado uma tabela para produtos (OcamentoDetalheP para PedidoDetalheP) <-- aqui nao conseguir


    Eis o Código:

    Código:
       '-------------**** Gera do Orçamento o Pedido ****-----------
    Dim dbOrc As Database, rs1 As DAO.Recordset, rs2 As DAO.Recordset, rs3 As DAO.Recordset, rs4 As DAO.Recordset, rs5 As DAO.Recordset, intUltimoCodigo As Long
           
            Set dbOrc = CurrentDb
            Set rs1 = dbOrc.OpenRecordset("Pedido")
            With rs1
       
        DoCmd.SetWarnings False
           intUltimoCodigo = 0
           
          .AddNew
          ![IdCliente] = Me.IdCliente
          ![DtEmissao] = Me.DtEmissao
          ![CdEmpresa] = Me.CdEmpresa
          ![Marca] = Me!Marca
          ![Modelo] = Me!Modelo
          ![Ano] = Me!Ano
          ![PlacaSerie] = Me!PlacaSerie
          ![PlacaNo] = Me!PlacaNo
          ![PlacaSerie2] = Me!PlacaSerie2
          ![PlacaNo2] = Me!PlacaNo2
          ![PlacaSerie3] = Me!PlacaSerie3
          ![PlacaNo3] = Me!PlacaNo3
          ![PlacaSerie4] = Me!PlacaSerie4
          ![PlacaNo4] = Me!PlacaNo4
          ![Solicitante] = Me!Solicitante
          ![StatusOrcamentos] = Me!StatusOrcamentos
          ![DtSaida] = Me!DtSaida
          ![Acompanhamento] = Me!Acompanhamento
          ![IdFormaPagto] = Me!IdFormaPagto
          ![IdVendedor] = Me!IdVendedor
          ![Mecanico] = Me!Mecanico
          ![Equipamento] = Me!Equipamento
          ![DsServico] = Me!DsServico
          ![ObservacaoComplementar] = Me!ObservacaoComplementar
          ![DtEmissaoCompleta] = Me!DtEmissaoCompleta
          ![IdPedidoOrcamento] = Me!IdPedido
          ![Entrada] = Me!Entrada
          ![Saidas] = Me!Saidas
          ![SubTotal] = Me!SubTotal
          ![ValorTotal] = Me!ValorTotal
          '![Solicitante] = Me!Solicitante
          .Update
          End With
     '------------------------------PedidoDetalhe-------------------------------
          Set rs2 = dbOrc.OpenRecordset("SELECT * FROM OrcamentoDetalhe WHERE idPedido=" & Me.IdPedido)
          Set rs3 = dbOrc.OpenRecordset("PedidoDetalhe")
         
       
          While (Not rs2.EOF)
              With rs3
                  .AddNew
                  ![IdPedido] = DMax("idPedido", "Pedido")
                  ![IdProduto] = rs2![IdProduto]
                  ![QtdePedido] = rs2![QtdePedido]
                  ![VlUnitario] = rs2![VlUnitario]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
      intUltimoCodigo = Nz(DMax("IdPedido", "Pedido"), 0)
           
                  .Update
                  rs2.MoveNext
              End With
      '----------------------------PedidoDetalheP-------------------------------
      'Set rs4 = dbOrc.OpenRecordset("SELECT * FROM OrcamentoDetalheP WHERE idPedido=" & Me.IdPedido)
          'Set rs5 = dbOrc.OpenRecordset("PedidoDetalheP")
         
       
         ' While (Not rs4.EOF)
              'With rs5
              '    .AddNew
              '    ![IdPedido] = DMax("idPedido", "Pedido")
              '    ![IdProduto] = rs2![IdProduto]
              '    ![QtdePedido] = rs2![QtdePedido]
             '     ![VlUnitario] = rs2![VlUnitario]
             '     '![Comprimento] = rs2![Comprimento]
              '    '![Comprimento] = rs2![Comprimento]
             '     '![Comprimento] = rs2![Comprimento]
              '    '![Comprimento] = rs2![Comprimento]
     ' intUltimoCodigo = Nz(DMax("IdPedido", "Pedido"), 0)
           
                 ' .Update
                 ' rs4.MoveNext
            '  End With
      '---------------------------------PedidoDetalheP-----------------------------------------^
       Wend
           
           rs1.Close
           Set rs1 = Nothing
           
           rs2.Close
           Set rs2 = Nothing
           
           rs3.Close
           Set rs3 = Nothing
      '-----------------------------PedidoDetalheP-----------------------------------------
         '  rs4.Close
         '  Set rs4 = Nothing
           
         '  rs5.Close
         '  Set rs5 = Nothing
      '----------------------------PedidoDetalheP-----------------------------------------^
           Set dbOrc = Nothing
           DoCmd.OpenForm "Pedido_Multiplo1", , , "IdPedido = " & intUltimoCodigo & "", , , "AberturaNormal"
           DoCmd.Close acForm, "Orçamento1"
         

         'End If
         DoCmd.SetWarnings True
               'DoCmd.OpenForm "frmpedido", acNormal, , "Idorcamento = " & Me.IdOrcamento & ""
     'End If          'DoCmd.Close acForm, "frmorcamento"
     'Else
         'Me.btntelaprincipal.Enabled = True
         'DoCmd.CancelEvent
     'End If
     
       Else
         Me.btntelaprincipal.Enabled = True
         'DoCmd.CancelEvent
       End If
       End If
         
    'Else
           
    'Else
       

    'End If

    Exit_1:
       'DoCmd.Close acForm, "frm_00_BarraProgresso"
       DoCmd.Hourglass False
       DoCmd.Echo True
       Exit Sub

    1 a:
       DoCmd.Hourglass False
       DoCmd.Echo True
       Msg = "Erro #5 " & Str(Err.Number) _
           & vbNewLine & "Descrição: " & Err.Description _
           & vbNewLine & vbNewLine & "Por favor contate o Administrador de Sistema."
       MsgBox Msg, vbExclamation, "Atenção"
       Resume Exit_1
    Else
         MsgBox "" & Me!txtUsuarioAtual & ", Seu perfil de usuário não possui esse acesso.", vbInformation, ""
         End If
    ...............................
    Desde já Agraço
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7613
    Registrado : 15/03/2013

    Converter Orçamento para Pedido Empty Re: Converter Orçamento para Pedido

    Mensagem  Alvaro Teixeira 21/3/2022, 09:34

    Olá Marco António,

    Porque não faz com consulta adicionar ?
    Algo assim:

    Código:
    DoCmd.RunSQL "INSERT INTO OrcamentoDetalheP SELECT OrcamentoDetalhe.* FROM OrcamentoDetalhe WHERE idPedido=" & Me.IdPedido
    DoCmd.RunSQL "INSERT INTO PedidoDetalheP SELECT PedidoDetalhe.* FROM PedidoDetalhe WHERE idPedido=" & Me.IdPedido

    Abraço
    avatar
    marcofar07
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/04/2019

    Converter Orçamento para Pedido Empty Converter Orçamento para Pedido

    Mensagem  marcofar07 21/3/2022, 11:56

    Bom dia amigo, Obrigado por responder e me ajudar.

    eu estiver analisando mais profundo os condigo e fiz essas mudanças, agora deu certo mais quando o produto vai para tela de pedidos ele Repete o mesmo Item, AINDA NÃO USEI O SEU EXEPLO, Mais você pode me ajudar?

    Código:
    '--------------------------------------------------------------------------------

    Dim dbOrc As Database, rs1 As DAO.Recordset, rs2 As DAO.Recordset, rs3 As DAO.Recordset, rs4 As DAO.Recordset, rs5 As DAO.Recordset, intUltimoCodigo As Long
           
            Set dbOrc = CurrentDb
            Set rs1 = dbOrc.OpenRecordset("Pedido")
            With rs1
       
        DoCmd.SetWarnings False
           intUltimoCodigo = 0
           
          .AddNew
          ![IdCliente] = Me.IdCliente
          ![DtEmissao] = Me.DtEmissao
          ![CdEmpresa] = Me.CdEmpresa
          ![Marca] = Me!Marca
          ![Modelo] = Me!Modelo
          ![Ano] = Me!Ano
          ![PlacaSerie] = Me!PlacaSerie
          ![PlacaNo] = Me!PlacaNo
          ![PlacaSerie2] = Me!PlacaSerie2
          ![PlacaNo2] = Me!PlacaNo2
          ![PlacaSerie3] = Me!PlacaSerie3
          ![PlacaNo3] = Me!PlacaNo3
          ![PlacaSerie4] = Me!PlacaSerie4
          ![PlacaNo4] = Me!PlacaNo4
          ![Solicitante] = Me!Solicitante
          ![StatusOrcamentos] = Me!StatusOrcamentos
          ![DtSaida] = Me!DtSaida
          ![Acompanhamento] = Me!Acompanhamento
          ![IdFormaPagto] = Me!IdFormaPagto
          ![IdVendedor] = Me!IdVendedor
          ![Mecanico] = Me!Mecanico
          ![Equipamento] = Me!Equipamento
          ![DsServico] = Me!DsServico
          ![ObservacaoComplementar] = Me!ObservacaoComplementar
          ![DtEmissaoCompleta] = Me!DtEmissaoCompleta
          ![IdPedidoOrcamento] = Me!IdPedido
          ![Entrada] = Me!Entrada
          ![Saidas] = Me!Saidas
          ![SubTotal] = Me!SubTotal
          ![ValorTotal] = Me!ValorTotal
          '![Solicitante] = Me!Solicitante
          .Update
          End With
     '------------------------------PedidoDetalhe-------------------------------
       
    Set rs2 = dbOrc.OpenRecordset("SELECT * FROM OrcamentoDetalhe WHERE idPedido=" & Me.IdPedido)
          Set rs3 = dbOrc.OpenRecordset("PedidoDetalhe")
         
       
          While (Not rs2.EOF)
              With rs3
                  .AddNew
                  ![IdPedido] = DMax("idPedido", "Pedido")
                  ![IdProduto] = rs2![IdProduto]
                  ![QtdePedido] = rs2![QtdePedido]
                  ![VlUnitario] = rs2![VlUnitario]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
      intUltimoCodigo = Nz(DMax("IdPedido", "Pedido"), 0)
           
                  .Update
                  rs2.MoveNext
              End With
    '------------------------------PedidoDetalheP-------------------------------
             
    Set rs4 = dbOrc.OpenRecordset("SELECT * FROM OrcamentoDetalheP WHERE idPedido=" & Me.IdPedido)
          Set rs5 = dbOrc.OpenRecordset("PedidoDetalheP")
         
       
          While (Not rs4.EOF)
              With rs5
                  .AddNew
                  ![IdPedido] = DMax("idPedido", "Pedido")
                  ![IdProduto] = rs4![IdProduto]
                  ![QtdePedido] = rs4![QtdePedido]
                  ![VlUnitario] = rs4![VlUnitario]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
                  '![Comprimento] = rs2![Comprimento]
      'intUltimoCodigo = Nz(DMax("IdPedido", "Pedido"), 0)
           
                  .Update
                  rs4.MoveNext
              End With
       Wend
       Wend
           rs1.Close
           Set rs1 = Nothing
           
           rs2.Close
           Set rs2 = Nothing
           
           rs3.Close
           Set rs3 = Nothing
           
           rs4.Close
           Set rs4 = Nothing
           
           rs5.Close
           Set rs5 = Nothing
           
           Set dbOrc = Nothing
           DoCmd.OpenForm "Pedido_Multiplo1", , , "IdPedido = " & intUltimoCodigo & "", , , "AberturaNormal"
           DoCmd.Close acForm, "Orçamento1"
         

         'End If
         DoCmd.SetWarnings True
               'DoCmd.OpenForm "frmpedido", acNormal, , "Idorcamento = " & Me.IdOrcamento & ""
     'End If          'DoCmd.Close acForm, "frmorcamento"
     'Else
         'Me.btntelaprincipal.Enabled = True
         'DoCmd.CancelEvent
     'End If
     
       Else
         Me.btntelaprincipal.Enabled = True
         'DoCmd.CancelEvent
       End If
       End If
         
    'Else
           
    'Else
       

    'End If

    Exit_1:
       'DoCmd.Close acForm, "frm_00_BarraProgresso"
       DoCmd.Hourglass False
       DoCmd.Echo True
       Exit Sub

    1 a:
       DoCmd.Hourglass False
       DoCmd.Echo True
       Msg = "Erro #5'PedidoDetalheP' " & Str(Err.Number) _
           & vbNewLine & "Descrição: " & Err.Description _
           & vbNewLine & vbNewLine & "Por favor contate o Administrador de Sistema."
       MsgBox Msg, vbExclamation, "Atenção"
       Resume Exit_1
    Else
         MsgBox "" & Me!txtUsuarioAtual & ", Seu perfil de usuário não possui esse acesso.", vbInformation,
         End If

    ------------------------------------------------Conforme imagem--------
    TELA DE ORÇAMENTOS
    "Converter Orçamento para Pedido Orzame11

    TELA DE PEDIDOS JÁ CONVERTIDO
    Converter Orçamento para Pedido Pedido11
    "
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7613
    Registrado : 15/03/2013

    Converter Orçamento para Pedido Empty Re: Converter Orçamento para Pedido

    Mensagem  Alvaro Teixeira 21/3/2022, 16:53

    Olá Marco,

    Tente fazer um teste num botão com o meu exemplo.
    Creio que será mais simples.
    Se tiver dificuldades, partilhe base de dados com parte envolvida na dúvida (tabelas, forme reporte).


    Abraço
    avatar
    marcofar07
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/04/2019

    Converter Orçamento para Pedido Empty Converter Orçamento para Pedido

    Mensagem  marcofar07 21/3/2022, 17:18

    OK AMIGO ahteixeira, Vou fazer com o seu comando e lhe retorno
    Antonildo
    Antonildo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 14/03/2014

    Converter Orçamento para Pedido Empty Re: Converter Orçamento para Pedido

    Mensagem  Antonildo 21/3/2022, 21:03

    Boa noite!! E se vc usasse só as tabelas pedidos e detalhes dos pedidos com um campo tipo de operação com a opção ORÇAMENTO, PEDIDOS.
    Abre o formulário ORÇAMENTO com a opção de tipodeoperacao como ORÇAMENTO. Depois para converter vc abri o formulário PEDIDOS com a campo tipodeoperação modificado para PEDIDO.
    avatar
    marcofar07
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/04/2019

    Converter Orçamento para Pedido Empty Converter Orçamento para Pedido

    Mensagem  marcofar07 22/3/2022, 02:49

    Boa noite, Amigos Antonildo e ahteixeira
    Bom Antonildo, não deus certo, mais Segue o link do db para analise
    (admin / 1234)

    drive.google.com/file/d/10Vuubs123pwoz6FjPgPQ4Q6__Jkt-Z-0/view?usp=sharing
    Antonildo
    Antonildo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 61
    Registrado : 14/03/2014

    Converter Orçamento para Pedido Empty Re: Converter Orçamento para Pedido

    Mensagem  Antonildo 22/3/2022, 13:17

    Bom dia!! Marco
    Acho que vc nao precisa da Tabela OrcamentoDetalheP e PedidoDetalheP
    vasta OrcamentoDetalhe
    no cadastro do produto vc colocaria o campo TIPO
    nesse campo vc adiciona para produtos "PRODUTO" e para servicos "SERVIÇOS"

    ai filtra nos formularios o que é produto e o que é servico

    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7613
    Registrado : 15/03/2013

    Converter Orçamento para Pedido Empty Re: Converter Orçamento para Pedido

    Mensagem  Alvaro Teixeira 22/3/2022, 16:02

    Olá a todos,

    Marco, o projeto que partilhou apresenta erros, deve apertar as teclas
    ALT+F11 -> Debug -> Compile
    e verificar os erros.

    Optei por recriar um exemplo.
    Tive que alterar a estrutura das tabelas e relacionamentos, veja como ficou:
    Converter Orçamento para Pedido Sys_os10

    O código que faz criação do pedido ficou assim:
    Código:
    Private Sub cmdCriarPedido_Click()
        Dim idP

        DoCmd.SetWarnings False
        
        DoCmd.RunSQL "INSERT INTO Pedido ( idPedidoOrcamento, CdEmpresa, IdVendedor, DataMov ) SELECT " _
                   & Me.idPedidoOrcamento & " , CdEmpresa, IdVendedor, DataMov FROM Orcamento WHERE idPedidoOrcamento=" & Me.idPedidoOrcamento
                  
        idP = DMax("[IdPedido]", "Pedido")
        
        DoCmd.RunSQL "INSERT INTO PedidoDetalhe ( idPedido,  IdProduto, QtdePedido, VlUnitario ) SELECT " _
                   & idP & " , IdProduto, QtdePedido, VlUnitario FROM OrcamentoDetalhe WHERE idPedidoOrcamento=" & Me.idPedidoOrcamento
        DoCmd.SetWarnings True

        MsgBox "O pedido foi criado com sucesso.", vbInformation, ""
    End Sub

    A primeira consulta adicona a "Pedido"
    Depois pesquisa o numero automatico atribuido a "IdPedido" da tabela "Pedido".
    A segunda consulta adiciona os registos a  "PedidoDetalhe "

    Segue o meu exemplo:
    cld.pt/dl/download/3ed923e2-3dfb-4626-8528-1df06b9ec0d1/Sys_OS_rev.zip

    Abraço a todos
    avatar
    marcofar07
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/04/2019

    Converter Orçamento para Pedido Empty Converter Orçamento para Pedido

    Mensagem  marcofar07 22/3/2022, 18:49

    Boa tarde amigos pelo retorno.
    Antonildo até pensei nisso mais como o sistemas tem muitos relacionamentos e dados nao prosseguir

    ahteixeira achei interessante seu exemplo muito bom mais teria que modificar varias ordem no sistema, pois ele tem varias consultas e etc...

    aqui vai o sistema completo talvez se poderem me ajudar com ele,mesmo porque alguns amigos daqui do foram me ajudaram na adaptação...


    drive.google.com/file/d/10Vuubs123pwoz6FjPgPQ4Q6__Jkt-Z-0/view?usp=sharing
    Alexandre Fim
    Alexandre Fim
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 2605
    Registrado : 13/12/2016

    Converter Orçamento para Pedido Empty Re: Converter Orçamento para Pedido

    Mensagem  Alexandre Fim 22/3/2022, 19:53

    Marco,

    Você não precisa criar um Orçamento e depois um Pedido com os mesmos dados do orçamento.
    Você pode incluir um campo na tabela de Pedidos (ex.: TipoPed) que define se o registro é um pedido ou um orçamento.
    Este campo recebe o valor "O" para Orçamento ou "P" para Pedido.
    Quando o cliente solicita um orçamento de determinados produtos, este campo deve estar como "O". Assim que o cliente aprovar o orçamento, vc muda ele pra "P", e ai já tens o pedido praticamente pronto.



    .................................................................................
    Arrow  Marcar tópico como Resolvido: clique aqui
    Arrow  Postar anexos no fórum: clique aqui

    Converter Orçamento para Pedido Setinf11
    Sistemas e Tecnologia Ltda
    avatar
    marcofar07
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/04/2019

    Converter Orçamento para Pedido Empty Converter Orçamento para Pedido

    Mensagem  marcofar07 22/3/2022, 20:17

    Alexandre, entedir mais ele tem quer ter o id do orçamento e o id pedido separado para pesquisa, ficaria assim? Pois esse sistema já está em uso, na empresa que presto serviços
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7613
    Registrado : 15/03/2013

    Converter Orçamento para Pedido Empty Re: Converter Orçamento para Pedido

    Mensagem  Alvaro Teixeira 23/3/2022, 16:19

    Olá a todos,

    Marco, face ao atual estado do seu projeto (erros compilar e modelagem da tabela de dados), creio que a sugestão do colega Alexandre Fim poderá ser muito mais fácil.
    Como diz o nosso grande JPaulo "existe muitas formas de fazer Nestum"

    Abraço


    avatar
    marcofar07
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 51
    Registrado : 02/04/2019

    Converter Orçamento para Pedido Empty Converter Orçamento para Pedido

    Mensagem  marcofar07 24/3/2022, 02:53

    Obrigado a todos, já estou fazendo conforme os colegas orientaram e assim que resolver posto aqui.....

      Data/hora atual: 1/10/2022, 16:02