Ir para conteúdo
  • Cadastre-se

Painel de líderes

Conteúdo popular

Showing content with the highest reputation on 23-09-2016 em todas as áreas

  1. Pessoal, A quem se interessar, seque abaixo função para realizar o arredondamento ABNT (Arredondamento utilizado no ECF) Escrevi na linguagem Harbour, mas, basta apenas trocar os comandos para converter para qualquer outra linguagem (Se precisarem de ajuda na conversão, é só postar aqui, que tentarei ajudar) FUNCTION Round_ABNT(nValor,nDecimais) LOCAL nRetorno:=nValor, cDecimais:=SubStr(Str(nValor),At('.',Str(nValor))+1), nSubsequente:=nDecimais+1 if nDecimais<1 RETURN Int(nRetorno) endif if Len(cDecimais) <= nDecimais RETURN nRetorno endif if SubStr(cDecimais,nSubsequente,1)>'5' .or. SubStr(cDecimais,nSubsequente,1)<'5' //Se a casa decimal SUBSEQUENTE for DIFERENTE de 5 nRetorno:=Round(nValor,nDecimais) //ARREDONDA elseif SubStr(cDecimais,nSubsequente,1)=='5' //Se a casa decimal SUBSEQUENTE for IGUAL a 5 if Mod(Val(SubStr(cDecimais,nDecimais,1)),2) <> 0 //Se a casa decimal que será CONSERVADA, for IMPAR nRetorno:=Round(nValor,nDecimais) //ARREDONDA else //se a casa decimal que será CONSERVADA, for PAR if Val(SubStr(cDecimais,nSubsequente+1,1)) > 0 //Se APÓS a casa decimal SUBSEQUENTE, houver ALGUM algarismo MAIOR que ZERO nRetorno:=Round(nValor,nDecimais) //ARREDONDA else //Se APÓS a casa decimal SUBSEQUENTE, não houver NENHUM outro algarismo ou TODOS forem iguais a ZERO nRetorno:=Truncate(nValor,nDecimais) //TRUNCA (Esse é o único momento em que o "arredondamento ABNT" se diferencia do "arredondamento normal") endif endif endif RETURN nRetorno FUNCTION Truncate(nValor,nDecimais) LOCAL nRetorno:=nValor, cDecimais:=SubStr(Str(nValor),At('.',Str(nValor))+1) if nDecimais<1 RETURN Int(nRetorno) endif if Len(cDecimais) <= nDecimais RETURN nRetorno endif nRetorno:=Val( Str(Int(nValor))+'.'+SubStr(cDecimais,1,nDecimais) ) RETURN nRetorno Nos vários testes que fiz aqui, funcionou muito bem, se encontrarem algum bug, favor, reportar aqui... Obrigado! Espero ter contribuído, Abraços, Reginaldo
    1 ponto
  2. @ArbSis, eu comentei mas acontece que minhas informações adicionais do item estão saindo com quebra de linha quando o componente acha qualquer espaço. Ele entende qualquer espaço como quebra de linha. Vou procurar algo equivalente no Delphi 7 para manter a compatibilidade.
    1 ponto
  3. Segundo a Elgin (Rubens), para gerar o Log da DLL.. basta criar o arquivo satelgin.ini, na mesma pasta da DLL GeraArqLog = 1 NomeArqLog = c:\sat\elgin2.txt
    1 ponto
  4. Boa tarde a todos, precisei no arquivo de retorno do sicoob, layout 400, ler a informação de CPF/CNPJ. O arquivo vem com os dados porém a unit não faz a leitura. Adicionei a linha Sacado.CNPJCPF := Copy(linha,343,14); Segue em anexo o arquivo modificado. É possível atualizar? ACBrBancoBancoob.pas
    1 ponto
  5. Boa tarde ACBr é para Delphi e Lazarus! somente se usar o ACBrMonitorPLUS para poder lhe atender!
    1 ponto
  6. Realizei alguns ajustes na Unit, além a ajustes no Layout adicionei a desativação do condensado a cada linha assim seguindo mesma regra aplicada para outras tags como <n> TEXTO </n> que deve-se desativar após o uso. Testes realizados na DR700 e DR800 com sucesso. ACBrNFeDANFeESCPOS.pas
    1 ponto
  7. Boa tarde Jonatas, Muito obrigado pela colaboração, fiz as devidas alterações e enviei para o repositório.
    1 ponto
  8. Ok. Baixei e compilei, na segunda vou atualizar em um PDV só para fazer os testes. Se der ok repasso para os outros alguns dias depois. Tenho apenas 4 PDVs.
    1 ponto
  9. Olá, reforçando a resposta do Italo, quando implementei a Nfse para Manaus, encontrei um cliente da cidade e solicitei o acesso para emissão em homologação, a partir dai peguei um xml já emitido em produção e informei os dados para envio em homologação. Alguns erros de validação ocorrem, mas é só se atentar nas mensagens de retorno e corrigir. Abraço.
    1 ponto
  10. Amigo, Se você tiver um xml de CTe com você utilize os métodos lercte ou nfetotxt um deles vai te gerar um arquivo .ini com as informações do CTe já no padrão do monitor.
    1 ponto
  11. Amigo, o erro que apresenta é esse. Não existe nenhuma fonte de dados e também não existe drive específico para a conexão. Da uma olhada nesse link, você verá como faz a conexão certinha via odbc com o DBExpress. http://www.devmedia.com.br/acessado-drivers-odbc-com-dbexpress/5196 Só pra tirar uma dúvida, qual baco de dados você usa? Amigo, esse DBExpress só está no delphi, ainda, por compatibilidade. Logo mais eles irão tirar. Nunca prestou, sempre com muitos problemas. A princípio eles criaram para o substituir o ADO e o BDE, mesmo assim nunca superou os antigos sempre foi uma porcaria. Sempre dependeu de dll de terceiros e com isso os problemas sempre existiram. Um exemplo disso é que de tanto baterem cabeça com os milhares de erros, resolveram comprar os componentes AnyDac que agora se chama FireDac. Já que você está usando o Delphi mais recente, te recomendo mudar para o FireDac. Esse é mais atualizado, não depende de DLL de terceiros e tem suporte a quase todos os banco de dados.
    1 ponto
  12. Boa Tarde, hoje irei realizar alguns testes utilizando a DR700 e DR800 utilizando as alterações realizadas pelo @ArbSis, com mais alguns ajustes que encontrei na impressão do SAT Problemas com a DR700 e DR800 Após os testes posto os resultados e alterações.
    1 ponto
  13. Como sou de Santa Catarina, infelizmente temos que usar PAF-ECF, e neste caso não tenho como não usar o recurso de EAD. Acabei de descobrir desbravando os fontes do ACBr Monitor Plus como configurar ela, segue o passo à passo: Entre nas configurações do ACBr Monitor Plus Vá até a sessão "RFD" Selecione a checkbox "GerarRFD" Clique em salvar Provavelmente você será redirecionado para a sessão "Monitor" (se não for, passe ao próximo item) Neste momento é necessário informar uma senha de sua preferência na opção "Proteger Configurações" Esta senha serve para criptografar a sua chave privada dentro das configurações, assim ninguém terá acesso à ela sem esta senha Clique em salvar Agora você vai ser redirecionado para a sessão secreta "Cadastros > Software House" Nessa sessão vai ter um texto informando "ATENÇÃO: Chave RSA Privada NÃO pode ser lida no arquivo "swh.ini"." Se você já tem uma chave RSA, clique no botão Importar e a selecione Se não, clique em "Gerar Chave Privada" Vai aparecer ali no campo, no lugar do texto, a chave RSA Clique novamente em Salvar para concluir a configuração Pronto, agora você já pode assinar os arquivos com o EAD Se esqueci de algo, por favor me corrijam. Obrigado.
    1 ponto
  14. 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
    1 ponto
×
×
  • 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.