Página 1 de 1
Impressora Fiscal
Enviado: 23 Jul 2007 10:57
por PITERGALDIANO
Pessoal, bom dia!
Tenho um sistema em clipper ERP e agora alguns clientes vão precisar colocar impressora fiscal. Porém nunca desenvolvi nada para impresso fiscal.
Preciso começar do zero!
Alguém pode me dar uma ajuda. Além do desenvolvimento, preciso saber também com relação ao fisco. Preciso de autorização da Delegacia Fiscal?
Quem poder me ajudar fico grato!
Enviado: 23 Jul 2007 11:05
por Maligno
Bom, com relação ao fisco, aconselho o amigo a procurar o contador do seu cliente. Não que aqui não consiga informações confiáveis. Nem é esse o caso. É que se o contador informar algo errado, a bomba explodirá na mão dele e não na sua.
Com relação à impressora em si, acho bem provável que ela se comunique via serial. Se for assim, certamento você cairá sobre a CATools que tem se mostrado muito boa pra esse tipo de comunicação. E é simples também. Mas dê uma busca no fórum. Por esses dias já conversamos muito por aqui sobre comunicação serial.
Enviado: 23 Jul 2007 16:10
por Dércio_Luiz_Zanatta
Caro amigo..
Impressora fiscal é algo muito simples. Não tem nada de complicado.
Todas as marcas de ecf possuem um suporte muito bom para desenvolvedor. Sugiro que vc acesse a página do fabricante para esclarecer suas dúvidas. Tenho certeza que, seja qual for o fabricante, vc consigirá desenvolver sem problemas.
Mas se mesmo assim tiver alguma dúvida, prende o grito ai..
Eu já desenvolvi para quase todas as marcas de Ecf existentes.. Posso te ajudar no que estiver ao meu alcance...
Um abraço
Enviado: 01 Ago 2007 22:28
por dbsh
Boa noite,
A ECF usa porta serial, quanto ao fisco cada estado tem que ter uma autorização para aquele estado, que difere de um estado para outro, solicite informação no fisco do seu estado.
Daruma pode ser usado o OBServer pelo windows criando TXT para enviar e receber resposta da ECF ou conexão direta pela serial.
Bematech - pode usar a DLL no windows criando TXT para enviar e receber resposta da ECF ou BEMAFI.EXE pelo DOS.
Cada fabricante tem suporte no seu site, existem outros como SCHALTER/YANCO/CORICO/SWEDA e muitas outras que não lembra agora
Daruma -
http://www.desenvolvedoresdaruma.com.br ... fault.html
Bematech -
http://www.bematech.com.br/suporte/dwn_fisc.asp
qualquer duvida é so postar
--------------------------------------
o sucesso é construido a noite
Impressora fiscal - ECF
Enviado: 06 Ago 2007 21:49
por Bisteca
Caro amigo, sou lacrador de ECF e todos deram respostas corretas principalmente a do nosso amigo dbsh. Realmente cada estado trata com particularidades diferentes, acredite se quiser o estado de S.P. ainda é o mais maleável. Realmente é fácil porém um tanto trabalhos desenvolver um bom sistema integrado com ECF.
Aqui fica uma dica para todos, procurem saber sobre a portaria CAT52, ela diz que devemos guardar as transações feitas pelo ECF em mídia digital não regravavel em um formato específico.
Um abraço a todos.
Enviado: 06 Ago 2007 23:59
por Stanis Luksys
dbsh escreveu:Daruma pode ser usado o OBServer pelo windows criando TXT para enviar e receber resposta da ECF ou conexão direta pela serial.
Bematech - pode usar a DLL no windows criando TXT para enviar e receber resposta da ECF ou BEMAFI.EXE pelo DOS.
A Sweda tem um tal de dos2win também.
Todos funcionam de forma parecida: uma porcaria.
Use comunicação direta e se valha do fato de você estar no DOS, por que no Windows não é possível. Se quiser usar DLL, mude a plataforma do programa.
Re: Impressora fiscal - ECF
Enviado: 07 Ago 2007 00:03
por Stanis Luksys
Bisteca escreveu:Aqui fica uma dica para todos, procurem saber sobre a portaria CAT52, ela diz que devemos guardar as transações feitas pelo ECF em mídia digital não regravavel em um formato específico.
Um abraço a todos.
Existe um tópico chamado "cupom fiscal" tratando essencialmente disso.
Parace mais difícil do que é. Quem ja tem o costume de guardar tudo que rola no sistema, não vai ter trabalho. O mais chatinho é a assinatura, que dado o tamanho da exigênica, num é nada.

