{ ========================================================================== PROGRAMA : INPRMT099 OBJETIVO : Cierre Anual del Inventario de Materias Primas REALIZADO POR : Abner Montalvo FECHA : Septiembre 18, 1997. ========================================================================== } GLOBALS "inprgb000.4gl" DEFINE trn RECORD cod_n LIKE intb00006.cod_n, cod_grupo LIKE intb00006.cod_grupo, cod_tipo LIKE intb00006.cod_tipo, cod_sec LIKE intb00006.cod_sec, cantidad_2 LIKE intb00006.cantidad_2 END RECORD DEFINE productos RECORD LIKE intb00002.* DEFINE status_orden CHAR(1) DEFINE secuencia INTEGER DEFINE fecha_cierre, fecha_ultimo_cierre DATE DEFINE intb6_ascii CHAR(100) DEFINE intb2_ascii CHAR(100) DEFINE intb6_dbsch CHAR(100) DEFINE intb2_dbsch CHAR(100) DEFINE intb24 CHAR(100) DEFINE intb24_dat CHAR(100) DEFINE intb24_idx CHAR(100) DEFINE forma_ld CHAR(100) DEFINE err_val INTEGER FUNCTION inprmt099() OPTIONS PROMPT LINE 20, FORM LINE 8, ERROR LINE 24 OPEN FORM infmmt099 FROM "infmmt099" DISPLAY FORM infmmt099 CALL pantalla() DISPLAY "inprmt099" AT 4,3 DISPLAY " Cierre Anual " AT 6,33 LET c_ano = (YEAR(TODAY) - 2) DISPLAY c_ano AT 11,49 SELECT MAX(fecha_corte) INTO fecha_cierre FROM prdtable WHERE ano = c_ano IF status = NOTFOUND THEN LET fecha_cierre = TODAY END IF DISPLAY BY NAME fecha_cierre LET fecha_ultimo_cierre = NULL SELECT UNIQUE MAX(fecha) INTO fecha_ultimo_cierre FROM intb00006 WHERE tipo = "1" AND status_t IS NULL IF fecha_ultimo_cierre <= fecha_cierre THEN LET numero_msg = 380 CALL msg(numero_msg) LET int_flag = FALSE SLEEP 2 RETURN END IF { LET fecha_cierre = TODAY INPUT BY NAME fecha_cierre WITHOUT DEFAULTS AFTER FIELD fecha_cierre IF fecha_cierre IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_cierre END IF IF fecha_cierre > TODAY THEN LET numero_msg = 375 CALL msg(numero_msg) NEXT FIELD p_ano END IF # SELECT UNIQUE fecha FROM intb00025 # WHERE fecha = fecha_cierre # IF status != NOTFOUND THEN # LET numero_msg = 376 # CALL msg(numero_msg) # NEXT FIELD p_ano # END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF } LET secuencia = fecha_cierre USING "DDMMYY" LET intb6_ascii = fgl_getenv("DBPATH") CLIPPED,"/rayovac.dbs/", "intb00006_ascii.", fecha_cierre USING "DDMMYY" LET intb2_ascii = fgl_getenv("DBPATH") CLIPPED,"/rayovac.dbs/", "intb00002_ascii.", fecha_cierre USING "DDMMYY" LET intb6_dbsch = "dbschema -d rayovac -t intb00006 ", fgl_getenv("DBPATH") CLIPPED,"/rayovac.dbs/", "intb00006_dbsch.", fecha_cierre USING "DDMMYY" LET intb2_dbsch = "dbschema -d rayovac -t intb00002 ", fgl_getenv("DBPATH") CLIPPED,"/rayovac.dbs/", "intb00002_dbsch.", fecha_cierre USING "DDMMYY" SELECT dirpath INTO intb24 FROM systables WHERE tabname = "intb00024" LET intb24 = fgl_getenv("DBPATH") CLIPPED,"/rayovac.dbs/",intb24 LET intb24_dat = "cp ", intb24 CLIPPED, ".dat ", intb24 CLIPPED, ".dat.", fecha_cierre USING "DDMMYY" LET intb24_idx = "cp ", intb24 CLIPPED, ".idx ", intb24 CLIPPED, ".idx.", fecha_cierre USING "DDMMYY" #DISPLAY intb6_ascii AT 6,2 #DISPLAY intb2_ascii AT 7,2 #DISPLAY intb6_dbsch AT 8,2 #DISPLAY intb2_dbsch AT 9,2 #DISPLAY intb24 AT 10,2 #DISPLAY intb24_dat AT 11,2 #DISPLAY intb24_idx AT 12,2 LABEL volver: PROMPT " Estas Seguro de Proceder (S/N)? " FOR decide LET decide = UPSHIFT(decide) IF decide != "S" AND decide != "N" THEN GOTO volver END IF IF decide != "S" THEN RETURN END IF IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF DISPLAY " " AT 20,10 DISPLAY " Haciendo Backup del Historico de Transacciones. " AT 20,10 RUN intb24_dat RUN intb24_idx DISPLAY " Haciendo Backup de las Transacciones que Califican. " AT 20,10 #----------- Trabajando con los Registros Anulados -------------------- DISPLAY " Haciendo Backup de las Transacciones que Anuladas. " AT 20,10 UNLOAD TO "trn1.ld" SELECT * FROM intb00006 WHERE status_t = "E" AND fecha <= fecha_cierre INSERT INTO intb00024 SELECT * FROM intb00006 WHERE status_t = "E" AND fecha <= fecha_cierre DELETE FROM intb00006 WHERE status_t = "E" AND fecha <= fecha_cierre #----------- Trabajando con los Registros sin Ordenes de Compras ----- DISPLAY " Haciendo Backup de las Transacciones que no manejan O.C. " AT 20,10 UNLOAD TO "trn2.ld" SELECT * FROM intb00006 WHERE status_t IS NULL AND cod_mov NOT IN (34,35) AND fecha <= fecha_cierre UPDATE intb00006 SET status_t = "X" WHERE status_t IS NULL AND cod_mov NOT IN (34,35) AND fecha <= fecha_cierre INSERT INTO intb00024 SELECT * FROM intb00006 WHERE status_t = "X" DELETE FROM intb00006 WHERE status_t = "X" #----------- Trabajando con los Registros con Ordenes de Compras ----- DISPLAY " Haciendo Backup de las Transacciones que manejan O.C. " AT 20,10 UNLOAD TO "trn3.ld" SELECT * FROM intb00006 WHERE status_t IS NULL AND cod_mov IN (34,35) AND fecha <= fecha_cierre AND orden_compra IN ( SELECT num_oc FROM cotb00014 WHERE cierre = "S" ) UPDATE intb00006 SET status_t = "X" WHERE status_t IS NULL AND cod_mov IN (34,35) AND fecha <= fecha_cierre AND orden_compra IN ( SELECT num_oc FROM cotb00014 WHERE cierre = "S" ) #----------- Trabajando con los Registros sin Ordenes de Compras ----- DISPLAY " Haciendo Backup de las Transacciones cuyas O.C. no existen. " AT 20,10 UNLOAD TO "trn4.ld" SELECT * FROM intb00006 WHERE status_t IS NULL AND cod_mov IN (34,35) AND fecha <= fecha_cierre AND orden_compra NOT IN ( SELECT num_oc FROM cotb00014 ) UPDATE intb00006 SET status_t = "X" WHERE status_t IS NULL AND cod_mov IN (34,35) AND fecha <= fecha_cierre AND orden_compra NOT IN ( SELECT num_oc FROM cotb00014 ) INSERT INTO intb00024 SELECT * FROM intb00006 WHERE status_t = "X" DELETE FROM intb00006 WHERE status_t = "X" LET forma_ld = "cat trn1.ld trn2.ld trn3.ld trn4.ld > ", intb6_ascii RUN forma_ld #------ Creando los Balances Iniciales de las Materias Primas ---------- DISPLAY " Creando Balances Iniciales de las Materias Primas. " AT 20,10 DECLARE transacciones CURSOR FOR SELECT cod_n, cod_grupo, cod_tipo, cod_sec, SUM(cantidad_2) FROM intb00024 WHERE status_t = "X" GROUP BY 1,2,3,4 ORDER BY 1,2,3,4 FOREACH transacciones INTO trn.* DISPLAY trn.cod_n USING "&" AT 21,30 DISPLAY trn.cod_grupo USING "&" AT 21,32 DISPLAY trn.cod_tipo USING "&&" AT 21,34 DISPLAY trn.cod_sec USING "&&&" AT 21,37 DISPLAY trn.cantidad_2 USING "###,###,##&.&&" AT 21,41 INSERT INTO intb00006(num_doc,fecha,cod_mov,cod_n,cod_grupo,cod_tipo, cod_sec,cantidad_2,bodega,us_crea,fech_crea) VALUES (secuencia,fecha_cierre,1,trn.cod_n,trn.cod_grupo, trn.cod_tipo,trn.cod_sec,trn.cantidad_2,1,USER, CURRENT) END FOREACH UPDATE intb00024 SET status_t = NULL WHERE status_t = "X" UNLOAD TO intb2_ascii SELECT * FROM intb00002 DISPLAY " Actualizando el Historico de Materias Primas. " AT 20,10 #INSERT INTO intb00025 SELECT "111111", * FROM intb00002 #UPDATE intb00025 SET fecha = fecha_cierre WHERE fecha = "111111" RUN intb2_dbsch RUN intb6_dbsch END FUNCTION