Inserir dados em um SubForm

Olá, procurei aqui no ask e nao encontrei um modelo pra solucionar meu problema.

Tenho 3 tabelas: Produtos, Pedido e Pedido_Detalhes. Na Tabela Pedidos_Detalhes tenho um campo IdProduto relacionado, preciso que ao digitar o nome do produto ou qualquer outro dado único, ele cadastre automaticamente o nome do produto, custo, e o IdProduto que vem da tabela Produtos na tabela Pedido_Detalhes. E se possível ele multiplicasse a QTD pelo Custo depois que se digitasse a QTD.

Estou usando o LO 5.2.4.2

Se algue puder ajudar…

Use o LibreOffice estável, no momento a versão 5.1.6 é o estável.

Obrigado por responder, mas não creio que seja problema de versão.

Olá,


Veja se te ajuda:

LO Base: alterar conteúdo de campo de TableControl em sub-formulário


EDIÇÃO - 16/01/2017:

No seu arquivo .odb a coluna Custo está descartando os decimais. Para resolver é preciso ir na tabela Pedidos_Detalhes, no modo “Edição de Tabela”, colocar 2 para na caixa Casas decimais (Propriedades do campo).

O código foi atribuído ao Evento Mudança no Status do Item da coluna (Listbox). Escolhendo a abreviatura os campos “Produto” e “Custo” são preenchidos automaticamente.

Arquivo com o código: Vendas-Macro.odb

Código:

Sub ListBox_MudancaStatusItem( oEvento )
' Listbox (Coluna...) > Propriedades > Eventos > Mudança no Status do Item
Dim oSubForm As Object, ocTabela As Object, oListBox As Object
Dim oProduto As Object, oCusto As Object, oCon As Object
Dim oStat As Object, oRes As Object
Dim iPos As Integer
Dim sCodigo As String, sSQL As String
   
   oListBox = oEvento.Source.Model
   ocTabela = oListBox.Parent
   oProduto = ocTabela.getByName( "Produto" )
   oCusto = ocTabela.getByName( "Custo" )
   oSubForm = ocTabela.Parent
     
   iPos = oEvento.Selected 'Posição do produto selecionado
   sCodigo = oListBox.ValueItemList( iPos ) 'Código do produto selecionado
   'sAbrev = oListBox.StringItemList( iPos ) 'Abreviatura do produto selecionado
   
   'Sair se produto selecionado for o mesmo que já existe no campo
   If oListBox.BoundField.Value = sCodigo Then Exit Sub
   'Sair se a "posição vazia" da listbox for selecionada
   If iPos = 0 Then Exit Sub
  
   sSQL = "SELECT ""Produto"", ""Custo"" FROM ""Produtos"" WHERE ""IdProduto"" = "  & sCodigo
   oCon = ThisDatabaseDocument.CurrentController.ActiveConnection
   oStat = oCon.CreateStatement
   oRes = oStat.ExecuteQuery(sSQL)
   If oRes.next Then
     oProduto.BoundField.Value = oRes.getString(1)
     oCusto.BoundField.Value = oRes.getString(2)
     oListBox.BoundField.Value = sCodigo
     IF oSubForm.isnew THEN oSubForm.insertRow() ELSE oSubForm.updateRow()
   End If
End Sub

Atte,

Sim, ajudou em partes. pois consegui ajustar pra fazer o calculo da QTD X CUSTO, porem preciso preencher os campos Idproduto, CUSTO e Nome do Produto que vem da tabela Produtos onde já fiz uma caixa de listagem nesse subform onde o usuario vai escolher os item que precisa e atraves desse item ele deve inserir o Custo, o nome do Produto nas colunas correspondente.

OBS. Os itens que carreguei na Caixa de listagem é uma abreviatura pra facilitar a escolha dos produtos. Creio que seria atraves desta abreviatura que seria feita uma consulta e inserir os itens correspondentes no subform

@dajoso, para facilitar nossa ajuda, você poderia postar uma versão do seu arquivo .odb com dados fictícios. O AskLibO suporta anexos, então edite sua pergunta para incluir. Se não conseguir por causa do karma, pode subir o arquivo em um site tipo dropbox e disponibilizar o link. Atte,

@Grafeno, segue o link com os dados fictícios. O que preciso é no subform detalhes, ao escolher a abreviatura no List Box 1 ele já inseria o nome do produto e o custo correspondente a abreviatura escolhida.

@dajoso, veja se agora resolve a outra parte. Em caso positivo, não esqueça de assinalar a resposta como correta. A comunidade agradece!

Agora sim, funciona perfeitamente. Veja se marquei a resposta corretamente. Muito obrigado !

Achei esse codigo, porem dá alguns erros, alguem sabe como resolver ?

Sub BuscaProduto(Event)
Dim oForm As Object
Dim oCtrl As Object
Dim oGrid As Object
Dim oArticulo As Object
Dim oPVP As Object
Dim oCon As Object
Dim oStat As Object
Dim oRes As Object
Dim oCodigo As Object
Dim sSQL As String
Dim sCodigo As String
oCtrl = Event.Source
oGrid = oCtrl.Parent	
oForm = oGrid.Parent
sCodigo = oCtrl.Text
oCtrl = Event.Source
oGrid = oCtrl.Parent	
oSubForm = oGrid.Parent
sCodigo = oCtrl.Text
oCusto = oSubForm.getByName("TxtCusto")	
oArticulo = oSubForm.getByName("txtProduto")
oCodigo = oSubForm.getByName("txtAbreviar")
sSQL = "SELECT PRODUTO, CUSTO  FROM PRODUTOS  WHERE idProduto = '"  & oCodigo & "'"
oCon = ThisDatabaseDocument.CurrentController.ActiveConnection
oStat = oCon.CreateStatement
oRes = oStat.ExecuteQuery(sSQL)
If oRes.next Then
	oArticulo.BoundField.Value = oRes.getString(1)
	oCodigo.BoundField.Value = oRes.getFloat(2)
	oCusto.BoundField.Value = oRes.getFloat(3)
	
	SetFocusGrid(1, oGrid)		

IF oForm.isnew THEN oForm.insertRow() ELSE oForm.updateRow()
Else
Msgbox(“Este produto no existe”)
oArticulo.BoundField.Value = “PRODUTO NÃO ENCONTRADO”
oPVP.BoundField.Value = 0
oCodigo.BoundField.Value = “”
SetFocusGrid(-1, oGrid)
End If

End Sub