Pergunte aqui

Histórico de revisões [voltar]

clique para ocultar/mostrar a revisão 1
Versão inicial

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,