Ir para conteúdo
  • Cadastre-se

dev botao

Acerto Danferv ( Problema Data Saída ) [Resolvido]


Ver Solução Respondido por Juliomar Marchetti,
  • Este tópico foi criado há 3583 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Nós utilizávamos no sistema o RAVE para impressão das DANFES, acontece que um cliente pediu para que implementássemos o modo Retrato do Danfe também.

Então resolvemos usar o RAVECB, que tem essa opção.. Porém ao utiliza-lo tivemos 1 problema.

O problema que tivemos foi na Data de Saída do DANFE. Quando o cliente não colocava a Data de saída na NFe (que é um campo opcional), ao invés de ficar em branco era impresso “30/12/99”. Depois de alguns minutos analisando o código notei que o problema está na função FormatDate (linha 264) no arquivo ACBrDFeUtil.pas .

 

No ACBrDANFeCBRaveRetrato.pas na linha 644 tem a seguinte linha.

Box([fsTop,fsLeft],XPos,YPos,21,aHeigthPadrao,'Data de '+vEntSai,DFeUtil.FormatDate(DateToStr(Ide.DSaiEnt)),taCenter,True);

 

Caso o valor seja "" (vazio) ele atribui a data "30/12/99" dependendo das configurações regionais da maquina, caso as configurações sejam diferentes de dd.mm.aaaa temos esse problema da data pois a variável Ide.DSaiEnt é carregada corretamente com zero, mas como a função DFeUtil.FormatDate exige uma variável string, é usada a DateToStr, que transforma o zero em “30/12/99”. Só que na função FormatDate, tem uma parte que transforma novamente a string em data, na linha 285:
vTemp := StrToDate(AString);

 

Para resolver, fiz um overload alterando o tipo de variável para TDateTime.

Conforme mostrado abaixo:

Na linha 93 substitui

 

class function FormatDate(const AString: string): String;

 

Por:

 class function FormatDate(const AString: string): String;overload;
 class function FormatDate(const AData: TDateTime): String;overload;

 

Na linha 300 adicionei o seguinte função:

 

class function DFeUtil.FormatDate(const AData: TDateTime): String;
var
{$IFDEF VER140} //delphi6
{$ELSE}
  FFormato : TFormatSettings;
{$ENDIF}
begin
  try
{$IFDEF VER140} //delphi6
    DateSeparator := '/';
    ShortDateFormat := 'dd/mm/yyyy';
{$ELSE}
    FFormato.DateSeparator   := '-';
    FFormato.ShortDateFormat := 'yyyy-mm-dd';
{$ENDIF}
    if AData = 0 then
      Result := ''
    else
      Result := DateToStr(AData);
  except
    Result := '';
  end;
end;

 

E já nos arquivos 

- ACBrDANFeCBRaveRetrato.pas na linha 644 tem a seguinte linha:

Box([fsTop,fsLeft],XPos,YPos,21,aHeigthPadrao,'Data de '+vEntSai,DFeUtil.FormatDate(DateToStr(Ide.DSaiEnt)),taCenter,True);

Substitui  por:

Box([fsTop,fsLeft],XPos,YPos,21,aHeigthPadrao,'Data de '+vEntSai,DFeUtil.FormatDate(Ide.DSaiEnt),taCenter,True);

 

- ACBrDANFeCBRavePaisagem.pas na linha 656 te a seguinte linha:

Box([fsTop,fsLeft],XPos,YPos,21,aWidthTituloBloco,'Data de '+vEntSai,DFeUtil.FormatDate(DateToStr(Ide.DSaiEnt)),taCenter,True);
Substitui por:

Box([fsTop,fsLeft],XPos,YPos,21,aWidthTituloBloco,'Data de '+vEntSai,DFeUtil.FormatDate(Ide.DSaiEnt),taCenter,True);

 

Espero que ajude, resolveu o meu problema acredito que resolva o de vocês também.

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores
  • Solution

Bom dia Juliomar,

Segue anexado os fontes.

Atualize o svn e teste! e me retorne aqui pois percebi que além da alteração mencionada havia outra quase no final dos dois arquivos

