dic 17

Analizando la primera solución V

Posted in analisis, v7, vDevelop

Detalle de los campos de las tablas de comprasEn el gráfico podemos ver la estructura de campos de las tablas de compras.

Para este esquema hemos elegido tablas maestras en las cabeceras de albaranes y facturas, para las lineas de albaranes se ha utilizado en este ejemplo una tabla submaestra de la cabecera (con este tipo de tabla, coseguimos que cada las lineas de albarán sean numeradas correlativamente empezando siempre por 1), para las lineas de facturas se ha utilizado una tabla hístorica (en este caso, las lineas no son numeradas).

Tambien puedes observar en las tablas de cabeceras como hay enlaces a las tablas maestras de Proveedores y Formas de pago, y en las tablas de Lineas hay enlaces a las tablas de Artículos

PDF    Enviar artculo en formato PDF   
comments: 1 »
dic 17

Analizando la primera solución IV

Posted in analisis, v7, vDevelop

Esquema de comprasLa segunda caja, la de Compras, tenemos previsto que nos guarde toda la información referente a las compras realizadas por nuestra empresa, por lo que necesitamos las siguientes tablas:

  • una tabla de CABECERA de ALBARANES
  • una tabla para las LINEAS de ALBARANES
  • una tabla de CABECERA de FACTURAS
  • una tabla para las LINEAS de las FACTURAS

Para este esquema de tablas hemos utilizado tablas maestras para las Cabeceras de albaranes y facturas y para las tablas de lineas de albarán y factura podemos utilizar tablas maestras, submaestras o historicas, al gusto.

Más adelante veremos la diferencia entre los tipos de tablas que he indicado, pero elegir un tipo u otro no varia demasiado el modo de trabajo, solo hay pequeñas diferencias que pueden ser importantes a la hora de elegir uno u otro tipo.

Create PDF    Enviar artculo en formato PDF   
comments: 1 »
dic 16

v6.9: ¡la versión censurada de Velneo! :D

Posted in off topic

Un hombre estaba cortando el césped en el jardín frente a su casa cuando Manolo, su vecino, sale de su casa y se dirige al buzón de correos. Lo abre, lo vuelve a cerrar y regresa a su casa.
Un rato después, Manolo vuelve a salir de la casa, se dirige otra vez al buzón, lo abre y lo cierra con un golpe y hecho una furia, regresa a su casa.
El hombre estaba terminando de cortar el césped cuando ve que Manolo sale de nuevo, va al buzón, lo abre y lo cierra con todas sus fuerzas.
Intrigado por sus acciones, el hombre le pregunta:
- Oye Manolo, ¿te pasa algo?
- ¡¡Claro que me pasa algo!! Mi estúpida computadora me sigue dando un mensaje que dice: TIENES CORREO.


Estaba un hombre anciano dando de pastar a su rebaño de ovejas, cuando de repente aparece por el inhóspito camino una 4×4 full 0KM. Para frente al anciano y se baja de ella un joven de no más de 30 años. Sobretodo negro, camisa blanca Hugo Boss y zapatillas DKNY, se acerca al pastor y le dice:
- Señor, si yo le adivino cuantas ovejas tiene ud. en su rebaño, ¿me regala una?
El anciano responde, con algo de asombro:
- Sí, como no…

Entonces el joven vuelve a su 4×4 y saca una notebook Toshiba Tecra 8000 con 128MB de RAM, se conecta a la Red de Redes, baja una base de datos de 300 MB, entra a una página de la NASA, mediante un satélite identifica la zona exacta donde está el rebaño, calcula el promedio histórico del tamaño de una oveja tipo Merino, mediante una tabla dinámica de Excel y con la ejecución de algunas Macros personalizadas en Visual Basic, logra completar el diagrama de flujo del Microsoft Project, y luego de tres horas le responde al pastor:
- Usted tiene 1347 ovejas y 4 pueden estar embarazadas.
El anciano asintió y le dijo que efectivamente así era, y que se llevara su oveja. El joven tomó la oveja y la cargó en la camioneta, cuando se estaba por ir el pastor lo detuvo y le preguntó:
- Disculpe joven, pero si yo llegase a adivinar cuál es su profesión, Ud. ¿me devuelve mi oveja?
El joven, con aire de confianza, le dijo sonriente:
- Seguro!
El anciano entonces contestó:
- Usted es consultor.
El joven, sorprendido completamente, exclamó:
- ¡Exacto…!
Y mientras le devolvía la oveja que había tomado preguntó:
- ¿Cómo se dio cuenta que soy consultor?
Y el anciano le respondió:
- Por tres razones.
Primero: ud. vino sin que yo lo llamara.
Segundo: se llevaba algo mío por decirme algo que yo ya sabía antes de que ud. viniera.
Tercero: se nota que no conoce nada de mi negocio, porque se estaba llevando a mi perro…

