• Nenhum resultado encontrado

Controle Financeiro com Calendário interativo

N/A
N/A
Protected

Academic year: 2021

Share "Controle Financeiro com Calendário interativo"

Copied!
7
0
0

Texto

(1)

Access Básico

Figura 1 – Formulário Inicial com todos os módulos em forma de botões para acesso do usuário.

Como consultor, tenho uma empresa, e é vital controlar despesas e

receitas corretamente. Então, procurei desenvolver um controle

finan-ceiro próprio com o Access (minha principal ferramenta de trabalho)

para adequá-lo totalmente às minhas necessidades.

Desde o início quis ter um painel de controle com um calendário-guia

seme-lhante ao Outlook. Não só para consultar os meses do ano, mas, também,

para poder interagir meus extratos com ele. Para incrementar ainda mais,

adicionei um processo para indicar os feriados fixos e móveis.

Quando isso foi feito, eu usava o Access 2000, mas, agora, já o

con-verti para XP e acredito que em 97 também funcionará, pois muitas

rotinas desse aplicativo foram desenvolvidas em outros projetos

nessa versão.

Além do calendário, o projeto possui uma proposta para a tela de

cadastros de um sistema, um gerador automático para lançamentos

e gráficos para acompanhamentos e previsões de despesas e

recei-tas. Há, ainda, muitos outros recursos interessantes utilizados em

outros projetos, que desenvolvi nesses últimos anos, os quais serão

demonstrados.

Ao executar o arquivo, automaticamente, temos o Menu Principal do

sistema. Composto por 4 módulos, eles podem ser acessados

clicando-se no botão correspondente. Como efeito visual, esclicando-se formulário tem

um controle para minimizar e restaurar o formulário quando uma

das opções do sistema for solicitada e um rótulo com data e hora

atualizado automaticamente.

Controle Financeiro com

Calendário interativo

Paulo Sergio Sarraino *

FINANCEIRO_FA.EXE (Access 2000, XP e 2003) Disponível para download em www.forumaccess.com.br

DISPONÍVEL PARA DOWNLOAD

Artigo para Access 2000, XP e 2003

Pré-requisitos: Conhecimentos de Access e VBA

CADASTROS

Há 4 tipos de cadastros no sistema:

Contas

: as contas bancárias que se deseja controlar;

Deve-se informar a identificação da conta, tipo (corrente, poupança

ou previdência), nome do banco, nome da conta, data inicial de

controle e saldo inicial.

Receitas

: um plano de contas de recebimentos ou entradas que

as contas terão;

Deve-se informar código (seguindo o padrão) e descrição.

Despesas

: um plano de contas de pagamentos ou saídas que

as contas terão;

Deve-se informar código (seguindo o padrão) e descrição.

Feriados

: uma tabela para os feriados fixos e outras datas que

achar necessário indicar;

Deve-se informar a data (dd/mm) e o motivo pelo feriado.

Um grupo de opção funciona como menu lateral para acessar os

cadastros do sistema de acordo com o botão clicado, trocando a

origem de dados do subformulário ao lado (veja a sub

grpCadas-tros_AfterUpdate()).

Private Sub grpCadastros_AfterUpdate() Dim subf As String

‘opções de cadastro... Select Case Me.grpCadastros Case 1: subf = “frm_Contas_sub” Case 2: subf = “frm_Receitas_sub” Case 3: subf = “frm_Despesas_sub” Case 4: subf = “frm_Feriados_sub” End Select

‘...atribuo o cadastro solicitado ao subformulário e o total de registros ao contador no rodapé da tela

With Me.subfCadastros .SourceObject = subf

Me.txtcont = .Form.RecordsetClone.RecordCount & “ registros” End With

End Sub

No rodapé da tela, há um botão de inclusão e de exclusão que, por

ter rotinas genéricas, funciona para o cadastro que estiver ativo

no momento. Há ainda um rótulo com a quantidade de registros do

cadastro e o botão de saída.

(2)

contí-classificados pelo clique em suas opções – (veja as funções ClassForm

e ClassSubForm no módulo bas_Geral). Para a classificação, cada

campo da listagem deve receber na sua propriedade “Tag” o número

correspondente ao botão do grupo de opção acima. Assim, ao clicar no

