Impressora Fiscal

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

PITERGALDIANO
Usuário Nível 2
Usuário Nível 2
Mensagens: 91
Registrado em: 28 Nov 2003 08:48

Impressora Fiscal

Mensagem 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!
Piter Galdiano
Programador Clipper
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Dércio_Luiz_Zanatta
Usuário Nível 3
Usuário Nível 3
Mensagens: 153
Registrado em: 11 Jan 2006 15:37
Localização: Ibirubá - RS

Mensagem 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
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Mensagem 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
Avatar do usuário
Bisteca
Usuário Nível 2
Usuário Nível 2
Mensagens: 74
Registrado em: 10 Jan 2005 10:25

Impressora fiscal - ECF

Mensagem 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.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Re: Impressora fiscal - ECF

Mensagem 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. :)
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
pedro.carvalho
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 07 Ago 2007 16:23
Localização: vitoria-es

Mensagem 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.
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Mensagem 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!
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
pedro.carvalho
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 07 Ago 2007 16:23
Localização: vitoria-es

Mensagem por pedro.carvalho »

valeu luksys, vou entrar em contato com a bematech.
depois retorno com novidades.
Avatar do usuário
dbsh
Usuário Nível 3
Usuário Nível 3
Mensagens: 128
Registrado em: 14 Jul 2004 14:19
Localização: ES

Mensagem 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

Responder