Вы находитесь на странице: 1из 95

Programacin

TABLA DE CONTENIDO
Programacin........................................................................................................................................................3
Ficheros..............................................................................................................................................................21
Aplicaciones o Modulo del Sistema....................................................................................................................21
Tabla de Datos.................................................................................................................................................22
Generador de Browses o Listas.....................................................................................................................23
Opciones Para los Campos..........................................................................................................................24
Men de Acceso...............................................................................................................................................26
Definicin del Men.....................................................................................................................................26
Programas Fuentes Dpxbase..........................................................................................................................27
Botones de la Barra del Men Principal.............................................................................................................30
Personalizar Mensajes en la Barra de Botones...............................................................................................30
Enlace Entre Tablas..........................................................................................................................................31
Otras Funciones..................................................................................................................................................31
Generador de Informes.....................................................................................................................................31
Diseo de Formularios......................................................................................................................................31
Continuidad en Datapro Para Tablas DBF..........................................................................................................34
Continuidad en el Lxico Xbase Desde los Productos DOS..................................................................................34
Componente Dataset........................................................................................................................................35
Clase Tdataset:............................................................................................................................................36
Funciones para Sentencias SQL........................................................................................................................38
Funciones para el Manejo de Datos...................................................................................................................39
Opentable(Csql,Ldata).................................................................................................................................39
Asql(Csql)...................................................................................................................................................39
Sqldelete(Ctabla,Cwhere).............................................................................................................................40
Sqlupdate(Ctabla,Ccampo,Xvalor,,Cwhere)....................................................................................................40
Sqlget(Ctabla,Ccampo,Cwhere)....................................................................................................................40
Dtosql(Dfecha).............................................................................................................................................40
Sqltodate(Cfecha)........................................................................................................................................41
Bdlist(Ctable,Afields,Lgroup,Cwhere).............................................................................................................41
Bdselect(Ctable,Afields,Lgroup,Cwhere)).......................................................................................................42
Objetos............................................................................................................................................................43
Archivos de Ayuda............................................................................................................................................45
Clases Propietarias Datapro................................................................................................................................46
Tpublic............................................................................................................................................................46
Ttable..............................................................................................................................................................47

Manual del Usuario

Captulo VI. Pag: 1

Programacin

Tdpedit...........................................................................................................................................................52
Mdulos HRB.......................................................................................................................................................57
Glosario de Trminos..........................................................................................................................................61

Manual del Usuario

Captulo VI. Pag: 2

Programacin

DICCIONARIO DE DATOS:
Es una conjunto de metadatos relacionados de manera jerrquica que contiene toda la informacin y
funcionalidades tcnicas de la base de datos del sistema AdaptaPro y bajo este concepto se
fundamenta todos las actividades del sistema: Introduccin de Datos, Procesos e y emisin de
informacin.
En wikipedia hemos encontrado esta descripcin muy cercana a la naturaleza de del diccionario de
datos de AdaptaPro.
HTTP://ES.WIKIPEDIA.ORG/WIKI/DICCIONARIO_DE_DATOS

BASE DE DATOS:
Es un conjunto de Datos pertenecientes a un mismo contexto de manera:
Jerrquica y Relacional.

Estructurados,

Estructurado: Cada tabla est compuesta por campos y Registros.


Jerrquica: Se refiere a la dependencia en cascada de las tablas, ejemplo: Tabla Padre, Hija, Nieta.
Relacional: Se refiere al vnculo en las tablas mediante uno o varios campos comunes entre la tabla
Padre con la tabla hija tambin denominada: Entidad y Relacin.
http://es.wikipedia.org/wiki/Base_de_datos
http://es.wikipedia.org/wiki/Base_de_datos_relacional
Utilizacin de Bases de Datos relacionales (RDBMS):
AdaptaPro es un sistema de tecnologa Cliente/Servidor y el servidor se refiere a la base de
datos MySQL quien posee caractersticas de RDBMS .
http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_bases_de_datos_relacionales
Gracias al diccionario de Datos, el usuario podr crear nuevas tablas y vnculos entre ellas
sin necesidad de poseer conocimientos a nivel de un (DBA Administrador de Bases de
Datos). AdaptaPro se encarga de construir la sentencias SQL y enviarlas hacia el servidor
de la base de datos para que este genera las tablas e integridad referencial entre las tablas.
Ventajas de un sistema diseado bajo el concepto de diccionario de Datos Vs un sistema sin
diccionario de Datos.
Caracterstica

AdaptaPro

Manual del Usuario

Sistemas Clsicos

Captulo VI. Pag: 3

Programacin

Crecimiento del Permite crecimiento debido a que el


Sistema
sistema est fundamentado en el
diccionario de datos y cuando el
usuario agrega nuevos componentes en
el diccionario de Datos el sistema
tambin va a crecer
Documentacin Documentacin:
Todos los componentes funcionales
para el manejo de datos se encuentran
exclusivamente en el diccionario de
Datos. El diccionario de datos es la
documentacin de la base Base de
datos.
Certificacin

Permite certificacin de normalizacin


de la base de datos debido que se
puede conocer su diseo y relaciones.

Optimizacin

El usuario podr optimizar la relacin


entre tablas sin necesidad de tener
conocimientos de base de datos a nivel
de un DBA
**AGREGAR REGLAS PARA LA
OPTIMIZACION **
El sistema podr ser actualizado
cmodamente debido a que el
diccionario de datos se encarga de
agregar las nuevas funcionalidades a la
base de datos toda vez que se instala
una nueva versin
El diccionario de Datos marca o
distingue los contenidos del sistema de
manera estndar y las adaptaciones o
incorporaciones agregadas por los
usuarios.
El usuario mediante funcionalidades
de consulta podr conocer el flujo de
informacin, relacin y jerarqua de las
tablas.
Todas las funcionalidades de entrada

Actualizaciones
de la base de
datos

Adaptaciones

Flujo de
Informacin y
Jerarquizacin
Interaccin del

Manual del Usuario

El sistema solo podr crecer


mediante
la
participacin
directa y exclusiva por parte de
sus programadores y el usuario
no
podr
agregar
funcionalidades.
Todos los componentes estn
en el programa binario y
depende exclusivamente de
sus programadores.
La documentacin solo podr
estar en documento en formato
electrnico. Si la base de dato
cambia, la documentacin
queda desactualizada.
Al no existir una
documentacin de la base de
datos no es posible hacer una
certificacin de normalizacin
y Optimizacin.
Slo depende de un experto
DBA que conozca muy bien la
base de datos

Depende de un experto DBA


para actualizar la base de datos
segn la nueva estructura.

No existe manera de conocer


las adaptaciones realizadas en
la base de datos.
Depende de experto en DBA.

Depende del diseo del sistema

Captulo VI. Pag: 4

Programacin

sistema con el
diccionario de
Datos

Actualizacin
Selectiva
mediante
PLUG-IN

de datos mediante formularios


AdaptaPro utilizan la estructura de la
tabla para ajustar los campos segn la
definicin de
la base de datos,
ejemplo: Si el usuario requiere que el
campo Descripcin del producto
aumentarlo hasta 100 Caracteres, el
formulario de entrada de datos se
ajustara con la nueva longitud del
campo. Validacin de integridad
referencial sobre la jerarqua superior
como beneficio la reduccin de tiempo
y costo de programacin debido a que
el programador no ser requerido.
Se puede agregar funcionalidades
selectivas o parciales logrando que el
usuario agregue solo los componentes
que desee.
Los componentes se
exportan e importan mediante el
diccionario de Datos.

y esta interactuando con la


estructura de cada campo,

Solo se reemplaza el sistema


completo a nivel del programa
binario. Solo se puede utilizar
formatos de impresin con
crystal report.

Fortalezas:
Autonoma: El usuario podr lograr autonoma tecnolgica debido a que no depende del
fabricante (AdaptaPro) para realizar nuevas incorporaciones o adaptaciones del sistema.
AdaptaPro est altamente documentado que permite rpido conocimiento del diseo de la
base de datos.
Reduccin de tiempo de Desarrollo: Gracias al diccionario de datos, el sistema posee un
asistente que permite crear funcionalidades y generar cdigo fuente sin necesidad de tener
conocimientos avanzados de programacin ahorrndose horas de programacin, adems el
sistema posee funcionalidades que permite exportar e importar componentes del diccionario
de datos.
Reduccin de Costos: La reduccin de costos es significativo debido al corto de desarrollo
y las facilidades de implementacin evitando: Traslados, instalaciones manuales y dems
complejidades involucrada vinculadas para implementar nuevas funcionalidades. Gracias al
concepto uniforme del diseo de la base de datos es posible agregar ms funcionalidades
sin necesidad de realizar nuevas funcionalidades en los programas fuentes.
Uniformidad en el diseo: Todas las aplicaciones del sistema obedecen al mismo patrono
de diseo de la base de datos partiendo del siguiente principio:

Manual del Usuario

Captulo VI. Pag: 5

Programacin

Tabla
Maestra
Modelo

Productos
DPINV
DPINVTRAN

Clientes
Proveedor
Caja
Bancos
DPCLIENTES
DPPROVEEDOR DPCAJA
DPCTABANCO
DPTIPDOCCLI DPTIPDOCPRO DPCAJAINST DPBANCOTIP

Transaccin

DPMOVINV

DPDOCCLI

DPDOCPRO

DPCAJAMOV

Contabilidad
DPCTA
(Segn
Asientos)
DPCTABCOMOV DPASIENTOS

Este principio (Tabla, Modelo y Transaccin), le permite al usuario implementar mas


funcionalidades en el sistema con tan solo agregar nuevos registros en las tablas de modelo
de transacciones evitando invertir tiempo y costo para implementar nuevas funcionalidades
financieras. Este diseo permite con tan solo una consulta SQL obtener saldos de
cualquiera de estas aplicaciones:
Tabla
Inventario Lgico

Consulta SQL
SELECT MOV_CODIGO,
SUM(MOV_CANTID*MOV_LOGICO) FROM DPMOVINV
WHERE MOV_INVACT=1
GROUP BY MOV_CODIGO

Inventario Fisico

SELECT MOV_CODIGO,
SUM(MOV_CANTID*MOV_FISICO) FROM DPMOVINV
WHERE MOV_INVACT=1
GROUP BY MOV_CODIGO

Funcionalidades genricas:

PROGRAMACIN
DPXBASE es un ambiente de desarrollo para lxico de tipo Xbase y diseado para crear
aplicaciones de tipo comercial de manera rpida y sencilla. Adems incorpora un conjunto de
componentes tecnolgicos que logran aportar robustez en las aplicaciones finales. Dentro de ellas
tenemos:
1. Lenguaje de Programacin xHarbour para 32 bits y C++ de Borland.

Manual del Usuario

Captulo VI. Pag: 6

Programacin

2. Acceso a Bases de Datos de tipo SQL a travs de ODBC o Nativo MySQL. 5.x mediante
la clase EAGLE escrita en lenguaje C y mediante el uso de funciones incluidas en el
archivo de libmySQL.dll (Suministrado por MySQL 5.x)
3. Uso de Integridad Referencial en las bases de datos.
4. Reportes a Travs de Crystal Report.
5. Generador de Reportes para la clase Treport.
6. Generador de Cdigo Fuente para Formularios de mltiple propsitos: Mantenimiento
de registros, Ventanas de Dilogos, Ventanas MDI.
DPXBASE, posee un (Diccionario de Datos) que permite definir todas las tablas de tipo SQL que
sern utilizadas por el sistema de manera Jerrquica: Campos, ndices, Claves Primarias y
referencias entre tablas. Adems; importa estructuras desde formatos DBF.
XBASE:
xBase es el trmino genrico para todos los lenguajes de programacin que derivan del lenguaje de
programacin dBase, originalmente publicado por Ashton-Tate. Existen indicativos de que existi un
predecesor no comercial.
La 'x' significa que existen diversos intrpretes y compiladores para este lenguaje. Una lista
incompleta sera:
-

dBase / Visual dBASE de dBASE Inc.


(dBXL/Arago) QuickSilver
Clipper de Computer Associates
FoxPro
Visual FoxPro de Microsoft
xBase++ de Alaska Software
Recital de Recital Corp.
Visual FlagShip de multisoft GmbH
Clip
Proyecto Harbour
- xHarbour

Fuente: http://es.wikipedia.org/wiki/XBase
HARBOUR: (Creador: Antonio Linares)
Harbour es un moderno lenguaje de programacin que nace como compilador del lenguaje de
programacin Clipper (una variante de xBase) desarrollado como software libre. Su objetivo inicial
fue soportar todas las sentencias y extensiones de la versin ms popular del compilador, Clipper
5.2. Harbour es adems un compilador multiplataforma, capaz de compilar para y ejecutarse en DOS
(MS-DOS, DR-DOS, etc), Microsoft Windows, OS/2, GNU/Linux, varias variantes de Unix, varios

Manual del Usuario

Captulo VI. Pag: 7

Programacin

descendientes de BSD, Mac OS X, MINIX 3,Windows CE, Pocket PC, Symbian, iPhone OS, QNX,
VxWorks, OS/2 BeOS/Haiku, AIX utilizando el mismo cdigo fuente y ficheros de base de datos.
Fuente: http://es.wikipedia.org/wiki/Compilador_Harbour
REGLAMENTO PARA LA ASISTENCIA DE CURSOS (DPXBASE)
Requisitos:
Conocimientos: Previos programacin en cualquier lenguaje de programacin o Excel
mediante (Frmulas o Macros), dominio terico prctico en Bases de datos y Trminos del
argot informticos especficamente en el rea de desarrollo: Campos, Tipos de Campos,
Tablas de Datos, Tablas de ndices, Integridad referencial, Variables, Funciones, Tipos de
datos, Procedimientos, Arreglos (Vectores) y Objetos.
Conocimientos del Diccionario de Datos: Mediante el curso de Diccionario de datos el
usuario podr conocer y documentarse sobre la estructura de datos y diseo funcional de la
base de datos para lograr realizar consulta de la base de datos, incluir, eliminar y modificar
(Actualizar) registros.
Lectura Previa de Documentacin: Antes que el participante asista al curso es necesario
la lectura de los manuales de programacin y documentacin de ayuda (en formato CHM)
de todo el contenido de los componentes de desarrollo incluidos en la arquitectura abierta
del Sistema AdaptaPro:

Funciones xBase

C:\dpadmwin\help\dpxfunction.chm

Funciones Librera FiveWin

C:\dpadmwin\help\fivewin.chm

Comandos FiveWin

C:\dpadmwin\help\fwcmd.chm

Manual de Programacin
DpXbase

C:\dpadmwin\docs\dpxbase.doc

Clases FiveWin (Objetos)

C:\dpadmwin\help\fwclass.doc

Funciones DpXbase

C:\dpadmwin\help\dpxbase.chm

Utilizacin de Clases para el Curso de DpXbase

Manual del Usuario

Captulo VI. Pag: 8

Programacin

TDPEDIT()

Formularios MDI

TTABLE()

Inclusin, Consulta y Modificacin de registros

XBROWSE()

Muestra de datos mediante lneas y Columnas

TGET()

Introduccin de Datos mediante teclado (Input)

TSAY()

Muestra de textos (OutPut)

TBMPGET()

Introduccin de Datos mediante teclado y funcionalidad


de Boton

TCOMBOBOX()

Presenta Selector de Datos desde una Lista de opciones

DESARROLLO DE CURSOS DPXBASE.


Desarrollo del Curso:
Bsico: Se realiza durante Cuatro o Seis horas y mediante la prctica de crear varios
programas dedicados exclusivamente para el manejo de datos,: Cadenas, Fechas, Nmeros,
Lgicos y Bloques de Cdigos y Programacin Orientada a Objetos.
Orientado: Usuarios del sistema de nmina que desea realizar adaptaciones o nuevos
conceptos de pagos, usuarios que deseen adaptar reportes generados mediante DpXbase.
Avanzado: Se realiza durante Cuatro o Seis horas mediante la creacin de programas para
crear formularios para la introduccin de datos en una tabla en MYSQL y consulta de datos
mediante la clase TXBROWSE()
Programacin con Bases de Datos:

REGLAMENTO PARA EL DISEO DE FORMATOS CON CRYSTAL


REPORT.
Se entiende por formato palabra derivada del trmino Forma. Para el caso del sistema de
AdaptaPro, los archivos de extensin .RPT (Crystal Report). Mediante una consulta SQL

Manual del Usuario

Captulo VI. Pag: 9

Programacin

genera un archivo de extensin .DBF (Dbase File) contentivo de los registros y campos
que sern mostrados mediante el formato diseado con Crystal Report Version 8.0.
Origen de los Datos para Crystal:
1. Formatos de Documentos: Se genera desde una tabla en formato .DBF
generada desde un Programa escrito mediante el lenguaje de DpXbase. En caso que
el formato de Crystal Report requiera un campo nuevo, es necesario adaptar la
consulta SQL y/o instrucciones del programa DpXbase.
2. Formatos de Reportes: Se genera mediante una tabla en formato .DBF creado
con el cursor mediante sentencia SQL indica en un reporte construido mediante el
generador de reportes AdaptaPro.
Tipo de Formato Segn Destino:
Normalizado: Cuando se refiere a una necesidad particular de cada empresa y este sede
realizar partiendo de una copia de un formato ya creado o crear uno nuevo y este debe
poseer un prefijo diferente al texto DP*.*, para cumplir con esta norma es necesario
nombrar a cada formato en crystal segn las inciales del cliente, ejemplo: Organizacin
Kanguro, todos los formatos con crystal report seran denominados mediante el prefijo
OKFACTURA.RPT logrando facilitar una futura reinstalacin o actualizacin del sistema.
Estandarizado: Se refiere cuando se mejora, crea o corrige un formato en crystal report
que podr formar parte de los sistemas estndar AdaptaPro, estos debern previamente
consultado por el departamento de desarrollo de AdaptaPro para emitir recomendaciones y
exigencias. Este archivo debe ser creado con el prefijo DP, ejemplo: DPCBTEPAGO.RPT
(Comprobante de Pago). El tcnico debe agregar el formato crystal en el reporte DpXbase
que lo ejecuta y enviar para departamento de desarrollo (mediante correo) el reporte y su
respectivo reporte. Para as evitar tener reportes sin formatos crystal report y archivos de
formatos RPT (Crystal Report) sin reporte.
Formas de Diseo:
1. Diseo de Formato: Se refiere exclusivamente para la ubicacin de los campos en
el formato de crystal report segn indicaciones indicadas por el usuario.
2. Modificacin de la Tabla DBF con campos Existentes: Cuando se requiere
agregar uno o varios campos en la tabla DBF necesario para ser mostrados en el
formato crystal. Para este caso es necesario modificar la sentencia SQL que genera
la tabla DBF, si se refiere a un reporte, es necesario modificar el reporte y en caso
de ser un documento es necesario modificar el programa fuente DpXbase.

Manual del Usuario

Captulo VI. Pag: 10

Programacin

3. Incorporacin de nuevos campos inexistentes en el diccionario de Datos:


Cuando se refiere a la incorporacin de nuevos campos en las tablas del sistema y
requiere labores de programacin bien sea para modificar un formulario para la
carga de datos y creacin de un nuevo programa DpXbase. Esta labor depende de
nuevos o modificacin de programas DpXbase.
Solicitud de Reportes con formatos Crystal Report:
1. Reportes: El cliente debe suministrar un modelo de reporte diseado en formato
excel, indicado: Columnas, Totales, Agrupaciones, Ordenamiento, Totales, Filtros
(Rangos y Criterios) de los registros.
2. Documentos: Se refiere a documentos financieros: Facturas, Cotizaciones,
Presupuestos, Comprobantes de pago y similares. El cliente debe suministrar una
fotocopia del mismo con indicaciones de cada campo. Solicitar copia del
documento con impresin de datos para precisar la ubicacin de los campos y el
contenido de los mismos. Precisar: Campos Memos, Totalizadores, Seriales, Lotes,
Control de Precios, descuentos. Sub totales (Van y Vienen), entre otros.
Levantamiento de Requerimientos:
1. Cuando forma parte del proyecto de implementacin: El lder de proyectos debe
evaluar las necesidades en cada formato e incluir en el proyecto inventario de
formatos en crystal report que deben ser diseados segn este reglamento.
2. Solicitud directa o demanda: El lder de proyecto debe solicitarle al usuario copia
del documento vacio y copia del documento impreso, debe ser solicitado
fsicamente. En cada formato, se realiza presupuesto por desarrollo por tarea y
presupuesto por instalacin virtual. En caso que el usuario desee por cualquier
motivo la instalacin del formato personalizado, esta se debe presupuestar como una
labor de media jornada. Un formato puede ser cotizado media jornada paa su
desarrollo ms pruebas y media jornada para su instalacin.
Formato