3º botão da listagem, a rotina classificará o registro de acordo com o

conteúdo do 3º campo exibido de forma ascendente. Um segundo clique

no mesmo botão classificará os registros em ordem decrescente.

Function ClassForm(strObj As Form, valctl As OptionGroup, snt As Integer) ‘classifica um formulário tipo tabela de dados conforme o valor de um grupo de opção escolhido (geralmente no cabeçalho)

‘neste formulário cada campo deve ter sua propriedade Marca (Tag) sincronizado com os valores de opção do grupo ‘snt (sentido de classificação) deve ter o valor 0 (ascend.) ou 1 (descend.)

On Error GoTo ClassForm_Err Dim ctrCrit As Control

For Each ctrCrit In strObj.Controls If Val(ctrCrit.Tag) = valctl Then If snt = 0 Then

strObj.OrderBy = “[“ & ctrCrit.ControlSource & “]” Else

strObj.OrderBy = “[“ & ctrCrit.ControlSource & “]” & “ DESC” End If

Exit Function End If Next

MsgBox “Índice de classificação não encontrado!!”, vbExclamation, “Atenção!”

ClassForm_Err:

If Err = “3117” Or Err = “2465” Then

MsgBox “Essa classificação não é possível!” & vbCrLf & “Campo tipo Memorando”, vbCritical, “Atenção!”

strObj.OrderBy = “” strObj.OrderByOn = True Else

MsgBox “Erro desconhecido: “ & vbCrLf & Err & “ - “ & Err.Description End If

Exit Function End Function

Figura 2 – Cadastro de Contas, inclusão e exclusão dos registros

e o gerenciamento dos dados.

Temos o Calendário Interativo exibindo um trimestre do ano (detalhado

adiante), uma combobox para indicar a conta que estamos analisando

e algumas funções no rodapé da tela:

Re-Indexa Lançamentos

: faz a reclassificação dos registros do

extrato (como a data do lançamento pode repetir, há um número

auxiliar na tabela para facilitar a ordenação dos registros) – (veja

a sub cmdIndex_Click());

Transferência entre Contas

: permite acessar uma tela para

registrar transferências de valores entre as contas bancárias

cadastradas;

Baixa

: realiza a “baixa” do pagamento ou recebimento em

foco marcando seu status “OK?” como True e gerando o registro

no extrato da conta correspondente – (veja a sub cmdBaixa_

Click());

Gerador de Lançamentos

: permite acessar uma tela que

gerencia a criação de pagamentos ou recebimentos múltiplos. Muito

útil para planejar os próximos meses com despesas (como água,

luz, telefone, impostos, etc.) e receitas (depósitos programados e

contratos de serviços com clientes);

Status

: filtra os registros com os status disponíveis (Pagar/

Pagos/Todos para os dados de Pagamentos e Receber/Recebidos/

Todos para os dados de Recebimentos) – (veja a sub

lstOK_Afte-rUpdate()).

Temos também um controle guia que permite acessar os 3 grupos

de registros:

Lançamentos

: o extrato das contas bancárias;

Com a conta selecionada no alto da tela, o subformulário traz os

dados a partir da data inicial definida (veja a sub

txtDtInicial_Afte-rUpdate()). Essa data inicial (último dia do mês anterior) ajuda a

calcular o saldo anterior como referência na tela.

Os registros são informados com a data do lançamento, histórico,

complemento (se necessário) e valor que, através da formatação

condicional, exibe em vermelho ou azul conforme a origem do

histórico informado (despesa ou investimento). Pode-se navegar

pelos registros como uma planilha Excel graças à função DoKeys no

módulo bas_Geral.

O saldo é calculado, automaticamente, linha a linha, utilizando a

função DSum() com a data do lançamento e um numerador

seqüen-cial atribuído automaticamente.

No rodapé do subformulário, temos os totalizadores de Receitas e

Despesas do período listado e o Saldo Atual da conta (figura 3).

Pagamentos

: “Contas a Pagar” e as já pagas;

Com a conta selecionada no alto da tela, o subformulário traz todos

os registros gerados na tela de Pagamentos.

Os registros são informados com a data prevista de pagamento,

histórico, complemento (se necessário) e valor previsto. O campo

“OK?” indica se o pagamento está “baixado” ou não. Pode-se

