Jump to content

Libre Office Base: Atualização automática de campo


Joel Garcia da Costa
Go to solution Solved by Joel Garcia da Costa,

Recommended Posts

Prezados, bom dia!

Quero saber se é possível, após atualizar o número de itens em uma tabela, num formulário, que a data de atualização seja alterada para a data atual do sistema, bem como a responsabilidade pela atualização também seja alterada, de acordo com o imagem abaixo, que explico:

Atualizacao.png

Após alterado o dado do campo "QUANTIDADE", onde os campos "ATUALIZACAO e RESPONSAVEL" poderiam ser atualizados automaticamente. Assim eu evito que quem diminuir ou aumentar a quantidade de itens, deixe de dizer quem foi o responsável pela alteração e quando.

No caso do responsável pela mudança, acho que pedindo ao usuário para entrar no programa, e salvando essa informação em uma variável global, posso ter esse dado para usar posteriormente. O que não sei é fazer via código, através de um módulo dentro de uma Macro.

Banco de exemplo

 

Obrigado pela ajuda.

Abraços!

Edited by Joel Garcia da Costa
Link to comment
Share on other sites

3 horas atrás, Joel Garcia da Costa disse:

Prezados, bom dia!

Recebi uma resposta sobre como realizar esta automatização, mas não está dando mensagem de erro, conforme banco de dados de exemplo que anexo.

Banco de exemplo

Abraços.,

Um dos problemas das macros do LibreOficce Base é terem um comportamento esquisito. A compilação da macro pode ter um comportamento diferente, que a mesma seja executada dentro do GUI onde edita a macro, ou na barra de Ferramentas->Macros.

Deixo no seguinte link um manual onde poderá ter uma ideia sobre as macros: https://www.pitonyak.org/database/AndrewBase.pdf

  • Vote 1
Link to comment
Share on other sites

Agora, Cerzedelo disse:

Um dos problemas das macros do LibreOficce Base é terem um comportamento esquisito. A compilação da macro pode ter um comportamento diferente, que a mesma seja executada dentro do GUI onde edita a macro, ou na barra de Ferramentas->Macros.

Deixo no seguinte link um manual onde poderá ter uma ideia sobre as macros: https://www.pitonyak.org/database/AndrewBase.pdf

Meu caro, muito obrigado!

Abs.,

Link to comment
Share on other sites

  • Solution

Prezados, bom dia!

Assunto resolvido!

Usei o código abaixo, criando três macros e implementando no formulário. Consegui, também, fazer com que a alteração do número do armário onde se encontra o produto resulte na atualização do usuário e data atual da alteração.

' Módulo savePerson

Global iQuantSave as Integer
Global iQuantSave2 as Integer
Global sSavePerson as String

Sub savePerson(oEvent)
Rem Check if Form is in Edit mode - Exit if true
    If thisComponent.CurrentController.isFormDesignMode Then Exit Sub
Rem Save entred name
    sSavePerson=Inputbox("Entre com o nome do usuário:")
End Sub

' Módulo saveQuant

Sub saveQuant(oEvent)
    Dim oColumns As Object
    Dim oQuant     As Object
    Dim oColumns2 As Object
    Dim oQuant2     As Object

Rem Save quantity every time different record is selected
    oColumns = oEvent.Source.getColumns()
    oQuant = oColumns.getByName("QUANTIDADE")
    iQuantSave = oQuant.Value
    oColumns2 = oEvent.Source.getColumns()
    oQuant2 = oColumns.getByName("ARMARIO")
    iQuantSave2 = oQuant2.Value
End Sub

' Módulo updateFields

Global iQuantSave as Integer
Global iQuantSave2 as Integer
Global sSavePerson as String

Sub updateFields(oEvent)
    Dim aDate As New com.sun.star.util.Date
    Dim oColumns    As Object
    Dim oQuant        As Object
    Dim oColumns2    As Object
    Dim oQuant2        As Object
    Dim oATUAL       As Object
    Dim oRESPON    As Object
    Dim iValue        As Integer
    Dim iValue2        As Integer
Rem Check if Form event
    If NOT oEvent.Source.supportsService ("com.sun.star.form.component.Form") Then Exit Sub
Rem Check if Update
    If oEvent.Action = 2 then
        oColumns = oEvent.Source.getColumns()
        oQuant = oColumns.getByName("QUANTIDADE")
        iValue = oQuant.Value
        oColumns2 = oEvent.Source.getColumns()
        oQuant2 = oColumns2.getByName("ARMARIO")
        iValue2 = oQuant2.Value
Rem Verify value has actually changed
        If iValue <> iQuantSave OR iValue2 <> iQuantSave2 Then
            oATUAL = oColumns.getByName("ATUALIZACAO")
            oRESPON = oColumns.getByName("RESPONSAVEL")
            aDate.Day = DAY(NOW())
            aDate.Month =  Month(NOW())
            aDate.Year =  YEAR(NOW())
Rem Set Current date
            oATUAL.Value = aDate
Rem Set Name entered
            oRESPON.Value = sSavePerson
        End if
    End if
End sub

Abs.,

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.