Ir para conteúdo
  • Cadastre-se

Waldir Paim

Moderadores
  • Total de ítens

    610
  • Registro em

  • Última visita

  • Days Won

    4

Tudo que Waldir Paim postou

  1. Segue melhorias no arquivo em anexo. ACBrEFDBloco_0.pas ACBrSpedFiscal.pas
  2. Segue unit com implementação do recurso para localizar no registro0400 ACBrEPCBloco_0.pas ACBrEPCBloco_M.pas
  3. Fiz as modificações nas units em anexo e a emissão das etiquetas voltam a funcionar normalmente. ACBrETQZplII.pas ACBrETQEpl2.pas
  4. Temos um sistema de envio de SMS feito java, que usa o celular android e o próprio chip do cliente para envio. Ele usa nossa api para cadastrar as mensagens e o celular via https baixa e dispara. Se houve algum intersere podemos fazer a integração com ERP ou algum outro sistema comercial. Segue link do app no google player https://play.google.com/store/apps/details?id=br.com.duallsistemas.smsmkt Para criar uma conta você pode usar esse link: https://duallsistemas.com.br/api/conta/nova.html Waldir Paim.
  5. Comigo aconteceu algo parecido e consegui simular o erro passando uma alíquota com decimais. Nessa função do ACBrUtil ela não consegue entender um numero com decimais. function IsNumber(const Value: Variant): Boolean; var valResult: Extended; valCode: Integer; begin Val(Value, valResult, valCode); if valCode = 0 then Result := True else Result := False; end ; Fiz uma alteração nela Mudei para: function IsNumber(const Value: Variant): Boolean; var dc : char; V : Extended; begin dc := DecimalSeparator; try DecimalSeparator := ','; try Result := TryStrToFloat( Value, V); except DecimalSeparator := '.'; Result := TryStrToFloat( Value, V); end; finally DecimalSeparator := dc; end; end; Com isso ela entende um numero com decimais e não gera o erro. Espero que ajude a entender o que acontece.
  6. No fonte anexo fiz correção na função EnviarDadosWebService e inclusão da possibilidade de mudar o timeout no comando. Segue anexo. ACBrNFeWebServices.pas
  7. Ok, vi que você adicionou o DANFE Simplificado e já atualizei a correção. Aproveitei e fiz umas melhorias no estrutura do DANFE. ACBrNFeDANFeEventoRL.pas ACBrNFeDANFeRL.pas ACBrNFeDANFeRLClass.pas ACBrNFeDANFeRLPaisagem.pas ACBrNFeDANFeRLRetrato.pas
  8. Juliomar, O problema ocorreu nesse Commit 6628, Alterações visando a versão 3.10 da NF-e, colaboração de Rodrigo F. Ricardo. Faltou ser enviado pelo Italo o .dfm com os campos adicionados. Até mandei para ele uma correção nesse link https://www.dropbox.com/sh/aphfx7yxoeh2e5a/ktfihhL8yh mas acho que ele ainda não teve tempo de atualizar. Waldir.
  9. Veja se assim ajuda. var intFor : integer; booTributaQtde : boolean; begin if Assigned(RegC405.RegistroC481) then begin for intFor := 0 to RegC405.RegistroC481.Count - 1 do begin with RegC405.RegistroC481.Items[intFor] do begin booTributaQtde := Integer(CST_PIS)=3; if not booTributaQtde then booTributaQtde := (ALIQ_PIS_QUANT > 0.0) or (QUANT_BC_PIS > 0.0); Add( LFill('C481') + LFill(CstPisToStr(CST_PIS)) + LFill(VL_ITEM,0,2) + DFill(VL_BC_PIS, 2, booTributaQtde) + DFill(ALIQ_PIS, 4, booTributaQtde) + DFill(QUANT_BC_PIS, 3, not booTributaQtde) + DFill(ALIQ_PIS_QUANT, 4, not booTributaQtde) + LFill(VL_PIS,0,2) + LFill(COD_ITEM) + LFill(COD_CTA) ) ; RegistroC990.QTD_LIN_C := RegistroC990.QTD_LIN_C + 1; end; end; // Variavél para armazenar a quantidade de registro do tipo. FRegistroC481Count := FRegistroC481Count + RegC405.RegistroC481.Count; end; end;
  10. Então, como tinha dito que iria ajuntar informações sobre o problema, deixa eu vasculhar aqui os nossos arquivos do fórum sobre o assunto... Dessa forma resolve a 1 e 2? Na situação 04! Me diz em que CST ser preenchida com valor vazio.; 4) Em casos onde é preenchido o campo ALIQ_PIS_QUANT, o campo ALIQ_PIS deve ser vazio; Podemos melhorar o código existente. Uso esse tipo de registro e dessa forma que fiz esta atendendo bem. Waldir.
  11. Fiz assim: var intFor : integer; booTributaQtde : boolean; begin if Assigned(RegC405.RegistroC481) then begin for intFor := 0 to RegC405.RegistroC481.Count - 1 do begin with RegC405.RegistroC481.Items[intFor] do begin booTributaQtde := Integer(CST_PIS)=3; Add( LFill('C481') + LFill(CstPisToStr(CST_PIS)) + LFill(VL_ITEM,0,2) + DFill(VL_BC_PIS, 2, booTributaQtde) + DFill(ALIQ_PIS, 4, booTributaQtde) + DFill(QUANT_BC_PIS, 3, not booTributaQtde) + DFill(ALIQ_PIS_QUANT, 4, not booTributaQtde) + LFill(VL_PIS,0,2) + LFill(COD_ITEM) + LFill(COD_CTA) ) ; RegistroC990.QTD_LIN_C := RegistroC990.QTD_LIN_C + 1; end; end; // Variavél para armazenar a quantidade de registro do tipo. FRegistroC481Count := FRegistroC481Count + RegC405.RegistroC481.Count; end; Veja se ajudaria.
  12. Aproveitando o tópico vou adicionar duas unit com adição de busca. Segue anexo. ACBrEFDBloco_0.pas ACBrEFDBloco_H.pas ACBrEFDBloco_0.pas ACBrEFDBloco_H.pas
  13. Sim Daniel, num período mais longo de emissão do CAT52 normalmente 30 dias, a tela fica sem atualização, dessa forma podemos mostrar o dia que esta gerando. Waldir.
  14. Oi Daniel, Nesse caso poderia inserir um exception (traduzindo o erro apresentado); Não, o loop ocorre nas classes filhas; Ok, o problema ocorre por que a função EmLinha não funciona corretamente, com o ECF desligado e chamado a função em linha ela retorna True, teria que retornar False porem nesse caso poderíamos pedir um status ao ECF que se ligado responde no caso da bematech muito rápido; A sugestão de mudar para mudar de 500 a 1000 milissegundos poderia amenizar um pouco. Waldir.
  15. Waldir Paim

    ACBrECF alterações

    Fiz uma alteração no metodo de Status do ECF da classe da bematech. Quando o ECF esta desligado e ACBr faz uma solicitação de status na classe da bematech era passado um time-out de 4 segundos, em caso de erro ela entrava em mais duas tentativas com os mesmos 4 segundo que nesse caso somados seriam 12 segundos. Um exemplo: No meio da venda o ECF é desligado e ligado em seguida o tempo minimo de retorno seria de 12 segundos ou mais. Na alteração proposta esse tempo cai para no máximo 400 ou 500 milissegundos. Vou tentar fazer nas outras classes, por isso alterei a ACBrECF.pas, ACBrECFClass.pas e ACBrECFBematech.pas. Dessa forma uso assim: Antes de vender um item eu chamo o função criada "Status" que o retorno é muito mais rápido do ECF ligado do que esperar um retorno de VendeItem 12s. em caso de desligado no minimo. Fiz uma outra alteração na classe da Bematech que foi incluir o evento OnexecuteCat52, esse tambem podemos incluir nas outras classes das outras ECFs; Uma outra alteração na unit da NaoFiscal. Segue anexo as units. Waldir Paim. ACBrECF.pas ACBrECFClass.pas ACBrECFBematech.pas ACBrECFNaoFiscal.pas
  16. Experimente esse ACBrDevice.pas. Segue em anexo. ACBrDevice.pas
  17. Experimente mudar na unit ACBrDevice.pas de: function TACBrDevice.IsTXTFilePort: Boolean; begin Result := UpperCase(RightStr(fsPorta,4)) = '.TXT' ; end; para: function TACBrDevice.IsTXTFilePort: Boolean; begin Result := (UpperCase(RightStr(fsPorta,4)) = '.TXT') or (pos('LPT', UpperCase(fsPorta)) > 0 ); end;
  18. Me desculpe EMBarbosa, o registro C485 foi informado sim o que esta errado é o código do C481 que gera a alíquota do PIS vazia em vez de 0,00 como foi gerado no C485, para enteder melhor gera ai usando CST 04 e 06 que usam alíquotas zeradas vai ver que no C485 ele gera certo e no C481 gera em branco ou vazia causando erro na validação do PVA.
  19. Fiz de acordo com o C485 que deve ser igual ao C481 e estava gerando alíquota do pis vazia e assim gera erro de validação. A alteração foi no meu código, no ACBr os coordenadores devem atualizar em breve.
  20. Realmente para funcionar corretamente apliquei essa alteração na unit ACBrEPCBloco_C_Class; O Registro C485 esta certo, apenas o C481 precisa ser ajusta conforme o C485. procedure TBloco_C.WriteRegistroC481(RegC405: TRegistroC405); var intFor : integer; strCST_PIS : string; begin if Assigned(RegC405.RegistroC481) then begin for intFor := 0 to RegC405.RegistroC481.Count - 1 do begin with RegC405.RegistroC481.Items[intFor] do begin case CST_PIS of stpisValorAliquotaNormal : strCST_PIS := '01'; stpisValorAliquotaDiferenciada : strCST_PIS := '02'; stpisQtdeAliquotaUnidade : strCST_PIS := '03'; stpisMonofaticaAliquotaZero : strCST_PIS := '04'; stpisValorAliquotaPorST : strCST_PIS := '05'; stpisAliquotaZero : strCST_PIS := '06'; stpisIsentaContribuicao : strCST_PIS := '07'; stpisSemIncidenciaContribuicao : strCST_PIS := '08'; stpisSuspensaoContribuicao : strCST_PIS := '09'; stpisOutrasOperacoesSaida : strCST_PIS := '49'; stpisOperCredExcRecTribMercInt : strCST_PIS := '50'; stpisOperCredExcRecNaoTribMercInt : strCST_PIS := '51'; stpisOperCredExcRecExportacao : strCST_PIS := '52'; stpisOperCredRecTribNaoTribMercInt : strCST_PIS := '53'; stpisOperCredRecTribMercIntEExportacao : strCST_PIS := '54'; stpisOperCredRecNaoTribMercIntEExportacao : strCST_PIS := '55'; stpisOperCredRecTribENaoTribMercIntEExportacao : strCST_PIS := '56'; stpisCredPresAquiExcRecTribMercInt : strCST_PIS := '60'; stpisCredPresAquiExcRecNaoTribMercInt : strCST_PIS := '61'; stpisCredPresAquiExcExcRecExportacao : strCST_PIS := '62'; stpisCredPresAquiRecTribNaoTribMercInt : strCST_PIS := '63'; stpisCredPresAquiRecTribMercIntEExportacao : strCST_PIS := '64'; stpisCredPresAquiRecNaoTribMercIntEExportacao : strCST_PIS := '65'; stpisCredPresAquiRecTribENaoTribMercIntEExportacao : strCST_PIS := '66'; stpisOutrasOperacoes_CredPresumido : strCST_PIS := '67'; stpisOperAquiSemDirCredito : strCST_PIS := '70'; stpisOperAquiComIsensao : strCST_PIS := '71'; stpisOperAquiComSuspensao : strCST_PIS := '72'; stpisOperAquiAliquotaZero : strCST_PIS := '73'; stpisOperAqui_SemIncidenciaContribuicao : strCST_PIS := '74'; stpisOperAquiPorST : strCST_PIS := '75'; stpisOutrasOperacoesEntrada : strCST_PIS := '98'; stpisOutrasOperacoes : strCST_PIS := '99'; end; //alterado aqui Add( LFill('C481') + LFill(strCST_PIS) + LFill(VL_ITEM,0,2) + LFill(VL_BC_PIS,2) + DFill(ALIQ_PIS,4) + DFill(QUANT_BC_PIS, 3, True) + DFill(ALIQ_PIS_QUANT, 4, True) + LFill(VL_PIS,0,2) + LFill(COD_ITEM) + LFill(COD_CTA) ) ; // RegistroC990.QTD_LIN_C := RegistroC990.QTD_LIN_C + 1; end; end; // Variavél para armazenar a quantidade de registro do tipo. FRegistroC481Count := FRegistroC481Count + RegC405.RegistroC481.Count; end; end;
  21. O componente usava no campo codigo o tipo smalint e o mesmo tem tamanho limite de 32767, no entanto itens de tamanho 5 e 6 podem ter tamanho de 99999 a 999999 e nesse caso havia erro na geração do arquivo. Foi alterado o tipo do codigo para Integer que resolveu esse problema. Foram feitas outras pequenas alterções para melhor uso do componente. Segue anexo arquivo com alterações. Waldir Paim. ACBrCargaBal.pas
  22. Tirei a dependência do ClientDataSet no ACBrNFeDANFeRL. Segue em anexo as alterações; ACBrNFeDANFeRL.rar
  23. Aproveitando o tópico. procedure TACBrSPEDFiscal.SetCurMascara(const Value: ansistring); begin FCurMascara := Value; FACBrTXT.CurMascara := Value; <= falta passar a mascara para a classe base FBloco_0.CurMascara := Value; FBloco_1.CurMascara := Value; FBloco_C.CurMascara := Value; FBloco_D.CurMascara := Value; FBloco_E.CurMascara := Value; FBloco_G.CurMascara := Value; FBloco_H.CurMascara := Value; FBloco_9.CurMascara := Value; end; Abraço a todos. Waldir Paim
  24. Nessa correria de todos deve ter passado despercebido! Posta a correção ai novamente, se for em Fortes estou fazendo algumas mudanças e em breve posto aqui para o pessoal avaliar. Com certeza estamos num local bem democrático e suas alterações e as minhas serão adicionadas ao svn! Abraço! Waldir Paim
×
×
  • 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.