PDA

Ver la Versión Completa : Importe en letras y observaciones - Hasar P330


santiago14
24-07-2013, 17:09:25
Buenas, voy al grano.
¿Alguien sabe como poner el importe final en letras en una Hasar P330?
¿Y poner una observación al final del comprobante?

Gracias.

olbeup
25-07-2013, 10:12:56
Hola santiago14,

Sólo tienes que buscar un poco en el FTP y encontraras los que buscas, mira lo que he encontrado en el FTP del ClubDelphi en la sección de Componentes-Funciones (http://terawiki.clubdelphi.com/Delphi/Componentes-Funciones/): Num2letras, Numero2Letras y NumLetrasCrystal bájate el que más te interese.

Un saludo

santiago14
26-07-2013, 01:46:32
Hola santiago14,

Sólo tienes que buscar un poco en el FTP y encontraras los que buscas, mira lo que he encontrado en el FTP del ClubDelphi en la sección de Componentes-Funciones (http://terawiki.clubdelphi.com/Delphi/Componentes-Funciones/): Num2letras, Numero2Letras y NumLetrasCrystal bájate el que más te interese.

Un saludo

Muy agradecido, voy a explicar mejor...

Esas funciones están muy buenas, de hecho, a Num2Letras la uso desde hace muchísimo y me ha servido de maravillas.
El tema es que quiero ahora poner eso en la impresora fiscal Hasar 330, ¿Cómo hago? Bueno, en principio hay que usar el comando Encabezado() y pasar los datos; hay varias líneas en el pie del documento para hacer esto, cada una consta de 120 caracteres para trabajar, yo quería que la fiscal me pusiera el importe en letras directamente pero los de Hasar me contestaron que esa función no está disponible. El problema aquí es que uno le pasa a la fiscal una lista de ítems vendidos que da como total, por ejemplo 387,00; por razones de redondeo de la fiscal, algo que todavía no he podido dilucidar, el valor final es: 387,01.
En esta circunstancia, yo le paso el importe "Trescientos ochenta y siete" y resulta que tiene un centavito de mas. Claro, en cuestiones de dinero no es nada, no se hacen problema, pero me quita un poco de calidad a mi trabajo.
No se si se entiende...
Las observaciones pasan por el mismo lado, solamente que las podemos poner en un renglón diferente al del importe en letras.

En cuanto tenga la cosa solucionada lo publico para que haya algo mas de documentación al respecto.

olbeup
26-07-2013, 09:49:31
Hola santiago14,

Nunca he utilizado una impresora fiscal ni tampoco la he visto trabajar, he mirado en Google y es una impresora matricial.
¿Se comportar como una impresora normal o necesitas comando especiales para que imprima?, siento no poder ayudarte.

Un saludo.

santiago14
26-07-2013, 17:47:08
Hola santiago14,

Nunca he utilizado una impresora fiscal ni tampoco la he visto trabajar, he mirado en Google y es una impresora matricial.
¿Se comportar como una impresora normal o necesitas comando especiales para que imprima?, siento no poder ayudarte.

Un saludo.

Una impresora fiscal es una impresora matricial (por lo menos hay modelos de ese tipo) pero adicionalmente ha sido "preparada" para emitir comprobante con valor legal. Para ello tiene, entre otras cosas, una "memoria fiscal", algo así como una linda RAM donde se van haciendo registros que solamente la autoridad de AFIP puede leer cuando quiera.
Para mandar a imprimir tienes que ajustarre a los comandos que vienes para ello, esto difiere según la marca claro. En mi caso, es una Hasar P300 y tiene una familia de comandos y, como ayuda, un OCX que simplifica las cosas.

santiago14
03-08-2013, 22:46:34
Bueno, después de un tiempito he logrado dilucidar la cuestión.
Resulta que sí hay forma de enviar los importes en letras y observaciones a la fiscal (Hasar P330)
Un mail que me mandaron desde Hasar aclara un poco el panorama, a saber:


1. La impresora fiscal no soporta ningún comando que dado un monto, éste se imprima en palabras.
No en facturas u otros documentos fiscales, y tampoco en notas de crédito.
Sí ocurre en recibos "X".

En el caso de facturas o notas de crédito/débito, el texto a imprimir deberá ser generado por el software.
Debe manejarse como si se tratase de una leyenda cualquiera u observación (ver 2.)

2. En el documento existen dos áreas disponibles para la impresión de "observaciones":
- En el encabezado (líneas 3 a 5). Hasta 120 caracteres por línea.
- En el pie (líneas 11 a 14). También de hasta 120 caracteres cada una.

En ambos casos se debe recurrir al uso del comando 'SetHeaderTrailer' (ver "Manual de comandos" de la impresora fiscal).
Si utiliza el OCX, dicho comando se genera invocando a la propiedad 'Encabezado( )' -ver "Manual del OCX"-.

Las líneas de encabezado se deben enviar antes de abrir el comprobante. Las líneas de pie antes de cerrarlo.
Las líneas cargadas se mantienen en la memoria de la impresora fiscal (y se imprimirán automáticamente en cada nuevo comprobante) a menos que luego de cerrar el documento dichas líneas se eliminen (esto permite decidir si los textos serán fijos -el mismo en todos los documentos- o variables -cambia de un documento a otro, o se puede omitir-).

La eliminación se logra cargando las mismas líneas con un texto que tenga como único caracter al ASCII 127 decimal (DEL).

Ejemplo: String: comando = " ]∟11∟Texto en línea 11"
OCX: HASAR1.Encabezado(11) = "Texto en línea 11"


Todavía no he hecho las pruebas pertinentes pero, la compilación no me ha dado problemas. Cuando lleve el ejecutable y lo ponga donde está la fiscal y pruebe, les cuento.

Gracias.

Casimiro Notevi
03-08-2013, 23:53:40
Gracias por compartirlo ^\||/

santiago14
10-08-2013, 01:42:33
Bueno, después de largo tiempo pude completar el proceso.
Mando el código para poder poner el importe en letras y una observación en la parte de abajo de un comprobante fiscal (Factura A, B, Nota crédito A, B, Nota de débito A, B) La impresora es una Hasar P330.
En este caso es para una Factura B

{-------------------------------------------------------------------------------
Procedure: tfrmPpal.poner_items_comprobante
Author: santiago
DateTime: 09.08.2013 11:36:04
Arguments: cod_egreso:Integer; ibconsulta:tmdoquery
Result: double. El subtotal del comprobante.
Comentario: Ponemos los ítems en la impresora fiscal.
-------------------------------------------------------------------------------}
function tfrmPpal.poner_items_comprobante(cod_egreso:Integer; ibconsulta:TIBQuery):double ;
var
total: Double;
begin
total:=0;
//Recordar que la transacción se inicia fuera de este módulo
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);
// Added by santiago 10/06/2013 20:12:31 - Sumamos los ítems de las ventas (aquí están con iva)
total:=total + (FieldByName('precio_final').AsFloat * FieldByName('cantidad_egreso').AsFloat);
next;
end;
Result:=total;
end;
end;

procedure TFrmPpal.abrir_fiscal(archivo_ini:string);
var
ini:TIniFile;
puerto:string;
begin
try
//Recuperamos los datos desde el archivo .ini
ini:=abrirINI(archivo_ini);
puerto:=leerINI(INI, 'fiscal', 'puerto');
//pto_vta:=leerINI(ini, 'punto_vta', 'punto');
//modelo:=leerINI(ini, 'fiscal', 'modelofiscal');
cerrarINI(ini);
//Es la parte de impresión
Hasar1.Puerto:=StrToInt(puerto);
Hasar1.Modelo:=MODELO_P330; //¿Será número 19? // StrToInt(modelo);
hasar1.Baudios:=9600;
except
raise;
end;
end;

{-------------------------------------------------------------------------------
Procedure: TFrmPpal.Descuento_general
Author: santiago
DateTime: 02.08.2013 18:21:13
Arguments: total, porcentaje_dto_recargo:Double; texto_descuento:string
Result: Double. Devuelve el dto/recargo que hubo
Comentario: Descuento general de los documentos fiscales
-------------------------------------------------------------------------------}
function TFrmPpal.Descuento_general(total, porcentaje_dto_recargo: Double;
texto_descuento:string):Double;
var
en_negativo:Boolean;
dto_recargo:Double;
begin
result:=0;
en_negativo:=True;
if Abs(porcentaje_dto_recargo) > 0 then
begin
en_negativo:=porcentaje_dto_recargo < 0;
dto_recargo:=(Abs(porcentaje_dto_recargo) * total) / 100;
/// TERCER PARAMETRO IDENTIFICA SI ES DESCUENTO O RECARGO. TRUE: DESCUENTO; FALSE: RECARGO;
Hasar1.DescuentoGeneral(texto_descuento, dto_recargo, en_negativo);
Result:=dto_recargo;
end;
end;

{-------------------------------------------------------------------------------
Procedure: TFrmPpal.borrar_cola_impresion
Author: santiago
DateTime: 02.08.2013 18:10:15
Arguments: nro_linea:Integer
Result: None
Comentario: Borra el texto del pie de impresión del compprobante fiscal
-------------------------------------------------------------------------------}
procedure TFrmPpal.borrar_cola_impresion(nro_linea:Integer);
var
snro_linea:string;
fs, comando:WideString;
begin
fs:=#28;
snro_linea:=IntToStr(nro_linea);
comando:=#93 + fs + snro_linea + fs + #127;
Hasar1.Enviar(comando);
end;

{-------------------------------------------------------------------------------
Procedure: TFrmPpal.observaciones
Author: santiago
DateTime: 02.08.2013 18:02:01
Arguments: texto_observaciones:string; nro_linea:Integer
Result: None
Comentario: Mandamos las observaciones al comprobante fiscal
-------------------------------------------------------------------------------}
procedure TFrmPpal.observaciones_comprobante(texto_observaciones:string; nro_linea:Integer);
var
snro_linea:string;
fs, comando:WideString;
begin
fs:=#28;
snro_linea:=IntToStr(nro_linea);
comando:=#93 + fs + snro_linea + fs + texto_observaciones;
Hasar1.Enviar(comando);
end;

{-------------------------------------------------------------------------------
Procedure: TFrmPpal.importe_letras
Author: santiago
DateTime: 02.08.2013 17:46:59
Arguments: total, dto_recargo:Double; descuento:Boolean; nro_linea:integer
Result: None
Comentario: Ponemos el importe en letras para los documentos
-------------------------------------------------------------------------------}
procedure TFrmPpal.importe_letras(total, dto_recargo:Double; descuento:Boolean;
nro_linea:integer);
var
snro_linea:string;
fs, comando:WideString;
begin
fs:=#28;
snro_linea:=IntToStr(nro_linea);
total:=total_general(total, dto_recargo, descuento);
comando:=#93 + fs + snro_linea + fs + 'SON PESOS: ' + NumeroToLetras_EstiloMoneda(total);
//comando:=#93 + fs + '11' + fs + 'Cien pesos';
Hasar1.Enviar(comando);
end;

{-------------------------------------------------------------------------------
Procedure: TFrmPpal.formas_pago
Author: santiago
DateTime: 02.08.2013 17:34:37
Arguments:
Result: None
Comentario: Ponemos las formas de pago en la fiscal
-------------------------------------------------------------------------------}
procedure TFrmPpal.formas_pago(IBConsulta:TIBQuery; cod_egreso:Integer);
begin
//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;
end;



//...
abrir_fiscal(archivoINI);
Hasar1.PrecioBase:=False; //TRUE: CON BASE IMPONIBLE; FALSE: CON PRECIO FINAL, IMPUESTOS INCLUIDOS
Hasar1.Comenzar;
Hasar1.TratarDeCancelarTodo;
//....

Hasar1.AbrirComprobanteFiscal(FACTURA_B);
// Modified by santiago 09/08/2013 11:38:46 - Ponemos los ítems en la fiscal, nos
// devuelve el subtotal
total:=poner_items_comprobante(factura.cod_egreso, ibconsulta);
// Added by santiago 10/06/2013 20:12:58 - Mandamos el descuento
dto_recargo:=Descuento_general(total, porcentaje_dto_recargo, texto_descuento);
hasar1.Subtotal(true);
//Imprimimos las formas de pago del cliente
formas_pago(IBConsulta, cod_egreso);
// Added by santiago 01/08/2013 19:11:39 - Importe en letras
importe_letras(total, dto_recargo, en_negativo, 11);
// Added by santiago 01/08/2013 19:11:45 - Las observaciones
observaciones_comprobante(observaciones, 12);
Hasar1.CerrarComprobanteFiscal;
//Me devuelve el nro de comprobante
nro_egreso:=StrToInt(Hasar1.Respuesta[3]);
registrar_numero_comprobante_egreso(nro_egreso, cod_egreso, IBConsulta);
// Added by santiago 01/08/2013 19:11:53 - Borramos el importe en letras de la memoria fiscal
borrar_cola_impresion(11);
// Added by santiago 01/08/2013 19:11:57 - Borramos las observaciones de la memoria fiscal
borrar_cola_impresion(12);
Hasar1.Finalizar;