Ir para conteúdo
  • Cadastre-se

ivan

Membros Pro
  • Total de ítens

    148
  • Registro em

  • Última visita

Tudo que ivan postou

  1. Grande Daniel ! Seguem funções corrigidas: procedure TACBrECFFiscNET.ArquivoMFD_DLL(ContInicial, ContFinal: Integer; NomeArquivo: AnsiString; Documentos: TACBrECFTipoDocumentoSet; Finalidade: TACBrECFFinalizaArqMFD; TipoContador: TACBrECFTipoContador); Var iRet : Integer; PortaSerial, ModeloECF, NumFab : String; CooIni, CooFim, Prop, ArqTmp : String ; OldAtivo : Boolean ; cFinalidade:String; begin NumFab := NumSerie; ModeloECF := SubModeloECF; CooIni := IntToStrZero( ContInicial, 6 ) ; CooFim := IntToStrZero( ContFinal, 6 ) ; Prop := IntToStr( StrToIntDef( UsuarioAtual, 1) ) ; PortaSerial := fpDevice.Porta ; LoadDLLFunctions; OldAtivo := Ativo; try Ativo := False; if pos(fsMarcaECF, 'urano') > 0 then begin if (Finalidade = finMF) then cFinalidade := 'MF' else if (Finalidade = finTDM) then cFinalidade := 'TDM' else cFinalidade := 'MFD'; ArqTmp := ExtractFilePath( NomeArquivo ) + 'ACBr.TDM' ; if FileExists( NomeArquivo ) then DeleteFile( NomeArquivo ) ; iRet := xDLLReadLeMemorias( PAnsiChar(PortaSerial), PAnsiChar(ArqTmp), PAnsiChar(NumFab), '1'); if iRet <> 0 then raise Exception.Create( ACBrStr( 'Erro ao executar DLLReadLeMemorias.' + sLineBreak + 'Cod.: '+ IntToStr(iRet) + ' - ' + GetErroAtoCotepe1704(iRet) )) ; iRet := xDLLATO17GeraArquivo( PAnsiChar( ArqTmp ), PAnsiChar( NomeArquivo ), PAnsiChar( CooIni ), PAnsiChar( CooFim ), 'C', '1', PAnsiChar( cFinalidade ) ); if iRet <> 0 then raise Exception.Create( ACBrStr( 'Erro ao executar DLLATO17GeraArquivo.' + sLineBreak + 'Cod.: '+ IntToStr(iRet) + ' - ' + GetErroAtoCotepe1704(iRet) )) ; end else if pos(fsMarcaECF, 'dataregis|termoprinter') > 0 then begin iRet := xGera_PAF( PAnsiChar( PortaSerial ) , PAnsiChar( ModeloECF ), PAnsiChar( NomeArquivo ), PAnsiChar( CooIni ), PAnsiChar( CooFim ) ); if iRet <> 0 then raise Exception.Create( ACBrStr( 'Erro ao executar Gera_PAF.'+sLineBreak+ 'Cod.: '+IntToStr(iRet) + ' - ' + GetErroAtoCotepe1704(iRet) )) ; if not FileExists( NomeArquivo ) then raise Exception.Create( ACBrStr( 'Erro na execução de Gera_PAF.'+sLineBreak+ ': "'+NomeArquivo + '" não gerado' )) end else if (fsMarcaECF = 'elgin') then begin AbrePortaSerialDLL(fpDevice.Porta, ExtractFilePath(NomeArquivo)); ArqTmp := ExtractFilePath( NomeArquivo ) + 'Memoria.tdm' ; iRet := xElgin_LeMemoriasBinario( ArqTmp, NumFab, true ); if (iRet <> 1) then raise Exception.Create(ACBrStr('Erro ao executar Elgin_LeMemoriasBinario.'+sLineBreak+ 'Cod.: ' + IntToStr(iRet))) ; if not FilesExists( ArqTmp ) then raise Exception.Create(ACBrStr('Erro na execução de Elgin_LeMemoriasBinario.'+sLineBreak+ 'Arquivo binário não gerado!')); iRet := xElgin_GeraArquivoATO17Binario( ArqTmp, NomeArquivo, CooIni, CooFim, 'C', Prop, 'MF'); if (iRet <> 1) then raise Exception.Create(ACBrStr('Erro ao executar Elgin_GeraArquivoATO17Binario.'+sLineBreak+ 'Cod.: ' + IntToStr(iRet))) ; xElgin_FechaPortaSerial(); end else raise Exception.Create( ACBrStr( 'ArquivoMFD_DLL por COO ainda não Implementado para: '+fsMarcaECF ) ) ; finally Ativo := OldAtivo ; end; end; e procedure TACBrECFFiscNET.ArquivoMFD_DLL(DataInicial, DataFinal: TDateTime; NomeArquivo: AnsiString; Documentos: TACBrECFTipoDocumentoSet; Finalidade: TACBrECFFinalizaArqMFD); Var iRet : Integer; PortaSerial, ModeloECF, NumFab, ArqTmp, Prop : String; DiaIni, DiaFim : AnsiString; OldAtivo : Boolean; cFinalidade:String; begin NumFab := NumSerie; ModeloECF := SubModeloECF; PortaSerial := fpDevice.Porta; Prop := IntToStr( StrToIntDef( UsuarioAtual, 1) ) ; LoadDLLFunctions; OldAtivo := Ativo; try Ativo := False; if pos(fsMarcaECF, 'urano') > 0 then begin if (Finalidade = finMF) then cFinalidade := 'MF' else if (Finalidade = finTDM) then cFinalidade := 'TDM' else cFinalidade := 'MFD'; ArqTmp := ExtractFilePath( NomeArquivo ) + 'ACBr.TDM' ; if FileExists( NomeArquivo ) then DeleteFile( NomeArquivo ) ; DiaIni := FormatDateTime('yyyymmdd', DataInicial); DiaFim := FormatDateTime('yyyymmdd', DataFinal); iRet := xDLLReadLeMemorias( PAnsiChar( PortaSerial ), PAnsiChar( ArqTmp ), PAnsiChar( NumFab ), '1'); if iRet <> 0 then raise Exception.Create( ACBrStr( 'Erro ao executar DLLReadLeMemorias.' + sLineBreak + 'Cod.: '+ IntToStr(iRet) + ' - ' + GetErroAtoCotepe1704(iRet) )) ; iRet := xDLLATO17GeraArquivo( PAnsiChar( ArqTmp ), PAnsiChar( NomeArquivo ), PAnsiChar( DiaIni ), PAnsiChar( DiaFim ), 'M', '1', PAnsiChar( cFinalidade ) ); if iRet <> 0 then raise Exception.Create( ACBrStr( 'Erro ao executar DLLATO17GeraArquivo.' + sLineBreak + 'Cod.: '+ IntToStr(iRet) + ' - ' + GetErroAtoCotepe1704(iRet) )) ; end else if pos(fsMarcaECF, 'dataregis|termoprinter') > 0 then begin DiaIni := FormatDateTime('dd/mm/yyyy', DataInicial); DiaFim := FormatDateTime('dd/mm/yyyy', DataFinal); iRet := xGera_AtoCotepe1704_Periodo_MFD( PAnsiChar( PortaSerial ), PAnsiChar( ModeloECF ), PAnsiChar( NomeArquivo ), PAnsiChar( DiaIni ), PAnsiChar( DiaFim ) ); if iRet <> 0 then raise Exception.Create( ACBrStr( 'Erro ao executar Gera_AtoCotepe1704_Periodo_MFD.'+sLineBreak+ 'Cod.: '+IntToStr(iRet) + ' - ' + GetErroAtoCotepe1704(iRet) )) ; if not FileExists( NomeArquivo ) then raise Exception.Create( ACBrStr( 'Erro na execução de Gera_AtoCotepe1704_Periodo_MFD.'+sLineBreak+ 'Arquivo: "'+NomeArquivo + '" não gerado' )) end else if (fsMarcaECF = 'elgin') then begin DiaIni := FormatDateTime('yyyymmdd', DataInicial); DiaFim := FormatDateTime('yyyymmdd', DataFinal); AbrePortaSerialDLL( PortaSerial, ExtractFilePath(NomeArquivo) ); ArqTmp := ExtractFilePath( NomeArquivo ) + 'Memoria.tdm' ; iRet := xElgin_LeMemoriasBinario( ArqTmp, NumFab, true ); if (iRet <> 1) then raise Exception.Create(ACBrStr('Erro ao executar Elgin_LeMemoriasBinario.'+sLineBreak+ 'Cod.: ' + IntToStr(iRet))) ; if not FilesExists( ArqTmp ) then raise Exception.Create(ACBrStr('Erro na execução de Elgin_LeMemoriasBinario.'+sLineBreak+ 'Arquivo binário não gerado!')); iRet := xElgin_GeraArquivoATO17Binario( ArqTmp, NomeArquivo, DiaIni, DiaFim, 'D', Prop, 'MF'); if (iRet <> 1) then raise Exception.Create(ACBrStr('Erro ao executar Elgin_GeraArquivoATO17Binario.'+sLineBreak+ 'Cod.: ' + IntToStr(iRet))) ; xElgin_FechaPortaSerial(); end else raise Exception.Create( ACBrStr( 'ArquivoMFD_DLL por período ainda não Implementado para: '+fsMarcaECF ) ) ; finally Ativo := OldAtivo ; end ; end;
  2. Bom dia... Consegui uma ECF K-Fiscal, da Elgin para testar no nosso PAF. Então o único problema que tivemos foi que o arquivo gerado pela função "PafMF_LMFC_Cotepe1704" gera um arquivo com TDM no lugar de MF. Confome o roteiro para o PAF, o tipo de arquivo tem que ser MF. Então o pessoal do suporte da Elgin me passou que teríamos que alterar um parâmetro na chamada da DLL. Tem que ser assim: iRet := xElgin_GeraArquivoATO17Binario( ArqTmp, NomeArquivo, CooIni, CooFim, 'C', Prop, 'MF'); Observe o parâmetro MF no lugar do TDM que havia antes. Isto serve tanto para a função por DATA quanto por COO. []´s Ivan
  3. Hmm.. me parece que o valor do produto, "33,17" é o que está atrapalhando a execução da função. []´s Ivan
  4. Hmm.. me parece que o valor do produto, "33,17" é o que está atrapalhando a execução da função.
  5. Olá...Talvez alguem já tenha passado por esta situação. Ao tentar gerar o LMFC - Ato Cotepe 17/04 com a funcao ACBrECF1.PafMF_LMFC_Cotepe1704(EditInicial.Date, EditFinal.Date, PathArquivo) Ocorre a mensagem de erro : Erro:1 ao abrir a Porta com EPSON_Serial_Abrir_Porta(38400,6) Aparentemente a porta serial continua aberta, mas com a Daruma isto não ocorre. Ivan
  6. ivan

    Erro no ACBrEAD

    Observe o tópico: Talvez lhe ajude.
  7. Bem... Eu resolvi de forma bem simples isto... Na hora de cadastrar a impressora no banco de dados do sistema eu gravo um campo(flag) que informa se o PAF deve imprimir ou não um leitura da memória fiscal quando for o primeiro dia de operação do mês. []´s Ivan
  8. Acredito que foram relatadas opções interessantes neste tópico até o momento. Creio que o Daniel não irá conseguir agradar a todos. Chegará a hora em que será tomada a decisão e talvez não acertarão num primeiro momento. Não conheço o Daniel pessoalmente e nem outros membros que fazem do ACBr este grande conjunto de ferramentas. Eu já cheguei a ajudar em alguma coisa, poucas linhas de código, comparado ao que representa hoje o ACBr. Usei muito mais do que ajudei e acredito que esta seja a situação da grande maioria aqui. A única coisa que tenho visto nestes 5 anos que tenho usado os componentes é que o Daniel sempre teve decisões, observações e opiniões sempre bem equilibradas. Tenho certeza de que não será diferente agora. E então eu só gostaria de deixar o meu apoio ao Daniel para que seja qual for a decisão que for tomada, de que forma será o suporte, qual for o valor cobrado, estaremos apoiando por que tenho certeza de que o ACBr vale cada centavo que eu for investir e lhe dará chance de lhe elevar para um patamar ainda mais alto. Quando mexe no bolso dói. Devemos olhar como investimento e não como despesa. Teremos retorno sobre isto, tenho certeza. A qualidade do ACBr irá melhorar ainda mais e isto irá refletir diretamente nos produtos que estaremos colocando no mercado. Quanto mais empresas/pessoas aderirem melhor será para todos. E não me importo se por acaso o Daniel ganhar muito dinheiro com isto, pois o esforço que já teve neste projeto o torna merecedor disto. Eu espero sim que ele ganhe o suficiente para poder dedicar mais do seu tempo para o projeto. Já para aqueles que não quiserem, continuará sendo como é hoje: muito bom ! []'s Ivan
  9. Estou com uma Bematech MP-20 FI II R aqui... não estou conseguindo rodar com o ACBr. Pelo que pesquisei esta impressora é para restaurantes. Uma das coisas que acontece é que abro o cupom normalmente e então para por aí.. Não consigo sequer cancelar o cupom. Este modelo também não consta na lista de ECF compatível, somente o modelo sem o R no final. Alguem saberia me dizer se este ECF poderia funcionar com o ACBR ? []'s Ivan
  10. Daniel... eu acho muito bacana a ideia. Somos uma pequena empresa, com poucos clientes, mas o ACBr já nos ajudou muito e então eu acho válido e coerente o valor. Vale cada centavo. Para nós o plano adequado seria os R$ 120,00 mensais. Eu mesmo, já havia começado no mês passado a doar R$ 100,00 mensais por iniciativa própria, mas esta idéia do suporte é melhor pra nós. Peço que envie o contrato para mim. Abs, e vamos em frente ! Ivan
  11. ivan

    TACBrECFUrano.AbreGaveta

    Segue uma pequena contribuição Procedure TACBrECFUrano.AbreGaveta ; begin BytesResp := 0; EnviaComando( '19' + R, 35 ); end; []'s... Ivan
  12. Grande Daniel... isto é novidade pra mim .. obrigado
  13. É isto mesmo... depois de muitas tentativas consegui contato com o suporte da Bematech... e realmente o desconto no ISS não estava habilitado na impressora fiscal. O cliente deverá enviá-la para manutenção técnica. Grato
  14. Estou tendo dificuldades com a Bematech(MP-3000), quando o valor de serviços(ISS) é maior que o valor dos produtos(ICMS) e dou desconto em valor maior que a soma do valor dos produtos: Exemplo: --------------------------------- 02 horas de mecânica = 100,00 01 vela de ignição = 20,00 --------------------------------- Desconto = 40,00 A impressora Bematech retorna erro, porém a Daruma processa normalmente. Pelo que entendi, a Bematech tentar dar o desconto somente no ICMS, não consegue pois o valor do desconto é maior que a soma dos produtos, enquanto a Daruma processa o desconto correto rateando entre ISS x ICMS. Alguma luz do que eu poderia fazer neste caso ?
  15. O suporte da Daruma acaba de me enviar estes links: Vejam o help online. http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2009/HelpOnline/Daruma_Framework.htm http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2009/Exemplos/DarumaFrameWork_Delphi.zip Att Ivan
  16. Na verdade o que me preocupa são os métodos que o ACBr utiliza para a geração das necessidades geradas para o PAF... Aquelas chamadas diretas para a DLL, já que todo o resto o ACBr faz via comunicação direta.
  17. Bom... Tomara que as mudanças não sejam tão grandes. Não creio que fariam algo deste tipo, mas vamos aguardar mais notícias a respeito disto.
  18. ivan

    Daruma - migração de DLL

    Olá... Para quem utiliza a Daruma em seu PAF, segue uma informação que obtive agora do suporte Daruma. A Daruma32.dll está sendo descontinuada e em seu lugar entra a DarumaFramework.dll que conta com métodos diferentes. Att, Ivan
  19. A alteração que fiz foi no ACBrECF.pas, na procedure LinhaRelatorioGerencial. O problema que tinhamos que resolver é a questão do teste que imprime um gerencial quilométrico e ocorre um timeout na impressora fiscal, normalmente em 2 minutos, mas o pessoal da SevenPDV falou que cada impressora reage de forma diferente. Então eu coloquei um contador de tempo nesta procedure onde, chegando a um minuto, fecha o gerencial e abre outro e o sistema tem que continuar imprimindo o gerencial a partir de onde fechou o gerencial anterior. Levando em conta que isto pode acontecer não só com os gerenciais do TEF, mas também com qualquer gerencial que fique enorme, agora com o PAF pode acontecer, acredito que esta alteração deva permanecer no ACBrECF.pas, mas peço que analisem o código e melhorem o que for preciso !!! Não levei em consideração a questão de compatibilidade com linux, tive que adicionar a unit DateUtils e passamos na homologação com esta alteração. Segue a procedure: procedure TACBrECF.LinhaRelatorioGerencial(const Linha: AnsiString; const IndiceBMP: Integer); Var Texto, Buffer : String ; Lin : Integer ; SL : TStringList ; TempoInicio: Double; begin if MaxLinhasBuffer < 1 then begin ComandoLOG := 'LinhaRelatorioGerencial( '+Linha+' )'; fsECF.LinhaRelatorioGerencial( Linha, IndiceBMP ); end else begin TempoInicio:= Now; Texto := '' ; Buffer := AjustaLinhas(Linha, Colunas) ; SL := TStringList.Create ; try SL.Text := Buffer ; For Lin := 0 to SL.Count - 1 do begin if SecondsBetween(now,TempoInicio) > 60 then begin fsECF.fechaRelatorio; if fsECF.EmLinha(10) then begin TempoInicio:= Now; fsECF.AbreRelatorioGerencial; end; end; Texto := Texto + SL[Lin] + sLineBreak; if (Lin mod MaxLinhasBuffer) = 0 then begin ComandoLOG := 'LinhaRelatorioGerencial( '+Texto+' )'; fsECF.LinhaRelatorioGerencial( Texto ) ; Texto := '' ; end ; end ; if Texto <> '' then begin ComandoLOG := 'LinhaRelatorioGerencial( '+Texto+' )'; fsECF.LinhaRelatorioGerencial( Texto, IndiceBMP ) ; end ; finally SL.Free ; end ; end ; {$IFNDEF CONSOLE} if MemoAssigned then begin fsMemoOperacao := 'linharelatoriogerencial' ; Buffer := AjustaLinhas( Linha, fsMemoColunas) ; MemoAdicionaLinha( Buffer ); end ; {$ENDIF} end;
  20. Ricardo... Homologamos o PAF na semana passada aqui em SC... segue dicas do homologador: O nome dos arquivos tem especificado no REQUISITO XXVIII. Vendas do período dicas: Ambos devem ter filtro por data e devem estar no menu fiscal Descrição da opção: "Vendas do período -> Convênio 57/95" Descrição da opção: "Vendas do período -> Ato Cotepe/ICMS 09/08" "O arquivo gerado deverá ser denominado pelo nº laudo emitido pelo órgão técnico que promoveu a análise funcional do aplicativo, acrescido da data, hora, minuto e segundo correspondentes à geração do arquivo, resultando assim no formato XXXnnnAAAADDMMAAAAhhmmss.txt, onde: I - XXXnnnAAAA representa a numeração do laudo de que trata o § 3º da cláusula nona do Convênio ICMS 15/08; II ? DDMMAAAA representa o dia, mês e ano da geração do arquivo; e III ? hhmmss representa a hora, minuto e segundo da geração do arquivo." -São 2 arquivos com o mesmo nome e com EAD (assinatura digital). -Não existe especificamente definido quais são os registros obrigatórios, tem que ser todos relacionados a nota fiscal ( ver teste 053 passos 17-19 ) e cupom fiscal. **Vou olhar aqui no dia: Para o ato cotepe 09/08: 0000, 0001, 0005, 0100, 0150, 0190, 0200,0990, 0450 C001, C400, C405, C420, C460, C470, C490, C990 - Cupom Fiscal C001, C100, 170, 190 - Nota Fiscal manual (teste 053 passo 17) H001,H005,H010, H990 9001, 9900, 9990, 9999 Para o convênio 57/95: 10 Identificação 11 Complemento 60 - ECF 50 e 54 - Registro de Nota Fiscal Manual ( Teste 053 passos 17-19) 75 - Produtos 90 - Totais
  21. Pessoal Passamos na homologação do sistema na semana passada com o ACBrTEFD... Redecard, sem problemas Plug&Pay.. apenas uma modificação para a impressão de um gerencial com mais de 2 minutos. Pay & Go... tudo ok. Abraços Ivan
×
×
  • 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...