Comentarios

Usuarios en donde ser


instalado el formato

Indicar Cantidad de Formatos:


Formalizar la Entrega: Luego que el formato sea diseado, instalado en el PC del cliente,
es necesario realizar una impresin fsica del mismo (En caso de factura fiscal, imprimir
una factura ya realizada en un formato electrnico y luego imprimirla en papel en blanco),

Manual del Usuario

Captulo VI. Pag: 11

Programacin

necesario para formalizar la satisfaccin del cliente. As se evita reclamos por incidencias
cuando algunos usuarios modifican los formatos y luego no contamos con formalidades
para emitir una respuesta.
Cantidad de Usuarios: Segn la cantidad de usuarios en donde ser instalado el sistema
depender el tiempo empleado para la entrega formal del mismo.
Recomendaciones: Para optimizar el tiempo de entrega, es necesario hacer la instalacin de
todos los formatos en una sola visita. Para evitar la instalacin en cada PC, es necesario
registrar cada formato, en la opcion Registro de personalizaciones ubicada en la seccion
Ficheros de la aplicacin Definiciones del Sistema. Esta opcion distribuye los formatos
de Crystal Report en todos los demas PC donde se ejecuta el sistema. Todo el personal
tcnico debe evaluar esta funcionalidad antes de ser utilizada con el cliente.

Tarifas mediante en Tiempo:


Descripcin

Cant/Horas

Diseo de Formato sin necesidad de cambios


Diseo de Formatos con cambios en el Query
Diseo de Formatos con incorporaciones en el Diccionario de Datos o
cambios en los formularios.
Diseo de Formatos de Crystal derivados de un Reporte.

Normativa para el diseo de Reportes en Crystal Report para componentes estandar


del Sistema AdaptaPro:
Caractersticas de los reportes que se diseen en Crystal Report para el estndar se podra
seguir los mismos parmetros para los que tengan que ser adaptados al cliente.
Los mismos deben estar generados mediante tablas DBF, que se generan al emitir el reporte
mediante los sistemas Adaptapro los cuales son almacenados en la carpeta crystal. No est
permitido hacer conexion directa con la base de datos debido a que los filtros creados por el
generador de reportes mediante la clausula WHERE en la sentencia SQL utiliza para
generar la consulta que sera mostrada mediante el formato crystal.
Los mismos deben estar diseados con el tipo de Letra Tahoma (Occidental), Nombre de la
empresa tamao de letra 11 negrita a la izquierda, RIF tamao de letra 10 negrita a la

Manual del Usuario

Captulo VI. Pag: 12

Programacin

