Calcular dias úteis entre datas

Sou iniciante no ScriptCase e gostaria de saber se alguém já desenvolver aplicação de calcule os dias úteis entre determinadas datas, exemplo:

Tenho duas tabelas:

  • Feriados Fixo (Id, dia/mês) <> dados 02/02
  • Feriados Móvel (Id, dia/mês) <> dados 04/02

dtinicial: 01/02/2016
dtfinal: 05/02/2016

Então retorna-se: 03 dias úteis, já que dia 02/02 e 04/02 são feriado.

Tinha o VB este modulo que calcula, mas no PHP não sei como funciona:

Option Compare Database
Option Explicit

Function ProximaDataUtil(dtDataInicial As Date, intDias As Integer) As Date
'criada por Alexandre Neves e Avelino Sampaio
'em 2012-12-27
'para GContabil
'do fórum MaximoAccess
Dim RstFeriadosFixos As DAO.Recordset
Dim RstFeriadosMoveis As DAO.Recordset
Dim RstRecesso As DAO.Recordset
Static varFF As Variant
Static varFM As Variant
Static varRE As Variant
Dim I%, D%, A%
Static K(3) As Byte
Static booCarregado As Boolean
Dim j As Boolean

j = False
If booCarregado = False Then
'----------------------------
'Abre recordsets
'----------------------------
Set RstFeriadosFixos = CurrentDb.OpenRecordset(“SELECT * FROM tabFeriadosFixos”)
Set RstFeriadosMoveis = CurrentDb.OpenRecordset(“SELECT * FROM tabFeriadosMóveis”)
Set RstRecesso = CurrentDb.OpenRecordset(“SELECT * FROM tabRecesso”)
'------------------------------------------------------------------------
'Movimenta ponteiros dos recordset para realizar a contagem de registros
'------------------------------------------------------------------------
RstFeriadosFixos.MoveLast: RstFeriadosFixos.MoveFirst
RstFeriadosMoveis.MoveLast: RstFeriadosMoveis.MoveFirst
RstRecesso.MoveLast: RstRecesso.MoveFirst
'---------------------------------------------------------------------------------------
'Passa para a variável K a quantidade de registros de cada recordset
'passa para as variáves respectivas (varFF,varFM e verRe) os registros de cada tabela
'---------------------------------------------------------------------------------------
K(0) = RstFeriadosFixos.RecordCount: varFF = RstFeriadosFixos.GetRows(K(0))
K(1) = RstFeriadosMoveis.RecordCount: varFM = RstFeriadosMoveis.GetRows(K(1))
K(2) = RstRecesso.RecordCount: varRE = RstRecesso.GetRows(K(2))
'----------------------------------------------
'Fecha os recordset’s e limpa a memoria
'----------------------------------------------
RstFeriadosFixos.Close
RstFeriadosMoveis.Close
RstRecesso.Close
Set RstFeriadosFixos = Nothing
Set RstFeriadosMoveis = Nothing
Set RstRecesso = Nothing
'----------------------------------------------------------------------------------
'Passando a variável booCarregado para true não será mais carregado os recordset’s
'Os dados serão lidos das variáveis varFF, varFE e VarRE
'Assim evitamos ter que realizar viagens as tabelas do back-end
'----------------------------------------------------------------------------------
booCarregado = True
End If
A = 0
'------------------------------------------------------------------------------
'Soma a data de acordo com o prazo, descontando os dias de recesso, se houver.
'------------------------------------------------------------------------------
Do While Not intDias <= A
dtDataInicial = dtDataInicial + 1
For I = 0 To (K(2) - 1)
Select Case CLng(dtDataInicial)
Case CLng(varRE(2, I)) To CLng(varRE(3, I)): j = True
End Select
Next
A = A + IIf(j = True, 0, 1)
j = False
Loop

'----------------------------------------------
'Ajusta a data final caso caia em um feriado
'----------------------------------------------
For I = 0 To (K(0) - 1)
    If varFF(0, I) = Format(dtDataInicial, "d-m") Then dtDataInicial = dtDataInicial + 1
Next
For I = 0 To (K(1) - 1)
    If varFM(0, I) = dtDataInicial Then dtDataInicial = dtDataInicial + 1
