Página 2 de 3

Re: ACBr - xHarbour

Enviado: 12 Mar 2010 11:34
por MARINI
André:
Outra coisa que reparei é que se eu desligar a impressora retorna a mensagem pela
própria dll:

A impressora Daruma não esta pronta.
Deseja tentar novamente?
[SIM] [NÃO]

Acho que esta mensagem não deveria retornar mas sim alguma coisa tipo:
Daruma Framework
Método: Daruma_FI_RetornaErroExtendido [Índice 1472]

· Definição do Método:

Retorna o Erro Extendido do ECF, além do ST1 e ST2 retorna uma Tabela Completa de Erros.

· Parâmetros do Método:
String: Com 4 Posições que irá conter o Código de Erro Extendido que o ECF retorna.
Retorna 999 caso tenha a DLL retorne TIME-OUT.
Retorna a String original passada, com VAZIOS, caso NÃO HAJA ERRO.

· Este Método retornará um dos Valores Inteiros listados Abaixo:

1: OK, Sucesso ao enviar o método.
-27(Somente se o Flag Status Função estiver setado pra 1(um): O Método foi executado, porém o ECF sinalizou Erro, chame o Método Daruma_FI_RetornoImpressora para identificar o Erro.

Qualquer valor diferente dos listados acima deve ser encarado como Erro de execução do Método no ECF.

· Tabela de Erro Retornada:
================================================================
00 IF em modo Manutenção. Foi ligada sem o Jumper de Operação
01 Método disponível somente em modo Manutenção
02 Erro durante a gravação da Memória Fiscal
03 Memória Fiscal esgotada
04 Erro no relógio interno da IF
05 Falha mecânica na IF
06 Erro durante a leitura da Memória Fiscal
07 Metodo permitido apenas em modo fiscal (IF sem jmper)
10 Documento sendo emitido
11 Documento não foi aberto
12 Não existe documento a cancelar
13 Dígito não numérico não esperado, foi encontrado nos Parâmetros do Método
14 Não há mais memória disponível para esta operação/Não há nenhuma posição de méria disponível.
15 Item a cancelar não foi encontrado
16 Erro de sintaxe no método
17 "Estouro" de capacidade numérica (overflow)
18 Selecionado totalizador tributado com alíquota de imposto não definida
19 Memória Fiscal vazia
20 Não existem campos que requerem atualização
21 Detectado proximidade do final da bobina de papel
22 Cupom de Redução Z já foi emitido. IF inoperante até 0:00h do próximo dia
23 Redução Z do período anterior ainda pendente. IF inoperante
24 Valor de desconto ou acréscimo inválido (limitado a 100%)
25 Caráctere inválido foi encontrado nos Parâmetros do Métodos
26 Médoto não pode ser executado
27 Impressora fora de Linha/Nenhum periférico conectado a interface auxiliar
28 Foi encontrado um campo em zero
29 Documento anterior não foi Cupom Fiscal. Não pode emitir Cupom Adicional
30 Acumulador Não Fiscal selecionado não é válido ou não está disponível
31 Não pode autenticar. Excedeu 4 repetições ou não é permitida nesta fase
32 Cupom adicional inibido por configuração
35 Relógio Interno Inoperante
36 Versão do firmware gravada na Memória Fiscal não é a esperada
37 Alíquota de imposto informada já está carregada na memória
38 Forma de pagamento selecionada não é válida
39 Erro na seqüência de fechamento do Cupom Fiscal
40 IF em Jornada Fiscal. Alteração da configuração não é permitida
41 Data inválida. Data fornecida é inferior à última gravada na Memória Fiscal
42 Leitura X inicial ainda não foi emitida
43 Não pode emitir Comprovante Vinculado
44 Cupom de Orçamento não permitido para este estabelecimento(Mensagem do Aplicativo Não Programada)
45 Campo obrigatório em branco
48 Não pode estornar
49 Forma de pagamento indicada não encontrada
50 Fim da bobina de papel
51 Nenhum usuário cadastrado na MF
52 MF não instalada ou não inicializada
56 Documento já aberto
61 Queda de energia durante a emissão de Cupom Fiscal
75 Operação com ISS não permitida (se a sua impressora for uma FS600 ou FS2100T, então será preciso ter uma inscrição municipal gravada em sua impressora para que seja possível programar/utilizar alíquota de serviço).
76 Desconto em ISS não permitido neste ECF (a programação deverá ser feita por meio de intervenção técnica e caso o Estado permita)
77 Acréscimo em IOF inibido
80 Periférico na interface auxiliar não pode ser reconhecido
81 Solicitado preenchimento de cheque de banco desconhecido
82 Solicitado transmissão de mensagem nula pela interface auxiliar
83 Extenso do cheque não cabe no espaço disponível
84 Erro na comunicação com a interface auxiliar
85 Erro no dígito verificador durante comunicação com a PertoCheck
86 Falha na carga de geometria de folha de cheque
87 Parâmetros do Método: invállido para o campo de data do cheque
90 Sequência de validação de número de série inválida
180 Mensagem do aplicativo não programada. (Esta mensagem não é opcional e sim uma exigência da legislação e deverá ser programada para que o ECF seja liberado para a emissão de documentos fiscais. Para programar a mensagem use os métodos:Daruma_Registry_AplMensagem1(Índice 36) e método:Daruma_Registry_AplMensagem2(Índice 37).
181 Não é possivel realizar Redução Z entre 00:00am e 02:00am (Meia Noite e Duas da Manhã) nesta versão de firmware da FS600 (está limitação existe nas versões 1.1 pra baixo.
Assim tão logo enviamos um comando, enviamos outro para ver se foi bem sucedido e
caso contrário, então tratamos o erro pelo nosso aplicativo.
Isto devido a muitas rotinas para o TEF e PAF.

Abraços.

Re: ACBr - xHarbour

Enviado: 11 Mai 2010 10:58
por MARINI
Bom dia André:

Como está indo as alterações?

Tem previsão de liberação para testes?

Re: ACBr - xHarbour

Enviado: 27 Mai 2010 10:24
por anfm
Não tive mais tempo de trabalhar na DLL, mas outro usuário está trabalhando nela.

Para mais informações veja http://www.forumweb.com.br/foruns/index ... -net-c%23/

Re: ACBr - xHarbour

Enviado: 27 Mai 2010 22:45
por rochinha
Amiguinhos,

Pelo que pude perceber a ACBrECFDLL esta mais completa, contando inclusive com o comando de emissão de MFD.

Ainda não pude testar mas já baixei do link contido na página 2.

Re: ACBr - xHarbour

Enviado: 26 Jul 2010 00:50
por fladimir
Olá pessoal, alguém conseguiu usar o ACBRECFDll com o xHarbour... eu tentei baseado no exemplo do Rochinha modificando para o xHarbour, e o Maximo q consegui foi uma leitura X...

...se tento vender da erro na dll, o retorno do Define Modelo é 1, não entendi direito, estou começando agora a usar DLL pelo xHarbour, alguém poderia dar uma clareada no assunto...

...abaixo segue código modificado pra tentar vender, mas da erro e tb não entendi direito a lógica de algumas partes do mesmo como o primeiro IF do retorno do Define Modelo é =1 mas tenho q deixar !=1 pra poder continuar o código.

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
// ACBR - Funcoes Compativeis com ACBrECFDLL.DLL
//    Autor: Jose Carlos da Rocha
//     Data: 24/03/2009
//    Email: irochinha@itelefonica.com.br
//     MSN: fivolution@hotmail.com
//  Linguagem: xBase / Fivewin
// Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour
//
// Modificação em Julho 2010 // Fladimir
/////////////////////////////////////////////////////////////////////////////

//#include "fivewin.ch"
//#include "dll.ch"

Function main()

   public hDLL := LoadLibrary( "ACBrECFDLL.dll" )

   * aki o xDefineModelo foi colocado pra ver o q retornava da fun‡Æo abaixo, esta retornando 1
     xDefineModelo:=DllCall("ACBrECFDLL.dll",32,"DefineModelo", "Daruma", "COM1", 3)
   
    * Fiz a parte de baixo != 1 pq nao estava aceitando continuar se deixasse = 1, nao entendi direito o q seria o Retorno 1...
    * na Linha original nao tem essa comparacao tem somente se DefineModelo(...) como se esparesse um retorno Verdadeiro ou falso

    if DefineModelo( "Daruma", "COM1", 3 )!=1
      
		* Aki, esta voltando NIL e nao consegue seguir, por isso comentei as linhas abaixo
		nRetorno := AbreCupom()
	   
//		 if nRetorno > 0
//	      ? "Cupom nao pode ser aberto."
//	    endif
	
	    cTipoQtde      := "I"
	    nCasasDecimais := "2"
	    cCodigo        := "123456"
	    cDescricao     := "PRODUTO TESTE"
	    cAliquotaICMS  := "TA"
	    nQtdes         := 1
	    nValorUnitario := 2.50
	    nValorDesconto := 0
	    cUnidade       := "UN"
	    cTipoDescAcres  := "%"
	
          * Aki da erro.... tentei de varias formas, mudando aliquota, etc, mas o erro permanesse
	   nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes, nValorUnitario,	nValorDesconto, cUnidade, cTipoDescAcres)

	    if nRetorno > 0
	       Alert( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
	       CancelaCupom()
	    endif 
	    nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes, nValorUnitario*2 ) 
	    if nRetorno > 0
	       Alert( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
	       CancelaCupom()
	    endif 
	    nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes*3, nValorUnitario, 10, "LT", "%" )
	    if nRetorno > 0
	       alert( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
	       CancelaCupom()
	    endif 
	
	    nRetorno := SubTotalizaCupom( 0, "" )
	    if nRetorno > 0
	       alert( "SubTotalizaCupom. Erro ("+str(nRetorno)+")" )
	    endif
	
	    nRetorno := EfetuaPagamento( "01", 100, "DEVE VOLTAR TROCO DE 1,25" )
	    if nRetorno > 0
	       alert( "EfetuaPagamento. Erro ("+str(nRetorno)+")" )
	    endif
	
	    nRetorno := FechaCupom( "5Volution Fenix|http://www.5volution.com" )
	    if nRetorno > 0
	       alert( "FechaCupom. Erro ("+str(nRetorno)+")" )
	    endif
	
	    if alert( "Deseja cancelar este cupom?" )
	       nRetorno := CancelaCupom()
	    endif

	    if alert( "Deseja imprimir Leitura X?" )
   	    nRetorno := LeituraX()
	    endif

//    if alert( "Deseja visualizar log?" )
//       WinExec( "NOTEPAD LOG.TXT" )
//    endif

	    * Item := StrToInt(InputBox('Cancela Item','Digite a Número do Item:', '' ));
   	 * nRetorno := CancelaItemVendido( Item )
   else
      alert('Não foi possível ativar o ECF')
   endif

   FreeLibrary( hDLL )
 else
   alert( "ACBrECFDLL.dll nao foi carregada." )
 endif

return nil
                                                     

FUNCTION DefineModelo(cModeloStr, cPorta, nTimeout)
	DllCall("ACBrECFDLL.dll",32,"DefineModelo",cModeloStr,cPorta,nTimeout)
Return

FUNCTION IdentificaConsumidor( cCPF_CNPJ, cNome, cEndereco ) 
	DllCall("ACBrECFDLL.dll",32,"IdentificaConsumidor", cCPF_CNPJ, cNome, cEndereco ) 
Return

FUNCTION AbreCupom( cCPF_CNPJ, cNome, cEndereco) 
	DllCall("ACBrECFDLL.dll",32,"AbreCupom", cCPF_CNPJ, cNome, cEndereco) 
Return

FUNCTION VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtd, nValorUnitario, nDescontoPorc, cUnidade, cTipoDescontoAcrescimo)
	DllCall("ACBrECFDLL.dll",32,"VendeItem", cCodigo, cDescricao, cAliquotaICMS, nQtd, nValorUnitario, nDescontoPorc, cUnidade, cTipoDescontoAcrescimo)
Return

FUNCTION FechaCupom( cObservacao )
	DllCall("ACBrECFDLL.dll",32,"FechaCupom", cObservacao )
Return

FUNCTION SubtotalizaCupom( DescontoAcrescimo, MensagemRodape)
	DllCall("ACBrECFDLL.dll",32,"SubtotalizaCupom", DescontoAcrescimo, MensagemRodape)
Return

FUNCTION EfetuaPagamento( cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)
	DllCall("ACBrECFDLL.dll",32,"EfetuaPagamento", cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)
Return

FUNCTION LeituraX() 
	DllCall("ACBrECFDLL.dll",32,"LeituraX") 
Return

FUNCTION ReducaoZ( DataHora )
	DllCall("ACBrECFDLL.dll",32,"ReducaoZ", DataHora )
Return

FUNCTION CancelaCupom()
	DllCall("ACBrECFDLL.dll",32,"CancelaCupom")
Return

FUNCTION CancelaItemVendido( NumItem )
	DllCall("ACBrECFDLL.dll",32,"CancelaItemVendido", NumItem )
Return
Outra coisa, pesquisando vi q tem AcbrSintegra, AcbrSPed, AcbrFala, AcbrBalança, AcbrETC... alguém sabe como usar tipo semelhante ao AcbrECFDll ?

Abraço... e Sucesso!!!

:)Pos

Re: ACBr - xHarbour

Enviado: 27 Jul 2010 09:18
por rochinha
Amiguinho,

Use as funções assim:

Código: Selecionar todos

FUNCTION DefineModelo(cModeloStr, cPorta, nTimeout)
RETURN DllCall("ACBrECFDLL.dll",32,"DefineModelo",cModeloStr,cPorta,nTimeout)

FUNCTION IdentificaConsumidor( cCPF_CNPJ, cNome, cEndereco ) 
RETURN DllCall("ACBrECFDLL.dll",32,"IdentificaConsumidor", cCPF_CNPJ, cNome, cEndereco ) 

FUNCTION AbreCupom( cCPF_CNPJ, cNome, cEndereco) 
RETURN DllCall("ACBrECFDLL.dll",32,"AbreCupom", cCPF_CNPJ, cNome, cEndereco) 

FUNCTION VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtd, nValorUnitario, nDescontoPorc, cUnidade, cTipoDescontoAcrescimo)
RETURN DllCall("ACBrECFDLL.dll",32,"VendeItem", cCodigo, cDescricao, cAliquotaICMS, nQtd, nValorUnitario, nDescontoPorc, cUnidade, cTipoDescontoAcrescimo)

