jueves, 1 de julio de 2010

Conferencia de Factura Electrónica en Cancún

Por invitación de mi querídismos amigos de Sanroms Software de México, los próximos dias 15, 16, 17 y 18 de Julio estaré visitando Cancún con 2 motivos:

El primero, asistir a la presentación de los nuevos productos de Sanroms rediseñados totalmente en Xailer, después de una larga jornada de mas de 8 meses de duro trabajo, dejamos atrás definitivamente FiveWin y Sanrom's entra en una nueva era en el desarrollo de programas.

La presentación de los sistemas Sanrom's, está enmarcada en el ShowRoom de su nuevo producto de Hardware: Los pizarrones electrónicos SmartBoard, la presentación de los productos nuevos de Sanrom's se hará mostrando esta nueva herramienta tecnológica con múltiples aplicaciones para la educación

Y bueno ya que entre los nuevos productos de Sanroms está INVOICE, un programa de emisor de Facturación Electrónica, el cual está desarrollado, obivamente, utilizando nuestra herramienta CiberSAT para (x)Harbour, pues yo aprovecharé para dar una pequeña plática sobre la factura electrónica en México y como Sanrom's Invoice te puede ayudar a solucionar tu problema.

Si estás interesado en asistir, ya sea porque quieres ver como se migró un programa de FiveWin a Xailer, o bien porque te interesa saber un poco mas de Facturación Electrónica, o simplemente para saludar, estos son los datos para asistir al ShowRoom, el cual es GRATUITO:

Viernes 16 de Julio
Hotel Plaza
Sala Roble.
B2B Malecón Cancún

Habrá 3 presentaciones: 10 am, 13 y 17 hrs.

Es necesario hacer reservación para asistir llamando a:

Sanrom's Software de México
01 800 832 1928
Atn. Lic. Carolina Leal.
www.sanroms.com

sábado, 19 de junio de 2010

Convertir XLS a XSD

¡¡¡ No se puede hacer !!!!

El archivo XSD es el archivo que tiene la definción y las reglas que debe contener el XML.

No se puede ir del XML al XSD porque el XML puede no contener los elementos marcados como opcionales en el XSD.

Para generar correctamente un XML se utilizan las definiciones establecidas en el XSD, Microsoft incluye en todos sus Windows, a partir del SP 3 de XP una utilidad llamada Microsoft XML Core Services, misma que se encarga de tomar las definiciones del XSD y aplicarlas al XML, el resultado de esta operación es un valor lógico indicando si el XML cumple con las reglas establecidas en el XSD.

Es por esta razón que de un XML no se puede obtener un XSD.

La forma mas facil de obtener el XSD que define al XML es obtener la definición de internet del NAMESPACE que se encuentra en los primeros renglones del XML, ahi viene la definición del XSD que define al XML.

domingo, 31 de mayo de 2009

Programa en xHarbour "no se ve" cuando se ejecuta

Pues eso....

Si estas usando la última versión de xHarbour (Abril 2009 de xharbour.org ó 1.21 de xharbour.org), he de informarte que "algo" hicieron estos amigos en el compilador, que ahora es necesario hacer una llamada a la terminal que deseas utilizar de manera manual desde tu código fuente:

Function Main
request hb_gt_win // hay que agregar esta línea
SetMode(25,80)
CLS
@ 0,0 SAY "Hola Mundo"
WAIT
RETURN Nil

Con este pequeño cambio tus programas xHarbour en modo consola se volverán a ejecutar como lo hacían normalmente.

Obviamente no debes olvidar linkar la GTWIN.LIB para que funcione correctamente.

Este "bug" (preferiría llamarlo "issue") se ha reportado ya en el foro de xHarbour, pero Ron Pinkas insiste en que este cambio no es necesario, y que basta con linkar la libería en el orden correcto, desafortunadamente no nos dice en que orden debe de linkarse las libs, solo indica que su producto "xHarbour Builder" hace el linkeo correctamente.

miércoles, 20 de mayo de 2009

Foro de soporte para xHarbour.

