martes, 25 de septiembre de 2012

Convertir de Números a Letras usando SQL (Oracle)

Para obtener por SQL la conversión de números a letras podemos usar lo siguiente:

SELECT TO_CHAR ( TO_DATE ( TO_CHAR ( 2012, '99999999999') , 'J'),  'JSP') EN_LETRAS FROM dual;
De lo cual obtenemos:

EN_LETRAS                                                                 
---------------------------------------------------------------------------
TWO THOUSAND TWELVE
1 row selected

Bien, podemos obtener desde el número 1 hasta 5,373,484 y es por la restricción de las fechas julianas (como fecha máxima tenemos 31-Dic-9999)

Explicando el por que y cómo:

Si vamos separando las operaciones que realiza observamos:

1. La primera conversión
TO_CHAR ( 2012, '99999999999') tan solo pasa el número a cadena
2. La segunda operación TO_DATE ( TO_CHAR ( 2012, '99999999999') , 'J') es donde convierte la cadena obtenida en fecha juliana.
3. La tercera parte, donde volvemos esta fecha obtenida en cadena nuevamente, utilizamos la máscara ‘JSP’ en donde J hace referencia a la fecha Juliana, y SP lo lleva a letras (Spell)

Y listo!! Tienes el número en letras.

Espero les sea de utilidad

Bloquear botones de Agregar y Eliminar de un Scroll por Peoplecode

Para quitar los botones de Agregar y Eliminar de un scroll en tiempo de ejecución, se puede usar este código:

Local Rowset &MyScroll;

&MyScroll =GetLevel0()(1).GetRowset(Scroll.REGISTRO_DE_SCROLL);

&MyScroll.InsertEnabled = False;

&MyScroll.DeleteEnabled = False;


Espero les sea de utilidad.

sábado, 22 de septiembre de 2012

Convertir de Números a Letras en PeopleCode

Aquí les dejo una función para convertir números a letras, utilizando PeopleCode. La función recibe la cantidad en número y devuelve en string la conversión.

Espero les sea de utilidad.


