{ PROGRAMA : cgprmt022 OBJETIVO : Administrar las tasas mensuales FECHA CREACION: Agosto 7, 2018 DESARROLLADO POR: ING. JUAN SOTO } GLOBALS "cgprgb000.4gl" DEFINE pano,pmes,pventas INT, ptasa DEC(8,2), preplica VARCHAR(2) MAIN DEFER INTERRUPT CALL STARTLOG("CGPRMT021.TXT") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave -- G6: "marmotech" no existe en el fglprofile (-6366); el binario de produccion (E:\MARMOTECH\BIN320 = EXTERIOR) conecta a smarmotech CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave CALL cgprmt022() END MAIN FUNCTION cgprmt022() DEFINE mtasa RECORD ano SMALLINT, mes SMALLINT, ventas SMALLINT, tasa DEC(8,2) END RECORD, actualiza,selec,inserta STRING, i INT, clientes DYNAMIC ARRAY OF RECORD tipo_cliente1 INT, tasa1 DEC(12,2) END RECORD, replica VARCHAR(2) OPEN WINDOW w1 WITH FORM "cgfmmt022" DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME mtasa.*,replica BEFORE INPUT CALL cventas() LET mtasa.ano = YEAR(TODAY) LET mtasa.mes = MONTH(TODAY)-1 DISPLAY BY NAME mtasa.ano,mtasa.mes LET selec = "SELECT DISTINCT a.ano FROM marmotech.dbo.cgtb00084 a WHERE a.ano = ? AND a.mes = ? AND a.ventas = ? AND a.tipo_cliente = ?" PREPARE selecciona FROM selec LET actualiza = "UPDATE marmotech.dbo.cgtb00084 set tasa = ? WHERE ano = ? and mes = ? and ventas =? and tipo_cliente = ?" PREPARE actual FROM actualiza LET inserta = "INSERT INTO marmotech.dbo.cgtb00084 (ano,mes,tipo_cliente,ventas,tasa) values ", " (?,?,?,?,?)" PREPARE adicionar FROM inserta ON CHANGE tasa DECLARE busca_tipos CURSOR for -- En marmotech vetb00060 = tipo_cliente x moneda (en EXTERIOR es al reves: vetb00061) SELECT DISTINCT a.tipo_cliente FROM vetb00060 a WHERE a.ventas = mtasa.ventas AND a.tipo_cliente > 14 LET i =1 FOREACH busca_tipos INTO clientes[i].* LET clientes[i].tasa1=mtasa.tasa LET i = i + 1 END FOREACH IF i=1 THEN CALL fgl_winmessage("INFO","COMBINACION TIPO CLIENTE Y MONEDA ESTAN ERRADOS","INFO") NEXT FIELD ventas END IF END INPUT DISPLAY ARRAY clientes TO sclientes.* ON ACTION actualizar ATTRIBUTE(TEXT="Actualiza") IF fgl_winquestion("Actualiza","Estas seguro de Actualizar la tasa?","No","Yes|No","question",0) = "Yes" THEN FOR i = 1 TO clientes.getLength() IF clientes[i].tipo_cliente1 IS NOT NULL THEN IF clientes[i].tasa1 IS NULL THEN CALL msg(16) NEXT FIELD tasa END IF SELECT DISTINCT a.ano,a.mes,a.ventas,a.tipo_cliente INTO mtasa.ano,mtasa.mes,mtasa.ventas,clientes[i].tipo_cliente1 FROM cgtb00084 a WHERE a.ano = mtasa.ano AND a.mes = mtasa.mes AND a.ventas = mtasa.ventas AND a.tipo_cliente = clientes[i].tipo_cliente1 IF STATUS <> NOTFOUND THEN DISPLAY BY NAME mtasa.* UPDATE cgtb00084 SET cgtb00084.tasa = mtasa.tasa, us_mod = usuarios, fech_mod = getdate() WHERE cgtb00084.ano = mtasa.ano AND cgtb00084.mes = mtasa.mes AND cgtb00084.ventas = mtasa.ventas AND cgtb00084.tipo_cliente = clientes[i].tipo_cliente1 ELSE INSERT INTO cgtb00084 (ano,mes,ventas,tipo_cliente,tasa,us_crea,fech_crea) VALUES (mtasa.ano,mtasa.mes,mtasa.ventas,clientes[i].tipo_cliente1,mtasa.tasa,usuarios,getdate()) END IF -- (la version EXTERIOR repetia aqui el INSERT/UPDATE en marmotech.dbo.cgtb00084; -- conectado a marmotech es la misma tabla: se quito la doble escritura) END IF END FOR LET pano = mtasa.ano LET pmes = mtasa.mes LET pventas = mtasa.ventas LET ptasa = mtasa.tasa LET preplica = replica IF replica = "SI" THEN CALL replicar() END IF CALL insertalog() CALL fgl_winmessage("INFO","ACTUALIZACION EXITOSA","INFO") END IF END DISPLAY ON ACTION CANCEL CALL fgl_winmessage("INFO","OPERACION CANCELADA","INFO") RETURN END DIALOG CLOSE WINDOW w1 END FUNCTION FUNCTION cventas() DEFINE kventas SMALLINT, dventas CHAR(30) DEFINE pventas ui.ComboBox LET pventas = ui.combobox.forname("formonly.ventas") DECLARE bventas CURSOR FOR SELECT a.ventas,a.descripcion FROM vetb00061 a -- monedas en marmotech CALL pventas.clear() FOREACH bventas INTO kventas,dventas CALL pventas.additem(kventas,dventas) END FOREACH END FUNCTION FUNCTION replicar() DEFINE replica,selecta,actualizacion STRING, mes_falta,k,mesinsert INT LET actualizacion = "UPDATE marmotech.dbo.cgtb00084 set tasa = ? WHERE ano = ? AND mes = ? AND ventas = ?" PREPARE actualizacionxe FROM actualizacion LET selecta = "SELECT DISTINCT a.ano FROM marmotech.dbo.cgtb00084 a WHERE a.ano = ? AND a.mes = ? AND a.ventas = ?" PREPARE selecciona FROM selecta LET replica = "INSERT INTO marmotech.dbo.cgtb00084 (ano,mes,ventas,tipo_cliente,tasa) SELECT a.ano,?,a.ventas,a.tipo_cliente,a.tasa FROM cgtb00084 a WHERE a.ano = ? AND a.mes = ? AND a.ventas = ? " PREPARE duplica FROM replica LET mes_falta = 12 - pmes LET mesinsert = pmes + 1 FOR k = 1 TO mes_falta EXECUTE selecciona USING pano,mesinsert,pventas IF STATUS = NOTFOUND THEN EXECUTE duplica USING mesinsert,pano,pmes,pventas ELSE EXECUTE actualizacionxe USING ptasa,pano,mesinsert,pventas END IF LET mesinsert = mesinsert + 1 END FOR END FUNCTION FUNCTION insertaLog() INSERT INTO cgtb00084_log VALUES (getdate(),usuarios,preplica) END FUNCTION