viernes, 1 de marzo de 2019

Cuando la solución es peor que el problema

Hace algunos meses atrás la SUNAT, obligo a algunas empresas a contratar un Operador de Servicios Electrónicos (OSE), con la finalidad de mejorar la calidad del servicio de la validación de comprobantes electrónicos y la emisión de las constancias de recepción (CDR).

En mi centro de labores, estoy a cargo da la plataforma tecnológica de la empresa y dentro de mis obligaciones hay una buena dosis de gestión del proyecto de facturación electrónica.

Como todo buen peruano soy respetuoso de la constitución, las leyes, las normas, resoluciones, etc. Así que mi recomendación fue alinearnos a las nuevas exigencias relacionados a la emisión de comprobantes de pago electrónico, eso implicaba los siguiente:
  1. Migrar el sistemas de facturación electrónica de UBL 2.0 a UBL 2.1. Como plazo máximo al 15/02/2019 (Obligados a partir del 01/03/2019)
  2. Por ser principales contribuyentes (PRICOS), Intendencia Lima, teníamos que contratar un Operador de Servicios Electrónicos (OSE). Antes del 01/03/2019 con la finalidad de utilizar su ambiente de pruebas (Test).
  3. Pasar todo a producción el 22/02/2019 a fin de ajustar los inconvenientes los días 23 y 24 debido a que el personal que factura no trabajan los sábados y domingos.
.....continuara.....

lunes, 3 de octubre de 2016

IMAGENES CON GLASSFISH E IREPORT

1. Base de datos MySQL
 


2. Clase java: Para efectos practicos tomar en cuenta solo la parte sombreada con rojo.

public class Reportes {
    private String xcodigo;
    private String xDescAreaser;
    private byte[] ximgfoto;

    //kITS DE CONTRATAS
    public Reportes(String xcodigo, String xDescAreaser, byte[] ximgfoto) {
        this.xcodigo = xcodigo;
        this.xDescAreaser = xDescAreaser;
        this.ximgfoto = ximgfoto;
    }

    public String getXcodigo() {
        return xcodigo;
    }

    public void setXcodigo(String xcodigo) {
        this.xcodigo = xcodigo;
    }

    public String getxDescAreaser() {
        return xDescAreaser;
    }

    public void setxDescAreaser(String xDescAreaser) {
        this.xDescAreaser = xDescAreaser;
    }

    public byte[] getXimgfoto() {
        return ximgfoto;
    }

    public void setXimgfoto(byte[] ximgfoto) {
        this.ximgfoto = ximgfoto;
    }
}


3. Ireport 4.7.0: El field de Ireport debe tener el mismo nombre que el atributo de la clase.



4. Pasar coleccion de datos para luego exportarlo a pdf.
El metodo esta preparado para Primefaces.

public void exportToPdf(ActionEvent actionEvent) throws JRException, IOException {
        JasperPrint jasperPrint = null;
        List lstRep = new ArrayList();
        if (lstHomKitcontrata != null) {
            for (HomKitcontrata obj : lstHomKitcontrata) {
                lstRep.add(new Reportes(
                        obj.getXcod(),
                        obj.getHomAreaservicioId().getXdesc(),
                        obj.getCnfEntidadesotId().getXimgfoto()
                )
                );
            }
            JRBeanCollectionDataSource beanCollectionDataSource = new JRBeanCollectionDataSource(lstRep);
            String report = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/protegido/operador/reportes/rep_kitscontrata.jasper");
            jasperPrint = JasperFillManager.fillReport(report, new HashMap(), beanCollectionDataSource);
        }

        HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

        httpServletResponse.addHeader("Content-disposition", "inline; filename=rep_kitscontrata.pdf");

        ServletOutputStream servletStream = httpServletResponse.getOutputStream();

        JasperExportManager.exportReportToPdfStream(jasperPrint, servletStream);

        FacesContext.getCurrentInstance().responseComplete();
    }

5. Ejecutar el metodo desde .xhtml y primefaces.
<p:commandButton id="exportToPdfButton" icon="ui-icon-document" value="Exportar" onclick="form.target = '_blank'" actionListener="#{homKitcontrataBean.exportToPdf(actionEvent)}" ajax="false" />

6. Resultado








miércoles, 24 de agosto de 2016

TABLA SALARIAL DE CONSTRUCCIÓN CIVIL


