Certamen aplicado en abril de 2011
Duoc Uc San Andres

Les dejo la solución al certamen 1 aplicado en Duoc Uc San Andres(Concepción) para el ramo de Programación de base de Datos PBD 3501(OCA DEVELOP).

Problemas:
1.- Crear un bloque PL/SQL que permita eliminar una localización. Considere todos los casos posibles al eliminar un registro y controle situaciones inesperadas etilizando excepciones. El identificador del registro debe ser ingresado en la seccion de declaraciones del bloque.(27,75 PTS)


SET SERVEROUTPUT ON
SET VERIFY OFF
DECLARE
V_id LOCATIONS.LOCATION_ID%TYPE:=1000;
v_error number(8);
v_msg varchar2(50);

exc_not_found exception;
err_fk exception;

pragma exception_init(err_fk,-2292);

begin
delete from locations
where location_id= v_id;

if sql%found then
DBMS_OUTPUT.PUT_LINE('registro eliminado');
else
raise exc_not_found;
end if;

exception
when exc_not_found then
DBMS_OUTPUT.PUT_LINE('id no existe!!!');

when err_fk then
DBMS_OUTPUT.PUT_LINE('el registro se encuentra asociado a otra tabla!');

when others then
--v_error:=sqlcode;
--v_msg:=sqlerram;
DBMS_OUTPUT.PUT_LINE('error inesperado!!!!');
--DBMS_OUTPUT.PUT_LINE(v_error);
--DBMS_OUTPUT.PUT_LINE(v_msg);

end;

2.- Cree un bloque PL/SQL que permita visualizar el indentificador, apellido, identificador de cargo y salario para todos los empleados que trabajan para un determinado administrador y cuyo salario es menor al salario ingresado. El identificador del administrador y salario deberán ser pasados como parametros. Controle situaciones inesperadas utilizando excepciones. (33,75 PTS)


SET SERVEROUTPUT ON
SET VERIFY OFF

declare
v_id        employees.employee_id%type;
v_apellido  employees.last_name%type;
v_cargo_id  employees.job_id%type;
v_salario   employees.salary%type;
v_count number(4);

v_adm         employees.manager_id%type:=103;
v_sal         employees.salary%type:=5000;

error_id  exception;
error_nodataF exception;

CURSOR Mi_cursor(v_administrador employees.manager_id%type, v_salaryM employees.salary%type)IS
                    select employee_id,last_name,job_id,salary
                    from employees
                    where manager_id =v_administrador
                    and salary < v_salaryM;
begin
OPEN Mi_cursor(v_adm,v_sal);

select count(employee_id)
into v_count
from employees
where manager_id =v_adm
and salary < v_sal;

if v_adm < 100 then
raise error_id;
   end if;

   if v_count =0 then
   raise error_nodataF;
   end if;

  for i in 1..v_count loop
     FETCH Mi_cursor INTO v_id,v_apellido,v_cargo_id,v_salario;
     DBMS_OUTPUT.PUT_LINE('Empleado: '||v_id||' apellido: '||v_apellido||' cargo ID: '||v_cargo_id||' Salario: '||v_salario);

      end loop;
       close Mi_cursor;

       EXCEPTION
      WHEN ERROR_ID THEN
      DBMS_OUTPUT.PUT_LINE('ID no existe!!');
      WHEN error_nodataf THEN
       DBMS_OUTPUT.PUT_LINE('No se han encontrado registros!');
       WHEN INVALID_CURSOR THEN
        DBMS_OUTPUT.PUT_LINE('Cursor no se ecneutra abierto');
      WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('error inesperado!!!!');
end;
/

3.- Crear un bloque PL/SQL que permita visualizar para cada empleado su apellido, salario e identificador de departamento, para aquellos empleados cuyo salario es mayor o igual a U$10.000 y trabajan en el departamento 80. Utilice un tipo de dato compuesto (TABLE INDEX BY). (29,25 PTS)


SET SERVEROUTPUT ON
SET VERIFY OFF

DECLARE
        TYPE emp_table_type IS TABLE OF employees%ROWTYPE
        INDEX BY BINARY_INTEGER;

        Mi_emp_table   emp_table_type;

v_salary employees.salary%type:=10000;
v_id_dept employees.department_id%type:=80;
v_limit number(4);

CURSOR Mi_cursor IS
                    select *
                    from employees
                    where department_id= V_ID_DEPT
                    and salary >=V_SALARY;

BEGIN
SELECT COUNT(EMPLOYEE_ID)
INTO v_limit
from employees
where department_id= V_ID_DEPT
and salary >=V_SALARY;

OPEN Mi_cursor;
for i in 1..v_limit loop
fetch Mi_cursor into MI_EMP_TABLE(i);
end loop;

for i in 1..v_limit loop

DBMS_OUTPUT.PUT_LINE('Apellido: '||Mi_emp_table(i).last_name
		||' Salario: '||Mi_emp_table(i).salary
		||' ID Dept: '||Mi_emp_table(i).department_id);

  end loop;