navegar pelos registros como uma planilha Excel graças à função

DoKeys no módulo bas_Geral.

(3)

Access Básico

Figura 3 – Painel de Controle, toda movimentação explícita nas abas de Lançamentos, Pagamentos e Recebimentos

Na abertura da tela, assumimos que apenas os registros não-pagos

nos interessam e, por isso, temos uma filtragem inicial que segue

o campo Status no rodapé da tela. Alterando o Status desejado,

os registros são filtrados automaticamente e as datas listadas são

marcadas em negrito no calendário.

Recebimentos

: “Contas a Receber” e as já recebidas.

Com a conta selecionada no alto da tela, o subformulário traz todos

os registros gerados na tela de Recebimentos.

Os registros são informados com a data prevista de recebimento,

histórico, complemento (se necessário) e valor previsto. O campo

“OK?” indica se o recebimento está “baixado” ou não.

Pode-se navegar pelos registros como uma planilha Excel graças

à função DoKeys no módulo bas_Geral.

Na abertura da tela, assumimos que apenas os registros

não-recebidos nos interessam e, por isso, temos uma filtragem inicial

que segue o campo Status no rodapé da tela. Alterando o Status

desejado, os registros são filtrados automaticamente e as datas

listadas são marcadas em negrito no calendário (figura 5).

TRANSFERÊNCIA ENTRE CONTAS

Como dito anteriormente, temos uma tela que facilita a geração de

registros de transferência (veja abaixo). Nela informamos as contas

de origem e de destino, a data do lançamento e o valor. O sistema

gerará automaticamente o lançamento de débito e crédito nas contas

envolvidas (figura 6).

Figura 4 – Painel de Controle exibe todos os pagamentos de acordo com o filtro de “Status”.

Figura 5 – Painel de Controle exibe todos os recebimentos de acordo com o filtro de “Status”.

Private Sub cmdTransferir_Click() ‘valida parâmetros da transferência

If IsNull(Me.cmbConta_org) Or IsNull(Me.cmbConta_dst) Or _ IsNull(Me.txtDtTransf) Or IsNull(Me.txtValor) Or Me.txtValor = 0 Then MsgBox “Alguma das informações necessárias não foram informadas!” & vbCrLf & “Favor verifique.”, vbCritical, “Atenção!”

Exit Sub End If

If Me.cmbConta_org = Me.cmbConta_dst Then

MsgBox “Informe contas diferentes para a transferência.”, vbInformation, “Atenção!”

Exit Sub End If

If MsgBox(“Deseja efetuar a transferência?”, vbQuestion + vbYesNo, “Atenção!”) = vbNo Then Exit Sub

Dim rst As Recordset

‘cria os registros de transferência...

Set rst = CurrentDb.OpenRecordset(“tbl_Lançamentos”, dbOpenDynaset)

With rst

.AddNew ‘...cadastra o débito

!ID_Lancto = Nz(DMax(“ID_Lancto”, “tbl_Lançamentos”), 0) + 1 !Dt_Lancto = Me.txtDtTransf

!ID_Conta = Me.cmbConta_org

Figura 6 – O aplicativo tem funcionalidade de transfêrencia de valores entre contas específicadas pelo usuário.

(4)

!Tipo_Lancto = “D” .Update

.AddNew ‘...cadastra o crédito

!ID_Lancto = Nz(DMax(“ID_Lancto”, “tbl_Lançamentos”), 0) + 1 !Dt_Lancto = Me.txtDtTransf !ID_Conta = Me.cmbConta_dst !Histórico = “R99” !Complemento = Me.cmbConta_org.Column(1) !Vl_Lancto = Me.txtValor !Tipo_Lancto = “R” .Update .Close End With ‘atualiza controles If EstáCarregado(“frm_Lançamentos”) Then With Forms!frm_Lançamentos !frm_Lançamentos_sub.Requery .txtDtInicial_AfterUpdate End With End If ‘atualiza controles If EstáCarregado(“frm_PainelControle”) Then With Forms!frm_PainelControle !frm_Lanctos_sub.Requery .txtDtInicial_AfterUpdate End With End If

MsgBox “Transferência concluída.”, vbInformation, “Atenção!” Me.cmdFechar.SetFocus

End Sub

GERADOR DE LANÇAMENTOS

