Macro para gerar parcelas no Base

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?

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.

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

Vincular texto

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,

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.

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.

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.

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,

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.