FUNCTION FechaCupom( cObservacao )
RETURN DllCall("ACBrECFDLL.dll",32,"FechaCupom", cObservacao )

FUNCTION SubtotalizaCupom( DescontoAcrescimo, MensagemRodape)
RETURN DllCall("ACBrECFDLL.dll",32,"SubtotalizaCupom", DescontoAcrescimo, MensagemRodape)

FUNCTION EfetuaPagamento( cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)
RETURN DllCall("ACBrECFDLL.dll",32,"EfetuaPagamento", cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)

FUNCTION LeituraX() 
RETURN DllCall("ACBrECFDLL.dll",32,"LeituraX") 

FUNCTION ReducaoZ( DataHora )
RETURN DllCall("ACBrECFDLL.dll",32,"ReducaoZ", DataHora )

FUNCTION CancelaCupom()
RETURN DllCall("ACBrECFDLL.dll",32,"CancelaCupom")

FUNCTION CancelaItemVendido( NumItem )
RETURN DllCall("ACBrECFDLL.dll",32,"CancelaItemVendido", NumItem )
Como a funções estão passando por uma critica que verifica o retorno:

...
nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes*3, nValorUnitario, 10, "LT", "%" )
if nRetorno > 0
alert( "Cancelando ...


E suas funções não estavam dando suporte a este retorno então nunca aconteciam.

Re: ACBr - xHarbour

Enviado: 27 Jul 2010 12:38
por fladimir
Obrigado Rochinha pela dica...

Abaixo código modificado, só q agora esta parando no Vende Item, analisei, inclusive comentei no código texto extraido do ForumWeb com link sobre detalhes internos da ACBRDll, mas mesmo assim não deu, tentei mudar para caracter onde era numerico pensando q poderia ser algum detalhe, mas nada, e o retorno do Erro segundo o ForumWeb é Nr. 8 = Erro Indefinido.

Testei numa Daruma FS-600, ela abre o cupom certo, mas não consegue vender o item e depois continuando o código cancela o cupom.

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
// ACBR - Funcoes Compativeis com ACBrECFDLL.DLL
//
//    Autor: Jose Carlos da Rocha
//     Data: 24/03/2009
//    Email: irochinha@itelefonica.com.br
//     MSN: fivolution@hotmail.com
//  Linguagem: xBase / Fivewin
// Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour
//
/////////////////////////////////////////////////////////////////////////////
//#include "fivewin.ch"
//#include "dll.ch"

Function main()

 public hDLL := LoadLibrary( "ACBrECFDLL.dll" )

 if hDLL > 0

* Se deixo com a linha original abaixo não retorna .T., se comparo o retorno como fiz no IF abaixo não da certo 
* somente pegando em uma variavel antes como fiz no xDefModelo... 
//	if DefineModelo( "Daruma", "COM1", 3 ) 
	xDefModelo := DefineModelo( "Daruma", "COM1", 3 )
	If xDefModelo = 1
      
		nRetorno := AbreCupom()
	   
		 if nRetorno > 0
	      ? "Cupom nao pode ser aberto."
	    endif
	
* Os comentários abaixo referem-se a textos extraidos do forum: http://www.forumweb.com.br/foruns/index.php?/topic/73095-acbrdll/

	    cCodigo    := "123456"
	    cDescricao := "PRODUTO TESTE"
	    cAliquota  := "T01"
	    nQtde      := 1   
	    nValor 		:= 2
	    nDesconto 	:= 0
	    cUnidade   := "UN"
		 cTipoDesc  := "V"

/*
AliquotaICMS - Texto com a representação da Alíquota do ICMS.
- As alíquotas podem ser informadas em Valor (mesmo sendo texto). Exemplos: "18", "2.46".
- Se no ECF existem alíquotas iguais para ICMS e ISS, use o sufixo "T" para informar que a alíquota é do ICMS ou "S" para alíquotas do ISS. Exemplo: "18T" = alíquota de 18% do ICMS; "2.5S" alíquota de 2,5% do ISS
- As alíquotas podem ser informadas em índice, de acordo com a Tabela de alíquotas do ECF, nesse caso use a letra "T", seguida da posição da Alíquota: Exemplo: "T01", "T10"
- Existem alíquotas internas do ECF para tratar produtos Isentos, nesse caso use: "FF" para Substituição Tributária, "NN" = Não incidência ou "II" = Isento

Qtd - Quantidade de Produtos a Vender.
Permite valores com até 3 casas decimais.
O ACBr verifica quantas casas decimais existem no valor informado e utiliza o
comando apropriado para o ECF, otimizando a impressão para Inteiros o 2 casas decimais, sempre que possível

ValorUnitario – Preço Unitário do produto vendido.
Permite valores com até 3 casas decimais.
O ACBr verifica quantas casas decimais existem no valor informado e utiliza o
comando apropriado para o ECF, otimizando a impressão para 2 casas decimais, sempre que possível.

DescontoPorc - Parâmetro opcional, Se necessário, informe a Porcentagem de Desconto a aplicar no item Vendido.
Dependendo do ECF o valor e porcentagem do Desconto será impresso no Cupom.

TipoDescontoAcrescimo - Pode ser preenchido com % - porcentagem para informar que o desconto do 
parametro DescontoPorc é em porcentagem ou preencher com V, para informar que o parametro 
DescontoPorc está como valor.

                 VendeItem( Codigo, cDescricao, AliquotaICMS : String ;
                            Qtd, ValorUnitario, DescontoPorc : Double ;
										 Unidade, TipoDescontoAcrescimo : String)

Vende Item - Possíveis Respostas:
0 - Tudo OK ;
1 - Parametro necessário não foi Informado
8 - Erro Indefinido
9 - Componente não foi inicializado ;
*/

		 nRetorno := VendeItem( cCodigo, cDescricao, cAliquota, nQtde, nValor, nDesconto, cUnidade, cTipoDesc )

* Retorna 8 que significa erro indefinido, agora como analisar isto ? 

	    if nRetorno > 0
	       Alert( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
	       CancelaCupom()
	    endif 


*  Comentei abaixo para ir por ETAPAS, preciso mprimeiro vender 1 item para continuar
/*
	    nRetorno := VendeItem( cCodigo, cDescricao, cAliquota, nQtdes, nValorUnitario*2 ) 
	    if nRetorno > 0
	       Alert( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
	       CancelaCupom()
	    endif 
	    nRetorno := VendeItem( cCodigo, cDescricao, cAliquota, nQtdes*3, nValorUnitario, 10, "LT", "%" )
	    if nRetorno > 0
	       alert( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
	       CancelaCupom()
	    endif 
	
	    nRetorno := SubTotalizaCupom( 0, "" )
	    if nRetorno > 0
	       alert( "SubTotalizaCupom. Erro ("+str(nRetorno)+")" )
	    endif
	
	    nRetorno := EfetuaPagamento( "01", 100, "DEVE VOLTAR TROCO DE 1,25" )
	    if nRetorno > 0
	       alert( "EfetuaPagamento. Erro ("+str(nRetorno)+")" )
	    endif
	
	    nRetorno := FechaCupom( "5Volution Fenix|http://www.5volution.com" )
	    if nRetorno > 0
	       alert( "FechaCupom. Erro ("+str(nRetorno)+")" )
	    endif
*/
	
	    if Ptalert( "Deseja cancelar este cupom?" )=1
	       nRetorno := CancelaCupom()
	    endif

	    if Ptalert( "Deseja imprimir Leitura X?" )=1
   	    nRetorno := LeituraX()
	    endif

//    if Ptalert( "Deseja visualizar log?" )=1
//       WinExec( "NOTEPAD LOG.TXT" )
//    endif

	    * Item := StrToInt(InputBox('Cancela Item','Digite a Número do Item:', '' ));
   	 * nRetorno := CancelaItemVendido( Item )
   else
      alert('Não foi possível ativar o ECF')
   endif

   FreeLibrary( hDLL )
 else
   alert( "ACBrECFDLL.dll nao foi carregada." )
 endif

return nil
                                                     

FUNCTION DefineModelo(cModeloStr, cPorta, nTimeout)
RETURN DllCall("ACBrECFDLL.dll",32,"DefineModelo",cModeloStr,cPorta,nTimeout)

FUNCTION IdentificaConsumidor( cCPF_CNPJ, cNome, cEndereco ) 
RETURN DllCall("ACBrECFDLL.dll",32,"IdentificaConsumidor", cCPF_CNPJ, cNome, cEndereco ) 

FUNCTION AbreCupom( cCPF_CNPJ, cNome, cEndereco) 
RETURN DllCall("ACBrECFDLL.dll",32,"AbreCupom", cCPF_CNPJ, cNome, cEndereco) 

FUNCTION VendeItem( cCodigo, cDescricao, cAliquota, nQtde, nValor, nDesconto, cUnidade, cTipoDesc)
RETURN DllCall("ACBrECFDLL.dll",32,"VendeItem", cCodigo, cDescricao, cAliquota, nQtde, nValor, nDesconto, cUnidade, cTipoDesc)

FUNCTION FechaCupom( cObservacao )
RETURN DllCall("ACBrECFDLL.dll",32,"FechaCupom", cObservacao )

FUNCTION SubtotalizaCupom( DescontoAcrescimo, MensagemRodape)
RETURN DllCall("ACBrECFDLL.dll",32,"SubtotalizaCupom", DescontoAcrescimo, MensagemRodape)

FUNCTION EfetuaPagamento( cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)
RETURN DllCall("ACBrECFDLL.dll",32,"EfetuaPagamento", cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)

FUNCTION LeituraX() 
RETURN DllCall("ACBrECFDLL.dll",32,"LeituraX") 

FUNCTION ReducaoZ( DataHora )
RETURN DllCall("ACBrECFDLL.dll",32,"ReducaoZ", DataHora )

FUNCTION CancelaCupom()
RETURN DllCall("ACBrECFDLL.dll",32,"CancelaCupom")

FUNCTION CancelaItemVendido( NumItem )
RETURN DllCall("ACBrECFDLL.dll",32,"CancelaItemVendido", NumItem )


Abraço e Sucesso....

:)Pos

Re: ACBr - xHarbour

Enviado: 29 Jul 2010 12:51
por fladimir
Alguém pode ajudar ?

X:)

