Ir al contenido


Foto

Facturas A y B en impresora fiscal Hasar SMH/P330


  • Por favor identifícate para responder
9 respuestas en este tema

#1 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 25 abril 2013 - 11:21

Buenas, cumpliendo con lo que había dicho anteriormente pego el código que permite hacer las facturas A y B con una Hasar.
Recuerdo que esto usa el componente OCX de Hasar, de ahí que aparece en el código "hasar1", hay algunas consultas a la BD (Firebird 2.1), acceso a un archivo .ini para traer datos de la fiscal y alguna que otra cartelería.

Espero les sirva a todos.



delphi
  1. //Factura A
  2. procedure TFrmPpal.IBAlertadorEventAlert(Sender: TObject; EventName: String;
  3.   EventCount: Integer; var CancelAlerts: Boolean);
  4. var
  5.   puerto:string;
  6.   ini:TIniFile;
  7.   factura:TEnc_egreso;
  8. begin
  9.   with DataModule2, IBConsulta, factura do
  10.   try
  11.     terminarTransaccion;
  12.     IBTransaccion.StartTransaction;
  13.     buscar_cliente_factura(ibconsulta, 'FACTURA_A');
  14.   //Cargamos el registro con los datos del documento
  15.     //cod_egreso:=Fields[0].asInteger;
  16.     cod_egreso:=FieldByName('cod_egreso').AsInteger;
  17.     nombre_cliente:=FieldByName('nombre_cliente').AsString;
  18.     domicilio:=FieldByName('domicilio_cliente').AsString;
  19.     responsabilidad_iva:=FieldByName('responsabilidad_iva_cliente').AsString;
  20.     tipo_documento:=FieldByName('tipo_documento').AsString;
  21.     numero_documento:=FieldByName('numero_documento').AsString; //Sería el cuit
  22.     pto_vta_egreso:=FieldByName('pto_vta_egreso').AsInteger; //el pto de venta
  23.   //Abrimos la fiscal
  24.     abrir_fiscal(archivoINI);
  25.  
  26.     Hasar1.PrecioBase:=False; //TRUE: CON BASE IMPONIBLE; FALSE: CON PRECIO FINAL, IMPUESTOS INCLUIDOS
  27.     Hasar1.Comenzar;
  28.     Hasar1.TratarDeCancelarTodo;
  29.     Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento),
  30.       obtener_responsabilidad_iva(responsabilidad_iva), domicilio);
  31.     //Hasar1.DescripcionesLargas:=false; //trunca las descripciones largas
  32.     Hasar1.AbrirComprobanteFiscal(FACTURA_A);
  33.     Buscar_detalle_factura_A(ibconsulta, cod_egreso);
  34.     with ibconsulta do
  35.     begin
  36.       first;
  37.       while not eof do
  38.       begin                //DESCR CANT MONTO IVA IMPUESTOS INTERNOS
  39.         hasar1.ImprimirItem(FieldByName('nombre_existencia').AsString, FieldByName('cantidad_egreso').AsFloat,
  40.           FieldByName('precio_final').AsFloat, FieldByName('porcentaje_alicuota').AsFloat, 0);
  41.         next;
  42.       end;
  43.     end;
  44.     hasar1.Subtotal(true);
  45.   //Imprimimos las formas de pago del cliente
  46.     Buscar_formas_pago_cliente(IBConsulta, cod_egreso);
  47.     with IBConsulta do
  48.     begin
  49.       First;
  50.       while not Eof do
  51.       begin
  52.         hasar1.ImprimirPago(FieldByName('tipo_forma_cobro').AsString,
  53.           FieldByName('monto_forma_cobro').AsFloat);
  54.         Next;
  55.       end;
  56.     end;
  57.     Hasar1.CerrarComprobanteFiscal;
  58.   //Me devuelve el nro de comprobante
  59.     nro_egreso:=StrToInt(Hasar1.Respuesta[3]);
  60.     registrar_numero_comprobante_egreso(nro_egreso, cod_egreso, IBConsulta);
  61.     Hasar1.Finalizar;
  62.     IBTransaccion.Commit;
  63.     CoolTrayIcon1.ShowBalloonHint('Impresora fiscal', 'Factura A, Nº '
  64.       + LPad(pto_vta_egreso, 4, '0') + ' - ' + LPad(nro_egreso, 8, '0') + ' en la Impresora fiscal...',
  65.       bitInfo, 10);
  66.   except
  67.     on E:Exception do
  68.     begin
  69.       terminarTransaccion;
  70.       merrores(e, 'Error en la impresión de datos.', 'Impresión Factura A');
  71.     end;
  72.   end;
  73. end;
  74.  
  75. //Factura B
  76. procedure TFrmPpal.evFacturaBEventAlert(Sender: TObject; EventName: String;
  77.   EventCount: Integer; var CancelAlerts: Boolean);
  78. var
  79.   puerto:string;
  80.   ini:TIniFile;
  81.   factura:TEnc_egreso;
  82. begin
  83.   with DataModule2, IBConsulta, factura do
  84.   try
  85.     terminarTransaccion;
  86.     IBTransaccion.StartTransaction;
  87.     buscar_cliente_factura(ibconsulta, 'FACTURA_B');
  88.   //Recuperamos los datos de la factura
  89.     //cod_egreso:=Fields[0].asInteger;
  90.     cod_egreso:=FieldByName('cod_egreso').AsInteger;
  91.     nombre_cliente:=FieldByName('nombre_cliente').AsString;
  92.     domicilio:=Trim(FieldByName('domicilio_cliente').AsString);
  93.     responsabilidad_iva:=FieldByName('responsabilidad_iva_cliente').AsString;
  94.     tipo_documento:=FieldByName('tipo_documento').AsString;
  95.     numero_documento:=FieldByName('numero_documento').AsString; //Sería el cuit
  96.     pto_vta_egreso:=FieldByName('pto_vta_egreso').AsInteger; //
  97.   //Abrimos la fiscal
  98.     abrir_fiscal(archivoINI);
  99.     Hasar1.PrecioBase:=False; //TRUE: CON BASE IMPONIBLE; FALSE: CON PRECIO FINAL, IMPUESTOS INCLUIDOS
  100.     Hasar1.Comenzar;
  101.     Hasar1.TratarDeCancelarTodo;
  102.     if domicilio <> EmptyStr then
  103.     begin
  104.       Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento),
  105.         obtener_responsabilidad_iva(responsabilidad_iva), domicilio);
  106.     end
  107.     else
  108.     begin
  109.     //No acepta una variable con un espacio, así que le mandamos el espacio directamente.
  110.       Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento),
  111.         obtener_responsabilidad_iva(responsabilidad_iva), ' ');
  112.     end;
  113.     //Hasar1.DescripcionesLargas:=false; //trunca las descripciones largas
  114.     Hasar1.AbrirComprobanteFiscal(FACTURA_B);
  115.     Buscar_detalle_factura_A(IBConsulta, cod_egreso);
  116.     with IBConsulta do
  117.     begin
  118.       first;
  119.       while not eof do
  120.       begin                //DESCR CANT MONTO IVA IMPUESTOS INTERNOS
  121.         hasar1.ImprimirItem(FieldByName('nombre_existencia').AsString, FieldByName('cantidad_egreso').AsFloat,
  122.           FieldByName('precio_final').AsFloat, FieldByName('porcentaje_alicuota').AsFloat, 0);
  123.         next;
  124.       end;
  125.     end;
  126.     hasar1.Subtotal(true);
  127.   //Imprimimos las formas de pago del cliente
  128.     Buscar_formas_pago_cliente(IBConsulta, cod_egreso);
  129.     with IBConsulta do
  130.     begin
  131.       First;
  132.       while not Eof do
  133.       begin
  134.         hasar1.ImprimirPago(FieldByName('tipo_forma_cobro').AsString,
  135.           FieldByName('monto_forma_cobro').AsFloat);
  136.         Next;
  137.       end;
  138.     end;
  139.     Hasar1.CerrarComprobanteFiscal;
  140.   //Me devuelve el nro de comprobante
  141.     nro_egreso:=StrToInt(Hasar1.Respuesta[3]);
  142.     registrar_numero_comprobante_egreso(nro_egreso, cod_egreso, IBConsulta);
  143.     Hasar1.Finalizar;
  144.     IBTransaccion.Commit;
  145.     CoolTrayIcon1.ShowBalloonHint('Impresora fiscal', 'Factura B, Nº '
  146.       + LPad(pto_vta_egreso, 4, '0') + ' - ' + LPad(nro_egreso, 8, '0') + ' en la Impresora fiscal...',
  147.       bitInfo, 10);
  148.   except
  149.     on E:Exception do
  150.     begin
  151.       terminarTransaccion;
  152.       merrores(e, 'Error en la impresión de datos.', 'Impresión Factura B.');
  153.     end;
  154.   end;
  155. end;


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 abril 2013 - 11:30