La federación de trabajadores de construcción civil del Perú (FTCCP) y la Cámara Peruana de la Construcción (CAPECO), firmaron el Acta final de la Negociación Colectiva por Rama de Actividad del Sector Construcción, que establece aumentos a los trabajadores por encima de la inflación acumulada y que rige desde el 1 de junio de 2016. Estas negociaciones colectivas se realizan todos los años, teniendo un común denominador sobre su vigencia desde el 1 de junio del año actual al 31 de mayo del año siguiente.

La publicación de la tabla salarial sucede después del primero de junio, aproximadamente en el mes de agosto, lo que trae como consecuencia el pago de reintegros de todas las planillas generadas con la tabla salarial vencida. Para calcular los reintegros se usan los coeficientes que se indican en la tabla salarial de reintegros. Para ver y descargar la tabla salarial estándar y de reintegros del periodo (Del 01.06.2016 al 31.05.2017) puede dar clic en el enlace que se muestra a continuación.

jueves, 22 de octubre de 2015

Sistema de Control de Versiones Mercurial

Mercurial (hg): Es un sistema de control de versiones distribuido que da a cada desarrollador de una copia local con toda la historia del desarrollo. Esta forma de trabajo independiente de acceso a la red o en un servidor central. Ademas compromete, crea ramas y la mezcla rápido y barato(mercurial).

TortoiseHg: Es una extensión de shell de Windows y una serie de aplicaciones para el Mercurial sistema de control de versiones distribuido. También incluye una extensión de Gnome / Nautilus y una aplicación envoltorio CLI por lo que las herramientas TortoiseHg se puede utilizar en plataformas no Windows. (tortoisehg)

Sentencias básicas de Mercurial: 

  • Crear un nombre de una rama:  $ hg branch rama_nombre
  • Muestra el usuario actual: hg branch
  • muestra el estado de cambios: hg st
  • Añadir los nuevos archivos a Mercurial: hg ci -A -m "mensaje o comentario" 
  • Jala los cambio de un servidor xx: hg pull
  • Muestra el árbol, de cambios: hg log --grap 
  • Realiza la mezcla con otro usuario: $ hg merge otro_usuario 
  • Ver las revisiones que se han fusionado en el directorio de trabajo: hg parents
  • Empujar sus cambios al repositorio: hg push
  • Revisar el historial: hg log

sábado, 29 de agosto de 2015

PLANTILLA DE DOCUMENTOS CON JAVA Y MS OFFICE (.docx)

En el proceso de desarrollo de software se presenta en muchos casos la necesidad de automatizar la generación de documentos como cartas, certificados, contratos, etc. con formatos bien específicos.  Esta situación no ha sido ajena para mí, un tiempo atrás desarrolle un sistema de planillas con Tecnología Java, que además de los cálculos debía generar los diferentes formatos de las certificaciones, liquidaciones y cartas dirigidas a los trabajadores y a las diferentes entidades.

Para la generación de las liquidaciones de beneficios sociales se utilizaba una Hoja de Cálculo generado por el sistema a la cual se le enlazaba a una plantilla Word mediante la combinación de correspondencia pero aun así era un trabajo que demandaba mucho tiempo adicional.

Para solucionar el inconveniente decidí probar algunas soluciones que se pudieran integrar al sistema encontrándome en el proceso con xdocreport, que es una API Java para fusionar documentos XML creados con MS Office (docx, pptx) o OpenOffice (odt), LibreOffice (odt) con un modelo de Java para generar el informe y convertirlo si necesita a otro formato. (Visitar: xdocreport).

 A continuación Presento algunos pantallazos del sistema.

PLANTILLA EN WORD 2013 (*.DOCX): CERTIFICADO DE RENTAS Y RETENCIONES A CUENTA DEL IMPUESTO DE CUARTA CATEGORÍA.

 

INTERFAZ QUE MUESTRA EL CONSOLIDADO DE CERTIFICADOS DE CUARTA CATEGORÍA A GENERAR.


SELECCIÓN DE LA RUTA EN DONDE SE GUARDARA LOS CERTIFICADOS GENERADOS.


DESPUÉS DE HABER SELECCIONADO EL DIRECTORIO SE GENERAN LOS CERTIFICADOS Y SE INDICA EL DESTINO PARA SU VERIFICACIÓN Y USO.


VERIFICAMOS EN EL DIRECTORIO SELECCIONADO LOS CERTIFICADOS GENERADOS.


REPRODUCCIÓN DE UNO DE LOS CERTIFICADOS GENERADOS. 



miércoles, 8 de julio de 2015

Cambiar Puerto 8080 GlassFish 4.1 - Netbenas

