Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Importe en letras y observaciones - Hasar P330 (https://www.clubdelphi.com/foros/showthread.php?t=83757)

santiago14 24-07-2013 17:09:25

Importe en letras y observaciones - Hasar P330
 
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: Num2letras, Numero2Letras y NumLetrasCrystal bájate el que más te interese.

Un saludo

santiago14 26-07-2013 01:46:32

Cita:

Empezado por olbeup (Mensaje 464488)
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: 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

Cita:

Empezado por olbeup (Mensaje 464531)
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
Código Delphi [-]
{-------------------------------------------------------------------------------
  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;

Código Delphi [-]
   //...
    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;


La franja horaria es GMT +2. Ahora son las 19:50:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi