SCHEMA smarmotech DEFINE usuario, clave, answer STRING DEFINE tasas RECORD idTasa INT, fecha DATE, tasa DEC(12, 2), ventas SMALLINT, us_crea VARCHAR(50), fech_crea DATE END RECORD DEFINE Dtasas DYNAMIC ARRAY OF RECORD --Display Tasas idTasa INT, fecha DATE, tasa DEC(12, 2), ventas STRING, us_crea VARCHAR(50), fech_crea DATE END RECORD DEFINE ventasCont DYNAMIC ARRAY OF RECORD idTasa INT, ventas SMALLINT END RECORD MAIN --login y programa CALL ARG_VAL(1) RETURNING usuario CALL ARG_VAL(2) RETURNING clave CONNECT TO "marmotech" AS "EXTERIOR" USER usuario USING clave CONNECT TO "smarmotech" AS "MARMOTECH" USER usuario USING clave CALL veprmt112() END MAIN FUNCTION veprmt112() OPEN WINDOW w1 WITH FORM 'vefmwd112' CALL fgl_settitle("Gestion tasa diaria") CALL buscarDatos() RETURNING Dtasas DIALOG ATTRIBUTE(UNBUFFERED) DISPLAY ARRAY Dtasas TO Drecord.* ON ACTION agregar ATTRIBUTES(TEXT = "Agregar", IMAGE = "fa-address-book-o") INITIALIZE tasas.tasa, tasas.ventas TO NULL LET tasas.fecha = CURRENT YEAR TO DAY INPUT BY NAME tasas.* ATTRIBUTES(WITHOUT DEFAULTS) BEFORE FIELD fecha NEXT FIELD tasa --Para que al agregar la tasa del día --No se pueda modificar la fecha actual AFTER INPUT CALL Save() ON ACTION CANCEL ATTRIBUTES(TEXT = "Salir", IMAGE = "quit") CALL msg(2) EXIT INPUT END INPUT ON ACTION salir ATTRIBUTES(TEXT = "Salir", IMAGE = "quit") EXIT PROGRAM BEFORE ROW CALL getdata(arr_curr()) CALL buscarDatos() RETURNING Dtasas IF tasas.fecha < CURRENT YEAR TO DAY THEN --si la fecha del registro --seleccionado es previa a DISPLAY BY NAME tasas.* --la fecha actual entonces --No se puede modificar ELSE INPUT BY NAME tasas.* ATTRIBUTES(WITHOUT DEFAULTS) AFTER INPUT BEGIN WORK UPDATE vetb00112 SET tasa = tasas.tasa, ventas = tasas.ventas, us_mod = usuario, fech_mod = GETDATE() WHERE vetb00112.idTasa = tasas.idTasa INSERT INTO vetb00112_log( idTasa, fecha, tasa, ventas, us_crea, fech_crea, us_mod, fech_mod, Mov) VALUES(tasas.idTasa, tasas.fecha, tasas.tasa, tasas.ventas, tasas.us_crea, tasas.fech_crea, usuario, GETDATE(), 'Updated') SET CONNECTION "EXTERIOR" UPDATE vetb00060 SET tasa = Tasas.tasa WHERE ventas = tasas.ventas SET CONNECTION "MARMOTECH" UPDATE vetb00061 SET tasa = Tasas.tasa WHERE ventas = tasas.ventas COMMIT WORK CALL msg(13) CALL buscarDatos() RETURNING Dtasas ON ACTION CANCEL ATTRIBUTES(TEXT = "Salir", IMAGE = "exit") CALL msg(2) EXIT INPUT ON ACTION Eliminar ATTRIBUTES(TEXT = "Eliminar", IMAGE = "delete") LET answer = fgl_winquestion( "Eliminar registro", "ESTA SEGURO QUE DESEA ELIMINAR ESTE REGISTRO?", "YES", "YES|NO", "QUESTION", 0) IF answer = 'YES' THEN BEGIN WORK INSERT INTO vetb00112_log( idTasa, fecha, tasa, ventas, us_crea, fech_crea, us_mod, fech_mod, Mov) VALUES(tasas.idTasa, tasas.fecha, tasas.tasa, tasas.ventas, tasas.us_crea, tasas.fech_crea, usuario, GETDATE(), 'Deleted') DELETE FROM vetb00112 WHERE idTasa = tasas.idTasa COMMIT WORK CALL msg(39) INITIALIZE Dtasas TO NULL CALL buscarDatos() RETURNING Dtasas EXIT INPUT ELSE CALL msg(2) END IF END INPUT END IF END DISPLAY END DIALOG END FUNCTION FUNCTION buscarDatos() --Obteniendo datos para el array de Tasas DEFINE idx INT DECLARE buscar CURSOR FOR SELECT a.idTasa, a.fecha, a.tasa, '(' + CAST(a.ventas AS CHAR(1)) + ')' + ' ' + rtrim(b.descripcion), a.us_crea, a.fech_crea FROM vetb00112 a LEFT JOIN vetb00061 b ON a.ventas = b.ventas LET idx = 1 FOREACH buscar INTO Dtasas[idx].* LET idx = idx + 1 END FOREACH DECLARE buscar2 CURSOR FOR SELECT idTasa, ventas FROM vetb00112 LET idx = 1 FOREACH buscar2 INTO ventasCont[idx].* LET idx = idx + 1 END FOREACH RETURN Dtasas END FUNCTION FUNCTION getdata(i INT) --Obteniendo los datos de la tasa seleccionada IF i = 0 THEN INITIALIZE tasas.* TO NULL RETURN END IF SELECT idTasa, fecha, tasa, ventas, us_crea, fech_crea INTO tasas.* FROM vetb00112 WHERE vetb00112.idTasa = Dtasas[i].idTasa END FUNCTION FUNCTION load_cb (cb) DEFINE cb ui.ComboBox, cb_ventas SMALLINT, cb_desc VARCHAR(40) CALL cb.clear() DECLARE buscar3 CURSOR FOR SELECT ventas, '(' + CAST(ventas AS CHAR(1)) + ')' + ' ' + rtrim(descripcion) FROM vetb00061 WHENEVER ERROR CONTINUE FOREACH buscar3 INTO cb_ventas, cb_desc WHENEVER ERROR STOP IF SQLCA.SQLCODE = 0 THEN CALL cb.addItem(cb_ventas, cb_desc) END IF END FOREACH END FUNCTION FUNCTION Save() DEFINE i INT DEFINE flag BOOLEAN LET flag = TRUE FOR i = 1 TO Dtasas.getLength() IF tasas.fecha = Dtasas[i].fecha THEN IF tasas.ventas = ventasCont[i].ventas THEN LET flag = FALSE END IF END IF END FOR IF flag THEN BEGIN WORK INSERT INTO vetb00112( fecha, tasa, ventas, us_crea, fech_crea) VALUES(tasas.fecha, tasas.tasa, tasas.ventas, usuario, GETDATE()) INSERT INTO vetb00112_log( fecha, tasa, ventas, us_crea, fech_crea, Mov) VALUES(tasas.fecha, tasas.tasa, tasas.ventas, usuario, GETDATE(), 'Inserted') SET CONNECTION "EXTERIOR" UPDATE vetb00060 SET tasa = tasas.tasa WHERE ventas = tasas.ventas SET CONNECTION "MARMOTECH" UPDATE vetb00061 SET tasa = tasas.tasa WHERE ventas = tasas.ventas COMMIT WORK CALL msg(1) CALL buscarDatos() RETURNING Dtasas ELSE CALL msg(12) END IF END FUNCTION