END;

Riesgos de un proyecto

Publicado: 27 junio 2013 en Sin categoría
  • Probabilidad de amenaza
  • Contratienmpo
  • Acción que debe tener concecuencia

Proceso de riesgo

  • Identificar el riesgo
  • Analizar el riesgo (Cuantificar, Evaluar, Valorizar)
  • Valorizar el riesgo
  • Mitigar el riesgo

Generar un Plan de riesgo

¿Que es un riesgo?

¿Proceso de evaluacion de riesgos?

¿Cuales son los riesgos en un proyecto de tecnologioas?

  • Renuncia de las personas involucradas en el proyecto
  • Mala toma de requerimientos
  • falta de licencias de software
  • falta de proveedores confiables
  • mala eleccion del modelo de desarrollo
  • fechas poco realistas
  • metas demasiado altas
  • defenicion de recursos poco claros o ambiguos
  • falta de un plan de prevencion
  • falta de recursos economicos
  • mal diseño de la base de datos
  • Agregar personas al proyecto sin la planificacion
  • cambio en las prioridades del proyecto
  • equipo humano poco comprometido
  • equipo humano sin las competecias tecnicas

¿Que significa Analñizar un Riesgo?

  • Identificar las consecuencias
  • Identificar el impacto
  • evaluar factores internos o externos
  • Cuantificarlo (medir la magnitud del riesgo)
  • priorizar
  • probabilidad de ocurrencia
  • Costo

Mitigacion del riesgo

  • Asignar
  • Recursos (humanos, tecnicos, materiales, tiempo, economicos)

Plan de Riesgo =D

Día 2 con jQuery!

Publicado: 7 marzo 2012 en jQuery

En el siguiente ejemplo y complementando el anterior veremos el efecto de relación entre jQuery y el DOM (Document Object Model o Modelo de Objetos del Documento’ o ‘Modelo en Objetos para la Representación de Documentos) en si la plantilla de representación de nuestro HTML.

Este es el efecto que provoca, si al cargar se ejecuta la función antes de haber cargado el contenido del DOM como no encuentra las listas no se realiza cambio alguno, y para que funcione la forma es que se cargue el DOM y después se ejecute la función, pero…. tendré siempre que colocar el evento jQuery al final??

Para este nuestro 2º ejemplo resolveremos esta interrogante.

...
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<body>

<ul>
 <li>Uno</li>
 <li>Dos</li>
 <li>Tres</li>
 </ul>

<script>
jQuery('ul li').css('color','blue');
</script>

</body> ...

Si nos fijamos en el ejemplo 1: Iniciando con jQuery! veremos que llamamos a la función de
jQuery luego de haber cargado las listas en las que tiene efecto, el porque de esto es
relativamente sencillo, al llamar a la función de jQuery el DOM dice Hey jQuery busca
dentro del DOM y edita la lista cambiando el color a azul, pero que pasa si llamo a la
función antes de que se termine de cargar el DOM???.

Ahora en el siguiente ejemplo veremos como resolver esto.

</pre>
<html>
<head>
 <title></title>
<!--Ubicamos nuestra librería de jQuery-->
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<!--Usaremos un estilo con una clase para añadir al selector que jQuery manipule al cual le dará el efecto de la letra en Negrita -->
<style>
 .enfasis { font-weight: bold;}

</style>
<!--...Y aquí utilizaremos el metodo $(document).ready() al cual le señalamos la funcion de añadir al primer elemento de la lista a la clase enfasis, esto es decir Hey! jQuery una vez que el DOM este listo realiza la funcion de agregar al selector a la clase enfasis.-->
 <script>
 $(document).ready(function(){
 $('li:first-child').addClass('enfasis');

});

</script>
</head>
<body>

<ul>
 <li>Uno</li>
 <li>Dos</li>
 <li>Tres</li>

</ul>
</body>
</html>

Y así resolvemos el que no tengamos que llamar a la función al final luego de que cargue el DOM.

Iniciando con jQuery!

Publicado: 2 marzo 2012 en jQuery

1) Para Comenzar primero veamos que es JQuery…?

jQuery es una biblioteca de JavaScript, creada inicialmente por John Resig, que permite simplificar la manera de interactuar con los documentos HTML, manipular el árbol DOM, manejar eventos, desarrollar animaciones y agregar interacción con la técnica AJAX a páginas web. Fue presentada el 14 de enero de 2006 en el BarCamp NYC.


2) 
Lo que necesitamos…jQuery es software libre y de código abierto, posee un doble licenciamiento bajo la Licencia

MIT y la Licencia Pública General de GNU v2, permitiendo su uso en proyectos libres y privativos. jQuery, al igual que otras bibliotecas, ofrece una serie de funcionalidades basadas en JavaScript que de otra manera requerirían de mucho más código, es decir, con las funciones propias de esta biblioteca se logran grandes resultados en menos tiempo y espacio.

