Files
MBS/PROYECTO/cgdir/cgprmt022.4gl
T
jsotoandClaude Opus 5.5 f363390589 JSOTO cgprmt022 adaptado a MARMOTECH y cgprmt037 fuera del proyecto MBS
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>
2026-10-16 17:05:01 -04:00

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