Files
MBS/PROYECTO/cgdir/cgprmt021.4gl
T

261 lines
10 KiB
Plaintext

{
MODULO : cgprmt021
OBJETIVO : TRANSFERIR COSTOS STANDARES DE UN ANO A OTRO
FECHA DESARROLLO: 3/6/2016
DESARROLLADO POR: ING. JUAN SOTO
}
GLOBALS
DEFINE usuarios,clave VARCHAR(50),
opt1 VARCHAR(3)
END GLOBALS
MAIN
DEFER INTERRUPT
CALL STARTLOG("CGPRMT021.TXT")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CONNECT to "smarmotech" AS "MSSQL" USER usuarios USING clave
CALL cgprmt021()
END MAIN
FUNCTION cgprmt021()
DEFINE pano,pano_act,progreso,idx SMALLINT,
cuenta INT,
opcion VARCHAR(3),
pcosto RECORD
ano SMALLINT,
mes_ini CHAR(2),
mes_fin CHAR(2),
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
material DEC(18,5),
labor DEC(18,5),
gastos DEC(18,5),
ventas SMALLINT
END RECORD,
inventario VARCHAR(2),
selec STRING
OPEN WINDOW w1 WITH FORM "cgfmmt021"
INPUT BY NAME pano,inventario
BEFORE INPUT
LET pano = YEAR(TODAY)-1
LET cuenta = 0
LET pano_act = YEAR(TODAY)
AFTER FIELD inventario
IF inventario = "IP" THEN
SELECT DISTINCT a.ano FROM iptb00004 a WHERE a.ano = pano_act
IF STATUS <> NOTFOUND THEN
IF fgl_winquestion("INFO","COSTO EXISTE PARA ESTE ANO, DESEA ACTUALIZAR DE TODAS FORMAS?","NO","NO|YES","QUESTION",0) ="NO" THEN
EXIT PROGRAM
END IF
END IF
END IF
IF inventario = "IN" THEN
SELECT DISTINCT a.ano FROM intb00013 a WHERE a.ano = pano_act
IF STATUS <> NOTFOUND THEN
IF fgl_winquestion("INFO","COSTO EXISTE PARA ESTE ANO, DESEA ACTUALIZAR DE TODAS FORMAS?","NO","NO|YES","QUESTION",0) ="NO" THEN
EXIT PROGRAM
END IF
END IF
END IF
IF inventario = "IR" THEN
SELECT DISTINCT a.ano FROM irtb00013 a WHERE a.ano = pano_act
IF STATUS <> NOTFOUND THEN
IF fgl_winquestion("INFO","COSTO EXISTE PARA ESTE ANO, DESEA ACTUALIZAR DE TODAS FORMAS?","NO","NO|YES","QUESTION",0) ="NO" THEN
EXIT PROGRAM
END IF
END IF
END IF
IF inventario = "SM" THEN
SELECT DISTINCT a.ano FROM cttb00026 a WHERE a.ano = pano_act
IF STATUS <> NOTFOUND THEN
IF fgl_winquestion("INFO","COSTO EXISTE PARA ESTE ANO, DESEA ACTUALIZAR DE TODAS FORMAS?","NO","NO|YES","QUESTION",0) ="NO" THEN
EXIT PROGRAM
END IF
END IF
END IF
AFTER INPUT
IF INT_FLAG THEN
CALL fgl_Winmessage("INFO","OPERACION ABORTADA","INFO")
LET INT_FLAG = FALSE
EXIT INPUT
END IF
LET opcion =fgl_winquestion("ACTUALIZAR","ESTA SEGURO DE REALIZAR ESTA OPERACION?","NO","NO|YES","QUESTION",0)
IF opcion ="YES" THEN
IF inventario = "IP" THEN
LET selec =
"SELECT a.ano,a.mes_ini,a.mes_fin,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.material,a.labor,a.gastos, ",
" a.ventas ",
" FROM iptb00004 a,iptb00002 b WHERE a.ano =",pano USING "&&&&",
" AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec ",
" AND a.status_t IS NULL AND b.status_t IS NULL"
SELECT COUNT(*) INTO cuenta
FROM iptb00004 a,iptb00002 b WHERE a.ano =pano
AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec
AND a.status_t IS NULL AND b.status_t IS NULL
END IF
IF inventario = "IN" THEN
LET selec =
"SELECT a.ano,a.mes_ini,a.mes_fin,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.costo_st ",
" FROM intb00013 a,intb00001 b WHERE a.ano =",pano USING "&&&&",
" AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec ",
" AND a.status_t IS NULL AND b.status_t IS NULL"
SELECT COUNT(*) INTO cuenta
FROM intb00013 a,intb00001 b WHERE a.ano =pano
AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec
AND a.status_t IS NULL AND b.status_t IS NULL
END IF
IF inventario = "IR" THEN
LET selec =
"SELECT a.ano,a.mes_ini,a.mes_fin,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.costo_st ",
" FROM irtb00013 a,irtb00002 b WHERE a.ano =",pano USING "&&&&",
" AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec ",
" AND a.status_t IS NULL AND b.status_t IS NULL"
SELECT COUNT(*) INTO cuenta
FROM irtb00013 a,irtb00001 b WHERE a.ano =pano
AND a.cod_n = b.cod_n AND a.cod_grupo = b.cod_grupo AND a.cod_tipo = b.cod_tipo AND a.cod_sec = b.cod_sec
AND a.status_t IS NULL AND b.status_t IS NULL
END IF
IF inventario = "SM" THEN
LET selec =
"SELECT a.ano,a.mes_ini,a.mes_fin,a.cod_prod,'0','0','0',a.costo_st ",
" FROM cttb00026 a,cttb00001 b WHERE a.ano =",pano USING "&&&&",
" AND a.cod_prod = b.cod_prod ",
" AND a.status_t IS NULL AND b.status_t IS NULL"
SELECT COUNT(*) INTO cuenta
FROM cttb00026 a,cttb00001 b WHERE a.ano =pano
AND a.cod_prod = b.cod_prod
AND a.status_t IS NULL AND b.status_t IS NULL
END IF
LET progreso = 10
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
PREPARE comando FROM selec
DECLARE costo_productos CURSOR FOR comando
LET idx = 1
BEGIN WORK
#IF inventario = "IP" THEN
# DELETE FROM iptb00004 WHERE ano = pano_act
#END IF
#IF inventario = "IN" THEN
# DELETE FROM intb00013 WHERE ano = pano_act
#END IF
#IF inventario = "IR" THEN
# DELETE FROM irtb00013 WHERE ano = pano_act
#END IF
#IF inventario = "SM" THEN
# DELETE FROM cttb00026 WHERE ano = pano_act
#END IF
FOREACH costo_productos INTO pcosto.*
LET pcosto.ano=pano_act
IF inventario = "IP" THEN
SELECT DISTINCT a.cod_n FROM iptb00004 a WHERE a.cod_n = pcosto.cod_n AND
a.cod_grupo = pcosto.cod_grupo AND a.cod_tipo = pcosto.cod_tipo AND a.cod_Sec =pcosto.cod_sec
AND a.ano =pano_act
IF STATUS= NOTFOUND THEN
INSERT INTO iptb00004 (ano,mes_ini,mes_fin,cod_n,cod_grupo,cod_tipo,cod_sec,material,labor,gastos,ventas,
us_crea,fech_crea)
VALUES (pcosto.*,usuarios,getdate())
LET progreso = (idx/cuenta) * 100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET idx = idx + 1
END IF
END IF
IF inventario = "IN" THEN
SELECT DISTINCT a.cod_n FROM intb00013 a WHERE a.cod_n = pcosto.cod_n AND
a.cod_grupo = pcosto.cod_grupo AND a.cod_tipo = pcosto.cod_tipo AND a.cod_Sec =pcosto.cod_sec
AND a.ano =pano_act
IF STATUS = NOTFOUND THEN
INSERT INTO intb00013 (ano,mes_ini,mes_fin,cod_n,cod_grupo,cod_tipo,cod_sec,costo_st,us_crea,fech_crea)
VALUES (pcosto.ano,pcosto.mes_ini,pcosto.mes_fin,pcosto.cod_n,pcosto.cod_grupo,pcosto.cod_tipo,pcosto.cod_Sec,
pcosto.material,usuarios,getdate())
LET progreso = (idx/cuenta) * 100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET idx = idx + 1
END IF
END IF
IF inventario = "IR" THEN
SELECT DISTINCT a.cod_n FROM irtb00013 a WHERE a.cod_n = pcosto.cod_n AND
a.cod_grupo = pcosto.cod_grupo AND a.cod_tipo = pcosto.cod_tipo AND a.cod_Sec =pcosto.cod_sec
AND a.ano =pano_act
IF STATUS = NOTFOUND THEN
INSERT INTO irtb00013 (ano,mes_ini,mes_fin,cod_n,cod_grupo,cod_tipo,cod_sec,costo_st,us_crea,fech_crea)
VALUES (pcosto.ano,pcosto.mes_ini,pcosto.mes_fin,pcosto.cod_n,pcosto.cod_grupo,pcosto.cod_tipo,pcosto.cod_Sec,
pcosto.material,usuarios,getdate())
LET progreso = (idx/cuenta) * 100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET idx = idx + 1
END IF
END IF
IF inventario = "SM" THEN
SELECT DISTINCT a.cod_prod FROM cttb00026 a WHERE a.cod_prod = pcosto.cod_n
AND a.ano =pano_act
IF STATUS = NOTFOUND THEN
INSERT INTO cttb00026 (ano,mes_ini,mes_fin,cod_prod,costo_st,us_crea,fech_crea)
VALUES (pcosto.ano,pcosto.mes_ini,pcosto.mes_fin,pcosto.cod_n,pcosto.material,usuarios,getdate())
LET progreso = (idx/cuenta) * 100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
LET idx = idx + 1
END IF
END IF
END FOREACH
COMMIT WORK
LET progreso =100
DISPLAY progreso TO progreso
CALL ui.Interface.refresh()
CALL fgl_winmessage("INFO","ACTUALIZACION EXITOSA","INFO")
ELSE
CALL fgl_Winmessage("ACTUALIZAR","NO SE ACTUALIZARON LOS DATOS","INFO")
END IF
EXIT INPUT
END INPUT
CLOSE WINDOW w1
END FUNCTION