En http://jquery.com podemos esncontrar 2 versiones de esta misma librería: la de produccion y la de desarrollo que basicamente la diferencia entre una y otra son los comentarios añadidos en la versión de desarrollo, ya uds podran descargar y ver las 2 versiones y utilizar la que prefieran.

Ahora necesitamos un edi

tor de texto o para los mas valientes notepad, en mi caso uso sublime Text 2, les dejo el enlace para su descarga http://www.sublimetext.com/2 ahi uds eligen según el OS que ocupen.

Ahora empecemos con jQuery

<html>
<head>
 <title>Primer ejemplo con jQuery</title>
</head>
<body>

<ul>
 <li>Uno</li>
 <li>Dos</li>
 <li>Tres</li>
 </ul>

<!--Hasta ahora todo va normal dentro del DOM, Aquí pondremos nustra libreria de jQuery en mi caso la version 1.7.1 -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<!--Aca dentro de otro script cargamos el evento jQuery que es la funcion propiamente tal que en la mayoría de los casos lo veremos simplificado con el simbolo $, y para nuestro primer ejemplo solo veremos el efecto que tiene sobre diseño en selectores,
Aquí lo que le decimos a la funcion es que busque las listas y sea cual sea el color que tengan se cambien a azul -->
<script>
jQuery('ul li').css('color','blue');
</script>

</body>
</html>

Mas adelante seguire avanzando mostrando ejemplos mas adentrados en el mundo de jQuery pero es mejor comenzar con algo sencillo. =D

Juego «El Colgado en JAVA»

Publicado: 15 noviembre 2011 en JAVA

Desde hace un par de semanas un amigo que se encuentra cursando el ramo de POO (Programación Orientada a Objetos) me pidio un poco de ayuda para empezar a hacer el juego del colgado…. bueno en fin medio lateado ya eran casi las 2 am lo ayude en su duda y al dia siguiente por ocio empece a programar claro obviamente no para darle la tarea hecha a mi amigo pero si con la intención de recordar algunas cosas de cuando hice ese ramo. Bueno aquí mi simple solución, eso si por consola,  aunque en Frame no varía mucho es casi lo mismo. Es de esperar que sirva para futuras genereciones xD =)

import java.util.*;

public class Colgado {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
//palabras del juego
String palabras[]={"hola","chao","duoc","corazon","automovil"};
//para comparar la palabra formada con las letras ingresas y la variable palabraJuego
String palabraFinal = "";
//entrada de letras desde teclado
Scanner entrada=new Scanner(System.in);
//palabra al azar sacada del array palabras
String palabraJuego= palabras[(int) (Math.random()*palabras.length)];
String letrasPalabras[] =new String[palabraJuego.length()];
//variable para almacenar los * de la palabra
String palabraOculta="";
//array para separar palabra por letras
String palabraresp[]=new String[palabraJuego.length()];
//transformando la palabra dependiendo de su largo a la cantidad de *
for(int i=0;i<palabraJuego.length();i++){
letrasPalabras[i]=String.valueOf(palabraJuego.charAt(i));
palabraOculta=palabraOculta+"*";
palabraresp[i]="*";

}
//inicio del juego
System.out.println("Buesque la Palabra...");
System.out.println();
//muestro la los * correspondientes a la palabra oculta
System.out.println(palabraOculta);

//vidas
int vidas=5;
//letras ingredas por el jugador
String letraIngresada[]=new String[100];

// inicio del ingreso de letras llenando el array de letras ingresadas por el jugador
for(int q=0;q<letraIngresada.length;q++){
System.out.println("Ingrese una letra: ");
letraIngresada[q]=entrada.nextLine().toLowerCase();
//pariendo desde la 2ª letra ingresadacomparo con las que voy ingresando y advierto
//al jugador sies que ya ha ingresado una letra mas de una vez
if(q>=1){
for(int a=0;a<q;a++){
if(letraIngresada[a].equalsIgnoreCase(letraIngresada[q])){
System.err.println("Ya Ingresaste esa letra, Intenta denuevo...");

}}}

//si la palabra contiene la letra ingresada...
if(palabraJuego.contains(letraIngresada[q])==true){

//si lo que se ingresa es acertivamente la palabra fin de juego Jugador Gana
if(palabraJuego.equalsIgnoreCase(letraIngresada[q])){

System.out.println("GANASTE, La palabra oculta era: "+palabraJuego);
System.exit(0);
}
//recorro la palabra del juego y comparo si las letras ingresadas con las de la palabra
// y reemplazo la letra en la posicion que corresponde dentro del arreglo
for(int e=0;e<palabraJuego.length();e++){
if(letraIngresada[q].equalsIgnoreCase(letrasPalabras[e])){
palabraresp[e]=letraIngresada[q];

}

}
//guardo cada posicion del array de letras correctas y las meto solo en una variable tipo String
String palabraW="";
for(int z=0;z<palabraJuego.length();z++){
palabraW=palabraW+palabraresp[z];

}
//voy actualizando la variable cada vez que ingreso una letra para ir comparando si es = a la palabra original
palabraFinal=palabraW;
//muestro al jugador las letras que lleva acertadas en la posicion ej: **e**
System.out.println(palabraW);
System.out.println();

}else{
//si lo anterior no se cumple advierto de que la letra no se encuentra y resto una vida de un total de 5
System.out.println("no esta, una vida menos");
vidas--;
//ademas advierto mostrando el estado acual de las letras descubiertas hasta el momento
String palabraL="";
for(int z=0;z<palabraJuego.length();z++){
palabraL=palabraL+palabraresp[z];

}
//muestro las letras descubiertas en la palabraOculta hasta el momento
System.out.println(palabraL);
System.out.println();
//si se acaban las vidas termina el juego
if(vidas==0){
System.out.println("GAME OVER!");
System.exit(0);
}
}
//si la palabraFinal llenada despues de cada letra acertada es igual a la palabraJuego, el jugador Gana!
if(palabraFinal.equalsIgnoreCase(palabraJuego)){

System.out.println("GANASTE, La palabra oculta era: "+palabraJuego);
System.exit(0);
}

} }

}