Re: ACBr - xHarbour

Enviado: 01 Ago 2010 21:17
por fladimir
É pessoal não consegui fazer com que desse certo, infelizmente não sei o que pode ser... vamos continuar trabalhando com o ACBRMonitor....

Obrigado pelas colaborações...

Apesar de ter tentando, pesquisado nos blogs, etc e não ter conseguido, talvez pela minha falta de conhecimento no mundo das Dlls, e outras linguagens, não vou desistir, se descobrir algo, volto aqui e posto aos colegas....


Sucesso!!!

:)Pos

Re: ACBr - xHarbour

Enviado: 02 Ago 2010 12:15
por rochinha
Amiguinho,

Inicialmente use os conteudos padrão para as variaveis que passei e veja se consegui ir até o final:

Código: Selecionar todos

         cTipoQtde      := "I"
         nCasasDecimais := "2"
         cCodigo        := "123456"
         cDescricao     := "PRODUTO TESTE"
         cAliquotaICMS  := "II"
         nQtdes         := 1
         nValorUnitario := 2.50
         nValorDesconto := 0
         cUnidade       := "UN"
         cTipoDesconto  := "%"

        nRetorno := VendeItem( cCodigo, cDescricao, cAliquotaICMS, nQtdes, nValorUnitario ) //, nValorDesconto, cUnidade, cTipoDesconto )
        ? nRetorno