izquierda, Titulo tamao de letra 11 negrita centrado, Fechas de Rangos centrado debajo del
Titulo tamao de letra 10 negrita,
Fecha, RIF de la empresa, Usuario y Sucursal la etiqueta de tamao 9 negrita y los datos
tamao 9 no negrita alineados a la derecha.
El titulo del detalle tamao 10 negrita el mismo colocarlo en recuadro redondeado color de
fondo gris claro, detalle tamao 10 no negrita separadas las columnas con lnea punteada
color gris.(Este tamao puede variar dependiendo de la cantidad de informacin que se
tenga que colocar en el reporte y esto conlleva a que la informacin se presente en el papel
en forma Vertical o Horizontal.
Como referencia con estos datos se puede tomar el reporte CLIDOC.rpt

VARIABLES DEL SISTEMA:


oDp (Es el nombre del objeto contentivo de todas las variables publicas del sistema de manera
encapsulada) logrando optimizar el uso eficiente del recurso de memoria RAM del sistema
Operativa.
La asignacin o creacin de variables se solicita de manera directa.
La clase TPUBLIC evala si esta variable no existe para asignar de manera dinmica su valor para
ser utilizada en las siguientes partes del sistema, ejemplo:
/*
------------------------------------------------------------*/
PROCE MAIN()
oDp:cVariable:=Valor
MsgAlert(oDp:cVariable) // Mostrar Valor
RETURN
/*
------------------------------------------------------------*/
Para verificar si existe una variable en el objeto oDp: se utiliza el mtodo

Manual del Usuario

Captulo VI. Pag: 13

Programacin

/*
------------------------------------------------------------*/
PROCE MAIN()
IF oDp:IsDef(cVariable)
MensajeErr(Variable cVariable no Existe)
ELSE
MensajeErr(Variable cVariable si Existe)
ENDIF
RETURN NIL
/*
------------------------------------------------------------*/

Cuando es utilizada la funcin SQLGET(TABLA,CAMPO,CONDICION) mediante la clase


TTABLE para obtener el valor de un campo indicando el nombre de la tabla y la sentencia WHERE
de SQL y el registro es encontrado, el sistema copia el contenido de cada campo se el arreglo
oDp:aRow[],Ejemplo
/*
------------------------------------------------------------*/
PROCE MAIN()
SQLGET(DPINV,INV_CODIGO,INV_DESCRI,INV_CODIGO+GetWhere(
=,01))
// Es necesario evaluar si tiene contenido para evitar
leer // un arreglo que no existe
IF Empty(oDp:aRow)
MsgAlert(ODp:aRow[1]) // Muestra el cdigo del producto
02
MsgAlert(oDp:aRow[2]) // Muestra Descripcin
ENDIF
RETURN NIL
/*
------------------------------------------------------------*/

Manual del Usuario

Captulo VI. Pag: 14

Programacin

INSPECCION DE OBJETOS:

Tipos de Datos:
DpXbase soporta los mismos tipos de datos de las Tablas de Formato DBF de Dbase o Foxpro,
adicionalmente soporta tipos de datos exclusivos de Clipper tales como: Bloques de Cdigo,
Arreglos, Objetos y Nulos . Para una fcil compresin o lectura de programas escritos en DpXbase
utilizamos la notacin Hngara que consiste en una tcnica para declarar las variables con un prefijo
que indica el tipo de dato que lo representa, ejemplo:
LOCAL nNumerico:=100
LOCAL cCaracter:=Caracteres
LOCAL dFecha:=DATE()
LOCAL lLogico:=.T.
LOCAL bBloq :={||NIL}
LOCAL aArray :={1,2,3,4,5}
LOCAL oObjeto:=OpenTable(SELECT * FROM DPINV)

Numricos,

soporta 19 enteros y siete decimales, se refiere a valores de tipo numricos.


Igualmente soporta valores enteros (sin decimales).

Carcter o Memo: Acepta caracteres o cadenas de datos y soporta hasta

4 Gigas por cada

variable.
Ejemplo para obtener datos de una cadena en formato Texto, para este caso, los datos obtenidos
mediante un archivo Texto desde la consulta del portar del Seniat.
El texto contiene
<?xml version="1.0" encoding="ISO-8859-1"?> <rif:Rif xmlns:rif="rif"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
rif:numeroRif="J312344202"><rif:Nombre>SERVICIOS INFORMATICOS DATAPRO
C.A. (SERVICIO INFORMATICOS DATAPRO,
C.A)</rif:Nombre><rif:AgenteRetencionIVA>NO</rif:AgenteRetencionIVA><rif:
ContribuyenteIVA>SI</rif:ContribuyenteIVA><rif:Tasa>75</rif:Tasa></rif:Ri
f>

Para manipular cadenas es necesario el uso de las siguientes funciones y Expresiones:


AT(C,ABCD)

Manual del Usuario

Determina la posicin de la letra C en la cadena

Captulo VI. Pag: 15

Programacin

C$ABC
LEFT(ABCD,2)
RIGHT(ABCD,2)
SUBS(ABCD,2,2)
STRTRAN(ABCD,B,b)

ABCD. Generando como resultado 3


Esta expresin comparativa indica si el carcter
C se encuentra en la cadena ABCD. Su valor
es .T. (Lgico)
Obtiene dos caracteres desde el lado izquierdo o
inicio de la cadena, en este caso obtiene AB.
Obtiene dos caracteres desde el lazo Derecho
de la cadena o desde el final, en este caso
devuelve CD
Obtiene desde el segundo carcter los dos
siguientes caracteres, en este caso es BC
Busca en la cadena ABCD, en contenido de
B y lo reemplaza por b, quedando la
expresin como: AbCD.

Date o Fecha: Soporta datos segn el formato dd/mm/aaaa y se refiere a fechas que pueden
soportar operaciones matemticas y su uso est vinculado
DAY(),MONTH(),CMES(),DOW(),DTOC(),CTOD(), DTOS(), entre otras.

con

las

funciones

Lgicos:

Se obtiene por las comparaciones de valores mediante operadores lgicos y


relacionales, siempre su valor es verdadero .T. o Falso .F.

Nulos: Se refiere al valor por defecto que posee una variable cuando se declara sin valor, LOCAL
nValor, de esta manera nValor es NIL. Si preguntamos por su valor: MsgAlert(ValType(nValor)),
mostrar NIL.

Arreglos: Tambin llamados vectores son listas de valores de una sola dimensin, DpXbase al
igual que clipper no soporta arreglos multimensionales en forma literal sin embargo un arreglo puede
esta compuestos de listas contentivas de arreglos logrando la manipulacin de arreglos
multidimensionales. La lista de los arreglos se declaran con {}, otra ventaja de los arreglos es que su
contenido puede estar compuesto por datos de varios tipos. Ejemplo:
aLista:={1,2,3,4,5,6}
aLista:={Uno,2,date(),nil,.T.}
Para declarar arreglos multidimensionales, debe utilizar la siguiente forma:
aLista:={}

Manual del Usuario

Captulo VI. Pag: 16

Programacin

AADD(aLista,{1,2,3,4,5,6}) // Puede Notar que estamos adicionando una lista de


nmeros
Para mostrar el primer elemento, se debe utilizar la siguiente sintaxis:
MsgAlert(STR(aLista[1,1])) // Mostrar 1
Tambin puede utilizarse aLista[1][1]
DpXbase provee un conjunto de funciones diseadas exclusivamente para el manejo de arreglos:
AADD(), ASORT(), AEVAL(), ASIZE(), ARREDUCE(), ADEL(), AINS(), ASCAN(), ACLONE() Etc.
El uso de arreglos ha sido altamente explotado en DpXbase, se utilizan conjuntamente con bloques
de cdigo y objetos, logrando una potencial herramienta de programacin. Veamos sus ms
importantes usos:
// Buscar en un arreglo Unidimensional
#INCLUDE DPXBASE.CH
PROCE MAIN()
LOCAL aData:={MYSQL, SQL-SERVER,POSGRES}
nAt:=ASCAN(aData,{|a,n| a=POSGRES)
? nAt,Encontrado en 3era posicin
RETURN .T.
// Buscar en un arreglo Multidimensional
#INCLUDE DPXBASE.CH
PROCE MAIN()
LOCAL aCampos:={}
AADD(aCampos,
AADD(aCampos,
AADD(aCampos,
AADD(aCampos,
AADD(aCampos,

{CARACTER,C,10,0})
{NUMERICO,N,16,2})
{FECHA
,D,08,2})
{LOGICO ,L,01,2})
{MEMO
,M,10,2})

nAt:=ASCAN(aCampos,{|a,n| a[2]=L)
? nAt,Econtrado en 3
RETURN .T.

Manual del Usuario

Captulo VI. Pag: 17

Programacin

El ambos ejemplos podemos notar la siguiente sintaxis aplicada en la funcin ascan()


nAt:=ASCAN(aCampos,{|a,n| a[2]=L)
Estos dos parmetros |a,n| se refiere a:
a Corresponde al elemento que est en evaluacin
n Se refiere al nmero del elemento.
La funciones ASCAN() y AEVAL() realizan un recorrido ascendente del arreglo, si el arreglo est
compuesto de 10 elemento, se ejecutar un proceso cclico de 10 vueltas, en cada vuelta sern
enviados como parmetros el elemento del arreglo a y la posicin n del mismo.

Bloques de Cdigo: Como su nombre lo indica son datos que contienen cdigo de ejecucin
que ejecutan como si fuese parte del EXE, la gran diferencia entre un programa ejecutable
Binario y un bloque de cdigo estn en que el programa ejecutable se encuentra almacenado en
un fichero de extensin EXE y el bloque de cdigo est almacenado en una variable. El Bloque de
cdigo es un potencial altamente aplicado en todo DpXbase y en las reglas de negocio encargadas
de generar las transacciones comerciales.
Declaracin:
bBloque:={||MsgAlert(Hola DpXbase)})
Para ejecutarlo:
Eval(bBloque) // Muestra en un dialogo Hola DpXbase
Tambin recibe parmetros, ejemplo:
bBloque:={|cMensaje|MsgAlert(cMensaje)})
Eval(bBloque,Este es el mensaje)
Los bloques de cdigo se comportan en forma similar a una funcin de un programa, es decir,
pueden recibir parmetros y devolver valores, ejemplo:
FUNCTION SUMAR(nValor1,nValor2)

Manual del Usuario

Captulo VI. Pag: 18

Programacin

LOCAL nResp:=nValor1+nValor2
RETURN nResp
Para Ejecutar la suma es necesario llamar a la funcin sumar
de la siguiente manera: SUMAR(10,20) y devuelve 30
La traduccin literal de la funcin SUMAR() hacia bloque de cdigo es:
BSumar:={|nValor1,nValor2|nValor1+nValor2}
Para ejecutar la Suma, es necesario utilizar la funcin EVAL() de la siguiente manera:
EVAL(bSumar,10,20) // Devuelve 30
Los bloques de cdigo estn en todas partes del sistema, principalmente donde estn las
ejecuciones, tales como: Clic en un control (Botn, Men, etc.). Conocer ampliamente y dominar el
concepto de bloque de cdigo le ayudar a conocer DpXbase y construir soluciones aprovechando
el potencial de los bloques de cdigo.
Cada vez que el usuario presiona CLICK en un control est haciendo uso de un bloque de cdigo
que contiene la ejecucin del control, ejemplo:
#DEFINE DPXBASE.CH
PROCE TESTBLQ()
LOCAL oDlg,oBtn
DEFINE DIALOG oDLG TITLE Bloque de Cdigo
@ 1,1 BUTTON oBtn PROMPT Cerrar
oBtn:bAction:={||oDlg:End()
ACTIVATE DIALOG oDLG
RETURN NIL
En este ejemplo puede observar que la accin de botn Cerrar est definida mediante un bloque
de cdigo, cuando el usuario presione Clic ser ejecutado el bloque de cdigo oBtn:bAction que
est compuesto por la llama al mtodo End() cerrar del dialogo identificado con la variable oDlg.
Los bloques de cdigo estn en todo el uso de DpXbase, gran parte de las funciones DpXbase
utilizan bloques de cdigo en especial las funciones orientada al manejo de arreglos.

Manual del Usuario

Captulo VI. Pag: 19

Programacin

Objetos: El concepto de Objetos utilizado por DpXbase est basado bajo el concepto clsico de
Programacin Orientado a Objetos (OOP). Podemos definir que un objeto es un elemento que est
compuesto por datos y que realizar actividades, como por ejemplo una calculadora: Posee teclas
que realizan tareas: (indicar un numero, sumar, restar, etc.) y contiene datos nmeros del 0 al 9
para realizar operaciones matemticas. Podemos notar que DpXbase posee una calculadora
totalmente diseada bajo el concepto de programacin Objeto.
Los datos de tipo objeto se obtiene mediante la llamada a una clase Objeto preexistente en
DpXbase, para hacer llamada a un objeto utilizamos la siguiente sintaxis:
oObjeto:=TDpEdit():New()
oObjeto:=DPEDIT():New("Titulo","forms\formulario.edt","oObjeto",.F.)
oObjeto:Activate()

Si evaluamos el tipo de dato de oObjeto con ValType(oObjeto) devuelve O


Las funciones del objeto o mejor dicho lo que hace se denomina Metodo() y los datos que contiene
se llama Data.
Todos los controles Windows (GET,TEXT,COMBO,DIALOG) son manipulados mediante objetos que
se definen a travs de comandos predefinidos en el fichero de encabezado DPXBASE.CH
En el fichero DPXFUNCTION.CHM ubicado en la carpeta HELP de sistema de gestin
empresarial o nmina, contiene la documentacin y ejemplo de cada una de las funciones estndar
xbase utilizadas en DpXbase. Por razones de comodidad y estandarizacin DpXbase utiliza las
mismas funciones estndar xbase de Clipper 5.2 con la diferencia que estn diseadas para 32 bits.

Operadores: Son un conjunto de smbolos utilizados para generar resultados aritmticos y/o
lgicos.

Aritmticos: Se encargan de realizar operaciones aritmticas de: Asignacin, Suma, Resta,


Multiplicacin y Divisin.
:= Asignar: Asigna el resultado hacia una variable, ejemplo:
nValor:=100+200

+ Sumar. Suma en forma algebraica valores numricos y fechas, tambin concatena


valores de tipo carcter.

Manual del Usuario

Captulo VI. Pag: 20

Programacin

LOCAL nMonto:=100+200
LOCAL bFecha:=DATE()+100
LOCAL cChar:=NETNAME()+ este es mi PC
? nMonto,dFecha,cChar

Restar. Resta algebraicamente valores numricos y fechas. Ejemplo:


LOCAL nMonto:=200-100
LOCAL bFecha:=DATE()-1
? nMonto,dFecha

* Multiplicar. Realiza la multiplicacin de valores numricos. Ejemplo:


LOCAL nMonto:=5*5
? nMonto,dFecha

/ Dividir. Realiza la divisin de valores numricos. Ejemplo:


LOCAL nMonto:=5*5
? nMonto

** Potenciacion. Genera el valor potencial de un valor numrico. Ejemplo:


#INCLUDE DPXBASE.CH
LOCAL nMonto:=3**2
? nMonto

Relacionales: Utilizado para realizar comparaciones entre valores y generan valores lgicos .T.
Verdadero o .F. Falso.

Manual del Usuario

Captulo VI. Pag: 21

Programacin

=
==
>
>=
<
<=
<>
$

Igual que, ejemplo:


lResp:=(1=0)
Exactamente igual que, ejemplo:
lResp:=(1.0==1.1)
Mayor , ejemplo:
lResp:=(1>0)
Mayor o Igual que, ejemplo:
lResp:=(1=0)
Menor que, ejemplo:
lResp:=(0<1)
Menor o Igual que, ejemplo:
lResp:=(1<=0)
Diferente que, ejemplo:
lResp:=(1=0)que
Cadena Asociada A$ABEDARIO

Lgicos: Se encargan de realizar operaciones que generan resultados verdaderos y falsos con
diversas comparaciones relacionadas.
.AND.
.OR.

.NOT.

Y , todas las condiciones deben cumplirse:


IF (1=1) .and. (2=2)
O, Una de las condiciones debe cumplirse
IF (1=0) .or. (1=1)
El smbolo # puede ser usado por .OR.
IF (1=0) # (1=2)
Negacin.
IF .NOT. (1=2)
Tambien puede utilizar
If (1=0)

Manipulacin de Datos:
DpXbase al igual que Clipper tienen consideraciones especiales para manipular datos de tipo
arreglos y bloques de cdigo.
Manipulacin de Arreglos: Este tipo de datos se manipulan mediante las siguientes funciones
especialmente diseadas para el manejo de arreglos y listas. Recordemos que los arreglos es un

Manual del Usuario

Captulo VI. Pag: 22

Programacin

tipo de datos compuestos por otro tipo de datos, generando una lista: aLista:={1,2,3,4,5,6} , una de
las grandes ventajas de los arreglos es que soportan cualquier tipo de datos incluyendo arreglos, los
arreglos de dentro de un arreglo conforman arreglos multidimensionales o concatenados. La
referencia de cualquier elemento se establece mediante su posicin, ejemplo: aLista[2], se refiere al
segundo elemento de la lista.

Iniciacin de Arreglo:
aArray:={}

Declaracin de un Arreglo de elementos:


aArray:=ARRAY(20)

? aData[1] // Muestra NIL

Genera un arreglo con 20 elementos nulos.

Rellenar un arreglo
Para rellenar el arreglo del carcter X:
AFILL(aArray,X)
? aData[1] // Muestra X

Agregar un nuevo elemento:


AADD(aData,Nuevo)

Medir la longitud del arreglo:


? LEN(aData) // Genera 21

Remover o Quitar el primer elemento del arreglo:


ADEL(aData,1)
// Remueve el primer elemento con valor NIL, la lista se
mantiene en 21 elementos.

Manual del Usuario

Captulo VI. Pag: 23

Programacin

aData:=ASIZE(LEN(aData)-1) // Reduce el tamao de la lista,


ahora queda con 20 elementos.
Tambin se puede remover un elemento con la siguiente funcin:
ARREDUCE(aData,1)
elemento.

//

Elimina

fsicamente

el

primer

Asignar un Valor en cualquier posicin del Arreglo:


aData[1]:=Nuevo Valor

Insertar un nuevo Elemento:


AADD(aData,NIL) // Agrega un nuevo elemento al final
AINS(aData,Primero)
// Inserta un nuevo elemento en la
primera posicin

Ordenar un Arreglo
ASORT(aData)

Ordenar un Arreglo Multidimensional


LOCAL aData:={},nAt
AADD(aData,{Z,3})
AADD(aData,{B,2})
AADD(aData,{A,1})
aData:=ASORT(aData,,, { |x, y| x[1] < y[1] })
// Si se require Ordenar por la segunda Columna numrica
aData:=ASORT(aData,,, { |x, y| x[2] < y[2] })

Buscar en la Lista.
ASCAN(aData,X)

Manual del Usuario

//

Realiza

la

bsqueda

de

en

los

Captulo VI. Pag: 24

Programacin

elementos de la lista.
Para arreglos multidimensionales:
LOCAL aData:={},nAt
AADD(aData,{A,1})
AADD(aData,{B,2})
AADD(aData,{C,3})
nAt:=ASCAN(aData, {|a,n| a[1]=B

})

? nAt // Respuesta 2

Visualizar un Arreglo:
ViewArray(aData)

Duplicar Arreglo:
LOCAL aData:={},aNuevo
AADD(aData,{A,1})
AADD(aData,{B,2})
AADD(aData,{C,3})

aNuevo:=Aclone(aData)
Recorrer una lista
LOCAL aData:={},nTotal:=0
AADD(aData,{A,1})
AADD(aData,{B,2})
AADD(aData,{C,3})
AADD(aData,{B,4})
Aeval(aData,
{|a,n,b|
nTotal:=nTotal + b })

Manual del Usuario

b:=iif(

a[1]=B,

a[2]

,0),

Captulo VI. Pag: 25

Programacin

// totaliza los elementos cuya columna es B

Obtener el ultimo elemento :


LOCAL aData:={1,2,3,4,5,6}
? ATAIL(aData) // Muestra 6
Otro uso, puede ser
? aData[len(aData)] // Muestra 6

Totalizar una lista


LOCAL aData:={},aTotal:=0
AADD(aData,{A,1})
AADD(aData,{B,2})
AADD(aData,{C,3})
AADD(aData,{B,4})
aTotales:=TOTALES(aData)
? aTotales[2] // Respuesta 10

Manipulacin de Cadenas: El tipo de dato carcter se puede concatenar en forma literal. DpXbase
Incluye un conjunto de funciones que permiten trabajar ampliamente con este tipo de datos.
Incrementar o Concatenar Cadenas.
LOCAL cChar:=
CChar:=cChar + Nueva Cadena
Generando un valor de tipo Memo,
cChar:=cChar + CRLF + Nueva Lista

Manual del Usuario

Captulo VI. Pag: 26

Programacin

// CRLF es CHR(10)+ CHR(13)


Grabando el Disco
MemoWrit(Fichero.txt,cChar)
Leyendo desde Disco
cChar:=Memoread(cChar)
Tambin puede ser
cChar =+ cChar
<eemplazando valores
cChar:=ABBCCDD
cChar:=STRTRAN(cChar,BB,bb)
? cChar // Muestra AbbCCDD
Obtener parte de una Cadena
LOCAL cChar:=ABBCCDD
cChar:=LEFT(cChar,2)
? cChar // Muestra AB
LOCAL cChar:=ABBCCDD
cChar:=RIGHT(cChar,2)
? cChar // Muestra DD
LOCAL cChar:=ABBCCDD
cChar:=SUBS(cChar,2,2)
? cChar // Muestra BB
Buscar Posicin
LOCAL cChar:=ABBCCDD
? AT(C,cChar) // Muestra 4

Manual del Usuario

Captulo VI. Pag: 27

Programacin

LOCAL cChar:=ABBCCDD
? RAT(B,cChar) // Muestra 5
Comparar Cadenas
LOCAL cChar:=ABBCCDD
? B$cChar // Muestra .T.
? A=cChar // Muestra .T.
? A==cChar // Muestra .F.
Conversin en Arreglos
LOCAL cChar:=A,B,C,D,E
LOCAL aData
aData:=_Vector(cChar)
ViewArray(aData)
Conversin en Numrico
LOCAL cChar:=1000
LOCAL nValor
nValor:=VAL(cChar)
Conversin en Fecha
LOCAL cChar:=01/01/2007
LOCAL dFecha
dFecha:=CTOD(cChar)
? dFecha+1 // Muestra 02/01/2007

Manual del Usuario

Captulo VI. Pag: 28

Programacin

MacroEjecucin
LOCAL cChar:=A+B
LOCAL R,A:=100,B:=200
R:=&cChar // Tambien puede usar R:=MACROEJE(cChar)
? R // Muestra 300
Convertir en Bloque de Cdigo
LOCAL cChar:=A+B
LOCAL B,A:=100,B:=200
B:=BloqueCod(cChar)
? Eval(R) // Muestra 300
Repetir Carcter
LOCAL cChar:=Repli(-,10)
? cChar // Muestra --------Rellenar de Ceros
LOCAL cChar:=STRZERO(123,10)
? cChar // Muestra 0000000123

Manipulacin de Fechas: El tipo de dato Fecha o Date se puede concatenar en forma literal, es
decir se puede sumar o restar. DpXbase Incluye un conjunto de funciones que permiten trabajar
ampliamente con fechas.
Declarando Fecha
LOCAL dFecha:=CTOD()
? dFecha // Muestra / /
Obteniendo la Fecha desde el Sistema Operativo

Manual del Usuario

Captulo VI. Pag: 29

Programacin

LOCAL dFecha:=DATE()
? dFecha // Muestra 03/03/2007
Incrementar Fecha
LOCAL dFecha:=CTOD(01/01/2007)
dFecha:=dFecha + 7
? dFecha // Muestra 08/01/2007

Disminuir Fecha
LOCAL dFecha:=CTOD(01/01/2007)
dFecha:=dFecha - 1
? dFecha // Muestra 31/12/2006
Das entre Fechas
LOCAL dFch1:=CTOD(01/01/2007)
LOCAL dFch2:=CTOD(08/01/2007)
? dFch2-dFch1 // Muestra 7
Da de la Semana
LOCAL dFecha:=CTOD(01/01/2007)
? DOW(dFecha) // Muestra 1 Domingo
// 1 es Domingo
// 2 es Lunes
// 3 es Martes
// 4 es Mircoles
// 5 es Jueves
// 6 es Viernes
// 7 es Sbado
Nmero del da

Manual del Usuario

Captulo VI. Pag: 30

Programacin

LOCAL dFecha:=CTOD(01/01/2007)
? DAY(dFecha) // Muestra 1
Nombre del Da
LOCAL dFecha:=CTOD(01/01/2007)
? CSEMANA(dFecha) // Muestra Lnes
Nmero del mes
LOCAL dFecha:=CTOD(01/02/2007)
? MONTH(dFecha) // Muestra 2
Nombre del Mes
LOCAL dFecha:=CTOD(01/02/2007)
? CMES(dFecha) // Muestra Febrero
Nmero del Ao
LOCAL dFecha:=CTOD(01/02/2007)
? YEAR(dFecha) // Muestra 2007
Principio del Mes
LOCAL dFecha:=CTOD(15/02/2007)
? FchIniMes(dFecha) // Muestra 01/02/2007
Fecha SQL
LOCAL cChar:= SQLDATE(DATE())
? cChar // Muestra 2007-03-08 // Depende de la configuracin de fecha
SQL
Fin del Mes

Manual del Usuario

Captulo VI. Pag: 31

Programacin

LOCAL dFecha:=CTOD(15/02/2007)
? FchFinMes(dFecha) // Muestra 28/02/2007
Primer da del ao
LOCAL cCharLOCAL dFecha

cChar:=01/01/+STRZERO(YEAR(DATE()),4)
? cChar // Muestra 01/01/2007
DFecha:=CTOD(dFecha)
? cChar // Muestra 01/01/2007

Funciones de Uso General:


Son un conjunto de funciones que se puede utilizar con varios tipos de datos.
Detectar tipo de Dato
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
?
?
?
?
?

dFecha:=DATE()
nValor:=100
lLogico:=.T.
aData :={}
indef

ValType(dFecha) // Muestra D
ValType(nValor) // Muestra N
ValType(lLogico) // Muestra L
ValType(aData) // Muestra A
ValType(indef) // Muestra U

Valores Iniciales:

Manual del Usuario

Captulo VI. Pag: 32

Programacin

Se definen en el fichero DATAPRO.INI y tiene como finalidad la asignacin de valores necesarias


para configurar valores del sistema que debe ser tomado en cuenta antes de iniciar cualquier
proceso.
NATIVO. Indica con .T. si la conexin para la base de datos se realiza en forma nativa, es decir; sin
utilizar tecnologa ODBC de MS que requiere previamente la definicin de DSN para acceder a la
base de datos. Si el valor es .F. utilizar conexin ODBC mediante DSN. Si la BD es MySQL algunos
procesos de datos sern realizados en forma nativa debido a su alto rendimiento.
MENUXP: Presenta el men principal del sistema en forma clsica, necesaria para el uso del
sistema desde Linux mediante emuladores para Windows. Adems optimiza su ejecucin debido a
que no posee grficos ni lneas, tambin; pueden ser utilizando en Windows cuando requiere mayor
rendimiento en la aplicacin. Con Valor .T. Presenta el men del sistema con una presentacin
acorde al estilo XP, consume ms recursos debido a las imgenes, lneas, colores y sonidos que
puede utilizar.
CREADSN. Con .T. suguiere que genere los conectores DSN desde el formulario de Conexin con
la Base de Datos, puede ser utilizado para Nativo y ODBC. Si el sistema trabaja en forma nativa no
necesita los DSN para ODBC, puede crearlos para acceder a la base de datos desde otras
aplicaciones como Excel mediante MsQuery.
TRACER : Con .T. muestra en el titulo de la ventana principal el nombre del programa DpXbase que
est en ejecucin, para as conocer los procesos que se ejecutan durante el inicio del sistema.
TRACERSQL :=Con .T. muestra en el ttulo de la ventana principal la sentencia SQL que est en
ejecucin desde que se inicia el sistema. Adems la sentencia SQL es copiar en el ClipBoard de
Windows para luego ser pegada con <Pegar o Paste> en el programa de administracin de base de
datos.
BASE DE DATOS MYSQL
Para mayor comodidad hemos creado un manual c:\dpadmwin\docs\mysql.doc basado en
experiencia de uso con este fabuloso motor de base de datos relacional.
Antes de instalar el sistema debe instalar la base de datos en el servidor y otorgarle permisos por
cada usuario que le permita al sistema lograr la conexin. Recuerde que los permisos se otorgan por
razones de seguridad de acceso para evitar que otro usuario con acceso a la direccin IP del
servidor se conecte y pueda manipular o afectar los datos.
Luego de instalado el sistema, se solicita la direccin IP del Servidor, en caso de ser localhost en el
mismo PC, el sistema tratar de conectarse con la base de datos, en caso de no ser lograda la
conectividad el sistema ejecutara dos comandos instalacin de servicio e iniciacin del servicio que

Manual del Usuario

Captulo VI. Pag: 33

Programacin

se encuentran
necesidades.

en el fichero mysql\mysqlstart.bat.

El integrador podr adaptarlo a sus

FICHEROS

APLICACIONES O MODULO DEL SISTEMA


Permite modificar y eliminar los mdulos existentes, as como tambin crea nuevos mdulos
al sistema. Los efectos se vern en Aplicaciones.

TABLA DE DATOS
El usuario selecciona la tabla de datos y por cada campo debe indicar el tipo de control
GET, COMBO, RADIO, CHECK, Etc. y atributos para cada campo, que ser utilizado para crear el
programa fuente xBase permitiendo la ejecucin de un formulario de carga de datos que incluye toda
la funcionalidad necesaria para: Incluir o Modificar un registro de una tabla SQL. DPxbase provee la
clase TDPEDIT que controla el formulario con la tabla de datos y el navegador de registros, posee
mtodos "methods" para: Iniciar, Grabar, Cancelar, Imprimir, Validar, enlaces, campos nicos y un
sin nmero de utilidades. Cuando DPxbase detecta que un campo esta referenciado con otra tabla
que incluye un formulario con toda la sintaxis en formato xBase, hace posible vincular a una o varias
tablas con las propiedades de acceder, buscar y regresar con el campo deseado.
En cada campo, se puede personalizar el mensaje interactivo, el control requerido y las validaciones
necesarias.

Manual del Usuario

Captulo VI. Pag: 34

Programacin

DPxbase, sugiere sintaxis para cada control, si un campo esta referenciado con otra tabla, ser
sugerido el control BMPGET con toda la sintaxis que permita al usuario acceder a la tabla
referenciada y relacionar ambos valores. La siguiente imagen, muestra los controles creados por
DPxbase para campos vinculados con tablas referenciadas, para los primeros casos el programador
seleccion BMPGET, y el segundo seleccion el control COMBOBOX, en ningn momento el
programador ha necesitado escribir una sola lnea del cdigo. DPxbase, sugiere la sintaxis
necesaria.
El objetivo de DPxbase, es reducir considerablemente el tiempo de desarrollo de aplicaciones,
tambin brindar flexibilidad para acceder y adaptar los componentes creados, para los formularios
crea un programa fuente escrito en formato PRG bajo las clases "classes" de Fivewin para el manejo
de controles, cada control esta definido y asociado al formulario contenedor y las coordenadas se
expresan en lneas y columnas, estas posiciones pueden ser reubicadas en tiempo de ejecucin, el
formulario dispone de esta opcin. La siguiente imagen muestra un formulario definitivo compuesto
por encabezado y Cuerpo Renglones y en ningn momento fue necesario escribir una lnea de
cdigo, slo fue necesario reubicar los controles.
La sintaxis generada para el control Combobox es la siguiente
@ 6.1, 1.0 COMBOBOX oINV:oINV_IVA;
VAR oINV:INV_IVA;

Manual del Usuario

Captulo VI. Pag: 35

Programacin

ITEMS aItems1;
WHEN;
AccessField("DPINV","INV_IVA",oIVA:nOption);
.AND. oINV:nOption!=0);
FONT oFontG
Cada valor est representado por:
oINV: Representa al Objeto de la clase TDPEDIT o formulario contenedor.
oINV_IVA: Representa al control ComboBox y para su nombre se utiliza el mismo campo
del cdigo con el prefijo o que lo asocia con Objeto.
VAR oINV:INV_IVA: Representa a la variable Virtual del formulario creada automticamente
desde los campos de la tabla de datos. Para mayor comodidad el formulario asume como
variables todos los campos y valores de la tabla de datos.
AccessField("DPINV","INV_IVA",oIVA:nOption) Esta funcin asocia el acceso de la tabla y
campos con el mecanismo de seguridad definible por el usuario donde puede restringir el
acceso a los campos de una tabla.
GENERADOR DE BROWSES O LISTAS
Luego de Crear las tablas de Datos, DPxbase genera lista de navegacin utilizando la clase
xBrowse, incluye botones sugeridos para: Incluir, consultar, modificar, eliminar, imprimir y
navegar, adems; el usuario puede seleccionar de manera ordenada los campos de las
tablas con sus respectivos ttulos que conformaran la lista de navegacin de cursores de una
o varias tablas SQL.

Manual del Usuario

Captulo VI. Pag: 36

Programacin

Al presionar la tecla Ejecutar, despliega el Browse definitivo en ventana MDI, con todas
las opciones disponibles para: Incluir, Consultar, modificar, eliminar y funciones de
navegacin. Este nuevo Browse, puede ser modificado en tiempo de ejecucin, todas las
instrucciones estn grabadas en un archivo de formato plano que permite ampliar sus
alcances, como por ejemplo: Agregar nuevos botones.
OPCIONES PARA LOS CAMPOS
Forma parte del diccionario de datos y tiene como finalidad definir las diferentes opciones
seleccionables a travs del control COMBOBOX para asignar el valor de un campo durante
la carga de datos desde formularios o emisiones de reportes.
Tambin contribuye en la generacin del cdigo fuente para los formularios y reportes, el
sistema detecta los campos que poseen opciones y construyen la sintaxis para el control
COMBOBOX suministrando el contenido de opciones. Para emplear de manera dinmica se
incluye en el cdigo fuente la funcin: GETOPTIONS("TABLA","CAMPO"), facilitando emplear
las nuevas opciones que pueden ser agregadas para el campo.
Para asignar nuevas opciones para el campo, acceda al formulario de tablas, en la barra de
botones se encuentra,
Opciones de los campos. Presenta de la tabla que est
focalizada una nueva ventana contentiva de todos los campos que pueden aceptar
opciones. Focalice con el mouse el campo deseado y haga dos clic o presione el botn
modificar, nuevamente se presentar una ventana de dialogo que permite: agregar,
modificar o eliminar cada descripcin que conforma las opciones del campo.

Manual del Usuario

Captulo VI. Pag: 37

Programacin

Esta ventana para el mantenimiento de opciones, indica el nombre de la tabla y nombre del
campo, contiene las diversas opciones ya registradas y a travs de: Incluir, Modificar y
Eliminar, es posible actualizar cada lnea de la lista.
Es importante tomar en cuenta la longitud del campo, si posee un dgito, ser asumido el
primer carcter de la opcin. Ejemplo: La opcin Carcter al ser seleccionada, solo podr
almacenar el primer carcter C, debido al espacio fsico que soporta. En caso que requiera
ms opciones y dos o ms de ellas coinciden en el primer carcter, debe ampliar la longitud
del campo. Si la longitud del campo es de 3 dgitos, sern guardados los primeros tres
valores de la opcin especificada para el almacenamiento fsico en la tabla
Consideraciones:
Los controles combobox mostrarn las opciones en el mismo orden como se registren.
Para utilizar los valores de las opciones en las columnas de los reportes puede
emplear la funcin SayOptions() como expresin de la columna. Ejemplo:
SayOptions(DPTABLAS,CAM_TYPE,oCursor:CAM_TYPE)
Preguntas: 1.-Donde se coloca esa instruccin, es decir delante de que y despus de que.
2.-En que pantalla, es en el generador de informes?

Manual del Usuario

Captulo VI. Pag: 38

Programacin

MEN DE ACCESO
Permite modificar y eliminar los mens de los mdulos existentes, as como tambin crea
nuevos men para los mdulos del sistema. Los efectos se vern en Ficheros, Transacciones,
Informes, Procesos y Otros.
DPxbase, tiene un concepto de trabajo sistematizado donde el nombre de cada programa, reporte,
formulario est directamente asociado a las tablas, si la tabla se llama DPMENU, el Browse se
llamar DPMENU.LBX, el Programa DpXbase para el formulario se llamar DPMENU.SCR, el
Reporte ser: DPMENU.REP, logrando as ubicar cualquier componente para adaptarlo. Adems;
facilita personalizar el nombre de las tablas y formularios en tiempo de ejecucin, logrando as que el
usuario pueda indicar nombres especficos en cualquier tabla y directamente a las opciones de:
Men, Formularios y Reportes, ejemplo: Si la descripcin de la tabla Men de Acceso DPMENU es
Men de Acceso, el ttulo del formulario de productos adoptar el nombre de Men de Acceso,
igualmente el campo Singular es utilizado para indicar el nombre de la tabla dentro de un tercer
formulario que est enlazado con la tabla. La sintaxis necesaria para asociar el nombre de las tablas
dentro del men de acceso debe ser: {oDp:DPMENU} en el campo Ttulo del Men despus de
hacer clic en el icono
botn

Men de Acceso de la barra de herramientas del sistema y luego en el

Incluir. {oDp:DPMENU} <Aplicaciones>

DEFINICIN DEL MEN


Todas las opciones del men principal del sistema, son definibles por el usuario, y esta
esquematizado por mdulo, dentro de cada modulo estn los men: Ficheros,
Transacciones, Informes, procesos y Otros asociados exclusivamente a cada aplicacin, las
opciones: Macros y Barra de tareas tambin son definibles de la misma manera, solo difieren
que esta opciones son generales para todas las aplicaciones, tambin podemos decir que
una aplicacin en un mdulo y un sistema est compuesto por mdulos.
Otras de las ventajas en la definicin del men es colocar el nombre de la tabla asociada
como titulo de la opcin en el men, es decir; si la tabla de productos esta definida como
Productos del Inventario, este nombre puede figurar en el titulo de la opcin del men
cuando se ejecuta, permitiendo adaptar las opciones de manera directa escrita La opcin o
a travs del nombre de uso de una tabla, logrando personalizar las mismas opciones segn

Manual del Usuario

Captulo VI. Pag: 39

Programacin

el tipo de empresa o pas. Como por ejemplo en Venezuela denominamos Nota de Entrega
a un documento que indica los productos que se le entregan al cliente antes de facturar, en
Colombia se llama Nota de Despacho y en Espaa se denomina Albarn.

PROGRAMAS FUENTES DPXBASE


DPxbase, genera y reconoce cdigo de lxico xBase basado en xHarbour y comandos para
FiveWin. Este lenguaje es compilado e interpretado en tiempo de ejecucin permitindole al usuario
agregar o modificar programas sin necesidad de rehacer el programa ejecutable final. DpXbase
acepta: IF, ELSE, ENDIF, WHILE, ENDDO, DOCASE,ENDCASE, y todos los comandos
Clipper/xHarbour/FiveWin.
Los programas fuentes son almacenados en la tabla DPPROGRA y por razones de seguridad se
guarda una copia en la carpeta \SCRIPT\ y cada programa es almacenado en formato plano con
extensin .SCR y la versin anterior es almacenada con extensin .BAK.
El sistema provee un editor de texto de estilo RTF (Richt Text Format) que permite realizar la
edicin y/o escritura de programas DpXbase.

Crear un nuevo Programa

Manual del Usuario

Captulo VI. Pag: 40

Programacin

F2 Para Grabar
F5 Compilar y Ejecutar
El Proceso de compilado genera un nuevo archivo con extensin .DXB en la carpeta DPXBASE y
este contiene las instrucciones y classes traducidas en lxico de ejecucin DpXbase lista para ser
ejecutado mediante la funcin EJECUTAR(PROGRAMA,uPar1,uPar2,uPar2,..uPar20) .

Todos los programas DpXbase deben cumplir con las siguientes reglas:
1. Debe Declarar el archivo de Cabecera #INCLUDE DPXBASE que se encuentra en la
carpeta INCLUDE y contiene todas las traducciones de comandos hacia funciones y/o
clases , adems hace referencias con otros archivos de cabecera que contienen los valores
predefinidos como por ejemplo:
Colores definidos en INCLUDE\COLORS.CH , que muchas veces nos referimos mediante
la siguiente expresin: oControl:SETCOLOR(CLR_WHITE,CLR_YELLOW) , CLR_WHITE y
CLR_YELLOW estn definidos en COLORS.CH
#define CLR_YELLOW
#define CLR_WHITE

65535
16777215

// RGB( 255, 255, 0 )


// RGB( 255, 255, 255 )

2. Debe declarar el primer procedimiento o funcin de la siguiente forma:


#INCLUDE DPXBASE.CH
PROCEDURE MAIN()

Manual del Usuario

Captulo VI. Pag: 41

Programacin

RETURN
O Tambin
#INCLUDE DPXBASE.CH
FUNCTION MAIN()
RETURN NIL
3. Debe finalizar la funcin con el comando RETURN cuando es declarado con PROCEDURE
y el comando RETURN <uValor> debe ser utilizado cuando se define MAIN como una
funcin mediante FUNCTION. La diferencia entre FUNCTION Y PROCEDURE solo est en
RETURN que para el caso de PROCEDURE devuelve un valor nulo (NIL). Si desea utiliza
FUNCTION para todos los casos puede cerrar con RETURN NIL.
4. Declaracin de Variables: Solo aceptan dos modos de Declaracin: LOCAL y PRIVATE, los
valores locales son utilizables dentro de la funcin donde fueron declarados y los valores
PRIVATES son utilizados en las dems funciones que son invocadas desde la funcin de su
declaracin. No declare variables con PUBLIC ya que puede usar memoria innecesaria,
DpXbase provee el Objeto oDp que reemplaza el uso de PUBLIC y administra mejor el
consumo de memoria. Ejemplo para la declaracin de Variables:
PROCE MAIN()
LOCAL cChar:=Space(40),nNum:=100,dFecha:=CTOD()
MsgAlert(Len(cChar)) // Muestra 40
RETURN
5. Declaracin de Funciones, puede declarar funciones mediante la sentencia FUNCTION y
declarar parmetros que reciben valores y devolver un resultado. Ejemplo:
PROCE MAIN()
LOCAL cChar:=Space(40),nNum:=100,dFecha:=CTOD()
Multiplicar(nNum,20)
RETURN
FUNCTION MULTIPLICAR(nValor,nPor)
LOCAL nResp
NResp:=nValor*nPor
MsgAlert(STR(nResp))
RETURN nResp

Manual del Usuario

Captulo VI. Pag: 42

Programacin

BOTONES DE LA BARRA DEL MEN PRINCIPAL


Al igual que el men principal, los botones son definidos por el usuario logrando indicar:
Archivo Bitmap, accin que ejecutar, aplicacin asociada y condicin de ejecucin. Se pueden
indicar las tablas ms utilizadas para una aplicacin especfica o para todas las aplicaciones.
DPxbase ofrece a la aplicacin final un conjunto de herramientas tiles para la operatividad del
sistema, tales como: Usuarios, accesos para transacciones con Tabla, restricciones para campos,
Men de Acceso, auditoria de actividades de usuario.
PERSONALIZAR MENSAJES EN LA BARRA DE BOTONES
El programa DPBARMSG, crea un objeto de tipo TSAY que presenta un recuadro en la
barra de botones con la finalidad de indicar textos que puedan ayudar al usuario a identificar
actividades como: Aplicacin que se ejecuta, fecha del sistema, periodo contable o cualquier
otra informacin que se desee indicar. Todos los parmetros del Objeto, tales como:
Coordenadas, tamao, fuente de letra, color fondo, color texto y mensaje pueden ser
personalizados en este programa, quedando totalmente a criterio del usuario su utilizacin.
Para mayor comodidad el programa BOTBARCHANGE que se ejecuta en cada cambio de
aplicacin elimina de la barra de botones todo su contenido para que luego el sistema
coloque nuevamente los botones que cumplan con las condiciones de la aplicacin,
adicionalmente ejecuta DPBARMSG para mostrar los nuevos mensajes para la aplicacin
solicitada.

ENLACE ENTRE TABLAS


Como su nombre lo indica, permite hacer el enlace entre las tablas por medio de un campo
comn entre ambas tablas. Por ejemplo la tabla del trabajador nmtrabajador hay que enlazarla con
la tabla de departamento, cargo, unidad funcional, ausencia, etc., para ello se utiliza el campo cdigo
del trabajador.

OTRAS FUNCIONES
GENERADOR DE INFORMES

Manual del Usuario

Captulo VI. Pag: 43

Programacin

DPxbase ofrece un asistente que permite crear consultas de tipo SQL con facilidad y en
pocos minutos. Tambin genera cdigo xBase para la clase TREPORT facilitando imprimir la
consulta SQL diseada, adems; la consulta es posible exportarla hacia formato DBF con la
finalidad de ser utilizada en diseos de reportes a travs de Crystal Report.

DISEO DE FORMULARIOS
Partiendo del programa Fuente xBase creado por DPxbase, el usuario puede disear,
modificar en tiempo de ejecucin todos los controles del formulario utilizando el Mouse, para
cada uno puede configurar: Lnea, Columna, Alto, Ancho, colores y fuentes de letra a cada
control en tiempo de ejecucin sin necesidad de utilizar recursos creados en otras
aplicaciones.
En la parte superior de la ventana o comnmente denominado SysMen, el formulario
dispone de varias opciones que permiten activar el modo diseo del formulario, permitiendo
personalizarlo en tiempo de ejecucin, esta labor puede ser efectuada por el programador o
usuario final.

Luego de activar el modo diseo, es posible focalizar cualquier control a travs del mouse,
moverlo en cualquier posicin, ampliar o reducir su tamao y para mayor comodidad
DPxbase ofrece alternativas para agilizar el diseo.

Manual del Usuario

Captulo VI. Pag: 44

Programacin

La siguiente imagen, ilustrar el uso de la opcin: Color seleccionado para el control


focalizado, es decir; se puede seleccionar el color del fondo.

La siguiente imagen, muestra la posibilidad de cambiar el color del texto del control y
tambin la fuente de las letras.

Manual del Usuario

Captulo VI. Pag: 45

Programacin

DPxbase integra bajo un solo concepto: La tabla de datos, el Navegador Browse,


programas fuentes DpXbase, formulario para la carga de datos y Reportes bajo un
conjunto de elementos identificados y asociados con la tabla de datos.
DPxbase ha sido creado exclusivamente para crear aplicaciones de tipo comercial y
orientado al lxico xBase, generando productos finales en corto tiempo y bajo el concepto de
arquitectura abierta facilitndole al integrador o usuario final adaptarlo a su criterio.
DPxbase mantiene con continuo desarrollo la bsqueda de la madurez de todas sus
herramientas con el objetivo de darle valor agregado a los componentes de desarrollo y a los
productos finales creados para el Cliente. DPxbase hereda toda la experiencia de DpXbase
creado para Datapro durante 15 aos bajo el popular y exitoso compilador "Clipper" que
logr posicionarse en el mercado con miles de instalaciones satisfactorias, en parte gracias
a la comodidad y facilidad de complacer los requerimientos del usuario. Ahora es DPxbase
para 32 bits y base de datos de tipo SQL.

CONTINUIDAD EN DATAPRO PARA TABLAS DBF


Todas las tablas de datos en formato DBF, son totalmente portables en estructura y
contenido hacia el nuevo formato de datos utilizado por DPxbase (Motor SQL). La opcin

Manual del Usuario

Captulo VI. Pag: 46

Programacin

Incluir Tablas, dispone de la opcin Importar desde DBF, el usuario solo debe indicar el
nombre de la tabla de Datos DBF y DPxbase se encarga de definirla en el diccionario de
Datos y construir su estructura. Adems DPxbase provee un proceso de Migracin de
Registros desde las tablas DBF utilizadas por productos anteriores.

CONTINUIDAD EN EL LXICO XBASE DESDE LOS PRODUCTOS DOS


Aunque DPxbase esta compilado con C++, el leguaje Xbase incorporado soporta en gran
parte los procedimientos desde las versin DOS, siempre y cuando no requieran interactuar
con una interfaz de video o de impresin. Las tablas de datos en las versiones anteriores se
identificaban a travs de ALIAS ejemplo: alias->campo, ahora en DPxbase ser
apuntando a un cursor, ejemplo oCursor: Campo, los tipos de datos son 100% compatibles.
Parte de los programas escritos en DpXbase para DPxbase han sido obtenidos de versiones
anteriores con muy pocos cambios, donde se aprovecha la madurez del cdigo ya escrito.

COMPONENTE DATASET
Es un gestor de datos controlado a travs de una clase de objetos que interacta con una
tabla de datos y tiene como finalidad manipular cualquier tipo de datos compatible con el
lxico xBase.
El componente DataSet ha sido incorporado en el sistema con el objetivo del almacenar
mltiples tipos de datos seleccionados sin que sea necesario emplear tablas especficas
para su almacenamiento..
El generador de reportes es una aplicacin del sistema que emplea altamente el
componente Dataset para almacenar valores como: Parmetros, Rango y Criterio, cada
reporte conforma una seccin del Dataset. Cuando el usuario desde la ventana de ejecucin
de un determinado reporte indica Fijar Parmetros del reporte, est empleando el Dataset
para almacenar todos los valores utilizados en esa ejecucin del reporte, con el fin de
retomarlos en futuras y suponiendo que esos parmetros sean comnmente utilizados.
El sistema dispone de dos DataSet, cada uno almacena los valores en tablas distintas,
DPDATACNF es utilizada para todo lo referido a la configuracin general del sistema y y
DPDATASET almacena valores de manera independiente en cada empresa definida a
travs de un DSN.

Manual del Usuario

Captulo VI. Pag: 47

Programacin

Para los parmetros del generador de informes (Fijar: Rango y Criterio) es empleado
DPDATACNF, debido a que todos los reportes pueden ser empleados en cualquier DSN y
la configuracin de cada empresa se almacena en DPDATASET.
Para almacenar datos en el DataSet de configuracin se emplea de la siguiente forma:
PROCE MAIN()
LOCAL oData
oData:=DataCnf(MISECCION)
oData:cValor:=Prueba
oData:End()
RETURN NIL
Para leer los datos del DataSet, debe ser realizado de la siguiente forma:
PROCE MAIN()
Local oData
oData:=DataCnf(MISECCION)
MsgAlert(oData:cValor)
oData:End()
RETURN NIL
Puede observar que en ambos casos, se emplea un valor virtual oData:cValor de la clase
TDataSet y de manera automtica detecta la asignacin de un nuevo valor, lo almacena y
tambin lo restaura cuando se encuentra guardado en la tabla. El mtodo End() almacena
de manera automtica los nuevos valores o los valores existentes que sufran algn cambio.
Por ello es muy prctico emplear este componente en el almacenamiento de datos.
Para emplear el DataSet en la configuracin de cada empresa es necesario utilizar el
siguiente ejemplo escrito en DpXbase:
PROCE MAIN()
Local oData,oDlg
oData:=DataSet(DATEMPRESA)
oData:cDir:=oData:Get(DIR,SPACE(20))
oData:cTel:=oData:Get(TEL,SPACE(12))
oData:cRep:=oData:Get(REP,SPACE(40))
DEFINE DIALOG oDlg TITLE CONFIGURAR

Manual del Usuario

Captulo VI. Pag: 48

Programacin

@ 1,1 GET oData:cDir


@ 2,1 GET oData:cTel
@ 3,1 GET oData:cRep
ACTIVATE DIALOG oDlg
oData:End()
RETURN
// EOF
CLASE TDATASET:
Se encarga de gestionar, leer, grabar todo lo referente al DataSet, se genera desde las
funciones DataCnf() y DataSet(), ambas devuelven el objeto de la clase TDataSet, a
continuacin detallamos sus mtodos.

Get(cVarName,uValue):
Obtiene el valor referido de cVarName en caso de no existir el auto creado con el valor
indicado en uValue. Tambin puede ser empleado de manera directa:
oDataSet:cVarName

IsDef(cVarName):
Devuelve .T. o .F. si el valor de cVarName existe.

Set(cVarname,uValue):
Asigna el valor uValue para cVarname, tambin puede ser utilizado como:
oDataSet:cVarname:=uValue

Save():
Almacena en la tabla todos los valores del DataSet.

Del():
Elimina un valor del DataSet y de la tabla, ejemplo: oDataSet:Del(cVarName)

DelGroup(cGroupName):
Elimina todos los componentes asociados a un grupo.

Load():
Carga todos los valores desde la tabla y generan los valores virtuales del Dataset

Manual del Usuario

Captulo VI. Pag: 49

Programacin

DataSet dispone tres modalidades para el almacenamiento y recuperacin de datos, estos


son:
ALL: Almacena y recupera los datos para todos los usuarios y PC que accedan al
sistema.
PC: Almacena y recupera los datos slo para el PC que lo solicita, el nombre del PC es
obtenido del Sistema Operativo. Cabe destacar que en cada PC es posible generar
diferentes configuraciones.
USER: Almacena y recupera los datos slo para el usuario que solicita, es decir; cada
usuario puede disponer de configuraciones distintas.
Se denominan valores virtuales aquellos ClassData o variables que no estn definidas en
la clase, sino que se generan de manera dinmica bien sea por asignacin directa
oDataSet:nValue:=10000 o a travs de la lectura de la tabla donde se almacenan los
valores del Dataset.
Para el sistema de Nmina DpNmWin, el DataSet ha sido altamente empleado en el
almacenamiento los tipos de nmina que se procesan con la finalidad de poder rescatar los
tipos de nmina en las siguientes ejecuciones.

FUNCIONES PARA SENTENCIAS SQL


GetWhere(cOperador,uValor)
Construye una condicin para la sentencia WHERE o SET para armar un comando SQL.
Ejemplo
cNomre:=Datapro
cWhere:=WHERE CAMPO+GetWhere(=,cNombre)
Queda construida de la siguiente forma:
WHERE CAMPO=Datapro
Recuerde utilizar comillas [] o Chr(39) simples para indicar cadenas dentro de un comando
SQL. Igualmente esta funcin esta vinculada con la configuracin de fechas empleadas por

Manual del Usuario

Captulo VI. Pag: 50

Programacin

el motor de la base de datos, puede ser usada cmodamente sin tomar en cuenta las reglas
para las fechas y la complejidad de construirla:
Ejemplo:
dFecha:=DATE()
cWhere:=WHERE FECHA+GetWhere(=,dFecha)
La sentencia resulta as:
WHERE FECHA=20041231
Tradicionalmente la condicin WHERE empleando fechas debe construirse as:
WHERE
FECHA=[]
+STRZERO(YEAR(dFecha),4)+STRZERO(MONTH(dFecha),2)+STRZERO(DAY(dFecha),2
)+[]
Cmodamente WHERE FECHA+GetWhere(=,dFecha) lo simplifica.

FUNCIONES PARA EL MANEJO DE DATOS


Todo el manejo de datos en Datapro se realiza a travs de comandos SQL, el acceso a los
datos de una o varias tablas se solicita utilizando sentencias que retornan un cursor de datos
en un plano bidimensional compuesto por lneas y columnas: Las lneas representan los
registros y las columnas representan los campos.
OPENTABLE(CSQL,LDATA)
Solicita un cursor de datos SQL.
<cSql> Debe contener una sentencia de lxico SQL
<lData> Indica con .T. si carga los datos. Por defecto su valor es .T.
Ejemplo:
oCursor:=OpenTable(SELECT TAB_NUMERO,TAB_TABLE+;
FROM DPTABLAS +;
ORDER BY TAB_NUMERO,.t.)

Manual del Usuario

Captulo VI. Pag: 51

Programacin

oCursor:Gotop()
WHILE !oCursor:Eof()
? oCursor:TAB_NUMERO,oCursor:TAB_TABLE
oCursor:DbSkip()
ENDDO
oCursor:End()
Puede observar que la consulta puede ser manejada de manera similar a una tabla DBF
abierta a travs de funciones del RDD o mejor dicho abierta con: USE TABLA. Para mayor
informacin consulte la clase TTABLE de este manual.
ASQL(CSQL)
Devuelve en tipo de datos Arreglo bidimensional el contenido del cursor generador por la
consulta SQL. Ejemplo: aSql:=ASQL(SELECT CAMPO FROM XTABLA). aSql Contiene la
lista de datos. MsgAlert(aSql[1,1]), muestra la primera columna y columna. Para evaluar la
respuesta puede utilizar: ViewArray(aSql)
DO(bWhile,bFor,bRun)
Ejecuta en forma cclica segn el proceso indicado en <bRun> si se cumple la condicin de
<bFor> hasta que se cumpla <bWhile>.
#DPXBASE.CH
FUNCTION MAIN()
LOCAL nTotal:=0,oCursor
oCursor:=OpenTable( SELEC DOC_NETO,DOC_FECHA FROM DPDOCCLI,.T.)
DO({||!oCursor:Eof()},;
{||oCursor:DOC_FECHA=oDp:dFecha},;
{||nTotal:=nTotal+oCursor:DOC_NETO,oTablas:skip(1)})
Totaliza el Monto neto segn los documentos emitidos segn la fecha
del sistema.

SQLDELETE(CTABLA,CWHERE)
Borra de la tabla <CTABLA> la cantidad de registros indicados en <CWHERE>
SQLUPDATE(CTABLA,CCAMPO,XVALOR,,CWHERE)
Permite Actualizar el valor de un campo de la cantidad de registros indicados en la clusula
cWhere. Ejemplo:

Manual del Usuario

Captulo VI. Pag: 52

Programacin

SqlUpdate(NMTRABAJADOR,TIP_NOM,Q,TIPO_NOM=S) Cambia el tipo de Nmina


para Quincenal de todos los trabajadores de nmina Semanal.
SQLGET(CTABLA,CCAMPO,CWHERE)
Obtiene el valor de un campo desde una tabla segn la condicin indicada en Where .
Where puede incluir la clausula JOIN.
SQLGET(NMTRABAJADOR,CONCAT(APELLIDO,,,NOMBRE),CODIGO=00001).
Obtiene el nombre y apellido del Trabajador.
SqlGet(), puede fcilmente reemplazar el uso de las funciones DBLocate() y DbSeek()
utilizadas en las tablas DBF segn RDD.
DTOSQL(DFECHA)
Convierte el formato de fecha xBase en formato de fecha para el Motor SQL, segn el
formato definido en oDp:cSqlDate previamente configurado en ODBC.INI [SQLDATE].
[UPDATE FROM TABLA BCAMPO=]+DTOSQL(<bFecha>)+[]
Queda As:
UPDATE FROM TABLA BAMPO=2005-04-02
SQLTODATE(CFECHA)
Convierte las fechas SQL en fecha xBase, segn el formato definido en oDp:cSqlDate
previamente definido en ODBC.INI [SQLDATE]. Algunas funciones MAX o MIX de SQL
aplicadas sobre campos de tipo de fecha, generan expresiones de tipo carcter el cual
requiere ser convertida en forma de fecha real.
bDate:=SQLGETMAX(DATABLA,CAMPO,<WHERE>) // 2005-05-02
bData:=SQLTODATE(cFecha) // 02/05/2005
<cTable> Nombre de la tabla
<aFields> Lista de campos, puede ser un arreglo un una lista de campos entre comillas
BDLIST(CTABLE,AFIELDS,LGROUP,CWHERE)
Genera un cursor de datos segn:
Manual del Usuario

Captulo VI. Pag: 53

Programacin

<cTable> Nombre de la tabla


<aFields> Lista de campos, puede ser un arreglo un una lista de campos entre comillas
separas con coma, ejemplo: Campo1,Campo2,Campo3
<lGroup> si es verdadero .T. genera el cursor empleando GROUP BY en todos los campos.
Su valor por defecto es .f.
<cWhere> Valor opcional, puede conformar la clusula WHERE de la consulta y permite
filtrar las lneas de la consulta.
Presenta la consulta a travs de un editor de registros que permite seleccionar cualquier
registro devolviendo el valor de la primera fila. Tiene alta utilizacin en las casillas de rango y
criterio en la ejecucin de un reporte, permitiendo importar los valores de un campo hacia las
casillas.
Ejemplo:
uValue:=BDLIST(NMTRABAJADOR,CODIGO,APELLIDO,NOMBRE,SALARIO)

BDSELECT(CTABLE,AFIELDS,LGROUP,CWHERE))
Genera un cursor de datos segn:
<cTable> Nombre de la tabla
<aFields> Lista de campos, puede ser un arreglo un una lista de campos entre comillas
separas con coma, ejemplo: Campo1,Campo2,Campo3
<lGroup> si es verdadero .T. genera el cursor empleando GROUP BY en todos los campos.
Su valor por defecto es .f.
<cWhere> Valor opcional, puede conformar la clusula WHERE de la consulta y permite
filtrar las lneas de la consulta.
Presenta la consulta Cursor a travs del editor de registros, con la finalidad de realizar
seleccin mltiple de registros, es decir; marcar los registros necesarios, al finalizar devuelve
una cadena con todos los valores seleccionados y representados por la primera columna.
cValue:=BDSELECT(NMTRABAJADOR,CODIGO,APELLIDO,NOMBRE,SALARIO)

Si el usuario seleccion cuatro trabajadores, el valor de cValue ser: 001,002,003,004


Si desea convertirlo en arreglo puede emplear:
aList:=MacroEje({+cValue+})
Tambien, recomendada:

Manual del Usuario

Captulo VI. Pag: 54

Programacin

aList:=_Vector(cValue)

GETOPTIONS("TABLA","CAMPO")
Devuelve en un arreglo todas las opciones registradas para un campo de determinada tabla.
Ejemplo:
aOpcion:=GETOPTIONS(DPTABLAS,CAM_TYPE)

Devuelve una lista o arreglo con los siguientes valores: Numerico, Date (Fecha),
Carcter, Logica y Memo.

SAYOPTIONS(cTable,cField,uValue)
Busca y devuelve la opcin encontrada segn el valor de <uValue> segn la lista de
opciones registradas en campo <cField> de la tabla <cTabla>.
Ejemplo:
cOpcion:=SAYOPTIONS(DPTABLAS,CAM_TYPE,C)

El valor de <cOpcion> es Carcter. En caso de no encontrar la opcin buscada,


devolvera valor vacio.

INNERJOIN(cTabla1,cTabla2,cInner)
Busca en el diccionario de Datos la relacin existente entre dos tablas y construye la
clusula INNER JOIN de la sentencia SQL necesarias para el enlace entre las tablas
solicitadas.
Ejemplo: INNERJOIN(DPTABLAS,DPCAMPOS)
Devuelve: INNER JOIN DPCAMPOS ON TAB_NUMERO=CAM_NUMTAB
SQLINCREMENTAL(cTable,cField,cWhere)
Obtiene el mximo valor del campo <cField> de la tabla <cTable> y e incrementa en 1,
determinando el valor siguiente. Ejemplo:
MsgAlert( SQLINCREMENTAL(DPCLIENTES,CLI_CODIGO) )
Manual del Usuario

Captulo VI. Pag: 55

Programacin

VIEWARRAY(aArray)
Muestra en una ventana MDI el contenido de un arreglo multidimensional.
oDp:lViewArrayMdi:=.T. Muestra en Ventana MDI
oDp:lViewArrayMdi:=.f. Muestra en Caja de Dialogo.

OBJETOS
Clase TTable
Clase DpLbxRun
Clase DpEdit
Clase TDocEnc
Clase TDocGrid
Clase TGridCol
Formularios de Documentos compuestos por Encabezado y Cuerpo.
Este tipo de documentos se genera comnmente por tablas bsicas relacionadas, la primera
se encarga del encabezado como por ejemplo: Factura, Comprobantes contables y la
segunda tabla se refiere a los renglones o cuerpo que conforman el documento, como por
ejemplo: Renglones de la factura, Asientos Contables, entre otros. Tambin la tabla del
encabezado y la tabla del cuerpo se relacionan con otras tablas, ejemplo: Para la factura se
relaciona con Clientes y los renglones se vinculan con productos.
Para iniciar el formulario, empleamos la funcin DOCENC que devuelve el objeto definido en
la clase tDOCENC.
DOCENC(cTitle,cForm,cFileEdt)
Parmetros:
cTitle
Ttulo del formulario, puede ser Titulo
cForm
Nombre del objeto para el formulario, ejemplo:
oForm
cFileEdt Nombre del fichero donde para almacenar los
parmetros de los controles.

Valores o Data de la Clase


lBar
Indicar con .T. que Incluya las opciones de
navegacin mediante la barra de botones.
cScope
Indica el filtro para la tabla del encabezado,

Manual del Usuario

Captulo VI. Pag: 56

Programacin

cScopeFind
cPrimary
cScript
oScroll
oSayMsgErr
oTable
oWnd
oDlg
oScript
oBar
aBtn
aGrids
aBtnEdit
nOption

cList
cPresave
cPostSave
lSaved
lInc
lCon
lMod
lEli
lPrn
cSingular

realiza Where en la sentencia SQL.Ejemplo


DOC_CODSUC=00001
Indica filtro para el proceso de bsqueda mediante
la clusula WHERE de la sentencia SQL. Ejemplo:
DOC_CODSUC=00001 AND DOC_TIPTRA=D
Contiene lista de campos para validar la no
repeticin del registro y vinculo con las tablas
que conforman el cuerpo o grid.
Nombre del programa DpXbase que contiene las
funciones que sern ejecutadas.
Objeto referido a la clase TXSCROLL
Objeto de la Barra de Mensajes.
Objeto ttable de la Tabla de datos para el
encabezado.
Ventana MDI de estilo CHILD que realiza el control
del formulario.
Ventana de tipo dialogo contentiva de los controles
del formulario.
Objeto script que ejecutar las funciones en DpXbase
Control TBAR que contiene los botones con las
opciones del formulario.
Lista de Botones para el modo navegacion
Lista de Objetos de Grids que conforman el cuerpo
del documento.
Lista de Botones para el modo edicin
Indica el estado de la opcin:
0=Navegacin
1=Incluir
2=Consultar
3=Modificar
4=Buscar
5=Eliminar
Nombre del archivo para presentar en browse los
datos de la tabla y hacer bsquedas.
Nombre de la Funcin que se ejecuta antes de
realizar la grabacin del registro.
Nombre de la funcin que se ejecuta luego de grabar
el registro.
Indica si el registro ha sido grabado.
Permiso para Incluir
Permiso para Consultar
Permiso para Modificar
Permiso para Eliminar
Permiso para Imprimir
Nombre singular para el registro.

Metodos

Manual del Usuario

Captulo VI. Pag: 57

Programacin

Windows(nTop,nLeft,nWidth,nHeight)
Activate(bInit,bEnd)

SetIncremental(cField,cWhere,cNumero)
BuildIncremental(lSave)
Printer()
SetTable(cTable,cPrimary,cWhereRecord)

GridEdit(cTable , cLinkdHead , cLinkGrid , cSql )

PreDelete()
SetScope(cScope)
Presa Get(cVarName) ve()

Get(cVarName)
Set(cField,uValue)
AddBtn(cFile,cText,cWhen,cAction,cFind)

Manual del Usuario

Define en pixel el area del formulario.


Activa la ventana del formulario, bInit
es bloque de cdigo de ejecucin final
y bEnd se refiere a la condicin de
salida.
Establece los datos que generan
campos
incrementales.
Campo,
condicin y valor inicial
Genera valor incremental segn los
valores
establecidos
en
SetIncremental()
Ejecuta la funcin de impresin
definida en la funcin PRINTER del
script.
Asignar tabla con el formulario,
cTable=Nombre de la tabla
cPrimary=Campo Unico.
cWhereRecord=Filtro o registros
visibles.
Crear objeto Grid.
cTable= Tabla asociada o tabla hija.
cLinkHead= Campos del encabezado
que enlaza la tabla hija.
cLinkGrid: Campos de la tabla hija
que se enlazan con los campos de la
tabla del encabezado.
Ejecuta proceso previo para borrar
registro. Si devuelve .F. no se ejecuta
borrar.
Cambia el filtro de la tabla
encabezado.
Valida el proceso de grabar. Ejecuta la
funcin PRESAVE declarada en
cPresave antes de grabar el registro.
Si devuelve .F. no se graba.
Obtiene el valor de una variable o
Campo.
Asigna valor a una variable o Data del
encabezado.
Agrega un Nuevo botn en la barra de
botones para la navegacin del

Captulo VI. Pag: 58

Programacin

AddBtnEdit(cFile,cText,cWhen,cAction,cFind)

SetMemo(cField,cTitle,nTop,nLeft,nWidth,nHeight)

ListBrw(cFileBrw)

formulario.
cFile=Archivo BMP
cText=Mensaje Tooltip
cWhen=Condicin de activacin.
cAction=Proceso que debe ejecutar
cFind = Identificacin del Botn
Agrega un botn cuando se active el
modo de edicin (Incluir o Modificar)
cFile=Archivo BMP
cText=Mensaje Tooltip
cWhen=Condicin de activacin.
cAction=Proceso que debe ejecutar
cFind = Identificacin del Botn
Agrega el botn Campo memo en la
barra de opcin para el modo edicin
Incluir o Modificar.
cField=Indica el campo que hace
referencia con la tabla DPMEMO
cTitle = Titulo de la ventana.
nTop,nLeft,nWidth,nHeight , rea
visual en pxel para la caja de dialogo
sobre
la
ventana
principal
oDp:oFrameDp
Realiza la presentacin lista de
campos mediante archivo *.brw segn
data ::cList

GRIDEDIT(CTABLE , CLINKDHEAD , CLINKGRID , CSQL )


Genera el cuerpo del documento conformado por columnas.
oTable
oBrw
oScript
oHead

Manual del Usuario

Objeto TTabla referida a los datos del gris, se


obtiene de la data cSql enviada por GRIDEDIT
Objeto de la clase xBrowse que realiza la
navegacin de los datos, dibuja las lneas y
columnas.
Objeto script que realizar las ejecucin de
funciones DpXbase, como por ejemplo:
Pregrabar, Load, PostGrabar.
Objeto del encabezado mediante la clase
TDOCENC.

Captulo VI. Pag: 59

Programacin

oDlg
nRowSel
nRecSelColor
nClrPane1
nClrPane2
nClrText
nClrFind
nBtnWidth
nBtnHeight
nBtnStyle
nColEdit

Objeto oDlg contenedor de controles.


Nmero de la lnea del Gris basado en xBrowse
Color RGB para la barra indicadora vertical
Color RGB para las lneas impares.
Color RGB para las lneas pares.
Color RGB para el texto de las casillas
Color RGB para el texto marcado para buscar.
Ancho de los botones de las opciones.
Alto de los botones de las opciones.
Tipo de Botn: 0=Ninguno 1=Bmp 2=Text
Indica la columna que est en edicin

ARCHIVOS DE AYUDA
Estn ubicados en la carpeta HELP\ de la aplicacin, acepta archivos de ayuda HLP y
CHM.
Est compuesto por dos tipos de archivos Tradicionales HLP que componen la ayuda
ofrecida por las libreras FiveWin y estas no forman parte de la licencia.
FIVEWIN.HLP
FWCMD.HLP
FWCMD.HLP
FWFUN.HLP
DPXFUNCTION.CHM
GENERADORRPT.CHM

Conceptos de FiveWin
Clases, mtodos y data.
Comandos
Funciones de FiveWin
Funciones Estndar DpXbase
Generador de Reportes Datapro

El segundo conjunto de archivos de extensin CHM, contienen documentacin referida a la


aplicacin datapro y se compone de los siguientes archivos.
GeneradorRPT.CHM
Programacin.CHM
Capitulo[n].CHM

Manual del Usuario

Generador de Reportes.
Programacin
[n] se refiere al nmero del capitulo y cada uno se refiere a
cada aplicacin del sistema. El Capitulo1.chm se refiere al
proceso de instalacin y configuracin del sistema.
Para facilitar los tpicos en cada captulo su nombre debe ser
asociado en cada tabla y en caso de referirse a algn proceso
se identificar segn la posicin del men: Ejemplo:
Aplicacin+Vertical+Horizontal.

Captulo VI. Pag: 60

Programacin

Cada aplicacin esta asociada a un capitulo[n].chm y cada


tabla tambin est asociada a una aplicacin por ello es
posible asociarlas y activar la ejecucin del archivo de ayuda
correspondiente al editor de registros que muestra el contenido
de una tabla o un formulario para la carga de datos.

CLASES PROPIETARIAS DATAPRO


Conforman un conjunto de clases que generan objetos para funciones especficas para Datapro.

TPUBLIC
Esta clase genera un objeto en pblico que est disponible en todo el sistema y tiene como
finalidad almacenar todos los valores que el sistema necesita para su funcionamiento
tcnico y conceptual. Este novedoso modelo de datos es altamente productivo al evitar el
uso excesivo de memoria para declarar variables pblicas.
DpXbase provee el objeto <oDp> desde que arranca el sistema y contiene toda la
informacin referida a la configuracin del sistema, por ejemplo:
oDp:cEmpresa: Nombre de la Empresa.
oDp:cDsnData : Nombre del DSN de Datos de la empresa Activa.
oDp:cDsnConfig: Nombre del DSN de Datos de la base de datos de configuracin.
oDp:cUsuario: Cdigo del usuario que accede al sistema.
oDp:dFecha: Fecha del Sistema.
La asignacin de valores se realiza en forma directa oDp:xValor:=Nuevo Valor, los valores
de <oDp> son Virtuales, es decir; no estn definidos en la Clase sino; se asigna en forma
dinmica. Ejemplo:
oDp:cMiDato:=Cualquier Dato
MsgAlert(oDp:MiDato)
Mostrar la ventana de dialogo Alert indicando Cualquier Dato)
El programa DPINI es la primera ejecucin DpXbase que se realiza al iniciar Datapro. Aqu
se asignan la mayora de valores que definen la ejecucin y/o presentaciones del sistema.
Como por ejemplo el tamao de los botones