Par e Impar en JAVA

Publicado: 8 octubre 2011 en JAVA

Hola, Bueno en esta pequeña demo va un ejemplo simple de como mostrar y separar numeros pares e impares ingresados a un Array y al mostrarlos queden ordenados de menor a mayor=D espero y sirva de ayuda.


import java.util.Scanner;

public class ParImpar {

public static void main(String[] args) {

Scanner entrada= new Scanner(System.in);
System.out.println("Cuantos Numeros desea Ingresar: ");
int miArray[]= new int[entrada.nextInt()];

//llenando el Array
for(int e=0;e<miArray.length;e++){
System.out.println("Ingrese el "+(e+1)+"º numero: ");
miArray[e]= entrada.nextInt();

}

//ordenando
for(int i=0;i<miArray.length;i++){
int min=i;
for(int j=i+1;j<miArray.length;j++)     {
if(miArray[j]<miArray[min])      {
min=j;}
}
if(i!=min){
int aux =miArray[i];
miArray[i]=miArray[min];
miArray[min] = aux;}
}

//mostrando pares
System.out.println("Numeros Pares");
for(int i=0;i<miArray.length;i++){
if(miArray[i]%2==0){

System.out.println(miArray[i]);
}else{
i=miArray.length;
System.out.println("No se ingresaron numeros pares!");
}

}

//mostrando impares
System.out.println("Numeros Impares");
for(int i=0;i<miArray.length;i++){
if(miArray[i]%2!=0){

System.out.println(miArray[i]);
}else{
i=miArray.length;
System.out.println("No se ingresaron numeros impares!");
}

}

}
}

Ejemplos de Array en JAVA

Publicado: 4 octubre 2011 en JAVA

Recordando viejos tiempos dejare un sencillo ejemplo de como almacenar registros numericos en un Array y luego que se muestre el mayor valor ingresado en este =D

Para este sencillo ejemplo solo utilizaremos una clase main.


import java.util.Scanner;

public class LlenaArray {

public static void main(String[] args) {
// creamos y declaramos nuestro Array tipo int de un tamaño de 4
int miArray[] = new int[4];

//Declaramos la entrada de teclado tipo Scanner para recibir los valores desde teclado
Scanner entrada = new Scanner(System.in);

//recorremos el largo de nuestro arreglo para ir llenando las posiciones
for (int e = 0; e < 4; e++) {
//mensaje para que el usuario sepa cuando tiene que ingresar un valor
System.out.println("Ingrese el " + (e + 1) + "º numero: ");
//asignamos el valo recibido desde teclado al array en cada posicion
miArray[e] = entrada.nextInt();

}
//Buscando el mayor valor ingresado al array
//declaramos una variable numerica para almacenar nuestro primer registro del array
int numeroBase = miArray[0];

//recorremos nuestro array desde la 2ª posicion para ir comparandola con el valor de la 1ª
//posicion almacenada en nuestra variable
for (int e = 1; e < 4; e++) {
//preguntamos si nuestra variable es nemor a cada posicion del array
if (numeroBase < miArray[e]) {
//si nuetra variable es menor sobreescribimos nuestra variable con el valor de la variable
//comparada y seguimos comparando las demas posiciones
numeroBase = miArray[e];

}
}
//imprimimos el mensaje con el valor que quedo almacenado en la variable ya que es el mayor valor
System.out.println("El numero mayor ingresado es el: " + numeroBase);

}
}

Ahora haremos lo mismo pero para datos tipo String y en este caso buscaremos la palabra mas larga ingresada
al Array =D


import java.util.Scanner;