Teste com a DLL que esta em meu site

Re: ACBr - xHarbour

Enviado: 02 Ago 2010 23:24
por fladimir
Rochinha, eu testei e após abrir o cupom ao entrar no VendeItem da a tela de erro:

Imagem

O código esta conforme vc mencionou... o Retorno vem IGUAL a ZERO (0) mas permece a tela de erro e NÃO Vende o Item para poder continuar.,
será q não é o caso do Pchar comentado pelo ANFB no início do tópico q ele iria mudar a Dll ? Será q ele mudou?

No ForumACBr, fiz uma postagem sobre o assunto em: http://www.forumweb.com.br/foruns/index ... ntry349626

Onde o colega tentou ajudar indicando o seguinte tópico: http://www.forumweb.com.br/foruns/index ... 8C__st__40

Mas baixei as dlls, e analisei, mas não obtive avanço...

Código: Selecionar todos

/////////////////////////////////////////////////////////////////////////////
//
// ACBR - Funcoes Compativeis com ACBrECFDLL.DLL
//
//    Autor: Jose Carlos da Rocha
//     Data: 24/03/2009
//    Email: irochinha@itelefonica.com.br
//     MSN: fivolution@hotmail.com
//  Linguagem: xBase / Fivewin
// Plataformas: DOS, Windows
// Requerimentos: Harbour/xHarbour
//
/////////////////////////////////////////////////////////////////////////////
//#include "fivewin.ch"
//#include "dll.ch"
#include "common.ch"
#include "inkey.ch"