Manual del Usuario

Captulo VI. Pag: 61

Programacin

Mtodos:
GET(cVarName). Obtiene el Valor de un DATA del Objeto, segn la identificacin
solicitada en <cVarName>, ejemplo: oDp:Get(cEmpresa), igualmente puede ser
oDp:cEmpresa.
ADD(cVarname,uValue). Genera una nueva DATA Virtual dinmicamente y asigna
el valor, si cVarName ya existe omite la solicitud. Ejemplo:
oDp:Add(cEmpresa,Nuevo Valor), tambin puede ser: oDp:cEmpresa:=Nuevo
Valor
SET(cVarName,uValue): Asigna un valor a una Data. Si no existe es agregada
automticamente. Tambin puede ser oDp:cEmpresa:=Nuevo Valor.
Si desea conocer todos los valores del objeto oDp, ejecute el programa INSPET escrito en
DpxBase.

TTABLE
Es una clase propietaria de DpXbase que accede a consultas SQL empleando la funcin
OpenTable(cSql,lRead) que devuelve un Objeto contentivo de la consulta SQL al estilo de
datos RDD (xBase). Ttabla hereda todos los campos de la estructura en forma dinmica
permitiendo navegar en cada registro y conocer el contenido de cada campo, ejemplo:
oCursor:CAMPO.
Ttable es utilizada en toda la aplicacin para acceder a las consultas de la Base de Datos
necesarias en los Browser, Formularios, Consultas e Informes.
oTable:=OpenTable(SELECT CAMPO FROM XTABLA,.t.)
MsgAlert(oTable:CAMPO) // Muestra el contenido del CAMPO
oTable:End()
Tambin puede manejar campos virtuales con la finalidad de redisear la consulta, ejemplo:
oTable:Replace(CAMPONUEVO,oCursor:Monto*2) , genera un nuevo campo llamado
CAMPONUEVO que se deriv de la expresin: oCursor:Monto*2
Sintaxis: Ttable():New(cSql)
Datos de la Clase TTABLE

