O arquivo tem que está no PATH!
Coloque os arquivos *.CH no mesmo lugar que estão os outros *.CH no xHarbour a mesma coisa deve fazer com as LIBs.
Se estiver enfrentando muita dificuldade no xHarbour, no Harbour é mais fácil.
Use o Harbour p/ trabalhar com a BEMAFI32.DLL é muito mais simples.
//Aqui podemos trabalhar tanto com o observer[daruma], Bematech, ou via DLL.
Código: Selecionar todos
#include "dll.ch"
...
If lMonitor
Else
If File("bemafi32.dll")
hDll:=DllLoad("bemafi32.dll")
Else
hwg_Msgstop("Falha carregando bemafi32.dll")
return .f.
EndIf
EndIf
Código: Selecionar todos
If lBematech
If lMonitor
Comando := "003|"+cCPFCNPJ+"|"
GravaArquivo(comando)
Else
BematechAbreCupom(@cCPFCNPJ)
EndIf
ElseIf lDaruma
Comando := "1000;"+cCPFCNPJ+";"
GravaArquivo(comando)
Else
hwg_msgstop('Sem Modelo')
Return .F.
EndIf
Voce chama a DLL sem nenhuma dificuldade, use o manual bemafi32.chm com a sintaxe e exemplos dos comandos.
Código: Selecionar todos
No manual vc tem:
Vende item após a abertura do cupom fiscal. Essa função permite também a venda de itens com 3 casas decimais no valor unitário.
compatduas
Parâmetros:
Codigo: STRING até 13 caracteres com o código do produto.
Descricao: STRING até 29 caracteres com a descrição do produto.
Aliquota: STRING com o valor ou o índice da alíquota tributária. Se for o valor deve ser informado com o tamanho de 4 caracteres ou 5 com a vírgula. Se for o índice da alíquota deve ser 2 caracteres. Ex. (18,00 para o valor ou 05 para o índice).
TipoQuantidade: 1 (um) caracter indicando o tipo de quantidade. I - Inteira e F - Fracionária.
Quantidade: STRING com até 4 dígitos para quantidade inteira e 7 dígitos para quantidade fracionária. Na quantidade fracionária são 3 casas decimais.
CasasDecimais: INTEIRO indicando o número de casas decimais para o valor unitário (2 ou 3).
ValorUnitario: STRING até 8 dígitos para valor unitário.
TipoDesconto: 1 (um) caracter indicando a forma do desconto. '$' desconto por valor e '%' desconto percentual.
ValorDesconto: String com até 8 dígitos para desconto por valor (2 casas decimais) e 4 dígitos para desconto percentual.
Possíveis retornos da Função (INTEIRO):
0: Erro de comunicação.
1: OK.
-2: Parâmetro inválido na função.
-3: Alíquota não programada.
-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.
-27: Status da impressora diferente de 6,0,0 (ACK, ST1 e ST2).
Observações:
- Imagine que há duas alíquotas com o valor 12% cadastradas na impressora. A primeira cadastrada na posição 01 como ICMS e a outra na posição 05 como ISS. Se você informar o valor 1200 ou 12,00 no parâmetro "alíquota" a função irá imprimir o item usando a alíquota 01 de ICMS. A função lê as alíquotas da impressora e usa o índice da primeira ocorrência. Para usar a alíquota de ISS você deverá passar o índice 05 e não o valor 1200 ou 12,00. Se você não tiver duas alíquotas com o mesmo valor cadastradas na impressora use sempre o valor no parâmetro alíquota.
- O cupom fiscal deve estar aberto.
Exemplo:
' Exemplo em Visual Basic
iRetorno = Bematech_FI_VendeItem("123", "Caneta", "1200", "I", "10", 2, "0,25", "%", "0000")
// Exemplo em Delphi
cCodigo := '123';
cDescricao := 'Caneta';
cAliquota := '1200';
cTipoQtde := 'I';
cQtde := '10';
iCasasDecimais := 2;
cValor := '0,25';
cTipoDesconto := '%';
cValorDesc := '0000';
iRetorno := Bematech_FI_VendeItem( pchar( cCodigo ),
pchar( cDescricao ),
pchar( cAliquota ),
pchar( cTipoQtde ),
pchar( cQtde ),
iCasasDecimais,
pchar( cValor ),
pchar( cTipoDesconto ),
pchar( cValorDesc ) );
A chamada no Harbour via DLL é simples veja:
nRetVal := DllCall(hDll,DLL_OSAPI,"Bematech_FI_VendeItem",;
pd->cod_mercad,;
substr(pd->mercadoria,1,29),;
eq->situa_trib,;
"F",;
Zero_Esq(pd->quantidade,7,3),;
2,;
zero_esq(pd->preco_unit,8,2),;
SD,;
Desc)
Saudações,
Itamar M. Lins Jr.