PDF    Enviar artculo en formato PDF   
comments: 0 »
dic 16

Analizando la primera solución III

Posted in analisis, v7, vDevelop

Y para crear la estructura de tablas del esquema, ¿qué tipo de tablas debemos elegir?

Para nuestro análisis hemos optado por algo sencillo, y todas las tablas son maestras con clave númerica (con numeración automática Siguiente al último), excepto la tabla de Familias de artículos que hemos creado una tabla Maestra con clave arbolada.

Este tipo de tablas tienen una estructura arbolada similar a la utilizada en el Plan General Contable (que es una de las estructuras arboladas mas conocidas por casi todos los desarrolladores de aplicaciones de gestión).

Detalle de las tablas maestras

En el gráfico puedes ver también los campos de cada una de las tablas del proyecto “Maestros” para que puedas ir creando la aplicación siguiendo el ejemplo.


PDF Printer    Enviar artculo en formato PDF   
comments: 1 »
dic 16

VideoTutos de primeros pasos

Posted in v7, vDevelop, velneo, videos

Viendo el blog de NexusFireMan, he visto estos videos de Velneo y no he podido resistir ponerlos también aqui, ya que aportan algo más de claridad a lo que intento explicar en los post de “Análisis de la primera solución”.

Video 1:

[youtube=http://www.youtube.com/watch?v=8IZOTtALYU0&feature=player_embedded]

Video 2:

[youtube=http://www.youtube.com/watch?v=kOYJB-ZwRJo&feature=player_embedded]

Gracias por la aportación, NexusFireMan.

Gracias también a todos los lectores del blog y aqui estoy para lo que necesiteis.

PDF Download    Enviar artculo en formato PDF   
comments: 2 »
dic 16

Analizando la primera solución II

Posted in analisis, v7, vDevelop

Tablas maestras de la primera soluciónLa primera caja, la de Maestros, tendrá a su vez un esquema de tablas que serán la base para nuestra pequeña aplicación.

  • una tabla de FAMILIAS de productos
  • una tabla de FORMAS DE PAGO para las condiciones de compra y venta
  • una tabla para los ARTICULOS que serán comercializados
  • una tabla para los CLIENTES de nuestras facturas
  • una tabla para los PROVEEDORES de nuestra empresa
  • una tabla de ALMACENES, que nos permitirá que nuestra pequeña gestión sea multi-almacén.

Fijate en el esquema como Clientes y Proveedores tienen un enlace a la tabla Formas de pago, para poder asignar una forma de pago a cada cliente y a cada proveedor.

La tabla de Familias tambien es maestra de Artículos.

En el esquema podemos ver las relaciones 1-1 y 1-n entre articulos y familias, a un artículo podemos asignarle una familia según este esquema (enlace a maestros) y al mismo tiempo, una familia puede tener muchos artículos (historicos o plurales).


PDF Download    Enviar artculo en formato PDF   
comments: 1 »
dic 16

Analizando la primera solución – I

Posted in analisis, v7, vDevelop

En este y los próximos post sobre V7, los dedicaremos a analizar una pequeña aplicación de gestión, nada especial, pero lo veremos con detalle explicando paso a paso todos los detalles.

Analisis de datos de una gestiónEn este ejemplo vamos a trabajar sobre un desarrollo muy común para la mayoría de las empresas, se trata de una pequeña gestión comercial compuesta por 3 proyectos

  1. proyecto de datos de Maestros
  2. proyecto de datos de Compras
  3. proyecto de datos de Ventas

Una vez definido el esquema de proyectos, vamos a desarrollar cada uno de ellos y a trabajar con las tablas de datos.

En el diseño de esta aplicación no he puesto especial interés en optimizar el analisis, que podría ser mejorado notablemente. Lo único que se pretende es realizar un análisis sencillo que cualquier persona pueda entender con un mínimo de conocimientos sobre bases de datos.

PDF Creator    Enviar artculo en formato PDF   
comments: 2 »
dic 15

y ¿que es la herencia inversa?

Posted in v7, vDevelop

Pues la herencia inversa es el concepto por el cual, podemos utilizar objetos de los proyectos que han heredado al proyecto actual, y que, en principio, solo estarán disponibles cuando se ejecuten ambos proyectos al mismo tiempo.

Mediante la herencia inversa, podemos ver en la ficha de un cliente, todos sus albaranes (lo que anteriormente hacíamos mediante los enlaces históricos o plurales de las tablas), cuando los objetos correspondientes a la tabla de clientes están en un proyecto y este es heredado por otro proyecto que contiene los objetos correspondientes a la tabla de albaranes.

Mediante la herencia, desde un albarán podemos acceder a la ficha del cliente (cuyo formulario esta definido en el proyecto heredado), y mediante la herencia inversa, en el formulario del cliente podemos mostrar información de los albaranes de ese cliente (aún cuando las rejillas para mostrar los albaranes estén en el proyecto que hereda).

Pero esto solo será posible cuando ejecutamos el proyecto de Ventas (que hereda al proyecto de Maestros) y no cuando ejecutamos el proyecto de Maestros directamente.

PDF Download    Enviar artculo en formato PDF   
comments: 1 »
dic 15

eFactura en LML y XML

Posted in LML, XML

Si aún no has comprobado el ejemplo anterior, aqui te dejo los ejemplos completos para que puedas verlo por ti mismo,

eFactura en XML: eFactura en LML:
<Cabecera>
<VersionCodificacion>VERSION
</VersionCodificacion>
<Modalidad>MODALIDAD
</Modalidad>
<TipoEmisorFactura>TIPO-EMISOR
</TipoEmisorFactura>
<Lote>
<IdentificadorLote>ID-LOTE
</IdentificadorLote>
<NumeroTotalFacturas>NRO-FACTURAS
</NumeroTotalFacturas>
<TotalFacturas>
<ImporteTotal>IMP-TOTAL
</ImporteTotal>
</TotalFacturas>
<ImporteTotal>IMP-TOTAL
</ImporteTotal>
</TotalAPagar>
<ImporteTotal>IMP-TOTAL
</ImporteTotal>
</TotalAEjecutar>MONEDA-FACT
</MonedaFacturacion>
</TotalFacturas>
</Lote>
<Emisor>
<IdentificacionFiscal>
<TipoPersona>TIPO-EMISOR
</TipoPersona>
<TipoResidencia>TIPO-RESIDENCIA
</TipoResidencia>
<NumeroDocumento>NUMERO-DOC
</NumeroDocumento>
</NumeroDocumento>
<Nombre>NOMBRE
</Nombre>
<PrimerApellido>1-APELLIDO
</PrimerApellido>
<DireccionNacional>
<Direccion>DIRECCION
</Direccion>
<CP>C.P.
</CP>
<Poblacion>POBLACION
</Poblacion>
<Provincia>PROVINCIA
</Provincia>
<CodigoPais>COD-PAIS
</CodigoPais>
</CodigoPais>
</DireccionNacional>
</Emisor>
<IdentificacionFiscal>
<TipoPersona>TIPO-EMISOR
</TipoPersona>
<TipoResidencia>TIPO-RESIDENCIA
</TipoResidencia>
<NumeroDocumento>NUMERO-DOC
</NumeroDocumento>
</NumeroDocumento>
<Centro>
<Numero>NUMERO
</Numero>
<DireccionNacional>
<Direccion>DIRECCION
</Direccion>
<CP>C.P.
</CP>
<Poblacion>POBLACION
</Poblacion>
<Provincia>PROVINCIA
</Provincia>
<CodigoPais>COD-PAIS
</CodigoPais>
</CodigoPais>
</DireccionNacional>
</Centros>
<RazonSocial>RAZON-SOCIAL
</RazonSocial>
<DireccionNacional>
<Direccion>DIRECCION
</Direccion>
<CP>C.P.
</CP>
<Poblacion>POBLACION
</Poblacion>
<Provincia>PROVINCIA
</Provincia>
<CodigoPais>COD-PAIS
</CodigoPais>
</CodigoPais>
</DireccionNacional>
</Receptor>
</Sujetos>
<Factura>
<CabeceraFactura>
<NumeroFactura>NRO-FACTURA
</NumeroFactura>
<SerieFactura>SERIE-FACTURA
</SerieFactura>
<TipoDocumentoFactura>TIPO-DOC
</TipoDocumentoFactura>
<Clase>CLASE
</Clase>
</Clase>
<FechaExpedicion>FECHA-EXPED
</FechaExpedicion>
<MonedaExpedicion>MONEDA-EXPED
</MonedaExpedicion>
<MonedaImpuesto>MONEDA-IMP
</MonedaImpuesto>
</MonedaImpuesto>
<Impuesto>
<ClaseImpuesto>CLASE-IMP
</ClaseImpuesto>
<PorcentajeImpuesto>PORC-IMP
</PorcentajeImpuesto>
<BaseImponible>
<ImporteTotal>BASE-IMP
</ImporteTotal>
</BaseImponible>
<ImporteTotal>BASE-IMP
</ImporteTotal>
</Cuota>
</BaseImponible>
</ImpuestosRepercutidos>
<TotalImporteBruto>IMPORTE-BRUTO
</TotalImporteBruto>
<DescuentosGenerales>
<Descuento>
<DescripcionDescuento>DESCR-DTO
</DescripcionDescuento>
<PorcentajeDescuento>PORC-DTO
</PorcentajeDescuento>
<ImporteDescuento>IMPORTE-DTO
</ImporteDescuento>
</ImporteDescuento>
</DescuentosGenerales>TOTAL-DTOS
</TotalDescuentosGenerales>
<TotalImporteBrutoAntesImpuestos>

TOTAL-BRUTO
</TotalImporteBrutoAntesImpuestos>
<TotalImpuestosRepercutidos>TOTAL-IMP
</TotalImpuestosRepercutidos>
<TotalImpuestosRetenidos>TOTAL-RET
</TotalImpuestosRetenidos>
<TotalFactura>TOTAL-FACT
</TotalFactura>
<TotalAnticipos>TOTAL-ANTIC
</TotalAnticipos>
<TotalAPagar>TOTAL-PAGAR
</TotalAPagar>
<TotalAEjecutar>TOTAL-EJECUTAR
</TotalAEjecutar>
</TotalAEjecutar>
<Detalle>
<ExpedienteContratacionReceptor>

EXPED-CONTRA
</ExpedienteContratacionReceptor>
<DescripcionDetalle>DESCR-DETALLE
</DescripcionDetalle>
<Cantidad>CANTIDAD
</Cantidad>
<PrecioUnitarioSinImpuestos>PRECIO-UD
</PrecioUnitarioSinImpuestos>
<CosteTotal>COSTE
</CosteTotal>
<ImporteBruto>IMP-BRUTO
</ImporteBruto>
<ImpuestosRepercutidos>
<Impuesto>
<ClaseImpuesto>IVA
</ClaseImpuesto>
</Impuesto>
</ImpuestosRepercutidos>FECHA-OPER
</FechaOperacion>
</ImpuestosRepercutidos>
</Detalles>
<Vencimiento>
<FechaVencimiento>FECHA-VTO
</FechaVencimiento>
<ImporteVencimiento>IMP-VTO
</ImporteVencimiento>
<FormaPago>FORMA-PAGO
</FormaPago>
<CuentaAbono>
<NumeroCuentaIBAN>CTA-IBAN
</NumeroCuentaIBAN>
<EntidadFinanciera>NOMBRE-BANCO
</EntidadFinanciera>
</EntidadFinanciera>
</CuentaAbono>
</DatosCobro>
<DatosAdicionales>
<ObservacionesFactura>
<Observacion>OBSERVACIONES
</Obserbacion>
</ObservacionesFactura>
</DatosAdicionales>
</Factura>
</Facturas>

<0:Begin language=”lml”>
<1:Cabecera>
<2:VersionCodificacion>VERSION
<2:Modalidad>MODALIDAD
<2:TipoEmisorFactura>TIPO-EMISOR
<2:Lote>
<3:IdentificadorLote>ID-LOTE
<3:NumeroTotalFacturas>NRO-FACTURAS
<3:TotalFacturas>
<4:ImporteTotal>IMP-TOTAL
<3:TotalAPagar>
<4:ImporteTotal>IMP-TOTAL
<3:TotalAEjecutar>
<4:ImporteTotal>IMP-TOTAL
<3:MonedaFacturacion>MONEDA-FACT
<1:Sujetos>
<2:Emisor>
<3:IdentificacionFiscal>
<4:TipoPersona>TIPO-EMISOR
<4:TipoResidencia>TIPO-RESIDENCIA
<4:NumeroDocumento>NUMERO-DOC
<3:PersonaFisica>
<4:Nombre>NOMBRE
<4:PrimerApellido>1-APELLIDO
<4:DireccionNacional>
<5:Direccion>DIRECCION
<5:CP>C.P.
<5:Poblacion>POBLACION
<5:Provincia>PROVINCIA
<5:CodigoPais>COD-PAIS
<2:Receptor>
<3:IdentificacionFiscal>
<4:TipoPersona>TIPO-EMISOR
<4:TipoResidencia>TIPO-RESIDENCIA
<4:NumeroDocumento>NUMERO-DOC
<3:Centros>
<4:Centro>
<5:Numero>NUMERO
<5:DireccionNacional>
<6:Direccion>DIRECCION
<6:CP>C.P.
<6:Poblacion>POBLACION
<6:Provincia>PROVINCIA
<6:CodigoPais>COD-PAIS
<3:PersonaJuridica>
<4:RazonSocial>RAZON-SOCIAL
<4:DireccionNacional>
<5:Direccion>DIRECCION
<5:CP>C.P.
<5:Poblacion>POBLACION
<5:Provincia>PROVINCIA
<5:CodigoPais>COD-PAIS
<1:Facturas>
<2:Factura>
<3:CabeceraFactura>
<4:NumeroFactura>NRO-FACTURA
<4:SerieFactura>SERIE-FACTURA
<4:TipoDocumentoFactura>TIPO-DOC
<4:Clase>CLASE
<3:EmisionFactura>
<4:FechaExpedicion>FECHA-EXPED
<4:MonedaExpedicion>MONEDA-EXPED
<4:MonedaImpuesto>MONEDA-IMP
<3:ImpuestosRepercutidos>
<4:Impuesto>
<5:ClaseImpuesto>CLASE-IMP
<5:PorcentajeImpuesto>PORC-IMP
<5:BaseImponible>
<6:ImporteTotal>BASE-IMP
<5:Cuota>
<6:ImporteTotal>BASE-IMP
<3:TotalesFactura>
<4:TotalImporteBruto>IMPORTE-BRUTO
<4:DescuentosGenerales>
<5:Descuento>
<6:DescripcionDescuento>DESCR-DTO
<6:PorcentajeDescuento>PORC-DTO
<6:ImporteDescuento>IMPORTE-DTO
<4:TotalDescuentosGenerales>TOTAL-DTOS
<4:TotalImporteBrutoAntesImpuestos>

TOTAL-BRUTO
<4:TotalImpuestosRepercutidos>TOTAL-IMP
<4:TotalImpuestosRetenidos>TOTAL-RET
<4:TotalFactura>TOTAL-FACT
<4:TotalAnticipos>TOTAL-ANTIC
<4:TotalAPagar>TOTAL-PAGAR
<4:TotalAEjecutar>TOTAL-EJECUTAR
<3:Detalles>
<4:Detalle>
<5:ExpedienteContratacionReceptor>

EXPED-CONTRA
<5:DescripcionDetalle>DESCR-DETALLE
<5:Cantidad>CANTIDAD
<5:PrecioUnitarioSinImpuestos>PRECIO-UD
<5:CosteTotal>COSTE
<5:ImporteBruto>IMP-BRUTO
<5:ImpuestosRepercutidos>
<6:Impuesto>
<7:ClaseImpuesto>IVA
<5:FechaOperacion>FECHA-OPER
<3:DatosCobro>
<4:Vencimiento>
<5:FechaVencimiento>FECHA-VTO
<5:ImporteVencimiento>IMP-VTO
<5:FormaPago>FORMA-PAGO
<5:CuentaAbono>
<6:NumeroCuentaIBAN>CTA-IBAN
<6:EntidadFinanciera>NOMBRE-BANCO
<3:DatosAdicionales>
<4:ObservacionesFactura>
<5:Observacion>OBSERV
<0:end>

esto es solo un ejemplo, hay otros mas sencillos pero también los hay mas complicados, y por desgracia, cuando los ficheros tienen más de 50 kb no resultan tan faciles de parsear, a menos que tengas conocimientos de C++ o PHP,

¿aún tienes dudas?

PDF Printer    Enviar artculo en formato PDF   
comments: 0 »
dic 15

ejemplo de LML vs XML

Posted in LML, XML

eFactura en XML y LMLMira y observa detenidamente la imagen, en ella solo se muestran unas lineas de la “eFactura” que podemos descargar de la A.E.A.T.

Observa el tamaño del archivo XML (en la 1ª columna) y del archivo LML (en la 2ª columna), ¿ves alguna diferencia?

en las dos columnas se muestra el mismo texto, una porción de la “eFactura”, pero hay muchas diferencias, si analizamos los dos ejemplos:

- El codigo de la eFactura en LML ocupa 3Kb y en XML ocupa 5kb, casi un 40% de diferencia.

- Es por tanto, mas rápido de leer y parsear por cualquier aplicación.

Pero eso no es todo, si no hubiera marcado en color rojo las etiquetas finales, sería bastante complicado saber donde comienza y donde acaba cada etiqueta.

En cambio podras identificar claramente y a simple vista las diferentes etiquetas del ejemplo en LML (en la 2ª columna) a pesar de que no hay etiquetas finales, esto no seria viable en un XML, y si no lo crees, borra todas las etiquetas “</etiqueta>” de tu ejemplo y luego procesa el archivo. En el mejor de los casos, obtendras un error.

Si, si, ya se que XML es un estandar, y que es cojonudo para comunicar datos con cualquier aplicación, y no pretendo cambiar eso, pero si las aplicaciones que tienes que comunicar son propias o puedes acceder al codigo de las mismas, ¿no crees que puede ser mas eficaz, veloz y seguro?

No pretendo que creais lo que os digo, solo os comento que, en los dos últimos años, desde que desarrolle este lenguaje de etiquetas, lo he utilizado en todos mis proyectos y aún no me ha fallado.

- he facilitado la exportación e importación de cientos de archivos y cientos de miles de lineas de texto

- he reducido las horas de programación en casi un 70% en procesos dedicados a importar y exportar datos.

- he disminuido los errores cometidos en los procesos en un 90% y la mayoría de ellos funcionan correctamente desde la 1ª ejecución

- en definitiva, algo que odiaba tanto como realizar importaciones de datos en masa, se ha convertido casi en un juego de niños y generar el archivo a exportar es mas sencillo si cabe.

No se trata de cambiar lo que ya hay, pero si has de comenzar con un proyecto nuevo, o hay algún proyecto que se te resiste especialmente, ¿no crees que deberías pensarlo?

¡un caramelo es un caramelo! pero, ¿y si le ponemos un palo? ;)

PDF Download    Enviar artculo en formato PDF   
comments: 3 »