{ 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