USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  erro na função - URGENTE
VACA
LIMEIRA
SP - BRASIL
Postada em 31/08/2005 11:31 hs            
eu estou chamando a funçao desta maneira:
slv_data_venc = spf_calcula_dia_util (01/05/2005)
depois dos calculos eu faço o retorno deste modo:
Function spf_calcula_dia_util(slv_Data As String) As Date
...
end if

  spf_calcula_dia_util = slv_Data 'retorna dia util

end function

entretando quando a funçao chega no end function a primeira vez ela retorna pro end if, devolve os valores originais de todas as fariáveis e retorna a data inicial e naum a data corrigida.
naum eh erro na clausula if, ou seja naum fiz nenhum if sem fechar, jah tentei fazer uma variavel somar desta forma:
if variavel=0 then
  spf_calcula_dia_util = slv_Data 'retorna dia util
  variavel = variavel +1
end if
mais ele volta pro end if anterior e zera a variavel, jah tentei jogar o exit function deposi de:
  spf_calcula_dia_util = slv_Data 'retorna dia util
jah troquei os nomes de todas as veriaveis usadas varias vezes, jah refiz os calculos, mas todas as vezes ele retorna TODAS as variaveis ao seu valores iniciais...
alguem tem ideia do q pod ser?
DESDE DE JAH AGRADEÇO

"Quando estou fraco, aí então é que sou Poderoso"
     
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
Postada em 31/08/2005 12:56 hs            
Poderia colocar a função completa por favor e um exemplo de como usá-la??
     
VACA
LIMEIRA
SP - BRASIL
Postada em 31/08/2005 12:59 hs            
eh uma mistura de varias funcoes jah postadas aqui:

Function spf_calcula_dia_util(slv_Data As String) As Date
Dim A, B, c, D, E, F, G, H, I, K, L, m, p, Q As Long, Ano, dt_Pascoa, dt_Carnaval, dt_SextaSanta, dt_CorpusC As Date
  'Função que calcula Feriados móveis
  Ano = Year(CDate(slv_Data))
  A = (Ano Mod 19)
  B = Int(Ano / 100)
  c = (Ano Mod 100)
  D = Int(B / 4)
  E = (B Mod 4)
  F = Int((B + 8) / 25)
  G = Int((B - F + 1) / 3)
  H = ((19 * A + B - D - G + 15) Mod 30)
  I = Int(c / 4)
  K = (c Mod 4)
  L = ((32 + 2 * E + 2 * I - H - K) Mod 7)
  m = Int((A + 11 * H + 22 * L) / 451)
  p = Int((H + L - 7 * m + 114) / 31)
  Q = ((H + L - 7 * m + 114) Mod 31)
  
  dt_Pascoa = CDate((Q + 1) & "/" & p & "/" & Ano)
  dt_Carnaval = DateAdd("d", -47, dt_Pascoa)
  dt_SextaSanta = DateAdd("d", -2, dt_Pascoa)
  dt_CorpusC = DateAdd("d", 60, dt_Pascoa)

  If WeekDay(CDate(slv_Data)) <> 1 Then 'Domingo
   If WeekDay(CDate(slv_Data)) <> 7 Then 'Sábado
    If CDate(slv_Data) <> dt_Pascoa Then 'Pascoa
     If CDate(slv_Data) <> dt_Carnaval Then 'Carnaval
      If CDate(slv_Data) <> dt_SextaSanta Then 'Sexta Santa
       If CDate(slv_Data) <> dt_CorpusC Then 'Corpus Cristh
        If Month(CDate(slv_Data)) = 1 And Day(CDate(slv_Data)) = 1 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Confratenização Universal
        
        ElseIf CDate(slv_Data) = dt_Carnaval + 1 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'quarta feira de cinzas
        
        ElseIf Month(CDate(slv_Data)) = 4 And Day(CDate(slv_Data)) = 21 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'tiradentes
        
        ElseIf Month(CDate(slv_Data)) = 5 And Day(CDate(slv_Data)) = 1 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'dia do trabalho
        
        ElseIf Month(CDate(slv_Data)) = 9 And Day(CDate(slv_Data)) = 7 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'independencia
        
        ElseIf Month(CDate(slv_Data)) = 10 And Day(CDate(slv_Data)) = 12 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'N. S. Aparecida
        
        ElseIf Month(CDate(slv_Data)) = 11 And Day(CDate(slv_Data)) = 2 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Finados
        
        ElseIf Month(CDate(slv_Data)) = 11 And Day(CDate(slv_Data)) = 15 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Proclamação Republica
        
        ElseIf Month(CDate(slv_Data)) = 12 And Day(CDate(slv_Data)) = 25 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Natal
        
        End If
       Else
        spf_calcula_dia_util CDate(slv_Data) + 1 'Corpus Cristh
       End If
      Else
       spf_calcula_dia_util CDate(slv_Data) + 1 'Sexta Santa
      End If
     Else
      spf_calcula_dia_util CDate(slv_Data) + 1 'Carnaval
     End If
    Else
     spf_calcula_dia_util CDate(slv_Data) + 1 'Pascoa
    End If
   Else
    spf_calcula_dia_util CDate(slv_Data) + 1 'Sábado
   End If
  Else
   spf_calcula_dia_util CDate(slv_Data) + 1 'Domingo
  End If
  
  spf_calcula_dia_util = slv_Data 'retorna dia util
  


