Página 1 de 1

uso da dll bemafi32.dll !!!

Enviado: 25 Nov 2013 13:27
por adilson
Boa Tarde ! Pessoal !!

Comecei a implementar o uso da dll bemafi32.dll usando como teste o emulador (Emul 2100) , como o exemplo abaixo:

Código: Selecionar todos

abrelib:=loadlibrary("bemafi32.dll")

iRetorno = DLLCall(abrelib, 32, "Bematech_FI_LeituraX")
if iRetorno != 1
   Alerta("Falha na execucao da Leitura X !")
else
   alerta("Leitura X Efetuado com Sucesso !!")
endif

.. ate aqui ele faz a leitura x .. depois nas demais chamadas retorna o valor nil
no iRetorno .


if !empty(ncpf)
   quem=left(ncpf,3)+"."+subs(ncpf,4,3)+"."+subs(ncpf,7,3)+"-"+right(ncpf,2)
elseif !empty(cgc)
   quem=left(cgc,2)+"."+subs(cgc,3,3)+"."+subs(cgc,6,3)+"/"+subs(cgc,9,4)+"-"+right(cgc,2)
endif

iRetorno = DLLCall(abrelib, 32, "Bematech_FI_abrecupom(quem)")   // retorna nil 

iRetorno = DLLCall(abrelib, 32, "Bematech_FI_usaunidademedida(vunidade)") // retorna nil
iRetorno = DLLCall(abrelib, 32, "Bematech_FI_vendeitem(vcodigo,vdescricao,vicm,vif,vqtde,2,vvalor,%,0000,") // retorna nil


alguem poderia me auxiliar por favor .. faz muito tempo que não mexo com ECF ..

Desde já agradeço qualquer ajuda .. obrigado ...

utilizo xharbour 1.2.1 (simples) e gtwvw

uso da dll bemafi32.dll !!!

Enviado: 25 Nov 2013 14:47
por Toledo
Adilson, não uso xHarbour, mas acho que as chamadas de funções de uma DLL devem ser iguais ao Harbour. No caso de funções em que você tem que passar parâmetros, a chamada da função é um pouco diferente do que você está fazendo, veja um exemplo:

Código: Selecionar todos

iRetorno = DLLCall(abrelib, 32, "Bematech_FI_abrecupom", quem)
iRetorno = DLLCall(abrelib, 32, "Bematech_FI_usaunidademedida", vunidade)
vCasasDecimais=2
vTipoDes="%"
vVlrDes="0000"
iRetorno = DLLCall(abrelib, 32, "Bematech_FI_vendeitem", vcodigo, vdescricao, vicm, vif, vqtde, vCasasDecimais, vvalor, vtipoDes, vVlrDes)
Abraços,

uso da dll bemafi32.dll !!!

Enviado: 25 Nov 2013 17:20
por adilson
Ola Toledo ! boa tarde !!

Fiz as alterações sugeridas , mas mesmo assim os retornos estão Nil ..
estou garimpando no fórum , mas ate agora neca ... alguém tem ai
um exemplo tipo :

abrecupom
vendeitem
fechacupom ???


se puderem dar um help .. agradeço ..


abraços a todos ...

obrigado

uso da dll bemafi32.dll !!!

Enviado: 25 Nov 2013 17:39
por Toledo
Adilson, veja a mensagem abaixo:

https://pctoledo.org/forum/viewto ... 702#p80748

Abraços,

uso da dll bemafi32.dll !!!

Enviado: 25 Nov 2013 23:29
por lucimauro
Segue exemplos:

retorno_ecf:=DllCall( nLib32, 32, "Bematech_FI_AbreCupom","")

retorno_ecf:=DllCall( nLib32, 32, "Bematech_FI_VendeItemDepartamento",alltrim(vd_codi),alltrim(vd_nome),vd_tribecf,tp_prtab,tp_quant,tp_vacre,tp_vdesc,"01",alltrim(left(vd_unid,2)))

