• No se han encontrado resultados

myappgen Usted Construye la aplicación mientras la ejecuta

N/A
N/A
Protected

Academic year: 2021

Share "myappgen Usted Construye la aplicación mientras la ejecuta"

Copied!
22
0
0

Texto completo

(1)

myAppGen

Usted Construye la aplicación

mientras la ejecuta

http://www.myAppGen.com

(2)

Tutorial 8 - Process

En este tutorial le mostraremos como utilizar el modelo de programa del tipo Process, con este modelo podemos crear un proceso con varias sentencias de actualización de la base de datos. Estas sentencias serán ejecutadas consecutivamente dentro de una única transacción para garantizar la integridad de toda la operación.

Si bien es cierto que con la definición de campos del tipo fórmula se puede resolver muchas de las necesidades de cálculo de la aplicación, existen algunas excepciones tales como los procesos de cierre o reapertura. Estos procesos involucran operaciones masivas de actualizaciones, copia de datos a otras tablas, etc.

Las sentencias de los procesos pueden ser del tipo: - Sql Insert

- Sql Update - Sql Delete

- Sql Free Write (Escritura manual de sentencias SQLs)

- Recalculate Formula (re cálculo de los campos del tipo fórmula)

En este Tutorial desarrollaremos dos ejemplos de procesos en los que podrá observar cómo se utilizan los diversos tipos de sentencia. El primero es el cierre mensual del stock y el segundo es un proceso de re cálculo que se efectúa sobre el archivo de Totales por Cliente y Tipo de Venta.

Observación:

Este Tutorial debe ser realizado desde la base de datos instalada por myAppGen, antes de comenzar si tiene algún servicio de MySQL en funcionamiento debe detenerlo.

Para realizar este Tutorial abra el diccionario “Process.Dct”, para acceder a este diccionario abra en forma sucesiva las carpetas de “Tutorials”, “Tutor” y “Tutorial 8 - Process”.

(3)

Cierre mensual del Stock

El proceso de cierre mensual del stock tiene una doble función, por un lado deja cerrado el stock del mes anterior, y por otro lado abre el nuevo mes.

El proceso consta de los siguientes pasos: Cierre del periodo anterior.

Creación del nuevo periodo, este quedará como periodo activo. Creación de registros en la ficha de stock para el nuevo periodo.

Desde la pantalla principal del myAppGen ejecute la aplicación , pase al modo edición y abra el Application Builder Wizard.

Ubíquese en el menú Process (el pattern Process se elije automáticamente), en el panel de la izquierda seleccione el archivo Stock y en el panel de la derecha oprima Build Process.

En el formulario de creación del proceso complete los títulos indicados en la Figura y elija el tipo de proceso Sql Free Write.

Confirme con el botón Ok.

Para modificar el Menu Text del proceso, presione doble clic sobre el Menú Item Stock, en el formulario de definición de propiedades escriba “Cierre Stock” como el nuevo Menu Text, confirme con el botón Ok.

(4)

Ubíquese sobre el proceso StockProcess y presione el botón Change, observe en el formulario de Definición de Procesos que se creó un primer ítem del tipo Sql Free Write.

Seleccione la definición del primer proceso y luego presione el botón . Desde la interface gráfica que aparece en la Figura derecha especificaremos las sentencias que componen el proceso de cierre del periodo anterior y de creación del nuevo periodo.

Recuerde que en el Manual de la Aplicación le hemos mencionado que los procesos del tipo Free Code se utilizan para escribir sentencias Sql que sean complejas y que no puedan ser escritas utilizando la interface visual; y que además con este modelo se pueden escribir pedazos de programa en lenguaje Java que ejecutan diversas sentencias. A continuación veremos paso a paso como podemos utilizar este tipo de proceso en el cierre mensual del stock.

(5)

1. Seleccione el archivo TUTOR.Period y desde Options elija “Child Entity”.

