{ ------------------------------------------------------------------------------- PROGRAMA : COPRCS008 OBJETIVO : Consulta Ordenes Por Suplidor PROGRAMADOR : Juan Fco. Soto. FECHA REALIZACION : AGOSTO 1997 DIRECTOR PROYECTO : JOSE ALFREDO PAULINO ------------------------------------------------------------------------------- } GLOBALS "coprgb000.4gl" MAIN DEFER INTERRUPT CALL coprcs008() END MAIN FUNCTION coprcs008() DEFINE h SMALLINT DEFINE busca_supli RECORD num_oc integer, tipo char(2), fecha date, cod_sp smallint, cod_sp_sec smallint, nombre char(45), base LIKE intb00002.base, monto decimal(12,2) END RECORD DEFINE desp_supli ARRAY[500] OF RECORD num_oc1 integer, tipo1 char(2), fecha1 date, codigo_s char(7), nombre1 char(45), monto1 CHAR(15) END RECORD DEFINE total_g_e1 CHAR(15) DEFINE nombre_s RECORD nom_sp LIKE cotb00001.nom_sp END RECORD DEFINE encontrado integer DEFINE total_d1,total_g1 DECIMAL(12,2) DEFINE sale,pendiente,primera char(1) DEFINE codigo_sp CHAR(7) #WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 OPEN FORM cofmcs008 FROM "cofmcs008" DISPLAY FORM cofmcs008 LABEL volver: CONSTRUCT criterio ON b.cod_sp,b.cod_sp_sec FROM cod_sp,cod_sp_sec IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF INPUT BY NAME pendiente,rango.* ATTRIBUTE (YELLOW) BEFORE FIELD fech_in SELECT MIN(fech_oc) INTO rango.fech_in FROM cotb00014 WHERE status_t is null DISPLAY BY NAME rango.fech_in ATTRIBUTE (BOLD) BEFORE FIELD fech_fi LET rango.fech_fi = today DISPLAY BY NAME rango.fech_fi ATTRIBUTE (BOLD) AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF IF rango.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF IF rango.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fi END IF EXIT INPUT END INPUT ## Se seleccionan los campos que el usuario debe ver en la pantalla IF pendiente = "P" THEN LET selec = "SELECT a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp, ", "d.base,sum(c.precio * c.cantidad) ", " FROM cotb00014 a, cotb00001 b,cotb00015 c,OUTER intb00002 d ", " WHERE ", "a.num_oc = c.num_oc AND ", "a.tipo = c.tipo AND ", "a.cod_sp = b.cod_sp AND ", "a.cod_sp_sec = b.cod_sp_sec AND ", "a.fech_oc between ? and ? AND ", "a.status_t is null AND ", "c.cod_n = d.cod_n AND ", "c.cod_grupo = d.cod_grupo AND ", "c.cod_tipo = d.cod_tipo AND ", "c.cod_sec = d.cod_sec AND ", "a.cierre = 'N' AND ", criterio clipped, " GROUP BY a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp,", " d.base ", " ORDER BY b.cod_sp,b.cod_sp_sec " END IF IF pendiente = "C" THEN LET selec = "SELECT a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp, ", " d.base,sum(c.precio * c.cantidad) ", " FROM cotb00014 a, cotb00001 b,cotb00015 c,OUTER intb00002 d ", " WHERE ", "a.num_oc = c.num_oc AND ", "a.tipo = c.tipo AND ", "a.cod_sp = b.cod_sp AND ", "a.cod_sp_sec = b.cod_sp_sec AND ", "c.cod_n = d.cod_n AND ", "c.cod_grupo = d.cod_grupo AND ", "c.cod_tipo = d.cod_tipo AND ", "c.cod_sec = d.cod_sec AND ", "a.fech_oc between ? and ? AND ", "a.status_t is null AND ", "a.cierre = 'S' AND ", criterio clipped, " GROUP BY a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp,", " d.base ", " ORDER BY b.cod_sp,b.cod_sp_sec " END IF IF pendiente = "T" THEN LET selec = "SELECT a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp, ", "d.base,sum(c.precio * c.cantidad),max(c.precio),max(a.fech_crea) ", " FROM cotb00014 a, cotb00001 b,cotb00015 c,OUTER intb00002 d ", " WHERE ", "a.num_oc = c.num_oc AND ", "a.tipo = c.tipo AND ", "c.cod_n = d.cod_n AND ", "c.cod_grupo = d.cod_grupo AND ", "c.cod_tipo = d.cod_tipo AND ", "c.cod_sec = d.cod_sec AND ", "a.cod_sp = b.cod_sp AND ", "a.cod_sp_sec = b.cod_sp_sec AND ", "a.fech_oc between ? and ? AND ", "a.status_t is null AND ", criterio clipped, " GROUP BY a.num_oc,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp,", " d.base ", " ORDER BY b.cod_sp,b.cod_sp_sec " END IF DISPLAY "Buscando Informacion... Espere Por Favor" AT 21,1 ATTRIBUTE(YELLOW) PREPARE busca FROM selec DECLARE accion CURSOR FOR busca OPEN accion using rango.fech_in,rango.fech_fi IF idx > 1 THEN FOR h = 1 to idx LET desp_supli[idx].num_oc1 = null LET desp_supli[idx].tipo1 = null LET desp_supli[idx].fecha1 = null LET desp_supli[idx].codigo_s = null LET desp_supli[idx].nombre1 = null LET desp_supli[idx].monto1 = null END FOR END IF LET idx = 1 LET primera = "S" LET total_g1 = 0 LET total_d1 = 0 LET sale = null WHILE STATUS != NOTFOUND FETCH accion INTO busca_supli.* IF busca_supli.base is not null THEN IF busca_supli.base != 0 THEN LET busca_supli.monto = busca_supli.monto / busca_supli.base END IF END IF LET codigo_sp = busca_supli.cod_sp using "&&","-", busca_supli.cod_sp_sec using "&&&&" IF status = notfound AND sale is null THEN LET desp_supli[idx].num_oc1 = null LET desp_supli[idx].tipo1 = null LET desp_supli[idx].fecha1 = null LET desp_supli[idx].codigo_s = null LET idx = idx + 1 LET desp_supli[idx].num_oc1 = null LET desp_supli[idx].tipo1 = null LET desp_supli[idx].fecha1 = null LET desp_supli[idx].codigo_s = null LET desp_supli[idx].nombre1 = "Total Ordenes ====> " LET desp_supli[idx].monto1 = total_d1 using "###,###,###.##" LET total_g1 = total_g1 + total_d1 LET sale = "S" END IF IF primera = "S" THEN LET desp_supli[idx].codigo_s = busca_supli.cod_sp using "&&","-", busca_supli.cod_sp_sec using "&&&&" LET primera = "N" END IF IF desp_supli[idx].codigo_s = codigo_sp THEN IF busca_supli.monto > 0 THEN LET desp_supli[idx].codigo_s = busca_supli.cod_sp using "&&","-", busca_supli.cod_sp_sec using "&&&&" LET desp_supli[idx].num_oc1 = busca_supli.num_oc LET desp_supli[idx].tipo1 = busca_supli.tipo LET desp_supli[idx].fecha1 = busca_supli.fecha using "dd/mm/yy" LET desp_supli[idx].nombre1 = busca_supli.nombre LET desp_supli[idx].monto1 = busca_supli.monto using "###,###,###.##" LET total_d1 = total_d1 + busca_supli.monto LET idx = idx + 1 END IF END IF IF desp_supli[idx].codigo_s != codigo_sp THEN LET desp_supli[idx].num_oc1 = null LET desp_supli[idx].tipo1 = null LET desp_supli[idx].fecha1 = null LET desp_supli[idx].codigo_s = null LET idx = idx + 1 LET desp_supli[idx].num_oc1 = null LET desp_supli[idx].tipo1 = null LET desp_supli[idx].fecha1 = null LET desp_supli[idx].codigo_s = null LET desp_supli[idx].nombre1 = "Total Ordenes ====> " LET desp_supli[idx].monto1 = total_d1 using "###,###,###.##" IF total_d1 is null THEN LET total_d1 = 0 END IF LET total_g1 = total_g1 + total_d1 LET total_d1 = 0 LET primera = "S" { LET idx = idx + 1 LET desp_supli[idx].num_oc1 = null LET desp_supli[idx].tipo1 = null LET desp_supli[idx].fecha1 = null LET desp_supli[idx].codigo_s = null LET desp_supli[idx].nombre1 = null} IF busca_supli.monto > 0 THEN LET idx = idx + 1 LET desp_supli[idx].num_oc1 = null LET desp_supli[idx].tipo1 = null LET desp_supli[idx].fecha1 = null LET desp_supli[idx].codigo_s = null LET desp_supli[idx].codigo_s = busca_supli.cod_sp using "&&","-", busca_supli.cod_sp_sec using "&&&&" LET desp_supli[idx].nombre1 = busca_supli.nombre LET desp_supli[idx].num_oc1 = busca_supli.num_oc LET desp_supli[idx].tipo1 = busca_supli.tipo LET desp_supli[idx].fecha1 = busca_supli.fecha using "dd/mm/yy" LET desp_supli[idx].monto1 = busca_supli.monto using "###,###,###.##" LET total_d1 = total_d1 + busca_supli.monto END IF END IF # LET idx = idx + 1 IF sale = "S" THEN EXIT WHILE END IF LET desp_supli[idx].codigo_s = codigo_sp END WHILE DISPLAY " " AT 21,1 LET total_g_e1 = total_g1 using "###,###,###.##" DISPLAY BY NAME total_g_e1 CALL set_count (idx-1) DISPLAY BY NAME nombre_s.nom_sp DISPLAY ARRAY desp_supli TO orden.* ## Verifica si el usuario presiono la tecla IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN ELSE CLEAR FORM GOTO volver END IF END FUNCTION