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_fhandle                Ora_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);
    aliquota    varchar2(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        := '000000000000';
             descricao     := 'Cancelamento';
             aliquota      :=  '0000';
             tipoqtdade    :=  'I';
             quantidade    :=  '0000';
             casasdecimais := '2';
             valorunitario := '00000000';
             tipodesconto  := '%';
             valordesconto :=  '0000';
             aux:=impfiscal.VendeItem(codigo,descricao,aliquota,tipoqtdade,q
uantidade,casasdecimais,valorunitario,tipodesconto,valordesconto);
       -- Finaliza a entrada de itens
             acrescimodesconto := 'D';
             tipoacrescimodesconto := '$';
             valoracrescimodesconto := '00000000000,00';
             valorpago := '00000000000,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...

  --- Mauricio Roberto Maciel
  <[EMAIL PROTECTED]> escreveu:

  > Qual dlll vc está usando?
  >   -----Mensagem original-----
  >   De: oracle_br@yahoogrupos.com.br
  > [mailto:[EMAIL PROTECTED]
  > nome de Eduardo Gimenes
  >   Enviada em: sexta-feira, 11 de agosto de 2006
  > 16:53
  >   Para: oracle_br@yahoogrupos.com.br
  >   Assunto: [oracle_br] Impressora Fiscal Daruma com
  > Form 6i
  >
  >
  >   Olá pessoal estou trabalhando tentando trabalhar
  > com
  >   uma impressora Daruma FS 345 e forms 6i. Estou
  >   utilizando o FFigen para gerar a PLL porem sempre
  > que
  >   tento testar a biblioteca ele sai fora e nao me
  > deixa
  >   continuar.
  >   Alguem faz ideia do que alterar... ou mesmo possui
  >   alguma pll que possa me ajudar?
  >
  >   Ambiente Windows XP com Oracle 8.1.7.
  >
  >   Obrigado
  >
  >   Eduardo
  >
  >
  >
  >
  >
  >
  >
  >
  >
  >
  _______________________________________________________
  >   Você quer respostas para suas perguntas? Ou você
  > sabe muito e quer
  > compartilhar seu conhecimento? Experimente o Yahoo!
  > Respostas !
  >   http://br.answers.yahoo.com/
  >
  >
  >
  > [As partes desta mensagem que não continham texto
  > foram removidas]
  >
  >




  _______________________________________________________
  Novidade no Yahoo! Mail: receba alertas de novas mensagens no seu celular.
Registre seu aparelho agora!
  http://br.mobile.yahoo.com/mailalertas/


  


[As partes desta mensagem que não continham texto foram removidas]



--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

OPORTUNIDADES DE TRABALHO, VAGAS, EMPREGOS PARA PROFISSIONAIS ORACLE VISITE: 
http://www.oraclebr.com.br/
__________________________________________________________________
Seu banco Oracle retornou erro? Ora-??? Pesquise aqui: 
http://www.oraclebr.com.br/  
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a