Next

'----------------------------------------------------
'Ajusta a data final caso caia em um final de semana.
'----------------------------------------------------
dtDataInicial = dtDataInicial + IIf(Weekday(dtDataInicial) = 7, 2, IIf(Weekday(dtDataInicial) = 1, 1, 0))

'------------------------------------------------------------------------------------------
'Ajusta a data final caso caia um feriado na segunda-feira, após ajuste de final de semana
'------------------------------------------------------------------------------------------
For I = 0 To (K(0) - 1)
    If varFF(0, I) = Format(dtDataInicial, "d-m") Then dtDataInicial = dtDataInicial + 1
Next
For I = 0 To (K(1) - 1)
    If varFM(0, I) = dtDataInicial Then dtDataInicial = dtDataInicial + 1
Next
ProximaDataUtil = dtDataInicial

End Function

Desde já agradeço.

Att.

Gilson

O Código em VB é tão ‘gordo’ hehe, por isso que a MS caiu na real e mudou para C#.

Em PHP é menos código e mais resultado:

//Nesse exemplo usamos o mês de Novembro e o ano de 2015
$mes = 11;
$ano = 2015;

// Feriados de Novembro
$feriados = array(2 => ‘Finados’, 15 => ‘Proclamação da Republica’);

// Total de dias no mês
$dias_do_mes = cal_days_in_month(CAL_GREGORIAN, $mes, $ano);

$dias_uteis = 0;

for($d=1; $d<=$dias_do_mes; $d++) {
$dia_da_semana = jddayofweek(cal_to_jd(CAL_GREGORIAN, $mes, $d, $ano) , 0);

// 0 = domingo e 6 = sábado
if (!($dia_da_semana == 0 || $dia_da_semana == 6 || in_array($d, $feriados))) {
	$dias_uteis++;
}

}

echo $dias_uteis;

Jailton,

O seu código estar perfeito, mas não é exatamente o que preciso ou tentar explicar novamente:

Preciso calcular a Data Final de determinado prazo, retirando os finais de semanas (sábado e domingo e os feriados):

Questão: Calcule da Data Final do Prazo?
Vejamos os dados: Data Inicial= 01/11/2016 e Prazo = 20 dias úteis.
Lembrando que em novembro termos dois feriados 02/11> finados, 15/11>proclamação e 17/11> feriado municipal.

Resposta:
Data Inicial: 01/11/2016
Prazo:20 dias úteis
Feriados: 03
Data Final:???

{Data Inicial} + {20 dias úteis} - {3 feriados} - {sábado e domingo} = Data Final

A Data Final seria o dia 01/12/2016.

Lembrando que tenho uma tabela onde os feriados municipais são cadastrados.

Espero que possa ajudar.

Att.

Gilson

Essa rotina que te passei faz isso, só alterando uma linha… você nunca programou??

Boa noite, conseguir como este código resolver o primeiro problema:

[code]<?
//CALCULANDO DIAS NORMAIS
//LISTA DE FERIADOS NO ANO
function Feriados($ano,$posicao){
$dia = 86400;
$datas = array();
$datas[‘pascoa’] = easter_date($ano);
$datas[‘sexta_santa’] = $datas[‘pascoa’] - (2 * $dia);
$datas[‘carnaval’] = $datas[‘pascoa’] - (47 * $dia);
$datas[‘corpus_cristi’] = $datas[‘pascoa’] + (60 * $dia);
$feriados = array (
‘01/01’,
‘02/02’, // Navegantes
date(‘d/m’,$datas[‘carnaval’]),
date(‘d/m’,$datas[‘sexta_santa’]),
date(‘d/m’,$datas[‘pascoa’]),
‘21/04’,
‘01/05’,
date(‘d/m’,$datas[‘corpus_cristi’]),
‘20/09’, // Revolução Farroupilha \m/
‘12/10’,
‘02/11’,
‘15/11’,
‘25/12’,
);

  return $feriados[$posicao]."/".$ano;
  }      

  //FORMATA COMO TIMESTAMP
  function dataToTimestamp($data){
     $ano = substr($data, 6,4);
     $mes = substr($data, 3,2);
     $dia = substr($data, 0,2);
  return mktime(0, 0, 0, $mes, $dia, $ano);  
  } 

  //SOMA 01 DIA
  function Soma1dia($data){
     $ano = substr($data, 6,4);
     $mes = substr($data, 3,2);
     $dia = substr($data, 0,2);
  return   date("d/m/Y", mktime(0, 0, 0, $mes, $dia+1, $ano));
  }
  
  function SomaDiasUteis($xDataInicial,$xSomarDias){
     for($ii=1; $ii<=$xSomarDias; $ii++){
        
        $xDataInicial=Soma1dia($xDataInicial); //SOMA DIA NORMAL
        
        //VERIFICANDO SE EH DIA DE TRABALHO
        if(date("w", dataToTimestamp($xDataInicial))=="0"){
           //SE DIA FOR DOMINGO OU FERIADO, SOMA +1
           $xDataInicial=Soma1dia($xDataInicial);
           
        }else if(date("w", dataToTimestamp($xDataInicial))=="6"){
           //SE DIA FOR SABADO, SOMA +2
           $xDataInicial=Soma1dia($xDataInicial);
           $xDataInicial=Soma1dia($xDataInicial);
           
        }else{
           //senaum vemos se este dia eh FERIADO
           for($i=0; $i<=12; $i++){
              if($xDataInicial==Feriados(date("Y"),$i)){
                 $xDataInicial=Soma1dia($xDataInicial);
              }
           }
        }
     }
  return $xDataInicial;
  }

?>

<? $DataInicial = "01/11/2016"; $QtdDia = '20'; $diasSomados = SomaDiasUteis($DataInicial,$QtdDia);

?>


O calculo da Data Inicial <?=$DataInicial?> + <?=$QtdDia?> dia(s) e - feriados e finais de semana é igual ao resultado =: <?=$diasSomados?>

Somar dias normais, mas de cair no final de semana ou feriado ir para o próximo dia util= <??>

[/code]

Agora preciso de uma função de calculo o prazo da seguinte forma: DtInicial + prazo = DtFinal (Se data final for sabado, domingo ou feriado a DtFinal passa para o primeiro dia útil seguinte).

Alguém pode ajudar? desde já agradeço.

Bom dia.

Use o sc_date do SC e com a data final, use o date(‘w’) pra checar qual é o dia da semana. Daí é só usar o sc_date novamente pra adicionar 1 ou 2 dias.

Kleyber,

Não sei como verificar usando o sc_date do SC, sou iniciando em SC, como verifico se é sabado, domingo ou feriado…??? poderia montar uma condições onde tivesse os três elementos, inclusive os feriados que constam da função que passei? Desde já agradeço.

Gilson,

Eu sei muito bem como é isso. Então aqui vão algumas dicas:

1 - Leia bem o Webhelp que tem no teu SC e se não conseguires, tem Webhelp online, pra ver a questão do SC_DATE: http://www.scriptcase.com.br/docs/pt_br/manual_mp.htm#macros-scriptcase/macros-scriptcase

2 - A função date(‘w’) é uma função do PHP que retorna um número informando a que dia da semana se refere. Então 0 - Domingo, 1 - Segunda… e por aí vai. Dá uma olhada no Google sobre essa função. Se não tiveres um certo conhecimento de PHP procure pelas funções e vais descobrindo. Estou sem tempo no momento e se algum dos colegas puder criar um exemplo, seria bom. Senão assim que tiver um tempinho monto um exemplo pra você.

3 - Assista os videos do Scriptcase que existem no site da Netmake. Vai te ajudar bastante.

Kleyber,

Obrigado pela atenção tenho estudado muito sobre o SC, mas quando passamos a desenvolver fica dificil pela falta de conhecimento de PHP e SC.
Sou iniciante mas gosto de estudar. Tentei várias vezes antes de postar… Vou tentar novamente para ver se consigo. Obrigado.

Gilson,

Assim que chegar em casa eu vejo se consigo montar um exemplo do que tu precisas e posto aqui.

Kleyber,

Fico muito grato pela ajuda… fico aguardando.