Presione clic en Select Option. Desde la interface gráfica de la Figura derecha escribiremos un filtro para el proceso Child Entity. Escriba el filtro que se muestra en la Figura, con este filtro se indica que quede disponible únicamente el periodo activo, confirme con el botón Ok.

Usted no necesita escribir el campo per.current, ubíquese sobre el mismo y presione Select Field.

2. Complete las sentencias que irán al interior del ciclo while (child.goNext()) { }, así como la declaración e inicialización de variables que serán necesitadas.

3. Primero insertaremos la siguientes líneas de código

String curPeriod; int curYear; int curMonth; String[] monthTxt =

(6)

java.text.DecimalFormat df = new java.text.DecimalFormat("00");

Para crear dos líneas en blanco, ubíquese en la posición que indica la Figura y presione dos veces enter, luego inserte el pedazo de código mencionado, utilice copiar y pegar.

4. Dentro del ciclo while (child.goNext()) { } insertaremos las siguientes líneas de código, estas sentencias son las que realizan el cierre del periodo anterior y la creación del nuevo periodo. Para insertar las siguientes líneas de código utilice copiar y pegar.

/* Ubicarse en el periodo actual e inicializar el Entity period */ con = database.getConnection(period);

period = (Period) child.getEntity(); curPeriod = per.period;

per.clear();

per.period = curPeriod; try {

if (period.doFetch()) {

/* Marcar como Closed el periodo Actual */ database.beginTransaction(con); per.current = "C";

/* Actualizar el periodo actual */ period.doUpdate(con);

/* Crear el nuevo periodo, el mismo se convertirá en el periodo Activo */ curYear = Integer.parseInt(curPeriod.substring(0, 4)); curMonth = Integer.parseInt(curPeriod.substring(4, 6)); curMonth += 1; if (curMonth == 13) { curMonth = 1; curYear += 1; } per.clear();

per.period = curYear + df.format(curMonth);

per.description = monthTxt[curMonth - 1] + " / " + curYear; per.current = "A";

per.priorPeriod = curPeriod; /* Insertar el nuevo periodo */ period.doInsert(con);

database.commit(con); }

} catch (Exception ex) {

if (con != null) database.rollBack(con); }

Presione dos veces enter

(7)

5. Verifique la sintaxis del código insertado (utilice Check) y luego confirme el proceso con el botón Ok.

Para completar nuestro proceso de cierre mensual del stock nos queda pendiente crear los registros en la ficha de stock para el nuevo periodo. Esto lo haremos por medio de la sentencia Sql Insert que se muestra en la siguiente Figura.

Esta sentencia insert sql se ejecuta una vez que se creó el nuevo periodo, el cual quedó como periodo activo. Con esta sentencia se insertan registros en el archivo Stock; utilizando el nuevo periodo se crea un registro por cada producto del stock del periodo anterior (cerrado), y para cada registro se efectúan las siguientes asignaciones:

sto.period = per.period sto.product = sto.product

sto.quantityPreviousAvailable = IfNull(sto.quantityCurrentAvailable, 0)

sto.quantityCurrentAvailable = IfNull( sto.quantityPreviousAvailable, 0) + IfNull( sto.quantityPurchases, 0) – IfNull( sto.quantitySales, 0)

sto.previousAvailable = IfNull(sto.currentAvailable, 0)

(8)

Donde IfNull(campo, 0) es una función de MySQL que reemplaza por 0 los valares nulos cargados en el campo

Para crear la sentencia sql insert siga los siguientes pasos.

1. Desde el formulario de definición de procesos presione el botón Add insert process.

2. En el Tab “Fields” del formulario de definición del proceso insert, complete el mensaje del proceso, y luego indique las asignaciones que se harán en los campos del archivo Stock.

Agregue los archivos Stock y Period.

Ubíquese sobre Process y presione , en la lista de archivos elija el archivo que desea agregar y confirme con Ok.

Observe en la Figura de abajo que hemos agregado los archivos Stock y Period como archivos independientes, de modo a que no se asigne automáticamente la relación que existe entre los mismos, debido a que en nuestro ejemplo la relación se efectúa a través de sto.period = per.priorPeriod.

