DIAS VENCIDO

Meu problema,
Tenho um banco firebird, tem uma coluna DATA_VENCIMENTO(TIPO SQL DATE E O TIPO DO DADO DATA - FORMATO DENTRO DO BANCO"17/08/2014"), criei dois campos somente no formulário, não fiz na tabela, para que possa calcular a quantidade de dias em atraso, HOJE(TIPO SQL DATE E O TIPO DO DADO DATA - FORMATO FORMULÁRIO USANDO CONFIGURAÇÃO REGIONAL “17/09/2014”) para chamar o dia atual, ATRASO(FORMATO NUMERO) para aparecer quantos dias em atraso.
Dentro do evento onApplicationInit coloquei:

[code]$hoje = date(“d-m-Y”);
{HOJE} = $hoje;

//$vencimento_convertido = sc_date_conv({DATA_VENCIMENTO},“db_format”,“dd/mm/aaaa”);
//{HOJE} = $vencimento_convertido;
{ATRASO} = sc_date_dif({DATA_VENCIMENTO}, “dd/mm/aaaa”, {HOJE}, “dd/mm/aaaa”); [/code]

Mas dá este erro…

Fatal error: Call to a member function Dif_Datas() on a non-object in C:\Arquivos de programas\NetMake\v8\wwwroot…

Tentei de tudo mas não consigo uma simples quantidade de dias vencidos…rs

Tem certeza que a data no Firebird esta DD/MM/AAAA

no meu fica AAAA-MM-DD, uso igual se fosse o MySQL.

Teste executar esta função de dias, em um controle simulando o exemplo do WEBHELP do SC, ai se der certo, pegue
a sua data do Firebird, de um echo nela e veja se ela esta no formato que você formatou na função.

E em todos os computadores que instalar o Firebird sempre copie as funções \UDF da aplicação Delphi nele, caso use uma aplicação comercial, etc.

Pelo IBexpert olhei como chega lá, e está assim 17.09.2014

Faz o seguinte, converte a data que tu tais pegando do bando para o mesmo formato da que você recebe com a função date, possivelmente deve funcionar.

Eu uso ele assim:

{dias}= sc_date_dif({OCORRENCIA.OCORRENCIA_DATA_PRAZO},“aaaa-mm-dd”,{current_date}, “aaaa-mm-dd”);

Fiz, mas deu o meu erro…
Fatal error: Call to a member function Dif_Datas() on a non-object in C:\Arquivos de programas\NetMake\v8\wwwroot…

-Joel, tu tais usando o macro do scriptcase?
-Este função que tu tais usando foi declarada?
Se você usar o mesmo macro que usei ele deve funcionar.

  • É do Scriptcase…
  • Declarada? Como assim, só coloquei ela diretamente no evento

Vou colocar passo a passo:

  1. Criei um método PHP com o nome dias_vencido, e coloquei o código:

[code]$hoje = date(“d-m-Y”); //tentei com aspas simples também

{HOJE} = $hoje;

{ATRASO}= sc_date_dif({DATA_VENCIMENTO},‘aaaa-mm-dd’,{HOJE}, ‘aaaa-mm-dd’); //tentei com aspas duplas também
[/code]

  1. Declarei no evento onApplicationInit:
dias_vencido();

3)Quando rodo aplicação, me dá o erro:

Fatal error: Call to a member function Dif_Datas() on a non-object in C:\Arquivos de programas\NetMake\v8\wwwroot....

FIZ OUTRA TENTATIVA ASSIM, MAS GEROU OUTRO ERRO:
Vou colocar passo a passo:

  1. Criei um método PHP com o nome dias_vencido, e coloquei o código:

[code]$hoje = date(‘d-m-Y’);

{HOJE} = $hoje;

GERALMENTE AS DATAS TRABALHADAS

APARECEM ESTÃO NO FORMATO BRASILEIRO

$inicio = “{DATA_VENCIMENTO}”;
$fim = {HOJE};

CONVERTE AS DATAS PARA O FORMATO AMERICANO

