Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

Boa Tarde!

Vasculhei muito o Fórum e tirei muitas dúvidas, mas ainda fiquei com algumas, se alguém puder me ajudar ficarei grato.

 

Ao gerar um RPS para o provedor (no meu caso é GINFES), este provedor já ira converter o RPS em uma NFSE(semelhante ao processo da NFE de Venda) ou irá me retornar apenas um protocolo, para futuramente pesquisar se o RPS foi Convertido?

 

Supondo que o provedor não converta o RPS em NFSE no momento do envio, o recebimento do Protocolo significa que o RPS não possui nenhum erro e está aguardando apenas ser convertido ou o provedor ainda fará algum tipo de validação?

 

Ainda supondo que o provedor não converta o RPS em NFSE no momento do envio, o que deve ser impresso e entregue ao Tomador do Serviço?

 

Qual a Diferença de entre Imprimir RPS e Imprimir DANFSe?

 

Quais os passos que vcs estão fazendo para emitir NFE? Os descritos abaixo estão corretos?

1-Gerar e enviar Lote(Receberei um Protocolo) ;

2-Depois de determinado tempo, pesquiso a situação do lote (usando o Protocolo). Se estiver tudo OK, Imprimo a NFSE.

  • Consultores
Postado

Boa tarde Mota,

 

O componente ACBrNFSe possui um comando chamado Enviar.

 

Este comando realiza as seguintes tarefas no caso do provedor Ginfes:

 

1. Gera o XML do RPS;

2. Assina;

3. Monta o Lote de RPS;

4. Assina;

5. Envia o Lote para o WebServices;

6. Obtem o retorno com o protocolo de recebimento;

7. Consulta a Situação do Lote;

8. Consulta o Lote caso a situação seja lote processado;

9. Obtem o retorno contendo a lista de NFS-e;

10. Salva o XML da NFS-e separadamente;

11. Imprimi o DANFSE.

 

Fora esse comando existe varios outros, como Consulta a Situação, Consultar Lote, Cancelar, entre outros.

 

Vide o programa exemplo, para conhece-los.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado (editado)

Bom Dia, italojjr! Obrigado pela resposta.

   Já consegui enviar alguns RPS para o provedor GINFES,mas fiquei com uma dúvida e se possível gostaria que você me ajudasse a tirá-la.

Ao enviar o Lote(no meu caso tem apenas um RPS) estou recebendo duas mensagens.

A primeira mensagem com o número do lote,data e hora do recebimento,protocolo e o provedor (ver anexo)  acho que este é o procedimento 5(descrito por você  na resposta anterior). Ressaltando que neste momento a nota já consta na base de dados do provedor, pois acessei o site e verifiquei.

A segunda mensagem retorna número do lote vazio e situação não recebido(ver anexo) acho que este é procedimento 7(descrito por você  na resposta anterior).

Então, para conseguir  imprimir os Danfse, tenho que consultar o lote, para ele me trazer a xml e eu imprimir.

 

O algorítimo do botão Enviar Lote é esse:

procedure TfNotasFiscaisServicos.tbEnviarClick(Sender: TObject);
var
  vAux,
  vNumLote,
  sProtocolo : String;
begin
  if VerifyRecord(dmf.cdsNotf) then
    begin
      vAux := dmf.cdsNotf.FieldByName('NTF_NOTAFISCAL').AsString;
      vNumLote := dmf.cdsNotf.FieldByName('NTF_NUMERO').AsString;
      try
        ACBrNFSe1.NotasFiscais.Clear;
        GerarNFSe(vAux);
        ACBrNFSe1.Enviar(vNumLote);
      except
        on e : exception do
          begin
            sProtocolo := ACBrNFSe1.NotasFiscais.Items[0].NFSe.Protocolo;
            dmf.cdsNotf.Edit;
            dmf.cdsNotf.FieldByName('NTF_PROTOCOLO').AsString  := sProtocolo;
            dmf.cdsNotf.Post;
            if dmf.cdsNotf.ApplyUpdates(0) <> 0 then
              dmf.cdsNotf.CancelUpdates;
            ACBrNFSe1.NotasFiscais.Clear;
          end;
      end;
      ACBrNFSe1.NotasFiscais.Clear;
    end;