<?php //CALCULANDO DIAS NORMAIS /*Abaixo vamos calcular a diferença entre duas datas. Fazemos uma reversão da maior sobre a menor para não termos um resultado negativo. */ function CalculaDias($xDataInicial, $xDataFinal){ $time1 = dataToTimestamp($xDataInicial); $time2 = dataToTimestamp($xDataFinal); $tMaior = $time1>$time2 ? $time1 : $time2; $tMenor = $time1<$time2 ? $time1 : $time2; $diff = $tMaior-$tMenor; $numDias = $diff/86400; //86400 é o número de segundos que 1 dia possui $numDias = $numDias +1;//ATENÇÃO NESSA PARTE - FOI ACRESCENTADO PORQUE PRECISO CONTAR COM O DIA ESCOLHIDO, LOGO SEM ISSO PEGA ENTRE AS DATAS DESCARTANDO O DIA INICIAL. return $numDias; } //LISTA DE FERIADOS NO ANO /*Abaixo criamos um array para registrar todos os feriados NACIONAIS existentes durante o ano.*/ function Feriados($ano,$posicao){ $dia = 86400; $datas = array(); $datas['pascoa'] = easter_date($ano); $datas['sexta_santa'] = $datas['pascoa'] - (2 * $dia); $datas['carnaval'] = $datas['pascoa'] - (47 * $dia); $datas['corpus_cristi'] = $datas['pascoa'] + (60 * $dia); $feriados = array ( '01/01', '02/02', // Navegantes date('d/m',$datas['carnaval']), date('d/m',$datas['sexta_santa']), date('d/m',$datas['pascoa']), '21/04', '01/05', date('d/m',$datas['corpus_cristi']), '20/09', // Revolução Farroupilha \m/ '12/10', '02/11', '15/11', '25/12', ); return $feriados[$posicao]."/".$ano; } //FORMATA COMO TIMESTAMP /*Esta função é bem simples, e foi criada somente para nos ajudar a formatar a data já em formato TimeStamp facilitando nossa soma de dias para uma data qualquer.*/ function dataToTimestamp($data){ $ano = substr($data, 6,4); $mes = substr($data, 3,2); $dia = substr($data, 0,2); return mktime(0, 0, 0, $mes, $dia, $ano); } //SOMA 01 DIA function Soma1dia($data){ $ano = substr($data, 6,4); $mes = substr($data, 3,2); $dia = substr($data, 0,2); return date("d/m/Y", mktime(0, 0, 0, $mes, $dia+1, $ano)); } //CALCULA DIAS UTEIS /*É nesta função que faremos o calculo. Abaixo podemos ver que faremos o cálculo normal de dias ($calculoDias), após este cálculo, faremos a comparação de dia a dia, verificando se este dia é um sábado, domingo ou feriado e em qualquer destas condições iremos incrementar 1*/ function DiasUteis($yDataInicial,$yDataFinal){ $diaFDS = 0; //dias não úteis(Sábado=6 Domingo=0) $calculoDias = CalculaDias($yDataInicial, $yDataFinal); //número de dias entre a data inicial e a final $diasUteis = 0; while($yDataInicial!=$yDataFinal){ $diaSemana = date("w", dataToTimestamp($yDataInicial)); if($diaSemana==0 || $diaSemana==6){ //se SABADO OU DOMINGO, SOMA 01 $diaFDS++; }else{ //senão vemos se este dia é FERIADO for($i=0; $i<=12; $i++){ if($yDataInicial==Feriados(date("Y"),$i)){ $diaFDS++; } } } $yDataInicial = Soma1dia($yDataInicial); //dia + 1 } return $calculoDias - $diaFDS; } ?>

Show, Jean. Eu não faria melhor.

E ainda fala que não sabe programar nos webnar… kkkkk
Parabéns Jean.

kkkkkkkkkkk

Muito obrigado ao senhores Kleyber e Jean pelas valiosas ajudas e pelas funções…

Encontre também na net outra que estar dando certo, vou deixar aqui para os demais usuários do forum:

<?php

// Define o formato de saída da data
define('FR_DATA', 'd/m/Y');

