{ ----------------------------------------------------------------------------- PROGRAMA : CGPRMT018 OBJETIVO : Copia costos a partir de un ano a otro PROGRAMADOR : Ing. Juan Soto FECHA REALIZACION: Febrero 28, 2007 ------------------------------------------------------------------------------ } GLOBALS "cgprgb000.4gl" DEFINE cuenta_ant CHAR(8) #DEFINE p_nivel SMALLINT DEFINE desc_nivel CHAR(15) DEFINE modifica CHAR(1), balance DECIMAL(12,2) MAIN DEFER INTERRUPT CALL cgprmt018() END MAIN FUNCTION cgprmt018() DEFINE mat_prima,terminados,repuestos,semi CHAR(2), ano_orig,ano_Act SMALLINT, intb13 RECORD LIKE intb00013.*, iptb4 RECORD LIKE iptb00004.*, irtb13 RECORD LIKE irtb00013.*, cttb34 RECORD LIKE cttb00034.*, cttb26 RECORD LIKE cttb00026.*, fecha_i DATE OPTIONS FORM LINE 8, ERROR LINE 24, COMMENT LINE 23 CALL pantalla() OPEN FORM cgfmmt018 FROM "cgfmmt018" DISPLAY FORM cgfmmt018 DISPLAY "cgprmt018" AT 4,3 DISPLAY "Actualizacion Costos" AT 6,30 INPUT ano_orig,ano_act,mat_prima,terminados,repuestos,semi FROM ano_orig,ano_act,mat_prima,terminados,repuestos,semi BEFORE INPUT LET ano_orig = YEAR(TODAY) - 1 AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF ano_orig IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano_orig END IF IF ano_act IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD ano_act END IF #display mat_prima," ",terminados," ",repuestos," ",semi IF mat_prima = "1" THEN DECLARE busca_mt CURSOR FOR SELECT a.* FROM intb00013 a WHERE a.ano = ano_orig AND a.status_t is null FOREACH busca_mt INTO intb13.* LET intb13.ano = ano_act SELECT UNIQUE a.ano FROM intb00013 a WHERE a.ano = intb13.ano AND a.cod_n = intb13.cod_n AND a.cod_grupo = intb13.cod_grupo AND a.cod_tipo = intb13.cod_tipo AND a.cod_sec = intb13.cod_sec AND a.status_t IS NULL IF STATUS != NOTFOUND THEN CONTINUE FOREACH END IF INSERT INTO intb00013 VALUES (intb13.*) END FOREACH UPDATE intb00013 SET us_mod = user, fech_mod = current WHERE ano = ano_act END IF IF terminados = "1" THEN DECLARE busca_pt CURSOR FOR SELECT a.* FROM iptb00004 a WHERE a.ano = ano_orig AND a.status_t is null FOREACH busca_pt INTO iptb4.* LET iptb4.ano = ano_act SELECT UNIQUE a.ano FROM iptb00004 a WHERE a.ano = iptb4.ano AND a.cod_n = iptb4.cod_n AND a.cod_grupo = iptb4.cod_grupo AND a.cod_tipo = iptb4.cod_tipo AND a.cod_sec = iptb4.cod_sec AND a.status_t IS NULL IF STATUS != NOTFOUND THEN CONTINUE FOREACH END IF INSERT INTO iptb00004 VALUES (iptb4.*) END FOREACH UPDATE iptb00004 SET us_mod = user, fech_mod = current WHERE ano = ano_act END IF IF repuestos = "1" THEN DECLARE busca_rp CURSOR FOR SELECT a.* FROM irtb00013 a WHERE a.ano = ano_orig AND a.status_t is null FOREACH busca_rp INTO irtb13.* LET irtb13.ano = ano_act SELECT UNIQUE a.ano FROM irtb00013 a WHERE a.ano = irtb13.ano AND a.cod_n = irtb13.cod_n AND a.cod_grupo = irtb13.cod_grupo AND a.cod_tipo = irtb13.cod_tipo AND a.cod_sec = irtb13.cod_sec AND a.status_t IS NULL IF STATUS != NOTFOUND THEN CONTINUE FOREACH END IF INSERT INTO irtb00013 VALUES (irtb13.*) END FOREACH UPDATE irtb00013 SET us_mod = user, fech_mod = current WHERE ano = ano_act END IF IF semi = "1" THEN # BUSCA FECHA SELECT MIN(a.fecha_inicio) INTO fecha_i FROM prdtable a WHERE a.ano = ano_act IF fecha_i IS NULL THEN LET numero_msg = 395 CALL msg(numero_msg) EXIT INPUT END IF DECLARE busca_semi CURSOR FOR SELECT a.* FROM cttb00034 a WHERE a.fecha <= fecha_i AND a.status_t IS NULL FOREACH busca_semi INTO cttb34.* LET cttb34.fecha = fecha_i SELECT UNIQUE a.fecha FROM cttb00034 a WHERE a.fecha = fecha_i AND a.cod_prod = cttb34.cod_prod IF STATUS != NOTFOUND THEN CONTINUE FOREACH END IF INSERT INTO cttb00034 VALUES (cttb34.*) END FOREACH UPDATE cttb00034 SET us_mod = user, fech_mod = current WHERE fecha = fecha_i # OTROS COSTOS DE LOS SEMI-ELABORADOS DECLARE busca_semi1 CURSOR FOR SELECT a.* FROM cttb00026 a WHERE ano = ano_orig AND a.status_t IS NULL FOREACH busca_semi1 INTO cttb26.* LET cttb26.ano = ano_act SELECT a.cod_prod FROM cttb00026 a WHERE a.ano = cttb26.ano AND a.cod_prod = cttb26.cod_prod AND a.status_t IS NULL IF STATUS != NOTFOUND THEN CONTINUE FOREACH END IF INSERT INTO cttb00026 VALUES (cttb26.*) END FOREACH UPDATE cttb00026 SET fech_mod = current, us_mod = user WHERE ano = ano_act END IF EXIT INPUT END INPUT END FUNCTION