Vamos a cambiar el puerto por defecto 8080 por 8083


Ingresamos al directorio indicado en la imagen siguiente (Rectangulo Rojo):
C:\Users\dev01\AppData\Roaming\NetBeans\8.0.1\config\GF_4.1\domain1\config\domain.xml


Editamos el puerto 8083 en la posicion indicada en la siguiente imagen (Rectangulo Rojo)


Reiniciamos el netbeans y podra usar el GlassFish con el nuevo puerto.



viernes, 6 de marzo de 2015

JASPER SERVER ERROR: java.lang.OutOfMemoryError

Para corregir el error en S.O Windows, se debe agregar o modificar la siguientes linea

>>> set JAVA_OPTS=%JAVA_OPTS% -Xms2048m -Xmx3072m -XX:PermSize=1024m -XX:MaxPermSize=2048m -Xss2m -XX:+UseCompressedOoops -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

en el archivo "catalina.bat" del  jasper server: por ejemplo >>> C:\Jaspersoft\jasperreports-server-cp-5.6.1\apache-tomcat\bin\catalina.bat

miércoles, 11 de febrero de 2015

Cambiar la coma por punto decimal en Ireport

1. Configurar en Ireport lo siguiente:


2. En el metodo que ejecutara el reporte, agregar un parametro adicional:

parametro.put(JRParameter.REPORT_LOCALE, Locale.ENGLISH);

3. Reporte ejecutado:


martes, 6 de enero de 2015

Tips MySql

Configurar la cantidad maxima de conexiones de mysql usando XAMPP. La ruta del archivo es: X:\xampp\mysql\bin\my.ini donde X: representa la unidad en donde se instalo XAMPP

  •  key_buffer = 16M 
  • max_allowed_packet = 1M 
  • table_cache = 64 
  • max_connections=405 
  • sort_buffer_size = 512K 
  • net_buffer_length = 8K 
  • read_buffer_size = 256K 
  • read_rnd_buffer_size = 512K 
  • myisam_sort_buffer_size = 8M 
  • log_error = "mysql_error.log"
Para windows 7 considerar, como maximo 405 conexiones.




viernes, 1 de febrero de 2013

MOSTRAR IMAGEN EN FORMATO BLOB EN IREPORT

En esta oportunidad les mostrare como mostar una imagen guardada en una base de datos MySQL, en formato BLOB  o LONGBLOB.

La estructura de la tabla sera de la siguiente manera:



Expresado en  SQL:


CREATE  TABLE IF NOT EXISTS `bdsistemax`.`demo` (
  `id` INT(11) NOT NULL AUTO_INCREMENT ,
  `cadena` LONGBLOB NULL DEFAULT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB
AUTO_INCREMENT = 2
DEFAULT CHARACTER SET = latin1
COLLATE = latin1_swedish_ci


como podemos observar hay un registro en la base de datos


Una vez guardada la imagen no queda crear un reporte con la herramienta IREPORT, como se observa a continuación:


el objeto seleccionado corresponde a un Image:
En la propiedades del objeto Image ubicamos "Image Expression" y escribiremos las siguiente linea:

JRImageRenderer.getInstance((byte []) $F{demo_cadena})

como se muestra a continuación:


Luego de seguir los pasos nos queda compilar y probar la funcionalidad de nuestro reporte.


De esta manera se muestran en el Ireport las imágenes guardadas en formato blob en una base de datos MySQL.

No se olviden de comentar y cualquier consulta me pueden escribir al siguiente E-mail: camposvidallusmilo@gmail.com. Hasta la próxima oportunidad..

miércoles, 8 de diciembre de 2010

LA QUINTA DICIPLINA

LA QUINTA DICIPLINA

ENSAYO LA QUINTA DICIPLINA EN PERU
POR LUSMILO CAMPOS VIDAL

La evolución acelerada que han experimentado las empresas a nivel mundial desde el punto de vista socioeconómico, los tratados de libre comercio, la crisis fiscales entre otros puntos, están obligando a las empresas a crear organizaciones inteligentes, capaz de adaptarse con facilidad a las nuevas exigencias con alto espíritu de aprendizaje y de compartir sus conocimientos con otras organizaciones a fin de brindar productos y servicios de calidad, manteniendo una cultura de continuo aprendizaje teniendo de esta manera una nueva forma de vida organizacional.
¿Con esta nueva realidad nos bastara manejar nuestras organizaciones de manera tradicional en un mundo en constante cambio?
La respuesta es no,  porque los resultados financieros que sean buenos en este instante no asegura la sobrevivencia de la organización. Y Si creyéramos en ello estaríamos manejando nuestra organización como el juego de la gallina ciega.
Para poder tomar decisiones que determinaran el futuro de la organización, Peter Senge; nos presenta en su obra la quinta disciplina la forma de evaluar nuestra organización diseñando modelos dinámicos, en donde podemos ver las fluctuaciones de cada una de las variables. Algunos de los puntos que debemos de conocer para hacer un modelo dinámico son los siguientes.
Entender ¿qué es el pensamiento sistémico?, es un marco conceptual, un cuerpo de conocimiento y herramientas que se ha desarrollado en los últimos cincuenta años, para que los patrones totales resulten más claros, y para ayudarnos a modificarlos.
Aunque las herramientas son nuevas, suponen una visión del mundo extremadamente intuitiva; experimentos realizados con niños demuestran que ellos aprendan rápidamente el pensamiento sistémico.
¿Qué es dominio personal? Es la disciplina que permita aclarar y ahondar continuamente nuestra visión personal, concentrar las energías, desarrollar paciencia y ver la realidad objetivamente.
Comienza por aclarar las cosas que de veras nos interesan para poner nuestra vida al servicio de nuestras mayores aspiraciones.
Aquí interesan todas las conexiones entre aprendizaje organizacional, los compromisos recíprocos entre individuo y organización, el espíritu especial de una empresa constituida por gentes capaces de aprender. ¿Qué son Modelos Mentales?; son supuestos hondamente arraigados, generalizaciones e imágenes que influyen sobre nuestro modo de comprender el mundo y actuar. A menudo no tenemos conciencia de nuestros modelos mentales o los efectos que surten sobre nuestra conducta. La disciplina de trabajar con modelos mentales empieza por volver el espejo hacia adentro: aprender a exhumar nuestras imágenes internas del mundo, para llevarlas a la superficie y someterlas a un riguroso escrutinio. También incluye la aptitud para entablar conversaciones abiertas donde se equilibre la indagación con la persuasión, donde la gente manifieste sus pensamientos para exponerlo a la influencia de otros.
¿Qué es para nosotros la práctica de una Visión Compartida?; Se refiere a las aptitudes para configurar “visiones del futuro” compartidas que propicien un compromiso firme antes que el acatamiento. Al dominar esta disciplina, los líderes aprenden que es contraproducente tratar de imponer una visión, por sincera que sea.
También tenemos a la disciplina del aprendizaje en equipo comienza con el “dialogo”, la capacidad de los miembros del equipo para “suspender los supuestos” e ingresar en un autentico “pensamiento conjunto”.

La disciplina del dialogo también implica aprender a reconocer los patrones de interacción que erosionan el aprendizaje en un equipo. Los patrones de defensa a menudo están profundamente enraizados en el funcionamiento de un equipo. Si no se los detecta, atenta contra el aprendizaje. Si se los detecta y se los hace aflorar creativamente, pueden acelerar el aprendizaje.

El aprendizaje en equipo es vital porque la unidad fundamental de aprendizaje en las organizaciones modernas no es el individuo sino el equipo. Aquí es donde “la llanta muerde del camino”: si los equipos no aprenden, la organización no puede aprender. Y por tanto se tendría una organización sin ventaja competitiva.

Es vital que las cinco disciplinas se desarrollen como un conjunto. Esto representa un desafío porque es mucho más difícil integrar herramientas nuevas que aplicarlas por separado. Pero los beneficios son inmensos.

Por eso el pensamiento sistémico es la quinta disciplina, que integra la demás disciplinas, funcionándolas en un cuerpo coherente de teoría y práctica. Les impide ser recursos separados o una última moda. Sin una orientación sistémica, no hay motivación para examinar cómo se interrelacionan las disciplinas. Al enfatizar cada una de las demás disciplinas, el pensamiento sistémico no recuerda continuamente que el todo puede superar la suma de las partes.

El pensamiento sistémico también requiere las disciplinas concernientes a la visión compartida, los modelos mentales, el aprendizaje en equipo y el dominio personal para realizar su potencial. El pensamiento sistémico permite comprender el aspecto más sutil de la organización inteligente, la nueva percepción que se tiene de sí mismo y del mundo.

En el corazón de una organización inteligente hay un cambio de perspectiva: en vez de considerarnos separados del mundo, nos consideramos conectados con el mundo; en vez de considerar que un factor “externo” causa nuestros problemas, vemos que nuestros actos crean los problemas que experimentamos.

Para las organizaciones que están a pie de lucha contra sus respectivos competidores será importante que entiendan el significado de la palabra Metanoia, que se puede traducir como un desplazamiento mental o cambio de enfoque, transito de una perspectiva a la otra. Captar el significado de “Metanoia” es captar el significado más profundo de “aprendizaje”, pues el aprendizaje también supone un decisivo desplazamiento o transito mental. El problema de hablar de “organizaciones que aprenden” es que “aprendizaje” ha perdido su significado central en el uso contemporáneo. La mayoría de la gente pone ojos vidriosos cuando se habla de “aprendizaje” u “organizaciones que aprenden”. Es natural, pues en el uso cotidiano aprendizaje ha pasado a ser sinónimo de “absorción de información”.

Otro termino interesante que no se deria pasar por alto es una pregunta: ¿Qué significa “Yo soy mi puesto” según Peter Senge?; Significa ser leales a nuestra tarea, al extremo de que la confundimos con nuestra identidad.

La otra idea es identificar al enemigo externo pero ¿Qué significa el Enemigo Externo según Peter Senge? Todos tenemos la propensión a culpar a un factor o una persona externa cuando las cosas salen mal. Algunas organizaciones elevan esta propensión a un mandamiento: “Siempre hallaras a un agente externo a quien culpar”. El síndrome del “enemigo externo” es un subproducto de “yo soy mi puesto”, y de los modos a sistémicos de encarar el mundo que ello alienta. Cuando nos concentramos solo en nuestra posición, no vemos que nuestros actos la trascienden. Cuando esos actos tienen consecuencias que nos perjudican, incurrimos en el error de pensar que estos nuevos problemas tienen un origen externo. Como la persona perseguida por su propia sombra, no podemos deshacernos de ellos. El síndrome del “enemigo externo” no consiste solo en echar culpas dentro de la organización.

¿Qué significa “La Ilusión de hacerse cargo”? Significa que debemos de enfrentar nuestros problemas, no esperar a que alguien más haga algo, resolver los problemas antes que estalle una crisis.

¿Qué significa “La Fijación en los Hechos”?
Nuestra fijación en los hechos forma parte de nuestro programa evolutivo. El aprendizaje generativo no se puede sostener en una organización si el pensamiento de la gente está dominado por hechos inmediatos. Si nos concentramos en los hechos, a lo sumo podemos predecir un hecho antes de que ocurra, para tener una reacción óptima. Pero no podemos crear.

¿Qué significa “La parábola de la Rana Hervida”? La mala adaptación a amenazas crecientes para la supervivencia aparece con tanta frecuencia en los estudios sistémicos de los fracasos empresariales que ha dado nacimiento a la parábola de “la rana hervida”. Si ponemos una rana en una olla de agua hirviente, inmediatamente intenta salir. Pero si ponemos la rana en agua a la temperatura ambiente, y no la asustamos, se queda tranquila. Cuando la temperatura se eleva de 21 a 26 grados centígrados, la rana no hace nada, e incluso parece pasarlo bien. A medida que la temperatura aumenta, la rana esta cada vez mas aturdida, y finalmente no está en condicione de salir de la olla. Aunque nada se lo impide, la rana se queda allí y hierve. ¿Por qué? Porque su aparato interno para detectar amenazas a la supervivencia no está preparado para cambios lentos y graduales.

¿Qué significa la “Ilusión que se aprende con la experiencia”? La experiencia directa constituye un medio directo de aprendizaje. Aprendemos a comer, a gatear, a caminar y a comunicarnos mediante ensayo y error. Realizamos u acto y vemos las consecuencias de ese acto. Cuando nuestros actos tienen consecuencias que transcienden el horizonte de aprendizaje, se vuelve imposible aprender de la experiencia directa. He aquí en fundamental dilema de aprendizaje que afrontan las organizaciones se aprende mejor de la experiencia.

¿Qué significa “El mito del equipo administrativo”? Con frecuencia, los equipos empresariales suelen pasar el tiempo luchando en defensa de su “territorio”, evitando todo aquello que pueda dejarlos mal parados y fingiendo que todos respaldan la estrategia colectiva del equipo, para mantener la apariencia de un equipo cohesivo. Para reservar esta imagen, procuran callar sus desacuerdos, personas que tienen grandes reservas evitan manifestarlas públicamente, y las decisiones conjuntas son agudas y reflejan lo que aceptable para todos, o bien el predominio de una persona sobre el grupo. Si hay desavenencias, habitualmente se expresan mediante acusaciones que polarizan las opiniones y no logran revelar las diferencias de supuestos y experiencias de un modo enriquecedor para todo el equipo.

¿Qué significa “La estructura influye sobre la conducta”? La perspectiva sistémica nos dice que debemos buscar más allá de los errores individuales o la mala suerte para comprender los problemas importantes. Debemos examinar las estructuras que modelan los actos individuales y crean las condiciones que posibilitan cierto tipo de acontecimientos. El término “Estructura”, tal como se usa aquí no alude a la “estructura lógica” de un argumento cuidadosamente desarrollado ni a la “estructura” informativa de grafico de una organización. La “estructura sistémica” alude a las interrelaciones clave que influye sobre la conducta a lo largo del tiempo. No se trata de interrelaciones entre la gente, sino entre variables claves, tales como la población, los recursos naturales y la producción alimentaria en su país en desarrollo; o las ideas de producto de ingenieros y administración en una compañía de alta tecnología.

¿Qué significa “La estructura de los sistemas humanos es sutil”? Significa que a menudo tenemos el poder para alterar estructuras dentro de la cuales Operamos

¿Cuáles son los problemas de aprendizaje y nuestro modo de pensar? Como ciertos actos “convienen a su posición”, las personas no ven como ellos afectan las demás posiciones. En consecuencia, cuando surgen problemas, se apresuran a culparse entre sí. Los jugadores de las demás posiciones, en incluso los clientes, se transforman en el “enemigo”. Cuando se vuelven “proactivo” y efectúan mas pedidos, empeoran las cosas. Como el exceso de pedidos aumenta gradualmente, no reparan en la gravedad de la situación hasta que demasiado tarde. En general, no aprenden de la experiencia porque las consecuencias más importantes de sus actos acontecen en otra parte del sistema, y eventualmente regresan para crear los mismos problemas que ellos atribuyen a otros. Los “equipos” que ocupan las diversas posiciones (suele haber dos o tres individuos por posición) se concentran en culpar a los demás jugadores por sus problemas.

Por lo tanto todas las definiciones y conceptos presentados en los párrafos anteriores nos muestra cómo debemos de comprender el mundo para poder actuar para poder llevar a nuestras organizaciones a obtener ventajas competitivas, no solamente realizando descuentos sino siendo una organización de aprende constantemente en equipo, que todos comparten la visión y que estamos en mejora continua en busca de nuevas fuentes de ingresos económicos, evaluando dinámicamente aplicando el pensamiento sistémico.

miércoles, 24 de noviembre de 2010

FILTRAR DATOS DE UN JTABLE EN NETBEANS

Después de un largo periodo de no realizar ninguna publicación, estoy regresando recargado de experiencias y anécdotas sobre algunos proyectos en los que estuve trabajando por mas de 2 años.

En esta ocasión veremos la forma de filtrar datos de un jTable, que estoy usándolo en una aplicacion de gestión de compras, como verán no esta muy desarrollado para este tutorial, debido a que tiene fines académicos.


Tenemos un jTable con los siguientes datos, extraído de una Base de Datos (MySQL) como veremos a continuación:

Los datos que se observan en la tabla en ejecución anterior, se cargan de la tabla productos de la base de datos, pero el método de filtrado funcionaria igual con datos estáticos.

código fuente:

import Datos.ProductosDAO;
import Logica.Productos;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.List;
import javax.swing.RowFilter;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableRowSorter;

public class GUIListaProductos extends javax.swing.JDialog {
//TableModel tblProd;
private TableRowSorter trsfiltro; //creamos el filtro
DefaultTableModel temp;
String filtro;
Productos Pro;
ProductosDAO prodao = new ProductosDAO();
/** Creates new form GUIListaProductos */
public GUIListaProductos(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
CargarTabla();

}

//******************************************//
public void filtro() {
//Obtiene el valor del JTextField para el filtro
filtro = txtBuscarXdesc.getText();
int columna = 3;
trsfiltro.setRowFilter(RowFilter.regexFilter(txtBuscarXdesc.getText(), columna));
}

//******************************************//

public void CargarTabla(){ // Recupera registro de la tabla de la base de datos

temp = (DefaultTableModel)tblProductos.getModel();

int cant, i;
List lstVi= prodao.getProductos();

//Recorrer el arreglo
for(i=0; i
{
Pro=lstVi.get(i); //Obtiene el Objeto de la Coleccion dado e indice
//llenar las celdas de la Tabla
Object nuevo[]= {temp.getRowCount()+1,"",""};
temp.addRow(nuevo);

temp.setValueAt(Pro.getIdproductos(), i, 1);
temp.setValueAt(Pro.getTipoproducto().getTpDescripcion(), i, 2);
temp.setValueAt(Pro.getDescripcion(), i, 3);
temp.setValueAt(Pro.getMarca(), i, 4);
temp.setValueAt(Pro.getUnidadMedida(), i, 5);
temp.setValueAt(Pro.getCapacidad(), i, 6);
temp.setValueAt(Pro.getPrecioEstimado(), i, 7);
temp.setValueAt(Pro.getStockActual(), i, 8);
temp.setValueAt(Pro.getStockMinimo(), i, 9);
temp.setValueAt(Pro.getStockMaximo();

//Comienza a filtrar desde que digita un caracter

private void txtBuscarXdescKeyTyped(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
txtBuscarXdesc.addKeyListener(new KeyAdapter() {
public void keyReleased(final KeyEvent e) {
filtro();
}
});
trsfiltro = new TableRowSorter(temp);
tblProductos.setRowSorter(trsfiltro);
}

Espero sus comentarios de este articulo....




sábado, 28 de noviembre de 2009

Tecnología de Objetos

Hoy en dia la tecnologia orientada a objetos ya no se aplica solamente a Lenguajes de programación, ademas se biene aplicando en el analisis y el diseño con mucho exito, al igual que en las bases de datos. si queremos hacer una buena programación orientada a objetos hay que desarrollar el sistema aplicando esta tecnologia, de esto bien la importancia del analisis y diseño orientado a objetos.

La programacion orientada a objetos es una de la formas más populares de programar y biene teniendo gran acogida en el desarrollo de proyectos de software desde los ultimos años. Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar.

¿Cuales son las ventajas de un Lenguaje Orientado a Objetos?

*. Fomentar la Reutilización y Extensión del Código
*. Permite crear sistemas mas complejos
*. Relacionar el sistema al mundo real
*. Facilita la creacion de programas visuales.
*. Construcción de prototipos.
*. Agiliza el desarrollo de software
*. Facilita el trabajo en equipo
*. Facilita el Mantenimiento del Software.

Lo interezante de la Programación Orientada a Objetos es que proporciona Conceptos y Herramientas con las cuales se modela y se representa el mundo real.

Modelo Orienta a Objetos
------------------------

Para entender el modelo Orientado a Objetos Vamos revisar 4 Conceptos Básicos

1. Objetos:

Entender que es un Objeto es la clave para entender cualquier lenguaje de programación.

Existen Multiples definiciones que se ha dado al Objeto. Debemos comenzar por enterder que es un Objeto del Mundo Real. Un Objeto del mundo real es cualquier cosa que vemos anuestro alrededor. Por ejemplo para leer este articulo lo hacemos a través del monitor de la computadora, ambos son objetos, al igual que un coche (automovil), un telefono celular, una casa, etc.

Hagamos un análisis un poco mas profundo a un Objeto del mundo real, como la computadora. No se necesita ser expertos para saber que una computadora está compuesta por varios componentes: La tarjeta Madre, el Micro Procesador, un disco duro, una tarjeta de video, y otras partes mas. El trabajo de estos componentes en conjunto hacen funcionar a la computadora. Internamente cada uno de estos componentes puede ser muy complicado y puede ser fabricado por diversas compañias y siguiendo diferentes metodos de diseño e implementación. Pero nosotros no necesitamos saber como funciona internamente cada uno de estos componentes. Cada componente es una unidad autonoma y todo lo que necesitamos saber de adentro es como interactuan estas componentes entre si y poder armar facilmente una computadora.

¿Qué es lo que tiene que ver esto con la programación?

La programación orientada a objetos trabaja de está manera. Todo el programa está construido en base a diferentes componentes (Objetos), cada uno tiene un rol especifico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas.

Todo Objeto del mundo Real tienen 2 componentes: Caracteristicas y comportamiento.

Un ejemplo clasico, los automoviles tienen caracteristicas (Marca, Modelo, color, Velocidad Maxima, etc) y Comportamiento (Acelerar, frenar, Llenar combustible, Cambiar llantas)

Los objetos de software al igual que del mundo real tambien tienen caracteristicas y comportamiento. Un objeto de software mantiene sus caracteristicas en una o mas "variables" e implementa comportamineto con "Metodos". Un Método es una funcion o subrutina asociada aun objeto.


Definiciones Básicas: Un Método es una funcion o subrutina asociada aun objeto.

martes, 18 de agosto de 2009

PowerBuilder y Acces

POWER BUILDER
En panel de control debemos seleccionar Herramientas administrativas



Seleccionar Origenes de Datos (ODBC)


En la siguiente ventana elegimos el controlador para la base de datos con la que trabajremos, como se muestra en la parte seleccionada.


En esta ventana Ponemos un nombre del Origen de datos y la descripccion de la misma. Luego damos clic en Seleccionar


En la siguiente ventana seleccionamos la base de datos con la que vamos a trabajar en mi caso esta en la unidad C:\ y tiene nombre db_ventas.db y damos clic sobre el para seleccionarlo. y damos clic en selecionar sucesivamente.




Creamos un perfil de conexion en powerbuilder

Abrimos powerbuilder y damos clic en database


Damos Clic en ODB ODBC, Luego damos clic en New Profile



Le damos un Nombre al Profile y selccionamos el nombre de la base de datos (lo que creamos en la primera parte: Origen de datos)



Luego damos clic en el Tab Preview, copiamos codigo y damos clic en Test Connection, si el mensane que sale dice: "Connection succeful", aplicar y finalizar de caso contrario verificar los passos anteriores.

En las ojas del ODB ODBC aparecera la base de datos con el nombre elegido en el Profile. Le damos clic derecho y connectamos


Creamos una aplicacion y escribimos el siguiente codigo en el evento Open como se muestra en la figura.



Luego ejecutamos la plicacion y nos saldra un mensaje dependiento si la conexion ha sido exitosa o no.

-Suerte-

Crear Un Origen de Datos y Profile de Conexion en PowerBuilder


CREAR UN ORIGEN DE DATOS
Ingresamos a panel de control, elegimos Herramientas administrativas



Seleccionamos Orígenes de datos (ODBC)









Seleccionamos el controlador para Access (*.mdb que pertenece al office 2003 y anteriores) y damos clic en finalizar.
Observación: Si queremos usar la base de datos Northwind 2007 que viene como ejemplo en el office 2007 la conexión seria exitosa, pero no podríamos ver los registros debido a que las tablas tienen al menos un atributo que se nombran con palabras separadas lo cual no soporta el SQL Anywhere.
Por eso para el ejemplo he creado una base de datos en Access con el nombre: db_ventas











Configuramos el ODBC de Access: Ponemos cualquier nombre de Origen de datos y una descripción. Luego seleccionamos la base de datos con la que vamos a trabajar (clic en seleccionar).







La base de datos que he creado lo busco en la unidad C, debido a que allí ha sido creado. Seleccionamos la DB, damos clic en Aceptar en todas las ventanas. Con ello el Origen de datos se abra creado.
























Creamos un Perfil de Conexión des Power Builder
Abrimos el Power Builder y damos clic en DataBase









Damos Clic derecho en ODB ODBC, Luego damos clic en New Profile














Le damos cualquier nombre en Profile Name y seleccionamos el Origen de Base de datos que creamos anteriormente.















Luego damos clic en el Tab Preview, copiamos el código y damos clic en Test Connection









Sale la primera ventana que debemos de ignorar esto se debe a la Falta de compatibilidad, pero después de ese mensaje debe salir un mensaje que indique que la conexión ha sido satisfactoria. Luego aplicamos y aceptamos.











En la imagen anterior se muestra seleccionada la base de datos, con el nombre de perfil: MiProfile. A este archivo le damos clic derecho y seleccionamos connect.












Conectar la base de datos con la aplicación en Power Builder
Creamos un nuevo proyecto en Power Builder, en la aplicación damos clic derecho y seleccionamos Edit y escribimos lo siguiente:
























/*Pegamos el código generado cuando creamos el Profile*/
// Profile MiProfile
SQLCA.DBMS = "ODBC"
SQLCA.AutoCommit = False
SQLCA.DBParm = "ConnectString='DSN=MiDB;UID=;PWD='"

/*Escribimos la siguiente sentencia SQL*/

connect;

//Verificamos si la conexion ha tenido Exito.

if (sqlca.sqlcode = -1) then //sqlca.sqlcode = -1, error de conexion
messagebox("Verificar","Error en la conexion de la base de datos")
else
messagebox("Felicidades","La conexion de la base de datos es correcta")
end if

miércoles, 17 de junio de 2009

PowerBuilder en Ubuntu

PowerBuilder

Este video muestra una simple aplicacion hecha en power builder

dicho programa esta instalado en un sistema operativo linux (Ubuntu 8.10)