Com uma conta selecionada na tela do Painel de Controle, pode-se

chamar o Gerador de Lançamentos para facilitar o trabalho de

cadas-tramento de múltiplas ocorrências de um pagamento ou recebimento.

Informamos a data inicial, a quantidade de parcelas a gerar, o

his-tórico, complemento (se necessário), um indicativo para os registros

(por mês/ano - mm/aaaa - ou por quantidade - 01/nn) e o valor (veja

a sub cmdGerLancto_Click()).

Dim rst As Recordset Dim i As Integer, dt_aux As Date

‘valida parâmetros informados For Each ctl In Me.Controls If ctl.Tag = “x” Then If IsNull(ctl) Then

MsgBox “Algum parâmetro não foi informado!” & vbCrLf & “Verifique.”, vbExclamation, “Atenção!” Me.txtDtInicial.SetFocus Exit Sub End If End If Next dt_aux = Me.txtDtInicial ‘gera lançamentos...

If Me.txtHistórico.Column(2) = “R” Then ‘Receita

Set rst = CurrentDb.OpenRecordset(“tbl_CtaReceber”, dbOpenDynaset) With rst For i = 1 To Me.txtQtdParc .AddNew !Dt_Recto = dt_aux !Histórico = Me.txtHistórico

If Me.grpComplemento = 1 Then ‘mm/aaaa

!Complemento = Trim(Me.txtComplemento & “ “ & Format(dt_aux, “mm/yyyy”))

Else ‘01/nn

!Complemento = Trim(Me.txtComplemento & “ “ & Format(i, “00”) & “/” & Format(Me.txtQtdParc, “00”)) End If !Vl_Recto = Me.txtValor !ID_Conta = Me.txtCodConta !flagRecto = False .Update

dt_aux = DateAdd(“m”, 1, dt_aux) Next .Close End With Forms!frm_PainelControle!frm_Rectos_sub.Form.Requery Else ‘Despesa

Set rst = CurrentDb.OpenRecordset(“tbl_CtaPagar”, dbOpenDynaset) With rst For i = 1 To Me.txtQtdParc .AddNew !Dt_Pagto = dt_aux !Histórico = Me.txtHistórico

If Me.grpComplemento = 1 Then ‘mm/aaaa

!Complemento = Trim(Me.txtComplemento & “ “ & Format(dt_aux, “mm/yyyy”))

Else ‘01/nn

!Complemento = Trim(Me.txtComplemento & “ “ & Format(i, “00”) & “/” & Format(Me.txtQtdParc, “00”))

End If

!Vl_Pagto = Me.txtValor !ID_Conta = Me.txtCodConta Figura 7 – Para gerar múltiplos lançamentos o sistema implementa mais esta

(5)

Access Básico

!flagPagto = False .Update

dt_aux = DateAdd(“m”, 1, dt_aux) Next .Close End With Forms!frm_PainelControle!frm_Pagtos_sub.Form.Requery End If

MsgBox “Lançamentos gerados.”, vbInformation, “Atenção!” Me.cmdFechar.SetFocus

End Sub

CONSULTAS

Podemos consultar todos os lançamentos de Despesas e Receitas

baixadas no sistema. Uma caixa de listagem com todos os tipos criados

no sistema permite acessar os registros de cada item e

disponibiliza-os em 2 visões:

Dados

: os registros são listados pela data de lançamento, conta,

complemento e valor. Pode-se navegar pelos registros como uma

planilha Excel graças à função DoKeys no módulo bas_Geral.

Gráfico

: os valores dos registros são agrupados por mês/ano e

exibidos num gráfico evolutivo.

EVOLUÇÕES

Com a tela de Evoluções temos uma visão mais ampla da evolução

dos nossos registros.

Os dados de Despesas, Receitas e os Lançamentos efetuados são

exi-bidos em gráficos evolutivos e podem ser parametrizados para limitar

os dados que desejamos consultar (veja a sub grpClass_Click()).

Figura 8 – O histórico mostra lançamentos e despesas, e suas respectivas informações como (Data, Conta, Complemento e Valor).

Figura 9 – Exibição dos gráficos por receita ou despesa selecionada.

Private Sub grpClass_Click() Dim dt_aux As Date Dim strQuery As String

