cgprmt022 (actualizacion de tasa mensual, cgtb00084; la usa edprrp116): - La fuente era la version de EXTERIOR, donde vetb00060/vetb00061 estan invertidas respecto a marmotech: el combo de moneda ahora sale de vetb00061 y los tipos de cliente de vetb00060. - SELECT INTO tenia 5 columnas para 4 variables. - Se quita la segunda escritura a marmotech.dbo.cgtb00084 (en marmotech es la misma tabla). - cgfmmt022.4fd: formulario de EXTERIOR (campo Replicar y tabla de tipos de cliente); el de MARMOTECH (2022) no tenia esos campos (-1102). mbsERP.4pw: se quita la aplicacion cgprmt037 y sus formularios cgfmmt037/cgfmwd006 (solo los usaba ese programa). Pertenece al proyecto EXTERIOR (sistema de tablas de la BD exterior, aun no iniciado); las fuentes quedan en cgdir. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
181 lines
6.8 KiB
Plaintext
181 lines
6.8 KiB
Plaintext
{
|
|
|
|
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 |