retorno_ecf:=DllCall( nLib32, 32, "Bematech_FI_ReducaoZ","","")

Agora é so voce pegar o arquivo bemafi32.chm com o help dos comandos e ir usando.
Espero ter ajudado.

uso da dll bemafi32.dll !!!

Enviado: 26 Nov 2013 17:11
por adilson
ola pessoal boa tarde !!

Toledo , Lucimauro . obrigado pela ajuda .. mas ate agora ainda nada ..
a leitura x . vai ok !
mais os demais comandos ainda esta retornando nil .

como estou usando o emulador da bematech .. acho que deve ser algum parâmetro do bemafi32.ini , estou
quebrando as caxolas aqui, se por acaso alguém usou o emulador EMUL2100 e puder passar os parâmetros
do ini. agradeço. do resto estou na tentativa e acerto !!!

obrigado a todos ..

[]´s

uso da dll bemafi32.dll !!!

Enviado: 26 Nov 2013 18:56
por Itamar M. Lins Jr.
Eu uso com o harbour 3.2, na época que usava o Xhb, dava esses erros loucos e tinha que usar o BematechMonitor.

Código: Selecionar todos

#include "dll.ch"

                        nRetVal := DllCall(hDll,DLL_OSAPI,"Bematech_FI_LeituraMemoriaFiscalReducao",RINI,RFIM)

Código: Selecionar todos

********************************
Function BematechAbreCupom(cStr)
********************************
*
*
Local nRet := 0
nRet := DllCall(hDll,DLL_OSAPI,"Bematech_FI_AbreCupom",cStr)

If nRet == 1
Else
   hwg_MsgStop("Falha com a ECF."+hb_eol()+BematechRetorno(nRet) )
   Return .F.
EndIf

Return .T.

******************************
Function BematechRetorno(nRet)
******************************
*
*
Do case
   case nRet == 0
      cTxt := "Erro de comunicação"
   Case nRet == -4
      cTxt := "O arquivo de inicialização BemaFI32.ini não foi encontrado no diretório de sistema do Windows."
   Case nRet == -5
      cTxt := "Erro ao abrir a porta de comunicação."
   Case nRet == -8
      cTxt := "Erro ao criar ou gravar no arquivo STATUS.TXT ou RETORNO.TXT."
   Case nRet == -27
      cTxt := "Status da impressora diferente de 6,0,0 (ACK, ST1 e ST2)."
   OtherWise
      cTxt := "Erro desconhecido."
EndCase

Return cTxt

Saudações,
Itamar M. Lins Jr.

uso da dll bemafi32.dll !!!

Enviado: 26 Nov 2013 23:18
por lucimauro
Na arquivo BEMAFI32.INI configure

EmulMFD= Esta chave é utilizada para a comunicação com o emulador da impressora fiscal térmica EmulFITH através da dll, sem a necessidade de confeccionar um cabo de comunicação externo. Configurando esta chave para 1 ( um ), a sua aplicação, através das funções da dll, estará realizando a impressão dos cupons pelo emulador. Todas as informações referentes ao emulador, estão no seu próprio arquivos de ajuda.

uso da dll bemafi32.dll !!!

Enviado: 30 Nov 2013 10:16
por adilson
Bom Dia !!
Obrigado ao Toledo,Lucimauro e ao Itamar ! pela ajuda ,!
Com todo respeito aos jegues , eu dei uma de um ... kkk Percebi que os comandos
da DLL são case sensitive , por isso não estava dando certo .. !!! agora esta uma
beleza !!
só uma pergunta !! pois não consegui encontrar no help da bematech ..

Tenho que programar as aliquotas de icms toda vez no inicio do dia ??


obrigado a todos..

[]´s

uso da dll bemafi32.dll !!!

Enviado: 01 Dez 2013 11:48
por lucimauro
Retorna as alíquotas cadastradas na impressora.



Parâmetro:



Aliquotas: Variável string com o tamanho de 79 posições para receber as alíquotas + 1 posição para o NULL.



