Ir para conteúdo
  • Cadastre-se

jonatan.souza

Membros
  • Total de ítens

    83
  • Registro em

  • Última visita

Posts postados por jonatan.souza

  1. Amigo tenta esta rotina :

    if FmPrincipal.OpenDialog.Execute then

    begin

    Try

    ACBrNFe1.NotasFiscais.Clear;

    ACBrNFe1.NotasFiscais.LoadFromFile(FmPrincipal.OpenDialog.FileName);

    ACBrNFe1.Consultar;

    except

    MensagemPerso(ACBrNFe1.WebServices.Consulta.XMotivo,exclamacao);

    end;

    ShowMessage(ACBrNFe1.WebServices.Consulta.Protocolo);

    end;

  2. Di nada meu amigo, precisando estamos aí.

    jonathan-augusto-muito obrigado, funcionou que uma beleza.... ficou perfeito.

    mksbraga-obrigado pelo retorno, mas para evitar ter que criar outro campo no banco utilizei a função do jonathan que funcionou muito bem.

    Valeu, abraço

    Rigotti

  3. Amigo eu criei esta função, talvez te ajude :

    Function ExpirarCertificadoDigital( numero_certificado : String) : Boolean;

    var i : Integer;

    CertStore : IStore3;

    CertStoreMem : IStore3;

    PrivateKey : IPrivateKey;

    Certs : ICertificates2;

    Cert : ICertificate2;

    numce : String;

    dias : Real;

    acho : Boolean;

    begin

    Result := True;

    Frm_DM.QR_Config.Open;

    numce := numero_certificado;

    CertStoreMem := Nil;

    If CertStoreMem = NIL then begin

    CertStore := CoStore.Create;

    CertStore.Open(CAPICOM_CURRENT_USER_STORE, 'My', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

    CertStoreMem := CoStore.Create;

    CertStoreMem.Open(CAPICOM_MEMORY_STORE, 'Memoria', CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

    Certs := CertStore.Certificates as ICertificates2;

    acho := false;

    For I := 1 to Certs.Count do Begin

    Cert := IInterface(Certs.Item) as ICertificate2;

    if numce = Cert.SerialNumber then begin

    dias := Cert.ValidToDate - Date;

    acho := True;

    Break; end;

    end;

    if not acho then

    Result := True

    else

    if dias <= 0 then begin

    Result := False;

    MensagemPerso(' Certificado Dígital Exprirado em '+FormatDateTime('dd/mm/yyyy',Cert.ValidToDate),erro);

    end

    else

    if dias <= 15 then begin

    Result := True;

    MensagemPerso(' ***** ATENÇÃO ***** '#13'Falta '+FloatToStr(dias)+' dia(s) para expirar o Certificado Dígital !'#13'Data para Expirar : '+FormatDateTime('dd/mm/yyyy',Cert.ValidToDate),exclamacao);

    end

    else

    Result := True;

    end;

    end;

  4. Eu já peguei este problema com o certificado ca caixa.

    E o seguinte tem um gerenciador da caixa, abrir ele exporta o certificado para alguma pasta, depois desistale este gerenciador caixa e importa o certificado pelo internet explorer.

    Ai não vai mais pedir senha.

  5. Boa noite amigos,

    Tem muita gente que perder o retorno da SEFAZ e fica meio perdido, pois o DANFE só fica impresso "NÃO AUTORIZADO"ou algo assim.

    Primeira coisa alterar a Unit ACBrNFeWebServices

    na function TNFeRecepcao.Executar: Boolean; faça :

    --------------------------------------------------------------------

    Cria a linha em negrito antes do comando aMsg := , conforme abaixo :

    if not DirectoryExists(ExtractFilePath(Application.ExeName) +'\XML\') then

    ForceDirectories(ExtractFilePath(Application.ExeName) +'\XML\');

    TACBrNFe( FACBrNF

    e ).NotasFiscais.Items[0].SaveToFile( ExtractFilePath(Application.ExeName) +'\XML\'+ TACBrNFe( FACBrNFe ).NotasFiscais.Items[0].NFe.infNFe.ID+'-nfe.xml' , True);

    end;;

    aMsg := //'Versão Leiaute : '+NFeRetorno.Versao+LineBreak+

    'Ambiente : '+TpAmbToStr(NFeRetorno.TpAmb)+LineBreak+

    'Versão Aplicativo : '+NFeRetorno.verAplic+LineBreak+

    'Status Código : '+IntToStr(NFeRetorno.cStat)+LineBreak+

    'Status Descrição : '+NFeRetorno.xMotivo+LineBreak+

    'UF : '+CodigoParaUF(NFeRetorno.cUF)+LineBreak+

    'Recibo : '+NFeRetorno.infRec.nRec+LineBreak+

    'Recebimento : '+NotaUtil.SeSenao(NFeRetorno.InfRec.dhRecbto = 0, '', DateTimeToStr(NFeRetorno.InfRec.dhRecbto))+LineBreak+

    'Tempo Médio : '+IntToStr(NFeRetorno.InfRec.TMed)+LineBreak;

    --------------------------------------------------------------------

    Beleza, agora toda vez que vc enviar um NFe ele vai gravar o XML completo, MAIS sem o número do protocolo, agora vamos a segunda parte :

    Criar esta função,

    function Retorno( chave, data_emis : String ) : Boolean; // Chave de acesso e a data de emissão da nota

    var

    TXM, NXM: TStringList;

    begin

    Result := False;

    TXM := TStringList.Create; { Para carregar o xml gravado, de acordo com os comandos criado acima }

    NXM := TStringList.Create; { Vai ser o novo XML com o protocolo }

    If FileExists(ExtractFilePath(Application.ExeName)+'\XML\NFe'+TrazNumero(chave)+'-nfe.xml') then { se exitir o xml no diretorio }

    TXM.LoadFromFile(ExtractFilePath(Application.ExeName)+'\XML\NFe'+TrazNumero(chave)+'-nfe.xml')

    else begin

    { coloque a sua mensagem para o usuario }

    exit; end;

    Acbr.WebServices.Consulta.NFeChave := '';

    Acbr.WebServices.Consulta.NFeChave := chave;

    if Acbr.WebServices.Consulta.Executar then begin

    Result := True;

    NXM.Add( TXM.Text + ''+IfThen( Acbr.WebServices.Consulta.TpAmb = taProducao,'1','2')+''+Acbr.WebServices.Consulta.verAplic+''+

    ''+TrazNumero(chave)+''+

    FormataDataNFERecibo(DateTimeToStr(Acbr.WebServices.Consulta.DhRecbto))+

    ''+Acbr.WebServices.Consulta.Protocolo+''+

    ''+Acbr.WebServices.Consulta.protNFe.digVal+''+

    '100'+

    Acbr.WebServices.Consulta.protNFe.xMotivo+'');

    NXM.SaveToFile(Acbr.Configuracoes.Arquivos.PathNFe+ '\' + FormatDateTime('YYYY', StrToDate( data_emis )) + FormatDateTime('MM', StrToDate( data_emis )) + '\'+ TrazNumero(chave)+'-nfe.xml'); { salvando o novo XML com protocolo na pasta definida em Acbr.Configuracoes.Arquivos.PathNFe }

    GravarRetornoNoSeuBanco( TrazNumero(chave), Acbr.WebServices.Consulta.Protocolo, codnota ); { Isto e do meu sistema, mais e uma ideia }

    MensagemPerso('Retorno Localizado na SEFAZ'#13'Protocolo : '+Acbr.WebServices.Consulta.Protocolo,informacao);

    NXM.Destroy;

    TXM.Destroy;

    end

    else begin

    MensagemPerso(Acbr.WebServices.Consulta.XMotivo,exclamacao);

    if Acbr.WebServices.Consulta.cStat <> 100 then {se cStat for diferente de 100, e porque foi rejeitada por algum erro }

    GravaErroRetornoNfe ( codnota ); { NF rejeitada na SEFAZ, esta rotina também e usada no meu sistema }

    Result := False;

    NXM.Destroy;

    TXM.Destroy;

    end;

    end;

    // FUNÇÕES UTILIZADA NA ROTINAS

    1 -

    Function FormataDataNFERecibo( data : String) : String;

    begin

    Result := copy(data,7,4)+'-'+copy(data,4,2)+'-'+copy(data,1,2);

    Result := Result + 'T'+copy(data,12,100);

    end;

    Function TrazNumero( AValue: String) : String;

    var

    i : Integer ;

    begin

    Result := '' ;

    for i := 1 to length(AValue) do

    if (AValue in ['0'..'9']) then

    Result := Result + AValue;

    end;

  6. Amigos estou com um problema um pouco chato na impressão do DANFE, relacionado a logomarca. Hora a logomarca aparece no rave e outra oura não aparece. O cmd utilizado no carregamento do mesmo segue abaixo. Caso alguém já passou pelo o mesmo problema por favor poste o seu relato.

    ...

    AcbrNFEDanfeRave1.logo := extractFileDir(Paramstr(0)) + '\logo.bmp';

    ...

    Qual modelo de Rave vc esta utilizando ?

  7. Amigo, eu modifiquei a AcbrNfeWebServices.pas.

    eu grava o protocolo de envio no banco de dados, depoi eu pego este protocolo e passa ele no Alote

    ficando o comando abaixo

    if copy(ALote,1,2) = '9-' then begin

    Self.Retorno.Recibo := copy(ALote,3,100);

    if not(Self.Retorno.Executar) then

    begin

    TACBrNFe( FACBrNFe ).SetStatus( stNFeErro );

    if Assigned(TACBrNFe( FACBrNFe ).OnGerarLog) then

    TACBrNFe( FACBrNFe ).OnGerarLog(Self.Retorno.Msg);

    GravaErroEnviarNfe ( Self.Retorno.Recibo ); // Grava retorno de erro

    raise Exception.Create(Self.Retorno.Msg);

    end;

    Result := true;

    end

    else begin

    if not(Self.StatusServico.Executar) then

    begin

    TACBrNFe( FACBrNFe ).SetStatus( stNFeErro );

    if Assigned(TACBrNFe( FACBrNFe ).OnGerarLog) then

    TACBrNFe( FACBrNFe ).OnGerarLog(Self.StatusServico.Msg);

    MessageDlg('O Serviço deve estar fora do ar, favor verificar com a SEFAZ do seu estado !',mtWarning,[mbok],0);

    Exit;

    end;

    Self.Enviar.FLote := ALote;

    if not(Self.Enviar.Executar) then

    begin

    TACBrNFe( FACBrNFe ).SetStatus( stNFeErro );

    if Assigned(TACBrNFe( FACBrNFe ).OnGerarLog) then

    TACBrNFe( FACBrNFe ).OnGerarLog(Self.Enviar.Msg);

    GravaErroEnviarNfe ( Self.Retorno.Recibo );

    raise Exception.Create(Self.Enviar.Msg);

    end;

    if Self.Enviar.Recibo <> '' then

    GravaReciboDbase(Self.Enviar.Recibo); // Grava o protocolo de envio.

    TACBrNFe( FACBrNFe ).NotasFiscais.Items[0].SaveToFile( ExtractFilePath(Application.ExeName) +'\XML\'+ TACBrNFe( FACBrNFe ).NotasFiscais.Items[0].NFe.infNFe.ID+'-nfe.xml' , True);

    Self.Retorno.Recibo := Self.Enviar.Recibo;

    if not(Self.Retorno.Executar) then

    begin

    TACBrNFe( FACBrNFe ).SetStatus( stNFeErro );

    if Assigned(TACBrNFe( FACBrNFe ).OnGerarLog) then

    TACBrNFe( FACBrNFe ).OnGerarLog(Self.Retorno.Msg);

    GravaErroEnviarNfe ( Self.Retorno.Recibo );

    raise Exception.Create(Self.Retorno.Msg);

    end;

    Result := true;

    end;

    Quando o sistema grava o protocolo de envio e não recebe o protocolo de autorização eu chamo a função da seguinte maneira.

    Begin

    rec := '9-'+protocolo;

    Acbr.NotasFiscais.Clear;

    Acbr.NotasFiscais.LoadFromFile( ExtractFilePath(Application.ExeName)+'\XML\NFe'+TrazNumero(chave)+'-nfe.xml');

    Acbr.Enviar(rec,false);

    if SSGNFe.NotasFiscais.Items[0].Confirmada then begin

    GravarRetorno( Acbr.Configuracoes.Arquivos.PathNFe, TrazNumero(Acbr.NotasFiscais.Items[0].NFe.infNFe.ID),Acbr.WebServices.Retorno.Protocolo, codnota);

    end;

  8. no projeto ACBr existe a pasta NFe e NF2

    a NF1 pode ser emitida até que data?

    ja começo instalando e programando a NF2?

    Vc deve começar com a 2.0, pois a 1.0 vai ser valida ate 31/12/2010

×
×
  • 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.