Mostrando entradas con la etiqueta PowerScript. Mostrar todas las entradas
Mostrando entradas con la etiqueta PowerScript. Mostrar todas las entradas

sábado, 15 de octubre de 2016

Datastore Vs SQL Embebido

Es muy común encontrar en aplicaciones PowerBuilder SQL Embebido, vemos SELECT, INSERT, UPDATE, DELETE dentro de eventos y funciones en objetos, esto no es eficiente y puede ser un dolor de cabeza al momento de dar mantenimiento. Lo mejor es usar DataStore, es mas eficiente y es mas fácil darle mantenimiento.

Ejemplo: En la vemos que un Objeto No Visual (NVO) contiene una función en la cual se esta utilizando un DataStore.




















Y tener en cuenta también, que de ser necesario es mejor crear en la Base de Datos que están trabajando Stored Procedures o Functions y utilizarlas desde PowerBuilder.

lunes, 5 de septiembre de 2016

DataWindows con Function PostgreSQL con parametros tipo Fecha

Ya habíamos visto antes:

1. Como trabajar con fechas y horas en una base de datos PostgreSQL en el post Trabajando con Fechas y Horas en PostgreSQL

2. Como usar una función de PostgreSQL en un DataWindow en el post Usando Function PostgreSQL en DataWindow

Ahora en este post veremos como trabaja un DataWindow con un objeto Function de PostgreSQL que tiene parametros de tipo Fecha.

El objeto Function PostgreSQL tiene los siguientes parametros:
Los parametros p_fec_ini y p_fec_fin ambos deben ser tipo char(10), estos nos serviran para poder asignar una fecha inicial y una fecha final y tener el resultado entre el rango de esas fechas.

En el WHERE utilizar TO_CHAR y dar el formato 'dd/mm/yyyy'









En el DataWindow Object, establecemos los argumentos:
En el siguiente cuadro pertenece a la documentación oficial de PostgreSQL, podremos ver los formatos para tipos de datos. 












Mas detalle en el siguiente enlace: https://www.postgresql.org/docs/9.5/static/functions-formatting.html)

jueves, 1 de septiembre de 2016

Trabajando con DropDowDatawindow - DDDW

En el siguiente post, respondo a la pregunta que llego a mi correo de un compañero, con respecto a como trabajar con campos de tipo DDDW.

Empezamos con el ejemplo:

En mi diseño de base de datos, tengo 2 tablas:

Tipo_Pago
id_tipo_pago integer (PK)
nom_tipo_pago varchar(50)

Forma_Pago
id_forma_pago integer (PK)
id_tipo_pago integer (FK)
nom_forma_pago varchar(50)

En Tipo_Pago se registra:

1 | CONTADO
2 | CREDITO

En Forma_Pago se registra

1 | 1 | EFECTIVO
2 | 2 | CREDITO A 15 DIAS
3 | 2 | CREDITO A 30 DIAS
4 | 2 | CREDITO A 60 DIAS

Tengo un DataWindow Object d_form_venta, en el que tengo 02 campos:

1 - id_tipo_pago que esta asociado a dddw_tipo_pago y con AutoRetrieve = True
2 - id_forma_pago que esta asociado a dddw_forma_pago, con AutoRetrieve = False

En tiempo de ejecución si se elije el Tipo de Pago CREDITO, el campo Forma de Pago solo debe filtrar los que pertenezcan al Tipo de Pago seleccionado.









Para cumplir con esto se debe programar en los siguientes eventos:

En el evento Itemchanged, del DataWindow Control, tenemos el siguiente código:
























En el evento RetrieveEnd, del DataWindow Control, tenemos el siguiente código:













Sugerencia: Por buenas practicas de diseño de base de datos las claves primarias (primary keys) y claves foraneas (foreign keys) deben ser de tipo integer.

domingo, 1 de noviembre de 2015

Ejecutar Stored Procedure Firebird en PowerBuilder

En este post ya habiamos visto como usar un Stored Procedure de Firebird en un DataWindow:
 
http://desarrolladorpowerbuilder.blogspot.pe/2015/10/usando-stored-procedure-firebird-en.HTML

Ahora veremos como ejecutar un Stored Procedure de Firebird desde PowerScript.

