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.