{ ------------------------------------------------------------------ PROGRAMA : ACPRMT004 OBJETIVO : Capturar, Modificar, Elimacar registros de la Tabla Tranasacciones de Activo Fijo. PROGRAMADOR : TAdeo A. Ferreras. FECHA REALIZACION : Sept. 27, 1993. ------------------------------------------------------------------ } GLOBALS "acprgb000.4gl" DEFINE tipo_m CHAR(1) DEFINE fecha6 DATE DEFINE descrip,descripcion1,descripcion2,descripcion3,descripcion4, descripcion5 CHAR(30) DEFINE p_row,trx_p INTEGER MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "smarmotech" user usuarios USING clave SELECT a.* INTO p_companias.* FROM companias a CALL acprmt004() END MAIN FUNCTION acprmt004() # WHENEVER ERROR CONTINUE CLEAR SCREEN OPTIONS FORM LINE 9, ERROR LINE 23, COMMENT LINE 21 OPEN FORM acfmmt004 FROM "acfmmt004" DISPLAY FORM acfmmt004 # CALL pantalla() DISPLAY "acprmt004" AT 4,3 DISPLAY "Transacciones Aplicadas a Activos Fijos" AT 6,22 MENU "OPCIONES" COMMAND "Adicionar" " Adiciona Registro Cancela Operacion" LET int_flag = FALSE CLEAR FORM CALL acpcad004() COMMAND "Consultar-modificar" " Realiza Busqueda Cancela Operacion" LET INT_FLAG = FALSE CLEAR FORM CALL acpcmf004() COMMAND "Salir" "Retorna Menu Anterior" EXIT MENU CLEAR FORM END MENU END FUNCTION FUNCTION acpcad004() ## Captura los datos que va a contener el registro LET int_flag = false INPUT BY NAME trans.* ## Verifica que el codigo no exista en el catalogo de trans. Si existe, ## entonces despliega los datos del registro existente. AFTER FIELD codigo IF trans.codigo is null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD codigo END IF #### Verifica que el el codigo asignado al trans no exista SELECT a.descripcion,CONVERT(VARCHAR(10),a.fech_compra,103) INTO descripcion1,fecha6 FROM actb00001 a WHERE a.codigo = trans.codigo AND a.status_t IS NULL IF status = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD codigo END IF DISPLAY BY NAME descripcion1 AFTER FIELD num_doc IF trans.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF ##### Chequea que el numero de cuenta a digitar exista en el catalogo AFTER FIELD fecha IF trans.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF AFTER FIELD cod_mov IF trans.cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT a.descrip,a.tipo_mov INTO descrip,tipo_m FROM actb00002 a WHERE a.cod_mov = trans.cod_mov AND a.status_t IS NULL IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF DISPLAY BY NAME descrip IF trans.cod_mov = 5 THEN LET numero_msg = 300 CALL msg(numero_msg) NEXT FIELD cod_mov END IF AFTER FIELD tasa_cambio IF trans.tasa_cambio IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tasa_cambio END IF AFTER FIELD monto IF trans.monto IS NULL OR trans.monto < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN ELSE IF trans.codigo is null then LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD codigo END IF #### Verifica que el el codigo asignado al trans no exista IF trans.num_doc IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD num_doc END IF ##### Chequea que el numero de cuenta a digitar exista en el catalogo IF trans.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF IF trans.tasa_cambio IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tasa_cambio END IF IF trans.monto IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF IF trans.cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF END IF EXIT INPUT END INPUT #### Proceso para insertar la informacion en las tablas necesarias IF tipo_m = "D" THEN LET trans.monto = trans.monto * -1 END IF INSERT INTO actb00004(codigo ,num_doc ,fecha ,cod_mov ,tasa_cambio ,monto ,observacion ,us_crea ,fech_crea ) VALUES (trans.codigo,trans.num_doc, trans.fecha,trans.cod_mov,trans.tasa_cambio,trans.monto,trans.observacion, usuarios,getdate()) LET numero_msg = 1 CALL msg(numero_msg) END FUNCTION ###### Funcion de modificacion FUNCTION acpcmf004() LET int_flag = false ## Aqui se prepara para la captura del criterio de seleccion CONSTRUCT criterio ON a.codigo,a.num_doc,a.cod_mov FROM codigo,num_doc,cod_mov IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = FALSE RETURN END IF LET SELEC = "SELECT a.rowid,a.codigo ,a.num_doc ,CONVERT(VARCHAR(10),a.fecha,103) ,a.cod_mov ,a.tasa_cambio ,a.monto ,a.observacion ,a.status_t ,a.us_crea ,a.fech_crea ,a.us_mod ,a.fech_mod,b.tipo_mov FROM actb00004 a,actb00002 b ", "WHERE a.codigo IS NOT NULL AND a.status_t IS NULL AND ", " a.fecha IS NOT NULL AND a.cod_mov = b.cod_mov AND ", " a.cod_mov != 5 AND ",criterio CLIPPED, " ORDER BY a.codigo " PREPARE busca FROM selec DECLARE datos SCROLL CURSOR FOR busca OPEN datos FETCH FIRST datos INTO p_row,trans.*,tipo_m IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) RETURN END IF SELECT a.descripcion INTO descripcion1 FROM actb00001 a WHERE a.codigo = trans.codigo SELECT a.descrip INTO descrip FROM actb00002 a WHERE a.cod_mov = trans.cod_mov IF tipo_m = "D" THEN LET trans.monto = trans.monto * -1 END IF DISPLAY BY NAME trans.*,descripcion1,descrip MENU "OPCIONES " COMMAND "Siguiente" "Presenta en pantalla el proximo registro encontrado" FETCH NEXT datos INTO p_row,trans.*,tipo_m IF STATUS = NOTFOUND THEN LET numero_msg = 4 CALL msg(numero_msg) END IF SELECT a.descripcion INTO descripcion1 FROM actb00001 a WHERE a.codigo = trans.codigo IF tipo_m = "D" THEN LET trans.monto = trans.monto * -1 END IF DISPLAY BY NAME trans.*,descripcion1,descrip COMMAND "Anterior" FETCH PREVIOUS datos INTO p_row,trans.*,tipo_m IF STATUS = NOTFOUND THEN LET numero_msg = 5 CALL msg(numero_msg) END IF SELECT a.descripcion INTO descripcion1 FROM actb00001 a WHERE a.codigo = trans.codigo IF tipo_m = "D" THEN LET trans.monto = trans.monto * -1 END IF DISPLAY BY NAME trans.*,descripcion1,descrip COMMAND "Primero" FETCH FIRST datos INTO p_row,trans.*,tipo_m SELECT a.descripcion INTO descripcion1 FROM actb00001 a WHERE a.codigo = trans.codigo IF tipo_m = "D" THEN LET trans.monto = trans.monto * -1 END IF DISPLAY BY NAME trans.*,descripcion1,descrip LET numero_msg = 5 CALL msg(numero_msg) COMMAND "Ultimo" FETCH LAST datos INTO p_row,trans.*,tipo_m SELECT a.descripcion INTO descripcion1 FROM actb00001 a WHERE a.codigo = trans.codigo IF tipo_m = "D" THEN LET trans.monto = trans.monto * -1 END IF DISPLAY BY NAME trans.*,descripcion1,descrip LET numero_msg = 4 CALL msg(numero_msg) COMMAND "Escoger" " Actualiza Registro Cancela Operacion" IF trans.status_t IS NOT NULL THEN RETURN END IF INPUT BY NAME trans.fecha THRU trans.fech_mod WITHOUT DEFAULTS AFTER FIELD fecha IF trans.fecha IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD fecha END IF AFTER FIELD cod_mov IF trans.cod_mov IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_mov END IF SELECT a.descrip,a.tipo_mov INTO descrip,tipo_m FROM actb00002 a WHERE a.cod_mov = trans.cod_mov AND a.status_t IS NULL AND a.cod_mov != 5 IF STATUS = NOTFOUND THEN LET numero_msg = 3 CALL msg(numero_msg) NEXT FIELD cod_mov END IF DISPLAY BY NAME descrip IF trans.cod_mov = 5 THEN LET numero_msg = 300 CALL msg(numero_msg) NEXT FIELD cod_mov END IF AFTER FIELD tasa_cambio IF trans.tasa_cambio IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD tasa_cambio END IF AFTER FIELD monto IF trans.monto IS NULL OR trans.monto < 0 THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD monto END IF END INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF ###### Proceso de Actualizacion IF tipo_m = "D" THEN LET trans.monto = trans.monto * -1 END IF BEGIN WORK UPDATE actb00004 SET (fecha,tasa_cambio,monto,us_mod,fech_mod) = (trans.fecha,trans.tasa_cambio, trans.monto, usuarios,getdate()) WHERE rowid = p_row IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("INFO","NO SE ACTUALIZARON REGISTROS","INFO") EXIT PROGRAM END IF SELECT MIN(convert(varchar(10),a.fecha,103)) INTO fecha6 FROM actb00004 a WHERE a.codigo = trans.codigo AND a.status_t IS NULL IF fecha6 IS NULL THEN LET fecha6 = trans.fecha END IF UPDATE actb00001 set fech_compra = fecha6 WHERE @codigo = trans.codigo AND @status_t IS NULL IF STATUS < 0 THEN ROLLBACK WORK CALL fgl_winmessage("INFO","NO SE ACTUALIZARON REGISTROS","INFO") EXIT PROGRAM END IF LET numero_msg = 13 CALL msg(numero_msg) COMMIT WORK #### Proceso para eliminar un registro logicamente COMMAND KEY ("L") "eLiminar" UPDATE actb00004 SET (status_t,us_mod,fech_mod) = ("E",usuarios,getdate()) WHERE @rowid = p_row LET numero_msg = 39 CALL msg(numero_msg) COMMAND "Retornar" "Retorna al menu anterior" EXIT MENU CLEAR FORM END MENU END FUNCTION