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.
//Factura A procedure TFrmPpal.IBAlertadorEventAlert(Sender: TObject; EventName: String; EventCount: Integer; var CancelAlerts: Boolean); var puerto:string; ini:TIniFile; factura:TEnc_egreso; begin with DataModule2, IBConsulta, factura do try terminarTransaccion; IBTransaccion.StartTransaction; buscar_cliente_factura(ibconsulta, 'FACTURA_A'); //Cargamos el registro con los datos del documento //cod_egreso:=Fields[0].asInteger; cod_egreso:=FieldByName('cod_egreso').AsInteger; nombre_cliente:=FieldByName('nombre_cliente').AsString; domicilio:=FieldByName('domicilio_cliente').AsString; responsabilidad_iva:=FieldByName('responsabilidad_iva_cliente').AsString; tipo_documento:=FieldByName('tipo_documento').AsString; numero_documento:=FieldByName('numero_documento').AsString; //Sería el cuit pto_vta_egreso:=FieldByName('pto_vta_egreso').AsInteger; //el pto de venta //Abrimos la fiscal abrir_fiscal(archivoINI); Hasar1.PrecioBase:=False; //TRUE: CON BASE IMPONIBLE; FALSE: CON PRECIO FINAL, IMPUESTOS INCLUIDOS Hasar1.Comenzar; Hasar1.TratarDeCancelarTodo; Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento), obtener_responsabilidad_iva(responsabilidad_iva), domicilio); //Hasar1.DescripcionesLargas:=false; //trunca las descripciones largas Hasar1.AbrirComprobanteFiscal(FACTURA_A); Buscar_detalle_factura_A(ibconsulta, cod_egreso); with ibconsulta do begin first; while not eof do begin //DESCR CANT MONTO IVA IMPUESTOS INTERNOS hasar1.ImprimirItem(FieldByName('nombre_existencia').AsString, FieldByName('cantidad_egreso').AsFloat, FieldByName('precio_final').AsFloat, FieldByName('porcentaje_alicuota').AsFloat, 0); next; end; end; hasar1.Subtotal(true); //Imprimimos las formas de pago del cliente Buscar_formas_pago_cliente(IBConsulta, cod_egreso); with IBConsulta do begin First; while not Eof do begin hasar1.ImprimirPago(FieldByName('tipo_forma_cobro').AsString, FieldByName('monto_forma_cobro').AsFloat); Next; end; end; Hasar1.CerrarComprobanteFiscal; //Me devuelve el nro de comprobante nro_egreso:=StrToInt(Hasar1.Respuesta[3]); registrar_numero_comprobante_egreso(nro_egreso, cod_egreso, IBConsulta); Hasar1.Finalizar; IBTransaccion.Commit; CoolTrayIcon1.ShowBalloonHint('Impresora fiscal', 'Factura A, Nº ' + LPad(pto_vta_egreso, 4, '0') + ' - ' + LPad(nro_egreso, 8, '0') + ' en la Impresora fiscal...', bitInfo, 10); except on E:Exception do begin terminarTransaccion; merrores(e, 'Error en la impresión de datos.', 'Impresión Factura A'); end; end; end; //Factura B procedure TFrmPpal.evFacturaBEventAlert(Sender: TObject; EventName: String; EventCount: Integer; var CancelAlerts: Boolean); var puerto:string; ini:TIniFile; factura:TEnc_egreso; begin with DataModule2, IBConsulta, factura do try terminarTransaccion; IBTransaccion.StartTransaction; buscar_cliente_factura(ibconsulta, 'FACTURA_B'); //Recuperamos los datos de la factura //cod_egreso:=Fields[0].asInteger; cod_egreso:=FieldByName('cod_egreso').AsInteger; nombre_cliente:=FieldByName('nombre_cliente').AsString; domicilio:=Trim(FieldByName('domicilio_cliente').AsString); responsabilidad_iva:=FieldByName('responsabilidad_iva_cliente').AsString; tipo_documento:=FieldByName('tipo_documento').AsString; numero_documento:=FieldByName('numero_documento').AsString; //Sería el cuit pto_vta_egreso:=FieldByName('pto_vta_egreso').AsInteger; // //Abrimos la fiscal abrir_fiscal(archivoINI); Hasar1.PrecioBase:=False; //TRUE: CON BASE IMPONIBLE; FALSE: CON PRECIO FINAL, IMPUESTOS INCLUIDOS Hasar1.Comenzar; Hasar1.TratarDeCancelarTodo; if domicilio <> EmptyStr then begin Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento), obtener_responsabilidad_iva(responsabilidad_iva), domicilio); end else begin //No acepta una variable con un espacio, así que le mandamos el espacio directamente. Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento), obtener_responsabilidad_iva(responsabilidad_iva), ' '); end; //Hasar1.DescripcionesLargas:=false; //trunca las descripciones largas Hasar1.AbrirComprobanteFiscal(FACTURA_B); Buscar_detalle_factura_A(IBConsulta, cod_egreso); with IBConsulta do begin first; while not eof do begin //DESCR CANT MONTO IVA IMPUESTOS INTERNOS hasar1.ImprimirItem(FieldByName('nombre_existencia').AsString, FieldByName('cantidad_egreso').AsFloat, FieldByName('precio_final').AsFloat, FieldByName('porcentaje_alicuota').AsFloat, 0); next; end; end; hasar1.Subtotal(true); //Imprimimos las formas de pago del cliente Buscar_formas_pago_cliente(IBConsulta, cod_egreso); with IBConsulta do begin First; while not Eof do begin hasar1.ImprimirPago(FieldByName('tipo_forma_cobro').AsString, FieldByName('monto_forma_cobro').AsFloat); Next; end; end; Hasar1.CerrarComprobanteFiscal; //Me devuelve el nro de comprobante nro_egreso:=StrToInt(Hasar1.Respuesta[3]); registrar_numero_comprobante_egreso(nro_egreso, cod_egreso, IBConsulta); Hasar1.Finalizar; IBTransaccion.Commit; CoolTrayIcon1.ShowBalloonHint('Impresora fiscal', 'Factura B, Nº ' + LPad(pto_vta_egreso, 4, '0') + ' - ' + LPad(nro_egreso, 8, '0') + ' en la Impresora fiscal...', bitInfo, 10); except on E:Exception do begin terminarTransaccion; merrores(e, 'Error en la impresión de datos.', 'Impresión Factura B.'); end; end; end;