MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Aviso 30 dias do vencimento

    Compartilhe
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 555
    Registrado : 14/12/2010

    [Resolvido]Aviso 30 dias do vencimento

    Mensagem  julianovv em 11/11/2018, 00:15

    Boa noite, estou com uma consulta de associados e cada um possui uma data de vencimento. Estou tentando inserir uma expressão para criar uma mensagem para cada um deles avisando 30 dias antes do vencimento. A expressão seria baseada no campo 'DataVencimento' (formato Data Abreviada) e não na data atual. As tabelas ainda não tem dados, exceto os de exemplo para testes.
    Obrigado!

    No


    .................................................................................
    Juliano

    Uso o Access 2007 no XP SP3
    Pentil 4 Duo Core 2 - 3.2 ghz  - HD 250 GB ATA II - Placa Asus P5LD2-X - 2 GB de memória DDR2 667 mhz Kingston - GForce GT220 - Monitor 17" LCD 732N Samsung - Impressora Epson T33
    [Você precisa estar registrado e conectado para ver esta imagem.]
    avatar
    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7236
    Registrado : 11/05/2010

    Re: [Resolvido]Aviso 30 dias do vencimento

    Mensagem  vieirasoft em 11/11/2018, 00:49

    Na consulta, crie um campo novo. Dê-lhe o nome, por exemplo: Resultado.
    Coloque assim:
    Resultado: DifData("d";Data();[seucampodata])

    No critério deste campo, coloque

    <=30 E >0 ' queremos que o valor seja igual ou menor que 30 e, como é óbvio, maior que 0, para que não sejam retornados valores negativos

    E no formulário

    Terá uma DatadeInício em que foi emitido o documento

    e a data DataVencimento do documento

    Vamos tentar fazer isto de uma forma muito simples. Coloque no formulário uma caixa de texto desvinculada e não visível. Chame-a de txtResultado, por exemplo.
    Agora, vá à aba acontecimento e no procedimento "No Actual", digite assim:

    Private Sub Form_Current()
    Dim i As Integer
    Dim theDate As Date

    If IsDate(Me.txtDataVencimento) And Not IsNull(Me.txtDataVencimento) Then
    theDate = Me.txtDatancimento
    If Me.txtResultado <= 60 And Me.txtResultado > 0 Then
    i = MsgBox("Faltam: " & DateDiff("d", Now, theDate) & "...dias para vencimento do documento", vbInformation, "Aviso")
    End If
    End If
    End Sub
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 555
    Registrado : 14/12/2010

    Res: Aviso 30 dias do vencimento

    Mensagem  julianovv em 11/11/2018, 14:04

    Oi vieirasoft. Deu quase certo. Deu 19 dias, ou seja, 19 dias para o dia 30. No caso, o vencimento do associado é dia 30/11/2018 e iria aparecer no corpo do email no dia 12/11, sendo que o correto seria dia 29 ou 30/10. O 'Data()' não corresponde ao dia de hoje?

    Criei o alias 'Aviso30dias' no campo da consulta e ficou assim:

    Aviso30dias: DifData("d";Data();[DataVencimento])

    E no critério usei o <=30 E >0

    Criei outro alias, dessa vez com o texto que será exibido na caixa de texto do corpo do email:

    No cadastro do associado tem o sexo, então criei um texto que acompanhasse o gênero dele.

    MensAvisos: ((SeImed([Sexo]="Masculino";"Prezado Sr.";"Prezada Sra.") & " " & ([Nome]) & " " & ", esta mensagem é para avisá-lo que seu vencimento é no dia" & " " & [DataVencimento] & "" & "."))

    E não será só 30 dias antes mas 15 dias também e deverão estar inseridos na mesma expressão.
    E pra piorar só podem aparecer no corpo do email nos dias indicados.

    Obrigado pelo retorno.

    Smile


    .................................................................................
    Juliano

    Uso o Access 2007 no XP SP3
    Pentil 4 Duo Core 2 - 3.2 ghz  - HD 250 GB ATA II - Placa Asus P5LD2-X - 2 GB de memória DDR2 667 mhz Kingston - GForce GT220 - Monitor 17" LCD 732N Samsung - Impressora Epson T33
    [Você precisa estar registrado e conectado para ver esta imagem.]
    avatar
    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7236
    Registrado : 11/05/2010

    Re: [Resolvido]Aviso 30 dias do vencimento

    Mensagem  vieirasoft em 11/11/2018, 14:43

    Meu caro, a diferença de dias não é um erro. Se tiver estudado o código, irá verificar que o mesmo faz uma contagem regressiva.

    Aviso30dias: DifData("d";Data();[DataVencimento])

    E no critério usei o <=30 E >0  ou seja, o critério para aviso será 30 dias antes da data do término do vencimento. Acabo por não perceber o que pretende, pois é assim que deve ser, vai avisando até ser dado como pago ou o valor da variável for igual a 0.

    Se não quer que haja mais alertas, faça um update na Consulta. Crie um campo SIM/NÃO e chame-o de Enviado. No critério do campo coloque Sim, para que seja dado como enviado.
    CurrentDb.Execute "UPDATE MINHAConsulta SET Enviado=-1 WHERE ID=" & ID & "" ' Desta forma Atualiza o Status para 'Enviado" e interrompe a contagem

    Ou, em alternativa

    Por exemplo, se quer que o aviso seja exclusivo no próprio dia do vencimento, ao Abrir do form:

    Dim i As String
    Me.DataVencimento.SetFocus
    If Me.DataVencimento = Date Then
    i = MsgBox("Vencido Hoje", vbInformation, "Aviso")
    End If
    avatar
    julianovv
    Super Avançado
    Super Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 555
    Registrado : 14/12/2010

    Res: Aviso 30 dias do vencimento

    Mensagem  julianovv Ontem à(s) 10:15

    Bom dia vieirasoft. Obrigado mas não funcionou. Essa expressão limitou todos os outros resultados na consulta. Mudei o 30 para 15 para pegar os últimos 15 dias e não funcionou. As outras expressões, inclusive da data de hoje igual a do vencimento também não.

    Passei a usar a expressão que não causou nenhum conflito com as outras:

    Data30: (Data()=[DataVencimento]-29)

    Todas elas ficaram assim:

    Data30: (Data()=[DataVencimento]-29) - Para retornar 30 dias antes.
    Data15: (Data()=[DataVencimento]-14) - Para retornar 15 dias antes.
    VenceHoje: (Data()=[DataVencimento]) - Para retornar o dia de hoje.
    Emdebito: (Data()=[DataVencimento]+15) - Para retornar 15 dias depois.

    Obrigado!

    Wink


    .................................................................................
    Juliano

    Uso o Access 2007 no XP SP3
    Pentil 4 Duo Core 2 - 3.2 ghz  - HD 250 GB ATA II - Placa Asus P5LD2-X - 2 GB de memória DDR2 667 mhz Kingston - GForce GT220 - Monitor 17" LCD 732N Samsung - Impressora Epson T33
    [Você precisa estar registrado e conectado para ver esta imagem.]
    avatar
    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7236
    Registrado : 11/05/2010

    Re: [Resolvido]Aviso 30 dias do vencimento

    Mensagem  vieirasoft Ontem à(s) 11:35

    Bom dia. Não entendi o não funcionar e conflitos. O que lhe passei faz o mesmo. seria avisado 30 dias antes,ou 15 dias antes, assim como o código para o dia actual funciona a 100% no evento "No Actual" do formulário. E não
    limita os campos nem cria conflitos, a não ser que esteja a usar outras datas ou critérios na mesma consulta que pudessem criar os tais conflitos??? Mas, se resolveu, usando apenas os critérios na consulta,óptimo, é o que nos interessa. O Fórum agradece o retorno. Bom trabalho

      Data/hora atual: 16/11/2018, 10:15