Los foros de xHarbour pueden ser leídos por medio de un lector de grupos de noticias (news reader) como Outlook Express o Mozilla Thunderbird.

Los foros secundarios están hospedados en el propio servidor de xHarbour.com y se puede acceder a ellos en la siguiente dirección:

news://news.xharbour.com

En este servidor están hospedados los foros de soporte a xHabour Builder, el del grupo de desarrolladores (foro privado), se ofrecen 2 foros en idiomas extranjeros, uno en italiano y otro en español / portugúes (no se quién les dijo a la gente de xHarbour que ambos lenguajes se parecen mucho) y también hay un foro de soporte para el código fuente el cual se obtiene por CVS (Control Version System).

El foro de soporte principal no está hospedado en los servidores de xHarbour.com, al igual que Clipper, Visual Objects y otros lenguajes de programación el foro de xHarbour está hospedado en los servidores principales de grupos de noticias de UseNet:

news://comp.lang.xharbour

El problema con este servidor es que no todos los proveedores de internet te dan acceso a los grupos de UseNet (son muchísimos y tienen demasiada información), por ello, si quieres usar un lector de noticas, te recomiendo que abras una cuenta en MOTZARELLA.ORG.

Motzarella te ofrece un servidor para lectura de grupos de noticias, este es un servidor privado, pero gratuito, lo único que te piden es crear una cuenta con ellos y te enviarán un password por correo electrónico para que puedas usar tu lector de noticias.

Si prefieres otro medio que no sea el lector de noticias, entonces puedes crearte una cuenta Google Groups y acceder al grupo comp.lang.xharbour para leer y publicar mensajes.

viernes, 15 de mayo de 2009

Generar PDFs con Xailer

Xailer incorpora nativamente la capacidad de generar todos sus informes en PDF, requiriendo sin embargo de una utilidad de terceros llamada Image2PDF.

Image2PDF es una DLL de la empresa Utility Warrior que a partir del motor de vista previa de Xailer exporta el reporte presentado a un archivo .PDF.

No hay que hacer nada en programación para generar el PDF, Xailer al detectar la existencia del DLL de Image2PDF instalado en el equipo, automática presentará en la barra de botones del motor de vista previa, un botón para realizar el proceso de exportación.

martes, 5 de mayo de 2009

¿ Existe un IDE para Xbase++ ?

De momento no.

Xbase++ tiene en marcha un proyecto para hacer un IDE llamado Visual xBase++.

Hasta donde tengo entendido, es un trabajo en desarrollo, no sido liberado ni tiene una versión funcional al 100% y solo hay versiones de evaluación para usuarios registrados del producto.

La herramienta tiene buena apariencia, pero parece que no la veremos hasta la versión 2.0 o 3.0 de Xbase++

Configuración de ADS para usar con Xailer.

No es necesaria ninguna configuración adicional para usar Advantage Database Server (ADS) con Xailer.

El cliente que usa Xailer para conectarse con ADS es el mismo cliente que utiliza (x)Harbour y todas sus interfaces gráficas, por lo mismo no es necesario hacer ninguna configuración en el servidor para usarlo con una aplicación Xailer.

Lo unico que tienes que hacer, como con cualquier programa (x)Harbour que vaya a utilizar ADS es linkear las libs RDDADS.LIB, ACE32.DLIB y tener las DLLs clientes de ADS en la misma carpeta donde tienes la aplicación: AXWCS32.DLL (cliente ADS), ACE32.DLL (Funciones de acceso al servidor) y opcionalmente ADSLOC32.DLL (cliente local de ADS).

La forma de uso con Xailer es idéntica a como se hace con cualquier programa xHarbour.

Usar lenguaje SQL sobre archivos DBF

Si es posible hacerlo, pero hay que hacer algunas anotaciones al respecto.

Microsoft provee de un componente ADO y uno ODBC para tablas DBF, sin embargo no es recomendable usar estos componentes ya que no actualizan los índices ni NTX ni CDX cuando haces alguna operación de mantenimiento de tablas. Se puede usar perfectamente para consultas pero no para mantenimiento.