Hola,
Gracias santiago14 por tu colaboración.
Si no es mucha molestia, ¿podrías indicarnos el sitio del cual adquirir dicho OCX? Es posible que sea de utilidad a otros conocer más sobre dicho OCX ya que en otras ocasiones han venido usuarios con dudas respecto a las impresoras fiscales Hasar.

Saludos,
  • 0

#3 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 25 abril 2013 - 04:18

Hola,
Gracias santiago14 por tu colaboración.
Si no es mucha molestia, ¿podrías indicarnos el sitio del cual adquirir dicho OCX? Es posible que sea de utilidad a otros conocer más sobre dicho OCX ya que en otras ocasiones han venido usuarios con dudas respecto a las impresoras fiscales Hasar.

Saludos,


El OCX lo encontré en la página de Hasar, tuve que andar un rato largo por cierto...

Les mando el OCX para que lo tengan.
Va OCX.
  • 0

#4 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 25 abril 2013 - 04:34

Va manual del OCX.
Espero que entre, sino lo coprimo.

  • 0

#5 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 25 abril 2013 - 04:38

Este manual es de comandos, muy necesario cuando los objetos del OCX no hacen lo que tienen que hacer.

  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 abril 2013 - 05:44

Hola,
Muchas gracias Santiago.

Yo estaba en la duda de si era el que se distribuía en su propio sitio o uno de terceros como el componente PZCFFiscal de Pablo Zagni. Según la página veo que se puede acceder de forma libre con sólo llenar un formulario.

