Ir para conteúdo
  • Cadastre-se

Anthero Vieria Neto

Membros
  • Total de ítens

    17
  • Registro em

  • Última visita

Contact Methods

  • Website URL
    www.windsoft.com.br

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

Anthero Vieria Neto's Achievements

Apprentice

Apprentice (3/14)

  • First Post
  • Collaborator Rare
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

2

Reputação

  1. Aqui funcionou corretamente... Uma dica, quando você passa a chave para a função "Consultar" ela faz o processo de limpar os manifestos. Seguindo o raciocínio do Ítalo, realizei uma alteração simples no nosso processo de consulta, ainda carrego o XML (não alterei praticamente nada no processo), só que verifico se existe protocolo para o manifesto, quando sim passo a chave. Adicionando somente 2 linhas de código no processo e resolvendo o problema.
  2. Boa tarde, estou com muita dificuldade de consumir o webservice do GNRE, já criei um outro tópico sobre problemas parecidos, e ninguém me atendeu. Todo Lote que eu envio/consulto me retorna "Lote processado com pendêcias" Segue em anexo o retorno (ACBrGNRE.WebServices.Retorno.RetWS) Estou tentando enviar um Lote para o servidor do Pernambuco. Quando pego o XML salvo e envio atravez do portal o lote é processado com sucesso, não retornando nenhum erro. Imaginei que seria a configuração do Estado do Webservice, porém passo para ele o mesmo valor que do campo "c01_UfFavorecida", mas debugando verifiquei que não era o caso. Gostaria de uma ajuda, anexei o Erro (RetWS) e o XML do Lote do GNRE que estou tentando enviar (Resgatei o XML do ACBrGNRE.WebServices.Retorno.RetornoWS) . RetWS.txt gnre_Assinado.xml
  3. Bom dia, venho aqui para tirar dúvidas sobre como manipular os dados ao Enviar o XML do Lote GNRE. Da maneira que eu faço hoje, no meu ponto de vista, está gerando exceções onde deveriam ser apenas mensagens. Vou mostrar usando o código do Exemplo: ACBrGNRE1.Guias.Clear; GerarGNRE; ACBrGNRE1.Enviar; MemoResp.Lines.Text := UTF8Encode(ACBrGNRE1.WebServices.Retorno.RetWS); memoRespWS.Lines.Text := UTF8Encode(ACBrGNRE1.WebServices.Retorno.RetWS); LoadXML(MemoResp, WBResposta); O método Enviar (unit ACBrGNRE2): function TACBrGNRE.Enviar(Imprimir: Boolean): Boolean; var i: Integer; begin Guias.GerarGNRE; if Guias.Count <= 0 then GerarException(ACBrStr('ERRO: Nenhuma GNRE adicionada ao Lote')); if Guias.Count > 50 then GerarException(ACBrStr('ERRO: Conjunto de GNRE transmitidas (máximo de 50 GNRE)' + ' excedido. Quantidade atual: ' + IntToStr(Guias.Count))); Result := WebServices.Envia; if FGNREGuia <> nil then begin for i := 0 to Guias.Count - 1 do begin if Guias.Items[i].Confirmada and Imprimir then Guias.Items[i].Imprimir; end; end; end; Até então está tudo perfeito, o problema começa aqui: Método WebServices.Envia (unit ACBrGNREWebServices); function TWebServices.Envia: Boolean; begin if not FEnviar.Executar then FEnviar.GerarException( FEnviar.Msg ); FRetorno.numeroRecibo := FEnviar.numero; if not FRetorno.Executar then FRetorno.GerarException( FRetorno.Msg ); Result := True; end; if not FRetorno.Executar then FRetorno.GerarException( FRetorno.Msg ); Acredito que deveria gerar exceção se realmente ocorressem erros... FRetorno.Executar (unit ACBrGNREWebServices): function TGNRERetRecepcao.Executar: Boolean; var IntervaloTentativas, Tentativas: Integer; begin Result := False; TACBrGNRE(FPDFeOwner).SetStatus(stGNRERetRecepcao); try Sleep(FPConfiguracoesGNRE.WebServices.AguardarConsultaRet); Tentativas := 0; IntervaloTentativas := max(FPConfiguracoesGNRE.WebServices.IntervaloTentativas, 1000); while (inherited Executar) and (Tentativas < FPConfiguracoesGNRE.WebServices.Tentativas) do begin Inc(Tentativas); sleep(IntervaloTentativas); end; finally TACBrGNRE(FPDFeOwner).SetStatus(stGNREIdle); end; if FGNRERetorno.codigo = 402 then // Lote processado ? Result := TratarRespostaFinal; end; Ele gera exceção sempre que o código for diferente de 402, mas temos que lembrar que essa função é responsável por enviar o Lote, e já consulta o mesmo. Caso dê erros no envio creio que deveria ser gerado exceções (como ele já faz), mas na consulta do retorno apenas se existir realmente um erro, como no caso do código de retorno 404, pois seria necessário corrigir e enviar o lote novamente nesse caso. Exemplo: if FGNRERetorno.codigo <> 404 then // Sem erros no lote? Result := TratarRespostaFinal; Caso for eu quem esteja fazendo errado, peço que me mostrem como fazer, muito obrigado. Segue em anexo os status e mensagens retornadas na consulta.
  4. Exatamente, está errado! quando você colocar 4,555 o resultado tem que ser 4,56, mas quando colocar 4,855 o resultado tem que ser 4,85.
  5. Arquivos enviados incorretos... reenviando-os Teste ACBr Util.zip ACBrUtil.pas
  6. Foi um erro de digitação, mo eu sistema está com 2 digitos, Segue Programa teste e .pas alterado. Verifique os valores do exempo, 4,855 e 4,555. Quando for par deve ficar 4,X5 Quando for ímpar: 4,X6. Obrigado pela atenção ACBrUtil.pas Teste ACBr Util.zip
  7. Eu executei justamente com esse emulador, e claramente a regra no calculo dele está errado, pois ele verifica sempre o número 5, nos testes da regra do par ou ímpar. Refazendo os testes usando os números do exemplo da regra: 4,550 e 4,850: RoundABNT( 4.855, 3 ); => Resultado: 4,86 Regra ABNT: 4,85 RoundABNT( 4.555, 3 ); => Resultado: 4,86 Regra ABNT: 4,86 o Emulador da MP4200-TH-FI exibe os resultados coerentes com a regra, porém o RoundABNT não. Amanhã cedo irei editar, anexando imagens com testes informados e a unit com as alterações.
  8. Nunca mandei nada para correção, então não sei como fazer isso, gostaria que se tiver uma forma melhor de fazer que me notifiquem. Na função do RoundABNT, na verificação das regras 2.3 e 2.4 ( regra do par ou ímpar), era observado o valor errado para verificar se o mesmo era par ou ímpar. Regras: function RoundABNT(const AValue: Double; const Digits: SmallInt): Double; var Pow, PowValue, RestPart, FracValue : Extended; IntCalc, FracCalc, LastNumber, IntValue : Int64; Begin Pow := intpower(10, abs(Digits) ); PowValue := AValue / 10 ; IntValue := trunc(PowValue); FracValue := frac(PowValue); PowValue := SimpleRoundTo( FracValue * 10 * Pow, -9) ; // SimpleRoundTo elimina dizimas ; IntCalc := trunc( PowValue ); FracCalc := trunc( frac( PowValue ) * 100); if (FracCalc > 50) then Inc( IntCalc ) else if (FracCalc = 50) then begin LastNumber := trunc( frac( IntCalc / 100) * 10); if odd(LastNumber) then Inc( IntCalc ) else begin RestPart := frac( PowValue * 10 ) ; if RestPart > 0 then Inc( IntCalc ); end ; end ; Result := ((IntValue*10) + (IntCalc / Pow)); end; Alterada a linha: Na variável LastNumber era salvo o ultimo número a ser considerado e na verdade era pra ser salvo o ultimo número anterior a ele. A regra realmente é confusa, mas (infelizmente) existe e temos que segui-la.
  9. [2016-01-27 16:31:40.504]:Erro no Campo 'vCFe' : Campo vCFe maior que a soma dos valores do MP. [2016-01-27 16:31:40.515]:ERRO NA EMISSAO: 1408: Rejeicao: Valor total do CF-e-SAT maior que o somatorio dos valores de Meio de Pagamento empregados em seu pagamento. Boa tarde. passei o dia todo pesquisando e não encontrei nada, e geralmente quando isso acontece é "cagada" minha, no sistema que estou trabalhando a quantidade de casas decimais adotado é 3, e mesmo eu calculando o valor total do produto : Prod.qCom := Item.nQuantid; Prod.vUnCom := Item.nValorUnit; nTotalItem := WSRound(Item.nQuantid * Item.nValorUnit , 2); Prod.vProd := nTotalItem; WSRound -> Função de arredondamento comum. O valor do total do produto não é enviado ao equipamento (emulador) SAT, aparentemente é calculado pelo próprio equipamento (emulador), segundo a minha interpretação das normas técnicas entendi que esse cálculo é realmente realizado no equipamento, ignorando o valor que eu informar. Com isso ao informar ao usuário que o valor é X, ele pode ser diferente: PRODUTO: ITEM 1 VALOR UN: 0,273 ( 0,27 SAT ) QUANT: 1225,0 TOTAL: 334,42 TOTAL SAT 330,75 Nesse exemplo obtive uma diferença de 3,67 reais. Minha dúvida: Não existe um local onde informo a quantidade de casas que estou trabalhando e/ou uma forma de enviar o valor total do Produto além do unitário e da quantidade para o equipamento (emulador) para que fique igual tanto no sistema quanto no cupom fiscal? Se a resposta para a pergunta acima for não, alguém pode me informar algo que eu possa estar tentando para sanar esse problema? Agradeço desde já, muito obrigado.
  10. Eu executei esse tutorial (http://isaquesp.blogspot.com.br/2011/09/varias-versoes-do-delphi-instaladas-sem.html) Mas não funcionou pra mim. O acredito que o meu problema não é exatamente esse.
  11. Eu tenho sim o Delphi 7 e o xe7 Executei o tutorial informado, mas não resolve. O ACBr instala corretamente, mas ao fechar o Delphi xe7 e abrir novamente, ele não é carregado de forma correta, pois consigo ver na paleta os componentes, mas não consigo inserir nenhum no form, aparece aquele erro de não encontrar o bpl.
  12. Boa tarde, eu estou com um problema meio que "estranho". Eu tenho o ACBr instalado e funcional no delphi 7 Estou realizando novos projetos no delphi xe7, porém toda vez que vou abri-lo tenho que re-instalar o ACBr nele (xe7) pois após o mesmo ser fechado o ACBr não é mais carregado, embora os bpls dele aparecem nos componentes instalados, consigo ver os componentes, mas ao tentar adicionar ele dá erro, e ao iniciar o programa não aparece lá o "Projeto ACBr" nos componentes inicializados com ele Isso é meio frustrante pois todos os dias tenho q instalar o ACBr no Delphi xe7 par usar o mesmo.
  13. Jugger72 Para carregar o XML no ACBrSAT.CFeCanc você deve usar: ACBrSAT.CFeCanc.SetXMLString( StringXML ); ACBrSAT.CFeCanc.Gerar( True ); Quando você carrega a string do XML sem ser pelo LoadFromFile ele só armazena, mas não lê e distribui para as suas propriedades o conteúdo do XML, para isso você deve usar o Gerar. Sei que faz tempo que você mandou, mas sou novo aqui e vi só hoje esse tópico. Valeu, falou...
×
×
  • 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...