Share |

martes, noviembre 01, 2005

Reportar en Excel

Existe una manera fácil de exportar información desde Navision a Excel y es mediante la tabla Excel Buffer. La manera es insertar un registro en dicha tabla para cada celda, indicando las coordenadas y el valor.

El siguiente código inserta el valor 35 en la celda A1:
ExclBuffer.INIT;
ExclBuffer.VALIDATE("Row No.", 1);
ExclBuffer.VALIDATE("Column No.", 1);
ExclBuffer."Cell Value as Text" := FORMAT(35);
ExclBuffer.INSERT;

Finalmente, cuando se haya rellenado todas las celdas deseadas, ejecutar las siguientes funciones:
ExclBuffer.CreateBook;
ExclBuffer.CreateSheet('Mi hoja','Mi titulo',COMPANYNAME,USERID);
ExclBuffer.GiveUserControl;


Es importante que la declaración de la variable, en el ejemplo ExclBuffer, se defina como temporal, de esta manera no interferimos con otros usuarios Navision que puedieran estar utilizando la tabla Excel Buffer mediante el mismo u otros procesos de exportación a Excel.

lunes, octubre 24, 2005

Variables globales y variables locales

Todo programador de Navision sabe la diferencia entre las variables globales y las variables locales, pero aún y así vamos a repasar sus diferencias:
  • Variables globales:
    Son accesibles desde todo el objeto. Eventos, funciones, etc.
  • Variables locales:
    Son accesibles sólo desde el procedimiento en las que han sido declaradas.

    Pero hay que tener especial cuidado con las variables globales cuando un objeto es llamado repetidamente (parte de su código se ejecuta 2 ó más veces), ya que las variables globales, a diferencia de las locales, guardan su valor entre las llamadas. Por el contrario, las variables locales son inicializadas cada vez.

    Ejemplo mediante un CommandButton en un Form:
    myBoton - OnPush()
    varGlobal := varGlobal + 1;
    varLocal := varLocal + 1;
    MESSAGE('Global = %1\Local = %2', varGlobal, varLocal);


    La variable global irá aumentando su valor tantas veces como se pulse el botón, no así la local que siempre será 1.

    Esta casuística cobra especial importancia cuando se llaman objetos desde otros objetos, ya que esta regla se cumple en todos los casos, o sea, las variables globales del objeto llamado permanecen mientras permanezca el objeto.

  • jueves, octubre 13, 2005

    Asiento de apertura inexistente

    Navision, al contrario de la contabilidad "tradicional", no cierra ni abre los ejercicios, es decir, no existe ningún asiento de cierre a fin de ejercicio fiscal ni de apertura al inicio del próximo. ¿Qué pasa con los diarios oficiales? Navision "simula" el asiento de apertura, ya que es obligado en estos informes, utilizando los saldos de las cuentas de balance a final del ejercicio anterior.
    Lo que sí existe es el asiento de regularización, lo que es el cuadre de las cuentas del grupo 6 y 7 (comerciales) con la cuenta 129. A este asiento, Navision le asigna una fecha de fin de ejercicio precedida por la letra U (U31/12/05 p.e.). Es una fecha ficticia entre el fin de ejercicio y el inicio del siguiente, con el fin de mantener los saldos correctos durante el ejercicio fiscal completo.
    Es por ello que en el esquema de cuentas, el balance utiliza un formato de columnas que muestra el saldo a la fecha (.."HastaFecha") y la cuenta de resultados utiliza un formato de columnas que muestra el saldo del periodo ("DesdeFecha".."HastaFecha").

    sábado, octubre 08, 2005

    Acceder a Navision sin contraseña

    Existe una manera de acceder a una BBDD de Navision sin que pida contraseña, aunque para ello deberemos tener una copia de seguridad.
    El truco consiste en crear una BBDD nueva, restaurar la copia de seguridad y... ya está, estaremos dentro de la BBDD sin que nos haya pedido usuario y contraseña. Evidentemente, si la cerramos y volvemos a abrir, ya nos volverá a pedir la contraseña.

    sábado, octubre 01, 2005

    Enlace con varios subforms simultaneamente

    Navision permite tener dentro de un form un subform y hacer un link entre ellos, de manera que al cambiar el registro del form cambie la información relacionada en el subform.
    Pero no permite, de manera automática, enlazar un segundo subform. Esto se consigue con el evento OnTimer del form, el cual se ejecuta cada cierto tiempo programado (TimerInterval = 100, es un valor adecuado). Es en este evento donde podemos añadir codigo y verificar si hay que actualizar la información del segundo subform. Por ejemplo:

    Form - OnTimer()
    CurrForm.sbfItems.FORM.GETRECORD(ItemVendor); //Coge el registro actual
    IF Key <> "No." + ItemVendor."Item No." THEN BEGIN //Si la info ha variado...
    CurrForm.sbfPrices.FORM.myFilter("No.",ItemVendor."Item No."); //Actualiza el 2do subform
    Key := "No." + ItemVendor."Item No."; //Coge nueva clave
    END;


    Teneis un ejemplo en la sección de downloads

    jueves, septiembre 29, 2005

    Nº de movimiento - Igual entre distintas tablas

    ¿Sabías que... ?
    Cuando Navision registra una transacción relacionada con un cliente, proveedor o banco asigna el mismo "Nº de movimiento" en todas las tablas.
    Por ejemplo, al registrar una factura de un cliente, si examinamos el número de movimiento asignado al registro de la tabla de movimientos de cliente y hacemos "Navegar" y mostramos los movimientos de contabilidad, el apunte perteneciente a la cuenta 430xxxx tendrá el mismo número de movimiento que el de la tabla de movimientos de cliente.

    viernes, septiembre 23, 2005

    Omitir IRPF de profesionales en 347

    Al introducir facturas de profesionales, se suele introducir la cantidad de IRPF retenida como una linea de factura y asignándola directamente a una cuenta 475xxx. En este caso hay que prestar especial atención a la configuración de la cuenta: el campo "Omite en informe 347" de la pestaña "Informes" debe estar activado, ya que el importe (negativo) en la linea de la factura NO debe restar del total de la factura al imprimir el informe "Proveedor - Declaración anual".

    jueves, septiembre 15, 2005

    Pérdida del control para ficheros en RequestForm del DataPort

    Al poner controles en el "Request Form" de un "Dataport" se pierde el control por defecto que abre el asistente para la localización del fichero a importar o exportar.
    Se puede solucionar incorporando un "Textbox" y estableciendo el valor de la propiedad "ID" a 1 y la propiedad "Assistedit" a Sí. A partir de este instante automáticamente aparecerá el "Assistbutton" que actuará exactamente igual que el control por defecto, tan sólo queda indicar el nombre del fichero al "Dataport", en el evento "OnPreDataport", estableciendo la propiedad "CurrDataport.FILENAME" := "varConElNombreDelFichero"