Imagino que es como en verdad dicen allí que el OCX reconoce todos los modelos porque no veo que sea específico a algún modelo. Al parecer lo que hace puntual a cada equipo es el driver.

Al leer el código que expones me llamó mucho la atención los nombres de los métodos como Comenzar, TratarDeCancelarTodo, ImprimirPago. ¿Esos son los nombres de los métodos que ofrece la clase ActiveX generada por el OCX? ¿O es que tu le añadiste esos?

Saludos,
  • 0

#7 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 25 abril 2013 - 06:09

El OCX es libre, por eso lo publico aquí sin cargo de conciencia. En cuanto al componente de Pablo Zagni, le envié un mail pidiéndoselo, como indica en su página, pero me respondió que lo había discontinuado porque muchos de los colegas (nosotros), no habíamos cumplido con las condiciones de la licencia.
El OCX reconoce muchos modelos de Hasar, la lista está en el manual, que también lo he subido.

Los nombres de los métodos son gratamente en castellano, y vienen de origen. En el manual "publfact.pdf" están los comandos que hacen la tarea y esos sí están en inglés.

Saludos.
  • 0

#8 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 25 abril 2013 - 06:25

Hola,

Gracias por las aclaraciones. Justamente quería sacar las dudas.
Ya antes había visto a gente por el foro preguntar tanto por las Hasar y sus OCX/Drivers como por el componente de Pablo y no se ha podido avanzar demasiado en esto para ir en ayuda.

Es una lástima que el proyecto se haya discontinuado. De lo poco que me estaba informando parecía ser una muy buena opción. Ojalá en algún momento le diera un nuevo empujón... quizá si revisara las condiciones de su licencia pudiera atraer a más gente con ganas de colaborar. Justamente en un de los hilos sobre el tema había comentado ciertas dudas que me habían quedado al leer la página de Pablo.

Saludos,
  • 0

#9 santiago14

santiago14

    Advanced Member

  • Miembros
  • PipPipPip
  • 334 mensajes
  • LocationCerrillos - Salta - Argentina

Escrito 25 abril 2013 - 06:49

Sí, es una lástima. Ojalá que en algún momento decida arrancar de nuevo.

Yo estoy trabajando para un cliente que necesita poner en funcionamiento su Hasar ya que la AFIP (agencia impositiva de Argentina) lo a multado y en bastante dinero. Todos mis "descubrimientos" respecto del tema, los voy a publicar aquí.

Saludos.
  • 0

#10 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 24 septiembre 2014 - 09:07

Hola Santiago, te hago unas consultas:

¿Cuando creas el objeto, cdo entras al form o cdo inicia el programa?
Haces este proceso abrir_fiscal(archivoINI), cada vez que facturas, ¿no seria más practico hacerlo cdo abris el Formulario, una sola vez?
Hay algunos metodos que no funcionan como vos lo utilizas, por ejemplo:     
Hasar1.CerrarComprobanteFiscal();
lo tuve que llamar asi: Hasar1.CerrarComprobanteFiscal(ole,ole);
¿Lo sobreescribiste?

Muchas gracias.

  • 0




IP.Board spam blocked by CleanTalk.