Si existe una forma de usar SQL con tablas DBFs y que se actualicen los índices tanto NTX y CDX y es usando el servidor de Advantage DataBase Server, tanto en su versión local gratuita, o con el servidor remoto o el internet.

Toda la información sobre como hacer está disponible haciendo click aquí.

domingo, 3 de mayo de 2009

XEdit 2.0 y Clipper

¿ Se puede usar XEdit 2.0 para compilar un programa en CA-Clipper 16 bits ?

No, se puede usar el editor de código fuente y el gestor de proyectos, pero no la herramienta "make" ya que internamente está programada para ejecutar el "harbour.exe" y no el "clipper.exe".

Adicionalmente XEdit está programado para usar el compilador del "C" de Borland, paso que no es necesario con Clipper.

Y finalmente XEdit agrega las librerías nativas de (x)Harbour al momento del proceso de enlazado.

Usando CDX con xHarbour y Advantage al mismo tiempo

Advantage Database Server utiliza su propio mecanismo de bloqueo de tablas lo que garantiza la seguridad de los datos.

Mientras una aplicación cliente ADS está en uso de una tabla DBF con índices CDX o NTX solo otra aplicación cliente ADS puede hacer uso de la tabla esto para evitar posibles daños en los índices y mantener las ventajas de la tecnología Cliente / Servidor.

Sin embargo, el ACE32.DLL incluye una función para hacer compatible el mecanismo de bloqueo, usandola, una aplicación cliente ADS puede compartir los datos con un programa en Clipper o en xHarbour.

La función es AdsLocking(.f.) y su equivalente para aplicaciones ADS con CA-Clipper es AX_Locking(.F.)

Su uso no se recomienda ya que la compatiblidad con programas no clientes ADS pone en riesgo la integridad de los índices.

viernes, 1 de mayo de 2009

Sumar fechas con xHarbour

xHarbour ofrece la misma funcionalidad en manipulación de tipos de campo fecha que la que ofrecía Clipper en su momento, todas las operaciones son soportadas:

dNewDate := DATE() + 30 // suma 30 días a la fecha actual
nDias := CTOD("01/01/2009") - DATE() // devuelve el número de dias transcurridos desde el 1 de enero.


Adicionalmente xHarbour ofrece total soporte a campos tipo Date-time, para mas información haz click aquí

Clipper en VPN

¿ Se puede correr un programa Clipper sobre una VPN ?

¡ Claro que se puede !, pero es TREMENDAMENTE LENTO.

La razón es que los programas Clipper operan bajo "arquiectura distribuida" bajo este esquema los datos son copiados del servidor a la estación de trabajo, procesados en la estación de trabajo y devueltos al servidor cada vez que haces un COMMIT.

Si tienes un DBF de 10 megas por ejemplo, los 10 megas son copiados por la VPN hasta la estación de trabajo que abrió el archivo, los datos son procesados localmente y cuando haces algún cambio o un alta y aparece un COMMIT en el código los datos se vuelven a copiar de vuelta al servidor.

En experiencias propias hemos tenido que esperar un promedio de 20 minutos para abrir una tabla DBF de poco menos de 10 megas sobre una VPN y no solo con Clipper, la lentitud también ocurre en programas con (x)Harbour.

Sin embargo SI ES POSIBLE TENER UNA VELOCIDAD SIMILAR A LA DE UNA LAN con programa en Clipper y xHarbour, el truco consiste en utilizar una herramienta Cliente / Servidor, que puede ser un servidor de datos SQL o bien Advantage Database Server para archivos DBF.s

SQLite y FiveWin Harbour

Como comenté en algún post anterior SQLite es un estupendo producto para incluir un manejador de bases de datos SQL no cliente/servidor en nuestras aplicaciones.

SQLite es super ligero, todo el invento está metido en un solo archivo .LIB, es tan ligero que hasta lo puedes usar en un Pocket PC sin mucho consumo de memoria, como lo hace Basic4PPC.

Para incluirlo en tus aplicaciones simplemente tienes que linkear la LIB de SQLite a tu programa y ¡ listo !, el servidor y el cliente quedan integrados en tu archivo .EXE.