Primer Ejemplo:

En Firebird tenemos un Stored Procedure que nos devuelve el ultimo numero de un documento sumándole uno.


Vamos a PowerBuilder y debemos ejecutar el Stored Procedure con el siguiente PowerScript:

SELECT  NRO_SER,
                 NRO_ACT
    INTO :ls_Serie, :li_Numero
  FROM USP_SEL_DOCUMENTO_NUMERACION(gs_Empresa, gs_Sucursal, gs_Terminal, ls_Documento);


Segundo Ejemplo:

En Firebird tenemos un Stored Procedure que actualiza el ultimo numero de un documento sumándole uno.


Vamos a PowerBuilder

Para ejecutar este Stored Procedure Firebird tenemos que declararlo como una función externa en un Standard Class de tipo Transaction, siguiendo estos pasos:

1. New, clic en Standard Class, OK:

 
2. Seleccionar Transaction, clic en OK.

 
3. Guardamos el objeto.
 
4. En propiedades del objeto Application dar clic en el botón Additional Properties
 
 
5. Ubicamos la pestaña Variable Types y en la caja SQLCA, digitamos el nombre del objeto Transaction, luego clic en OK.
 
 
 
6. Abrimos el objeto de tipo Transaction y ubicar Local External Functions.
 
 
 7. Declaramos el Stored Procedure Firebird
 
 

8. Por ultimo las siguientes líneas deben estar dentro del evento o función donde se va ejecutar el Stored Procedure Firebird:
 
SQLCA.USP_UPD_DOCUMENTO_NUMERACION(gs_Empresa, gs_Sucursal, gs_Terminal, ls_Documento);


martes, 8 de septiembre de 2015

Cargar campos de un DataWindow a DropDownListBox de otro DataWindow

Tengo una ventana (Window Object) con dos DataWindows (Cabecera/Detalle) donde cargo los titulos de los campos de un DataWindow a un campo DropDownListBox del otro DataWindow. 

El DataWindow que tendra el campo de tipo DropDownListBox es un DataWindow de tipo External el cual tiene la siguiente estructura:



El siguiente código debe ir en el evento Open de la ventana para poder cargar los titulos de los campos del DataWindow Detalle al campo
DropDownListBox del DataWindow Cabecera que es External:
//==========================================================================
// Cargar titulos de los campos de dw detalle

//---------------------------------------------------------------------------------------------------
Long    ll_lastcol, ll_rc = 1, ll_col
String   ls_colname, ls_label, ls_filtro, ls_descripcion = '', ls_columns[]

is_columns[] = ls_columns[]
//---------------------------------------------------------------------------------------------------
// Captura el Nro. de Columnas en el DataWindow
//---------------------------------------------------------------------------------------------------

ll_lastcol = Integer(dw_detail.Object.DataWindow.Column.Count)
//---------------------------------------------------------------------------------------------------
// Llena las Columnas
//---------------------------------------------------------------------------------------------------

FOR ll_col = 1 TO ll_lastcol
    ls_colname = dw_detail.Describe("#" + String(ll_col) + ".Name")
  
    IF dw_detail.Describe( ls_colname + ".visible" ) = "1" THEN
        ls_label = dw_detail.Describe(ls_colname + "_t.Text")
      
        IF ls_label = '!'  THEN
            ls_label =  dw_detail.Describe( "evaluate('wordcap(~"" + ls_colname + "~")',1)" )
        END IF

        ls_label = ls_label
        ls_descripcion = ls_descripcion + ls_label + '~t' + String(ll_rc) + '/'
        is_columns[ll_rc] = Trim(ls_colname)
      
        ll_rc++
    END IF
NEXT


dw_filter.Object.columna.Values = ls_descripcion
 
//==========================================================================

Espero le sea de mucha utilidad, cualquier duda o consulta no duden en escribir a jorgebarzola@gmail.com que les respondere con mucho gusto.

Saludos.

Obtener la resolución de la pantalla

Hola a todos con este código podemos obtener la resolución de la pantalla:

String ls_Resolucion

Environment env

GetEnvironment(env)

ls_
Resolucion= String(env.Screenwidth) + " x " + String(env.ScreenHeight)