Ir al contenido principal

Como Programar en Progress 4gl, Leer archivo csv generar reporte y enviarlo por correo

Hola buen día amigos:


Esta semana me gustaría platicarles de un lenguaje que se llama Progress 4gl, es parte de los conocidos lenguajes de cuarta generación que son del año 1970 al 1980 que sobretodo están enfocados a lenguajes de bases de datos, he tenido la oportunidad de trabajar con Informix 4gl, Progress 4gl y un poco de ABAP que es también 4gl y es lenguaje en que se programa SAP.


La idea de este lenguaje es poder extraer de manera sencilla la información de bases de datos de negocios, por lo que su sintaxis es simple. 

Las palabras reservadas, sintaxis y ejemplos del lenguaje lo pueden encontrar en https://www.progress.com/documentation,

Veamos un ejemplo:


Objetivo del programa:


Leer un archivo csv de entrada de datos de números de parte, extraer de la base de datos del ERP de QAD, la descripción y la cantidad total de inventario, enviar los datos a un archivo y enviar por correo el reporte.

En este programa les voy a dar un consejo, las palabras reservadas o que son propias de cada lenguaje escribanlo en mayúsculas para que en caso de revisar su código después sea mas rápido de leer.


Primera parte definir variables


Los comentarios, que es el código que no queremos que considere el programa va entre /*cmmts */

/*Definición de variables*/
DEF VAR i              AS CHARACTER NO-UNDO.
DEF VAR vc-desc     AS CHARACTER NO-UNDO.
DEF VAR vc-subject AS CHARACTER NO-UNDO. 
DEF VAR lvc-email  AS CHARACTER NO-UNDO.
DEF VAR vd-qty      AS DECIMAL      NO-UNDO.
DEF VAR lvc-ofile    AS CHARACTER NO-UNDO INITIAL "/home/telqond/file_out.csv".
DEF VAR lvc-file  AS CHARACTER NO-UNDO INITIAL "DepreFA.csv".
DEF STREAM s-excel.  

/*area de librerias*/

 {us/mf/mfdtitle.i}

/*inicio del programa*/ 

OUTPUT STREAM s-excel TO VALUE(lvc-ofile) PAGE-SIZE 0.    
INPUT FROM VALUE(lvc-file).
    REPEAT:
    IMPORT DELIMITER "," i.
    vc-desc = "".
    /*buscar decripcion del item*/
    FOR FIRST pt_mstr WHERE pt_domain = global_domain 
                                   AND pt_part      = i NO-LOCK:
          vc-desc = pt_desc1 + pt_desc2.
    END.
    /*buscar inventario*/
   vd-qty = 0.
    FOR EACH in_mstr WHERE in_domain = global_domain 
                                    AND in_part      = i NO-LOCK:
          vd-qty = vd-qty + + in_qty_oh + in_qty_nonet .
    END.

    PUT STREAM s-excel UNFORMATTED  i  ","

           vc-desc ","
           vd-qty   ","
           SKIP.
  END. /*repeat*/
INPUT CLOSE.
OUTPUT STREAM s-excel CLOSE. 

lvc-email = "programacionparatodos@gamil.com".

vc-subject  = "test".

IF SEARCH(lvc-ofile) <> ? THEN DO:
   OS-COMMAND SILENT uuencode
   VALUE(lvc-ofile) VALUE(lvc-ofile)
   mailx -s value('"' + vc-subject + '" ' + TRIM(lvc-email)).
   DISPLAY "reporte enviado".
END.


Hay una instrucción que es muy poderosa y es el invocar comando del sistema operativo OS-COMMAND SILENT, donde le pasamos como entrada los comandos y parámetros en este caso el comando fue mailx, que nos permite enviar correos electrónicos y adjuntar archivos. 

Este programa no tiene ninguna salida a pantalla, ni tiene una pantalla para ingresar datos, pero si se fuera necesario se adiciona y de igual forma podemos agregar en la lista de crontab su ejecución como una tarea programada.


Como pueden ver no es un programa muy largo , las palabras reservadas son parecidas hablar ingles, pueden llamar a comandos del sistema operativo, pueden hacer búsquedas de datos de manera ágil, el motor de la base de datos en bueno.

Les comparto una pagina que tiene más información acerca de las funciones de Progress

https://progress-4gl.programmingpedia.net/

Espero les haya gustado este post y nos compartan, saludos y espero se animen a crear sus propios programas. 

Otros ejemplos en este blog de Progress 4gl

Comentarios

Entradas más populares de este blog

Graficar funciones en Python con dataframes

Bienvenidos a un nuevo post, en esta semana, en esta ocasión les quiero platicar acerca de una librería en Python que se llama  matplotlib  que nos sirve para gráfica funciones de  matemáticas. Habitualmente en Python existen muchas librerías, lo que hay que hacer es primero investigar si ya existe alguna que nos ayude y entenderla antes de inventar el hilo negro, en mi caso encontré la librería  Matplotlib Para instalar deben utilizar el comando PIP en 2.7 Instalando en Python 3.7 Si tienen Python 2.7 deben realizar la ejecución de estos 2 comandos desde consola python -m pip install -U pip python -m pip install -U matplotlib Aunque lo más recomendable es utilizar la versión 3.7 o superior de Python. Programa para graficar en Python import matplotlib.pyplot as plt import numpy as np import math as mt def move_spines():     """Esta funcion divide pone al eje y en el valor      0 de x para dividir claramente los valores positivos y     negativos.&quo

Ejemplo Macro en Word

Hola: ¿Sabían que no solo en Excel pueden hacer Macros?  ¡¡¡También en Outlook, Word, Power Point,Access  es posible hacer Macros!!!  ☺️ Ya que Word, Excel, Power Point,Access son de familia Microsoft y Visual Basic también es que podemos programar nuestras macros en esta paquetería. Como hemos visto antes, para poder programar nuestras macros, necesitamos primero configurar la Barra de tareas de Developer o Desarrollador Seleccionan el Menu File>Options>Customize Ribbon o en Español Archivo>Opciones>barra de tareas Despues la parte de seguridad de las macros Menu File>Options>Trus Center o Archivo>Opciones>Centro de Seguridad y marcamos como se ve en la imagen, la cuarta opción y el combo Ejemplo Vamos hacer un ejemplo donde, tengamos que generar varios diplomas de fin de curso, pero con una lista de Nombres , entonces vamos a crear un nuevo archivo en Word y le vamos a guardar como tipo Macro  Tenemos una plantill

Ejemplo Python para leer imagen y transformarla en una matriz

Como hemos visto en otros post, Python nos permite hacer programas de manera más rápida, en esta ocasión quiero compartirles un ejemplo para leer un archivo de imagen y como convertirlo en una matriz o un arreglo. Aplicaciones Poder hacer ingeniería de datos, es decir poder convertir una misma imagen en diferentes todos y utilizarlos para machine learning para reconocimiento de gatos, para ello hay que mostrar muchas imágenes a nuestro modelo es decir entrenarlo, para ello hay que colocarle imágenes claras y imagenes que no sean tan claras por ejemplo, se pone la imagen original y se agrega "ruido" para que se vea en rojos, grises, verdes. Se pudo utilizar para un mapa , para poder ver datos a detalle Se puede aplicar para manipular imágenes, por ejemplo agregar efectos  Seguramente a ustedes se les pueden ocurrir más aplicaciones Les comparto el ejemplo de como hacerlo en Jupiter y para hacer el ejemplo voy a utilizar el logo del blog es una imagen de 500x500 pixeles Los Pas