Function monto_en_letra(&monto) Returns string;
 
   For &i = 1 To Len(&monto)
      &caracter = Substring(&monto, &i, 1);
      Evaluate &caracter
      When "0"
         &nombre = "";
         Break;
      When "1"
         &nombre = "UNO";
         Break;
      When "2"
         &nombre = "DOS";
         Break;
      When "3"
         &nombre = "TRES";
         Break;
      When "4"
         &nombre = "CUATRO";
         Break;
      When "5"
         &nombre = "CINCO";
         Break;
      When "6"
         &nombre = "SEIS";
         Break;
      When "7"
         &nombre = "SIETE";
         Break;
      When "8"
         &nombre = "OCHO";
         Break;
      When "9"
         &nombre = "NUEVE";
         Break;
      End-Evaluate;
      &posicion = Len(&monto) + 1 - &i;
      Evaluate &posicion
      When 7
         &caracter_sigm = Substring(&monto, 1, 1);
         Evaluate &caracter
         When "1"
            &valor = "UN MILLÓN ";
            Break;
         When-Other
            &valor = &nombre | " MILLONES ";
            Break;
         End-Evaluate;
         Break;
      When 6
         Evaluate &caracter
         When "0"
            &valor = &valor | "";
            Break;
         When "1"
            &caracter_sig = Substring(&monto, 2, 2);
            If &caracter_sig = "00" Then
               &valor = &valor | "CIEN ";
            Else
               &valor = &valor | "CIENTO ";
            End-If;
            Break;
         When "5"
            &valor = &valor | "QUINIENTOS ";
             Break;
         When "7"
            &valor = &valor | "SETECIENTOS ";
            Break;
         When "9"
            &valor = &valor | "NOVECIENTOS ";
            Break;
         When-Other
            If &caracter_sigm <> 0 Then
               &valor = &valor | &nombre | "CIENTOS ";
            End-If;
            Break;
         End-Evaluate;
         Break;
      When 5
         &sig = 0;
         Evaluate &caracter
         When "0"
            &valor = &valor | "";
            Break;
         When "1"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            &sig = 1;
             Evaluate &caracter_sig
            When "0"
               &valor = &valor | "DIEZ ";
               Break;
            When "1"
               &valor = &valor | "ONCE ";
                Break;
            When "2"
               &valor = &valor | "DOCE ";
               Break;
            When "3"
               &valor = &valor | "TRECE ";
               Break;
            When "4"
               &valor = &valor | "CATORCE ";
               Break;
            When "5"
               &valor = &valor | "QUINCE ";
               Break;
            When-Other
               &valor = &valor | "DIECI";
               Break;
             End-Evaluate;
            Break;
         When "2"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "VEINTE ";
            Else
               &valor = &valor | "VEINTI";
            End-If;
            Break;
        When "3"
            &caracter_sig = Substring(&monto, &i + 1, 1);
         
            If &caracter_sig = "0" Then
               &valor = &valor | "TREINTA ";
            Else
               &valor = &valor | "TREINTA Y ";
            End-If;
            Break;
          When "4"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "CUARENTA ";
            Else
               &valor = &valor | "CUARENTA Y ";
            End-If;
            Break;
        When "5"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "CINCUENTA ";
            Else
               &valor = &valor | "CINCUENTA Y ";
            End-If;
            Break;
         When "6"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "SESENTA ";
            Else
               &valor = &valor | "SESENTA Y ";
            End-If;
            Break;
         When "7"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "SETENTA ";
            Else
               &valor = &valor | "SETENTA Y ";
            End-If;
            Break;
         When "8"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "OCHENTA ";
            Else
               &valor = &valor | "OCHENTA Y ";
            End-If;
            Break;
         When "9"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "NOVENTA ";
            Else
               &valor = &valor | "NOVENTA Y ";
            End-If;
            Break;
         End-Evaluate;
         Break;
      When 4
         If &sig = 1 Then
            If Find(&caracter, "6789") > 0 Then
               &valor = &valor | &nombre | " ";
            Else
               &valor = &valor | "";
            End-If;
         Else
            Evaluate &caracter
            When "0"
               &valor = &valor | "";
               Break;
            When "1"
               If Len(&monto) = 4 Then
                  &valor = &valor | "";
               Else
                  &valor = &valor | "UN ";
               End-If;
               Break;
            When-Other
               &valor = &valor | &nombre | " ";
               Break;
            End-Evaluate;
         End-If;
         &valor = &valor | "MIL ";
         Break;
      When 3
         Evaluate &caracter
         When "0"
            &valor = &valor | "";
            Break;
         When "1"
            If &caracter_sig = "00" Then
               &valor = &valor | "CIEN ";
            Else
               &valor = &valor | "CIENTO ";
            End-If;
            Break;
         When "5"
            &valor = &valor | "QUINIENTOS ";
            Break;
         When "7"
            &valor = &valor | "SETECIENTOS ";
            Break;
         When "9"
            &valor = &valor | "NOVECIENTOS ";
            Break;
         When-Other
            &valor = &valor | &nombre | "CIENTOS ";
            Break;
         End-Evaluate;
         Break;
      When 2
         &sig = 0;
         Evaluate &caracter
         When "0"
            &valor = &valor | "";
            Break;
         When "1"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            &sig = 1;
            Evaluate &caracter_sig
            When "0"
               &valor = &valor | "DIEZ ";
               Break;
            When "1"
               &valor = &valor | "ONCE ";
               Break;
            When "2"
               &valor = &valor | "DOCE ";
               Break;
            When "3"
               &valor = &valor | "TRECE ";
               Break;
            When "4"
               &valor = &valor | "CATORCE ";
               Break;
            When "5"
               &valor = &valor | "QUINCE ";
               Break;
             When-Other
               &valor = &valor | "DIECI";
               Break;
            End-Evaluate;
            Break;
         When "2"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "VEINTE ";
            Else
               &valor = &valor | "VEINTI";
            End-If;
            Break;
         When "3"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "TREINTA ";
            Else
               &valor = &valor | "TREINTA Y ";
            End-If;
            Break;
         When "4"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "CUARENTA ";
            Else
               &valor = &valor | "CUARENTA Y ";
            End-If;
            Break;
         When "5"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "CINCUENTA ";
            Else
               &valor = &valor | "CINCUENTA Y ";
            End-If;
            Break;
         When "6"
            &caracter_sig = Substring(&monto, &i + 1, 1);
              If &caracter_sig = "0" Then
               &valor = &valor | "SESENTA ";
            Else
              &valor = &valor | "SESENTA Y ";
            End-If;
            Break;
         When "7"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "SETENTA ";
            Else
               &valor = &valor | "SETENTA Y ";
            End-If;
            Break;
         When "8"
            &caracter_sig = Substring(&monto, &i + 1, 1);
           If &caracter_sig = "0" Then
               &valor = &valor | "OCHENTA ";
            Else
               &valor = &valor | "OCHENTA Y ";
            End-If;
            Break;
         When "9"
            &caracter_sig = Substring(&monto, &i + 1, 1);
            If &caracter_sig = "0" Then
               &valor = &valor | "NOVENTA ";
            Else
              &valor = &valor | "NOVENTA Y ";
            End-If;
            Break;
         End-Evaluate;
         Break;
      When 1
         If &sig = 1 Then
         
            If Find(&caracter, "6789") > 0 Then
               &valor = &valor | &nombre | " ";
            Else
               &valor = &valor | "";
            End-If;
         Else
            Evaluate &caracter
            When "0"
               &valor = &valor | "";
               Break;
            When "1"
               &valor = &valor | "UN ";
               Break;
            When-Other
               &valor = &valor | &nombre;
              Break;
            End-Evaluate;
         End-If;
         Break;
      End-Evaluate;
   End-For;

   If &valor = "UN" Then
      &valor = &valor | " PESO ";
   Else
      &valor = &valor | " PESOS ";
   End-If;

   Return &valor;
