Ir para conteúdo
  • Cadastre-se

danielbohnrs

Membros
  • Total de ítens

    5
  • Registro em

  • Última visita

Posts postados por danielbohnrs

  1. Em 30/03/2015 at 12:04, Felipe Benutti disse:

    Opa, muito obrigado pelo código base, man!!

     

    Me serviu muito, passei ele para JavaScript.

    Segue abaixo o que eu fiz, se alguém usar e encontrar algum bug, por favor, reporte para arrumar-mos!

     

     

    
    function round_abnt(nValor, nDecimais) {
    
    	var nRetorno = nValor;
    	spl = nValor.toString().split(".");
    	var cDecimais = spl[1];
    	var nSubsequente = nDecimais;
    
    	if (nDecimais < 1) {
    		return parseInt(nRetorno);
    	}
    	
    	if (cDecimais.length <= nDecimais) {
    		return parseFloat(nRetorno);
    	}
    	
    	//Se a casa decimal SUBSEQUENTE for DIFERENTE de 5
    	if (cDecimais.substr(nSubsequente,1) > '5' ||  cDecimais.substr(nSubsequente,1) < '5') {
    		nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA
    	}
    	//Se a casa decimal SUBSEQUENTE for IGUAL a 5
    	else if (cDecimais.substr(nSubsequente, 1) == '5') { 
    	
    		//Se a casa decimal que será CONSERVADA, for IMPAR
    		if ((cDecimais.substr(nDecimais-1, 1) % 2) != 0) {
    			nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA
    		}
    		//Se a casa decimal que será CONSERVADA, for PAR
    		else 
    		//Se APÓS a casa decimal SUBSEQUENTE, houver ALGUM algarismo MAIOR que ZERO
    		if ( cDecimais.substr(nSubsequente+1, 1) > 0 ) {
    			nRetorno = nRetorno.toFixed(2); //Math.round((nRetorno + 0.00001) * 100) / 100; //ARREDONDA
    		}
    		//Se APÓS a casa decimal SUBSEQUENTE, não houver NENHUM outro algarismo ou TODOS forem iguais a ZERO
    		else {
    			//TRUNCA (Esse é o único momento em que o "arredondamento ABNT" se diferencia do "arredondamento normal")
    			nRetorno = Truncate(nValor, nDecimais);
    		}
    	}
    	return parseFloat(nRetorno);
    }
    
    function Truncate(nValor, nDecimais) {
    
    	var nRetorno = nValor;
    	spl = nValor.toString().split(".");
    	var cDecimais = spl[1];
    
    	if (nDecimais < 1) {
    		return parseInt(nRetorno);
    	}
    
    	if (cDecimais.length <= nDecimais) {
    		return nRetorno;
    	}
    
    	//Pega a parte inteira do número e concatena com a substring sem alterar, pois é PAR e vai manter!
    	nRetorno = parseInt(nValor.toString()) + '.' + cDecimais.substr(0, nDecimais);
    	nRetorno = parseFloat(nRetorno);
    
    	return nRetorno;
    }

    :D:D

    Olá,
    estive testando o código e vi que ele apenas se comporta corretamente quando usa 2 decimais, por estar fixo:
    "nRetorno = nRetorno.toFixed(2);"
    quando deveria ser:
    "nRetorno = nRetorno.toFixed(nDecimais);"
     

  2. 2 horas atrás, Italo Jurisato Junior disse:

    Bom dia Daniel,

    Primeiro eu mudaria esse processo.

    Deixaria para gerar o XML somente no momento do seu envio.

    Quem esta gerando novamente o XML do RPS não é o método Enviar e sim o LoadFromFile, inclusive ele possui uma propriedade para desativar esse "regerar".

    Boa tarde Italo,

    usei tua dica pra gerar o xml antes de enviar ao invés de usar o LoadFromFile.
    Mas antes de ver tua resposta já tinha feito uns ajustes nos fontes pra não colocar o Ponto no ItemListaServico quando for o provedor SisPMJP usando o LoadFromFile.
    Se for útil, segue em anexo.

    pnfsNFSeW_ABRASFv2.pas

    pnfsNFSeR.pas

  3. Ainda sobre esta questão:
    No meu sistema uso em rotinas diferentes a geração do XML e o envio do lote.
    Então, na rotina do envio do lote, eu carrego o xml gerado anteriormente, usando ACBrNFSe1.NotasFiscais.LoadFromFile(arquivo), e logo após faço o envio usando
    ACBrNFSe1.Enviar(nrolote). Mas por algum motivo acontece erro no envio, após isso o XML do rps novamente volta a ficar com Ponto na lista de serviço <ItemListaServico>14.06</ItemListaServico>
    A função ACBrNFSe1.Enviar(nrolote) pode estar regerando o XML do rps sem levar em consideração as opções de configuração do provedor ?

  4. Boa tarde,
    fazendo testes de emissão de NFS-e com a Prefeitura de João Pessoa - PB, notei que existe uma diferença entre as rotinas que geram o xml dos recibos.
    O arquivo em anexo 171600000-rps.xml foi gerado automaticamente pelo componente da ACBr e o arquivo 000001716-nfse.xml eu gerei pelo método ACBrNFSe1.NotasFiscais.Items[0].GravarXML('000001716-nfse.xml');
    Neste segundo caso, o XML é gerado com a tag <ItemListaServico>14.06</ItemListaServico> com o Ponto (.), sendo que não poderia ter (no outro XML o Ponto não é colocado).
    Outra coisa que notei: no XML 000001716-nfse.xml não é gerada a tag <CodigoPais>1058</CodigoPais> no Endereço do Tomador do serviço.

    Como ainda não estou muito familiarizado em quais Units é feita a geração dos arquivos, não consigo sugerir uma solução para o problema.
    Agradeço a atenção

    000001716-nfse.xml

    171600000-rps.xml

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