Lenguaje Progress 4gl como utilizar tablas temporales

Share this Post Share to Facebook Share to Twitter Email This Pin This
Bienvenidos a este blog, en esta publicación veremos como crear una tabla temporal y colocar indices con el lenguaje Progress 4gl.

Primero veamos un ejemplo  en que ocasiones podríamos utilizar una tabla temporal en general no solo Progress:

  • Cuando hacemos un reporte normalmente vamos recuperando información de diferentes tablas de una base de datos y para ir guardando las filas con la información que necesitamos en muchas ocasiones necesitamos tener una tabla nueva donde ir almacenando las nuevas filas.
  • Si vamos a realizar más cálculos con los datos que obtenemos de diferentes tablas.
  • Queremos utilizarlo en reportes como Crystal Reports o en plantillas diferentes.
  • Cuando vamos a procesar el contenido de los datos, cuando vamos a realizar segmentaciones de los datos pero no lo vamos almacenar en una tabla física de base datos porque no se tarda mucho la generación de la información y no es una información que se genere con mucha frecuencia. 
La definición general de Progress es la siguiente en la imagen


En general están son las ventajas y desventajas de utilizar estas tablas temporales


Ahora veamos un ejemplo en Progress: quiero generar un programa que me lea un archivo de entrada y que con la tabla temporal en la que guardemos el archivo de entrada lo convirtamos en una carga CIM en QAD para crear ubicaciones en el módulo de activos fijos.

{us/mf/mfdtitle.i}
DEF VAR vc-in-file AS CHAR NO-UNDO.
DEF VAR v-totrec   AS INTEGER NO-UNDO.
DEF VAR v-toterr   AS INTEGER NO-UNDO. 
DEF VAR lv-outfile AS CHAR NO-UNDO. 
DEF VAR lv-cimfile AS CHAR NO-UNDO. 
DEF VAR v-err      AS LOGICAL NO-UNDO. 
/*******TABLA TEMPORAL**************/
DEF TEMP-TABLE tabla_datos no-undo
  field tt_loc   like ld_part
  field tt_des   like ld_site    
  field tt_ent   like ld_loc
  field tt_sub   like ld_lot
  field tt_cc    like ld_ref
  FIELD tt-error  as   character
INDEX ttDataCim
  tt_loc
  tt_des
  tt_ent
  tt_sub
  tt_cc.
/*******TABLA TEMPORAL**************/  
DEF FRAME a           
  vc-in-file   COLON 21 LABEL "File to charge" FORMAT "X(30)"
WITH WIDTH 80 SIDE-LABELS.  

UPDATE vc-in-file WITH FRAME a.    
  
INPUT FROM VALUE(vc-in-file).
  REPEAT:
    CREATE  tabla_datos.
    IMPORT DELIMITER ","  tabla_datos EXCEPT tt-error  .
  END. 
INPUT CLOSE.

FOR EACH tabla_datos  
    WHERE tt_loc  <> ""
    NO-LOCK
    BREAK BY tt_loc
          BY tt_des
          BY tt_ent
          BY tt_sub
          BY tt_cc.
    IF tt-error = "" THEN DO:
      
      ASSIGN
        v-totrec   = v-totrec + 1
        lv-outfile = tt_loc + ".cim"
        lv-cimfile =  tt_loc + ".log".
      
      OUTPUT TO VALUE(lv-outfile).
        
        
PUT UNFORMAT '"' tt_loc '" ' SKIP.
IF tt_des <> '' THEN 
           put unformat '"' tt_des '" ' .
ELSE 
   put unformat '-' .
IF tt_ent <> '' THEN 
           put unformat '"' tt_ent '" ' .
ELSE 
   put unformat '-' .
IF tt_sub <> '' THEN 
           put unformat '"' tt_sub '" ' .
ELSE 
   put unformat '-' .              
   
IF tt_cc <> '' THEN 
           put unformat '"' tt_cc '" ' skip.
ELSE 
   put unformat '-' skip.
        
PUT UNFORMAT '-' SKIP.
        PUT UNFORMAT '.' SKIP.
        PUT UNFORMAT '.' SKIP.
        
      OUTPUT CLOSE.
      
      DO TRANSACTION:  
        
        OUTPUT TO VALUE(lv-cimfile). 
          input from value(lv-outfile). 
            batchrun = true.        
              {us/bbi/gprun.i ""falcmt.p""}
            batchrun = false.   
            pause 0 before-hide.
          input close. 
        output close.  
        
        v-err = false. 
        
        if v-err then do: 
          v-toterr = v-toterr + 1.  
          undo, next. 
        END. 
        
      END. 
    END. 