static Static1
static Static2:= ""
static Static3:= {}

Function main()

 public hDLL := LoadLibrary( "ACBrECFDLL.dll" )
altd()
 if hDLL > 0

* Se deixo com a linha original abaixo não retorna .T., se comparo o retorno como fiz no IF abaixo não da certo 
* somente pegando em uma variavel antes como fiz no xDefModelo... 
//	if DefineModelo( "Daruma", "COM1", 3 ) 
	xDefModelo := DefineModelo( "Daruma", "COM1", 3 )
	If xDefModelo = 1
      
		nRetorno := AbreCupom()
	   
		 if nRetorno > 0
	      ? "Cupom nao pode ser aberto."
 	       CancelaCupom()
	    endif
	
* Os comentários abaixo referem-se a textos extraidos do forum: http://www.forumweb.com.br/foruns/index.php?/topic/73095-acbrdll/

	    Codigo      		  		:= '123456'
	    Descricao   		  		:= 'Teste de Produto'
	    AliquotaICMS		  		:= 'II'
	    Qtd          	 			:= 1   
	    ValorUnitario	 			:= 2.50
	    DescontoPorc 				:= 0
		 Unidade   		    		:= "UN"
		 TipoDescontoAcrescimo  := "%"
		 cTipoQtde      := "I"
       nCasasDecimais := "2"

   		Retorno := VendeItem(  Codigo,  Descricao,  AliquotaICMS,  Qtd, ValorUnitario, DescontoPorc, Unidade, TipoDescontoAcrescimo)
        ? Retorno