public class NewClass {

public static void main(String[] args) {
// creamos y declaramos nuestro Array tipo int de un tamaño de 4
String miArray[] = new String[4];

//Declaramos la entrada de teclado tipo Scanner para recibir los valores desde teclado
Scanner entrada = new Scanner(System.in);
//recorremos nuestro array desde la 2ª posicion para ir comparandola con el valor de la 1ª
//posicion almacenada en nuestra variable
for (int e = 0; e < 4; e++) {
//preguntamos si nuestra variable es nemor a cada posicion del array
System.out.println("Ingrese el " + (e + 1) + "ª palabra: ");
//asignamos el valo recibido desde teclado al array en cada posicion
miArray[e] = entrada.nextLine();

}
//Buscando la palabra mas larga ingresada al array
//declaramos una variable String para almacenar nuestro primer registro del array
String palabraBase = miArray[0];

//recorremos nuestro array desde la 2ª posicion para ir comparandola con el valor de la 1ª
//posicion almacenada en nuestra variable
for (int e = 1; e < 4; e++) {
//preguntamos si el largo de nuestra variable variable es menor a cada posicion del array .length()
if (palabraBase.length() < miArray[e].length()) {
//si nuetra variable es menor sobreescribimos nuestra variable con el valor de la variable
//comparada y seguimos comparando las demas posiciones
palabraBase = miArray[e];

}
}
//imprimimos el mensaje con el valor que quedo almacenado en la variable ya que es el mayor valor
System.out.println("La palabra mas larga ingresada es: " + palabraBase);

}
}

Usaremos la herramienta IDE Netbeans en mi caso 7.0

Y en este crearemos un nuevo proyecto con 2 paquetes dentro quedando de esta manera para que se mas ordenado:

Si se fijan tenemos un JFRAME llamado Ventana y una clase de java llamada JPanelConFondo y mas abajo un paquete que contiene la foto que usaremos para poner en el fondo de nuestra ventana.

Ahora programaremos nuestra JPanelConFondo

package ejemplofotofondo;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class JPanelConFondo extends JPanel {

    private Image imagen;

    public JPanelConFondo() {
    }

    //constructor con parametro para setear la imagen que queremos mostrar cargandola como ruta
    public JPanelConFondo(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(getClass().getResource(nombreImagen)).getImage();
        }
    }
//constructor con parametro para setear la imagen que queremos mostrar cargandola como una imagen almacenada e algun atributo tipo Image
    public JPanelConFondo(Image imagenInicial) {
        if (imagenInicial != null) {
            imagen = imagenInicial;
        }
    }
//de la misma forma que en el primer constructor tengo mi set de la imagen desde una ruta como String  y usando el repaint para actualizar
//el componente de la imagen contenida
//  repaint(): Lo llamamos explícitamente para que cuando cambiemos la imagen esta se muestre inmediatamente.

//  Si el parámetro nuevaImagen es null, veremos el fondo por defecto.

    public void setImagen(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(getClass().getResource(nombreImagen)).getImage();
        } else {
            imagen = null;
        }

        repaint();
    }
//igual como el segundo constructor tengo mi set de la imagen desde un atributo tipo Image  y usando el repaint para actualizar
//el componente de la imagen contenida
    public void setImagen(Image nuevaImagen) {
        imagen = nuevaImagen;

        repaint();
    }
//sobreecribo mi metodo paint agregandole los valores de la imagen ya seteada (imagen con su ancho y alto)
    @Override
    public void paint(Graphics g) {
        if (imagen != null) {
            //    g.drawImage: dibujamos la imagen (guardada en el atributo “imagen”) en toda la extension del panel
            g.drawImage(imagen, 0, 0, getWidth(), getHeight(), this);

            //    setOpaque(false): le indicamos al panel que no dibuje su fondo por defecto (sino este taparía la imagen)
            setOpaque(false);
        } else {

            setOpaque(true);
        }

//    super.paint(g): le indicamos al panel que continúe dibujando el resto de los componentes
        super.paint(g);
    }
}

Con esto ya tenemos casi todo el trabajo hecho ahora solo falta invocar a nuestra clase JPanelConFondo en nuestro JFrame en el constructor casteando un Jpanel que añadiremos al diseño.
Aquí el codigo que pondremos en nuestro constructor del JFrame Ventana seteando la imagen en el setImagen, esta puede ser desde el paquete como la que usaremos ahora o directamente desde una ruta de nuestro pc.

public class Ventana extends javax.swing.JFrame {

    /** Creates new form Ventana */
    public Ventana() {
        initComponents();
//aki es donde ponemos nuestra foto como fondo de nuestra ventana//
        ((JPanelConFondo) panelFondo).setImagen("foto/foto.jpg");

    }
//......

Con esto hecho ya solo ejecutamos y tenemos una ventana con un fondo editado o una imagen personalizada.
=D

El pase de diapositivas requiere JavaScript.

Aprendizaje:

Reconocer las Tecnicas de planificación.

