Olá
Eu faria assim (não sei se é a forma mais correta):
- O botão abre um formulário (pop-up ou não, depende da sua vontade) onde terá um campo de pesquisa e uma caixa de listagem com os dados dos produtos.
- Ao digitar o produto na campo de pesquisa, ele mostra na caixa de listagem. Ao clicar duas vezes no produto na caixa de listagem, insere o produto na venda.
Então, o botão tem um procedimento do evento "ao clicar" que vai abrir o formulário, assim:
- Código:
Private Sub bt_pesquisa_vendas_Click()
DoCmd.OpenForm "NOME_DO_FORMULARIO_ONDE_VOCE_VAI_PESQUISAR"
End Sub
O formulário onde você vai pesquisar terá uma caixa de texto que será onde você vai pesquisar. Não esqueça de dar um nome para ela, por exemplo campo_pesq_cod_prod
Nessa caixa de texto você cria um procedimento do evento "ao alterar" com o código:
- Código:
Private Sub campo_pesq_cod_prod_Change()
Me.lst_produtos.Requery
End Sub
lst.produtos é o nome da caixa de listagem com os produtos.
O formulário onde você vai pesquisar terá uma de listagem que será pesquisada. Não esqueça de dar um nome para ela, por exemplo lst_produtos
Essa caixa de listagem terá como origem da linha sua tabela de produtos. Estou fazendo esse exemplo procurando o produto pelo nome, então na origem da linha, no campo COD_PRODUTO terá o campo critério assim:
Como "*" & [Formulários]![NOME_DO_FORMULARIO_ONDE_VOCE_VAI_PESQUISAR].[campo_pesq_cod_prod].[Texto] & "*"
Os valores "*" no início e no fim servem para procurar o que você digita em qualquer parte do nome do produto.
Com isso você já consegue pesquisar. Uma vez que o produto foi pesquisado, criei uma regra para, ao clicar duas vezes no produto, insere na venda. Para isso, antes, eu criei 4 caixas de texto com os nomes abaixo para selecionar dados dos produtos pesquisados:
campo_codigo_temp
campo_descricao_temp
campo_valor_temp
campo_vlr_compra_temp
Ao clicar duas vezes no produto pesquisado, o código abaixo vai preencher temporariamente as caixas de texto, limpar a pesquisa, e inserir o valor pesquisado na venda. Os nomes dos campos e tabelas estão de acordo com os meus campos:
- Código:
Private Sub lst_produtos_DblClick(Cancel As Integer)
Me.campo_codigo_temp.Value = Me.lst_produtos.Column(0)
Me.campo_descricao_temp.Value = Me.lst_produtos.Column(2)
Me.campo_valor_temp.Value = Me.lst_produtos.Column(3)
Me.campo_vlr_compra_temp.Value = Me.lst_produtos.Column(4)
Me.campo_codigo_temp.Requery
Me.campo_descricao_temp.Requery
Me.campo_valor_temp.Requery
Me.campo_vlr_compra_temp.Requery
Me.campo_pesq_prod_nome.Value = ""
Me.lst_cad_prod.Requery
Set DB = CurrentDb()
Set rs = DB.OpenRecordset("tbl_CadVendasDetalhes")
rs.AddNew
rs("COD_ME_tbl_CadVendas") = Me.COD_tbl_CadVendas
rs("COD_PRODUTO") = Me.campo_codigo_temp
rs("DESC_PRODUTO") = Me.campo_descricao_temp
rs("VALOR_ITEM_VEND") = Me.campo_valor_temp
rs("VALOR_ITEM_COMP") = Me.campo_vlr_compra_temp
rs.Update
rs.Close
DB.Close
Me.fml_CadVendasDetalhes.Requery
End Sub
Bom trabalho!
Enio