END.
DISPLAY  "TOTAL errores" v-toterr.


Espero les haya gustado y servido esta publicación, comparta en sus redes sociales y también pueden seguirnos en este blog o en Facebook https://www.facebook.com/Programacionparatodosmsg/

Macros en Google Sheets

Share this Post Share to Facebook Share to Twitter Email This Pin This

Google tiene  una versión gratuita para Hojas de cálculo mejor conocidas por el software más utilizado del mundo Excel de Microsoft, en días anteriores tenía que crear una plantilla en Google Sheets pero tenía que hacer lo mismo que hacía mi plantilla en Excel, solo que mi plantilla tiene macros y de ahí el tema de hoy: explicarles como es que pueden incorporar macros en Google Sheets.


  1. Primer paso entender la lógica de mi programa, cuales eran los pasos en visual basic.
  2. Pensé que lo mas fácil era hacer una traducción del código de mi macro al código de Google Sheet, así que abrí mi macro de Excel y comencé buscar como se llamaban las instrucciones y buscar en Google la instrucción de equivalencia.
  3. Comenzar a probar cada línea que agregaba, para ver que hicieran la funcionalidad que yo quería.
  4. Mejorar la macro de Visual Basic.

El resultado final es 


Como nota adicional si quieres grabar sus vídeos como el que muestre, solo tienen que utilizar Power Point
https://support.microsoft.com/es-es/office/recortar-un-v%C3%ADdeo-1fc386f2-8404-43e8-9dbd-fee3a11a1d8f#:~:text=Para%20guardar%20una%20copia%20independiente,un%20nivel%20de%20compresi%C3%B3n%20adecuado.

El código que utilice

/** @OnlyCurrentDoc */