/*
			AliquotaICMS - Texto com a representação da Alíquota do ICMS.
			- As alíquotas podem ser informadas em Valor (mesmo sendo texto). Exemplos: "18", "2.46".
			- Se no ECF existem alíquotas iguais para ICMS e ISS, use o sufixo "T" para informar que a alíquota é do ICMS ou "S" para alíquotas do ISS. Exemplo: "18T" = alíquota de 18% do ICMS; "2.5S" alíquota de 2,5% do ISS
			- As alíquotas podem ser informadas em índice, de acordo com a Tabela de alíquotas do ECF, nesse caso use a letra "T", seguida da posição da Alíquota: Exemplo: "T01", "T10"
			- Existem alíquotas internas do ECF para tratar produtos Isentos, nesse caso use: "FF" para Substituição Tributária, "NN" = Não incidência ou "II" = Isento
			
			Qtd - Quantidade de Produtos a Vender.
			Permite valores com até 3 casas decimais.
			O ACBr verifica quantas casas decimais existem no valor informado e utiliza o
			comando apropriado para o ECF, otimizando a impressão para Inteiros o 2 casas decimais, sempre que possível
			
			ValorUnitario – Preço Unitário do produto vendido.
			Permite valores com até 3 casas decimais.
			O ACBr verifica quantas casas decimais existem no valor informado e utiliza o
			comando apropriado para o ECF, otimizando a impressão para 2 casas decimais, sempre que possível.
			
			DescontoPorc - Parâmetro opcional, Se necessário, informe a Porcentagem de Desconto a aplicar no item Vendido.
			Dependendo do ECF o valor e porcentagem do Desconto será impresso no Cupom.
			
			TipoDescontoAcrescimo - Pode ser preenchido com % - porcentagem para informar que o desconto do 
			parametro DescontoPorc é em porcentagem ou preencher com V, para informar que o parametro 
			DescontoPorc está como valor.

         VendeItem( Codigo, cDescricao, AliquotaICMS : String ;
                    Qtd, ValorUnitario, DescontoPorc : Double ;
                    Unidade, TipoDescontoAcrescimo : String)

			Vende Item - Possíveis Respostas:
			0 - Tudo OK ;
			1 - Parametro necessário não foi Informado
			8 - Erro Indefinido
			9 - Componente não foi inicializado ;
*/
		 * Retorna 8 que significa erro indefinido, agora como analisar isto ? 

	    If Retorno > 0
	       Alert( "Cancelando cupom. Erro ("+str(nRetorno)+")" )
	       CancelaCupom()
	    Endif 
   Else
      Alert('Não foi possível ativar o ECF')
   Endif

   FreeLibrary( hDLL )
   
 Else
   Alert( "ACBrECFDLL.dll nao foi carregada." )
 Endif

