Formulario dinámico V

Ejemplo de campos dinámicos. Añadir campos según una estructura fija. Con operaciones matemáticas.

Vista del formulario en PDF.

Después de bastante tiempo, vamos a incluir una nueva entrada para contestar a una duda que nos planteaban en Formularios Dinámicos IV. Se trata de hacer una tabla en la que podamos incluir unos datos fijos y que nos haga una operación de multiplicación. En este caso serían unos conceptos con un precio unitario y que nos calcule el precio total al meter en cada campo diferentes cantidades del producto.

Para ello tomamos de base el ejemplo de Formularios Dinámicos IV. Pero os pongo otro modo de hacerlo, metiendo el siguiente script en el subformulario «details».

form1.purchaseOrder.details.detail::indexChange - (JavaScript, both) //{{Adobe LiveCycle Designer Generated Code Begin}} - row shading script. Don't modify it! var Freqs=[1,1]; var Colors=["240,240,240","255,255,255"]; var nFreqSize = 0; for (var i=0; i<Freqs.length; i++)   nFreqSize += Freqs[i]; var nRelIndex = this.index % nFreqSize + 1; for (var nRun=0; nRun<Freqs.length; nRun++) {    if (nRelIndex>Freqs[nRun])    {         nRelIndex -= Freqs[nRun];    }    else    {       this.border.fill.color.value = Colors[nRun];       break;    } } //{{Adobe LiveCycle Designer Generated Code End}} - row shading script.  form1.purchaseOrder.details.detail.Button2::click - (JavaScript, client) // Invoke the Instance Manager to remove the current instance of the detail subform. _detail.removeInstance(this.parent.index); // Invoke the recalculate method to update the form calculations. xfa.form.recalculate(1);  form1.purchaseOrder.details.detail.numQty::validate - (JavaScript, client) (this.rawValue >= 0 && this.rawValue  < 1000);  form1.purchaseOrder.details.detail.numAmount::calculate - (FormCalc, client) numQty * numUnitPrice  form1.purchaseOrder.details.total.totals.numTotal::calculate - (FormCalc, client) // Verify at least one instance of the numAmount field exists. if (exists(detail[0].numAmount) == 1) then     Sum(detail[*].numAmount) endif
A continuación os incluyo los scripts para los distintos campos. Para el botón, para eliminar filas de datos «Button2»:
 form1.purchaseOrder.details.detail.Button2::click - (JavaScript, client)
// Invoke the Instance Manager to remove the current instance of the detail subform.

_detail.removeInstance(this.parent.index);

// Invoke the recalculate method to update the form calculations.
xfa.form.recalculate(1);
En el campo Cantidad («NumQty»):
 form1.purchaseOrder.details.detail.numQty::validate - (JavaScript, client)
(this.rawValue >= 0 && this.rawValue  < 1000);
En el campo Total («NumAmount»):
 form1.purchaseOrder.details.detail.numAmount::calculate - (FormCalc, client)
numQty * numUnitPrice
En el campo Total («NumTotal»):
 form1.purchaseOrder.details.total.totals.numTotal::calculate - (FormCalc, client)
// Verify at least one instance of the numAmount field exists.
if (exists(detail[0].numAmount) == 1) then
    Sum(detail[*].numAmount)
endif
Para incluir el precio fijo en su casilla correspondiente, tenemos que seleccionarlo y en la ventana Objeto/Valor, elegiremos el Tipo Protegido y en Predeterminado, el valor que queramos tener como fijo. Hay que tener en cuenta, en la ventana Objeto/Celda, poner la Configuración regional del país en el que estemos, para que el valor sea en la moneda que queremos.
Os dejo el formulario en PDF de este ejemplo.

~ por dmartinr en mayo 23, 2012.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: