miércoles, 30 de agosto de 2023

Solución a Setup is running in another window, use ALT+TAB to switch between windows.


Después de mucho intentar volver a "levantar" la versión 11.5 del PowerBuilder, pude encontrar la solución a este problema en este foro https://groups.google.com/g/sybase.public.powerbuilder.general/c/ZZ5zYC8mCXA?hl=en

El cual indica que hay que reiniciar el equipo en modo Prueba de Fallos

- Tecla WIN+R

- Escribimos msconfig

- Vamos a la pestaña de Arranque, marcamos Arranque a prueba de errores

- Marcamos Minimo, aceptamos, reiniciamos el equipo

- La PC se iniciara en el MODO A PRUEBA DE FALLOS

Cuando ya hemos iniciado en este modo, instalamos nuestro PowerBuilder el cual debería correr sin inconvenientes, una vez listo, de nuevo sacamos del modo PRUEBA DE FALLOS siguiendo los pasos anteriormente dichos pero esta vez desmarcando la opción ARRANQUE A PRUEBA DE FALLOS, reiniciamos y listo.

Espero te ayude este tip.






jueves, 16 de abril de 2020

Parpadeo y/o Titilar un texto en Ventana

En el Evento TIMER de la ventana colocamos 


this.st_obs.text ='Obs.: Aqui puedes poner el texto que Desees..'
// Si el st_help esta visible
If this.st_obs.Visible = True Then
 // entonces lo oculta
  this.st_obs.Hide( )
// de caso contrario
Else
 // lo muestra
 st_obs.Show( )
End If

En el Evento OPEN de la misma ventana

Timer(0.5) //puedes colocar el tiempo que se te de la gana... listo!

martes, 22 de octubre de 2019

Como trabajar con estructuras para paso de Parámetros
1. Primeramente Creamos la estructura con los datos y tipo de los mismos que vamos a almacenar en ellos
 Ejemplo.
es_impresion_cheque
- orden decimal
- banco  integer

2. En la ventana desde la cual vamos a pasar los parámetros declaramos una variable tipo estructura (la que creamos)
Ejemplo:
es_impresion_cheque v_impresion_cheque

Dependiento desde donde enviaremos los parámetros (en que evento), asignamos los valores a los mismos
v_impresion_cheque.banco = cdw_det1.object.banco[fila]
v_impresion_cheque.op = cdw_det1.object.op[fila]

Aquí podemos decir que la estructura esta cargada con los datos que queremos...
A continuación..... se envia la estructura como parámetro para la ventana en la cual queremos recibir éstos parámetros

openwithparm(w_imprimir_cheques, v_impresion_cheque, parent)

3. En la ventana que recibe el parámetro... en nuestro ejemplo w_imprimir_cheques... en el evento open() recibimos éstos
parámetros

if isvalid(message.PowerObjectParm)then
v_impresion_cheque = message.PowerObjectParm
cdw_argumento.object.banco[1] = v_impresion_cheque.cuenta_banco
end if

Al leer los datos
ld_cant_filas = cdw_datos.retrieve(v_impresion_cheque.op, ld_cuenta_banco)

jueves, 30 de mayo de 2019

Hallar el digito verificador a partir del número de Cédula - Sybase

CREATE FUNCTION "f_digito_verificador_fv"( IN p_cedula varchar (7)  )
RETURNS VARCHAR(1)

BEGIN    /*FUNCION QUE HALLA EL DIGITO VERIFICADOR A PARTIR DEL NUMERO DE CEDULA - BY .:fativilla:. 2019.05.30*/
    /*SET - PARAGUAY*/
    DECLARE i numeric (1);
    DECLARE mult numeric (1);
    DECLARE valor varchar(1);
    DECLARE valor_num NUMERIC (4);
    DECLARE v_Digit NUMERIC (4);
    DECLARE DV varchar(1);

    SET i = 1 ;
    SET mult=LENGTH(p_cedula)+1;
    SET valor_num=0;

    WHILE i <= 8 LOOP
       SET valor = substring(p_cedula, i, 1);
       SET valor_num= valor_num + ( cast ( valor as numeric) * mult  ) ;
       SET mult=mult-1;
       SET i=i+1;
    END LOOP ;

  
    IF  MOD (valor_num, 11)>1 THEN
       SET  v_digit = 11 - MOD (valor_num, 11);
    ELSE
       SET  v_Digit = 0;
    END IF;
   
   
    SET DV=CAST(v_Digit AS VARCHAR(1));
  
    RETURN "DV";