  • ¿Que es un diagrama Gantt?
  • ¿Que elementos lo conforman?

1

El diagrama de Gantt consiste en una representación gráfica sobre dos ejes; en el vertical se disponen las tareas del proyecto y en el horizontal se representa el tiempo.

  • Características
  • Cada actividad se representa mediante un bloque rectangular cuya longitud indica su duración; la altura carece de significado.
  • La posición de cada bloque en el diagrama indica los instantes de inicio y finalización de las tareas a que corresponden.
  • Los bloques correspondientes a tareas del camino crítico acostumbran a rellenarse en otro color (en el caso del ejemplo, en rojo).

 Tarea

 Predec.

 Duración

A

2

B

A

3

C

2

D

C

3

E

DII+1

2

F

BFI-1

3

G

D, E, F

3

H

GFF

2

2. Método constructivo

Para construir un diagrama de Gantt se han de seguir los siguientes pasos

  • Dibujar los ejes horizontal y vertical.
  • Escribir los nombres de las tareas sobre el eje vertical.
  • En primer lugar se dibujan los bloques correspondientes a las tareas que no tienen predecesoras. Se sitúan de manera que el lado izquierdo de los bloques coincida con el instante cero del proyecto (su inicio).
  • A continuación, se dibujan los bloque correspondientes a las tareas que sólo dependen de las tareas ya introducidas en el diagrama. Se repite este punto hasta haber dibujado todas las tareas. En este proceso se han de tener en cuenta las consideraciones siguientes:
  • Las dependencias fin-inicio se representan alineando el final del bloque de la tarea predecesora con el inicio del bloque de la tarea dependiente.

  • Las dependencias final-final se representan alineando los finales de los bloques de las tareas predecesora y dependiente.
  • Las dependencias inicio-inicio se representan alineando los inicios de los bloques de las tareas predecesora y dependiente.
  • Los retardos se representan desplazando la tarea dependiente hacia la derecha en el caso de retardos positivos y hacia la izquierda en el caso de retardos negativos.

3. Cálculos

El diagrama de Gantt es un diagrama representativo, que permite visualizar fácilmente la distribución temporal del proyecto, pero es poco adecuado para la realización de cálculos.

Por la forma en que se construye, muestra directamente los inicios y finales mínimos de cada tarea.

Ejemplo:

Construcción

El primer paso en la creación de un diagrama de Gantt es dibujar el eje de tiempos, horizontal, y el eje de tareas, vertical. En el primero se representa la escala de tiempos del proyecto y en el segundo se disponen los nombres de las tareas.


Construcción

A continuación, cada tarea cuyo inicio o finalización no dependa de ninguna otra tarea se representa mediante un rectángulo de altura arbitraria y longitud equivalente a su duración. Dichos rectángulos deben tener su origen en el punto 0 del eje de tiempos, y estar a la altura que les corresponda en el eje de tareas.

 Tarea

 Predec.

 Duración

A

2

B

A

3

C

2

D

C

3

E

DII+1

2

F

BFI-1

3

G

D, E, F

3

H

GFF

2

Construcción

Seguidamente, se han de buscar todas las tareas que tienen como predecesoras a las ya introducidas en el diagrama. En el caso de las relaciones fin-inicio, como en las tareas B y D, los rectángulos que las representan deben tener su origen en la vertical del final de las tareas de las que dependen.

 Tarea

 Predec.

 Duración

A

2

B

A

3

C

2

D

C

3

E

DII+1

2

F

BFI-1

3

G

D, E, F

3

H

GFF

2

Construcción

Continuamos el proceso para cada tarea que tenga como única predecesora alguna de las ya dibujadas en el gráfico. Obsérvese que el inicio de E depende del inicio de D con retardo, por lo que se han de alinear los inicios de ambas tareas y desplazar E a la derecha para introducir el retardo correspondiente. En el caso de F la relación es fin-inicio y el retardo negativo, por lo que F se debe desplazar hacia la izquierda.

 Tarea

 Predec.

 Duración

A

2

B

A

3

C

2

D

C

3

E

DII+1

2

F

BFI-1

3

G

D, E, F

3

H

GFF

2

Construcción

En este paso estamos en condiciones de añadir la tarea G, que depende de D, E y F. Para ubicarla en el gráfico se deben tomar en cuenta cada una de las dependencias, y situarla según la dependencia más restrictiva, esto es, la que posicione a G más a la derecha.

 Tarea

 Predec.

 Duración

A

2

B

A

3

C

2

D

C

3

E

DII+1

2

F

BFI-1

3

G

D, E, F

3

H

GFF

2

Construcción

Por último, se añade la tarea H, que presenta una dependencia final-final con la tarea G. Las relaciones final-final se representan alineando los finales de las tareas, como se indica en el diagrama.

 Tarea

 Predec.

 Duración

A

2

B

A

3

C

2

D

C

3

E

DII+1

2

F

BFI-1

3

G

D, E, F

3

H

GFF

2

Construcción

Finalmente, una vez realizados los cálculos del proyecto utilizando un sistema adecuado, como el diagrama PERT o el Roy, resulta conveniente destacar con un color distinto las tareas con margen total 0, para poder identificar con facilidad los caminos críticos.

Hito:

  • Punto de referencia que marca un evento importante n un proyecto.
  • Forma de conocer el proyecto, sin estar familiarizado con el.
  • Finalización de un hecho importante.
  • Trabajo de duración cero que simboliza un logro.

Introducción y conceptos básicos

La Informática está presente en todas las actividades de la empresa y actúa en cada una de las partes de ella; la informática es un instrumento al servicio de un objetivo, el cual es captar datos del medio externo e interno, procesarlos, combinarlos o relacionarlos y así producir información, esta información es vital para la toma de decisiones al interior de la empresa lo que se ve reflejado en las decisiones de los directivos en el manejo de los proyectos y la empresa como ente activo y cambiante en el tiempo.

  • Empresa: La Empresa es una organización que tiene por objetivo producir bienes y o generar servicios para satisfacer las necesidades de la comunidad. La Organización es un conjunto de elementos o recursos (humanos, financieros, tecnológicos, materiales, informáticos, etc.) que se reúnen para cumplir un propósito determinado.
  • Computación e Informática: La informática es la ciencia que se encarga del automatización del manejo de la información, procesando datos, utilizando equipos de procesos automáticos de información. Inicialmente la tecnología informática se utilizó para administración de tangibles como inventarios y producción. Ahora se abre camino su uso para intangibles como el conocimiento y la capacitación. Hasta hace muy poco, la tecnología informática ha sido utilizada y justificada para administrar asuntos tangibles, como los inventarios, los recursos humanos en la nómina, la contabilidad y la producción. Los proyectos se justificaban con un rápido retorno en la inversión dado el alto costo de administrar estos recursos por cualquier otro medio, especialmente manual, y atendiendo todos los requerimientos de control que los gobiernos han trasladado a las empresas.
  • Recursos: Dentro del contexto de la informática se puede caracterizar la información como un recurso competitivo de la empresa, que se puede analizar en dos partes: Por un lado, se estudia su dimensión externa, es decir, su capacidad para aproximar a la empresa  en el entorno en el que opera. Por otro lado, se analiza su dimensión interna, es decir, sus implicaciones en los procesos directivos y de innovación y de generación del “Know-how”, destacando en especial esta última feseta, que presenta relevantes efectos positivos en la competitividad de la empresa. La Planificación de Recursos Empresariales es un término derivado de la Planificación de Recursos de Manufactura (MRPII) y seguido de la Planificación de Requerimientos de Material (MRP). Los sistemas ERP típicamente manejan la producción, logística, distribución, inventario, envíos, facturas y una contabilidad para la compañía de la Planificación de Recursos Empresariales o el software ERP puede intervenir en el control de muchas actividades de negocios como ventas, entregas, pagos, producción, administración de inventarios, calidad de administración y la administración de recursos humanos.
LA INFORMACIÓN COMO RECURSO COMPETITIVO. 

  • Sistemas: El término sistema de información financiera (CBIS) permite proporcionar a personas y grupos tanto de dentro como de fuera de la empresa de información relacionada con los asuntos financieros de la misma. Esta información consiste tanto de informes periódicos, como especiales, más resultados de simulaciones matemáticas, comunicaciones electrónicas y consejos de sistemas expertos.

La posibilidad de efectuar controles de gestión y presupuestaria, administrar el flujo de fondos (cash flow), y realizar pronósticos son algunas de las novedosas e importantes aplicaciones informáticas en materia financiera.

Así, el subsistema de administración de fondos ayuda a la gerencia no sólo a rastrear el flujo de dinero a través de la empresa, sino a influir en ese flujo. El modelo de flujo de efectivo se usa para simular el efecto de decisiones alternativas sobre el flujo. El flujo de efectivo que sale de una empresa es afectado por el presupuesto operativo. Los gerentes de todas las áreas de la organización usan el presupuesto como mecanismo de control. Los informes de presupuesto mensual durante el ejercicio fiscal indican a los gerentes qué tan bien se están desempeñando en relación con lo presupuestado. Los gerentes también usan relaciones para comparar el desempeño de sus unidades con estándares establecidos por la empresa, la industria a la que pertenece la empresa y el mundo de los negocios en general. Para todo ello el sistema informático debe dar propuestas y soluciones novedosas, creativas e innovadoras, que permitan mejorar el control sobre la marcha de la empresa.

Los sistemas ERP ocasionalmente son llamados back office (trastienda) ya que indican que el cliente y el público general no están directamente involucrados. Este sistema es, en contraste con el sistema de apertura de datos (front office), que crea una relación administrativa del consumidor o servicio al consumidor (CRM), un sistema que trata directamente con los clientes, o con los sistemas de negocios electrónicos tales como comercio electrónico, gobierno electrónico, telecomunicaciones electrónicas y finanzas electrónicas; así mismo, es un sistema que trata directamente con los proveedores, no estableciendo únicamente una relación administrativa con ellos (SRM). Los ERP están funcionando ampliamente en todo tipo de empresas modernas. Todos los departamentos funcionales que están involucrados en la operación o producción están integrados en un sólo sistema. Además de la manufactura o producción, almacenamiento, logística e información tecnológica, incluyen además la contabilidad, y suelen incluir un recursos humanos, y herramientas de mercadotecnia y administración estratégica. Los sistemas de planificación de recursos de la empresa (en inglés ERP, enterprise resource planning) son sistemas de gestión de información que integran y automatizan muchas de las prácticas de negocio asociadas con los aspectos operativos o productivos de una empresa.

Los sistemas ERP son sistemas integrales de gestión para la empresa. Se caracterizan por estar compuestos por diferentes partes integradas en una única aplicación. Estas partes son de diferente uso, por ejemplo: producción, ventas, compras, logística, contabilidad (de varios tipos), gestión de proyectos, GIS (sistema de información geográfica), inventarios y control de almacenes, pedidos, nóminas, etc. Solo podemos definir un ERP como la integración de todas estas partes. Lo contrario sería como considerar un simple programa de facturación como un ERP por el simple hecho de que una empresa integre únicamente esa parte. Ésta es la diferencia fundamental entre un ERP y otra aplicación de gestión. El ERP integra todo lo necesario para el funcionamiento de los procesos de negocio de la empresa. No podemos hablar de ERP en el momento que tan sólo se integra uno o una pequeña parte de los procesos de negocio. La propia definición de ERP indica la necesidad de «Disponibilidad de toda la información para todo el mundo todo el tiempo».

Los objetivos principales de los sistemas ERP son:

  • Optimización de los procesos empresariales.
  • Acceso a toda la información de forma confiable, precisa y oportuna (integridad de datos).
  • La posibilidad de compartir información entre todos los componentes de la organización.
  • Eliminación de datos y operaciones innecesarias de reingeniería).

El propósito fundamental de un ERP es otorgar apoyo a los clientes del negocio, tiempos rápidos de respuesta a sus problemas así como un eficiente manejo de información que permita la toma oportuna de decisiones y disminución de los costos totales de operación.

Las características que distinguen a un ERP de cualquier otro software empresarial, es que deben de ser sistemas integrales, con modularidad y adaptables.

Sistemas de información para ventas y marketing, conformado por el subsistema de producto el cual suministra información acerca de los productos de la empresa, el subsistema de colocación el cual genera información vinculada a la red de distribución de la empresa, el subsistema de promoción encargada de informar acerca de las actividades de publicidad y ventas del personal de la empresa, el subsistema de precios, el cual ayuda al gerente en la adopción de decisiones concernientes a dicho aspecto, y el subsistema de mezcla integral que permite el desarrollo de estrategias que tomen en consideración todos los aspectos del marketing.

Una importancia creciente dentro de la estrategia empresaria lo tiene la utilización de software destinado a la predicción de ventas, como así también al análisis paretiano de la rentabilidad por producto, línea de productos o servicios, zonas o regiones, formas de distribución, formas de pago, tamaño de las ventas, clientes y tipos de consumidores entre muchas otras.
Sistemas de información de Recursos Humanos, todos los aspectos concernientes a la mas eficaz y eficiente administración de los recursos humanos mediante el manejo de nuevos y poderosos recursos informáticos resulta clave y fundamental. Entre los aspectos a considerar tenemos:

  • Control de asistencia de personal.
  • Ubicación de personal en la planta.
  • Control de productividad laboral.
  • Recepción de currículum.
  • Sistema de información interna.
  • Liquidación de sueldos y administración de vacaciones, permisos y otros eventos.
  • Inventario de recursos humanos.
  • Sistema para la comunicación y posterior gestión de sugerencias del personal.
  • Sistema para el aviso de alertas (sistema de prevención).
  • Gestión del Conocimiento.

Sistemas basados en el conocimiento, la Inteligencia Artificial (AI) se está aplicando actualmente en los negocios en forma de sistemas basados en el conocimiento, que utilizan conocimiento humanos para resolver problemas. El tipo más popular de sistema basado en el conocimiento es el sistema experto. Un sistema experto es un programa que intenta representar los conocimientos de expertos humanos en forma heurística.

Una de las aplicaciones más importantes de estos sistemas en las empresas tienen lugar a la hora de entrenar a gerentes en materia de tácticas y estrategias, sobre todo en lo concerniente a temas de marketing y finanzas.

Entre los múltiples usos de la AI se tienen temas concernientes al mantenimiento predictivo y preventivo, la fijación de precios, la preparación de presupuestos, el análisis crediticio, el análisis de ratios, detección rápida de eventos y detección de fraudes entre otras muchas y variadas aplicaciones.