Para efectuar la primera asignación de campos, seleccione en el archivo Period el campo per.period y presione el botón Add. En el formulario Formula Editor, elija el campo sto.period y confirme con el botón

(9)

Para asignar el campo sto.product, seleccione el archivo Stock y luego presione doble clic sobre el campo.

Nuestro siguiente paso consiste en efectuar las siguientes asignaciones.

sto.quantityPreviousAvailable = IfNull(sto.quantityCurrentAvailable, 0) sto.quantityCurrentAvailable = IfNull( sto.quantityPreviousAvailable, 0) +

IfNull( sto.quantityPurchases, 0) - IfNull( sto.quantitySales, 0)

Seleccione los campos que se indican en la Figura derecha y presione el botón Add.

Ubíquese en cada uno de los campos insertados y con el botón Change efectúe las siguientes modificaciones.

(10)

Luego seleccione los campos indicados en la Figura y a continuación presione Add.

Ubíquese en cada uno de los campos insertados y con Change efectúe las siguientes modificaciones.

sto.previousAvailable = IfNull(sto.currentAvailable, 0)

sto.currentAvailable = IfNull(sto.previousAvailable, 0) + IfNull(sto.purchases, 0) - IfNull(sto.sales, 0)

3. Presione clic en el Tab “Filter” y complete el filtro sto.period = per.priorPeriod AND per.current = 'A', el cual indica los campos de relacionamiento y la condición de utilizar el periodo

activo.

4. Presione el botón Ok para confirmar la creación de la sentencia sql insert.

(11)

Observe la Figura del formulario de definición de procesos, ahora muestra los dos procesos que componen el proceso de cierre mensual del stock.

Debido a que el proceso de cierre mensual del stock contiene un proceso del tipo free write, el mismo solo puede ser ejecutado desde el programa generado.

La ejecución de este proceso se efectúa en la parte final del Tutorial por motivos didácticos.

A continuación veremos cómo realizar la definición del proceso de re cálculo del archivo de Totales por Cliente y Tipo de Venta.

(12)

Re cálculo del archivo de Totales por Cliente y Tipo de Venta

El proceso re cálculo del archivo de Totales por Cliente y Tipo de Venta tiene como objetivo crear los registros del archivo SaleTypeTotal, el cual es un archivo auxiliar que se utiliza para la emisión de la consulta que se muestra en la siguiente Figura.

El proceso consta de los siguientes pasos:

Borrado de los registros anteriores del archivo SaleTypeTotal.

Creación de los registros de clientes que se encuentren en situación de clientes activos en el periodo del mes abierto (activo).

Para cada registro de clientes el cálculo de los totales de ventas por tipo (SMALL, MEDIUM, LARGE), así como del total general (TOTAL).

El proceso anterior consta básicamente de una sentencia sql delete, una sentencia sql insert y por último de una sentencia sql update.

Ubíquese en el ítem de menú Cierre Stock (el pattern Process se elije automáticamente), en el panel de la izquierda oprima doble clic sobre el archivo SaleTypeTotal.

Desde el formulario de definición de procesos complete los títulos que se muestran en la Figura, elija el tipo Sql Delete y confirme con el botón Ok.

(13)

Una vez creado el proceso cambiaremos el Menu Text del mismo, ubíquese sobre el proceso SaleTypeTotal y presione el botón . En el formulario de propiedades del Menú Item escriba el nuevo Menu Text y confirme con Ok.

A continuación editaremos la definición del proceso creado, seleccione el proceso SaleTypeTotalProcess y presione doble clic sobre el mismo.

Observe en el formulario de definición de procesos que el primer proceso creado es una sentencia sql delete, esta sentencia necesita ser modificada de modo a que la misma borre todos los registros de la tabla SaleTypeTotal.

En el formulario de definición de procesos, ubíquese sobre el proceso creado y presione el botón .

Desde el formulario de definición de la sentencia sql delete, deje en blanco el filtro existente, presione clic sobre el Tab “Data” para verificar todos los registros que serán borrados, y por último confirme la modificación de la sentencia presionando Ok.

