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.
Código Delphi
[-]
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');
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; pto_vta_egreso:=FieldByName('pto_vta_egreso').AsInteger; abrir_fiscal(archivoINI);
Hasar1.PrecioBase:=False; Hasar1.Comenzar;
Hasar1.TratarDeCancelarTodo;
Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento),
obtener_responsabilidad_iva(responsabilidad_iva), domicilio);
Hasar1.AbrirComprobanteFiscal(FACTURA_A);
Buscar_detalle_factura_A(ibconsulta, cod_egreso);
with ibconsulta do
begin
first;
while not eof do
begin 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);
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;
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;
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');
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; pto_vta_egreso:=FieldByName('pto_vta_egreso').AsInteger; abrir_fiscal(archivoINI);
Hasar1.PrecioBase:=False; 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
Hasar1.DatosCliente(nombre_cliente, numero_documento, obtener_tipo_documento(tipo_documento),
obtener_responsabilidad_iva(responsabilidad_iva), ' ');
end;
Hasar1.AbrirComprobanteFiscal(FACTURA_B);
Buscar_detalle_factura_A(IBConsulta, cod_egreso);
with IBConsulta do
begin
first;
while not eof do
begin 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);
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;
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;