End-Function;

domingo, 16 de septiembre de 2012

Creación de archivos PDF con PeopleCode (online)

Dependiendo de la versión de PeopleTools hay diferentes herramientas para crear documentos PDF. Específicamente para este tema comento que estoy utilizando la versión de tools 8.44 y Java 4.1

Al ser en línea usamos java, y utilizamos iText, que nos da la funcionalidad que requerimos.

Desde esta ubicación pueden tanto descargar el ejecutable ( .jar) como el código fuente, si es que lo requieren. Viene la referencia de todas las clases, de forma que podemos revisar como usarlo.

Repito, según la versión de Java que estén utilizando es la versión de iText que deben utilizar, en este caso estoy utilizando la 2.0.8.

El archivo JAR lo deben ubicar a donde apunte PS_CLASSPATH, de estar vacía es necesario que la definan, de otra forma no funciona.

Dicho lo anterior, entramos en tema.


Los primeros pasos son:

/* Crea un objeto de tipo documento */
Local string &MyFile = "myfile.pdf";
Local JavaObject &Obj_Doc = CreateJavaObject("com.lowagie.text.Document");


/* Podemos desde un inicio cargar clases complementarias que vamos a usar */
Local JavaObject &Obj_Font = CreateJavaObject("com.lowagie.text.Font");
Local JavaObject &Element = GetJavaClass("com.lowagie.text.Element");

/* es importante obtener la ruta en donde deja los archivos para que posteriormente podemos tomar los mismos*/
&ambiente = GetEnv("PS_HOME");

/* Obtiene una instancia de PDF Writer */
Local JavaObject &obj_PDFoutput =
GetJavaClass("com.lowagie.text.pdf.PdfWriter").getInstance(&Obj_Doc, CreateJavaObject("java.io.FileOutputStream", &ambiente | "/" |
&MyFile, True));

/* y abrimos el documento para comenzar a escribir */
&Obj_Doc.open();


Bien, ya tenemos abierto el archivo y podemos comenzar a llenar el documento. Podemos agregar directamente texto e imágenes, pero con finalidad de darle una mejor presentación podemos utilizar tablas, para acomodar mejor la información en el documento.


/* Creación de una tabla */
/* El número de renglones no es necesario especificarlo, pero las columnas si */
Local JavaObject &Obj_Table = CreateJavaObject("com.lowagie.text.Table", 6)

/* creado el objeto tabla, se establecen propiedades */
&Obj_Table.setWidth(100);
&Obj_Table.setBorderWidth(0);
&Obj_Table.setDefaultCellBorderWidth(0);

