Pergunte aqui
1

Inserir dados em um SubForm

perguntadas 2017-01-09 17:26:12 +0100

imagem do gravatar de dajoso

updated 2017-01-29 14:20:44 +0100

imagem do gravatar de Grafeno

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....

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

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

imagem do gravatar de BetoBeto ( 2017-01-09 21:54:55 +0100 )editar

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

imagem do gravatar de dajosodajoso ( 2017-01-10 01:02:03 +0100 )editar

2 Respostas

1

respondidas 2017-01-11 16:57:26 +0100

imagem do gravatar de Grafeno

updated 2017-01-18 23:18:22 +0100

Olá,


Veja se te ajuda:

https://ask.libreoffice.org/pt-br/question/81782/lo-base-alterar-conteudo-de-campo-de-tablecontrol-em-sub-formulario/


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,

editar assinalar como ofensivo Excluir Link mais

Comentários

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.

imagem do gravatar de dajosodajoso ( 2017-01-12 01:16:55 +0100 )editar

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

imagem do gravatar de dajosodajoso ( 2017-01-12 01:19:02 +0100 )editar

@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,

imagem do gravatar de GrafenoGrafeno ( 2017-01-13 11:45:01 +0100 )editar

@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.

https://drive.google.com/file/d/0B77E...

imagem do gravatar de dajosodajoso ( 2017-01-13 19:10:40 +0100 )editar

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

imagem do gravatar de GrafenoGrafeno ( 2017-01-16 14:59:18 +0100 )editar
1

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

imagem do gravatar de dajosodajoso ( 2017-01-20 23:23:25 +0100 )editar
0

respondidas 2017-01-12 17:33:11 +0100

imagem do gravatar de dajoso

updated 2017-01-13 14:27:30 +0100

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

editar assinalar como ofensivo Excluir Link mais
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2017-01-09 17:26:12 +0100

Lidas: 117 vezes

Última atualização: Jan 18 '17