Manual del Usuario

Captulo VI. Pag: 62

Programacin

aDataFill: Un es arreglo multidimensional que contiene en forma bidimensional el


contenido de la consulta SQL. Cada lnea representa un registro y cada columna
representa
un
Campo.
Para
copiar
aDataFill
debe
utilizar
aData:=ACLONE(oTable:aDataFill). Si desea visualizar su contenido puede utilizar
ViewArray(oCursor:aDataFill)
aFields: Contiene informacin de la estructura de la Tabla, esta compuesta por
lneas y columnas , cada lnea representa y cada columna representa la estructura
de los campo: Nombre, tipo, longitud y Decimales.
oOdbc: Contiene el Objeto de la conexin DSN donde pertenece la tabla. Tambin
es posible utiliza los mtodos de esta clase: oCursor:oOdbc:Execute(<cSQL>)
Mtodos de la Clase TTABLE
Eof() : Determina si la lectura a llegado al ltimo registro de la consulta.
Goto(<nRecord>) : Apunta al registro <nRecord> de la Consulta.
GoTop() : Posiciona el primer registro de la consulta.
GoBottom(): Posiciona el Ultimo Registro de la Consulta.
FieldGet(<nField>): Obtiene el Valor de campo segn la posicin del campo.
<nField>, puede ser el nmero del campo o nombre del campo.
FieldName(<nField>): Devuelve el Nombre del campo segn el nmero o posicin
del campo.
RecCount(): Indica la cantidad de lneas o registros del cursor o consulta.
RecNo(): Indica la posicin del registro del cursor.
FCount(): Determina la cantidad de campos utilizados por la consulta.
DbSkip(<nSkip>): Permite navegar (Ascendente/Descendente) sobre el cursor.
Append(): Prepara el cursor para realizar la sentencia INSERT INTO.
Replace(cField,uValue): Reemplaza el valor de la columna (Campo) identificada con
<cField> segn el valor de <uValue>.

Manual del Usuario

Captulo VI. Pag: 63

Programacin

Commit(): Ejecuta el comando INSERT INTO para agregar un nuevo registro en la


tabla, previa preparacin con los mtodos append() y replace().
Commit(<cWhere>): Ejecuta el comando UPDATE para actualizar uno o varios
registros segn la clusula WHERE, previa preparacin del mtodo Replace().
CtoDbf(cFile): Crea una tabla en formato DBF/FPT con el contenido del Cursor. Es
necesario que las consultas que utilicen funciones, representen los resultados a
travs de etiquetas. Ejemplo SELECT MAX(XCAMPO) AS CAMPO , la columna
MAX(XCAMPO) ser representada por CAMPO.
Browse(): Muestra el Contenido de la Consulta mediante una ventana MDI.
Execute(<cSQL>): Ejecuta un comando SQL directamente con la conexin del
Servidor de la Base de Datos.
Ejemplo para agregar un nuevo registro:
#INCLUDE "DPXBASE.CH"
PROCE MAIN()
LOCAL oTable
oTable:=OpenTable(SELECT * FROM XTABLA,.F.)
oTable:Append()
oTable:Replace(CAMPO1,Valor 1)
oTable:Replace(FECHA ,DATE())
oTable:Commit()
oTable:End()
RETURN

En este ejemplo se puede observar que el cursor <oTable> se requiere sin datos,
por
esta
razn
la
funcin
OpenTable(SELECT
*
FROM
XTABLA,.F.).Solicit a travs de .F. el curso en forma vaca, debido a que solo
es necesaria la estructura de la tabla y como ser realizado el proceso de inclusin
no es necesario leer datos de la tabla.
Si se requiere buscar informacin en la misma tabla para agregar un nuevo registro
como sucede en los casos de numeracin de documentos, podemos usar la
siguiente sintaxis:
#INCLUDE "DPXBASE.CH"
PROCE MAIN()

