{ ------------------------------------------------------------------------------- PROGRAMA : COPRCS007 OBJETIVO : Consulta Ordenes Organizadas Por Tipo PROGRAMADOR : Ing. Juan Fco. Soto. FECHA REALIZACION : Octubre 7, 1992 ------------------------------------------------------------------------------- } GLOBALS "coprgb000.4gl" FUNCTION coprcs007() DEFINE sale CHAR (1) DEFINE busca_orden RECORD num_oc integer, tipo char(2), fecha date, cod_sp smallint, cod_sp_sec smallint, nombre char(45), monto decimal(12,2) END RECORD DEFINE desp_orden ARRAY[500] OF RECORD num_oc1 integer, tipo1 char(2), fecha1 date, codigo_s char(7), nombre1 char(45), monto1 decimal(12,2) END RECORD DEFINE encontrado integer DEFINE total_d,total_g DECIMAL(12,2) DEFINE primera char(1) WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21 LET formulario = formulario CLIPPED,"cofmcs007" OPEN FORM cofmcs007 FROM formulario DISPLAY FORM cofmcs007 CALL PANTALLA() DISPLAY " Continua Consulta" AT 2,3 DISPLAY " Cancela Operacion" AT 2,50 DISPLAY "coprcs007" AT 4,3 DISPLAY "Consulta Ordenes Organizadas Por Tipo " AT 6,23 LABEL volver: INPUT BY NAME rango.* ATTRIBUTE (YELLOW) AFTER FIELD fech_in IF rango.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_in END IF AFTER FIELD fech_fi IF rango.fech_in IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fech_fi END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF EXIT INPUT END INPUT ## Se seleccionan los campos que el usuario debe ver en la pantalla DISPLAY "Buscando Informacion... Espere Por Favor" AT 21,1 ATTRIBUTE(YELLOW) SELECT COUNT(*) INTO encontrado FROM cotb00014 WHERE fech_oc between rango.fech_in and rango.fech_fi DECLARE accion CURSOR FOR SELECT a.num_oc ,a.tipo,a.fech_oc,b.cod_sp,b.cod_sp_sec,b.nom_sp, sum(c.precio) FROM cotb00014 a, cotb00001 b,cotb00015 c 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 rango.fech_in and rango.fech_fi AND a.status_t IS NULL GROUP BY 1,2,3,4,5,6 ORDER BY 2,1 ## Busca los registros que cumplan con la condicion dada y verifica si el ## suplidor existe en el catalogo de suplidores OPEN accion LET idx = 1 LET primera = "S" LET total_g = 0 LET total_d = 0 WHILE STATUS != NOTFOUND FETCH accion INTO busca_orden.* IF status = notfound AND sale is null THEN LET desp_orden[idx].codigo_s = null LET desp_orden[idx].nombre1 = null LET desp_orden[idx].num_oc1 = null LET desp_orden[idx].tipo1 = null LET desp_orden[idx].fecha1 = null LET idx = idx + 1 LET desp_orden[idx].codigo_s = null LET desp_orden[idx].nombre1 = null LET desp_orden[idx].num_oc1 = null LET desp_orden[idx].tipo1 = null LET desp_orden[idx].fecha1 = null LET desp_orden[idx].nombre1 = "Total Tipo Orden ==> " LET desp_orden[idx].monto1 = total_d using "##,###,###.##" LET total_g = total_g + total_d LET sale = "S" END IF IF primera = "S" THEN LET desp_orden[idx].tipo1 = busca_orden.tipo LET primera = "N" END IF IF desp_orden[idx].tipo1 = busca_orden.tipo THEN LET desp_orden[idx].codigo_s = busca_orden.cod_sp using "&&","-", busca_orden.cod_sp_sec using "&&&&" LET desp_orden[idx].nombre1 = busca_orden.nombre LET desp_orden[idx].num_oc1 = busca_orden.num_oc LET desp_orden[idx].tipo1 = busca_orden.tipo LET desp_orden[idx].monto1 = busca_orden.monto LET desp_orden[idx].fecha1 = busca_orden.fecha using "dd/mm/yy" LET total_d = total_d + desp_orden[idx].monto1 END IF IF desp_orden[idx].tipo1 != busca_orden.tipo THEN LET desp_orden[idx].codigo_s = null LET desp_orden[idx].nombre1 = null LET desp_orden[idx].num_oc1 = null LET desp_orden[idx].tipo1 = null LET desp_orden[idx].fecha1 = null LET idx = idx + 1 LET desp_orden[idx].codigo_s = null LET desp_orden[idx].nombre1 = null LET desp_orden[idx].num_oc1 = null LET desp_orden[idx].tipo1 = null LET desp_orden[idx].fecha1 = null LET desp_orden[idx].nombre1 = "Total Tipo Orden ==> " LET desp_orden[idx].monto1 = total_d using "##,###,###.##" LET total_g = total_g + total_d LET total_d = 0 LET primera = "S" LET idx = idx + 1 LET desp_orden[idx].codigo_s = null LET desp_orden[idx].nombre1 = null LET desp_orden[idx].num_oc1 = null LET desp_orden[idx].tipo1 = null LET desp_orden[idx].fecha1 = null LET idx = idx + 1 LET desp_orden[idx].codigo_s = null LET desp_orden[idx].nombre1 = null LET desp_orden[idx].num_oc1 = null LET desp_orden[idx].tipo1 = null LET desp_orden[idx].fecha1 = null LET desp_orden[idx].codigo_s = busca_orden.cod_sp using "&&","-", busca_orden.cod_sp_sec using "&&&&" LET desp_orden[idx].nombre1 = busca_orden.nombre LET desp_orden[idx].num_oc1 = busca_orden.num_oc LET desp_orden[idx].tipo1 = busca_orden.tipo LET desp_orden[idx].monto1 = busca_orden.monto using "##,###,###.##" LET desp_orden[idx].fecha1 = busca_orden.fecha using "dd/mm/yy" LET total_d = total_d + desp_orden[idx].monto1 END IF LET idx = idx + 1 IF sale = "S" THEN EXIT WHILE END IF LET desp_orden[idx].tipo1 = busca_orden.tipo END WHILE DISPLAY " " AT 21,1 DISPLAY BY NAME encontrado DISPLAY BY NAME total_g CALL set_count (idx-1) DISPLAY ARRAY desp_orden 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