End Function

vc joga a data ele ve se eh feriado e retorna o proximo dia util

"Quando estou fraco, aí então é que sou Poderoso"
     
Semmer
CURITIBA
PR - BRASIL
ENUNCIADA !
Postada em 31/08/2005 13:53 hs            
Nos seus elseif (onde vc esta verificando os feriados nacionais) vc esta chamando a função sem que ninguém receba o valor de retorno.
Mude a expressão
spf_calcula_dia_util CDate(slv_Data) + 1
por
slv_Data = spf_calcula_dia_util(CDate(slv_Data) + 1)
... em todas as ocorrências
 
 
TÓPICO EDITADO
 
ghost_jlp
Pontos: 2843 Pontos: 2843 Pontos: 2843 Pontos: 2843
SÃO PAULO
SP - BRASIL
Postada em 31/08/2005 13:55 hs            
Ao q entendi sua função é recursiva afinal vc precisa verificar se o dia seguinte é domingo, sábado ou outro feriado correto? bom
 
eu modifiquei a sua função mas NÃO fiz vários testes... de uma olhada:
 
--------------------------------------------------------------------
Function spf_calcula_dia_util(slv_Data As String) As Date
Dim A, B, c, D, E, F, G, H, I, K, L, m, p, Q As Long, Ano, dt_Pascoa, dt_Carnaval, dt_SextaSanta, dt_CorpusC As Date
  'Função que calcula Feriados móveis
  Ano = Year(CDate(slv_Data))
  A = (Ano Mod 19)
  B = Int(Ano / 100)
  c = (Ano Mod 100)
  D = Int(B / 4)
  E = (B Mod 4)
  F = Int((B + 8) / 25)
  G = Int((B - F + 1) / 3)
  H = ((19 * A + B - D - G + 15) Mod 30)
  I = Int(c / 4)
  K = (c Mod 4)
  L = ((32 + 2 * E + 2 * I - H - K) Mod 7)
  m = Int((A + 11 * H + 22 * L) / 451)
  p = Int((H + L - 7 * m + 114) / 31)
  Q = ((H + L - 7 * m + 114) Mod 31)
 
  dt_Pascoa = CDate((Q + 1) & "/" & p & "/" & Ano)
  dt_Carnaval = DateAdd("d", -47, dt_Pascoa)
  dt_SextaSanta = DateAdd("d", -2, dt_Pascoa)
  dt_CorpusC = DateAdd("d", 60, dt_Pascoa)
  If Weekday(CDate(slv_Data)) <> 1 Then 'Domingo
   If Weekday(CDate(slv_Data)) <> 7 Then 'Sábado
    If CDate(slv_Data) <> dt_Pascoa Then 'Pascoa
     If CDate(slv_Data) <> dt_Carnaval Then 'Carnaval
      If CDate(slv_Data) <> dt_SextaSanta Then 'Sexta Santa
       If CDate(slv_Data) <> dt_CorpusC Then 'Corpus Cristh
        If Month(CDate(slv_Data)) = 1 And Day(CDate(slv_Data)) = 1 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Confratenização Universal
       
        ElseIf CDate(slv_Data) = dt_Carnaval + 1 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'quarta feira de cinzas
       
        ElseIf Month(CDate(slv_Data)) = 4 And Day(CDate(slv_Data)) = 21 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'tiradentes
       
        ElseIf Month(CDate(slv_Data)) = 5 And Day(CDate(slv_Data)) = 1 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'dia do trabalho
       
        ElseIf Month(CDate(slv_Data)) = 9 And Day(CDate(slv_Data)) = 7 Then
       
       
        'MUDEI AQUI!!!!
        'DA UMA OLHADA
         spf_calcula_dia_util = spf_calcula_dia_util(CDate(slv_Data) + 1) 'independencia
        'MUDEI AQUI!!!!
        'DA UMA OLHADA
        
       
        ElseIf Month(CDate(slv_Data)) = 10 And Day(CDate(slv_Data)) = 12 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'N. S. Aparecida
       
        ElseIf Month(CDate(slv_Data)) = 11 And Day(CDate(slv_Data)) = 2 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Finados
       
        ElseIf Month(CDate(slv_Data)) = 11 And Day(CDate(slv_Data)) = 15 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Proclamação Republica
       
        ElseIf Month(CDate(slv_Data)) = 12 And Day(CDate(slv_Data)) = 25 Then
         spf_calcula_dia_util CDate(slv_Data) + 1 'Natal
       
        End If
       Else
        spf_calcula_dia_util CDate(slv_Data) + 1 'Corpus Cristh
       End If
      Else
       spf_calcula_dia_util CDate(slv_Data) + 1 'Sexta Santa
      End If
     Else
      spf_calcula_dia_util CDate(slv_Data) + 1 'Carnaval
     End If
    Else
     spf_calcula_dia_util CDate(slv_Data) + 1 'Pascoa
    End If
   Else
    spf_calcula_dia_util CDate(slv_Data) + 1 'Sábado
   End If
  Else
   spf_calcula_dia_util CDate(slv_Data) + 1 'Domingo
  End If
 
  'spf_calcula_dia_util = slv_Data 'retorna dia util
 
End Function
--------------------------------------------------------------------
 
o q eu acho q acontece é o seguinte. Vc passa a data do dia 07/09/2005 q é um feriado correto? Ele retorna 08/09/2005 e confere novamente para verificar se a data 08/09/2005 é outro feriado, ou sábado ou domingo... ou seja ele faz uma recursividade. Bom... no caso ele retorna a data 08/09/2005 só q a variável "slv_Data" não foi alterada pq na função está assim:
 
...
spf_calcula_dia_util CDate(slv_Data) + 1
...
e vc retorna valor assim:
spf_calcula_dia_util = slv_Data 'retorna dia util
 
se vc fizesse assim:
slv_Data = spf_calcula_dia_util CDate(slv_Data) + 1
 
Creio q funcionaria...
Fiz um outro código conforme está acima q tb dá certo só q teria q aplicar pra todos os feriados... fiz como exemplo para o dia 07/09 q é independência do Brasil
 
qq dúvida é só postar
 
t+
 
 
 
     
VACA
LIMEIRA
SP - BRASIL
ENUNCIADA !
Postada em 31/08/2005 14:20 hs            
muito obrigado agora funcionou certo

"Quando estou fraco, aí então é que sou Poderoso"
   
Página(s): 1/1    

CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página