$dtfinal = '09/02/2016';

// Teste

echo "O próximo dia util é : ", proDiaUtil($dtfinal); 

/*
 * proDiaUtil()
 * Retorna o próximo dia útil em relação a data.
 *
 * @data   -> Variável que recebe a data. 
 * 			Formato: DD/MM/AAAA
 */
function proDiaUtil($data)
{
	// Separa a data
	$dt = explode('/', $data);
	$dia = $dt[0];
	$mes = $dt[1];
	$ano = $dt[2];
	/*
	
	(1) Pega uma data de referência (variável), compara com o datas definidas pelo sistema (feriados e finais de semana) 
		e retorna a próxima data um dia útil
	(2) As datas do sistema são: [1] sábados; [2] domingos; [3] feriados fixos; [4] feriados veriáveis; [5] dias opcionais (ex: quarta de cinza)
	(3) Retorno o próximo/imediato dia útil.
	
	*/
	
	// 1 - verifica se a data referente é um final de semana (sábado ou domingo); 
	// se sábado acrescenta mais 1 dia e faz nova verificação
	// se domingo acrescenta mais 1 dia e faz nova verificação
	$fsem = date('D', mktime(0,0,0,$mes,$dia,$ano));
	$i = 1;
	switch($fsem)
	{
		case 'Sat': 
			return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano))); 
		break;
		
		case 'Sun':
			return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
		break;
		
		default:
		    // 2 - verifica se a data referente é um feriado
			if(in_array($data, Feriados($ano))== true)
			{
				return proDiaUtil(date(FR_DATA, mktime(0,0,0,$mes,$dia+$i,$ano)));
			}
			else
			{
				// Retorna o dia útil
				return $data;
			}
		break;
	}		
}

/*
 * Feriados()
 * Gera um array com as datas dos feriados com referência no ano da data pesquisada.
 *
 * @ano   -> Variável que recebe o ano base para o cálculo;
 */
