Pergunte aqui
1

Macro para gerar parcelas no Base.

perguntadas 2018-09-30 23:56:41 +0200

imagem do gravatar de cjcesconetti

updated 2019-03-01 18:12:35 +0200

Saudações, colegas.

Comecei a desenvolver um banco de dados com o LibreOffice Base (pode-se classificá-lo como mini-ERP) para gerenciar minhas atividades administrativas e financeiras.

Logo, necessito automatizá-lo com um botão "gerar parcelas", para certos modos de pagamento, dos "pedidos" realizados. É uma questão comum nesses tipos de sistemas, e há uma certa facilidade em encontrar tais rotinas em fóruns de MS Access. Contudo, meu objetivo é trabalhar exclusivamente com o LibreOffice.

Alguém pode me apresentar um código, ou me orientar como encontrá-lo?

Desde já, agradeço por sua colaboração.



Exemplo de macro para esta finalidade no MSAccess:

    Private Sub  btnGerarParcelas_Click()
    Set db = CurrentDb()
    Set rs = db.OpenRecordset("csPedidosPagar") 'Abre csPedidosPagar
    ValorParcela = txtSubTotal / txtQdadeParcelas 'Valor de cada parcela

    For f = 1 To QdadeParcelas 'Calcula o Loop (Insere as parcelas na csPedidosPagar)
        'Campos e valores a serem preenchidos
        rs.AddNew
        rs("IdPedido") = Me.IdPedido
        rs("ParcelaNo") = f
        rs("VlrParcela") = ValorParcela
        rs("DataVenc") = DateAdd("m", f - 1, Me.txtDataVenc)
        rs.Update
    Next        'Move para o Proximo

    rs.close()
    db.close()
end sub

Como eu adaptaria isso?

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

PS: alguém também sabe informar algum portal/fórum com exemplos de projetos disponíveis? Encontrei um exemplo no fórum do Apache OpenOffice, contudo, estou com difuculdades de encontrar novos exemplos/projetos.

imagem do gravatar de cjcesconetticjcesconetti ( 2018-09-30 23:59:57 +0200 )editar

Pessoal. Encontrei mais exemplos disponíveis na Comunidade do Apache OpenOffice. Segue o link da página para quem tiver interesse:

Vincular texto

imagem do gravatar de cjcesconetticjcesconetti ( 2018-10-02 21:32:48 +0200 )editar

1 Resposta

2

respondidas 2018-10-12 19:00:48 +0200

imagem do gravatar de Grafeno

Boa tarde,

O código abaixo adapta aquele que você postou para API UNO do LibreOffice Basic. Ao final tem um arquivo .odb de exemplo, com mais algumas coisas, para ver como fica a macro em ação.

Sub GerarParcelas
Dim oForm as Object, oConsulta as Object, oRS as Object
Dim oSubForm as Object, iIdPedido as Integer
Dim dSubTotal as Double, iQtdeParcelas as Integer
Dim dParcela as Double, sSQL as String, sDataVenc as String
Dim sNovaData as String

   oForm = ThisComponent.Drawpage.Forms.getByName("MainForm")

   'Obter IdPedido sem a necessidade de'
   'que exista um controle no Form'
   iIdPedido = oForm.getInt(1) '1º campo do Form é o Id'
   'Obter valores dos controles'
   dSubTotal = CDbl(oForm.getByName("txtSubTotal").Text)
   iQtdeParcelas = oForm.getByName("txtQtdeParcelas").Text
   sDataVenc = oForm.getByName("txtDataVenc").Text

   'Calcular a parcela'
   dParcela = dSubTotal / iQtdeParcelas

   'Criar o RowSet para inserir as parcelas'
   oRS = createUnoService("com.sun.star.sdb.RowSet")
   With oRS
     .DataSourceName = ThisDataBaseDocument.URL
     .CommandType = com.sun.star.sdb.CommandType.TABLE
     .Command = "Parcelas" '<<<<<<<<<<<<< TABELA COM AS PARCELAS'
     .IgnoreResult = True
     .Execute()
   End With

   For f = 1 to iQtdeParcelas
     oRS.moveToInsertRow()     
     oRS.updateString( 2,iIdPedido )
     oRS.updateString( 3,f )
     oRS.updateFloat( 4,dParcela )
     sNovaData = DateAdd("m", f-1, sDataVenc) 
     oRS.updateString( 5, Year(sNovaData) & "-" & _
                       Month(sNovaData) & "-" & Day(sNovaData) )
     oRS.insertRow()
   Next f

   'Descartar o RowSet'
   oRS.Close()
   oRS = Nothing 

   'Atualizar o SubForm para exibir as parcelas'
   oSubForm = oForm.getByName("SubForm")
   oSubForm.Reload()

   'Desabilitar o botão'
   oGerarP = oForm.getByName("cmdGerarParcelas")
   oGerarP.Enabled = False
End Sub

Atte,

editar assinalar como ofensivo Excluir Link mais

Comentários

1

Caro Grafeno. Fantástico! Era exatamente isso que eu desejava.

Ajustei ao meu banco de dados e funcionou.

Seu detalhamento foi louvável. Imensamente grato por sua colaboração.

imagem do gravatar de cjcesconetticjcesconetti ( 2018-10-12 22:37:26 +0200 )editar

Obrigado, @cjcesconetti. Só não deixe de aceitar a resposta como corretada, clicando na bolinha com o dentro para ajudar quem tiver a mesma dúvida.

imagem do gravatar de GrafenoGrafeno ( 2018-10-12 23:15:50 +0200 )editar

Grafeno. Só uma dúvida: depois das declarações das variáveis, gostaria de 'pegar' o valor exclusivo de "dSubTotal" num SubForm, dentro do MainForm...

Isso porque obtive este SubTotal através de uma consulta com as funções 'Grupo' para 'IdPedido' e 'Soma' para 'IdDetalhesPedido'. Daí criei um SubForm para acessar esse valor através de um controle. Entendeu?

Portanto, o controle 'dSubTotal' está num SubForm, dentro do MainForm.

imagem do gravatar de cjcesconetticjcesconetti ( 2018-10-13 13:36:50 +0200 )editar

Veja, o SubForm é como um controle dentro do MainForm, um contêiner que contem outros controles. Vc acessa ele primeiro para depois o que está dentro:

oSubForm = oForm.getByName("SubForm")
dSubTotal = CDbl(oSubForm.getByName("txtSubTotal").Text)

Atte,

imagem do gravatar de GrafenoGrafeno ( 2018-10-13 18:30:40 +0200 )editar

Excelente! Sou leigo, mas com este exemplo consegui entender melhor a lógica desta API. E tenho certeza que ajudará muitos outros como eu. Embarquei no mundo OpenSource há cerca de um ano, e cada vez mais me surpreendo positivamente. Esta comunidade é um dos motivos. Abraço amigo.

imagem do gravatar de cjcesconetticjcesconetti ( 2018-10-14 01:28:04 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2018-09-30 23:56:41 +0200

Lidas: 103 vezes

Última atualização: Oct 12 '18