Controla tu empresa a tu modo !

Sin categoría

Mensajes de error remitidos por usuarios

Acabo de ver en el control de errores de PSFGeneric unos cuantos fallos de alguien que ha estado probando la versión 1.6.3 primero y luego la 1.6.4. Entre los datos de depuración no se indica el sistema operativo que se esta usando y los pasos dados para sufrir el fallo.

Con la esperanza de que el usuario que los ha sufrido se sienta identificado en este post voy a transcribir los errores, si se os plantea este problema y no funciona el formulario de feedback, cosa que le ha pasado a quien os comento, podeis enviarme un mail a “aaaaa976 @ gmail . com”

(06/01/2015, 3 veces) Este error se debe a un mal formato del archivo XML usado para la importación de contactos, si me mandáis el archivo con uno o dos registros de ejemplo os digo como corregirlo:

Los datos del nivel de raíz no son válidos. Línea 1, posición 1.System.Xml en System.Xml.XmlTextReaderImpl.Throw(Exception e) en System.Xml.XmlTextReaderImpl.Throw(String res, String arg) en System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace() en System.Xml.XmlTextReaderImpl.ParseDocumentContent() en System.Xml.XmlTextReaderImpl.Read() en System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace) en System.Xml.XmlDocument.Load(XmlReader reader) en System.Xml.XmlDocument.LoadXml(String xml) en NuestrosContactos.frmImportarContactosXML.cmdAbrir_Click(Object sender, EventArgs e) en C:/Users/psf/Documents/00 PSFGeneric/power-ups/Contactos/frmImportarContactosXML.vb:línea 240 en System.Windows.Forms.Control.OnClick(EventArgs e) en System.Windows.Forms.Button.OnClick(EventArgs e) en System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) en System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) en System.Windows.Forms.Control.WndProc(Message& m) en System.Windows.Forms.ButtonBase.WndProc(Message& m) en System.Windows.Forms.Button.WndProc(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

(13/01/2015, 3 veces) El siguiente es el error que impide el uso del formulario de feedback, seguramente se debe a que estamos usando Windows XP sin actualizar o bien que nuestra versión de internet explorer es antigua:

No se puede cargar el tipo ‘PSFGenericFormExtension.HTMLArea’ del ensamblado’PSFGenericFormExtension, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null’.
PSFGeneric
en PSFGeneric.frmFeedback..ctor(IMDIHost ht)
en PSFGeneric.Principal.cmdFeedback_Click(Object sender, EventArgs e) en C:/Users/psf/Documents/00 PSFGeneric/PSFGeneric/Forms/Principal.vb:línea 2180
en System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
en System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
en System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
en System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
en System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
en System.Windows.Forms.ToolStripItem.PerformClick()
en PSFGeneric.Principal.Links_Click(Object sender, EventArgs e) en C:/Users/psf/Documents/00 PSFGeneric/PSFGeneric/Forms/Principal.vb:línea 1974
en System.Windows.Forms.Control.OnClick(EventArgs e)
en System.Windows.Forms.ListView.WmReflectNotify(Message& m)
en System.Windows.Forms.ListView.WndProc(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

También he detectado problemas de PSFGeneric 1.6.4 con sistemas de 32bits, concretamente con Windows 7/32Bits. La siguiente versión ya lo corrige, ademas cuenta con algunas mejoras de estabilidad.

Gracias a todos por probar PSFGeneric.

Power-up dinámico para simular tarea CRON

Al desarrollar webs en entornos Windows a menudo nos encontramos con el problema de probar las llamadas tareas CRON. Aunque disponemos de las “tareas de Windows” estas no tienen la flexibilidad del “demonio” CRON de Linux.

Para la depuración de tareas CRON necesitamos hacer llamadas a una URL de forma periódica y constante, por ejemplo cada 5 minutos.

PSFGeneric no está pensado para estas cosas, ni es la plataforma ideal para tener una tarea de este tipo en producción, pero para desarrollar nos pueden venir muy bien sus power-ups dinámicos y la potencia de su motor Javascript. Veamos como…

simulador de cron

Para empezar entramos en el “Editor de power-ups dinámicos” y creamos un nuevo proyecto, al que añadiremos un formulario y una librería Javascript.

En la librería vamos a añadir lo siguiente:

// Este código se usará de forma global

var idInterval = 0;

var cntInterval = 0;

 

function getURL(url) {

                var conn = GetXmlHttpObject();

                debug(“Estado: ” + conn.readyState);

                var data = “”;

                conn.open(“post”, url, data, true);

 

                conn.onload = function() {

                               debug(“Respuesta: ” + conn.status + ” – ” + conn.statusText);

                }

                conn.onreadystatechange = function() {

                               debug(“Estado: ” + conn.readyState);

                }

                conn.onabort = function() {

                               debug(“Petición cancelada”);

                }

                conn.onloadstart = function() {

                               debug(“Descarga iniciada”);

                }

                conn.onprogress = function(percentage, TotalBytesToReceive, BytesReceived) {

                               debug(“Descargado: ” + percentage + “, ” + TotalBytesToReceive + ” bytes de ” + BytesReceived + ” bytes”);

                }

}

 El código anterior declara dos variables globales y una función para hacer la llamada a nuestra URL. La variable idInterval guardará la ID del temporizador Javascript necesario y cntInterval es simplemente un contador para mostrar algo al usuario y sepa que está trabajando.

 En la función se crea un objeto XmlHttpObject y se hace la petición, aunque la respuesta no nos importa mucho se hace seguimiento de los eventos de respuesta y estado y se muestra por consola información sobre esto.

Ahora a por el formulario.

formulario

En mi propuesta permitimos configurar el intervalo de tiempo entre llamadas y la URL a la que llamar. Además añadí un botón de inicio y otro de parada. Los nombré como sigue:

  • nudPeriodo: Contendrá el periodo en milisegundos de intervalo. (Hay una errata en la imagen del formulario, i’m sorry ;)
  • txtURL: Para que el usuario ponga la URL a llamar.
  • txtPasadas: Donde mostraremos el número de peticiones realizadas hasta el momento.

 Ya tenemos la interfaz, ahora a iniciar y parar el temporizador.

“Al pulsar”, así se llama el evento en PSFGeneric, en el botón de inicio se ejecutará lo siguiente:

 // Este código se ejecutará cuando el usuario haga click en el botón.

if (idInterval != 0) {

                clearInterval(idInterval);

}

cntInterval = 0;

var per = MyForm.Field(“nudPeriodo”).Field(“value”).Value;

if (MyForm.Field(“txtURL”).Field(“value”).Value == “”) {

                alert(“Debe indicar una URL.”);

} else {

                idInterval = setInterval(function() {

                                               MyForm.Field(“txtPasadas”).Field(“value”).Value = cntInterval++;

                                               var url = MyForm.Field(“txtURL”).Field(“value”).Value;

                                               getURL(url);

                }, per)

};

 Comprueba que no haya un temporizador funcionando, y si lo hay lo para. Luego recupera el intervalo de tiempo definido por el usuario. Si el usuario no introdujo una URL lo avisa y en caso contrario crea el temporizador.

 En cada ciclo pone el valor de cntInterval en la caja de texto a tal efecto e incrementa en uno su valor. A continuación recupera la URL y ejecuta la función para hacer la llamada, la que definimos al principio en la librería.

 En algún momento el usuario querrá dejar de trabajar y tomarse un descansito, y puede que hasta quiera parar el temporizador, por muy remota que pueda parecer esa idea :P . Para ello le dimos el botón Parar, que al pulsarse hará lo siguiente:

 // Este código se ejecutará cuando el usuario haga click en el botón.

if (idInterval != 0) {

                clearInterval(idInterval);

                idInterval = 0;

}

 Si hay un temporizador en marcha lo destruye, y por ende se para, y reiniciar el ID de temporizador.

 Y de este modo, pongamos con media hora, como mucho, de hacer clics y pruebas, tendremos la pequeña herramienta que necesitábamos.

 Y para aquellos que no quieran complicarse tenéis esta herramienta en la lista de power-ups dinámicos de vuestro PSFGeneric y el proyecto con el código fuente para descargar aquí mismo.

 Un saludo a todos y feliz codificación…

Publicado PSFGeneric 1.6.4

Ya disponible PSFGeneric 1.6.4 con las siguientes mejoras destacadas:

  • Añadido editores de texto con formato por toda la aplicación.
  • Gestor de ficheros distribuido, gestor documental, para compartir ficheros en la nube, ahora tambien soporta sFTP, protegidos por permisos de acceso.
  • Añadidos iconos a multitud de botones y menus.
  • Mejora notable del rendimiento.
  • Mejoras en el motor javascript que dan mas libertad de desarrollo y control sobre el power-up dinamico.
  • Desglose de impuestos en tickets.
  • Agregado procesador de textos.
  • Ahora se permite definir usuarios invitados con acceso limitado a opciones especificas, por ejemplo el gestor documental, y control mas estricto de la seguridad al cargar power-ups.
  • Añadido importador de contactos.
  • Además de muchísimas mejoras más

Como siempre podemos descargar de esta misma web.

Nueva versión: PSFGeneric 1.6.3

Nos complace comunicar que ya está disponible PSFGeneric 1.6.3.

Como es costumbre está disponible en:

Esta web
Codeplex
Sourceforge
Portalprogramas

“Solución CRM generalista, permite que el usuario cree sus propias mejoras”
sobre PSFGeneric [2014]

 

—————-o—————-
PSFGeneric 1.6.3 CHANGELOG
—————-o—————-
Mejoras:
h3d – Buscar certificado
h3d – añadir campo nº serie en certificados
h3d – filtro cliente
h3d – filtro localidad
h3d – filtro nº certificado
h3d – filtro fecha prestacion
h3d – añadir stats
h3d – añadir avisos de mecenazgo
h3d – Si el nº d certificado va en mayusculas el buscador tambien debe ir en mayusculas.
h3d – dosis es campo de texto de 6 chr
h3d – plazo seguridad es campo numerico con una H
h3d – accion residual es campo de texto 100 chr
h3d – en tabla de productos poner todo en letra 8px, y materia activa con (**) y letra 6px.

.- Nuevos servicios del modulo de gestión de numeros de serie:
“serialnumberholder”, “getserialofid”, delegado, “id:integer”, “serial:string”
“serialnumberholder”, “getidofserial”, delegado, “numserie:string”, “id:integer”
.- Nuevo servicio de PSFGeneric: “psfgeneric”, “evogetypes”, delegado, “”, “types:hashtable[(name)string:(versions)arraylist]”
.- Nuevo power-up para ampliar dinamicamente las propiedades asociadas a un Item EVO, independientemente de su versión.
.- Nuevo tipo EVO sin propiedades para usarse como base para añadirle cualquier nº de propiedades dinamicas. (Concepto de Item generico)
.- Nuevos servicios del power-up de extension de propiedades EVO
prop_ext::propertytype_getlist(void) = list:arraylist[PropertyType.ID]
prop_ext::propertytype_add(type:string, multivalue:bool, description:string, label:string, meta:string/*clase evo de contenido*/) = id:integer
Valid PropertyType content types: varchar, Texto, blob, dateval, DateTime, Int, float, bool, file, evoitem
prop_ext::propertytype_del(id:integer) = void
prop_ext::propertytype_get(id:integer) = type:string, multivalue:bool, description:string, label:string, meta:string/*clase evo de contenido*/
prop_ext::propertytype_edit(id:integer, type:string, multivalue:bool, description:string, label:string, meta:string/*clase evo de contenido*/) = void
prop_ext::propertygroup_getlist(void) = list:arraylist[PropertyGroup.ID]
prop_ext::propertygroup_add(description:string, label:string) = id:integer
prop_ext::propertygroup_del(id:integer) = void
prop_ext::propertygroup_get(id:integer) = description:string, label:string
prop_ext::propertygroup_edit(id:integer, description:string, label:string) = void
prop_ext::propertygroup_addproperty(groupid:integer, propertyid:integer) = void
prop_ext::propertygroup_delproperty(groupid:integer, propertyid:integer) = void
prop_ext::propertygroup_getproperties(id:integer) = list:arraylist[PropertyType.ID]
prop_ext::propertyextension_getlist(evobasetype:string, [evobaseid:integer = 0]) = list:arraylist[PropertyType.ID]
prop_ext::propertyextension_add(evobasetype:string, [evobaseid:integer = 0], idpropertytype:integer) = id:integer
prop_ext::propertyextension_del(id:integer) = void
prop_ext::propertyextension_get(id:integer) = evobasetype:string, evobaseid:integer, idpropertytype:integer
prop_ext::propertyextension_edit(id:integer, evobasetype:string, [evobaseid:integer = 0], idpropertytype:integer) = void
prop_ext::propertyextension_valueadd(extenderid: integer, value:string) = id:integer
prop_ext::propertyextension_valuedel(extenderid: integer, id:integer) = void
prop_ext::propertyextension_valueget(extenderid: integer) = value:string, list:arraylist[PropertyValue.ID]
prop_ext::propertyextension_valueset(extenderid: integer, id:integer, value:string) = void
prop_ext::propertyextension_valuegetbyid(id: integer) = value:string
prop_ext::propertyextension_valuesetbyid(id: integer, value:string) = void
.- Nuevo permiso “Administrar propiedades extendidas EVO” para administradores
.- Nuevo metodo para power-ups para ser ejecutado al terminar de cargar todos los power-ups.
.- Añadido controlador general de eventos a PSFGeneric para permitir comunicación entre power-ups (aun no disponible en power-ups dinamicos)
.- Definidos eventos para el seguimiento de elementos EVO:
Event[evo.item.add]{item:evoItem} <= void
Event[evo.item.before.del]{item:integer, class:string, version:string} <= void
Event[evo.item.before.save]{item:evoItem} <= void
Event[evo.item.after.save]{item:evoItem} <= void
.- Metodo refresh para actualizar el contenido desde la base de datos en un evoItem.
.- Añadir propiedad a formulario dinamico para poner acceso directo en enlaces rapidos.
.- Si hay un fallo a partir de la carga de power-ups dinamicos se informa y se continua aunque la interfaz no quede completa.
.- Nuevo servicio en PSFGeneric: “psfgeneric”, “evogetfieldnames”, delegado, “class:string, version:string”, “fields:arraylist[string]”
.- Añadido control de indice visual de registros para power-ups dinamicos.
.- Nuevo servicio: “prop_ext”, “propertygroup_artongroup”, delegado, “id:integer”, “ongroup:bool”
.- Nuevo servicio web para actuar como proxy de Geolocalización de MapQuest Nominatim
.- Componentes de editor de power-ups dinamicos agrupados en distintas pestañas.
.- Nuevo control de filtro de campo de texto y de contacto de registros para power-ups dinamicos.
.- Nuevas funciones en JavaScript para controlar el registro actual de un formulario de power-up dinamico:
moveFirst: Selecciona el primer registro como activo.
moveLast: Selecciona el ultimo registro como activo.
movePrev: Selecciona el anterior registro como activo.
moveNext: Selecciona el siguiente registro como activo.
remove: Borra el registro activo.
count: Devuelve la cantidad de registros existentes.
.- Agregado directorio con archivos fuente de power-ups de ejemplo: <dir. instalacion>/docs/power-ups src/
.- Nuevo power-up dinamico para impresión de etiquetas de precios.

—————-o—————-
Correcciones:
.- Al generar facturas con fecha en el ejercicio anterior la numeración es del año actual.
.- Todos los usuarios pueden crear power-ups dinamicos poniendo en riesgo la seguridad global de PSFGeneric, corregido con permiso de administrador “Crear nuevos power-ups dinámicos”
.- Hay dos maneras distintas de editar las propiedades de un articulo. Corregido dejando solo el servicio.
.- Validación de tipo EVO distingue entre mayusculas y minusculas.
.- Cuando un usuario carga power-ups dinamicos con controles de almacen y no hay almacenes definidos o no puede acceder a ellos la aplicación falla y no puede abrirse.
.- El formulario de gestion de empresas administrativas no se muestra completamente.
.- A veces PSFGeneric no cierra correctamente y queda en estado Zomby, se ha forzado su cierra matando el proceso.
.- Cambiada geolocalización de Google por MapQuest Nominatim.
.- La ventana de power-upds dinamicos se bloquea sin conexión a internet, ahora carga los DPU locales.
.- El power-up de copia de seguridad MySQL no puede importar tablas de power-ups dinamicos.
.- Errores cargando power-ups dinamicos al inicio no detiene la carga completamente.

Estado actual del futuro PSFGeneric 1.6.3

—————-o—————-
PSFGeneric 1.6.3 CHANGELOG
—————-o—————-

Mejoras:
.- Nuevo servicios del modulo de gestión de numeros de serie:
“serialnumberholder”, “getserialofid”, delegado, “id:integer”, “serial:string”
“serialnumberholder”, “getidofserial”, delegado, “numserie:string”, “id:integer”
.- Nuevo servicio de PSFGeneric: “psfgeneric”, “evogetypes”, delegado, “”, “types:hashtable[(name)string:(versions)arraylist]”
.- Nuevo power-up para ampliar dinamicamente las propiedades asociadas a un Item EVO, independientemente de su versión.
.- Nuevo tipo EVO sin propiedades para usarse como base para añadirle cualquier nº de propiedades dinamicas. (Concepto de Item generico)
.- Nuevos servicios del power-up de extension de propiedades EVO
prop_ext::propertytype_getlist(void) = list:arraylist[PropertyType.ID]
prop_ext::propertytype_add(type:string, multivalue:bool, description:string, label:string, meta:string/*clase evo de contenido*/) = id:integer
Valid PropertyType content types: varchar, Texto, blob, dateval, DateTime, Int, float, bool, file, evoitem
prop_ext::propertytype_del(id:integer) = void
prop_ext::propertytype_get(id:integer) = type:string, multivalue:bool, description:string, label:string, meta:string/*clase evo de contenido*/
prop_ext::propertytype_edit(id:integer, type:string, multivalue:bool, description:string, label:string, meta:string/*clase evo de contenido*/) = void
prop_ext::propertygroup_getlist(void) = list:arraylist[PropertyGroup.ID]
prop_ext::propertygroup_add(description:string, label:string) = id:integer
prop_ext::propertygroup_del(id:integer) = void
prop_ext::propertygroup_get(id:integer) = description:string, label:string
prop_ext::propertygroup_edit(id:integer, description:string, label:string) = void
prop_ext::propertygroup_addproperty(groupid:integer, propertyid:integer) = void
prop_ext::propertygroup_delproperty(groupid:integer, propertyid:integer) = void
prop_ext::propertygroup_getproperties(id:integer) = list:arraylist[PropertyType.ID]
prop_ext::propertyextension_getlist(evobasetype:string, [evobaseid:integer = 0]) = list:arraylist[PropertyType.ID]
prop_ext::propertyextension_add(evobasetype:string, [evobaseid:integer = 0], idpropertytype:integer) = id:integer
prop_ext::propertyextension_del(id:integer) = void
prop_ext::propertyextension_get(id:integer) = evobasetype:string, evobaseid:integer, idpropertytype:integer
prop_ext::propertyextension_edit(id:integer, evobasetype:string, [evobaseid:integer = 0], idpropertytype:integer) = void
prop_ext::propertyextension_valueadd(extenderid: integer, value:string) = id:integer
prop_ext::propertyextension_valuedel(extenderid: integer, id:integer) = void
prop_ext::propertyextension_valueget(extenderid: integer) = value:string, list:arraylist[PropertyValue.ID]
prop_ext::propertyextension_valueset(extenderid: integer, id:integer, value:string) = void
prop_ext::propertyextension_valuegetbyid(id: integer) = value:string
prop_ext::propertyextension_valuesetbyid(id: integer, value:string) = void
.- Nuevo permiso “Administrar propiedades extendidas EVO” para administradores
.- Nuevo metodo para power-ups para ser ejecutado al terminar de cargar todos los power-ups.
.- Añadido controlador general de eventos a PSFGeneric para permitir comunicación entre power-ups (aun no disponible en power-ups dinamicos)
.- Definidos eventos para el seguimiento de elementos EVO:
Event[evo.item.add]{item:evoItem} <= void
Event[evo.item.before.del]{item:integer, class:string, version:string} <= void
Event[evo.item.before.save]{item:evoItem} <= void
Event[evo.item.after.save]{item:evoItem} <= void
.- Metodo refresh para actualizar el contenido desde la base de datos en un evoItem.
.- Añadir propiedad a formulario dinamico para poner acceso directo en enlaces rapidos.
.- Si hay un fallo a partir de la carga de power-ups dinamicos se informa y se continua aunque la interfaz no quede completa.

—————-o—————-
Correcciones:
.- Al generar facturas con fecha en el ejercicio anterior la numeración es del año actual.
.- Todos los usuarios pueden crear power-ups dinamicos poniendo en riesgo la seguridad global de PSFGeneric, corregido con permiso de administrador “Crear nuevos power-ups dinámicos”
.- Hay dos maneras distintas de editar las propiedades de un articulo. Corregido dejando solo el servicio.
.- Validación de tipo EVO distingue entre mayusculas y minusculas.
.- Cuando un usuario carga power-ups dinamicos con controles de almacén y no hay almacenes definidos o no puede acceder a ellos la aplicación falla y no puede abrirse.

PSFGeneric 1.6.2 publicado

Ya disponible la última versión de PSFGeneric con muchas mejoras en facilidades de uso y en el motor script interno.

Como siempre descargable en nuestra web, en codeplex y en sourceforge.

Disfrutadlo y feliz año 2014 ;)

—————-o—————-
PSFGeneric 1.6.2 CHANGELOG
—————-o—————-

Mejoras:
.- Nueva columna pagare en seguimiento de facturas: Si esta pendiente de cobro y contiene una fila de seguimiento
no cobrado con etiqueta pagare aparece se marca en el listado.
.- En propiedades de vehiculos/historico autoconsumo al hacer doble clic sobre una linea de cabecera se abre el albaran correspondiente.
.- En propiedades de vehiculos/historico autoconsumo boton para añadir nuevo albaran autoconsumo asociado al vehiculo.
.- Nuevo servicio interno: “manager”, “getselldeliveryofnumber”, delegado, “number:int”, “id:int”
.- Al usar una tarjeta MQS para conectar solicita añadirla a la lista de servidores conocidos.
.- Nueva ventana de conexion a servidores, mejora la informacion sobre cada opcion y permite iniciar Apache2 en local
.- Preinstalación de la distribución de Drupal 7.23 (Usuario/clave: Admin / 1234)
.- Ayuda emergente, popup, desactivable en la configuracion general
.- Nuevo objeto javascript XmlHttpObject para la captura y envio de información a servidores web/restFull
Sigue el esquema expuesto en: http://es.wikipedia.org/wiki/XMLHttpRequest#Implementaci.C3.B3n_y_uso_de_la_interfaz
Tiene algunas limitaciones con respecto a su homologo web, como imposibilidad de usar URL relativas,
ademas de no devolver estados de respuesta del servidor (200, 404, etc…).
Ejemplo de uso:
var conn = GetXmlHttpObject();
debug(“Estado: ” + conn.readyState);
conn.open(“get”, “www.psfgeneric.com”, “”, true);

conn.onload = function() {
debug(conn.responseText);
}
conn.onreadystatechange = function() {
debug(“Estado: ” + conn.readyState);
}
conn.onabort = function() {
debug(“Petición cancelada”);
}
conn.onloadstart = function() {
debug(“Descarga iniciada”);
}
conn.onprogress = function(percentage, TotalBytesToReceive, BytesReceived) {
debug(“Descargado: ” + percentage + “, ” + TotalBytesToReceive + ” bytes de ” + BytesReceived + ” bytes”);
}
.- Añadir funciones setInterval(), setTimeout(), clearTimeout(timeoutVariable) y clearInterval(intervalVariable) en javascript
.- Al abrir agrupar facturas recordar si el check de enviar por mail estaba seleccionado o no.
.- Textbox para puerto en ventana de conexión a servidores.
.- Cierres de ejercicio de almacén
.- Cierres de ejercicio de gestor económico (Usar como base, requiere revisión manual)
.- Agregada libreria JSON in JavaScript de Douglas Crockford en el directorio \jsLibs\json

—————-o—————-
Correcciones:
.- Historico factura menu contextual no va a ver factura.
.- En seguimiento de facturas al cambiar fechas mientras esta cargando se duplican facturas en el listado.
.- Ventana de facturas de venta no muestra facturas enlazadas de otros modulos debido a un fallo en el filtro de fechas.
.- Ventana de albaranes de venta no muestra albaranes enlazados de otros modulos debido a un fallo en el filtro de fechas.
.- No se permite multiseleccion en la lista de tareas (agenda).
.- Al iniciar en monopuesto a veces no espera a que el servidor local este iniciado y devuelve a la ventana de conexion.
.- En panel de servicios hacer calculo por días a partir de fecha del albaran de entrega.
.- Estudio economico en propiedades de nº de serie de vehiculos falla al calcular ingresos a partir de facturas. Ahora usa albaranes de venta.
.- Capa de conexión a datos ahora admite indicar el puerto de conexión a MySQL: 127.0.0.1:3306
.- Control area de texto no permite definir texto inicial en el editor de power-ups dinamicos.
.- Las propiedades status y statusText de XmlHttpObject ahora se cargan con valores de estado correctos.
.- XmlHttpObject mediante POST ahora devuelve cadena de caracteres de resultados.
.- XmlHttpObject ahora soporta metodos HTTP PUT, DELETE, etc…
.- Al abrir imprimir resumen de almacen sin tener una empresa creada da error. (error reportado automaticamente)

 

 

Cambios y mejoras de PSFGeneric 1.6.2

La próxima versión ya lleva algunos cambios que espero os sean interesantes, ahí van:

Mejoras:
.- Nueva columna pagare en seguimiento de facturas: Si esta pendiente de cobro y contiene una fila de seguimiento
no cobrado con etiqueta pagare aparece se marca en el listado.
.- En propiedades de vehiculos/historico autoconsumo al hacer doble clic sobre una linea de cabecera se abre el albaran correspondiente.
.- En propiedades de vehiculos/historico autoconsumo boton para añadir nuevo albaran autoconsumo asociado al vehiculo.
.- Nuevo servicio interno: “manager”, “getselldeliveryofnumber”, delegado, “number:int”, “id:int”
.- Al usar una tarjeta MQS para conectar solicita añadirla a la lista de servidores conocidos.
.- Nueva ventana de conexion a servidores, mejora la informacion sobre cada opcion y permite iniciar Apache2 en local
.- Preinstalación de la distribución de Drupal 7.23 (Usuario/clave: Admin / 1234)
.- Ayuda emergente, popup, desactivable en la configuracion general
.- Nuevo objeto javascript XmlHttpObject para la captura y envio de información a servidores web/restFull
Sigue el esquema expuesto en: http://es.wikipedia.org/wiki/XMLHttpRequest#Implementaci.C3.B3n_y_uso_de_la_interfaz
Tiene algunas limitaciones con respecto a su homologo web, como imposibilidad de usar URL relativas,
ademas de no devolver estados de respuesta del servidor (200, 404, etc…).
Ejemplo de uso:
var conn = GetXmlHttpObject();
debug(“Estado: ” + conn.readyState);
conn.open(“get”, “www.psfgeneric.com”, “”, true);

conn.onload = function() {
debug(conn.responseText);
}
conn.onreadystatechange = function() {
debug(“Estado: ” + conn.readyState);
}
conn.onabort = function() {
debug(“Petición cancelada”);
}
conn.onloadstart = function() {
debug(“Descarga iniciada”);
}
conn.onprogress = function(percentage, TotalBytesToReceive, BytesReceived) {
debug(“Descargado: ” + percentage + “, ” + TotalBytesToReceive + ” bytes de ” + BytesReceived + ” bytes”);
}
.- Añadir funciones setInterval(), setTimeout(), clearTimeout(timeoutVariable) y clearInterval(intervalVariable) en javascript

—————-o—————-
Correcciones:
.- Historico factura menu contextual no va a ver factura.
.- En seguimiento de facturas al cambiar fechas mientras esta cargando se duplican facturas en el listado.
.- Ventana de facturas de venta no muestra facturas enlazadas de otros modulos debido a un fallo en el filtro de fechas.
.- Ventana de albaranes de venta no muestra albaranes enlazados de otros modulos debido a un fallo en el filtro de fechas.
.- No se permite multiseleccion en la lista de tareas (agenda).
.- Al iniciar en monopuesto a veces no espera a que el servidor local este iniciado y devuelve a la ventana de conexión.

Organiza tu información en carpetas con PSFGeneric 1.6.1

En este ejemplo vemos el resultado de crear un formulario, dentro de PSFGeneric, que incluye un árbol de documentos.

Dicho campo, árbol de documentos, ademas de organizar los registros en carpetas permite asignar permisos de lectura o escritura a distintos usuarios.

Creo que es importante resaltar que para conseguir esto no hay que escribir ni una sola linea de programación, todo se puede hacer a golpe de ratón.

Descargar fuentes del power-up dinamico (Para versión 1.6.1 o superior)