function Feriados($ano)
{	
	$feriados = array
	(
	  // Armazena feriados fíxos
	  
	  //Janeiro
	  date(FR_DATA, mktime(0,0,0,'01','01',$ano)), // 01/01 Ano novo
	  date(FR_DATA, mktime(0,0,0,'01','02',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'01','03',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'01','04',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'01','05',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'01','06',$ano)), //  Recesso
	  
	   //Março
	  date(FR_DATA, mktime(0,0,0,'03','19',$ano)), //  Dia de São José
	  
	   //Abril  
	  date(FR_DATA, mktime(0,0,0,'04','21',$ano)), // 21/04 Tiradentes
	  
	   //Maio
	  date(FR_DATA, mktime(0,0,0,'05','01',$ano)), // 01/05 Dia do trabalho
	  
	   //Junho
	  date(FR_DATA, mktime(0,0,0,'06','24',$ano)), //  São João
	  
	  //Julho
	  date(FR_DATA, mktime(0,0,0,'07','15',$ano)), //  N. Sa. Perpétuo Socorro
	  
	  //Setembro
	  date(FR_DATA, mktime(0,0,0,'09','07',$ano)), // 07/09 Independencia
	  date(FR_DATA, mktime(0,0,0,'09','28',$ano)), // Dia do Municipio de Acopiara
	  
	  //Outubro
	  date(FR_DATA, mktime(0,0,0,'10','04',$ano)), // São Francisco
	  date(FR_DATA, mktime(0,0,0,'10','12',$ano)), // 12/10 N. Senhora Aparecida
	  
	  
	  //Novembro
	  date(FR_DATA, mktime(0,0,0,'11','02',$ano)), // 02/11 Finados	  
	  date(FR_DATA, mktime(0,0,0,'11','15',$ano)), // 15/11 Proclamação
	  
	  //Dezembro
	  date(FR_DATA, mktime(0,0,0,'12','20',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','21',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','22',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','23',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','24',$ano)), // 24/12 Véspera de Natal
	  date(FR_DATA, mktime(0,0,0,'12','25',$ano)), // 25/12 Natal
	  date(FR_DATA, mktime(0,0,0,'12','26',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','27',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','28',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','29',$ano)), //  Recesso
	  date(FR_DATA, mktime(0,0,0,'12','30',$ano)), //  Recesso	  
	  date(FR_DATA, mktime(0,0,0,'12','31',$ano)), // 31/12 Véspera de Ano novo
	  
	  
	  // Armazena feriados variáveis
	  //flxFeriado($ano, 'pascoa', $r = 1), // Páscoa - Sempre domingo
	  flxFeriado($ano, 'carn_sab', $r = 1), // Carnaval - Sempre sábado
	  flxFeriado($ano, 'carn_dom', $r = 1), // Carnaval - Sempre domingo
	  flxFeriado($ano, 'carn_seg', $r = 1), // Carnaval - Segunda
	  flxFeriado($ano, 'carn_ter', $r = 1), // Carnaval - Terça
	  //strtoupper(flxFeriado($ano, 'carn_qua', $r = 1)), // Carnaval - Quarta de cinza
	  flxFeriado($ano, 'sant_sex', $r = 1), // Sexta Santa
	  flxFeriado($ano, 'corp_chr', $r = 1)  // Corpus Christi
	);
	return $feriados;
}

/*
 * flxFeriado()
 * Calcula os dias de feriados variáveis. Com base na páscoa.
 *
 * @ano   -> Variável que recebe o ano base para o cálculo;
 * @tipo  -> Tipo de dados
 * 			[carn_sab]: Sábado de carnaval;
 * 			[carn_dom]: Domingo de carnaval;
 * 			[carn_seg]: Segunda-feira de carnaval;
 * 			[carn_ter]: Terça-feira de carnaval;
 * 			[carn_qua]: Quarta-feira de carnaval;
 * 			[sant_sex]: Sexta-feira santa;
 * 			[corp_chr]: Corpus Christi;
 */
 
function flxFeriado($ano, $tipo = NULL)
{
	$a=explode("/", calPascoa($ano));
	switch($tipo)
	{
		case 'carn_sab': $d = $a[0]-50; break;
		case 'carn_dom': $d = $a[0]-49; break;
		case 'carn_seg': $d = $a[0]-48; break;
		case 'carn_ter': $d = $a[0]-47; break;
		case 'carn_qua': $d = $a[0]-46; break;
		case 'sant_sex': $d = $a[0]-2; break;
		case 'corp_chr': $d = $a[0]+60; break;
		case NULL: 
		case 'pascoa': $d = $a[0]; break;
	}
	return date(FR_DATA, mktime(0,0,0,$a[1],$d,$a[2])); break;
}

/*
 * calPascoa()
 * Calcula o domingo da pascoa. Base para todos os feriádos móveis.
 *
 * @ano   -> Variável que recebe o ano base para o cálculo ;
 */
 
function calPascoa($ano)
{
	$A = ($ano % 19);
    $B = (int)($ano / 100);
    $C = ($ano % 100);
    $D = (int)($B / 4);
    $E = ($B % 4);
    $F = (int)(($B + 8) / 25);
    $G = (int)(($B - $F + 1) / 3);
    $H = ((19 * $A + $B - $D - $G + 15) % 30);
    $I = (int)($C / 4);
    $K = ($C % 4);
    $L = ((32 + 2 * $E + 2 * $I - $H - $K) % 7);
    $M = (int)(($A + 11 * $H + 22 * $L) / 451);
    $P = (int)(($H + $L - 7 * $M + 114) / 31);
    $Q = (($H + $L - 7 * $M + 114) % 31) + 1;
    return date('d/m/Y', mktime(0,0,0,$P,$Q,$ano));
}

?>

Que bom que resolveu, Gilson. E obrigado por compartilhar o código. Vai ser útil sim.

na verdade sou um exper em pesquisar…
achei o script na net, porém fiz algumas adaptações…

Jean chic.
Só tenho uma observação a fazer.
Tem um bug na sua assinatura onde você fecha a “]” não encontrei onde você abriu a chave.
Ai fiquei sem saber direito sua especialidade.
kkkkkkkkk

Caro [size=1em][font=Verdana]GCONTABIL2015 Todo código compartilhado é válido.
Obrigado por compartilhar.[/font][/size]