Merge de main (ipprrp013/014/046/053) con conflictos resueltos: - mbsERP.4pw: ipprrp014 conserva ambos 4rp y su 4fd. - bin/ipprrp014.4rp: columnas MARGEN/CLASIF. + titulo IPPRRP014. Programas agregados a mbsERP.4pw (53 compilan y enlazan con fgl602): - CONTABILIDAD GENERAL, ACTIVOS FIJOS, REPUESTOS; grupos nuevos TESORERIA, CHEQUES e INFORMATICA (segprmt001 = seguridad2.0/segprmt0001.4gl). - irdir copiado de 3.20 PROYECTOS/irdir a PROYECTO/irdir; helpers de PROYECTOS/otrodir en FUNCIONES_IR (departamento -> irdepartamento.4gl). - Fuentes mas nuevos de 3.20: edprrp118, edprrp080, acprrp010, cgprmt022. - FUNCIONES: GeneraEntradaDiario.4gl a la version 3.20 + costoLiquidacion.4gl. - Ajustes G6: existe duplicado en irprgb000, fakeData de 22 campos y answer2 en irprmt036/020 (ApiMaintainC), selectOutputSimple en irprcs008, schemas de forms a smarmotech, referencia declarada en cgprmt005. - cgprmt005 sigue sin enlazar: requiere funciones de EXTERIOR. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
187 lines
7.1 KiB
Plaintext
187 lines
7.1 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
|
|
|
|
CONNECT to "marmotech" 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
|
|
SELECT DISTINCT a.tipo_cliente FROM vetb00061 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,a.tasa
|
|
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
|
|
|
|
|
|
# PARA LA BASE DE DATOS MARMOTECH
|
|
EXECUTE selecciona USING mtasa.ano,mtasa.mes,mtasa.ventas,clientes[i].tipo_cliente1
|
|
|
|
IF STATUS = NOTFOUND THEN
|
|
IF clientes[i].tipo_cliente1 IS NOT NULL THEN
|
|
EXECUTE adicionar USING mtasa.ano,mtasa.mes,clientes[i].tipo_cliente1,mtasa.ventas,mtasa.tasa
|
|
END IF
|
|
ELSE
|
|
EXECUTE actual USING mtasa.tasa,mtasa.ano,mtasa.mes,mtasa.ventas,clientes[i].tipo_cliente1
|
|
END IF
|
|
|
|
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 vetb00060 a
|
|
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 |