(14)

El siguiente proceso que debemos crear es una sentencia sql insert que crea los registros de clientes que se encuentren en situación de clientes activos en el periodo del mes abierto (activo).

Desde el formulario de definición de procesos presione Add insert process.

En el formulario de definición del proceso sql insert (Figura derecha), agregue el archivo Invoice, utilice el botón .

Ubíquese en el archivo Invoice y agregue los archivos relacionados: Period y Customer, utilice el botón .

Ahora que disponemos de todos los archivos intervinientes en la sentencia sql insert, procederemos a efectuar las siguientes asignaciones de campos.

typtot.period = inv.period typtot.customer = cus.customer typtot.name = cus.name

En Insert File seleccione el archivo “SaleTypeTotal”, luego elija en el archivo Invoice el campo inv.period. Presione doble clic sobre este campo.

(15)

Desde el formulario Formula Editor seleccione el campo typtot.period y confime con el botón Ok.

Para asignar los campos del archivo Customer, seleccione los campos que se muestra en la Figura de la izquierda y presione el botón Add.

Desde el formulario Formula Editor elija en forma sucesiva los campos typtot.customer y typtot.name.

Confirme con Ok.

A continuación presionamos clic en el Tab “Filter” con el objeto de escribir una condición que limite el conjunto de registros que serán insertados en el archivo SaleTypeTotal.

Escriba el siguiente filtro per.current = 'A' AND cus.situation = 'A', con el fin de que se inserten solo

los clientes que se encuentren activos en el periodo abierto (Activo).

(16)

Presione clic en el Tab “Data” y vea los registros que serán incorporados al archivo SaleTypeTotal.

Para confirmar la creación de la sentencia sql insert presione Ok.

Nos queda pendiente crear la definición de una sentencia sql update que nos permita calcular para cada uno de los clientes, los totales de ventas acumulados en el periodo abierto (activo).

La sentencia sql update que definiremos efectuará las siguientes asignaciones de campos en el archivo “SaleTypeTotal”:

typtot.small = SELECT Sum(inv.total) FROM Invoice inv, Period per WHERE ( inv.period = per.period ) AND (per.current = 'A'

AND typtot.customer = inv.customer AND inv.total >= 1 AND inv.total <= 10000)

typtot.medium = SELECT Sum(inv.total) FROM Invoice inv, Period per WHERE ( inv.period = per.period ) AND (per.current =

'A' AND typtot.customer = inv.customer AND inv.total >= 10001 AND inv.total <= 100000)

typtot.large = SELECT Sum(inv.total) FROM Invoice inv, Period per WHERE ( inv.period = per.period ) AND (per.current = 'A'

AND typtot.customer = inv.customer AND inv.total >= 100001 AND inv.total <= 99999999)

typtot.total = IfNull( typtot.small, 0) + IfNull( typtot.medium, 0) + IfNull( typtot.large, 0)

(17)

Seleccione en Update File: SaleTypeTotal, complete el message del proceso y luego presione doble clic en el campo typtot.small.

Desde el formulario Formula Editor borre la formula existente y presione el botón Sql para crear una nueva fórmula.

El Select Editor nos permitirá crear la sentencia select que será asignada al campo typtot.small.

Agregue los archivos Invoice y Period, utilice el botón .

Para crear la expresión del select, en el Tab “Expression” ubíquese en el campo inv.total y presione el Sum (Figura izquierda).

Presione clic en el Tab “Filter” escriba la siguiente condición de filtro per.current = 'A' AND typtot.customer = inv.customer AND inv.total >= 1 AND inv.total <= 10000. Confirme con el botón Ok.

Verifique el contenido de la formula, presione Check.

Confirme con el botón Ok.

Doble clic Acceso al Select

(18)

A continuación seleccione los campos que se muestra en la Figura y luego presione Select.

Utilizando el procedimiento que le hemos explicado, efectúe las siguientes asignaciones.

typtot.medium = SELECT Sum(inv.total) FROM Invoice inv, Period per WHERE ( inv.period = per.period ) AND (per.current =

'A' AND typtot.customer = inv.customer AND inv.total >= 10001 AND inv.total <= 100000)

typtot.large = SELECT Sum(inv.total) FROM Invoice inv, Period per WHERE ( inv.period = per.period ) AND (per.current = 'A'

AND typtot.customer = inv.customer AND inv.total >= 100001 AND inv.total <= 99999999)

Nos queda pendiente asignar la fórmula para typtot.total.

typtot.total = IfNull( typtot.small, 0) + IfNull( typtot.medium, 0) + IfNull( typtot.large, 0)

Seleccione el campo typtot.total y luego presione Select.

Desde el formulario Formula Editor complete la Formula indicada en la Figura de abajo.

Verifique el contenido de la fórmula ( Check), confirme con Ok.

(19)

En el Tab “Data” podemos observar los valores que quedarán en los campos al ejecutar la sentencia sql update.

Para confirmar la creación de la sentencia presione Ok.

Como podemos observar en la Figura, con la creación del proceso anterior hemos finalizado la definición del proceso de re cálculo del archivo de Totales por Cliente y Tipo de Venta.

Cierre el formulario de definición de procesos y pase al modo ejecución.

Para ejecutar el proceso creado seleccione las opciones que se muestran en la Figura y confirme con Ok en el formulario Process Manager.

(20)

Ahora que hemos re cálculado SaleTypeTotal podemos ejecutar la consulta que se muestra en la siguiente Figura.

Recalculate Formula (re cálculo de los campos del tipo fórmula)

Existen ocasiones en que al actualizar los archivos por medio de sentencias sql, los campos del tipo fórmula pueden quedar desactualizados. Para resolver este problema, podemos agregar el re cálculo de los campos del tipo fórmula para los archivos necesarios.

Debido a que este tipo de proceso no se utiliza en este tutorial, lea en el Manual de la Aplicación el detalle referente al mismo.

El último punto que nos queda pendiente es ejecutar el proceso de cierre mensual del stock. Antes de ejecutar este proceso necesitamos generar la aplicación.

Desde la pantalla principal de myAppGen grabe la aplicación . Presione el botón , genere el código fuente y luego compile y cree los archivos de distribución

(21)

Para ejecutar la aplicación presione doble clic sobre el archivo Process.jar.

Ingrese User: “Process” y Password “adminadmin”.

Para ejecutar el proceso de cierre mensual del stock, seleccione las opciones que se muestran en la Figura y confirme con Ok en el formulario Process Manager.

(22)

Desde el formulario de actualización del periodo, observe que ahora el periodo activo es Septiembre / 2009.

Para observar la ficha de control de stock que se ha creado para el mes de Septiembre / 2009, ubíquese en este periodo y presione el botón Stock.

Referencias

Documento similar

En el caso de películas de coproducción minoritaria italiana, es frecuente que las películas se estrenaran antes en el mercado extranjero y después en el italiano: también

La Comisión Calificadora de Documentos Administrativos de la Universidad de Granada es un órgano colegiado, asesor de la Secretaría General y tiene como finalidad, de

Archivo Histórico de Sabadell Archivo Histórico de Sabadell Archivo Histórico de Sabadell Archivo Nacional de Cataluña Archivo Nacional de Cataluña Archivo Nacional de Cataluña

archivo4

Polígon industrial Torrent d'en Puig. Polígonindustrial de Can

Descripción : Ejecuta un proceso a partir del nombre del archivo binario pasado por parámetro ( (se buscará el archivo en el directorio indicado por la variable de entorno

Así, un año después de la promulgación de la Ley, el Real Decreto de 17 de ju- lio de 1858 18 sienta los fundamentos de la organización de los archivos, bibliotecas y museos

De este modo se constituye un espacio ontológico y epistemológico a la vez, en el que cada elemento (cada principio) ocupa un lugar determinado en la totalidad, y desde ahí está