/* creada la tabla, se deben de ir incluyendo las celdas*/
Local JavaObject &cell = CreateJavaObject("com.lowagie.text.Cell");

/* se especifican sus propiedades */
&cell.setBorderWidth(&border);
&cell.setHorizontalAlignment(&AlinearHorizontal);
&cell.setVerticalAlignment(&AlinearVertical);

/* En este punto es cuando se agrega a la celda aquello que se vaya a presentar */

/* ... agregando una imagen a la celda */
Local JavaObject &Obj_Img = GetJavaClass("com.lowagie.text.Image").getInstance(&URLImagen);
/* se establecen propiedades */
&Obj_Img.scaleAbsolute(50, 50);
/* se agrega a la celda */
&cell.addElement(&Obj_Img);

/* finalmente se agrega la celda a la tabla, incluso se puede especificar la posición exacta dentro de la tabla */
Local float &Row, &Column;
&Row=1;
&Column=3;
&Obj_Table.addCell(&cell, &Row, &Column);

/* … agregando texto a la celda, y especificando el COLSPAN */
/* primero creamos la fuente */
Local JavaObject &fuente = CreateJavaObject("com.lowagie.text.Font", 1);
&fuente.setSize(&TamanioFuente);
&fuente.setStyle("bold");
Local JavaObject &Obj_Parrafo = CreateJavaObject("com.lowagie.text.Paragraph", “Texto a Mostrar”, &fuente);

/* Creamos la celda */
Local JavaObject &cell = CreateJavaObject("com.lowagie.text.Cell");
&cell.setColspan(2);
&cell.setWidth(&Ancho);
&cell.setBorderWidth(&border);
&cell.setHorizontalAlignment(&AlinearHorizontal); /* 0,1,2 -> Izq, centro, derecha */
&cell.setVerticalAlignment(&AlinearVertical);
&cell.addElement(&Obj_ Parrafo);
/* agregamos a tabla */
&Obj_Table.addCell(&cell, &Row, &Colum);

/* Agregando una imagen directamente al documento */
Local JavaObject &Obj_Img = GetJavaClass("com.lowagie.text.Image").getInstance(&URLImagen);
&Obj_Img.scaleAbsolute(&Width, &Height);
&Obj_Doc.add(&Obj_Img);

/* Agregar texto directamente al documento */
Local JavaObject &fuente = CreateJavaObject("com.lowagie.text.Font", 12); /* desde aquí se puede especificar el tamaño o posteriormente */
&fuente.setSize(&TamanioFuente);
&fuente.setStyle("bold");
Local JavaObject &Obj_Parrafo = CreateJavaObject("com.lowagie.text.Paragraph", “Texto a Mostrar”, &fuente);
&Obj_Parrafo.setAlignment(&Alinear);
&Obj_Doc.add(&Obj_Parrafo);


/* Como último paso es cerrar el documento */
&Obj_Doc.close();

Listo, ya tenemos listo el documento, ahora tendríamos que moverlo, mostrarlo y/o guardarlo, mandarlo por correo, etc ... 

Aquí solo mostraré como moverlo a una ubicación de FTP y mostrar el archivo


/* Obtiene el archivo desde la ubicación donde esta el application server y lo manda a otra ubicación, en este caso de FTP */
&salida = PutAttachment(URL.MiURL, "/psmysite/" | &MyNewFile, &ambiente | "/" | &MyFile);


/* Muestra el archivo desde la ubicación de FTP */
&salida = ViewAttachment(URL.MiURL, "/psmysite/" | &MyNewFile, &MyNewFile, True);

/* Eliminamos el archivo copiado después de haberlo mostrado*/
&salida = DeleteAttachment(URL.MiURL, "/psmysite/" | &MyNewFile);



sábado, 14 de julio de 2012

ROWNUM en MS ACCESS

Buscando cómo obtener en ACCESS el número de registro que estoy obteniendo en una consulta por SQL, no encontré ninguna función que me lo dé. El concepto de ROWNUM es creo solo para ORACLE, pero para MS ACCESS debería de haber algo similar ... no lo encontré.

Pero por SQL lo puedo obtener. Suponiendo que tengo la siguiente tabla:




Y deseamos obtener el Id del empleado, nombre, apellido y dirección, de todos los empleados de USA, pero queremos que vayan numerados.