Manual del Usuario

Captulo VI. Pag: 64

Programacin

LOCAL oTable,xValor,nLen
xValor:=SQLGET(XTABLA,MAX(XCAMPO))
xValor:=VAL(xValor)
oTable:=OpenTable(SELECT * FROM XTABLA,.F.)
nLen :=oTable:FieldLen(XCAMPO)
xValor:=STRZERO(xValor+1,nLen)
oTable:Append()
oTable:Replace(CAMPO1,xValor)
oTable:Replace(FECHA ,DATE())
oTable:Commit()
oTable:End()
RETURN

El mtodo commit() construye la real sentencia SQL para la insercin del registro de
la siguiente forma:
INSERT
2005)

INTO

XTABLA

(CAMPO1,FECHA)

VALUES

(0001,3005-05-

TTable, utiliza las tablas declaradas en el diccionario de datos que contiene el DSN o Base
de datos relacionada, por tal motivo no es obligatorio indicar la Base de datos donde en
encuentra la tabla, no obstante es posible indicar la base de datos o agregar una nueva
tabla en forma directa.

Agregar una nueva Tabla al diccionario de datos:


ADDTABLE("0998","MITBLE",oDp:cDsnData,.F.)

Adiciona la tabla MITABLE (que debe existir) previamente en la base de datos


oDp:cDsnData (esta es la base de datos activa segn la empresa seleccionada). Si desea
crear la tabla puede hacerlo de la siguiente manera:
LOCAL oServer,cSql,otable
// Abre la Base de Datos
oDB:=OpenOdbc(oDp:cDsnData)
// Prepara la sentencia SQL
cSql:="CREATE CREATE TABLE `MITABLE` (`CAMPO` VARCHAR (10)
// Ejecuta la Sentencia SQL en la base de Datos
oDB:EXECUTE(cSql)
// Agrega la Tabla al diccionario de datos

Manual del Usuario

Captulo VI. Pag: 65

Programacin

ADDTABLE("0998","MITBLE",oDp:cDsnData,.F.)
// Abre el Cursos de Datos o Tabla
oTable:=OpenTable(MITABLE,.F.)
oTable:Append()
oTable:Replace(CAMPO,DIEZ)
// Graba el Registro mediante INSERT INTO MITBLE
oTable:Commit()
// Exporta los datos hacia DBF
oTable:CTODBF(MITABLE.DBF)
otable:End()

Acceso a tablas indicando la Base de Datos.


LOCAL oDB,cSql,otable
// Abre la Base de Datos SGE0001 (Debe Existir)
oDB:=OpenOdbc(SGE0001)
oTable:=OpenTable(MITABLE,.T.,oDB)
// Muestra los Datos
oTable:Browse()
otable:End()

Acceso a tablas indicando la Base de Datos sin revisar el diccionario de Datos, as evita
utilizar la funcin ADDTABLE("0998","MITBLE",oDp:cDsnData,.F.), ejemplo:
LOCAL oDB,cSql,otable
// Abre la Base de Datos SGE0001 (Debe Existir)
oDB:=OpenOdbc(SGE0001)
oTable:=OpenTable(MITABLE,.T.,oDB,.F,)
// Muestra los Datos
oTable:Browse()
otable:End()

TDPEDIT
Es una clase DpXbase que permite disear formularios de tipo (MDI) en forma declarativa,
es decir a travs de comandos xbase para la declaracin de Controles que en tiempo de
ejecucin puedan ser rediseados en forma visual. El formulario acepta como mtodos

Manual del Usuario

Captulo VI. Pag: 66

Programacin

virtuales todas las funciones definidas con FUNCTION en el mismo programa DpXbase,
igualmente permite la asignacin de Data en forma dinmica con tal solo ejecutar la
declaracin oForm:nVariable:=100
Ejemplo
#INCLUDE "DPXBASE.CH"
PROCE MAIN()
LOCAL oFont
DEFINE FONT oFont NAME "Arial"

SIZE 0, -12 BOLD ITALIC

oFrm:=DPEDIT():New("Titulo","Fichero.edt","oFrm" , .T. )
oFrm:cVarName:=SPACE(20)
oFrm:nValor :=100
oFrm:dFecha :=oDp:dFecha
@ 0,0

SAY " Prueba de Texto ";


SIZE 120,10 RIGHT;
COLOR CLR_HBLUE,CLR_YELLOW

@ 2,03 GET oFrm:oNombre VAR oFrm:cVarName;


OF oFrm:oDlg;
SIZE 50,10;
FONT oFont;
VALID oFrm:MyValid()
XSAY("Nombre")
@ 4,03 GET oFrm:oValor VAR oFrm:nValor;
PICTURE "999999.99";
SIZE NIL,10 RIGHT;
FONT oFont;
WHEN !Empty(oFrm:cVarName)
XSAY("Valor")
@ 6,03 BMPGET oFrm:oFecha VAR oFrm:dFecha;
PICTURE "99/99/9999";
NAME "BITMAPS\Calendar.bmp";
ACTION LbxDate(oFrm:oFecha,oFrm:dFecha);
SIZE 50,10;
FONT oFont;
WHEN !Empty(oFrm:cVarName)
XSAY("Fecha")

Manual del Usuario

Captulo VI. Pag: 67

Programacin

@ 6,04 BUTTON " Aceptar ";


SIZE 36,12;
ACTION oFrm:Aceptar()
@ 6,15 BUTTON " Cerrar ";
SIZE 36,12;
ACTION oFrm:Close()
oFrm:Activate()
RETURN
FUNCTION MyValid()
IF Empty(oFrm:cVarName)
MensajeErr("Nombre no Puede Estar Vaci")
RETURN .F.
ENDIF
RETURN .T.
FUNCTION XSAY(cText)
LOCAL oObj
oObj:=ATAIL(oFrm:oDlg:aControls)
@ oObj:nTop-9,oObj:nLeft SAY cText PIXEL;
SIZE 40,8
RETURN .T.
FUNCTION ACEPTAR()
MsgAlert("Aqu se ejecuta el proceso")
RETURN .T.

Mtodos de la clase
New(<cTitulo>,<cFichero>,<coFrm>,<lWindows>): Inicia la construccin del
formulario.
cTitulo: Nombre del ttulo de la ventana.
cFichero: Nombre del fichero con extension (.edt) y ubicacin forms\
contentiva de los parmetros (linea,columna,alto,ancho, color fondo y color
texto) de cada control del formulario.

Manual del Usuario

Captulo VI. Pag: 68

Programacin

coForm: Nombre de la variable que contiene e identifica el formulario.


lWindows: Si es verdadero <.T.> genera la ventana del formulario, necesario
para declarar los controles @ Lin,Col <CONTROL>
SetTable(oCursor): Asigna un cursor datos hacia el formulario permitiendo editar
los valores de una tabla para ser modificados (oForm:nOption:=3) o Incluidos
mediante (oForm:nOption:=1). El formulario asume virtualmente los datos del cursos
segn los nombres de los campos para fcil utilizacin. Si el cursos se deriva de una
consulta de productos oCursor:=oTable(SELECT * FROM DPINV, .F. ), el
formulario asume las declaracin de variables: oForm:INV_CODIGO,
oForm:INV_DESCRI, de esta manera el programador puede utilizar controles (GET)
para editar su valores y mediante el mtodo SAVE() del formulario los valores son
almacenados en la Tabla. Si oForm:nOption=1 se indica que se desea incluir , si
oForm:nOption=3 se indica que los datos sern modificados. El metodo Save()
ejecutar previamente la funcin PRESAVE (que debe estar declarara en el
formulario) con la finalidad de realizar verificaciones antes de grabar y PRESAVE
devuelve .T. ser grabado el registro y luego ser ejecutada la funcin POSTSAVE
para realizar evaluaciones luego de grabar, si POSTSAVE devuelve .F. el sistema
ejecutar ROLLBACK de la base de Datos para deshacer el nuevo registro
agregado o modificado.
CreateWindows(): Dibuja la ventana MDI (oWnd) y el Dialogo (oDlg) para controles
incrustado y dependiente de MDI. Windows() no es necesario si el parmetro
<lWindows> es .T. en la construccin del formulario con NEW(). Todos los controles
deben ser definidos despus de ejecutar el mtodo Windows debido a que ::oDlg es
el contenedor por defecto de todos los controles.
Activate(bInit,bEnd,bResize): Presenta en el video y activa la ejecucin del
formulario.
bInit: Bloque de cdigo de iniciacin y previa ejecucin de la ventana, puede ser
utilizado para llamar a un mtodo virtual (oFrm:xUDFunction) para crear barra de
botones o ejecuciones previas a la presentacin del formulario.
bEnd: Bloque de Cdigo que debe ejecutarse al cierre del formulario, si este
devuelve .f., el formulario no puede ser cerrado. Esta utilidad es de gran ayuda para
realizar validaciones de cierre.
bResize: Bloque de Cdigo que se ejecuta cuando el tamao de la ventana es
reajustado con el Mouse.

Manual del Usuario

Captulo VI. Pag: 69

Programacin

Data de la Clase:
oDlg: Nombre del Objeto Dialogo contenedor de Controles oFrm:oDlg:aControls.
Todos los controles (GET,SAY,COMBOBOX, Etc) se crean indicando por defecto a
oDlg como contenedor.
oWnd: Nombre de la Ventana de estilo MDI (CHILD) hija de la ventana principal y se
encarga de ejecutar todos los eventos de la venta: Minimizar, restaurar, ajuste de
tamao y permitir el uso en forma MDI.
oCursor: Contiene el objeto del cursor SQL de la consulta asociada con el
formulario.
bValid: Bloque de cdigo que permite validar el cierre del formulario, puede evitar
salirse con [X] de la ventana MDI.
lActivate: Indica si el formulario ha sido Activado o ejecutado el mtodo Activate().
lEscClose: Indica con .T. si el formulario puede ser cerrado con la tecla ESC.
lMsgBar: Con .F. suprime la barra de mensajes ubicada en la parte inferior del
dialogo.
cPrint: Contiene el nombre de la funcin definida en el programa DpXbase que se
encarga del proceso de impresin.
cDelete: Indica el nombre de la funcin que realiza el proceso de borrado. Si
devuelve .F. no realiza el borrado.
cList:
Nombre del Fichero *.BRW (Browse) que realiza muestra vertical del
datos del registro.
cPreSave: Nombre de la funcin que se valida el proceso de grabacin del registro,
en caso de ser .F. no realiza la accin.
cPostSave: Nombre de la funcin que se ejecuta luego de grabar el registro.

CONTROLES DE LA LIBRERA FIVEWIN PARA FORMULARIOS.


Constituye un conjunto de controles de gran uso para la definicin del formulario. La sintaxis clsica
de la librera fivewin (www.fivetechsoft.com) es utilizada en DpXbase logrando la mayor

Manual del Usuario

Captulo VI. Pag: 70

Programacin

compatibilidad posible y aprovechamiento de toda la documentacin existente


c:\dpnmwin\help\fwcmd.hlp debido a que DpXbase utiliza al mximo el potencial de sta fabulosa
librera.
Todos los controles definidos deben ser asociados slo con el formulario.

Check Box (Casilla de Seleccin)


OFrm:lVar:=.T.
@ 02,02 CHECKBOX oFrm:oChk VAR oFrm:lVar;
PROMPT " CheckBox " ;
OF oFrm:oDlg;
SIZE 90,10;
ON CHANGE {||.T.};
VALID
.T.;
COLOR NIL,oDp:nGris;
MESSAGE "Indique el valor del CheckBox";
WHEN .t.

Button (Botones Simples)


@ 01,01 BUTTON oFrm:oBtn;
PROMPT "Cerrar ";
SIZE 36,12;
ACTION oFrm:Close();
OF oFrm:oDlg ;
MESSAGE "Cerrar Formulario";
WHEN .t.;

CANCEL

SBUTTON (Boton con Imagen BMP). Presenta el control Botn dibujado mediante tres
botones BMP, Presentacin, Pase del Mouse y Accin.
@09, 43 SBUTTON oFrm:oBtn ;
SIZE 42, 23;
FILE "BITMAPS\XSALIR.BMP" NOBORDER;
LEFT PROMPT "Salir";
COLORS CLR_BLACK, { CLR_WHITE, CLR_HGRAY, 1 };
ACTION (oFrm:Cancel()) CANCEL
OFrm:oBtn:lCancel:=.T.
OFrm:oBtn:cToolTip:="Cerrar Formulario"
OFrm:oBtn:cMsg
:=Mensaje en la Barra Inferior

Manual del Usuario

Captulo VI. Pag: 71

Programacin

Get (Introducir Datos)


oFrm:cVar:=SPACE(40)
@ 1, 1 GET oFrm:oGet VAR oFrm:cVar;
OF oFrm:oDlg;
SIZE NIL,10;
MESSAGE "Indique el valor del Campo";
WHEN .t.;
VALID;
MensajeErr("No puede estar Vacio,;
vacio",nil,{||!Empty(oFrm:cVar)});
ON CHANGE .t.

// Get para Campos Numricos


oFrm:nValor:=1000
@ 4, 10 GET oFrm:oGet VAR oFrm:nValor;
PICTURE "99,999,999.99";
RIGHT;
OF oFrm:oDlg;
SIZE NIL,10;
MESSAGE "Indique el Monto";
WHEN .t.;
VALID .t.;
ON CHANGE .t.

Get (Introducir Datos en Campo MEMO)


oFrm:cMemo:= "Campo Memo, Texto"
oFrm:cMemo:=Alltrim(oFrm:cMemo)
@ 5, 5 GET oFrm:oGet VAR oFrm:cMemo;
MEMO;
HSCROLL;
OF oFrm:oDlg;
SIZE 100,100;
MESSAGE "Introduzca los textos";
WHEN .t.;
ON CHANGE .t.

ComboBox (Cuadro Combinado)


oFrm:aLista:={"Lnes","Martes","Mircoles","Jueves","Viernes"}
oFrm:cLista:=oFrm:aLista[1]
@ 5,15 COMBOBOX oFrm:oCbx VAR oFrm:cLista;

Manual del Usuario

Captulo VI. Pag: 72

Programacin

ITEMS oFrm:aLista;
OF oFrm:oDlg;
ON CHANGE .T.;
VALID .T.;
FONT oFont;
MESSAGE "Seleccione una Opcin";
WHEN .T.

Browse (Visualizacin y Edicin de Datos). El tamao del browse de se define


mediante el mtodo Move(nlin,nCol,nAlto,nAncho,.t.) en la clusula ON INIT del formulario
(oFrm:Activate({||oFrm:oBrw:Move(1,1,200,200,.t.)})
oFrm:aData:=ASQL("SELECT CODIGO,APELLIDO,NOMBRE FROM NMTRABAJADOR")
oFrm:oBrw := TXBrowse():New( oFrm:oDlg )
oFrm:oBrw:oFont := oFont // Recuerda Declarlo
oFrm:oBrw:SetArray(oFrm:aData,.T.)
oFrm:oCol:=oFrm:oBrw:aCols[1]
oFrm:oCol:cHeader:="Cdigo"
oFrm:oCol:nWidth :=140
oFrm:oCol:=oFrm:oBrw:aCols[2]
oFrm:oCol:cHeader:="Apellido"
oFrm:oCol:nWidth :=200
oFrm:oCol:=oFrm:oBrw:aCols[3]
oFrm:oCol:cHeader:="Nombre"
oFrm:oCol:nWidth :=200
oFrm:oBrw:bClrStd := {|oBrw|oBrw:=oFrm:oBrw,;
{0, iif( oBrw:nArrayAt%2=0, 15790320, 16382457 ) } }
oFrm:oBrw:CreateFromCode()

BAR (Barra de Botones). Debido a que el formulario provee el control Dialogo como
contenedor de controles es necesario definir la barra de botones en la clusula (ON INIT) del
dialogo, para lograrlo la clase TDPEDIT del formulario permite definir en el primer parmetro del
mtodo Activate(bInit) la llamada al mtodo virtual o funcin donde se ejecuta la iniciacin del
formulario.
#INCLUDE DPXBASE.CH
PROCE MAIN()
oFrm:=DPEDIT():New("Titulo","Fichero.edt","oFrm" , .F. )
oFrm:CreateWindow()

Manual del Usuario

Captulo VI. Pag: 73

Programacin

oFrm:Activate({||oFrm:HacerBarra()})
RETURN
FUNCTION HacerBarra()
LOCAL oCursor,oBtn
DEFINE CURSOR oCursor HAND
DEFINE BUTTONBAR oFrm:oBar SIZE 38,38 OF oFrm:oDlg 3D CURSOR oCursor
DEFINE BUTTON oBtn;
OF oFrm:oBar;
NOBORDER;
FILENAME "BITMAPS\XSALIR.BMP";
ACTION MensajeErr("Salir"),oFrm:Close()
oBtn:cToolTip:="Salir del Formulario"
RETURN .T.

MDULOS HRB
Son programas generados por el compilador harbour (www.harbour-project.org) y se ejecutan en
forma similar a los programas en DLLS, estn compuestos por funciones y/o procedimientos se
cargan al inicio del programa y se puede hacer llamada a las funciones definidas en el programa
HRB.
En la carpeta hrb ubicada dentro de la carpeta principal del sistema se encuentran los siguientes
ficheros.
Harbour.exe (Compilador 32 Bits)
Build.bat (Fichero de lotes para compilar)
Testhrb.prg (programa prg ejemplo)
Programa test.prg
// Ubicado c:\dpnmwin\hrb\test.prg
#INCLUDE "DPXBASE.CH"
MEMVAR oDp
FUNCTION HRBtest(cText)

Manual del Usuario

Captulo VI. Pag: 74

Programacin

MensajeErr(oDp:cEmpresa,cText)
RETURN NIL
// eof
Pueden notar que el test.prg posee la funcin HrbTest() que puede ser ejecutada desde cualquier
parte de DpXbase. La funcin HrbTest(), puede hacer llamadas a funciones propias de DpXbase
MensajeErr y llamadas a procedimientos Dpxbase con tan solo indicar:
EJECUTAR(XPROGRAMA,xValor)
Para compilarlo, es necesario acceder a la carpeta c:\dpnmwin\hrb\
Ejecutar:
BUILD TEST
Build.bat se encarga de compilar el programa test.prg y generar c:\dpnmwin\test.hrb listo para ser
cargado y utilizado desde DpXbase.
Ejecucin de Funciones del HRB
Es necesario cargar en memoria las funciones definidas en test.hrb, para ello utilizamos el siguiente
ejemplo escrito en DpXbase.
#INCLUDE "DPXBASE.CH"
PROCE MAIN()
HRBLOAD("test.hrb")
HRBTEST(Desde DpXbase)
RETURN

Reglas generales: Las funciones no deben tener nombres similares a las funciones existentes en
DpXbase. No deben declarar variables estticas, no deben definir clases para objetos. La principal
funcin de los mdulos HRB es la definicin de funciones. Si al cargar el mdulo HRB desde
DpXbase se presenta un mensaje de error se debe a que el programa HRB est haciendo llamada a
funciones no existentes en el ejecutable de DpXbase.
Los mdulos HRB slo se generan desde la compilacin un programa PRG y no como los DLLs de
los productos Datapro DOS que requeran compilacin y enlazamiento (Linkado) donde se podan
involucrar varios programas *.PRG, archivos objetos *.OBJ y archivos de libreras *.LIB

Manual del Usuario

Captulo VI. Pag: 75

Programacin

Que es mejor entre DpXbase y HRB?


Ambos modos de trabajo tienen sus ventajas. La principal ventaja de los mdulos HRB est en la
velocidad de ejecucin que es mucho mayor que DpXbase, adems la declaracin de variables
locales son reales; permitiendo crear diversas instancias de controles como dilogos (no modales) o
ventanas MDI. El programa fuente no es necesario para la ejecucin, lo cual permite proteger la
propiedad intelectual del cdigo.
DpXbase, posee su editor propietario y es ms cmodo, escribir, compilar y ejecutar. Siempre estar
disponible el programa fuente. No permite crear instancias para dilogos no modales ni ventanas
MDI, por ello siempre debe apoyarse en clases como TDPEDIT o TMDI.

UTILIZACION DE OTRAS HERRAMIENTAS DE DESARROLLO.


DpXbase no pretende competir o desplazar herramientas o entornos de desarrollo de desarrollos
como FoxPro o VisualBasic.
Utilizando FoxPro:
El modelo de datos que usa DpXbase es compatible con FoxPro, ambos utilizan tipos de
datos: Carcter, lgico, memo, numrico y Date. Para ejecutar programas binarios (EXE)
desde DpXbase es necesario que instale FoxPro versin 8. En la carpeta
c:\dpadmwin\foxpro se encuentra el programa foxrun.prg que contiene un ejemplo
funcional que lee parmetros creados desde DpXbase.
Desde DpXbase, debe ejecutar el programa FoxRun con el siguiente parmetro.
// Este ejemplo est Vinculado con el Cliente 0000000001
// DPXBASE
FUNCTION MAIN()
EJECUTAR(FOXRUN,STRZERO(1,10))
RETURN

Tambin, para crear reportes, utilizando FoxPro con tablas DBF, puede utilizar el siguiente
ejemplo:
//DpXbase
FUNCTION MAIN()
LOCAL oTable
oTable:=OpenTable(SELECT
oTable:CTODBF(DATOS.DBF)
OTable:End()

Manual del Usuario

FROM

DPINV

ORDER

ON

INV_CODIGO,.T.)

Captulo VI. Pag: 76

Programacin

EJECUTAR(FOXRUN,DATOS.DBF)
RETURN

UTILIZACION DE REPORTES DISEADOS CON FOXPRO.


Con el objetivo de brindarle mayor comodidad a usuario del fabuloso generador de reportes que
provee el entorno de desarrollo FoxPro, hemos creado un pequeo programa FOXREP.EXE que
incluye el cdigo fuente que permite conocer su contenido y ser adaptado para otros propsitos.
Vinculacin de Reportes FRX con el generador de Reportes. De la misma forma en que se asocian
los reportes diseados con Crystal Report (*.RPT), se deben asociar los reportes diseados con
FoxPro, preferiblemente deben ser almacenados en la carpeta CRISTAL del Sistema
C:\dpadmwin\cristal\.
Datapro genera archivos temporales de formato DBF en la carpeta CRISTAL\. El contenida de las
tablas se obtiene desde la consultas SQL solicitadas por el generador de reportes.
Para mayor comodidad utilice el diseador de reportes de FoxPro sobre las tablas temporales DBF
ubicadas en la carpeta \CRISTAL y guarde el archivo de diseo preferiblemente con el mismo
nombre de la tabla con extensin FRX y en la carpeta CRISTAL\.
Para ejecutar el reportes diseado con FoxPro, primero debe asociarlo con el reporte, acceda al
diseador de reportes de Datapro y seleccione la opcin Crystal Report, indica nuevo reporte e
introduzca la denominacin del reportes Productos diseador con FoxPro y Nombre del archivo
con su respectiva extensin y carpeta, ejemplo: C:\dpadmwin\crystal\dpinv.frx. Luego que el
reporte posea la asociacin con diversas opciones de diseo, seleccione el reporte identificado con
FoxPro en la lista identificada Diseo Cristal, seleccione la opcin Cristal Preview o Cristal
Print y finalmente presione el Botn de Ejecucin.

Recomendaciones para Optimizar las consultas SQL:


http://www.datapronet.com/index.php?id_seccion=48&tipo_seccion=section

Optimizacin de Consultas SQL.


Los tiempos de respuesta en una consulta SQL, depende en gran parte de la manera
en que se le indican las condiciones de los registros mediante la clusula WHERE. En este
punto es muy importante tomar en cuenta los ndices de las tablas y la secuencia de los
mismos. Las condiciones en la clusula WHERE debe estar segn la posicin de los
campos del ndice. Ejemplo:
Tabla: CampoA,CampoB,CampoC,CampoD
ndices: CampoB,CampoC
Manual del Usuario

Captulo VI. Pag: 77

Programacin

La consulta debe escribirse de la siguiente manera:


SELECT CampoA,CampoB,CampoC,CampoD FROM Tabla
WHERE (CampoB>=A AND CampoB<=Z) AND (CampoC<=A AND CampoC<=Z)

De esta manera, es ms optimo, ahora si invertimos los campos de la clausula WHERE,


tardar mucho ms.
SELECT CampoA,CampoB,CampoC,CampoD FROM Tabla
WHERE (CampoC>=A AND CampoB<=Z) AND (CampoB<=A AND CampoC<=Z)

Podemos hacer pruebas con las tablas del Sistemas de Gestione empresarial, la tabla puede
ser: DPDOCCLI cuyos ndices son:
DOC_CODSUC,DOC_TIPDOC,DOC_NUMERO,DOC_TIPTRA
Podemos realizar consultas de la siguiente manera, con MySQLfront:
SELECT DOC_CODSUC,DOC_TIPDOC,DOC_NUMERO,DOC_TIPTRA,DOC_CODIGO
FROM DPDOCCLI
WHERE DOC_CODSUC='000001' AND
DOC_TIPDOC='FAV'
AND
DOC_NUMERO='0000000010'

Si cambiamos el Orden en los campos en la Clusula WHERE, podemos notar que el


tiempo es mayor.
SELECT DOC_CODSUC,DOC_TIPDOC,DOC_NUMERO,DOC_TIPTRA,DOC_CODIGO
FROM DPDOCCLI
WHERE DOC_TIPDOC='FAV'
AND
DOC_NUMERO='0000000010' AND
DOC_CODSUC='000001'

Como podemos optimizar todos los procesos de los sistemas AdaptaPro. Si notamos que
alguna consulta es lenta, debemos activar la traza SQL, desde cualquier formulario, area de
icono, clic derecho, aparece un men de opciones, entre ellas esta: Activar traza de
ejecucin (Indica en que programa y lnea se esta ejecutando el sistema) y Traza SQL
(guarda en disco la ultima consulta que esta en ejecucin) sql.slq en la carpeta c:\dpadmwin

Manual del Usuario

Captulo VI. Pag: 78

Programacin

Este archivo puede ser ledo con NOTEPAD y copiar, luego con MySQLFRONT pegar,
buscar los ndices de la tabla y ordenar los campos de la CLAUSULA WHERE segn el
mismo orden de los ndices, y comprobar tiempo de respuesta. Luego que la consulta esta
optimizada, debe abrir el programa fuente, LBX o Reporte y cambiarle el Orden a los
campos de la clusula WHERE y luego ejecutar el programa y seguramente notara los
tiempos de respuestas.
En el caso que se amerite y muy necesario, es crear nuevos ndices (No
RECOMENDAMOS) para optimizar las consultas, debido a esta solucin podr hacer que
la base datos est mas lenta en el momento de Insertar, Modificar o eliminar un Registro.
Es importante agotar el ltimo recurso en las condiciones WHERE antes de agregar un
nuevo ndice.
Para el caso en el diseo de los informes, recomendamos aplicar la misma regla, agregar los
campos preferiblemente en el mismo orden de los ndices de las bases de datos, auque esto
no contribuye mucho debido a que el usuario no est obligado a rellenar todos los campos
del Rango y Criterio y lgicamente no sern filtrados por los campos que estn vacos.
En DataPro estamos pensado en crear un programa que rdenes los campos de la clusula
WHERE segn los ndices registrados en el diccionario de datos, toda vez que se ejecute un
informe, debido a que las condiciones del mismo puede variar en cada ejecucin. Apenas
logremos desarrollar esta solucin ser implantada en el sistema.
Sin embargo, toda la plataforma tecnolgica que est involucrada con
la base datos tiene alta incidencia en su desempeo : Entre ellos est: Hardware
del servidor, Sistema Operativo del Servidor, exclusividad del servidor para la base de
Datos, Base de datos Optimizada en y para el Servidor. Red, suiche, cables, trfico en la
red local, PC donde estn las aplicaciones, Sistemas Operativos donde estn las
aplicaciones.
Artculo redactado por: Juan Navas (CEO AdaptaPro)

TIPS (Basados en Experiencias en el campo de


implementacin)
Pasos para exportar tablas maestras hacia otra base de datos.
1. Crear una empresa, seleccionar empresa. En este punto se genera la BD con tablas vacas.
2. Programacin, procesos, exportar tablas de configuracin, ejecutar Inicio, luego
pregunta exportar data como ejemplo, indicar Si. Este proceso genera tablas en formato
DBF en la carpeta c:\dpadmwin\ejemplo

Manual del Usuario

Captulo VI. Pag: 79

Programacin

3. Comprimir todas las tablas DBF. En un archivo llamado ejemplo.rar


4. Seleccionar la empresa que contiene la data que ser exportada, ejecutar el proceso indicado
en el paso nmero dos. Ahora todas las tablas contienen informacin. Comprimir en una
nueva tabla tablas.rar, las siguientes tablas: DPINV, DPGRU, DPMARCAS, DPIVATIP,
DPCLIENTES,
DPCTA,
DPACTIVIDAD_E,
DPCLICLA,
DPPRECIOTIP,
DPPROVEEDOR, DPPROCLA, DPCTABANCO, DPBANCOS y DPCAJA.
5. Contamos con dos archivos ejemplo.rar y tablas.rar.
6. Instalar el sistema en el sitio destino, internamente en otro PC. Borrar el contenido de la
carpeta c:\dpadmwin\ejemplo, ubicarse en esta carpeta, primero descomprimir el archivo
ejemplo.rar en y segundo descomprimir el archivo tablas.rar
7. Luego, ingresar al sistema, definiciones del sistema, procesos, importar ejemplos. Este
proceso lee las tablas DBF y agrega los datos en las tablas de la base de datos. Si se genera
un mensaje de integridad, consultar en el diccionario de datos Programacin, tablas,
consultar la jerarquizacin de las tablas y buscar las tablas vinculadas Padre de las tablas
indicadas en el punto 4 y agregarla en dicha la lista, repetir el proceso indicado en el punto

8. Al instalar el sistema en una unidad distinta de C:\ al instalar, la instalacin


funciono perfectamente y exceptuando las imgenes del men, para corregir esto
hice unas consultas SQL que corrige la unidad destino:
SGE
UPDATE DPMENU SET MNU_BMP=MID(MNU_BMP, 13, 70) WHERE
LEFT(MNU_BMP, 12)='c:/dpadmwin/'
Nomina
UPDATE DPMENU SET MNU_BMP=MID(MNU_BMP, 12, 70) WHERE
LEFT(MNU_BMP, 11)='c:/dpnmwin/'
Aportado por : Oscar Londoo

Practicas para crear tablas y funcionalidades mediante el


Asistente DpXbase:
Manual del Usuario

Captulo VI. Pag: 80

Programacin

Practica para la creacin de tablas relacionadas, Browse (Mediante LBX


ListBox), formulario de datos y acceso mediante el men del sistema
Creando nueva funcionalidad para el sistema donde sern creadas dos tablas relacionadas
de manera jerrquica (Marcas y Vehculos). Mediante el asistente DpXbase, el usuario
deber crear las siguientes tablas:
Acceder a la aplicacin Programacin y DpXbase, utilizar opcin Tablas, se presenta
un browser con todas las tablas del sistema, utilizar la opcin Incluir e Introducir los
siguientes datos:
Nmero : 7000
Tabla
: MYMARCA
Descripcin: Marca Vehculos (Se refiere al nombre en plural)
BD
: Seleccionar Mltiple, esta opcin permite que esta tabla sea creada en cada
una de las empresas cuando el usuario ingresa a la empresa el sistema realiza revisin de la
estructura de datos y crea la tabla (En este caso, no es necesaria la participacin de un
experto DBA para crear las tablas en cada empresa con su respectiva integridad
referencial). La opcin Configuracin
Aplicacin: Programacin y Diccionario de Datos.
Singular : Marca de Vehculo (Se refiere al nombre singular de la tabla)
Estructura de la tabla de marcas
Campo

Tipo

Ancho

Decimal

Descripcin

Clave Primaria
o Primary Key

MAR_CODIGO

Carcter

10

Cdigo

PRIMARY
KEY NOT
NUL

MAR_DESCRI

Carcter

40

Descripcin

MAR_ACTIVO

Lgico

Activo

MAR_MEMO

Memo

Memo

Nuevamente, seleccionar la Opcin Tablas y presionar el Botn Incluir, se presenta el


formulario para crear las tablas y campos. Introduzca los datos en los siguientes campos:
Nmero : 7001
Tabla
: MYVEHICULO,
Descripcin: Vehculos (Se refiere al nombre en plural)

Manual del Usuario

Captulo VI. Pag: 81

Programacin

BD
: Seleccionar Mltiple, esta opcin permite que esta tabla sea creada en cada
una de las empresas cuando el usuario ingresa a la empresa el sistema realiza revisin de la
estructura de datos y crea la tabla (En este caso, no es necesaria la participacin de un
experto DBA para crear las tablas en cada empresa con su respectiva integridad
referencial). La opcin Configuracin
Aplicacin : Programacin y Diccionario de Datos.
Singular : Vehculo (Se refiere al nombre singular de la tabla)
Estructura de la Tabla Vehculos:
Campo

Tipo

Ancho

Decimal

Descripcin

Clave Primaria
o Primary Key

VEI_PLACA

Carcter

10

Placa

PRIMARY
KEY NOT
NUL

VEI_ACTIVO

Lgico

VEI_NOMBRE

Carcter

40

Descripcin

VEI_AO

Numrico

Ao

VEI_FCHADQ

Date (Fecha) 10

Fecha de
Adquisicin

VEI_VALOR

Numrico

12

Valor de
Compra

VEI_MEMO

Memo

Comentarios

VEI_CODMAR

10

Marca

VEI_ORIGEN

Activo

Nacional o
Importado

Luego de crear la tabla, es necesario crear las opciones para los siguientes campo: Mediante
la opcion Tablas se muestra todas las tablas, buscar tabla 7000 y seleccionar el 7mo boton
Opciones de los campos, ubicar el campo: VEI_ORIGEN y agregar dos registros:
Opcin
Nacional
Importado

Manual del Usuario

Captulo VI. Pag: 82

Programacin

Con esta funcionalidad, permitir al asistente de creacin DpXbase crear un control selector
de tipo ComboBox que le permitir al usuario seleccionar Nacional o Importado, asi
mismo los informes diseados por el usuario podr agregar como criterio el uso del campo
VEI_ORIGEN y el sistema presentara opciones: Nacional, Importado o Vacio (Vacio no
realiza ningn filtro)
INTEGRIDAD REFERENCIAL (RELACION) ENTRE LAS TABLAS
Es necesario crea la integridad referencial entre la tabla, para esto vamos crear la relacin
electrnica entre MYMARCA con MYVEHICULO
Desde Ficheros, ubicada en Programacin y DpXbase, seleccionar la opcin Enlace
entre tablas, y seleccionar la opcin Incluir:
Tabla Solicitante:
Tabla : MYMARCA
Campos: MAR_CODIGO
Tabla Enlazada:
Tabla : MYVEHICULO
Campos: VEI_CODMAR
Marcar: Delete, Update y Generar desde BD

Con estas indicaciones el sistema crea las sentencias de SQL para genera la integridad
referencial. Si una marca es eliminada todos los registros de vehculos tambin son
eliminados. En el caso que la marca cambie su cdigo los vehculos asociados tambin
sern modificados.
(Es importante precisar que ambos campos deben posee el misto tipo de datos y la misma
longitud) para este caso ambos de tipo carcter y de 10 caracteres cada uno)
ENLACE VIRTUAL ENTRE VEHICULOS Y MARCAS.
Este tipo de enlace no afecta la integridad referencial, es una funcionalidad que facilita la
creacin automtica de programas DpXbase y generacin de rangos y criterios mediante el
generador de informes, logrando solicitar el campo MARCA y mostrar el nombre de la
marca. Cuando se genera un programa DpXBase se crea un control de tipo BMPGET y
control SAY contentivo del nombre de la marca. Cuando el sistema solicita la marca,

Manual del Usuario

Captulo VI. Pag: 83

Programacin

presenta un botn que llama al LBX contentivo de marca y cuando el usuario selecciona la
marca y es validada se muestra el nombre de la marca. Esta funcionalidad ahorra tiempo de
programacin y depuracin del sistema.
Para crear un enlace virtual es necesario, acceder a Ficheros, ubicada en Programacin
y DpXbase, seleccionar la opcin Enlace entre tablas, y seleccionar la opcin Incluir:
Tabla Solicitante:
Tabla : MYVEHICULO
Campos: VEI_CODMAR
Tabla Enlazada:
Tabla : MYMARCAS
Campos: MAR_CODIGO
Campo de Referencia: MAR_DESCRI
En los campos de integridad referencia no se selecciona ninguna actividad debido a que
esta relacin no afectara fsicamente la tablas MYMARCA ni MYVEHICULO.

Crear formularios escritos en DpXbase mediante el Asistente


de desarrollo.
MYMARCA
Desde la opcin Tabla, ubicar la tabla 7000 (MYMARCA) y seleccionar el sexto botn
(Crear listBox/Browse de Navegacin).
Se presenta un formulario compuesto de dos listas, la primera los campos de la tabla y la
segunda con los campos seleccionados para la lista. El usuario debe seleccionar los
siguientes campo: MAR_CODIGO , MAR_DESCRI y MAR_ACTIVO. Todos deben
quedan el este orden, el campo de clave primaria debe estar siempre en la primera columna.
Seleccionar el botn Grabar y se genera el archivo forms\MYMARCA.LBX (Contentivo
de las instrucciones del Browser).
Creacin del Programa en DPXBASE para el formulario de carga de datos de la tabla
MYMARCA.
Nuevamente, desde la opcin Tabla, ubicar la tabla 7000 (MYMARCA) y seleccionar el
sexto botn (Crear listBox/Browse de Navegacin) y se presenta el selector de campos, en
la barra de botones se encuentra el tercer botn Crear programa para crear formulario. Se

Manual del Usuario

Captulo VI. Pag: 84

Programacin

presenta un nuevo formulario compuesto de dos listas de campos, el primero contiene los
campos de la tabla y el segundo formulario contiene los campos para ser utilizados en
formulario. El usuario debe seleccionar los siguientes campos en el mismo Orden:
MAR_CODIGO, MAR_DESCRI,MAR_ACTIVO y MAR_MEMO, luego debe presionar
el primer botn Formulario, y el sistema crea el programa fuente escrito en DpXbase
contentivo de todas las instrucciones para incluir, consultar o modificar Marcas.
Para ejecutar el LISTBOX de la tabla MYMARCA es necesario, incluir una nueva
opcin en la tabla DPMEMU, desde Ficheros, acceder a la opcin Men Principal de
Acceso, se muestran todas las opciones del men del sistema y vamos agregar una nueva
opcin, seleccionar botn Incluir e introducir los datos en los siguientes campos:
Aplicacin: Programacin y Diccionario de Datos.
Posicin Horizontal: Ficheros
Posicin Vertical
: 80
Titulo o Descripcin: Marcas de Vehculo (Si desea utilizar el diccionario de datos debe
indicar {oDp:MYMARCA})
Accin o Ejecucin: DPLBX(MYMARCA.LBX)
Condicin de Ejecucin: oDp:cUsuario$001,002 (Se coloca la condicin para activar la
opcin del men, en este caso los usuarios 001 y 002 solo puede acceder hacia esta opcin)
MYVEHICULO
Desde la opcin Tabla, ubicar la tabla 7001(MYVEHICULO) y seleccionar el sexto boton
(Crear listBox/Browse de Navegacin).
Se presenta un formulario compuesto de dos listas, la primera los campos de la tabla y la
segunda con los campos seleccionados para la lista. El usuario debe seleccionar el siguiente
campo:

VEI_PLACA
VEI_NOMBRE
VEI_ACTIVO
VEI_AO
VEI_FCHADQ
VEI_VALOR
VEI_CODMAR

Manual del Usuario

Captulo VI. Pag: 85

Programacin

VEI_ORIGEN
Todos deben quedar el este orden, el campo de clave primaria debe estar siempre en la
primera columna. Seleccionar el botn Grabar y se genera el archivo
forms\MYVEHICULO.LBX (Contentivo de las instrucciones del Browse).
Creacin del Programa en DPXBASE para el formulario de carga de datos de la tabla
MYVEHICULO.
Nuevamente, desde la opcion Tabla, ubicar la tabla 7001 (MYVEHICULO) y seleccionar el
sexto botn (Crear listBox/Browse de Navegacin) y se presenta el selector de campos, en
la barra de botones se encuentra el tercer boton Crear programa para crear formulario. Se
presenta un nuevo formulario compuesto de dos listas de campos, el primero contiene los
campos de la tabla y el segundo formulario contiene los campos para ser utilizados en
formulario. El usuario debe seleccionar los siguientes campos en el mismo Orden:

VEI_PLACA
VEI_NOMBRE
VEI_ACTIVO
VEI_AO
VEI_FCHADQ
VEI_VALOR
VEI_CODMAR
VEI_ORIGEN
VEI_MEMO

Finalmente presionar el primer botn Formulario, y el sistema crea el programa fuente


escrito en DpXbase contentivo de todas las instrucciones para incluir, consultar o modificar
Vehculos.
En este caso, podemos notar que el sistema agrego la funcionalidad del enlace virtual entre
Vehculo con Marca.
Para ejecutar el LISTBOX de la tabla MYMARCA es necesario, incluir una nueva
opcin en la tabla DPMEMU, desde Ficheros, acceder a la opcin Men Principal de
Acceso, se muestran todas las opciones del menu del sistema y vamos agregar una nueva
opcin, seleccionar boton Incluir e introducir los datos en los siguientes campos:

Manual del Usuario

Captulo VI. Pag: 86

Programacin

Aplicacin: Programacin y Diccionario de Datos.


Posicin Horizontal: Ficheros
Posicin Vertical
: 81
Titulo o Descripcin: Vehiculos (Si desea utilizar el diccionario de datos debe indicar
{oDp:MYVEHICULO})
Accin o Ejecucin: DPLBX(MYVEHICULO.LBX)
Condicin de Ejecucin: oDp:cUsuario$001,002 (Se coloca la condicin para activar la
opcin del men, en este caso los usuarios 001 y 002 solo puede acceder hacia esta opcin)
Finalmente para exportar del diccionario de datos, todas las nuevas funcionalidades. Desde
la opcin Otros, exportar estructura de datos, se presenta formulario, contentivo de todos
las tablas de datos, seleccionar todos, mediante el tercer botn es posible filtrar las tablas
creadas desde un rango de fechas, se muestran las tablas MYMARCA y MYVEHICULO ,
ejecutar el primer botn, presenta un nuevo formulario para indicar la carpeta donde se
guardaran todas las tablas en un archivo llamado DPTABLAS.ZIP ,
PD: En el Formulario de Men Los textos Vertical y Horizontal estn invertidos, en la
prctica del curso es necesario cambiar las posiciones de ambos textos.

Creacin de PLUGIN para la instalacin de componentes del diccionario


de datos.
Es necesario descargar el programa innosetup desde internet (Este programa
para crear instaladores es de uso libre sin pago). El programa de ejecucin se
llama compil32.exe, luego de ejecucin es necesario abrir el archivo
c:\plugin\plugin.iss, luego indicar los archivos y parmetros, guardar y
ejecutar. Se genera el programa de instalacin c:\plugin\output\plugin.exe
Carpeta
C:\PLUGIN

Contenido
Carpeta principal

C:\PLUGIN\DATADBF

Se guardan todos los componentes del


diccionario de Datos)
DPTABLAS
DPMENU
DPPROGRA
DPCAMPOS
DPCAMPOSOP
DPLINK

Manual del Usuario

Captulo VI. Pag: 87

Programacin

C:\PLUGIN\DPXBASE

Se guardan todos los programas compilados


(*.dxb) en:

C:\PLUGIN\OUTPUT

En esta carpeta se genera el programa


plugin.exe

C:\PLUGIN\FORMS

Formato de formularios y archivos LBX paa


ListBox

C:\PLUGIN\SCRIPT

Archivos de programas fuentes escritos en


DpXbase.

Archivos para generar el PLUGIN


Carpeta
Plugin.iss

Contenido
Script contentivo de los archivos que
van a conformar el plugin, incluye
destino de los archivo y dems
parmetros para el programa de
instalacin.

Licencia.txt

Contiene las condiciones e informacin que


desea indicar el creador del programa
plugin.exe

Espaol.isl

Contiene las instrucciones en espaol

Si el usuario no cuenta con estos archivos, deber comentarlos con ; en el


archivo plugin.iss para que el compilador omita estos archivos y las
instrucciones del programa plugin.exe ser emitidas en el idioma ingles. Para
inactivas estos archivos debe colocar ; punto y coma en el inicio de la
instruccin.
LicenseFile=\plugin\licencia.txt
MessagesFile=\plugin\espanol.isl

A continuacin, contenido del archivo plugin.iss


; Script generated by the Inno Setup Script Wizard.
; Las lneas innecesarias se inactivan con ;
[Setup]
AppName=PlugIn AdaptaPro 19/07/2013
AppVerName=PlugIn para Actualizar Sistema AdaptaPro 5.0

Manual del Usuario

Captulo VI. Pag: 88

Programacin

AppPublisher=Instalador creado por (Programador)


AppPublisherURL=http://www.datapronet.com
AppSupportURL=http://www.datapronet.com
AppUpdatesURL=http://www.datapronet.com
DefaultDirName=c:\dpadmwin\
OutputBaseFilename=plugin
DefaultGroupName=Datapro
Compression=bzip/9
LicenseFile=\plugin\licencia.txt
MessagesFile=\plugin\espanol.isl
[Languages]
Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl"
[Tasks]
Name: "desktopicon"; Description: "Crear incono de &escritorio icono"; GroupDescription:
"Additional icons:"; MinVersion: 4,4
[Files]
Source:
Source:
Source:
Source:
Source:
Source:
Source:
Source:

"c:\plugin\datadbf\*.*";
"c:\plugin\forms\*.*";
"c:\plugin\dpxbase\*.*";
"c:\plugin\*.*";
"c:\plugin\datadbf\*.*";
"c:\plugin\forms\*.*";
"c:\plugin\dpxbase\*.*";
"c:\plugin\*.*";

DestDir:
DestDir:
DestDir:
DestDir:
DestDir:
DestDir:
DestDir:
DestDir:

"{app}\plugin";
"{app}\forms";
"{app}\dpxbase";
"{app}\innosetup";
"c:\plugin\datadbf";
"c:\plugin\forms";
"c:\plugin\dpxbase";
"c:\kanguro";

[Run]
Filename: "{app}\dpadmwin.exe"; Description: "Ejecutar
Empresarial"; Flags: nowait postinstall skipifsilent

//
//
//
//
//
//
//

Programa
:
Fecha/Hora :
Propsito :
Creado Por :
Llamado por:
Aplicacin :
Tabla
:

CopyMode:
CopyMode:
CopyMode:
CopyMode:
CopyMode:
CopyMode:
CopyMode:
CopyMode:

aDaptaPro

alwaysoverwrite
alwaysoverwrite
alwaysoverwrite
alwaysoverwrite
alwaysoverwrite
alwaysoverwrite
alwaysoverwrite
alwaysoverwrite

Sistema

de

Gestion

DPEXPADAPTA
13/12/2011 21:50:51
Ubicar Programas Adaptados
Juan Navas
Programacion

#INCLUDE "DPXBASE.CH"
FUNCTION MAIN()
LOCAL aTablas
CursorWait()
MsgRun("Leyendo Adaptaciones","Por Favor Espere",;
{||aTablas:=LEERADAPTA()})
RETURN NIL
FUNCTION LEERADAPTA()
LOCAL aTablas:={},I,cTable,oTable,aFiles:={},cPass,aTotal:={}
LOCAL cDir:="DPEXPADAPTA"
LOCAL cFileZip:=cDir+"\ADAPTACIONES.ZIP"
AADD(aTablas,{"DPBOTBAR"
AADD(aTablas,{"DPCAMPOSOP"

Manual del Usuario

,"BOT_ALTER" ,"BOT_CODIGO"
,"OPC_ALTER" ,"OPC_TABLE ,OPC_CAMPO,OPC_TITULO"

,0 })
,0 })

Captulo VI. Pag: 89

Programacin

AADD(aTablas,{"DPCAMPOS"
,"CAM_ALTER" ,"CAM_TABLE ,CAM_NAME "
,0 })
AADD(aTablas,{"DPLINK"
,"LNK_ALTER" ,"LNK_TABLES,LNK_TABLED,LNK_FIELDS,LNK_FIELDD",0})
AADD(aTablas,{"DPINDEX"
,"IND_ALTER" ,"IND_TABLA ,IND_INDICE"
,0})
AADD(aTablas,{"DPCOMPARATIVOS","COM_ALTERA","COM_CODIGO"
,0})
AADD(aTablas,{"DPTABLAS"
,"TAB_ALTER" ,"TAB_NOMBRE"
,0})
AADD(aTablas,{"DPREPORTES"
,"REP_ALTERA","REP_CODIGO"
,0})
AADD(aTablas,{"DPGRUREP"
,"GRR_ALTER" ,"GRR_CODIGO"
,0})
AADD(aTablas,{"DPPROGRA"
,"PRG_ALTER" ,"PRG_CODIGO"
,0})
AADD(aTablas,{"DPVISTAS"
,"VIS_ALTER" ,"VIS_CODIGO"
,0})
AADD(aTablas,{"DPTRIGGERS"
,"TRG_ALTER" ,"TRG_CODIGO"
,0})
lMkDir(cDir)
aFiles:=DIRECTORY(cDir+"*.*")
AEVAL(aFiles,{|aFile| ferase(cDir+aFile[1])} )
aFiles:={}
FOR I=1 TO LEN(aTablas)
// Revisa si la Tabla, tiene Cambios
cTable:=cDir+"\"+aTablas[I,1]+".DBF"
FERASE(cTable)
IF EJECUTAR("DBISTABLE",oDp:cDsnConfig,aTablas[I,1])
oTable:=OpenTable("SELECT * FROM "+aTablas[I,1]+" WHERE "+aTablas[i,2]+"=1"+" GROUP BY
"+aTablas[i,3])
oTable:CTODBF(cTable)
aTablas[I,4]:=oTable:RecCount()
oTable:END()
AADD(aFiles,cTable)
ENDIF
NEXT I
aTotal:=ATOTALES(aTablas)
HB_ZipFile( cFileZip, aFiles, 9,,.T., cPass, .F., .F. )
MensajeErr("Archivo "+cFileZip+" Generado con "+LSTR(aTotal[4])+" Adaptaciones")
// ViewArray(aTablas)
RETURN aTablas
// EOF

Ejercicio prctico de programacin en DpXbase :

Manual del Usuario

Captulo VI. Pag: 90

Programacin

Obtener los datos del Contribuyente segn el siguiente texto obtenido


desde la pgina Web del Seniat.
<?xml version="1.0" encoding="ISO-8859-1"?> <rif:Rif xmlns:rif="rif"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
rif:numeroRif="J312344202"><rif:Nombre>SERVICIOS INFORMATICOS DATAPRO
C.A. (SERVICIO INFORMATICOS DATAPRO,
C.A)</rif:Nombre><rif:AgenteRetencionIVA>NO</rif:AgenteRetencionIVA><rif:
ContribuyenteIVA>SI</rif:ContribuyenteIVA><rif:Tasa>75</rif:Tasa></rif:Ri
f>

Para manipular cadenas de este caso y obtener los diversos valores: Contribuyente, condicin, % de
retencin de IVA es necesario el uso de las siguientes funciones y Expresiones:
AT(C,ABCD)
C$ABC
LEFT(ABCD,2)
RIGHT(ABCD,2)
SUBS(ABCD,2,2)
STRTRAN(ABCD,B,2)
UPPE(abcd)
LOWER(ABDC)
CVar:=1A,ISALPHA(cVAR)
LEN(ABCD)

Determina la posicin de la letra C en la cadena


ABCD. Generando como resultado 3
Esta expresin comparativa indica si el carcter
C se encuentra en la cadena ABCD. Su valor
es .T. (Lgico)
Obtiene dos caracteres desde el lado izquierdo o
inicio de la cadena, en este caso obtiene AB.
Obtiene dos caracteres desde el lazo Derecho
de la cadena o desde el final, en este caso
devuelve CD
Obtiene desde el segundo carcter los dos
siguientes caracteres, en este caso es BC
Busca en la cadena ABCD, en contenido de
B y lo reemplaza por 2, quedando la
expresin como: A2CD.
Muestra la cadena en maysculas ABCD
Muestra en minsculas abcd
Determina si una cadena se inicia con
caracteres, en es caso devuelve .F. Falso, si la
cadena fuese cVar:=A1, devuelve .F.
Determina la longitud de una cadena, en este
caso es ABCD

Para mayor informacin sobre las funciones Xbase y DpXbase puede consultar el siguiente enlace:

http://www.datapronet.com/index.php?id_seccion=111&tipo_seccion=section
Ejemplo en Programa escrito en DpXbase:

Manual del Usuario

Captulo VI. Pag: 91

Programacin

Utilizamos: Cadenas, Campos Memos, Funciones para cadenas, lectura de archivo plano
(TXT)
//
//
//
//
//
//
//

Programa
:
Fecha/Hora :
Propsito :
Creado Por :
Llamado por:
Aplicacin :
Tabla
:

LEERRIF
16/07/2013 16:12:42
Leer RIF del Cliente y Obtener Datos Fiscales
Juan Navas

#INCLUDE "DPXBASE.CH"
PROCE MAIN(cRif)
LOCAL cUrl,cTemp
LOCAL cWeb:="http://www.seniat.gob.ve",cIp
LOCAL nAt,I,aData:={},cMemo:=""
DEFAULT cRif:="J312344202"
cUrl:="http://contribuyente.seniat.gob.ve/getContribuyente/getrif?rif="+cRif // Prepara la Direccin URL con
el Rif
cTemp:="TEMP\RIF.TXT" // Archivo Temporal donde sera guardado el resultado de la pgina
FERASE(cTemp) // Borra el Archivo, necesario para determinar si est protegido o abierto.
IF FILE(cTemp)
MensajeErr("Archivo "+cTempo+" est Protegido o Est Abierto")
RETURN .F.
ENDIF
// Verifica el Programa DPFTP.EXE (Existe)
IF !FILE("BIN\DPFTP.EXE")
MensajeErr("Programa BIN\DPFTP.EXE no existe")
RETURN .F.
ENDIF
//
//
//
//

CursorWait()
WsaStartUp()
WaitRun()
MsgRun()

El cursor se muestra el Reloj de Arena


Solicita la conectividad Internet al PC/OS
Ejecuta un programa del OS (Sistema Operativo) y espera que concluya su ejecucin
Muestra una ventana de Dialogo, con titulo y Ejecuta un proceso o bloque de cdigo

MsgRun("Conectando con "+cWeb,"Por Favor, espere.. ",{|| (CursorWait() ,;


WsaStartUp() ,;
WaitRun("BIN\DPFTP "+cUrl) )})
// Si el Archivo Temporal no Existe, Posiblemente no hay Conectividad con el www.seniat.gov.ve o Dominio,
puede estar colapsado
IF !FILE(cTemp)
// Determina la IP de Servidor
cIp := GETHOSTBYNAME(cWeb) // Determina la Direccin IP
// Cuando no dominio no genera IP su valor es 0.0.0.0
IF "0.0.0"$cIp
MensajeErr("No hay Conexin Internet o "+cWeb+" no fu Encontrada")
ELSE
MensajeErr("No fu Posible Ejecutar "+cUrl)
ENDIF
RETURN .F.

Manual del Usuario

Captulo VI. Pag: 92

Programacin

ENDIF
// Lee el archivo texto, cMemo Contiene su valor
cMemo:=MemoRead("TEMP\RIF.TXT")
// Busca el Texto en la variable cMemo
nAt :=AT("rif:numeroRif",cMemo)
// Si no hay posicin del Texto no Existe
IF nAt=0
// Solo necesitamos la primera lnea del Memo, es convertido en arreglo
cMemo:=_VECTOR(cMemo,CHR(10))[1] // Convierte en Arreglo y Toma el Primer Elemento, CHR(10) Divide las
Lneas
MensajeErr(cMemo,"RIF no Validado")
RETURN .F.
ENDIF
// Obtenemos los datos del contribuyente, desde rif:numeroRif
cMemo:=SUBS(cMemo,nAt,LEN(cMemo))
// Removemos el texto: rif:numeroRif "Ya no es necesario"
cMemo:=STRTRAN(cMemo,"rif:numeroRif=","")
// Removemos las comillas innecesario.
cMemo:=STRTRAN(cMemo,["],"")
// Genera un arreglo desde los valores comunes "><" en cada campo
aData:=_VECTOR(cMemo,"><")
// ViewArray(aData) // Quitar Comentarios para ver su contenido
// Recorremos el Arreglo para obtener cada campo con su valor
FOR I=1 TO LEN(aData)
// Determinar posicion de > (Fin de campo en formato XML)
nAt:=AT(">",aData[I])
IF nAt>0
// Se obtiene los datos hasta el final del campo
aData[I]:=SUBS(aData[I],nAt+1,LEN(aData[I]))
ENDIF
// Determinar posicion de < (Inicio de campo en formato XML)
nAt:=AT("<",aData[I])
IF nAt>0
// Obtiene los datos desde el Inicio del campo
aData[I]:=LEFT(aData[I],nAt-1)
ENDIF
NEXT I
// El Nombre del contribuyente est repetid y encerrado entre parntesis ejemplo: Contribuyente
(Contribuyente)
// Ubicar posicin de (
nAt:=AT("(",adata[2])
IF nAt>0
// Si es encontrado (, solo tomamos los caracteres desde el Inicio hasta ( menos 1 para no incluir el (
aData[2]:=LEFT(adata[2],nAt-1)
ENDIF
// Finalmente, se muestran los datos del contribuyente
? "RIF:"+aData[1],"Contribuyente:"+aData[2],"Agente retencin: "+aData[3],"Contribuyente de IVA: "+aData[4],"%

Manual del Usuario

Captulo VI. Pag: 93

Programacin

Retencin: "+aData[5]
RETURN .T.
/*
<?xml version="1.0" encoding="ISO-8859-1"?>
<rif:Rif xmlns:rif="rif" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
rif:numeroRif="J312344202">
<rif:Nombre>SERVICIOS INFORMATICOS DATAPRO C.A. (SERVICIO INFORMATICOS DATAPRO, C.A)</rif:Nombre>
<rif:AgenteRetencionIVA>NO</rif:AgenteRetencionIVA>
<rif:ContribuyenteIVA>SI</rif:ContribuyenteIVA>
<rif:Tasa>75</rif:Tasa>
</rif:Rif>
*/
// EOF

Glosario de Trminos
UDF: User Define Function. Definicin otorgada a las definiciones creadas por el usuario.
CURSOR
: Respuesta recibida en un plano bidimensional (Lnea y Columnas) desde una consulta SQL.
DSN: Data Source Name. Nombre de las conexiones ODBC con servidores de bases de datos,
previamente definidas en orgenes de Datos ODBC de Herramientas Administrativas del Panel de
Control de Windows.
CLASE: Cdigo fuente o partitura de las acciones de un objeto, contiene: clase padre (opcional si
hereda desde otro objeto), mtodos que indica lo que hace el objeto y Data que indica lo que tiene el
objeto. Obligatoriamente debe poseer un mtodo constructor denominado NEW() y un Destructor
denominado END().
METODO. Method de la clase. Conforman las funciones o actividades que realiza el objeto, en forma
analgica puede ser comparada con las funciones estticas de un programa que solo se pueden
usar desde el mismo programa donde fue declarada. Para utilizar el mtodo de una clase debe ser
llamada indicando el nombre del objeto, seguido dos puntos y finalmente el nombre del mtodo con
sus respectivos parmetros. Ejemplo: oObjeto:Metodo(uPar1,uPar2,uParn). Mtodo Virtual, ha sido
una definicin adicional implantada en DpXbase.
DATA: Valores o contenidos del Objeto se representan a travs de nombres vlidos como variables.
Tambin puede ser definido como Lo que tiene el objeto. Ejemplo: Objeto:xData.

Manual del Usuario

Captulo VI. Pag: 94

Programacin

OBJETO: Componente abstracto que realiza actividades segn las tareas definidas en los mtodos
y valores almacenados en memoria (data). El objeto permite trabajar mltiples veces en forma
simultnea (Instancias). Una clase puede ser definida a partir de otra clase aprovechando toda su
partitura (herencia).
FUNCTION: Definicin de un programa compuesto de parmetros, declaracin de variables,
instrucciones, llamadas a otras funciones y que devuelven un valor. La funcin debe ser identificada
con un nombre y debe recibir parmetros desde la instruccin que la ejecuta: Ejemplo:
Sumar(10,20).
FUNCTION Sumar(nValor1,nValor2)
RETURN nValor1+nValor2

ENLAZAMIENTO: Definicin del proceso final para la generacin de un programa ejecutable o DLL
donde se utilizan programas objetos producidos por la compilacin y libreras contentivas de las
funciones invocadas por los programas fuentes.
COMPILACION: Proceso de conversin en archivo objeto (OBJ) a partir de las instrucciones escritas
en forma (humana) por un programador.
DLLS: Dynamic Link Library. Programas compilados y enlazadas de la misma forma que un
programa ejecutable con la diferencia que se carga una sola vez en memoria y sus funciones puede
ser llamado o utilizadas desde varios programas ejecutables. Otro uso de ficheros DLLs pueden
estar compuesto de recursos compuestos por diseos de controles: Combobox, text, checkbox, etc

Manual del Usuario

Captulo VI. Pag: 95

Вам также может понравиться