‘atribui consultas relacionadas aos tipos de valores (real e previsto) strQuery = IIf(Me.grpRP = 1, “qry_TotalLançamentos “, “qry_ PrevLançamentos “)

Me.cboAno.RowSource = “SELECT Year(Periodo) AS Expr1 “ & _ “FROM “ & strQuery & _

“GROUP BY Year(Periodo) “ & _ “ORDER BY Year(Periodo) DESC;”

‘tipos de períodos disponíveis para os gráficos... Select Case Me.grpClass

Case 1 ‘Total

Me.cboAno.Visible = False

Me.grfEvolRD.RowSource = “SELECT Format(Periodo,’mm/yyyy’) AS Expr1, Sum(Total_Rct) AS SomaDeTotal_Rct, Sum(Total_Dsp) AS SomaDeTotal_ Dsp “ & _

“FROM “ & strQuery & _

“GROUP BY Format(Periodo,’mm/yyyy’) “ & _ “ORDER BY First(Periodo);”

Me.grfEvolSaldo.RowSource = “SELECT Periodo, SaldoFinal “ & _ “FROM qry_EvolSaldo;”

Case 2 ‘Por Ano Me.cboAno.Visible = True Me.cboAno.SetFocus

Me.grfEvolRD.RowSource = “SELECT Format(Periodo,’mm/yyyy’) AS Expr1, Sum(Total_Rct) AS SomaDeTotal_Rct, Sum(Total_Dsp) AS SomaDeTotal_ Dsp “ & _

“FROM “ & strQuery & _

“WHERE Year(Periodo) = “ & Me.cboAno & “ “ & _ “GROUP BY Format(Periodo,’mm/yyyy’) “ & _ “ORDER BY First(Periodo);”

Me.grfEvolSaldo.RowSource = “SELECT Periodo, SaldoFinal “ & _ “FROM qry_EvolSaldo “ & _

“WHERE Year(Periodo) = “ & Me.cboAno & “;”

Case 3 ‘Últimos 12 meses Me.cboAno.Visible = False dt_aux = DateAdd(“yyyy”, -1, Date)

dt_aux = Format(DateAdd(“m”, -1, dt_aux), “mm/dd/yyyy”) Me.grfEvolRD.RowSource = “SELECT Format(Periodo,’mm/yyyy’) AS Expr1, Sum(Total_Rct) AS SomaDeTotal_Rct, Sum(Total_Dsp) AS SomaDeTotal_ Dsp “ & _

“FROM “ & strQuery & _

“WHERE Periodo >= #” & dt_aux & “# “ & _ “GROUP BY Format(Periodo,’mm/yyyy’) “ & _ “ORDER BY First(Periodo);”

Me.grfEvolSaldo.RowSource = “SELECT Periodo, SaldoFinal “ & _ “FROM qry_EvolSaldo “ & _

“WHERE Periodo >= #” & dt_aux & “#;” End Select

End Sub

(6)

desejado) ou os Últimos 12 Meses.

Real/Previsão

: com base no controle de Baixa do sistema, os

dados são separados em lançamentos já efetivados e previstos.

Há 2 visões disponíveis:

Receitas x Despesas

: com esse gráfico podemos analisar como

está o andamento dos nossos pagamentos (vermelho) contra

as receitas (verde) conferindo os dados dispostos em 2 linhas

evolutivas.

Saldo

: além dos parâmetros já informados, temos ainda uma

combo para informar a conta desejada e assim consultar a

evolu-ção do saldo pelo período informado. Não será possível escolher

a opção Previsão para o Saldo.

CALENDÁRIO INTERATIVO

Figura 10 – Comparação entre receitas(verde) e despesas(vermelho) em modo gráfico.

Figura 11 – O evolução do saldo é exibido através do período em que o usuário deseja consultar.

Esse calendário tem várias funções no sistema. Além da exibição

do mês desejado, ele foi construído para indicar os feriados fixos e

móveis, indicar as ocorrências de pagamentos e recebimentos das

contas bancárias cadastradas e servir como acesso rápido ao período

do extrato de uma conta.

E ainda temos, abaixo dele, 3 botões que permitem navegar pelos

meses anteriores e posteriores ou ir diretamente para o dia atual de