function Calcular_consolidado_periodo() {

 var vcperiodo =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Plantilla").getRange("M2").getValue();

  SpreadsheetApp.getUi().alert(vcperiodo);

 var vifilain = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen").getLastRow() ;

 var vifila = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen").getLastRow() ;

 var indcat = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Categorias").getLastRow() ;

 var vctotal = 0;

 var vifila2 = 3;

 var indicecat = 1; 

 var categoria = "";

 vifila = vifila + 1;

  

  do{

     categoria = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Categorias").getRange(indicecat, 1).getValue()

     SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen").getRange(vifila, 2).setValue(categoria);

     indicecat = indicecat + 1;

      vifila = vifila + 1;

  }while(indicecat < indcat);

  

  vifila = vifilain;

  vifila = vifila + 1;

  

  do {


     vifila2 = 3

     vctotal = 0

     

     do{

       if (SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Plantilla").getRange(vifila2, 5).getValue() == vcperiodo &&

           SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Plantilla").getRange(vifila2, 2).getValue() ==  

           SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen").getRange(vifila, 2).getValue())

       {

          var valor = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Plantilla").getRange(vifila2, 4).getValue();

          vctotal = vctotal + valor;

       }         

       vifila2 = vifila2 + 1

     }while (SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Plantilla").getRange(vifila2, 5).getValue() != "");

    

       SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen").getRange(vifila, 1).setValue(vcperiodo);

       SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen").getRange(vifila, 3).setValue(vctotal);

       

       vifila = vifila + 1 ;

} while (SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Resumen").getRange(vifila, 2).getValue() != "" );

  

};

El código de la Macro en Excel vs Google Sheets


Algunas ligas de las que me base para hacer mi plantilla en Google Sheet

El tema me parece muy interesante, porque también como veíamos en otro post previo TypeScript el nuevo lenguaje utilizado para programar macros online Typescript el sustituto de VB también esta basado en Javascript, cada vez veo más aplicaciones a este lenguaje.

Espero esta pagina les sea de utilidad, nos sigan, nos compartan en este blog o en la página de Facebook https://www.facebook.com/Programacionparatodosmsg/

Conferencias y foros de IT Latinoamerica

Share this Post Share to Facebook Share to Twitter Email This Pin This

En estos últimos meses que he tenido más tiempo en casa, he tenido oportunidad de asistir de manera virtual a varias conferencias y les quiero compartir cuales fueron para que puedan ver las sesiones grabadas o estén al pendiente de las próximas conferencias.

Vale mucho la pena escuchar este tipo de charlas, porque aprendes de temas nuevos, o experiencias de otras personas, o incluso involucrarte en nuevos proyectos, nuevas oportunidades de empleo o ser parte de alguna de las asociaciones o agrupaciones que promueven estos foros.


Nerdear.la

Me llego como publicidad en Facebook entre y vi las sesiones y se venían interesantes, me inscribí sin costo y fue del 20 al 24 de Octubre de 2020. Escuche las charlas y eran temas muy interesantes, por ejemplo como empezar a escribir en Ingles algún articulo o blog, espero pronto poder aplicar esos consejos y publicar algo aquí.

Estuvo organizada por sysarmy https://sysarmy.com/en/ desde Argentina.

https://nerdear.la/

Aparte de las charlas, hubo también talleres, actividades o concursos para ganar premios, un chat para poder hacer networking. Este foro se me hizo muy creativo porque parecía como si fuera un programa de televisión e iban haciendo la conexión a las actividades.


Devday4Women

Este foro me lo compartió una amiga https://devday4w.com/, fueron 2 días el 30 de Septiembre y 1 de Octubre fue un foro enfocado a mujeres que desarrollamos software, inscripción gratuita, fue organizado por Software Guru.


softwareguru

Regalaron un kit de inscripción, descuentos para poder inscribirte a cursos, charlas, propusieron unos reconocimientos y tu podías postular alguna mujer que pensaras que debía estar en las nominadas y durante el foro, podías votar al final de la conferencia presentaron a las ganadoras, muy padre propuesta y muy interesante conocer a las mujeres que ganaron la liga es https://devday4w.com/reconocimientos-sg4w/. Dieron constancia de participación si por lo menos asististe a 3 conferencias en vivo.

TalentNetwork

Esta organización tiene varios eventos al año, hay concursos , conferencias, talleres 

Talent Network republic Tv

Este año escuche las conferencias de Talent Land Latinoamérica del 9 al 12 de Noviembre, hubo 3 canales con temas específicos


https://talent-network.org/eventos-general/talent-land-latinoamerica/

Talent Hackathon con premios de hasta 100,000.00 MXN, las convocatorias ya están cerradas, pero para que lo tengan en la mira para el próximo año.

Del evento dieron constancias de participación.

AWS re:Invent


Es un evento de Amazon para presentar sus tecnologías en la nube AWS: Amazon WEB Services, es un evento gratuito, puedes agregar a tu calendario las charlas que te interesan son del 30 de Noviembre al 18 de Diciembre 2020, hay charlas en ingles y en español. 


En estos nuevos tiempos, donde la tecnología y las telecomunicaciones se han vuelto tan importantes y nos abren posibilidad a ir a eventos como estos, sin tener que desplazarnos, gratuitos y que pueden tomarse virtualmente, a mi me parece una gran oportunidad de compartir conocimiento.

Obvio en estas primeras ediciones hubo contratiempos, de audio, o de conexión o mas cosas, pero aún así de gran nivel los eventos, pero espero los sigan haciendo en esta modalidad.


Si ustedes conocen más de este tipo de eventos, por favor dejen sus comentarios para conocerlos.


Espero les haya gustado y servido esta publicación, comparta en sus redes sociales y también pueden seguirnos en este blog o en Facebook https://www.facebook.com/Programacionparatodosmsg/

¿Qué es Internet de las cosas o IoT? Ejemplos de IoT y el Internet del conocimiento

Share this Post Share to Facebook Share to Twitter Email This Pin This
En el post de hoy quiero explicarles que es el concepto de Internet de las Cosas o en ingles Internet of Things. Es un concepto que en lo personal comencé a escuchar hace unos 7 años en una platica que nos dio un compañero en el trabajo, lo que nos quiere decir Internet de las Cosas es que un dispositivo que no se necesariamente una computadora o laptop se conecta a la red del Internet y que por medio de una plataforma podemos interactuar con estos dispositivos.

Posiblemente hay en el mundo más dispositivos móviles conectados a Internet que número de habitantes del planeta, trate de buscar un dato para decirle pero varían en la información de 30 a 50 billones de dispositivos
Ahora les quiero preguntar ¿Qué se pude hacer con estos dispositivos conectados a internet? espero sea una pregunta que les ayude a pensar que dispositivos pueden serles de utilidad a ustedes o porque no a pensar en un nuevo proyecto, mientras yo les comparto algunas ventajas que puedes tener:
  • Almacenar la información en bases de datos 
  • Realizar análisis de estos datos y de acuerdo a cada interés explotar la información por ejemplo:
    • Un área de marketing sacara datos de genero, edades para saber quienes son los consumidores de la marca. 
    • El área de ingeniería puede preocuparse por saber la efectividad de las máquinas de producción. 
    • En el área de la salud saber cuando pedirle quizá a una persona que acuda a un hospital o recomendarle cambie de medicamentos. Esto ya no es ficción existe.
    • Este concepto se llama Internet del Comportamiento o IoB Internet of Behavior.
  • Tener información en tiempo real, en el momento que lo requieras puedes conocer el valor de algún sensor, ver como están tu familia en casa, enviar a tu medico las mediciones de nivel de azúcar para tu próxima este listo un reporte sin que tu tengas que anotar todo. 
  • Conocer a tus clientes que necesidades tienen y como mejorar sus vidas
Gartner nos dice que hay en promedio 4 dispositivos conectados por 1 persona

Ejemplos de IoT

Existen distintos dispositivos que se conectan a internet los mas comunes son: Celulares, tablets,  laptops, relojes, 

Pero también existen otros dispositivos que tienen conexión a internet en diferentes áreas de nuestra vida por ejemplo:
  • Un reloj inteligente 
Video de Apple

  • En los vehículos, como por ejemplo la nueva SUV eléctrica de Nissan Ariya
Video de Nissan

  • Una Bascula personal
Vídeo de weblogssl


  • En la agricultura también hay ya dispositivos conectados a Internet que ayudan a mejorar los procesos por ejemplo Jhon Deere
vídeo de Jhon Deere
 
  • En la industria también por ejemplo los robots de Kuka para la cuarta revolución 
Video de Kuka

  • En la medicina también lo hay por ejemplo camas inteligentes en Hospitales
Vídeo de Hiil-Rom


  • La seguridad en nuestras casas por medio de cámaras y sensores ya es una realidad y a precios no tan caros por ejemplo Xiaomi tiene una sección de sensores y camaras  https://xiaomi-mi.com/mi-smart-home/


  • En la cocina por supuesto que también existen varios dispositivos por ejemplo las licuadoras Vitamix
Vitamix


  • Otros ejemplos que nosotros mismos podemos programar son por medio de Arduino 
Arduino

Les comparto por ultimo un vídeo que vi de IBM acerca de IoT también les puede ayudar a conocer más acerca de una plataforma de manejo de estos dispositivos que es Watson y como empezar a incorporarlos en sus negocios o proyectos.
 
Vídeo de IBM 

Espero les haya gustado este post y nos comparta o sigan aquí o en Facebook https://www.facebook.com/Programacionparatodoscom


Ligas de Competencias, problemas, desafíos o retos de programación para resolver

Share this Post Share to Facebook Share to Twitter Email This Pin This
En este espacio me gusta invitarlos a empezar a programar o aprender a nuevos lenguajes de programación, hoy más que nunca se ha visto la necesidad de evolución digital o transformación digital.  Por lo que quiero compartirles en este post donde pueden encontrar ejercicios para empezar a programar porque como cualquier cosa en esta vida, la practica es lo que te va ayudar a mejorar tus habilidades de programación y empezar a resolver problemas.
Existen varias paginas donde plantean problemas de programación y que de acuerdo a los resultados de los programas de cada usuario te va una calificación y se van registrando rackings, o que te pueden dar retroalimentación de tus programas.


Hay otros que son concursos que proponen retos de programación por ejemplo:

En esta publicación veremos un reto o problema de programación de la pagina de UVA, para que puedan practicar su programación, les voy a explicar como lo hice desde cero.

Primer paso tener su cuenta en   https://onlinejudge.org/

problemas de computación

problemas de computación

Una ve creada su cuenta les llegara un correo (vea la carpeta de SPAM) para verificar la cuenta.
Ya dentro lo que vamos hacer es buscar que problemas hay para resolver

Después elijan uno de la lista


Al entrar en uno les mostrara la descripción del problema, les dirá cuales son los datos de entrada y cual debe ser la salida y les muestra un ejemplo de como poder probar su programa y el tiempo en que debe ejecutarse su programa. Las instrucciones están en Inglés.

problemas de computación

Una vez tengan el programa deben comenzar a realizar el análisis del problema. Este es el paso más importante de hacer cualquier programa, entender bien el requerimiento, cuales son los datos de entrada y cuales son los datos de salida esperados.
El problema que yo elegí dice que se van a recibir como entrada el numero de lados de la figura, las coordenadas de las equinas de 2 polígonos separados por espacios por ejemplo


Y al ver esto en un plano cartesiano se vería así, las primeras coordenadas son la figura en rojo y las segundas coordenadas son la figura en verde


Después nos dice calcula el área de todo menos en donde se unen las figuras y esto nos lo dicen textual Calcula el área de la función Exclusive OR 

Ahora debemos pensar como lo vamos a resolver, primero manualmente, por favor no traten de programar primero, es mucho mejor siempre pensar como hacerlo a mano, para poder comprobar los resultados que nos genere el programa.
Entonces para resolver el calculo de un área de esta forma recuerdo que es con formulas de Geometría la siguientes ligas, me gusta compartirles varias porque no siempre entendemos con una forma de explicar 


Ahora vamos a resolverlo a mano, primero calcular el área de todas las figuras y luego voy a restar el área de la parte en que se unen 

  • Área del Rectángulo es igual a 8 unidades
  • Área del Hexágono Irregular 6.5 unidades
  • Área del Triangulo que es la figura que se unen .5 unidades
  • Por lo que resultado es 13.50 esa es el área de la función XOR para ese ejemplo.

Realice el cálculo por medio de determinantes, les muestro mis hojas de mis cálculos





Ahora el siguiente paso es pensar en que lenguaje lo van a programar en mi caso seleccione Python 3.7 ahora hay que traducir en pasos o en un algoritmo lo que hice en papel.

  • Leer datos 2 líneas no mas 
  • Separar mis valores primero en una variable para saber cuantos lados tiene mi figura 
  • Mis siguientes campos en un arreglo por cada figura
  • Después realizar el calculo de área de la primer figura
  • realizar el calculo de área de la segunda figura
  • Obtener los puntos en que se interceptan
  • realizar el calculo del área in que se interceptan
  • Calcular el resultado final
  • Mostrar el resultado en el formato de cadena de largo de 8 con 5 números enteros o espacios y 2 decimales , el punto cuenta como el octavo carácter.

Después de probarlo vamos a subirlo a la página para ello presionamos el botón de submmit en la parte superior derecha y deben seleccionar el lenguaje que utilizaron para programar y copiar su programa o pueden subir el archivo. 



Les dirá que su código de envió
Después cuando los haya calificados los jueces les darán su calificación y verán en que parte del racking están, en mi caso este ejercicio aun no lo resuelvo al 100 pero esta muy entretenido. 



Espero que les haya gustado esta publicación a mi en lo personal me pareció muy entretenida y divertida, además de que es un ejemplo de como pueden aprender a programar ustedes mismo, la práctica les va ir ayudando a plantearse mejor los problemas y a desarrollar mejor o más rápido.

Programa en Python 

Les comparto parte de mi programa para que puedan empezar por ahi e irlo mejorando
lista = []
coordenadas = []
ciclos = 0
ciclos2 = 0
contador = 0
contador2 = 0
contador3 = 0
fig1 = ''
Operacion1 = 0
Operacion2 = 0
resultado = ''
Area1 = 0
Area2 = 0
while fig1 != "0" :
    fig1 = input()
    lista.append(fig1)
ciclos = len(lista) // 2
ciclos2 = ciclos * 2
print(ciclos2)
while contador < ciclos2:
     coordenadas = lista[contador].split(' ')
     coordenadas.append(coordenadas[1])
     coordenadas.append(coordenadas[2])
     contador2 = 1
     Operacion1 = 0
     Operacion2 = 0
     print(coordenadas)
     while contador2 < len(coordenadas) - 2:
           Operacion1 = Operacion1 + int(coordenadas[contador2]) * int(coordenadas[contador2 + 3])
           contador2 = contador2 + 2
     print('Operacion1', Operacion1)
     contador3 = len(coordenadas) - 2 
     while contador3 > 2:
            # print('contador3',contador3)
            Operacion2 = Operacion2 + int(coordenadas[contador3]) * int(coordenadas[contador3 - 1])
            contador3 = contador3 - 2 
     print('Operacion2', Operacion2)
     if (contador % 2) == 0:
        Area2 = (Operacion2 - Operacion1) / 2
     else:
        Area1 = (Operacion2 - Operacion1) / 2
     print('Area1', Area1)
     print('Area2', Area2)
     contador = contador + 1
     Area1 = 0
     Area2 = 0
     
Si ya eres un programador avanzado o te gusta plantear problemas también en esta pagina puedes subirlos o también puedes ser juez.

Espero les haya gustado esta publicación, nos compartan y pueden seguirnos aquí en el blog o en Facebook https://www.facebook.com/Programacionparatodosmsg/