Return nil
                                                     

FUNCTION DefineModelo(cModeloStr, cPorta, nTimeout)
RETURN DllCall("ACBrECFDLL.dll",32,"DefineModelo",cModeloStr,cPorta,nTimeout)

FUNCTION IdentificaConsumidor( cCPF_CNPJ, cNome, cEndereco ) 
RETURN DllCall("ACBrECFDLL.dll",32,"IdentificaConsumidor", cCPF_CNPJ, cNome, cEndereco ) 

FUNCTION AbreCupom( cCPF_CNPJ, cNome, cEndereco) 
RETURN DllCall("ACBrECFDLL.dll",32,"AbreCupom", cCPF_CNPJ, cNome, cEndereco) 

FUNCTION VendeItem( Codigo, Descricao, AliquotaICMS, Qtd, ValorUnitario, DescontoPorc, Unidade, TipoDescontoAcrescimo)
RETURN DllCall("ACBrECFDLL.dll",32,"VendeItem", Codigo, Descricao, AliquotaICMS, Qtd, ValorUnitario, DescontoPorc, Unidade, TipoDescontoAcrescimo)

FUNCTION FechaCupom( cObservacao )
RETURN DllCall("ACBrECFDLL.dll",32,"FechaCupom", cObservacao )

FUNCTION SubtotalizaCupom( DescontoAcrescimo, MensagemRodape)
RETURN DllCall("ACBrECFDLL.dll",32,"SubtotalizaCupom", DescontoAcrescimo, MensagemRodape)

FUNCTION EfetuaPagamento( cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)
RETURN DllCall("ACBrECFDLL.dll",32,"EfetuaPagamento", cCodFormaPagto, nValor, cObservacao, lImprimeVinculado)

FUNCTION LeituraX() 
RETURN DllCall("ACBrECFDLL.dll",32,"LeituraX") 

FUNCTION ReducaoZ( DataHora )
RETURN DllCall("ACBrECFDLL.dll",32,"ReducaoZ", DataHora )

FUNCTION CancelaCupom()
RETURN DllCall("ACBrECFDLL.dll",32,"CancelaCupom")

FUNCTION CancelaItemVendido( NumItem )

Return DllCall("ACBrECFDLL.dll",32,"CancelaItemVendido", NumItem )
Pode ser o meu xHarbour 1.2.1 ?

Sucesso!!!

Re: ACBr - xHarbour

Enviado: 03 Ago 2010 10:43
por rochinha
Amiguinho,

As funções, quando bem sucedidas nos comandos retornam 0, 8 tem erro e 9 a .DLL não foi carregada.

Sempre verifique o handle em hDLL e veja se o mesmo é diferente de 0. Maior que Zero esta carregada.

A dll que devemos usar com Harbour não é a .NET, a que eu disponibilizei é a mais antiga e permite um trabalho legal com Harbour.

Nos ultimos tempos fiz meus testes nestas aqui.

A primeira e uma mais recente.

A primeira tem poucos comandos já a segunda tem muitos comandos mas não consegui obter resultado nas outras funções.

Para obter exito sempre com as .DLL eu abro ela somente no inicio do sistema e não no inicio do módulo de impressão do cupom.

Vejo que voce usa:
DllCall("ACBrECFDLL.dll",32,"AbreCupom", cCPF_CNPJ, cNome, cEndereco)

Para a usar o handle da biblioteca assim:
DllCall( hDLL,32,"AbreCupom", cCPF_CNPJ, cNome, cEndereco)

Faça uso destas .DLL do arquivo .RAR

No que tamge a praticidade esta .DLL vem bem a calhar, mas se pudermos usar a que possui comandos extras e é mais compativel com Delphi melhor.

Esta .DLL mais recente encontrei na internet e como sou muito xereta, não sei o local exato, mas vou tentar encontrar denovo para saber quem a esta atualizando.

Re: ACBr - xHarbour

Enviado: 04 Ago 2010 03:28
por fladimir
Obrigado Rochinha, mas não consegui testar com a do link pois o mesmo esta quebrado.

Poderia ser o meu xHarbour 1.2.1?

Mudei de xHarbour 1.2.1 para Harbour 2.0 para testes e tentei compilar o fonte q estamos discutindo da seguinte maneira:

hbmk2 -trace -odll @dll.hbp

Onde dll.hbp contém:

Código: Selecionar todos

dll.prg
-lxhb
-lminhalib
mas não reconhece LoadLibrary(), dllcall() e freelibrary()