end;

A procedure GerarNFSe ficou assim:

procedure TfNotasFiscaisServicos.GerarNFSe(NumNFSe: String);
var
  ValorISS : Double;
  vNumLote: string;
begin
with dmf,cdsNotf do
  begin
  ValorISS := 0;
  dma.lResposta := True;
  if not(FieldByName('NTF_CHAVE').AsString=EmptyStr) then
    begin
    CaixaMensagem('Nota Fiscal já possui uma chave eletrônica. '+
                 'Este processo invalidará o protocolo de autorização do fisco!!!',mtInformation);
    dma.sCampo := 'USU_IMPRIMIR_PENDENCIA';
    AbreForm(TfSenha10,fSenha10, 'USU_SAIDAAPOIO');
    end;
  if dma.lResposta then
    begin
    dma.cdsLoja.Locate('LOJ_CODIGO', FieldByName('LOJ_CODIGO').AsInteger,[]);
    ACBrNFSe1.NotasFiscais.Clear;
    vNumLote := dmf.cdsNotf.FieldByName('NTF_NUMERO').AsString; 
    with ACBrNFSe1 do
      begin
      NotasFiscais.NumeroLote := vNumLote;
      with NotasFiscais.Add.NFSe do
        begin
        IdentificacaoRps.Numero := FormatFloat('#########0', StrToInt(NumNFSe));
        Competencia := '30/'+FieldByName('NTF_MESCOMPETENCIA').AsString;
        IdentificacaoRps.Serie := 'UNICA';
        IdentificacaoRps.Tipo := trRPS;
        DataEmissao := Date;
        DataEmissaoRps := Date;
        NaturezaOperacao := noTributacaoNoMunicipio;
        RegimeEspecialTributacao := retMicroempresaMunicipal;
        if dma.cdsLoja.FieldByname('LOJ_CRT').AsString ='1' then
          OptanteSimplesNacional := snSim
        else
          OptanteSimplesNacional := snNao;
        IncentivadorCultural := snNao;
        case rgTipoAmb.ItemIndex of
          0 : Producao := snSim;
          1 : Producao := snNao;
          end;
        Status := srNormal;
        Servico.Valores.ValorServicos:= FieldByName('NTF_TOTAL').AsCurrency;
        Servico.Valores.IssRetido              := stNormal;
        Servico.Valores.DescontoCondicionado   := FieldByName('NTF_TOTALDESC').AsCurrency;
        Servico.Valores.BaseCalculo            := FieldByName('NTF_VRBASECALC').AsCurrency ;
        Servico.Valores.Aliquota               := FieldByName('NTF_PERCISS').AsCurrency/100;
        if Servico.Valores.IssRetido = stNormal then
          begin
          ValorISS := Servico.Valores.BaseCalculo * Servico.Valores.Aliquota;

          Servico.Valores.ValorIss       := RoundTo5(ValorISS,-2);
          Servico.Valores.ValorIssRetido := 0.00;
          end
        else
          begin
           ValorISS := Servico.Valores.BaseCalculo * Servico.Valores.Aliquota;
           Servico.Valores.ValorIss       := 0.00;
           Servico.Valores.ValorIssRetido := RoundTo5(ValorISS, -2);
          end;

         Servico.Valores.ValorLiquidoNfse := Servico.Valores.ValorServicos -
                                         Servico.Valores.ValorPis -
                                         Servico.Valores.ValorCofins -
                                         Servico.Valores.ValorInss -
                                         Servico.Valores.ValorIr -
                                         Servico.Valores.ValorCsll -
                                         Servico.Valores.OutrasRetencoes -
                                         Servico.Valores.ValorIssRetido -
                                         Servico.Valores.DescontoIncondicionado -
                                         Servico.Valores.DescontoCondicionado;

        Servico.ItemListaServico         := dma.cdsLoja.FieldByName('LOJ_CODSERVICOMUNICIPIO').AsString;
        Servico.CodigoTributacaoMunicipio := dma.cdsLoja.FieldByName('LOJ_CODATIVIDADE').AsString;
        Servico.Discriminacao := cdsItnf.FieldByName('PRO_DESCFISCAL').AsString;
        Servico.CodigoMunicipio := dma.cdsLoja.FieldByName('MUN_CODIGO').AsString;
        Servico.ExigibilidadeISS := exiExigivel;



        Prestador.Cnpj               := edtEmitCNPJ.Text;
        Prestador.InscricaoMunicipal := edtEmitIM.Text;

        Prestador.cUF          := StrToInt(ID_IF(FieldByName('CLI_UF').AsString));
        Tomador.IdentificacaoTomador.CpfCnpj            := LimpaMascara(FieldByName('CLI_CPF_CNPJ').AsString);
        Tomador.IdentificacaoTomador.InscricaoMunicipal := LimpaMascara(FieldByName('CLI_IM').AsString);

        Tomador.RazaoSocial := FieldByName('CLI_NOME').AsString;

        Tomador.Endereco.Endereco        := FieldByName('CLI_ENDERECO').AsString;
        Tomador.Endereco.Numero          := FieldByName('CLI_NUMERO').AsString;
        Tomador.Endereco.Complemento     := FieldByName('CLI_COMPL_ENDERECO').AsString;
        Tomador.Endereco.Bairro          := FieldByName('CLI_BAIRRO').AsString;
        Tomador.Endereco.CodigoMunicipio := FieldByName('MUN_CODCLI').AsString;
        Tomador.Endereco.UF              := FieldByName('CLI_UF').AsString;
        Tomador.Endereco.CEP             := LimpaMascara(FieldByName('CLI_CEP').AsString);
        //Provedor Equiplano é obrigatório o pais e IE
        if dma.cdsPais.Locate('PAI_CODIGO',FieldByName('PAI_CODIGO').AsInteger,[]) then
          Tomador.Endereco.xPais           := UpperCase(dma.cdsPais.FieldByName('PAI_NOME').AsString)
        else
          Tomador.Endereco.xPais           := 'BRASIL';

          Tomador.IdentificacaoTomador.InscricaoEstadual := LimpaMascara(FieldByName('CLI_IDENTIDADE').AsString);

        Tomador.Contato.Telefone := LimpaMascara(FieldByName('CLI_FONE').AsString);
        Tomador.Contato.Email    := FieldByName('CLI_EMAIL').AsString;
        end;
      end;
    end;
  end;