Enviado: 07 Ago 2007 01:04
por Maligno
O mais chatinho é a assinatura
Bota chato nisso. E ainda ter que ficar esperando a chave pública da receita. Não encontrei nenhum outro programa (linha de comando) pra testar a RSA.
Enviado: 08 Ago 2007 15:52
por pedro.carvalho
pessoal, aproveitando o topico. essa eh minha primeira mensagem.
estou numa sinuca de bico aqui, nunca programei mas estou estudando para, tenho algum conhecimento em dot net e java mas nao conheco nada das funcoes do clipper.
no entanto o pessoal largou uma ardua tarefa (aka bomba) na minha mao.
e o lance é o seguinte:
- o preco da vaca eh 120,
- mas tem um porém, 20 nao eh 100
brincadeiras a parte, o codigo diz que para abrir uma cupom fiscal eu faço isso:
ElseIf WCFG_IMPF == "2" // Bematech
mabre :=chr(27)+chr(251)+"00|"+chr(27)
mRet := _Envia(mAbre,1)
ok esse eh o codigo para impressora bematech algum modelo que eu nao sei.
mas para o modelo que eu quero, bema MP-2100 TH FI , o BEMAFI32.chm diz o seguinte:
Bematech_FI_AbreCupom
Exemplo:
// Exemplo em Delphi
cCPF := '11.111.111-11';
iRetorno := Bematech_FI_AbreCupom( pchar( cCPF ) );
ou
iRetorno := Bematech_FI_AbreCupom( pchar( '' ) );
como que eu posso adequar isso ao meu codigo ?
pensei em
ElseIf WCFG_IMPF == "99" // Bematech mp 2100 th fi
mabre :=Bematech_FI_AbreCupom(chr(27)+chr(251)+"00|"+chr(27))
mRet := _Envia(mAbre,1)
mas depois vi que nao da pra importar a dll no sistema..... entao........
eh, conto com a boa vontade de voces.
obrigado.
Enviado: 08 Ago 2007 21:49
por Stanis Luksys
Cara,
A lógica do ELSEIF está correta.
Já quanto ao CHM, ele só cobre o desenvolvimento via DLL, e no seu caso você está precisando enviar via porta serial com comunicação direta.
O comndo em sí eu num tenho como te passar agora, mas posso garantir que é muito simples e bem parecido com o outro modelo. Me parece que na Bematech tem um byte auxiliar que é o dígito menos significativo da soma dos dígitos dos dois últimos caracteres (ACHO que é isso).
Não sei se fui claro. Ligue no suporte da bematech que eles te enviam por e-mail um PDF que explica como montar o comando. Se não conseguir, qualquer coisa amanhã com mais calma tento te passar essa string completa.
Mas o esquema é esse mesmo, você vai precisar passar os chr(27)+chr(xx)+chr(yy) para esta função _send que já existe no seu código.
Falou!
Enviado: 09 Ago 2007 15:11
por pedro.carvalho
valeu luksys, vou entrar em contato com a bematech.
depois retorno com novidades.
Enviado: 09 Ago 2007 22:45
por dbsh
Boa Noite,
Extrai de parte do meu sistema de ERP em Clipper, não deu para testar, qualquer problema e so postar, talves demore um pouco para responder, este exemplo serve para ter uma ideia de como funciona a ECF Bematech com bemafi.exe
Exemplo de como usar:
Código: Selecionar todos
Function Test()
MP_Send( 6 ) //leitura X
MP_Send( 5 [, "data e hora"] ) //redução Z, opcional apenas para matricial
MP_Send( 8, "datainicial e datafinal" ) //leitura memoria fiscal
MP_Send( 0 ) abrir cupom fiscal
MP_Send( 22, "25" ) //abre gaveta
RETU .T.
Código: Selecionar todos
STATIC UltRetorno := ""
STATIC UltStatus := ""
STATIC Erro := .f.
FUNCTION MP_Send( cCommand, cPar )
LOCA cBuffers := ""
IF cCommand = NIL
cCommand := ""
ENDIF
IF VALTYPE( cCommand ) = "N"
cCommand := STRZERO( cCommand, IIF( cCommand > 99, 3, 2 ) )
ENDIF
cBuffers := CHR( 27 ) + CHR( 251 ) + cCommand + '|' + cPar ;
+ IIF( EMPTY( cPar ), '', '|' ) + CHR( 27 )
/* evia sequencia de bytes para impressora */
RETU MP_Write( cBuffers )
FUNCTION MP_Write( Comando )
LOCAL nHandle
RUN( "del bemafi.cmd >NUL" )
RUN( "del status.txt >NUL" )
RUN( "del retorno.txt >NUL" )
nHandle := FCREATE( "BEMAFI.CMD" )
FWRITE( nHandle, @Comando, LEN( Comando ) )
FCLOSE( nHandle )
Run( "bemafi.exe" )
//SwpRunCmd( "bemafi.exe" )
//pega o retorno
IF !MP_Read()
RETU .F.
ENDIF
RETU !MP_Erro()
FUNCTION MP_Read()
LOCAL nHandle := 0
LOCAL cStatus := ""
LOCAL xx := 0
LOCAL nTam := 0
LOCAL Retorno := ""
Erro := .F.
UltStatus := ""
UltRetorno := ""
IF !FILE( "STATUS.TXT" )
Erro := .T.
RETU .F.
ENDIF
IF FILE( "RETORNO.TXT" ) //retorna informação solicitada
nHandle := FOPEN( "RETORNO.TXT" )
nTam := FSEEK( nHandle, 0, 2 )
FSEEK( nHandle, 0, 0 )
Retorno := SPACE( nTam )
FREAD( nHandle, @Retorno, nTam )
FCLOSE( nHandle )
UltRetorno := Retorno
ENDIF
nHandle := FOPEN( "STATUS.TXT" )
nTam := FSEEK( nHandle, 0, 2 )
FSEEK( nHandle, 0, 0 )
cStatus := SPACE( nTam )
FREAD( nHandle, @cStatus, nTam )
FCLOSE( nHandle )
UltStatus := cStatus
RETU .T.
FUNCTION MP_Erro()
LOCA Bit_Ack := 0
LOCA Bit_St1 := 0
LOCA Bit_St2 := 0
LOCA Bit_Flag := 0
LOCA lErro := .t.
IF Empty(UltStatus)
RETU .T.
ENDIF
Bit_Ack := VAL( SUBSTR( UltStatus, 1, 3 ) )
//Tratamento do Ack ou NAk
IF Bit_ACK = 6
Bit_St1 := VAL( SUBSTR( UltStatus, 4, 3 ) )
BIt_St2 := VAL( SUBSTR( UltStatus, 7, 3 ) )
BIt_Flag := VAL( SUBSTR( UltStatus, 10, 3 ) )
lErro := ( EMPTY( Bit_St1 ) .or. Bit_St1 = 2 .or. Bit_St1 = 64 )
lErro := lErro .and. EMPTY( Bit_St2 )
lErro := lErro .and. ( EMPTY( Bit_Flag ) .or. Bit_Flag <> 128 )
lErro := !lErro
ENDIF
RETURN lErro
Function MP_GetErro()
RETU Erro
Function MP_GetRetorno()
RETU UltRetorno
Function MP_GetStatus()
RETU UltStatus