$inicio = explode(’/’, $inicio);
$inicio = “{$inicio[2]}-{$inicio[1]}-{$inicio[0]}”;

$fim = explode(’/’, $fim);
$fim = “{$fim[2]}-{$fim[1]}-{$fim[0]}”;

AGORA CONVERTEMOS A DATA PARA UM INTEIRO

QUE REPRESENTA A DATA E É PASSÍVEL DE OPERAÇÕES SIMPLES

COMO SUBTRAÇÃO E ADIÇÃO

$inicio = strtotime($inicio);
$fim = strtotime($fim);

$intervalo = $fim - $inicio;
{ATRASO} = $intervalo;

[/code]

  1. Declarei no evento onApplicationInit:
dias_vencido();

3)Quando rodo aplicação, me dá o erro:
Código: [Selecionar]
Undefined offset: 2
Undefined offset: 1
Undefined offset: 2
Undefined offset: 1

você não pode usar onApplicationInit: no evento onApplicatinInit

Ou utiliza na onscriptinit ou na onload.

Qual dos códigos está certo?

[code]$hoje = date(“d-m-Y”); //tentei com aspas simples também

{HOJE} = $hoje;

{ATRASO}= sc_date_dif({DATA_VENCIMENTO},‘aaaa-mm-dd’,{HOJE}, ‘aaaa-mm-dd’); //tentei com aspas duplas também
[/code]

só não sei se {DATA_VENCIMENTO} possui o forma interno que você informa na macro.

Rapaz, eu já fiz tanta coisa, lembrando que pego esta data no firebird, que nem sei mais o que faço, mas fiz novamente utilizando estes formatos abaixo, mas mesmo assim aparece um número negativo, veja na coluna ATRASO o resultado:

aaaa-dd-mm
dd.mm.aaaa
dd/mm/aaaa
dd-mm-aaaa
aaaa-mm-dd
aaaa.mm.dd
aaaa/mm/dd

vc pode configurar o campo DATA_VENCIMENTO internamente.

Não sai como eh guardado no firebird, nas a macro tem a opção de passar o parâmetro utilizado no banco de dados, veja no webhelp.

Desculpe minha ignorância, mas não entendi o que você quis dizer, sobre esta macro.

sc_date_conv({Campo_Data}, “Formato_Entrada”, “Formato_Saída”)
Um trabalho relativamente complexo na programação é a manipulação de datas. Para minimizar este problema o ScriptCase disponibiliza a função para conversão de datas sc_date_conv.

Parâmetro
Descrição
A ou Y Usado para referenciar ano.
M Usado para referenciar mês.
D Usado para referenciar Dia.
Db_Format Para formato de data do banco de dados.

para vc saber qual o formato que o campo se apresenta, vc pode forçar um formato de saída.

ou executar um :
echo "form_data = " . {DATA_VENCIMENTO};

para ver o formato.

Fiz como orientou de duas maneiras, mas não funcionou:

Primeiro:

[code]$hoje = date(“d-m-Y”);
{HOJE} = $hoje;

{HOJE} = sc_date_conv({HOJE},“db_format”,“aaaa-mm-dd”);

{DATA_VENCIMENTO} = sc_date_conv({DATA_VENCIMENTO},“db_format”,“aaaa-mm-dd”);

{ATRASO} = sc_date_dif({DATA_VENCIMENTO}, “aaaa-mm-dd”, {HOJE}, “aaaa-mm-dd”);[/code]

Segundo:

[code]$hoje = date(“d-m-Y”);
{HOJE} = $hoje;

{DATA_VENCIMENTO} = sc_date_conv({DATA_VENCIMENTO},“db_format”,“aaaa-mm-dd”);

{ATRASO} = sc_date_dif({DATA_VENCIMENTO}, “aaaa-mm-dd”, {HOJE}, “aaaa-mm-dd”);[/code]

Fera, tem mais alguma sugestão?

Não resolveu isso ainda?

Cara ja dei uma dica mole de se resolver y o cara ainda ta enrolando com isso
joga na BD dei um exemplo para MySQL