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]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Krauss
    Krauss
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 254
    Registrado : 23/12/2011

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  Krauss 27/11/2020, 04:26

    Bom dia galera!

    Tenho um (sub)formDetalhesPedido com os campos "qtde, código, descrição, valor unitário e subtotal", onde ficará registrado a parte dos produtos que irão para a revendedora; no formEmissaoPedidos eu informo o representante, a revendedora, data do acerto, etc., inclusive criei um campo nele chamado cxaLeituraSKU, que funciona basicamente como um leitor de código de barras (já configurei para executar "tal" comando assim que ler os 13 caracteres).

    Só preciso de ajuda para que, quando o usuário informar um item que já conste na lista, o sistema identifique o item e some +1 na quantidade em vez de acrescentar mais uma linha.


    Última edição por Krauss em 1/12/2020, 05:04, editado 1 vez(es)


    .................................................................................
    Trabalho com Access 2013

    "A dúvida é o princípio da sabedoria"
    ANTONILDO CORDEIRO
    ANTONILDO CORDEIRO
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  ANTONILDO CORDEIRO 30/11/2020, 18:43

    Boa tarde Krauss!!!

    use esse codigo e adapte a sua realidade

    Private Sub txtCodigoBarras_KeyPress(KeyAscii As Integer)
    txtName = Me.txtCodigoBarras.Text
    If KeyAscii = 42 Then
    guardaast = "*"
    End If


    If KeyAscii = 13 Then
    executarenter

    End If
    End Sub


    Public Sub IncluirProduto()
    Dim db As Database, RS As Recordset
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    Set db = CurrentDb()
    Set RS = db.OpenRecordset("DETALHESDAVENDA") 'Abre tbl_Parcelas
    RS.AddNew
    RS![Número da Venda] = Me.Número_da_Venda
    RS!NOMEDOPRODUTO = Me!txtCodigoBarras
    RS!Quantidade = Me!txtQtde
    RS!PreçoUnitario = Me!txtPrecoUnitario
    RS!Estoque = Estoque
    RS!Custo = CUSTOCOMPRA
    RS.Update
    RS.Close
    db.Close


    Me.PRODUTO2.Value = Me!txtCodigoBarras
    Me.SUBVENDAS_NO_BALCAO.Requery
    DoCmd.GoToRecord , , acLast
    Me.txtCodigoBarras.SetFocus
    Me.txtCodigoBarras.Value = Me.PRODUTO2
    Me.EXIBIRNOMEPRODUTO.Visible = True
    Incluir = False
    QuantidadeS = 1
    Me!txtQtde = 1
    guardaast = ""
    Me.PEGACODIGODESCRICAO = Null
    Me.txtCodigoBarras.Value = Null
    PRECO = 0
    qtd = 0
    ' SendKeys "+{esc}"

    ' Call fncAtivarDesativarTecla(144, True)

    ' If ([vbKeyNumlock] = False) Then
    ' SendKeys "+{NUMLOCK}"
    ' End If

    End Sub

    Public Sub executarenter()

    If (txtCodigoBarras.Text <> "") Then
    QualquerSeqüência = Me.txtCodigoBarras ' Define a seqüência de caracteres.
    MinhaSeq = Left(QualquerSeqüência, 1) ' Retorna "A".
    MinhaSeq0 = Left(QualquerSeqüência, 3) ' Retorna "Alo".
    MinhaSeq1 = Left(QualquerSeqüência, 7) ' Retorna "Alô M".
    MinhaSeq2 = Right(QualquerSeqüência, 7) ' Retorna "Alô Ma".
    'GetInStr (txtCodigoBarras)
    Incluir = True

    'If (Me.txtCodigoBarras = "99") Then
    ' PrecoProduto
    ' Else
    If MinhaSeq = "2" Then
    PegaProdutobalanca
    Else
    If guardaast = "*" Then
    PegaProdutocodbarra
    End If
    End If
    Else
    txtCodigoBarras.SetFocus
    End If
    End Sub

    Public Sub PegaProdutobalanca() 'ok
    '2588800006111
    Incluir = True
    PEGACODIGODESCRICAO = MinhaSeq1
    MinhaSeq2 = MinhaSeq2 / 1000
    'PRECO = MinhaSeq2
    If (Eval("DLookUp(""[CODIGODEBARRA]"",""[PRODUTO]"",""[CODIGODEBARRA] = FORM.[PEGACODIGODESCRICAO] "") Is Not Null")) Then
    strfiltro = "[CODIGODEBARRA] ='" & Me!PEGACODIGODESCRICAO & "'"
    CUSTOCOMPRA = (DLookup("CUSTOCOMPRA", "Produto", strfiltro))
    Me.txtPrecoUnitario.Value = (DLookup("PRECO", "Produto", strfiltro))

    If (MinhaSeq2 > "0,0099") Then
    Me.txtValor = Format(Mid(Me.txtCodigoBarras.Value, 8, 3) & "," & Right(Me.txtCodigoBarras.Value, 3), "#,##0.00")
    Quant = txtValor / Me.txtPrecoUnitario
    Me.txtCodigoBarras.Value = (DLookup("DESCRICAO", "Produto", strfiltro))
    Me.Refresh
    Me.txtQtde.Value = Quant

    'Me.codProd = Left(Me.txtCodBarras.Value, 7)
    'Me.txtDescricao = DLookup("Descricao", "tblProdutos", "CodBarras ='" & Me.codProd & "'")
    'Me.txt = Format(DLookup("valor", "tblProdutos", "CodBarras ='" & Me.codProd & "'"), "#,##0.000")
    'Me.txtValor = Format(Mid(Me.txtCodBarras.Value, 8, 3) & "," & Right(Me.txtCodBarras.Value, 3), "#,##0.00")
    'Me.Refresh
    'Me.Texto11 = Me.txtValor / Me.txt

    'tira do estoque quando for balança
    'DoCmd.RunSQL "update tblProdutos set QTDE = QTDE - Forms![frmVendas]![Texto11]" _
    '& " where tblProdutos.Descricao=Forms![frmVendas]![txtDescricao]"


    End If


    If Incluir = True Then
    Me.IncluirProduto
    End If

    Exit Sub

    Else
    Me.txtCodigoBarras = "Produto não cadastrado balança"
    QuantidadeS = 1
    Me!txtQtde = 1
    guardaast = ""
    Incluir = False


    End If

    End Sub
    Public Sub PegaProdutocodbarra() 'OK
    'Pega os valores depois do asterisco
    Depois = Right$(txtCodigoBarras, InStr(1, StrReverse(txtCodigoBarras), "*") - 1) ' aqui pegamos um pedaco a direita da sequencia (Right$)
    Me.PEGACODIGODESCRICAO = Depois

    Antes = Left$(txtCodigoBarras, InStr(1, txtCodigoBarras, "*") - 1) ' aqui pegamos um pedaco a esquerda da sequencia (Left$)
    ' a funçao InStr, retorna a posição do *,
    Me.txtQtde.Value = Antes
    ' supondo que a sequencia seja "200*produto 1" ela retorna 4
    ' como não queremos oo asterisco, tiramos um da posição (-1)
    ' resultado strRetorno = "200"

    If (Eval("DLookUp(""[CODIGODEBARRA]"",""[PRODUTO]"",""[CODIGODEBARRA] = FORM.[PEGACODIGODESCRICAO] "") Is Not Null")) Then
    strfiltro = "[CODIGODEBARRA] ='" & Me!PEGACODIGODESCRICAO & "'"
    Me.txtCodigoBarras.Value = (DLookup("DESCRICAO", "Produto", strfiltro))
    CUSTOCOMPRA = (DLookup("CUSTOCOMPRA", "Produto", strfiltro))
    Me.txtPrecoUnitario.Value = (DLookup("PRECO", "Produto", strfiltro))

    If Incluir = True Then
    Me.IncluirProduto
    End If
    Exit Sub


    Else
    Me.txtCodigoBarras = "Produto não cadastrado codbarra " * ""
    QuantidadeS = 1
    Me!txtQtde = 1
    guardaast = ""

    Incluir = False
    End If

    End Sub

    agora no seu sub formulario detalhesdospedidos
    vc deve criar uma consulta para somar o campo quantidade usando a opcao totais que tem esse simbolo ∑
    e deve estar acoplado essa consulta nesse subformulario e as chaves de numerodopedido deve ser colocado
    para exibir informacoes desse pedido
    ANTONILDO CORDEIRO
    ANTONILDO CORDEIRO
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  ANTONILDO CORDEIRO 2/12/2020, 16:33

    Boa tarde!!

    adapte esse codigo

    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
       
       Set db = CurrentDb()
       Set rs = db.OpenRecordset("DETALHESDAVENDA") 'Abre tbl_Parcelas
      rs.Edit
    rs.FindFirst "[NÚMERO DA VENDA] = " & Forms![VENDAS NO BALCAO]![Número da Venda]
    rs.FindFirst "PRODUTO = Forms![VENDAS NO BALCAO]!PRODUTO
      rs.Edit
      rs!QUANTIDADE =rs!QUANTIDADE+ Me!QTD
       
       rs.Update
       rs.Close
       db.Close
       
       
       QTD = 0
    Krauss
    Krauss
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 254
    Registrado : 23/12/2011

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  Krauss 2/12/2020, 16:39

    Boas Antonildo!

    Bom dia!

    No código abaixo, tenho 3 condições, só preciso de ajuda para ajustar.

    No evento "Ao alterar", ao ler os 13 caracteres...

    1. Se o produto não estiver cadastrado, ele emite msg de erro e impede a inserção no subformulário;
    2. Se o produto estiver cadastrado, ele verifica se o código já existe na lista:
    2.a) se não existir, ele insere;
    2.b) se existir, ele soma +1 na qtde do item, evitando ter mais de uma linha para o mesmo produto.

    Tenho os 2 códigos abaixo, mas não consigo ajustar (fundí-los) para que execute no mesmo evento (Ao alterar) de acordo com os critérios acima.

    Código:
      If Len(Nz(Me.cxaLeituraSKU.Text)) = 13 Then
     
          If (IsNull(DLookup("[skuProduto]", "tblProdutos", "[skuProduto] ='" & Me!cxaLeituraSKU & "'"))) Then
            MsgBox "Código inválido.", vbCritical, "Erro"
            Me.cxaLeituraSKU = ""
          Exit Sub
    'Else     
          Me.tipoLeitura.SetFocus
          DoCmd.GoToControl "formDetalhesPedido"
          DoCmd.GoToRecord , , acNewRec
          Forms!formEmissaoPedidos!formDetalhesPedido!qtdeSaida = 1
          Forms!formEmissaoPedidos!formDetalhesPedido!skuProduto = cxaLeituraSKU
          Forms!formEmissaoPedidos!formDetalhesPedido!codigoProduto = Right(cxaLeituraSKU, 5)
          Forms!formDetalhesPedido!codigoProduto & "'")
          Forms!formEmissaoPedidos!cxaLeituraSKU = ""
          Forms!formEmissaoPedidos!cxaLeituraSKU.SetFocus
          Me.cxaLeituraSKU.SetFocus 
          End If
      End If

    Código:
    Dim curCusto As Currency
    Dim rsf As Recordset, frm As Form
    Set frm = Me
    Set rsf = Me.RecordsetClone
    'Este código soma a quantidade de itens de um mesmo produto em uma linha, evitando ter mais de uma linha para um mesmo produto.
    If Me.codigoProduto <> 0 Then
      rsf.FindFirst "[codigoProduto]= '" & Me.codigoProduto & "'"
      If Not rsf.NoMatch Then
          frm.Undo
          frm.Bookmark = rsf.Bookmark
          rsf.Edit
          rsf!qtdeSaida = rsf!qtdeSaida + 1
          rsf.Update
      End If
    End If


    .................................................................................
    Trabalho com Access 2013

    "A dúvida é o princípio da sabedoria"
    ANTONILDO CORDEIRO
    ANTONILDO CORDEIRO
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  ANTONILDO CORDEIRO 2/12/2020, 18:24

    Krauss

    montei o dois codigos ficou assim ver se funciona

    If Len(Nz(Me.cxaLeituraSKU.Text)) = 13 Then

    If (Eval(DLookup("[skuProduto]", "tblProdutos", "[skuProduto] ='" & Me!cxaLeituraSKU & "'") Is Not Null)) Then
    'Este código soma a quantidade de itens de um mesmo produto em uma linha, evitando ter mais de uma linha para um mesmo produto.
    If Me.codigoProduto <> 0 Then
    rsf.FindFirst "[codigoProduto]= '" & Me.codigoProduto & "'"
    If Not rsf.NoMatch Then
    frm.Undo
    frm.Bookmark = rsf.Bookmark
    rsf.Edit
    rsf!qtdeSaida = rsf!qtdeSaida + 1
    rsf.Update
    End If
    End If
    Else
    Me.tipoLeitura.SetFocus
    DoCmd.GoToControl "formDetalhesPedido"
    DoCmd.GoToRecord , , acNewRec
    Forms!formEmissaoPedidos!formDetalhesPedido!qtdeSaida = 1
    Forms!formEmissaoPedidos!formDetalhesPedido!skuProduto = cxaLeituraSKU
    Forms!formEmissaoPedidos!formDetalhesPedido!codigoProduto = Right(cxaLeituraSKU, 5)
    Forms!formDetalhesPedido!codigoProduto = "'"
    Forms!formEmissaoPedidos!cxaLeituraSKU = ""
    Forms!formEmissaoPedidos!cxaLeituraSKU.SetFocus
    Me.cxaLeituraSKU.SetFocus
    End If
    Else
    MsgBox "Código inválido.", vbCritical, "Erro"
    e.cxaLeituraSKU = ""
    Exit Sub

    End If

    Krauss
    Krauss
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 254
    Registrado : 23/12/2011

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  Krauss 2/12/2020, 20:53

    Antonildo, primeiramente agradeço muito sua disposição em prestar ajuda, mas estou num imbróglio feio aqui amigo rs, vou tentar explicar.

    Trabalho com vestuário e cada produto tem 2 códigos: 1 tem 5 dígitos, que identifica o modelo e começa no 00011 (esse é o que sai nas etiquetas)... o outro eu chamo de SKU, que tem 13 dígitos e é composto por:

    4 primeiros: MMAA (mês e ano com dois dígitos correspondentes à data de entrada do produto na empresa)
    5º, 6º e 7º: correspondente ao tamanho (cada modelo pode ter vários tamanhos - P que é 902, M que é 903, G que é 904,etc.)
    8º dígito é sempre zero (dígito neutro)
    e os últimos 5 são o código do modelo.

    Obs.: Não posso trabalhar com um código para cada modelo/cor tipo modelo X de tamanho P tem código tal e o mesmo modelo X de tamanho M tem código tal.

    Estou montando um form de pedidos chamado "formEmissaoPedidos", pedidos estes que as vendedoras fazem e eu tenho que montar os kits que ela pediu e tal. No form eu informo o representante, a revendedora, data do acerto, etc., e nele tem um subform chamado "formDetalhesPedido" onde vai a qtde, código, descrição, valor unitário e subtotal dos produtos que irão pra ela vender.
    Criei um campo no form que o usuário digita ou bipa (com leitor) o SKU do produto e o sistema insere o item no subform; esse campo chama "cxaLeituraSKU.

    Meio confuso né, mas agora que vem a parte complicada rs...

    Preciso que, quando o campo "cxaLeituraSKU" ler os 13 caracteres do SKU, ele insira no subform:

    qtde: 1
    código: 00011 (os últimos 5 caracteres do SKU que corresponde ao código do modelo do produto - 00011 é um exemplo, mas pode ser 00050, etc.)
    e na frente na mesma linha vem a descrição do produto, preço de venda e subtotal que é (qtdeSaida * precoVenda)

    Após inserir, o usuário vai bipando e bipando até concluir o pedido. Mas, mesmo no subform aparecendo só o código do modelo, o sistema precisa entender que se o SKU for do tamanho P, ele tem que subtrair 1 unidade deste tamanho no estoque, se for do tamanho M, subtrair do tamanho M, e assim por diante.

    É que para o promotor de vendas e suas vendedoras, só importa o código do modelo (de 5 dígitos), mas internamente na empresa precisa-se ter controle de todos os tamanhos de cada modelo.

    Vou postar meu BD resumido aqui para facilitar o entendimento.
    Anexos
    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras AttachmentBD_1.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (95 Kb) Baixado 14 vez(es)


    .................................................................................
    Trabalho com Access 2013

    "A dúvida é o princípio da sabedoria"
    ANTONILDO CORDEIRO
    ANTONILDO CORDEIRO
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  ANTONILDO CORDEIRO 3/12/2020, 03:54

    Boa noite, Kraus!!!

    primeiro o seu codigo é confuso acho que vc deve trabalhar usando aquela opção de acessa a tabela e fazer as entradas e saida dos dados
    dos produtos direto nas tabelas

    tipo assim que lhe passei

    Dim db As Database, RS As Recordset
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    Set db = CurrentDb()
    Set RS = db.OpenRecordset("DETALHESDAVENDA") 'Abre tbl_Parcelas
    RS.AddNew
    RS![Número da Venda] = Me.Número_da_Venda
    RS!NOMEDOPRODUTO = Me!txtCodigoBarras
    RS!Quantidade = Me!txtQtde
    RS!PreçoUnitario = Me!txtPrecoUnitario
    RS!Estoque = Estoque
    RS!Custo = CUSTOCOMPRA
    RS.Update
    RS.Close
    db.Close


    e assim sera mais facil para filtrar e localizar os produtos


    vou tentar fazer com o exemplo que vc me enviou
    Krauss
    Krauss
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 254
    Registrado : 23/12/2011

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  Krauss 3/12/2020, 04:09

    Boa noite!

    Pois é meu amigo, sei que é complicado, mas eu realmente preciso muito tentar fazer funcionar dessa forma :/


    Última edição por Krauss em 9/12/2020, 19:44, editado 1 vez(es)


    .................................................................................
    Trabalho com Access 2013

    "A dúvida é o princípio da sabedoria"
    ANTONILDO CORDEIRO
    ANTONILDO CORDEIRO
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  ANTONILDO CORDEIRO 3/12/2020, 04:48

    meu amigo estou falando so do accesso ao banco e das acoes sera mais rapido e exatamente como vc pensou. O que vc projetou estar certo
    entendeu vou fazer aqui
    Krauss
    Krauss
    Avançado
    Avançado

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 254
    Registrado : 23/12/2011

    [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras Empty Re: [Resolvido]Tela de pedidos: subformulário recebe dados de formulário, com base na leitura do código de barras

    Mensagem  Krauss 15/12/2020, 03:12

    Vou encerrar esse tópico.


    .................................................................................
    Trabalho com Access 2013

    "A dúvida é o princípio da sabedoria"

      Data/hora atual: 26/9/2021, 10:59