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


3 participantes

    Colar registro da tabela sequencial em campos fixos

    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sex 31 Jan 2014, 01:30

    Amigos, preciso de um help, tenho duas tabelas que preciso posicionar os registros para transferir os dados de uma pra outra,

    A tabela "A" sequencial que pode ter até 10 registros, a tabela "B" tem campos fixos, conforme abaixo:


    Tabela "A"

    id  -  vr - serviço
    .
    .
    .
    ate 10 registros


    Tabela "B"

    id - vr1 - serviço1 - vr2 - serviço2 - vr3 - serviço3 ......vr10 - serviço10


    Preciso que os registros da tabela A posicione no registro da tabela B de acordo com os registros inseridos na tabela A

    Exemplo:

    Posição:

    Tabela A   -  Tabela B

    vr            -      vr1
    vr            -      vr2
    vr            -      vr3
    .
    .
    .
    vr            -      vr10


    Ou seja, os registros inseridos na tabela A a medida que forem cadastrados "até 10" serão posicionados na tabela B de acordo com os campos fixos.


    Última edição por joseantonio em Sex 31 Jan 2014, 11:33, editado 2 vez(es)
    Marcelo David
    Marcelo David
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3878
    Registrado : 21/04/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Marcelo David Sex 31 Jan 2014, 03:29

    Regras do Fórum

    1. Tenha paciência com quem coloca aqui as suas duvidas.
    2. Clareza nos títulos dos tópicos e duvidas, evite a linguagem MSN.
    3. Não colocar diversas vezes a mesma dúvida.
    4. Explicar detalhadamente o problema e informar a versão do seu Office + Sistema Operativo.
    5. Retorne sempre se deu certo, esse retorno é muito importante.
    6. Respeite toda a equipe Staff e demais membros deste fórum.
    7. Use sempre o botão Busca, sempre que tiver uma dúvida e antes de abrir tópicos.
    8. Não usar palavras como "Urgente". O fórum é livre e ninguém é obrigado a responder com urgência.
    9. A publicidade é proíbida e só pode ser feita pelo Administrador ou depois de aprovada pelo Administrador.
    10. Se o seu tópico não for respondido, tem o direito de fazer um Up ao final de 24horas!
    11. A colocação de Códigos ou Exemplos, devem constar sempre os créditos de quem o elaborou.
    12. Fale, não GRITE! Só letras Maiúsculas, na Internet é o mesmo que gritar!
    13. É proibido tirar duvidas nas Salas de Repositório, devem abrir um novo tópico nas salas de duvidas, relacionando o Exemplo em causa.

    Boa noite José,
    observe as regras do Fórum. Veja que na regra 12 nos é proibido apenas letras maiúsculas tanto nos títulos quanto nas mensagens.
    Esse é o segundo tópico que postar apenas com letras maiúsculas.

    Por favor, corrija seu título dos dois tópicos e das mensagens.




    .................................................................................
    Aprenda como criar formulário desacoplado.
    Conheça meu canal no Youtube e se inscreva.
    Colar registro da tabela sequencial em campos fixos Marcel11
    Dilson
    Dilson
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Dilson Sex 31 Jan 2014, 09:33

    Para facilitar o meu entendimento e dos demais colegas que se disponibilizem, pergunto:

    Qual será o dado representativo que será digitado em VR ?

    Como saberei que dado vai pra onde. Seria mais ou menos = usuário digitou 1 então será colado no campo VR1, digitou 2 e vai para VR2 ?

    Necessita de uma ação de loop para percorrer a tabela do inicio ao fim dos registros ? Ou é na ação de um botão no formulário simples ?
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sex 31 Jan 2014, 11:34

    Marcelo, desculpe, não sabia das regras e do uso das maiúsculas, não foi minha intenção.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sex 31 Jan 2014, 11:40

    placeholder, segue esclarecimentos:

    1- O dado representativo será $ moeda para o campo "vr" e número para o campo "serviço"
    2- O dado será sequencial, exemplo: o primeiro registro do campo vr o usuário digitou qualquer valor (tabela a), vai para o campo (vr1 da tabela b), o segundo registro do campo vr (tabela a), vai para o campo (vr2 tabelab) e assim sucessivamente até 10 registros da (tabela a) e (vr10 da tabela b)
    3- Acredito que uma ação no botão resolva o caso.

    Obrigado!
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 01 Fev 2014, 02:42

    Uma consulta de referência cruzada nào resolveria isto?

    Ou um loop pelo recordset baseado na tabela A inserindo os campo na tabela B

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sáb 01 Fev 2014, 13:34

    Amigo Harysohn, acho que um loop resolve, como ficaria o codigo?
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 01 Fev 2014, 18:20

    Manda o modelo do bd com as tabelas.

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sáb 01 Fev 2014, 18:52

    Segue bd.
    Anexos
    Colar registro da tabela sequencial em campos fixos Attachmentbdcampofixos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (49 Kb) Baixado 14 vez(es)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Dom 02 Fev 2014, 03:23

    Para que possas testar,

    1 - Crie uma caixa de combinação e  nomeeie de cboProposta
    2 - Na origem da linha da mesma uma consulta agrupada baseada na tabela apenas com o campo IdProposta, assim exibirá apenas um número de proposta. caso existam mais as exibirão
    3 - Botão para execução do código

    >> A lógica do mesmo é carregar um recordset com as tabelas envolvidas que fornecerão as informações, efetuar loop e ir adicionado os registro na tabela movim geral, o primeiro loop cria o registro, apartir do segundo o edita levando as informações para o respectivo campo da tabela sendo que na instrução Update o nome do campo é mudado a cada laço.


    Option Compare Database
    Option Explicit

    Private Sub Comando0_Click()
    Dim rs As DAO.Recordset
    Dim StrSQL As String
    Dim StrId As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String
    '-----------------------------------------------------
    'Carrego na variável a SQL das tabelas, Observe que é
    'filtrado pela IdProposta na caixa de combinação
    '-----------------------------------------------------
    StrSQL = "SELECT [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed])) AS Total," _
            & " Serviço_estetica.Serviço FROM Serviço_estetica INNER JOIN [tbl detalhes proposta] ON Serviço_estetica.Registro = [tbl detalhes proposta].servico" _
            & " WHERE [tbl detalhes proposta].idpropostad = " & Me.cboProposta.Column(0) & " GROUP BY [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed])), Serviço_estetica.Serviço;"
    '--------------------------
    'Seto o Recordset com a sql
    '--------------------------
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    '-----------------------------------------------------------------------------------------
    'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
    'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
    'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
    'assim sucessivamente modificando os nomes a cada loop inserindo os registros
    '-----------------------------------------------------------------------------------------
    nCount = 1
    '------------------------------------------------------------------------------------------------
    'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
    '------------------------------------------------------------------------------------------------
    StrCampo1 = "Conta"
    StrCampo2 = "Valor"
    '-------------------
    'Loop pelo recordset
    '-------------------
    Do While Not rs.EOF
    '---------------------------------------------------------------------------
    'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
    'porque os campos não são precedidos de numeração igual
    '---------------------------------------------------------------------------
    If nCount = 1 Then
        CurrentDb.Execute "INSERT INTO [movim geral] (conta, valor1) Values (""" & rs!Serviço & """,""" & rs!Total & """)"
        '--------------------------------------------------------------------------------
        'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
        'isto porque será necessário para atualizar o mesmo apartir do segundo laço
        '--------------------------------------------------------------------------------
        StrId = DMax("ID", "[Movim Geral]")
    Else
        '--------------------------------------------------------------------------------------
        'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
        'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
        'dos campos sejam modificados a cada laço
        '--------------------------------------------------------------------------------------
        CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Serviço & "', " & StrCampo2 & "" & nCount & "  = " & rs!Total & " WHERE ID = " & StrId & ""
    End If
    '---------------------
    'Incremento a variável
    '---------------------
    nCount = nCount + 1
    '----------------------------
    'Movo para o próximo registro
    '----------------------------
    rs.MoveNext
    '--------------
    'Executa o Loop
    '--------------
    Loop
    MsgBox "Pronto"
    End Sub


    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Dom 02 Fev 2014, 12:13

    Amigo Harysohn, ficou ótimo o código, agora preciso incluir mais dois campos, como segue:

    Consulta "qrytbl detalhes proposta"         =  tabela "movim geral"                          

                         Identificação = idclienteforn
                         Identificação = cliente_fornecedor


    Outro ponto é que como a rotina será automatizada não terá como o usuário selecionar o id pela caixa cboProposta, deverá gerar sem a seleção, pois são vários registros por vez.

    Desde já agradeço a atenção.
    Anexos
    Colar registro da tabela sequencial em campos fixos Attachmentbdcampofixos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (113 Kb) Baixado 13 vez(es)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Dom 02 Fev 2014, 13:42

    Quais os campos da movim geral que receberão os dados?
    E que campos da consulta serão os que serão levados?

    Campo1 Consulta >> Campo x Movim
    Campo2 COnsulta >> Campo n Movim


    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Dom 02 Fev 2014, 13:51

    Campo1 "Empresa" Consulta "qrytbl detalhes proposta" = "cliente_fornecedor" tbl "movim geral"
    Campo2 "Identificação" Consulta "qrytbl detalhes proposta" = "idclienteforn" tbl "movim geral"
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Dom 02 Fev 2014, 14:15

    Código:

    Private Sub Comando0_Click()
    Dim rs As DAO.Recordset
    Dim StrSQL As String
    Dim StrId As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String
    '-----------------------------------------------------
    'Carrego na variável a SQL das tabelas, Observe que é
    'filtrado pela IdProposta na caixa de combinação
    '-----------------------------------------------------
    StrSQL = "SELECT [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed])) AS Total," _
            & " Serviço_estetica.Serviço, Fornecedores.Empresa, Fornecedores.Identificação FROM Fornecedores INNER JOIN (tblProposta INNER JOIN" _
            & " (Serviço_estetica INNER JOIN [tbl detalhes proposta] ON Serviço_estetica.Registro = [tbl detalhes proposta].servico) ON" _
            & " tblProposta.idproposta = [tbl detalhes proposta].idpropostad) ON Fornecedores.Identificação = tblProposta.prospecto" _
            & " WHERE [tbl detalhes proposta].idpropostad = " & Me.cboProposta.Column(0) & "" _
            & " GROUP BY [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed])), Serviço_estetica.Serviço, Fornecedores.Empresa, Fornecedores.Identificação;"

    '--------------------------
    'Seto o Recordset com a sql
    '--------------------------
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    '-----------------------------------------------------------------------------------------
    'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
    'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
    'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
    'assim sucessivamente modificando os nomes a cada loop inserindo os registros
    '-----------------------------------------------------------------------------------------
    nCount = 1
    '------------------------------------------------------------------------------------------------
    'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
    '------------------------------------------------------------------------------------------------
    StrCampo1 = "Conta"
    StrCampo2 = "Valor"
    '-------------------
    'Loop pelo recordset
    '-------------------
    Do While Not rs.EOF
    '---------------------------------------------------------------------------
    'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
    'porque os campos não são precedidos de numeração igual
    '---------------------------------------------------------------------------
    If nCount = 1 Then
        CurrentDb.Execute "INSERT INTO [movim geral] (conta, valor1, cliente_fornecedor, idclienteforn) Values" _
                        & "(""" & rs!Serviço & """,""" & rs!Total & """,""" & rs!Empresa & """,""" & rs!Identificação & """)"
        '--------------------------------------------------------------------------------
        'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
        'isto porque será necessário para atualizar o mesmo apartir do segundo laço
        '--------------------------------------------------------------------------------
        StrId = DMax("ID", "[Movim Geral]")
    Else
        '--------------------------------------------------------------------------------------
        'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
        'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
        'dos campos sejam modificados a cada laço
        '--------------------------------------------------------------------------------------
        CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Serviço & "', " & StrCampo2 & "" & nCount & "  = " & rs!Total & " WHERE ID = " & StrId & ""
    End If
    '---------------------
    'Incremento a variável
    '---------------------
    nCount = nCount + 1
    '----------------------------
    'Movo para o próximo registro
    '----------------------------
    rs.MoveNext
    '--------------
    'Executa o Loop
    '--------------
    Loop
    MsgBox "Pronto"
    End Sub





    Quanto a automatizacão, seria um recordser baseado na tblProposta..

    1 - Executa loop no recordset baseado na tblProposta.. Este consulta (SQL) seria filtrada ou por CheckBoxe's ou registros selecionados..
    e ao invés do critério da caixa de combinação, utiliza o campo do recordset referente ao número da prposta.

    é por ai.


    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Dom 02 Fev 2014, 14:23

    Ótimo amigo, funcionou perfeitamente, para automação, será baseado na tabela "tblProposta" o critério será quando o campo Status tiver como "APROVADA".
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Seg 03 Fev 2014, 13:23

    Amigo Harysohn, segue bd para análise, o código funcionou perfeitamente, porém preciso que gere todos lançamentos sem a necessidade de selecionar a proposta no campo "cboproposta", segue os critérios para incluir no código:

    1- Quando o campo "status" da tabela "tblProposta" estiver como "APROVADA" deverá gerar os lançamentos na tbl "movim geral", para os registros que estiverem com outro status não deverá gerar os lançamentos;
    2- Inclui no bd um form chamado "faturamento_gerar", nesse form tem um campo com nome "competencia", esse campo serve para gerar o vencimento a ser levado para a tbl "movim geral", campo "venc", com o formado mm/yyyy, para completar o vencimento com o dia na "tblProposta" tem um campo denominado "diavenc" que completado ao campo "competencia" formará o vencimento no formado "dd/mm/yyyy";

    Agradeço a atenção e colaboração.
    Anexos
    Colar registro da tabela sequencial em campos fixos Attachmentbdcampofixos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (141 Kb) Baixado 9 vez(es)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Seg 03 Fev 2014, 22:09

    Eis:


    Dim rs As DAO.Recordset
    Dim StrSQL As String
    Dim StrId As Long, StrIDOld As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String

    '-----------------------------------------------------
    'Carrego na variável a SQL das tabelas, Observe que é
    'filtrado pela IdProposta na caixa de combinação
    '-----------------------------------------------------
    Dim StrStatus As String
    StrStatus = "Aprovada"
    StrSQL = "SELECT [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed])) AS Total," _
    & " Serviço_estetica.Serviço, Fornecedores.Empresa, Fornecedores.Identificação, tblProposta.diavenc, tblProposta.status" _
    & " FROM Fornecedores INNER JOIN (tblProposta INNER JOIN (Serviço_estetica INNER JOIN [tbl detalhes proposta] ON Serviço_estetica.Registro" _
    & " = [tbl detalhes proposta].servico) ON tblProposta.idproposta = [tbl detalhes proposta].idpropostad) ON Fornecedores.Identificação" _
    & " = tblProposta.prospecto GROUP BY [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed]))," _
    & " Serviço_estetica.Serviço, Fornecedores.Empresa, Fornecedores.Identificação, tblProposta.diavenc, tblProposta.status HAVING (((tblProposta.status)='Aprovada'))"
    '--------------------------
    'Seto o Recordset com a sql
    '--------------------------
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    '-----------------------------------------------------------------------------------------
    'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
    'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
    'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
    'assim sucessivamente modificando os nomes a cada loop inserindo os registros
    '-----------------------------------------------------------------------------------------
    nCount = 1
    '------------------------------------------------------------------------------------------------
    'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
    '------------------------------------------------------------------------------------------------
    StrCampo1 = "Conta"
    StrCampo2 = "Valor"
    '-------------------
    'Loop pelo recordset
    '-------------------
    Do While Not rs.EOF
    '---------------------------------------------------------------------------
    'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
    'porque os campos não são precedidos de numeração igual
    '---------------------------------------------------------------------------
    If rs!idPropostad <> StrIDOld Then nCount = 1
    If nCount = 1 Then
    CurrentDb.Execute "INSERT INTO [movim geral] (conta, valor1, cliente_fornecedor, idclienteforn) Values" _
    & "(""" & rs!Serviço & """,""" & rs!Total & """,""" & rs!Empresa & """,""" & rs!Identificação & """)"
    '--------------------------------------------------------------------------------
    'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
    'isto porque será necessário para atualizar o mesmo apartir do segundo laço
    '--------------------------------------------------------------------------------
    StrId = DMax("ID", "[Movim Geral]")
    StrIDOld = rs!idPropostad
    Else
    '--------------------------------------------------------------------------------------
    'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
    'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
    'dos campos sejam modificados a cada laço
    '--------------------------------------------------------------------------------------
    CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & " = '" & rs!Serviço & "', " & StrCampo2 & "" & nCount & " = " & rs!Total & " WHERE ID = " & StrId & ""
    End If
    '---------------------
    'Incremento a variável
    '---------------------
    nCount = nCount + 1
    '----------------------------
    'Movo para o próximo registro
    '----------------------------
    rs.MoveNext
    '--------------
    'Executa o Loop
    '--------------
    Loop
    MsgBox "Pronto"
    End Sub



    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Seg 03 Fev 2014, 23:07

    Amigo ficou perfeita a função, só ficou faltando preencher o campo "venc" da tabela "movim geral", veja a regra:

    -Inclui no bd um form chamado "faturamento_gerar", nesse form tem um campo com nome "competencia", esse campo serve para gerar o vencimento a ser levado para a tbl "movim geral", para o campo "venc", para completar o vencimento com o dia na "tblProposta" tem um campo denominado "diavenc" que completado ao campo "competencia" formato com o formado mm/yyyy, formará o vencimento no formado "dd/mm/yyyy";


    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Ter 04 Fev 2014, 03:15

    Não entendi nada. hehehe


    Detalhe isto.

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Qua 05 Fev 2014, 23:05

    É que precisa ser inserido a data de vencimento no campo "venc" da tabela "movim geral" , para formar a data será utilizado o dia que será informado pelo usuário no momento do cadastro da proposta no campo "diavenc" da tabela "tblProposta" e para completar com mês e ano será utilizado o campo "competencia" do formulário "faturamento_gerar", dessa formar juntará o dia, mês e ano e formará o vencimento no formato correto "dd/mm/yyyy".

    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Qui 06 Fev 2014, 12:42

    De mais detalhes de forma clara.. algo assim..

    Pega o Dia da tabela Tal
    Junta com o Mes da tabela X...
    e lança no campo y da tabela n...


    Cumprimetos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Qui 06 Fev 2014, 14:49

    Pega o campo "diavenc" da tabela "tblProposta", junta com o campo "competencia" do formulário "faturamento_gerar" e forma o vencimento no formato "dd/mm/yyyy", depois lança no campo "venc" da tabela "movim geral".

    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Qui 06 Fev 2014, 21:09

    Não testei pois a caixa de combinação Competencia não tem tabela junto ao bd.

    Eis:


    Dim StrSQL As String
    Dim StrId As Long, StrIDOld As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String
    Dim dtData As Variant

    '-----------------------------------------------------
    'Carrego na variável a SQL das tabelas, Observe que é
    'filtrado pela IdProposta na caixa de combinação
    '-----------------------------------------------------
    Dim StrStatus As String
    StrStatus = "Aprovada"
    StrSQL = "SELECT [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed])) AS Total," _
            & " Serviço_estetica.Serviço, Fornecedores.Empresa, Fornecedores.Identificação, tblProposta.diavenc, tblProposta.status" _
            & " FROM Fornecedores INNER JOIN (tblProposta INNER JOIN (Serviço_estetica INNER JOIN [tbl detalhes proposta] ON Serviço_estetica.Registro" _
            & " = [tbl detalhes proposta].servico) ON tblProposta.idproposta = [tbl detalhes proposta].idpropostad) ON Fornecedores.Identificação" _
            & " = tblProposta.prospecto GROUP BY [tbl detalhes proposta].idpropostad, (Nz([quantidade])*Nz([vr_unit]))-(Nz([retinss])-Nz([retmun])-Nz([retfed]))," _
            & " Serviço_estetica.Serviço, Fornecedores.Empresa, Fornecedores.Identificação, tblProposta.diavenc, tblProposta.status  HAVING (((tblProposta.status)='Aprovada'))"
    '--------------------------
    'Seto o Recordset com a sql
    '--------------------------
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    '-----------------------------------------------------------------------------------------
    'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
    'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
    'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
    'assim sucessivamente modificando os nomes a cada loop inserindo os registros
    '-----------------------------------------------------------------------------------------
    nCount = 1
    '------------------------------------------------------------------------------------------------
    'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
    '------------------------------------------------------------------------------------------------
    StrCampo1 = "Conta"
    StrCampo2 = "Valor"

    '-------------------
    'Loop pelo recordset
    '-------------------
    Do While Not rs.EOF
    '---------------------------------------------------------------------------
    'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
    'porque os campos não são precedidos de numeração igual
    '---------------------------------------------------------------------------
    If rs!idPropostad <> StrIDOld Then nCount = 1
    If nCount = 1 Then
    '---------------------------------------------------------------------------------------------------------
    'Carrega na variável o vencimento concatentando o campo do recordset com o registro da caixa de combinação
    dtData = CDate(rs!diavenc & "/" & Me.competencia)
    '---------------------------------------------------------------------------------------------------------
    CurrentDb.Execute "INSERT INTO [movim geral] (conta, valor1, cliente_fornecedor, idclienteforn,venc) Values" _
                        & "(""" & rs!Serviço & """,""" & rs!Total & """,""" & rs!Empresa & """,""" & rs!Identificação & """, """ & dtData & """)"
        '--------------------------------------------------------------------------------
        'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
        'isto porque será necessário para atualizar o mesmo apartir do segundo laço
        '--------------------------------------------------------------------------------
        StrId = DMax("ID", "[Movim Geral]")
        StrIDOld = rs!idPropostad
    Else
        '--------------------------------------------------------------------------------------
        'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
        'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
        'dos campos sejam modificados a cada laço
        '--------------------------------------------------------------------------------------
        CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Serviço & "', " & StrCampo2 & "" & nCount & "  = " & rs!Total & " WHERE ID = " & StrId & ""
    End If
    '---------------------
    'Incremento a variável
    '---------------------
    nCount = nCount + 1
    '----------------------------
    'Movo para o próximo registro
    '----------------------------
    rs.MoveNext
    '--------------
    'Executa o Loop
    '--------------
    Loop
    MsgBox "Pronto"


    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Qui 06 Fev 2014, 23:59

    Amigo, esta ocorrendo erro de compilação na linha: Set rs = CurrentDb.OpenRecordset(StrSQL)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 08 Fev 2014, 02:14

    Envie o BD com a tabela da combo competencia..

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sáb 08 Fev 2014, 12:06

    Amigo, segue bd para análise.

    Organizei as duas tabelas que preciso em uma única "tmp", agora a base dos dados a ser transferido para tbl "movim geral" é a consulta "qrytmpfatura".

    Para gerar essa consulta é necessário clicar antes no botão Fixo e Eventual do frm "faturamento_gerar" as funções dos botões é gerar uma tbl temporária que organizará os dados "tmpfatura".

    Para função ficar completa basta incluir o vencimento e corrigir o código do botão "Gerar".

    Obrigado!
    Anexos
    Colar registro da tabela sequencial em campos fixos Attachmentbdcampofixos.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (148 Kb) Baixado 8 vez(es)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 08 Fev 2014, 18:07

    Tente aplicar a variável:

    Dim StrSQL As String
    Dim StrId As Long, StrIDOld As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String
    Dim dtData As Variant
    Dim rs as Dao.Recordset
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 08 Fev 2014, 18:10

    Não entendi nada do que disse acima..
    Voce modificou tudo?


    Cumprimentos.
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 08 Fev 2014, 18:11

    No Cödigo eu não utilizo nenhuma consulta gráfica.. É tudo SQL..

    Cumprimentos.
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 08 Fev 2014, 18:14

    Você modificou tudo.. desabilitou partes do código..

    Assim eu me perco na solução amigão...

    Cumprimentos.
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 08 Fev 2014, 18:22

    Você está inserindo valores em três campos, por vezes consecutivas, diferenciando-os pelo sufixo.. se 1, se 2 etc..

    São eles: Conta, Valor e Grupo

    Pergunto: Quais campos da SQl abaixo corresponde às informações?


    StrSQL = "SELECT tmpfatura.grupox, tmpfatura.contax, Sum(tmpfatura.total) AS SomaDetotal, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc" _
            & " FROM tmpfatura GROUP BY tmpfatura.grupox, tmpfatura.contax, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc HAVING (((Sum(tmpfatura.total))<>0));"

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Ter 11 Fev 2014, 00:34

    Nesse formato o critério será o cliente, campo "idcliente" tmpfatura, os campos correspondentes são:

    movim geral.conta = tmpfatura.contax
    movim geral.grupo = tmpfatura.grupox
    movim geral.valor1 = tmpfatura.total
    movim geral.cliente_fornecedor = tmpfatura.Empresa
    movim geral.idclienteforn = tmpfatura.idcliente
    .
    .
    .
    movim geral.conta10 = tmpfatura.contax
    movim geral.grupo10 = tmpfatura.grupox
    movim geral.valor10 = tmpfatura.total
    movim geral.cliente_fornecedor = tmpfatura.Empresa
    movim geral.idclienteforn = tmpfatura.idcliente


    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Ter 11 Fev 2014, 09:09

    Ei-lo:


    Dim rs As DAO.Recordset
    Dim StrSQL As String
    Dim StrId As Long, StrIDOld As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String, StrCampo3 As String

    '-----------------------------------------------------
    'Carrego na variável a SQL das tabelas, Observe que é
    'filtrado pela IdProposta na caixa de combinação
    '-----------------------------------------------------
    'Dim StrStatus As String
    StrSQL = "SELECT tmpfatura.grupox, tmpfatura.contax, Sum(tmpfatura.total) AS SomaDetotal, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc" _
            & " FROM tmpfatura GROUP BY tmpfatura.grupox, tmpfatura.contax, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc HAVING (((Sum(tmpfatura.total))<>0));"
    '--------------------------
    'Seto o Recordset com a sql
    '--------------------------
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    '-----------------------------------------------------------------------------------------
    'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
    'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
    'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
    'assim sucessivamente modificando os nomes a cada loop inserindo os registros
    '-----------------------------------------------------------------------------------------
    nCount = 1
    '------------------------------------------------------------------------------------------------
    'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
    '------------------------------------------------------------------------------------------------
    StrCampo1 = "Conta"
    StrCampo2 = "Valor"
    StrCampo3 = "Grupo"
    '-------------------
    'Loop pelo recordset
    '-------------------
    Do While Not rs.EOF
    '---------------------------------------------------------------------------
    'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
    'porque os campos não são precedidos de numeração igual
    '---------------------------------------------------------------------------
    'If rs!idpropostad <> StrIDOld Then nCount = 1
    If nCount = 1 Then
        CurrentDb.Execute "INSERT INTO [movim geral] (conta, grupo, valor1, cliente_fornecedor, idclienteforn) Values" _
                        & "(""" & rs!Contax & """,""" & rs!Grupox & """,""" & rs!SomaDetotal & """,""" & rs!Empresa & """,""" & rs!idcliente & """)"
        '--------------------------------------------------------------------------------
        'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
        'isto porque será necessário para atualizar o mesmo apartir do segundo laço
        '--------------------------------------------------------------------------------
        StrId = DMax("ID", "[Movim Geral]")
        'StrIDOld = rs!idpropostad
    Else
        '--------------------------------------------------------------------------------------
        'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
        'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
        'dos campos sejam modificados a cada laço
        '--------------------------------------------------------------------------------------
        CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Contax & "', " & StrCampo2 & "" & nCount & "  = " & rs!SomaDetotal & ", " & StrCampo3 & "" & nCount & "  = '" & rs!Grupox & "' WHERE ID = " & StrId & ""
    End If
    '---------------------
    'Incremento a variável
    '---------------------
    nCount = nCount + 1
    '----------------------------
    'Movo para o próximo registro
    '----------------------------
    rs.MoveNext
    '--------------
    'Executa o Loop
    '--------------
    Loop
    MsgBox "Pronto"



    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Ter 11 Fev 2014, 22:10

    Amigão, ficou excelente, falta só preencher o campo "venc" da tabela "movim geral", conforme explicação abaixo:


    Pega o campo "venc" da tabela "tmpfatura", junta com o campo "competencia" do formulário "faturamento_gerar" e forma o vencimento no formato "dd/mm/yyyy", depois lança no campo "venc" da tabela "movim geral".

    Obrigado!
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Qua 12 Fev 2014, 23:26

    Muito cuidado com tratamento de erros do Tipo Resume Next.. isto poderá lhe trazer infortúnios futuros!

    Eis:


    Private Sub DuplicarConta_Click()
    Dim rs As DAO.Recordset
    Dim StrSQL As String
    Dim StrId As Long, StrIDOld As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String, StrCampo3 As String
    Dim dtVenc  As Date

    '-----------------------------------------------------
    'Carrego na variável a SQL das tabelas, Observe que é
    'filtrado pela IdProposta na caixa de combinação
    '-----------------------------------------------------
    'Dim StrStatus As String
    StrSQL = "SELECT tmpfatura.grupox, tmpfatura.contax, Sum(tmpfatura.total) AS SomaDetotal, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc" _
            & " FROM tmpfatura GROUP BY tmpfatura.grupox, tmpfatura.contax, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc HAVING (((Sum(tmpfatura.total))<>0));"
    '--------------------------
    'Seto o Recordset com a sql
    '--------------------------
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    '-----------------------------------------------------------------------------------------
    'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
    'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
    'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
    'assim sucessivamente modificando os nomes a cada loop inserindo os registros
    '-----------------------------------------------------------------------------------------
    nCount = 1
    '------------------------------------------------------------------------------------------------
    'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
    '------------------------------------------------------------------------------------------------
    StrCampo1 = "Conta"
    StrCampo2 = "Valor"
    StrCampo3 = "Grupo"
    '-------------------
    'Loop pelo recordset
    '-------------------
    Do While Not rs.EOF
    '---------------------------------------------------------------------------
    'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
    'porque os campos não são precedidos de numeração igual
    '---------------------------------------------------------------------------
    dtData = rs!Venc & "/" & Left(Me.competencia, 2) & "/" & Right(Me.competencia, 4)
    MsgBox dtData
    If nCount = 1 Then
        CurrentDb.Execute "INSERT INTO [movim geral] (conta, grupo, valor1, cliente_fornecedor, idclienteforn, Venc) Values" _
                        & "(""" & rs!Contax & """,""" & rs!Grupox & """,""" & rs!SomaDetotal & """,""" & rs!Empresa & """,""" & rs!idcliente & """, """ & dtData & """)"
        '--------------------------------------------------------------------------------
        'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
        'isto porque será necessário para atualizar o mesmo apartir do segundo laço
        '--------------------------------------------------------------------------------
        StrId = DMax("ID", "[Movim Geral]")
        'StrIDOld = rs!idpropostad
    Else
        '--------------------------------------------------------------------------------------
        'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
        'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
        'dos campos sejam modificados a cada laço
        '--------------------------------------------------------------------------------------
        CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Contax & "', " & StrCampo2 & "" & nCount & "  = " & rs!SomaDetotal & ", " & StrCampo3 & "" & nCount & "  = '" & rs!Grupox & "' WHERE ID = " & StrId & ""
    End If
    '---------------------
    'Incremento a variável
    '---------------------
    nCount = nCount + 1
    '----------------------------
    'Movo para o próximo registro
    '----------------------------
    rs.MoveNext
    '--------------
    'Executa o Loop
    '--------------
    Loop
    MsgBox "Pronto"
    End Sub



    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sex 14 Fev 2014, 00:37

    Valeu amigo, muito obrigado, funcionou perfeitamente.
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sex 14 Fev 2014, 12:58

    Não se esqueça de clicar no joinha da mensagem que o auxiliou.

    O Fórum agradece o Retorno.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sáb 15 Fev 2014, 13:19

    Amigo, o código deu erro quando envolve mais de um cliente, veja a linha que o erro ocorre, anexei também o bd com mais de um cliente para análise. Obrigado!

    Código:

        CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Contax & "', " & StrCampo2 & "" & nCount & "  = " & rs!SomaDetotal & ", " & StrCampo3 & "" & nCount & "  = '" & rs!Grupox & "' WHERE ID = " & StrId & ""

    Anexos
    Colar registro da tabela sequencial em campos fixos Attachmentbdcampofixos0.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (166 Kb) Baixado 5 vez(es)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 15 Fev 2014, 14:11

    Eis:


    Dim rs As DAO.Recordset
    Dim StrSQL As String
    Dim StrId As Long, StrIDOld As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String, StrCampo3 As String
    Dim dtVenc  As Date, dtdata

    '-----------------------------------------------------
    'Carrego na variável a SQL das tabelas, Observe que é
    'filtrado pela IdProposta na caixa de combinação
    '-----------------------------------------------------
    'Dim StrStatus As String
    StrSQL = "SELECT tmpfatura.grupox, tmpfatura.contax, Sum(tmpfatura.total) AS SomaDetotal, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc" _
            & " FROM tmpfatura GROUP BY tmpfatura.grupox, tmpfatura.contax, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc HAVING (((Sum(tmpfatura.total))<>0));"
    '--------------------------
    'Seto o Recordset com a sql
    '--------------------------
    Set rs = CurrentDb.OpenRecordset(StrSQL)
    '-----------------------------------------------------------------------------------------
    'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
    'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
    'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
    'assim sucessivamente modificando os nomes a cada loop inserindo os registros
    '-----------------------------------------------------------------------------------------
    nCount = 1
    '------------------------------------------------------------------------------------------------
    'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
    '------------------------------------------------------------------------------------------------
    StrCampo1 = "Conta"
    StrCampo2 = "Valor"
    StrCampo3 = "Grupo"
    '-------------------
    'Loop pelo recordset
    '-------------------
    Do While Not rs.EOF
    '---------------------------------------------------------------------------
    'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
    'porque os campos não são precedidos de numeração igual
    '---------------------------------------------------------------------------
    dtdata = rs!Venc & "/" & Left(Me.competencia, 2) & "/" & Right(Me.competencia, 4)
    'MsgBox dtdata
    If nCount = 1 Then
        CurrentDb.Execute "INSERT INTO [movim geral] (conta, grupo, valor1, cliente_fornecedor, idclienteforn, Venc) Values" _
                        & "(""" & rs!Contax & """,""" & rs!Grupox & """,""" & rs!SomaDetotal & """,""" & rs!Empresa & """,""" & rs!idcliente & """, """ & dtdata & """)"
        '--------------------------------------------------------------------------------
        'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
        'isto porque será necessário para atualizar o mesmo apartir do segundo laço
        '--------------------------------------------------------------------------------
        StrId = DMax("ID", "[Movim Geral]")
        'StrIDOld = rs!idpropostad
    ElseIf nCount >= 1 And nCount <= 16 Then
        '--------------------------------------------------------------------------------------
        'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
        'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
        'dos campos sejam modificados a cada laço
        '--------------------------------------------------------------------------------------
        CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Contax & "', " & StrCampo2 & "" & nCount & "  = " & rs!SomaDetotal & ", " & StrCampo3 & "" & nCount & "  = '" & rs!Grupox & "' WHERE ID = " & StrId & ""
    ElseIf nCount > 16 Then
        nCount = 0
    End If
    '---------------------
    'Incremento a variável
    '---------------------
    nCount = nCount + 1
    '----------------------------
    'Movo para o próximo registro
    '----------------------------
    rs.MoveNext
    '--------------
    'Executa o Loop
    '--------------
    Loop
    MsgBox "Pronto"


    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sáb 15 Fev 2014, 14:28

    Amigo, não deu certo, gerou dois lançamentos, porém com o mesmo cliente e os campos não seguiram a sequencia, acho que não esta seguindo o critério pelo id do cliente e sim pelos lançamentos.

    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 15 Fev 2014, 19:43

    Vais ter que adicionar na tabela tmpProposta a id da proposta...

    Cumprimentos.
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sáb 15 Fev 2014, 19:45

    tmpFatura quis dizer.. Faça isto e me envie.

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Sáb 15 Fev 2014, 21:18

    Amigo nao da pra filtrar pelo id do cliente? E pq sera gerado um lancamento por cliente, se incluir o idproposta sera gerado mais de um lancamento por cliente pois um cliente podera ter mais de uma proposta.
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Dom 16 Fev 2014, 02:22

    Amigão.. Sem a ID da proposta não tem como eu lançar corretamente...
    Se for apenas para o cliente.. observe que para o mesmo cliente tem duas propostas diferentes..
    Sem identificá-la tentará mandar para o mesmo registros.. e não dará certo o numero de campos..

    Voce tem que colocar a ID da proposta referente ao registro.

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Ter 18 Fev 2014, 01:56

    Amigo, inclui o id da proposta, veja no bd anexo.
    Anexos
    Colar registro da tabela sequencial em campos fixos Attachmentbdcampofixos0.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (196 Kb) Baixado 13 vez(es)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sex 28 Fev 2014, 14:29

    Desculpe-me a demora.. tenho estado muito atarefado..
    Ei-lo:


    Dim rs As DAO.Recordset
    Dim rsCount As DAO.Recordset
    Dim yCount As Long
    Dim StrSQL As String, strSQLCount As String
    Dim StrId As Long, StrIDOld As Long
    Dim nCount As Byte
    Dim StrCampo1 As String, StrCampo2 As String, StrCampo3 As String
    Dim dtVenc  As Date, dtdata
    Dim X As Long

    '-----------------------------------------------------------------------------
    'Carrego na variável a sql  que comporta a contagem dos registros de mesma ID
    '-----------------------------------------------------------------------------
    strSQLCount = "SELECT tmpfatura.grupox, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.idproposta FROM tmpfatura" _
                & " GROUP BY tmpfatura.grupox, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.idproposta;"
    '------------------------------------------------------------------------
    'Seto o recordset para abrir a SQL para contagem de registros de mesma ID
    '------------------------------------------------------------------------
    Set rsCount = CurrentDb.OpenRecordset(strSQLCount)
    '-------------------------------------------------------------------
    'movo o ponteiro para o último registro e em seguida para o primeiro
    '-------------------------------------------------------------------
    rsCount.MoveLast: rsCount.MoveFirst
    '----------------------------------------------
    'Carrego na variável a contagem para o registro
    '----------------------------------------------
    yCount = rsCount.RecordCount
    '---------------------------------
    'Executo loop baseado no contador
    '---------------------------------
    Do While Not rsCount.EOF
        StrSQL = "SELECT tmpfatura.grupox, tmpfatura.contax, Sum(tmpfatura.total) AS SomaDetotal, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.idProposta" _
                & " FROM tmpfatura GROUP BY tmpfatura.grupox, tmpfatura.contax, tmpfatura.Empresa, tmpfatura.idcliente, tmpfatura.venc, tmpfatura.venc, tmpfatura.idProposta" _
                & " HAVING (((Sum(tmpfatura.total))<>0)) And tmpfatura.venc = " & rsCount!IdProposta & ";"
        '--------------------------
        'Seto o Recordset com a sql
        '--------------------------
        Set rs = CurrentDb.OpenRecordset(StrSQL)
        '-----------------------------------------------------------------------------------------
        'Seto a variável como 1, esta variável será utilizada na instrução UPDATE ao segundo loop
        'Será utilizada para modificar o nome do Campo a csda loop Valor(nCount), Conta(nCount)
        'Assim se a variável for = 2 os Campos terão seus respectivos nome: Valor2 e Conta2 e
        'assim sucessivamente modificando os nomes a cada loop inserindo os registros
        '-----------------------------------------------------------------------------------------
        nCount = 1
        '------------------------------------------------------------------------------------------------
        'Carrego nas variáveis a primeira parte do nome as quais serão concatenadas com a variável nCount
        '------------------------------------------------------------------------------------------------
        StrCampo1 = "Conta"
        StrCampo2 = "Valor"
        StrCampo3 = "Grupo"
        '-------------------
        'Loop pelo recordset
        '-------------------
        Do While Not rs.EOF
            '---------------------------------------------------------------------------
            'Na primeira volta utiliza os nomes dos campos tal como o são na tabela isto
            'porque os campos não são precedidos de numeração igual
            '---------------------------------------------------------------------------
            dtdata = rs!Venc & "/" & Left(Me.competencia, 2) & "/" & Right(Me.competencia, 4)
            'MsgBox dtdata
            If nCount = 1 Then
                CurrentDb.Execute "INSERT INTO [movim geral] (conta, grupo, valor1, cliente_fornecedor, idclienteforn, Venc) Values" _
                        & "(""" & rs!Contax & """,""" & rs!Grupox & """,""" & rs!SomaDetotal & """,""" & rs!Empresa & """,""" & rs!idcliente & """, """ & dtdata & """)"
                '--------------------------------------------------------------------------------
                'Como foi inserido um registro é necessário guardar a ID do mesmo em uma variável
                'isto porque será necessário para atualizar o mesmo apartir do segundo laço
                '--------------------------------------------------------------------------------
                StrId = DMax("ID", "[Movim Geral]")
            'StrIDOld = rs!idpropostad
            ElseIf nCount >= 1 And nCount <= 16 Then
                '--------------------------------------------------------------------------------------
                'Atualiza o registro criando anteriormente filtrado pelo campo ID e pelo critério StrID
                'Aqui utiliza-se a concatenação das variáveis citadas acima para que os nomes
                'dos campos sejam modificados a cada laço
                '--------------------------------------------------------------------------------------
                CurrentDb.Execute "UPDATE [movim geral] Set " & StrCampo1 & "" & nCount & "  = '" & rs!Contax & "', " & StrCampo2 & "" & nCount & "  = " & rs!SomaDetotal & ", " & StrCampo3 & "" & nCount & "  = '" & rs!Grupox & "' WHERE ID = " & StrId & ""
            ElseIf nCount > 16 Then
                nCount = 0
            End If
            '---------------------
            'Incremento a variável
            '---------------------
            nCount = nCount + 1
            '----------------------------
            'Movo para o próximo registro
            '----------------------------
            rs.MoveNext
            '--------------
            'Executa o Loop
            '--------------
        Loop
    rsCount.MoveNext
    Loop
    MsgBox "Pronto"
    End Sub


    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Ter 04 Mar 2014, 22:50

    Amigo, quando tem mais de um grupo diferente o código está quebrando linha, exemplo: 10-OPERACIONAL, se incluir um grupo 11-EVENTUAL mesmo não tendo preenchido todos os campos ele vai quebrar a linha.
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Qui 06 Mar 2014, 04:46

    De mais detalhes disto e poste o exemplo com estas novas informações.

    Cumprimentos.
    avatar
    joseantonio
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 142
    Registrado : 18/07/2011

    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  joseantonio Qui 06 Mar 2014, 21:22

    No exemplo anterior tinha somente um grupo inserido na tbl "tmpfatura" com o nome de "10-OPERACIONAL", só que esse campo pode ter outros nomes por exemplo: "11-EVENTUAL" ou "12-FINANCEIRO", quando o grupo é unico "10-OPERACIONAL" esta funcionando perfeitamente, porém quando incluo outro nome de grupo o sistema duplica os lançamentos em linhas diferentes, sendo que deveria permanecer na mesma linha.

    Veja no bd anexo, acesse a tbl "tmpfatura" no campo grupox e depois veja na tabela "movim geral" como foi gerado os lançamentos.
    Anexos
    Colar registro da tabela sequencial em campos fixos Attachmentbdcampofixos0.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (196 Kb) Baixado 8 vez(es)
    avatar
    Convidado
    Convidado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Convidado Sex 07 Mar 2014, 12:55

    Mas este grupo é em apenas um campo?


    Cumprimentos.

    Conteúdo patrocinado


    Colar registro da tabela sequencial em campos fixos Empty Re: Colar registro da tabela sequencial em campos fixos

    Mensagem  Conteúdo patrocinado


      Data/hora atual: Dom 19 maio 2024, 19:33