jueves, 5 de septiembre de 2013

Cambiar Impresora por defecto al imprimir un report de Navision

En este post vamos a tratar un tema que es más que sabido por desarrolladores con experiencia pero por el contrario puede venir bien a más de uno que comience a programar en Navision.
Para esto vamos a utilizar 2 tablas que hay en navision:
  1. La tabla 78 Seleccion Impresora
  2. La tabla Printer que es una tabla virtual y no esta accesible en el object designer.
La primera contiene una relación de usuario, report e impresora para definir como se imprimen los informes para los usuarios. La segunda es una tabla virtual que tiene una relacion de las impresoras del usuario y esta accesible en tiempo de ejcucion.
Con la combinacion de ambas tablas no es complicado ver la manera de asignar una impresora concreta antes de ejecutar un informe.



NameDataTypeSubtype
recImpresoraRecordPrinter
recImpresoraSeleccionRecordSelección impresora
recImpresoraSeleccionPreviaRecordSelección impresora
//Comprueba a ver si la impresora existe en el cliente, si no existe muestro un error
recImpresora.SETFILTER(Name,'EL NOMBRE DE MI IMPRESORA');
IF NOT recImpresora.FIND('-') THEN
   EXIT(FALSE);

//Buscamos una asignación previa, la guardamos para dejarlo todo como estaba y la borramos
IF recImpresoraSeleccion.GET(UPPERCASE(USERID), 50000) THEN BEGIN
   recImpresoraSeleccionPrevia.RESET;
   recImpresoraSeleccionPrevia.INIT;
   recImpresoraSeleccionPrevia.TRANSFERFIELDS(recImpresoraSeleccion);
   recImpresoraSeleccionPrevia.INSERT;
   recImpresoraSeleccion.DELETE;
END;

//Insertamos nuestra asignacion de impresora al report 50000
recImpresoraSeleccion.INIT;
recImpresoraSeleccion."Nº informe"       := 50000;
recImpresoraSeleccion."Id. usuario"      := UPPERCASE(USERID);
recImpresoraSeleccion."Nombre impresora" := 'EL NOMBRE DE MI IMPRESORA';
recImpresoraSeleccion.INSERT;


//Imprimimos nuestro informe
ReportFacturaVenta.RUNMODAL;

//Borramos nuestra asignacion
IF recImpresoraSeleccion.GET(UPPERCASE(USERID), 50000) THEN BEGIN
   recImpresoraSeleccion.DELETE;

  //Restauramos la asignacion previa
   IF DELCHR(recImpresoraSeleccionPrevia."Nombre impresora",'<>',' ') <> '' THEN BEGIN
      recImpresoraSeleccion.INIT;
      recImpresoraSeleccion."Nº informe"       := 50000;
      recImpresoraSeleccion."Id. usuario"      := UPPERCASE(USERID);
      recImpresoraSeleccion."Nombre impresora" := recImpresoraSeleccionPrevia."Nombre impresora";
      recImpresoraSeleccion.INSERT;
   END;
END;



No hay comentarios:

Publicar un comentario