Para esto utilizamos la siguiente sentencia SQL:


SELECT   a.employeeid,
         a.firstname,
         a.lastname,
         a.address,
         (SELECT   COUNT ( * ) + 1
            FROM   employees b
           WHERE   b.country = 'USA' AND b.employeeid < a.employeeid) as ROWID
  FROM   employees a
 WHERE   a.country = 'USA'



Revisen también esta posibilidad de hacerlo:  ROWNUM en ACCESS


viernes, 6 de julio de 2012

VisData

Este programa ya es conocido, puedes acceder a diferentes bases de datos, incluso teniendo controladores de ODBC, prácticamente puedes entrar a cualquier base de datos.


Te permite editar propiedades de tablas, índices, creación de los mismos, consultas, etc..

Específicamente sobre Microsoft Access, puedes crear, modificar, reparar, comprimir, etc... prácticamente todas las herramientas que Ms Access trae para la administración de bases de datos.



Esta por demás comentar que se tendría un perfecto ejemplo de cómo acceder a bases de datos utilizando diferentes medios.

Descarga aquí el código fuente, la contraseña es: codificalo

Espero les sea de utilidad.

miércoles, 4 de julio de 2012

Envío de eMail

Con este programa podrás enviar correos electrónicos sin necesidad de usar tu cuenta de correo original, podrás usar cualquier cuenta de correo como Remitente y cualquier cuenta de correo como Destinatario. No es necesario que exista la cuenta de correo del Remitente.


Descarga aquí el código fuente. La contraseña es: codificalo

Espero les sea de utilidad.


lunes, 25 de junio de 2012

Editor de Texto

Bueno, esta es una aplicación con varias funciones que pueden ser tomadas y reutilizadas en otros programas. Es un editor de texto, sencillo pero con algunas particularidades que pueden ser interesantes



Descarga aquí el código fuente. La contraseña es: codificalo

Espero les sea de utilidad.

jueves, 21 de junio de 2012

Navegador WEB


Crea tu Propio Navegador WEB


Con este código podrás hacer tu propio navegador Web, dándole la apariencia que más te guste y sin problemas de complementos que se te instalen solos y demás.

Tan solo como a ti más te guste, e incluso permitiéndote añadirle las funciones que necesites

Descarga aquí el código fuente. La contraseña para abrirlo es: codificalo


Espero te se de utilidad.

lunes, 18 de junio de 2012

PING y monitoreo


Realizar PING y monitoreo de conexión de red de un Equipo


Este programa realiza peticiones de PING a una dirección IP determinada, pudiéndole modificar el tamaño del paquete de datos.


Es un programa sencillo; en el número 1 mostrado en la imagen, se pone la dirección IP a la cuál le queremos dar el ping. A la derecha aparece el botón que dice Realizar Ping, con ésto, en la parte derecha aparecen los resultados de 1 solo ping.

En la sección de abajo a la izquierda (2) podemos realizar un ping cíclico, definiéndole los segundos entre 1 ping y el siguiente (3). Cuando el programa detecta que ya no tiene conexión envía a la pantalla un mensaje advirtiendo de la desconexión.

Esto nos puede servir para saber si un equipo se esta saliendo de la red, al igual que se podría hacer en una consola de DOS, pero aquí manda un mensaje en pantalla, de forma que el programa puede estar corriendo minimizado y cuando encuentre que ya no responde el equipo manda el aviso.

Podrán hacerle las modificaciones necesarias para adecuarlo a lo que necesitan.

Descarga aquí el código fuente. La contraseña para abrirlo es: codificalo.

Espero les sea de utilidad.

De Números a Letras


Pasar de Números a Letras


Bueno, éste código es de mucha utilidad cuando alguien nos pide hacer impresiones de cheques o cualquier otro documento en donde es necesario poner en texto alguna cifra.

El programa esta muy sencillo, solo consta de un TextBox en donde espera la cantidad en número, con el botón te pasa la lectura al Label de abajo.


Descarga aquí el archivo con el código, la contraseña para abrirlo es: codificalo

Llega hasta el número 999,999,999.99  Ustedes ya podrán hacerle las modificaciones necesarias si lo requieren para cantidades mayores.

Espero les sea de utilidad.

Translate