Possíveis retornos da Função (INTEIRO):



0: Erro de comunicação.

1: OK.

-1: Erro de execução da função.

-4: O arquivo de inicialização BemaFI32.ini não foi encontrado no diretório de sistema do Windows.

-5: Erro ao abrir a porta de comunicação.

-8: Erro ao criar ou gravar no arquivo STATUS.TXT ou RETORNO.TXT.

-27: Status da impressora diferente de 6,0,0 (ACK, ST1 e ST2).



Observação:

As alíquotas retornadas estarão separadas por vírgula. Ex.: 1200, 1700, 0500, 1800

Exemplo:



' Exemplo em Visual Basic

Aliquotas = Space(80)

iRetorno = Bematech_FI_RetornoAliquotas(Aliquotas)



// Exemplo em Delphi

for iConta := 1 to 80 do Aliquotas := Aliquotas + ' ';

iRetorno := Bematech_FI_RetornoAliquotas( Aliquotas );

uso da dll bemafi32.dll !!!

Enviado: 03 Dez 2013 15:27
por adilson
Pessoal Boa Tarde !!

Mais uma informação !! (mandei email para o suporte da bematech.. ate agora não responderam),

No meu caso para a emissão do cupom utilizo um pre-venda já feita , pode ocorrer de ser dado
um desconto no final desta venda ..

Pergunta ?

Como e dado o desconto no final da venda .. no caso do cupom estou tentando aplicar esse desconto
la no fechacupom , e retorno erro -1 . tenho que informar o desconto item a item ? e depois aplica-lo
totalizando la no fechacupom ??

obrigado !!

uso da dll bemafi32.dll !!!

Enviado: 04 Dez 2013 09:53
por DLZ
ola
o desconto/Acréscimo no subtotal do cupom deve ser feito pela função Bematech_FI_IniciaFechamentoCupom
Da uma olhada no manual da DLL para ver os parâmetros que devem ser passados.

uso da dll bemafi32.dll !!!

Enviado: 04 Dez 2013 11:09
por lucimauro
Segue meu exemplo.


tp_vrdesc:=alltrim(str(vd_vrdesc,14,2))
retorno_ecf:=DllCall( nLib32,32, "Bematech_FI_IniciaFechamentoCupom", "D","$",tp_vrdesc)
if retorno_ecf != 1
mens_erro:=erro_bematech(retorno_ecf)
endif
**
** Aqui voce informa o forma de pagamento
**
tp_vrpag:=alltrim(str(vd_totdin,12,2))
retorno_ecf:=DllCall( nLib32, 32, "Bematech_FI_EfetuaFormaPagamento", alltrim("DINHEIRO"),tp_vrpag)

uso da dll bemafi32.dll !!!

Enviado: 05 Dez 2013 18:05
por adilson
Obrigado a todos pela força ..

Estou quase finalizando o dito cujo ,, agora
ao usar o retorno da impressora bematech esta fechando o programa ,
iretorno=dllcall(abrelib,32,"Bematech_FI_RetornoImpressora",ack,st1,st2)

alguem saberia o porque ?

obrigado a todos

[]´s

uso da dll bemafi32.dll !!!

Enviado: 06 Dez 2013 09:06
por DLZ
Bom dia
Vc deve inciar as variáveis como char... veja exemplo abaixo..

Vack:=SPACE(1)
Vst1:=SPACE(1)
vst2:=SPACE(1)


RET:=DLLCALL(NDLL,32,"Bematech_FI_RetornoImpressora",vack,vst1,vst2)

@ 10,01 say "ACK:"+STR(ASC(alltrim(vack)))
@ 11,01 say "St1:"+STR(ASC(alltrim(vst1)))
@ 12,01 say "St2:"+STR(ASC(alltrim(vst2)))
inkey(0)

Outra dica importante,caso o ECF seja MFD é usar a função Bematech_FI_RetornoImpressoraMFD". Essa função tem um parâmetro a mais St3 que retorna um código de erro bem mais específico.