Como SQLite es una lib para lenguaje "C", para usarlo en (x)Harbour ya sea en modo consola o con FiveWin o MiniGUI es necesario hacer una serie de "wrappers" para compatibilizar la llamada a funciones en "C" desde (x)Harbour.

Hace aproximadamente un par de años mi buen amigo Rafa Carmona (The Full) se dió a la tarea de comenzar los wrappers para compatibilizar la lib de SQLite para Harbour, donando su trabajo como parte de su proyecto Open Source T-GTK. Una GUI multiplataforma para (x)Harbour que funciona en Windows y Linux.

Ignoro el grado de avance que logró, pero todo el código fuente junto con algunos PRGs para pruebas, así como los wrappers en "C" y un archivo MAKE para construir la librería están disponibles haciendo click aquí.

Por otro lado, Xailer puede acceder nativamente a SQLite en la versión Enterprise, ya que cuenta con un DataSource nativo que facilita enormemente la conexión con este servidor de base de datos.

miércoles, 29 de abril de 2009

Como conectar FiveWin con MySQL

Como con todas las bases de datos SQL, la conexión con MySQL se hace por medio de ADO (ActiveX Data Objects)

En el blog de mi amigo Armando Estrada SQLCmd, encontrarás toda la información para acceder a MySQL desde FiveWin y en general desde cualquier programa basado en xHarbour, ya sea desde modo consola, MinGUI, Xailer, etc.

Como puedo abrir DBFs por Internet

Sí es posible abrir un DBF por internet incluso con Clipper.

No es necesario tener una VPN o algún tipo de enlace dedicado, pero si un enlace de banda ancha ya sea ADSL, Cable o 3G.

Para acceder a los datos via internet, es necesario utilizar un componente de Advantage Database Server (ADS), llamado Advantage Internet Server (ó AIS), que viene incluído con el servidor de datos.

El proceso no es complejo pero sí laborioso, una lista de los paso básicos son:

En el servidor de datos:
  • Instalar el servidor de ADS en el equipo
  • Configurar en la configuración del servidor ADS los puertos para uso de internet.
  • "Abrir" el puerto correspondiente en el router y hacer el "forward" al equipo que tiene instalado el servidor ADS
  • Crear un diccionario de datos ADS para establecer los usuarios y los passwords de los mismos que podrán acceder a los datos vía internet.
En el cliente (programa en [x]Harbour):
  • Usar el RDDADS en el código fuente
  • Linkar las librerías correspondientes (RDDADS.LIB y ACE32.LIB)
  • Utilizar el tipo de servidor 4
  • Configurar el archivo ADS.INI con la IP publica del servidor y el puerto al cual conecgtar.
  • Conectar con el equipo remoto usando la función AdsConnect60()
  • Abrir los archivos DBF con el comando USE de toda la vida o con la función que comúnmente usas
Aquí puedes descargar algunos ejemplos y se incluye el código fuente de cada uno de ellos:

Ejemplo en xHarbour modo consola
Ejemplo en Xailer
Ejemplo en FiveWin

Estos programas se conectan a nuestro servidor en la Ciudad de México y te permiten hacer cosas como Altas, Bajas, modificaciones e imprimir reportes.

Manual de TOleAuto

TOleAuto es una clase nativa de xHarbour que se utiliza para manejar componentes COM como si fueran objetos nativos de xHarbour.

Esta clase fue desarrollada originalmente para FiveWin 16 bits por José Gimenez, quien es parte del equipo Xailer y posteriormente se integró nativamente a xHarbour (en Harbour existe como una LIB externa no nativa), y se puede utilizar directamente desde aplicaciones para modo consola y para Windows con cualquier GUI.

TOleAuto no tiene un manual como tal, porque lo único que hace es "instanciar" un objeto COM y lo carga dentro de una variable xHarbour, luego para manipular las propiedades y métodos del objeto COM, es necesario el manual del componente COM que hemos instanciado, no de TOleAuto.

xHarbour cuenta con una función llamada CreateObject() (muchos lenguajes de programación tienen esta función con el mismo nombre), se puede utilizar indistintamente TOleAuto o CreateObject().

