-
Total de ítens
620 -
Registro em
-
Última visita
-
Days Won
4
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Waldir Paim postou
-
Segue anexo ACBrCargaBal.pas
-
Segue anexo ACBrCMC7.pas
-
Melhorias no arquivo ACBrValidador
um tópico no fórum postou Waldir Paim Dúvidas Gerais sobre o ACBr
Segue anexo ACBrValidador.pas -
Segue anexo ACBrIBPTax.pas
-
Melhoria nos arquivos ACBrTEFD e ACBrTEFDClass
um tópico no fórum postou Waldir Paim Dúvidas sobre TEF
Segue anexo melhorias. ACBrTEFD.pas ACBrTEFDClass.pas -
Segue melhorias no arquivo em anexo. ACBrEFDBloco_0.pas ACBrSpedFiscal.pas
-
Melhorias nos arquivos ACBrEPCBloco_0 e ACBrEPCBloco_M
um tópico no fórum postou Waldir Paim ACBrSPEDPisCofins
Segue unit com implementação do recurso para localizar no registro0400 ACBrEPCBloco_0.pas ACBrEPCBloco_M.pas -
Fiz as modificações nas units em anexo e a emissão das etiquetas voltam a funcionar normalmente. ACBrETQZplII.pas ACBrETQEpl2.pas
-
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.
-
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.
-
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
-
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
-
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.
-
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;
-
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.
-
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.
-
Função Registro0150: Localizaregistro
Waldir Paim replied to Agnaldo Prates's tópico in ACBrSPEDFiscal
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 -
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.
-
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.
-
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
-
Experimente esse ACBrDevice.pas. Segue em anexo. ACBrDevice.pas
-
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;
-
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.
-
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.
-
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;