{ ------------------------------------------------------------------ PROGRAMA : PRPRMT007 OBJETIVO : Matenimiento de Status de Orden de Produccion PROGRAMADOR : Tadeo A. Ferreras FECHA REALIZACION : MARZO 09, 1998 ------------------------------------------------------------------ } GLOBALS "prprgb000.4gl" DEFINE p_nombre CHAR(40), tipo_p CHAR(1), pnumreq INT MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "smarmotech" USER usuarios USING clave CALL prprmt007() END MAIN FUNCTION prprmt007() # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 #CALL pantalla() OPEN FORM ctfmmt007 FROM "prfmmt007" DISPLAY FORM ctfmmt007 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" LET INT_FLAG = FALSE LET tipo_p = "A" INITIALIZE prtb09.* TO NULL INITIALIZE prtb07.* TO NULL LET p_nombre = NULL CLEAR FORM CALL prpcad007() COMMAND "Consulta/Modificar" LET INT_FLAG = FALSE LET tipo_p = "C" INITIALIZE prtb09.* TO NULL INITIALIZE prtb07.* TO NULL LET p_nombre = NULL CLEAR FORM CALL prpcmf007() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU END MENU END FUNCTION FUNCTION prpcad007() ## Captura los datos que va a contener el registro LET INT_FLAG = FALSE IF tipo_p = "A" THEN INPUT prtb08.num_oc,prtb08.fecha_oc,prtb08.fecha_entrega FROM num_oc,fecha,fecha_fabricacion AFTER FIELD num_oc IF prtb08.num_oc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_oc END IF SELECT UNIQUE a.tipo_cliente,a.sec_cliente,a.fecha_oc INTO prtb07.tipo_cliente,prtb07.sec_cliente,prtb07.fecha FROM prtb00012 a WHERE a.num_oc = prtb08.num_oc IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD num_oc END IF SELECT UNIQUE a.nombre INTO p_nombre FROM vetb00004 a WHERE a.tipo_cliente = prtb07.tipo_cliente AND a.sec_cliente = prtb07.sec_cliente DISPLAY BY NAME prtb07.tipo_cliente,prtb07.sec_cliente,p_nombre AFTER FIELD fecha_oc IF prtb08.fecha_oc IS NULL OR prtb08.fecha_oc < prtb07.fecha THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha_oc END IF END INPUT END IF IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF INPUT prtb08.cerrada,prtb08.fecha_entrega WITHOUT DEFAULTS FROM pendiente,fecha_fabricacion AFTER FIELD pendiente IF prtb08.cerrada IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD pendiente END IF END INPUT IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF IF tipo_p = "A" THEN UPDATE prtb00012 SET fecha_entrega = prtb08.fecha_entrega, us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE @num_oc = prtb08.num_oc AND @tipo_cliente = prtb07.tipo_cliente AND @sec_cliente = prtb07.sec_cliente LET numero_msg = 1 CALL msg(numero_msg) END IF END FUNCTION FUNCTION prpcmf007() ## Aqui se prepara para la captura del criterio de seleccion CONSTRUCT BY NAME criterio ON a.num_oc #-> vg,a.fecha IF INT_FLAG THEN LET numero_msg = 2 CALL msg(numero_msg) LET INT_FLAG = FALSE RETURN END IF LET SELEC = " SELECT UNIQUE a.num_oc,CONVERT(CHAR(10),a.fecha_oc,103),CONVERT(CHAR(10),a.fecha_entrega,103),a.cerrada,a.ubicacion FROM prtb00012 a ", " WHERE ",criterio CLIPPED #-> vg , " AND a.status_t IS NULL" PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO prtb08.num_oc,prtb08.fecha_oc,prtb08.fecha_entrega, prtb08.cerrada,prtb08.ubicacion IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF CALL despl_st() MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el sigte. registro encontrado" FETCH NEXT datos INTO prtb08.num_oc,prtb08.fecha_oc,prtb08.fecha_entrega, prtb08.cerrada,prtb08.ubicacion IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF CALL despl_st() COMMAND "Anterior" "Presenta en pantalla el registro anterior encontrado" FETCH PREVIOUS datos INTO prtb08.num_oc,prtb08.fecha_oc,prtb08.fecha_entrega, prtb08.cerrada,prtb08.ubicacion IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF CALL despl_st() COMMAND "Primero" "Presenta en pantalla el primer registro encontrado" FETCH FIRST datos INTO prtb08.num_oc,prtb08.fecha_oc,prtb08.fecha_entrega, prtb08.cerrada,prtb08.ubicacion CALL despl_st() LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" "Presenta en pantalla el ultimo registro encontrado" FETCH LAST datos INTO prtb08.num_oc,prtb08.fecha_oc,prtb08.fecha_entrega, prtb08.cerrada,prtb08.ubicacion CALL despl_st() LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" "Modifica el registro presentado en pantalla" LET tipo_p = "M" CALL prpcad007() UPDATE prtb00012 SET cerrada = prtb08.cerrada,fecha_cierre = Today, us_mod= SUSER_SNAME(),fech_mod = GETDATE() WHERE num_oc = prtb08.num_oc IF prtb08.cerrada ='S' THEN # ACTUALIZACION REQUISICION DESPACHO DECLARE brequisi CURSOR FOR SELECT a.num_req FROM cctb00026 a WHERE a.num_oc = prtb08.num_oc AND status_t IS NULL FOREACH brequisi INTO pnumreq UPDATE cctb00025 set estado_despacho = 'DESPACHADA', us_mod = SUSER_SNAME(), fech_mod = GETDATE() WHERE num_req = pnumreq END FOREACH END IF LET numero_msg = 13 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" EXIT MENU END MENU END FUNCTION FUNCTION despl_st() SELECT UNIQUE a.tipo_cliente,a.sec_cliente,b.nombre ,a.cerrada,CONVERT(char(10),a.fecha_entrega,103) INTO prtb07.tipo_cliente,prtb07.sec_cliente,p_nombre,prtb09.pendiente,prtb09.fecha_fabricacion FROM prtb00012 a,vetb00004 b WHERE a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.num_oc = prtb08.num_oc LET prtb08.fecha_entrega = prtb09.fecha_fabricacion LET prtb08.cerrada = prtb09.pendiente DISPLAY BY NAME prtb09.*,prtb07.tipo_cliente,prtb07.sec_cliente,p_nombre,prtb09.pendiente, prtb09.fecha_fabricacion END FUNCTION