Por ejemplo si queremos trabajar con Excel, haríamos algo como esto:

objExcel = TOleAuto():New("Excel.Application")

objExcel:Visible := .T.
objExcel:Workbooks:Add()
objExcel:Cells(1, 1):Value := "Prueba"

Es necesario saber el "ProgID" o nombre del servicio COM que queremos usar, en este caso: "Excel.Application".

Las propiedades ::Visible, ::Workbooks, ::Value y los métodos ::Add() y ::Cells() están documentados en la AYUDA DE VISUAL BASIC PARA APLICACIONES que se instala (o deberías de instalar) al momento de instalar el paquete OFFICE.

Por lo tanto, no hay un manual de la clase TOleAuto, si quieres manipular un objeto COM creado a partir de instanciar un objeto de esta clase, deberás contar con el manual de ayuda correspondiente de cada servicio COM que quieras manipular.

Nota: Los componentes COM requieren estar instalados localmente en la computadora que los vaya a utilizar.

jueves, 23 de abril de 2009

DBUs Visuales

Las herramientas DBU (DataBase Utilities) son bastante populares para manejo de tablas DBFs, hoy en día hay varias opciones muy buenas, la mayoría de los productos soportan DBFs, tanto indices NTX como CDX, y algunos de ellos hasta ADTs de Advantage Database Server.

martes, 21 de abril de 2009

Como meter un formulario en una pestaña de un folder con Xailer

Sí es posible meter un formulario dentro de una pestaña de un folder, hay que proceder así:

1) Crea un formulario nuevo, agrega tus controles, pero cambia la clase padre (FROM TFORM) y cámbialo por TFolderPage (FORM TFOLDERPAGE).

2) Crea en otro formulario un folder SIN PESTAÑAS, sólo el folder.

3) Usando el evento ON INITIALIZE de este formulario, crea las pestañas, y llama al formulario creado en el paso (1), al momento de llamarlo pásale como parámetro EL OBJETO FOLDER contenedor Tform():New(::oFolder).

El ejemplo DBFData6 utiliza esta técnica para meter formularios en folders, puedes revisarlo para tener un ejemplo funcional.

¿ Cómo verifico que una dirección de correo es válida ?

Dentro del protocolo SMTP existe el comando VRFY, el cual se utiliza para preguntarle a servidor de correo si una dirección de correo existe en dicho servidor.

Por ejemplo si tu quieres saber si la dirección info@ciber-tec.com existe, entonces tienes que realizar un enlace al servidor ciber-tec.com y preguntar si la cuenta "info" existe.

Si utilizas Funcky 6.0 para enviar tus mensajes de correo, el objeto SMTP de Funcky tiene el método Verify que te permite verificar si existe la dirección de correo antes de enviarlo:

WITH OBJECT TOleAuto():New("FunckySmtp")

IF :Validate("ciber-tec.com","info@ciber-tec.com")
...
...
...
ENDIF

END WITH

Si usas FiveWin con su clase TSMTP, tienes que modificar el código fuente de la clase para que realice el envío del comando VRFY al servidor.

Nota: No todos los servidores de correo soporta la verificación de direcciones, esta tiene que estar configurada en el servidor, si el servidor de correo no soporta el comando VRFY, entonces el uso de este comando siempre devolverá FALSE.

Conectar con base de datos en red

La pregunta de la semana:

Instalé una base de datos SQL en mi computadora con Windows XP o Vista y ahora quiero que todos los usuarios de la red local se conecten con mi computadora para que puedan ver los datos.

Pasos a seguir:

1) Asegúrate que el servidor de base de datos se esté ejecutando en el equipo que será el servidor
2) Asegúrate que el equipo servidor tenga una dirección IP, preferentemente FIJA
3) Asegúrate que los equipos en el resto de la red puedan ver a tu equipo en el entorno de red

y el mas importante de todos:

4) DESBLOQUEA EL PUERTO QUE USA EL SERVIDOR DE DATOS EN EL FIREWALL DE WINDOWS, de lo contrario NUNCA te vas a poder conectar.