Sds.
Sucesso!!!

Re: ACBr - xHarbour

Enviado: 04 Ago 2010 08:33
por Toledo
fladimir escreveu:Obrigado Rochinha, mas não consegui testar com a do link pois o mesmo esta quebrado.
Fladimir, o Rochinha ta trabalhando demais e acabou esquecendo do endereço do servidor dele... o correto é:

http://www.5volution.com.br/downloads/f ... ecfdll.rar

Abraços,

Re: ACBr - xHarbour

Enviado: 04 Ago 2010 09:45
por Itamar M. Lins Jr.
Ola!
mas não reconhece LoadLibrary(), dllcall() e freelibrary()

Código: Selecionar todos

hDll:=DllLoad("rmchart.dll")
nRetVal := DllCall(hDll,DLL_OSAPI,"RMC_DRAW2PRINTER",1001,0,10,5,190,150)
DllUnload( hDLL )
Use as equivalentes do Harbour.

Código: Selecionar todos

/*
 * $Id: testdll.prg 14688 2010-06-04 13:32:23Z vszakats $
 */

/*
 * Harbour Project source code:
 *    DLL call demonstration.
 *
 * Copyright 2008 Viktor Szakats (harbour.01 syenar.hu)
 * www - http://harbour-project.org
 *
 */

#include "simpleio.ch"

#include "dll.ch"

#define MAX_PATH 260

PROCEDURE Main()
   LOCAL hDLL
   LOCAL cData

   #if defined( __PLATFORM__WINDOWS )

   IF hb_FileExists( "pscript.dll" )
      hDLL := DllLoad( "pscript.dll" )
      cData := Space( 24 )
      DllCall( hDll, DLL_OSAPI, "PSGetVersion", @cData )
      ? ">" + cData + "<"
      DllUnload( hDLL )

      // ; Testing failure 1
      hDLL := DllLoad( "pscript.dll" )
      cData := Space( 24 )
      DllCall( hDll, DLL_OSAPI, "PSGet__Version", @cData )
      ? ">" + cData + "<"
      DllUnload( hDLL )
   ENDIF

   // ; Testing failure 2
   hDLL := DllLoad( "nothere.dll" )
   cData := Space( 24 )
   DllCall( hDll, NIL, "PSGetVersion", @cData )
   ? cData
   DllUnload( hDLL )

   #define MB_OK                       0x00000000
   #define MB_OKCANCEL                 0x00000001
   #define MB_ABORTRETRYIGNORE         0x00000002
   #define MB_YESNOCANCEL              0x00000003
   #define MB_YESNO                    0x00000004
   #define MB_RETRYCANCEL              0x00000005
   #define MB_CANCELTRYCONTINUE        0x00000006
   #define MB_ICONHAND                 0x00000010
   #define MB_ICONQUESTION             0x00000020
   #define MB_ICONEXCLAMATION          0x00000030
   #define MB_ICONASTERISK             0x00000040
   #define MB_USERICON                 0x00000080
   #define MB_DEFBUTTON2               0x00000100
   #define MB_DEFBUTTON3               0x00000200
   #define MB_DEFBUTTON4               0x00000300
   #define MB_SYSTEMMODAL              0x00001000
   #define MB_TASKMODAL                0x00002000
   #define MB_HELP                     0x00004000
   #define MB_NOFOCUS                  0x00008000
   #define MB_SETFOREGROUND            0x00010000
   #define MB_DEFAULT_DESKTOP_ONLY     0x00020000
   #define MB_TOPMOST                  0x00040000
   #define MB_RIGHT                    0x00080000
   #define MB_RTLREADING               0x00100000

   ? "MsgBox:", DllCall( "user32.dll", DLL_OSAPI, "MessageBoxA", 0, "Hello world!", "Harbour sez", hb_bitOr( MB_OKCANCEL, MB_ICONEXCLAMATION, MB_HELP ) )

   /* Force Windows not to show dragged windows contents */

   #define SPI_SETDRAGFULLWINDOWS 37

   ? "Full content drag: OFF"
   ? DllCall( "user32.dll", DLL_OSAPI, "SystemParametersInfoA", SPI_SETDRAGFULLWINDOWS, 0, 0, 0 )
   Inkey( 0 )

   ? "Full content drag: ON"
   ? DllCall( "user32.dll", DLL_OSAPI, "SystemParametersInfoA", SPI_SETDRAGFULLWINDOWS, 1, 0, 0 )
   Inkey( 0 )

   #define CSIDL_APPDATA               0x001a /* <username>\Application Data */
   #define CSIDL_ADMINTOOLS            0x0030 /* <username>\Start Menu\Programs\Administrative Tools */

   ? "DLLCALL"
   cData := Space( MAX_PATH )
   ? DllCall( "shell32.dll", DLL_OSAPI, "SHGetFolderPathA", 0, CSIDL_ADMINTOOLS, 0, 0, @cData )
   ? "REF:", cData

   ? "DLLCALL"
   cData := Space( MAX_PATH )
   ? DllCall( "shell32.dll", DLL_OSAPI, "SHGetFolderPathW", 0, CSIDL_ADMINTOOLS, 0, 0, @cData )
   ? "REF:", cData

   #endif

   RETURN
Saudações,
Itamar M. Lins Jr.