END

viernes, 26 de abril de 2019

Abrir Archivos con Api de Windows

1. Como primer paso declaramos la API en el Global Functions

/**********************API'S DE WINDOWS*********************/
//--API PARA ABRIR CARPETAS DE WINDOWS--fativilla 2019.04.25
FUNCTION long ShellExecute(ulong ihwnd,string lpszOp,string lpszFile,string lpszParams,&
string lpszDir,int wShowCmd ) LIBRARY "shell32.dll" ALIAS FOR "ShellExecuteW"
/*************************************************************/

2. Crear una Funcion, que recibirá como parametro la ruta de tipo String (funcion en mi caso de window)


//-------------------------------------------------------------------------
// Función    : long gf_Ejecutar(String spRuta)
// Propósito  : Ejecuta un fichero, sea lo que sea (doc, pdf, xls, mp3...)
// Parámetros : spRuta.- Ruta del fichero a ejecutar.
// Devuelve   : 1.- Todo bien
//             -1.- Hay error.
//-------------------------------------------------------------------------
Long   lRetorno
String sError, sNulo

SetNull(sNulo)
// Se ejecuta la ruta pasada.
lRetorno = ShellExecute(Handle(this), sNulo, spRuta, sNulo, sNulo, 3)
//El último argumento es el estilo de la ventana:
//SW_HIDE 0
//SW_SHOWNORMAL 1
//SW_NORMAL 1
//SW_SHOWMINIMIZED 2
//SW_SHOWMAXIMIZED 3
//SW_MAXIMIZE 3
//SW_SHOWNOACTIVATE 4
//SW_SHOW 5
//SW_MINIMIZE 6
//SW_SHOWMINNOACTIVATE 7
//SW_SHOWNA 8
//SW_RESTORE 9
//SW_SHOWDEFAULT 10
//SW_MAX 10

IF lRetorno <= 32 THEN
 // Hay error
 CHOOSE CASE lRetorno
  CASE 2
   sError = "Fichero no encontrado"
  CASE 3
   sError = "Ruta no encontrada"
  CASE 5
   sError = "Acceso denegado"
  CASE 8
   sError = "Fuera de memoria"
  CASE 32
   sError = "DLL no encontrada"
  CASE 26
   sError = "A sharing violation occurred"
  CASE 27
   sError = "Asociación a fichero no válida o incompleta"
  CASE 28
   sError = "DDE Time out"
  CASE 29
   sError = "DDE transaction failed"
  CASE 30
   sError = "DDE busy"
  CASE 31
   sError = "No existe ninguna asociación a la extensión del fichero"
  CASE 11
   sError = "Invalid EXE file or error in EXE image"
  CASE ELSE
   sError = "Error desconocido"
 END CHOOSE
 Messagebox("Error..." + String(lRetorno),sError)
 Return -1
END IF

// Todo bien.
Return 1

3. Finalmente podemos llamar a nuestra funcion desde donde necesitemos

     gf_executar("path" )



Fuente: http://picarpiezas.blogspot.com/2011/04/como-ejecutar-cualquier-fichero-en.html


miércoles, 18 de enero de 2017

Sumar Mes a una Fecha en Sybase

SELECT MONTHS( CAST( TODAY()
AS DATETIME ), 5).
Ejemplo: Si tenemos la fecha '05/05/1990' lo siguiente nos devuelve '05/10/1990'.

miércoles, 21 de septiembre de 2016

Recuperar datos de campo ubicado en un datawindow Composite

Me sucedió que quise recuperar un dato que se encontraba en un datawindow Composite, lo hice de la siguiente manera:
ls_prome=cdw_listado.object.dw_3.object.compute_5[1]
Donde: cdw_listado es el datawindow "normal" y
             dw_3 es el datawindow composite.

Espero haya sido de provecho.