Eis um modelo de leitura X para Bematech('BEMAFI32.DLL), mude conforme a sua
dll precisa:
Execute os seguintes passos:
1-) Crie as packages:
PACKAGE IMPFISCAL IS
-- Funcao que efetua Leitura X
FUNCTION LeituraX RETURN PLS_INTEGER;
end;
PACKAGE BODY IMPFISCAL IS
dll_handle Ora_Ffi.Libhandletype;
Leiturax_fhandleOra_Ffi.Funchandletype;
arch_dll varchar2(100);
--
-- Funcao que efetua LEITURA X
--
FUNCTION ff_LeituraX(fhandle Ora_Ffi.FUNCHANDLETYPE)
RETURN PLS_INTEGER;
PRAGMA interface(C,ff_LeituraX,11265);
FUNCTION LeituraX RETURN PLS_INTEGER IS
BEGIN
RETURN(ff_LeituraX(LeituraX_fhandle));
END;
begin
-- inicializacao do package. Registra as funcoes externas para uso dentro
do forms
-- abre o arquivo de dll como um ponteiro de biblioteca
dll_handle:=Ora_Ffi.Load_Library('C:\WINDOWS\SYSTEM\','BEMAFI32.DLL');
if Ora_Ffi.Is_Null_Ptr(dll_handle)
then -- se nao achou o arquivo.
message('IMPFISCAL: Biblioteca não encontrada - '||arch_dll);
raise form_trigger_failure;
end if;
---Registra a função Bematech_FI_LeituraX
LeituraX_fhandle:=Ora_Ffi.Register_Function(dll_handle,'Bematech_FI_Leitu
raX',Ora_Ffi.Pascal_Std);
if Ora_Ffi.Is_Null_Ptr(LeituraX_fhandle)
then
message('IMPFISCAL: Função não encontrada -
Bematech_FI_LeituraX');
raise form_trigger_failure;
end if;
Ora_Ffi.Register_Return(LeituraX_fhandle,Ora_Ffi.C_Int);
---
END;
PACKAGE cupom IS
-- efetua leitura X
PROCEDURE leiturax;
END;
PACKAGE BODY cupom IS
-- efetua leitura X
PROCEDURE leiturax IS
alerta number(5);
aux pls_integer;
codigo varchar2(5);
descricao varchar2(29);
aliquotavarchar2(5);
tipoqtdade varchar2(1);
quantidade varchar2(4);
casasdecimais varchar2(1);
valorunitario varchar2(8);
tipodesconto varchar2(1);
valordesconto varchar2(8);
valorpago varchar2(14);
formaPagamento varchar2(16);
acrescimodesconto varchar2(1);
tipoacrescimodesconto varchar2(1);
valoracrescimodesconto varchar2(14);
mensagem varchar2(490);
BEGIN
-- tenta fazer a leitura
if impfiscal.LeituraX 1
then
raise form_trigger_failure; -- se nao deu certo entao vai
para a exception
end if;
set_application_property(cursor_style,'DEFAULT');
set_alert_property('alert_nob',alert_message_text,'Leitura X Efetuada');
alerta:=show_alert('alert_nob');
exception
when others
then
set_application_property(cursor_style,'DEFAULT');
-- emite um lancamento falso pois se nao foi emitido nenhum o
cupom nao fecha
codigo:= '';
descricao := 'Cancelamento';
aliquota := '';
tipoqtdade:= 'I';
quantidade:= '';
casasdecimais := '2';
valorunitario := '';
tipodesconto := '%';
valordesconto := '';
aux:=impfiscal.VendeItem(codigo,descricao,aliquota,tipoqtdade,q
uantidade,casasdecimais,valorunitario,tipodesconto,valordesconto);
-- Finaliza a entrada de itens
acrescimodesconto := 'D';
tipoacrescimodesconto := '$';
valoracrescimodesconto := '000,00';
valorpago := '000,00';
formapagamento := 'DINHEIRO';
mensagem := 'Cancelamento';
aux:=impfiscal.FechaCupom(FormaPagamento,
acrescimodesconto,
tipoacrescimodesconto,
valoracrescimodesconto,
valorpago,
mensagem);
aux:=impfiscal.CancelaCupom;
aux:=impfiscal.LeituraX;
set_alert_property('alert_nob',alert_message_text,'Leitura X
Efetuada.');
alerta:=show_alert('alert_nob');
END;
2-) Dentro de um botao ou trigger dispare para executar a funcao:
declare
FFI_Error BOOLEAN;
FFI_Error_Text VARCHAR2(2000);
FFI_Error_Code NUMBER;
aux pls_integer;
begin
CUPOM.leiturax;
EXCEPTION
WHEN OTHERS THEN
-- Place the first error on the TOOL_ERR stack into the package header
variables available for it.
FFI_ERROR := TRUE;
FFI_Error_Text := TOOL_ERR.MESSAGE;
FFI_Error_Code := TOOL_ERR.CODE;
FOR iErrors IN 1..TOOL_ERR.NERRORS LOOP
Message(TOOL_ERR.MESSAGE);
TOOL_ERR.POP;
END LOOP;
TOOL_ERR.CLEAR;
END;
-Mensagem original-
De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
nome de Eduardo Gimenes
Enviada em: sábado, 12 de agosto de 2006 09:24
Para: oracle_br@yahoogrupos.com.br
Assunto: Re: RES: [oracle_br] Impressora Fiscal Daruma com Form 6i
Olá estou usando a Daruma32.dll...
Existe alguma outra??
Valeu