end;

Desde já, muito obrigado.

post-10838-0-96438900-1386259413.jpg

post-10838-0-38650700-1386259425.jpg

Editado por Mota
Postado

Acho que são esses que vão em anexo.

Não sei se ajuda, mas ao cancelar, também está  retornando uma mensagem de erro, mas está cancelando normal.

 

Obrigado.

Ger.rar

post-10838-0-35872500-1386270080.jpg

post-10838-0-09387800-1386270094.jpg

Postado

Muiiiito Obrigado!!!!

Agora o componente faz a pesquisa 2 vezes e na segunda da certíssimo...

 

Espero um dia, poder ser útil.

 

Deus lhe Pague.

Postado

Italo, a mensagem Erro desconhecido, ao cancelar ainda continua(no projeto de exemplo também acontece).

Vale lembrar que mesmo com essa mensagem chata a NFE é Cancelada. Tenha alguma ideia do que possa ser?

 

ps. Fiquei na dúvida se teria que abrir outro post ou poderia continuar nesse, caso esteja desobedecendo alguma regra, me desculpe.

Postado

5. Envia o Lote para o WebServices;

6. Obtem o retorno com o protocolo de recebimento; ( ** Ainda não virou NFSe, e recebe um Numero de Controle do Lote )

 

7. Consulta a Situação do Lote; ( ** Ainda não virou NFSe, apenas consulta a Situação, se o lote está OK, retornando 1,2,3,4 )

 

8. Consulta o Lote caso a situação seja lote processado; ( ** Pega os erros se o item 7 = 3, ou pega a NFSe se 7 = 4) 

9. Obtem o retorno contendo a lista de NFS-e;

 

O Fluxo seria este.

  • Este tópico foi criado há 4000 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...