confere senão ocorreu algum problema

 

At revision: 6529

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Atualize o svn e teste! e me retorne aqui pois percebi que além da alteração mencionada havia outra quase no final dos dois arquivos

confere senão ocorreu algum problema

 

At revision: 6529

Vou atualizar e já posto o resultado

 

[EDIT]

 

Agora sim, está tudo ok.

Espero poder contribuir cada vez mais com esse projeto que tanto nos ajuda aqui na empresa.

Editado por DeehZero
Link para o comentário
Compartilhar em outros sites

Olá estou utilizando este post pois é o que mais se relaciona com o problema que encontrei aqui na minha máquina.

Fiz uma atualização hoje do acbr na minha máquina.

Utilizo o DELPHI 6 e quando fui compilar estava dando erro na ACBRDFEUTIL em um metodo Formatdate conforme postado abaixo:

class function DFeUtil.FormatDate(const AData: TDateTime): String;
var  <-- erro aqui.
{$IFDEF VER140} //delphi6
{$ELSE}
  FFormato : TFormatSettings;
{$ENDIF}
begin
  try
{$IFDEF VER140} //delphi6
    DateSeparator := '/';
    ShortDateFormat := 'dd/mm/yyyy';
{$ELSE}
    FFormato.DateSeparator   := '-';
    FFormato.ShortDateFormat := 'yyyy-mm-dd';
{$ENDIF}
    if AData = 0 then
      Result := ''
    else
      Result := DateToStr(AData);
  except
    Result := '';
  end;
end;

conforme está no codigo o var ficou antes da diretiva e isso ocasiona erro no delphi 6, pois não existe nenhuma variável sendo criada no dentro da diretiva para o Delphi 6.

a correção para o problema está postado abaixo:

class function DFeUtil.FormatDate(const AData: TDateTime): String;
{$IFDEF VER140} //delphi6
{$ELSE}
var  <-- agora o var está no lugar certo.
  FFormato : TFormatSettings;
{$ENDIF}
begin
  try
{$IFDEF VER140} //delphi6
    DateSeparator := '/';
    ShortDateFormat := 'dd/mm/yyyy';
{$ELSE}
    FFormato.DateSeparator   := '-';
    FFormato.ShortDateFormat := 'yyyy-mm-dd';
{$ENDIF}
    if AData = 0 then
      Result := ''
    else
      Result := DateToStr(AData);
  except
    Result := '';
  end;
end;
Link para o comentário
Compartilhar em outros sites

Obrigado amigo, como utilizo o Delphi

 

 

Olá estou utilizando este post pois é o que mais se relaciona com o problema que encontrei aqui na minha máquina.

Fiz uma atualização hoje do acbr na minha máquina.

Utilizo o DELPHI 6 e quando fui compilar estava dando erro na ACBRDFEUTIL em um metodo Formatdate conforme postado abaixo:

class function DFeUtil.FormatDate(const AData: TDateTime): String;
var  <-- erro aqui.
{$IFDEF VER140} //delphi6
{$ELSE}
  FFormato : TFormatSettings;
{$ENDIF}
begin
  try
{$IFDEF VER140} //delphi6
    DateSeparator := '/';
    ShortDateFormat := 'dd/mm/yyyy';
{$ELSE}
    FFormato.DateSeparator   := '-';
    FFormato.ShortDateFormat := 'yyyy-mm-dd';
{$ENDIF}
    if AData = 0 then
      Result := ''
    else
      Result := DateToStr(AData);
  except
    Result := '';
  end;
end;

conforme está no codigo o var ficou antes da diretiva e isso ocasiona erro no delphi 6, pois não existe nenhuma variável sendo criada no dentro da diretiva para o Delphi 6.

a correção para o problema está postado abaixo:

class function DFeUtil.FormatDate(const AData: TDateTime): String;
{$IFDEF VER140} //delphi6
{$ELSE}
var  <-- agora o var está no lugar certo.
  FFormato : TFormatSettings;
{$ENDIF}
begin
  try
{$IFDEF VER140} //delphi6
    DateSeparator := '/';
    ShortDateFormat := 'dd/mm/yyyy';
{$ELSE}
    FFormato.DateSeparator   := '-';
    FFormato.ShortDateFormat := 'yyyy-mm-dd';
{$ENDIF}
    if AData = 0 then
      Result := ''
    else
      Result := DateToStr(AData);
  except
    Result := '';
  end;
end;

 

Obrigado amigo, como utilizo delphi 7 por isso não tive esse problema.

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

Boa noite Juliomar,

Identifiquei mais um problema na impressão do DANFE Rave CB nos modos Retrato e Paisagem que ocasionava a não impressão da Data de Saída, abaixo a correção

de:        Box([fsTop,fsLeft],XPos,YPos,21,aWidthTituloBloco,'Data de '+vEntSai,DFeUtil.FormatDate(DateTimeToStr(Ide.DSaiEnt)),taCenter,True);

para :    Box([fsTop,fsLeft],XPos,YPos,21,aWidthTituloBloco,'Data de '+vEntSai,DFeUtil.FormatDate(DateToStr(Ide.DSaiEnt)),taCenter,True);
 

estou enviando os arquivos para que possa fazer o commit no SVN, lembrando que a correção realizada para o modo Retrato referente ao tópico  http://www.projetoacbr.com.br/forum/index.php?/topic/15876-danfe-complemento-do-produto-atrupelando-dados-adicionais/?p=102295 o qual já foi comitado, também foi realizado no modo Paisagem.

ACBrDANFeCBRavePaisagem.pas
ACBrDANFeCBRaveRetrato.pas


att

André.
 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa noite Juliomar,

Identifiquei mais um problema na impressão do DANFE Rave CB nos modos Retrato e Paisagem que ocasionava a não impressão da Data de Saída, abaixo a correção

de:        Box([fsTop,fsLeft],XPos,YPos,21,aWidthTituloBloco,'Data de '+vEntSai,DFeUtil.FormatDate(DateTimeToStr(Ide.DSaiEnt)),taCenter,True);

para :    Box([fsTop,fsLeft],XPos,YPos,21,aWidthTituloBloco,'Data de '+vEntSai,DFeUtil.FormatDate(DateToStr(Ide.DSaiEnt)),taCenter,True);
 

estou enviando os arquivos para que possa fazer o commit no SVN, lembrando que a correção realizada para o modo Retrato referente ao tópico  http://www.projetoacbr.com.br/forum/index.php?/topic/15876-danfe-complemento-do-produto-atrupelando-dados-adicionais/?p=102295 o qual já foi comitado, também foi realizado no modo Paisagem.

attachicon.gifACBrDANFeCBRavePaisagem.pas

attachicon.gifACBrDANFeCBRaveRetrato.pas

att

André.

 

Bom dia

antes de alterar você chegou a atualizar para as ultimas versões?

pois no caso não é só tratado isso pois percebi que o código já está do jeito que mostrou mas tem mais coisas

me confirma isso que subo as alterações

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

bom dia Juliomar


A alteração pertinente a Data de Saída / Entrada está correta como a minha alteração também está, já que a função DFeUtil.FormatDate é overload e recebe tanto String como TDateTime, segui o padrão utilizado no ACBr que é DateToStr em todos os outros casos de conversão de data.

Comitado pelo Colega -- Box([fsTop,fsLeft],XPos,YPos,21,aHeigthPadrao,'Data de '+vEntSai,DFeUtil.FormatDate(DateOf(ide.dSaiEnt)),taCenter,True);
Minhas alterações       -- Box([fsTop,fsLeft],XPos,YPos,21,aHeigthPadrao,'Data de '+vEntSai,DFeUtil.FormatDate(DateToStr(Ide.DSaiEnt)),taCenter,True);

Cabe lembrar, que além da linha acima, nos meus fontes em Rave Paisagem e Retrato está resolvido o problema de gerar múltiplas páginas e dados adicionais .

Faz uma semana que estou utilizando a versão que postei, sugiro comitar.

abraço

André.
 

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3583 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...