processamento (veja as subs cmdMes_ant_Click(), cmdMes_seg_

Construído totalmente com objetos do

Access poderemos notar que existe

apenas 1 formulário criado para

exibição do mês (frm_Mes). Como

o Painel de Controle precisa exibir 3

meses consecutivos, o frm_Mes foi

inserido 3 vezes como subformulário

e, baseado no nome distinto de cada

objeto, controla a exibição do mês

necessário em cada um deles.

A partir daí, será chamada a rotina

que gera os dias do mês (nome do

subform.Form.GeraMes), pesquisa os

feriados fixos e calcula os móveis.

As indicações em negrito das

ocor-rências de pagamentos e

recebimen-tos e atribuída pela caixa de listagem

de Status das ocorrências.

O formulário frm_Mês é a base para a geração do calendário. Possui

42 labels que representam as posições possíveis para os dias do mês

(d01, ..., d42), 7 labels com os dias da semana (lblDom, ...lblSab) e mais

2 que abrigam o nome do mês (lblMes) e o ano (lblAno) e uma textbox

que contem a data-parâmetro para formar o calendário (txtdata - esse

controle é invisível). Todos dispostos como uma “folhinha” de mês. O

resto é com as rotinas internas de controle e formatação.

O formulário frm_Mes

possui 3 rotinas:

Sub GeraMes

: com base

na data recebida pelo

for-mulário Painel de Controle,

constrói o mês desejado

e pesquisa os feriados

cadastrados. Para os

feria-dos móveis temos uma

função (veja a

CalcFeria-dosMoveis()) que realiza

o cálculo para o ano que estamos vendo e elabora uma matriz com

as datas válidas. Para essa função, pesquisei inúmeros sites na

Internet e o próprio GD do Fórum, e descobri que ela é totalmente

válida para todos os anos a partir de 1583 (antes disso o calendário

era juliano);

Function PesquisaFeriado (dt As Date) As String

: uma pesquisa

na tabela de feriados fixos e na matriz de feriados móveis do ano

informado retorna as comemorações do dia se a data passada pelo

parâmetro é encontrada;

Function SelecionaDia

: acesso rápido ao extrato de uma conta a

partir de uma data selecionada. A função é atribuída ao evento OnClick

dos dias do mês.

(7)

Access Básico

Public Sub GeraMes()

Dim i As Integer, j As Integer, dt_aux As Date Dim F As String

j = 1

Me.cboMes = Choose(Month(Me.txtdata), “Janeiro”, “Fevereiro”, “Março”, “Abril”, “Maio”, “Junho”, “Julho”, “Agosto”, “Setembro”, “Outubro”, “Novembro”, “Dezembro”)

Me.cboAno = Year(Me.txtdata)

dt_aux = CDate(“01/” & Month(Me.txtdata) & “/” & Year(Me.txtdata))

‘limpa formatações e definições atuais For i = 1 To 42

With Me(“d” & Format(i, “00”)) .Caption = “” .BorderStyle = 0 .BackStyle = 0 .ForeColor = 10040115 .ControlTipText = “” End With Next

‘calcula e carrega os feriados móveis do ano solicitado CalcFeriadosMoveis Year(Me.txtdata)

‘gera o calendário do mês solicitado ‘inicia no dia da semana da data inicial For i = WeekDay(dt_aux) To 42

‘se a data estiver dentro do mês solicitado If j <= Day(DateAdd(“m”, 1, dt_aux) - 1) Then ‘atribui e formata o dia ao controle... With Me(“d” & Format(i, “00”)) ‘...o dia no caption .Caption = j

‘...a função SelecionaDia no OnClick

.OnClick = “=SelecionaDia(‘d” & Format(i, “00”) & “’)” ‘...formata em vermelho se for domingo

If .Tag = “dom” Then .ForeColor = 255 ‘...formata com cor e borda se for o dia atual

If (j = Day(Date)) And (Month(Me.txtdata) = Month(Date)) And (Year(Me.txtdata) = Year(Date)) Then .BorderStyle = 1: .BackStyle = 1 ‘...pesquisa feriados para o dia

F = PesquisaFeriado(CDate(j & “/” & Month(Me.txtdata) & “/” & Year(Me.txtdata)))

‘...atribui feriados ao ControlTipText do dia e formata em vermelho If F <> “” Then .ControlTipText = F: .ForeColor = 255 End With j = j + 1 End If Next End Sub

Function PesquisaFeriado(dt As Date) As String ‘pesquisa feriados fixos e atribui os móveis Dim rst As Recordset

Dim fer As String Dim i As Integer

‘feriados fixos...

Set rst = CurrentDb.OpenRecordset(“Select Comemoração “ & _

“From tbl_Feriados “ & _

“Where Day(Feriado) = “ & Day(dt) & “ And Month(Feriado) = “ & Month(dt) & “;”, dbOpenSnapshot)

With rst

Do While Not .EOF

fer = fer & !Comemoração & vbCrLf .MoveNext Loop .Close End With Set rst = Nothing ‘feriados móveis... For i = 1 To UBound(mat)

If dt = mat(i, 2) Then fer = fer & mat(i, 1) & vbCrLf Next

PesquisaFeriado = fer

End Function

Public Function SelecionaDia(ctr As String) ‘seleciona o dia informado em ctr Dim i As Integer

‘formata controles para exibir o dia selecionado em destaque If Me(ctr).Caption <> “” Then

For i = 1 To 42 With Me.Parent.Form

.sub_Mes_ant.Form(“d” & Format(i, “00”)).BackStyle = 0 .sub_Mes_atu.Form(“d” & Format(i, “00”)).BackStyle = 0 .sub_Mes_seg.Form(“d” & Format(i, “00”)).BackStyle = 0 End With

Next

Me(ctr).BackStyle = 1

‘passa o dia selecionado para o formulário-pai atualizar o início do extrato Me.Parent.Form.txtDtInicial = CDate(Me(ctr).Caption & “/” & Month(Me. txtdata) & “/” & Year(Me.txtdata))

Me.Parent.txtDtInicial_AfterUpdate End If

End Function

CONCLUSÃO

Bem, com isso, termino a demonstração do meu Controle Financeiro.

Há diversas idéias no momento - tais como integrar cálculo de impostos

e despesas com empresas de contabilidade, ampliar as possibilidades

dos gráficos e permitir gerar lançamentos com fórmulas complexas -,

mas isso fica para o futuro.

Espero que tenham gostado da matéria e que ela lhes possibilite gerar

melhorias em seus aplicativos. Fiquem à vontade para mandar idéias,

sugestões e críticas. Abraços.

* Paulo Sergio Sarraino (sarraino@sti.com.br) é sócio-majoritário da PSS

Consultoria em Informática Ltda. Possui graduação em Tecnologia em Processamento de Dados pela FASP (1997) e pós-graduação em Análise de Sistemas c/ ênfase em Gerência de Projetos pela FIAP (2000). Atua como consultor em Análise e Desenvolvimento de Sistemas em ambiente Office e Internet (especialista em Access, VBA e ASP) há 10 anos.

Referências

Documentos relacionados

O presente artigo tem por objetivo analisar a trajetória da Assistência Social no Brasil, elencando os principais marcos históricos que contemplaram a atuação do Estado, da

Quando, a pedido expresso do consumidor, o fornecimento de energia se inicie no período de resolução e o contrato seja resolvido, o comercializador tem direito ao pagamento do

Pagamentos Relações Financeiras Recebimentos Saídas Tesouraria – Caixa •Sobras •Faltas Contas a Receber •Adiantamentos •Recebimentos Contas a Pagar •Adiantament

A respeito disso, as autoras André; Vieira (2012) fazem a leitura dos saberes na perspectiva de Tardif (2002), referindo-se ao dia a dia dos Coordenadores Pedagógicos

II - Relação do projeto com a trajetória pregressa do candidato e com problemáticas atuais do desenvolvimento rural e da extensão rural;.. III - Conhecimento do candidato sobre

Avaliação das ações mecânicas de tornados sobre estruturas aporticadas flexíveis / Thiago Galindo Pecin; orientadores: João Luís Pascal Roehl, Andréia Abreu Diniz de

Os alunos que concluam com aproveitamento este curso, ficam habilitados com o 9.º ano de escolaridade e certificação profissional, podem prosseguir estudos em cursos vocacionais

A teoria das filas de espera agrega o c,onjunto de modelos nntc;máti- cos estocásticos construídos para o estudo dos fenómenos de espera que surgem correntemente na