He publicado la tercera parter del sistema pasapedidos con vista y reportes en google maps sobre ventas recorrido del vendedor,
les envio el link que he publicado
http://www.youtube.com/watch?v=m1fjlyXDFbg
Saludos
viernes, 1 de junio de 2012
Operation is not valid due to the current state of the object.
Cuando intentamos cargar una buena cantidad de campos de formulario nos puede pasar el siguiente error, "Operation is not valid due to the current state of the object." , este error en mi caso se dio por cargar demasiados campos en el servidor de produción haber cargado un GridView con mas de 1000 filas que incluian Templates de CheckBox,TextBox , el cual ASP por predeterminado solo acepta 1000 campos de formulario.
La Solución es que tenemos que agregar en nuestro Web Config , el siguiente Script
<appSettings>
<!--Importante si se desea manejar mas de 1000 filas en el GridView Sin Paginación-->
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
De esta manera podemos introducir mas campos de formulario sin problemas ni errores en nuestro sistema Web ojo la propiedad value es configurable podemos aumentarlo o disminuirlo depende sea nuestro caso;
Saludos ,
La Solución es que tenemos que agregar en nuestro Web Config , el siguiente Script
<appSettings>
<!--Importante si se desea manejar mas de 1000 filas en el GridView Sin Paginación-->
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
De esta manera podemos introducir mas campos de formulario sin problemas ni errores en nuestro sistema Web ojo la propiedad value es configurable podemos aumentarlo o disminuirlo depende sea nuestro caso;
Saludos ,
domingo, 6 de mayo de 2012
PROBLEMAS CON WEB CONFIG AL SUBIR AL SERVIDOR DE PRODUCCION
CUANDO REALIZAMOS UNA SUBIDA A UN SERVIDOR DE PRODUCCION PUBLICO OSEA QUE ACCEDEMOS A TRAVEZ DE LA IP PUBLICA, NOS PRESENTAN UN ERROR GENERICO COMO POR EJEMPLO
Server Error in '/' Application.
Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".
Con este tipo de excepciones no entendemos nada ni donde se produsco el error ni nada por el estilo la solucion sencilla y efecias es agregar o modificar las siguientes lineas en el archivo de configuracion.
<customErrors mode="Off"/>
y listo nos mostrara el error mas explicito.
Saludos
Server Error in '/' Application.
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.Details: To enable the details of this specific error message to be viewable on remote machines, please create a <customErrors> tag within a "web.config" configuration file located in the root directory of the current web application. This <customErrors> tag should then have its "mode" attribute set to "Off".
Con este tipo de excepciones no entendemos nada ni donde se produsco el error ni nada por el estilo la solucion sencilla y efecias es agregar o modificar las siguientes lineas en el archivo de configuracion.
<customErrors mode="Off"/>
y listo nos mostrara el error mas explicito.
Saludos
lunes, 23 de abril de 2012
PROBLEMAS AL MOSTRAR POPUP INTERNET EXPLORER
Cuando pasamos de un Servidor de Pruebas a un servidor de Produccion podemos presentar un pequeño problema al abrir nuestras ventanas popup, si es este su caso hay una solucion facil y sencilla esto es debido ha que tenemos habilitado por defecto el modo protegido solo debemos deshabilitarlo, nos mostrará un mensaje de confirmación, lo confirmamos y ya estará listo para mostra nuestros popup .
Saludos Coordiales ,
Saludos Coordiales ,
lunes, 9 de abril de 2012
DataFormatString GridView
Buenas en esta ocasion publicare algunos formatos para el gridview de gran utilidad:
Formato para las Fecha Datetime Cuando nos guarda con Fecha y Hora pero no queremos mostrar los minutos ni segundos
DataFormatString="{0:dd-MM-yyyy}"
Formato para rellenar de ceros en un gridview solo nos basta con cambiar a la cantidad de 0 que queramos
DataFormatString="{0:D7}"
Para Formatos en Numeros
DataFormatString="{0:F2}"
SALUDOS
Formato para las Fecha Datetime Cuando nos guarda con Fecha y Hora pero no queremos mostrar los minutos ni segundos
DataFormatString="{0:dd-MM-yyyy}"
Formato para rellenar de ceros en un gridview solo nos basta con cambiar a la cantidad de 0 que queramos
DataFormatString="{0:D7}"
Para Formatos en Numeros
DataFormatString="{0:F2}"
SALUDOS
domingo, 8 de abril de 2012
Codigos de Barra control de Series
Cuando realizamos los modulos de almacen ,venta, es necesario tener un control por series, por codigos de barra, para llevar el correcto control del stock y las ventas, ademas para facilitar las entradas y salidas de los productos y las ventas para ellos el sistema desarrollado necesitaba imprimir los codigos de barra en un formato indicado, pero para los que no saben (aunque la mayoria creo yo lo saben)los codigos de barra no son mas que fuentes que son reconocidas luego por el lector de codigos de barra que hay que configurar correctamente su funcionalidad para que reconosco correctamente, como fue en mi caso que solo debi cambiar el tipo de idioma a español,bueno les dejo el tipo de fuente de codigo de barra que he usado, ya ustedes lo adaptan a sus necesidades (Code Bar), descargenlo.
https://skydrive.live.com/?cid=1c1a217b3c1a25d3#cid=1C1A217B3C1A25D3&id=1C1A217B3C1A25D3!169
saludos,
https://skydrive.live.com/?cid=1c1a217b3c1a25d3#cid=1C1A217B3C1A25D3&id=1C1A217B3C1A25D3!169
saludos,
TRANSACCIONES JDBC JAVA
En esta ocasion veremos como realizar transacciones con JDBC en JSP(Java Server Page), bueno les pongo el codigo para luego explicar un poco lo sencillo de manejar transacciones con JDBC.
try{
_xArrItems = _xCadenaDetallePedido.split("-");
_xArrCodigoProducto = _xArrItems[1].split("@");
_xArrNombreProducto = _xArrCodigoProducto[1].split("<");
_xArrCantidadProducto = _xArrNombreProducto[1].split(">");
//_xArrNombreProducto = _xArrNombreProducto[0].split("$");
System.out.println("Producto : " + _xArrNombreProducto[0]);
//_xArrNombreProducto = _xArrCodigoProducto[0].split("$");
System.out.println("Items : " + _xArrItems[0]);
System.out.println("Items[1] : " + _xArrItems[1]);
System.out.println("CodProd : " + _xArrCodigoProducto[0]);
System.out.println("CodProd[1] : " + _xArrCodigoProducto[1]);
System.out.println("Producto : " + _xArrNombreProducto[0]);
System.out.println("Producto[1] : " + _xArrNombreProducto[1]);
System.out.println("Cantidad[0] : " + _xArrCantidadProducto[0]);
System.out.println("Cantidad[1] : " + _xArrCantidadProducto[1]);
System.out.println("Nuevo : ");
try{
_xItems = _xArrItems[0];
_xCodigoProducto = _xArrCodigoProducto[0];
_xNombreProducto = _xArrNombreProducto[0];
_xCantidadProducto = _xArrCantidadProducto[0];
_xArrItemsResultado = _xItems.split("|");
_xArrCodigoProductoResultado = _xCodigoProducto.split("|");
_xArrNombreProductoResultado = _xNombreProducto.split("|");
_xArrCantidadProductoResultado = _xCantidadProducto.split("|");
System.out.println("Items: " +_xItems);
System.out.println("CodigoProducto: " +_xCodigoProducto);
System.out.println("NombreProducto: " +_xNombreProducto);
System.out.println("CantidadProducto: " +_xCantidadProducto);
System.out.println("Items Length: " + _xArrItems.length);
Vector _xItemVector = new Vector();
Vector _xItemCodProducto = new Vector();
Vector _xItemCantidadProducto = new Vector();
int _xPosicionProducto = 0;
int _xPosicionItemsProducto = 0;
int _xPosicionCodigoProducto = 0;
int _xPosicionCantidadProducto = 0;
}catch(Exception ex){
System.out.println("Fallo for: " + ex.getMessage());
}
oConnection.setAutoCommit(false);
//Guardamos la cabezera en Nuestra Primera Invocacion
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDOCABECERA(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.registerOutParameter(1,Types.NUMERIC);
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,"1");
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,"1");
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,"20");
oCallableStatement.execute();
//Guardamos el detalle en Nuestra Segunda Invocacion
for(int i = 0; i <= _xArrItems.length -1;i++){
if(!_xArrItems[i].trim().equals("") && !_xArrItems[i].trim().equals("|") ){
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDODETALLE(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.setString(1,"1");
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,_xArrItems[i]);
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,_xArrCodigoProducto[i]);
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,_xArrCantidadProducto[i]);
oCallableStatement.execute();
}
}
//_xCodigoPedidoCabecera = oCallableStatement.getString(1);
//mensaje = st.getString(1);
System.out.print("el mensaje es "+_xCodigoPedidoCabecera );
oCallableStatement.close();
oConnection.commit();
}catch(Exception ex){
oConnection.rollback();
System.out.println("Error en Transaccion: " +ex.getMessage());
}
oConnection.setAutoCommit(true);
como podemos ver tenemos la conexion setAutoCommit en modo False, porque cuando se crea una conexion por JDBC por defecto el modo de confirmacion de AUTOMATICO osea cuando realizamos un execute cada sentencia se maneja como si fuese una transaccion, pero hay ocasiones como esta donde queremos guardar un maestro detalle osea una composicion, para guardar dos o mas sentencias solo necesitamos desactivar el modo de confirmacion automatica oConnection.setAutoCommit(FALSE) y de esta manera podemos executar x sentencia DML, hasta cuando le indiquemos explicitamente que se va ha confirmar osea oConnection.setAutoCommit(true), espero les alla quedado claro.
Saludos
try{
_xArrItems = _xCadenaDetallePedido.split("-");
_xArrCodigoProducto = _xArrItems[1].split("@");
_xArrNombreProducto = _xArrCodigoProducto[1].split("<");
_xArrCantidadProducto = _xArrNombreProducto[1].split(">");
//_xArrNombreProducto = _xArrNombreProducto[0].split("$");
System.out.println("Producto : " + _xArrNombreProducto[0]);
//_xArrNombreProducto = _xArrCodigoProducto[0].split("$");
System.out.println("Items : " + _xArrItems[0]);
System.out.println("Items[1] : " + _xArrItems[1]);
System.out.println("CodProd : " + _xArrCodigoProducto[0]);
System.out.println("CodProd[1] : " + _xArrCodigoProducto[1]);
System.out.println("Producto : " + _xArrNombreProducto[0]);
System.out.println("Producto[1] : " + _xArrNombreProducto[1]);
System.out.println("Cantidad[0] : " + _xArrCantidadProducto[0]);
System.out.println("Cantidad[1] : " + _xArrCantidadProducto[1]);
System.out.println("Nuevo : ");
try{
_xItems = _xArrItems[0];
_xCodigoProducto = _xArrCodigoProducto[0];
_xNombreProducto = _xArrNombreProducto[0];
_xCantidadProducto = _xArrCantidadProducto[0];
_xArrItemsResultado = _xItems.split("|");
_xArrCodigoProductoResultado = _xCodigoProducto.split("|");
_xArrNombreProductoResultado = _xNombreProducto.split("|");
_xArrCantidadProductoResultado = _xCantidadProducto.split("|");
System.out.println("Items: " +_xItems);
System.out.println("CodigoProducto: " +_xCodigoProducto);
System.out.println("NombreProducto: " +_xNombreProducto);
System.out.println("CantidadProducto: " +_xCantidadProducto);
System.out.println("Items Length: " + _xArrItems.length);
Vector _xItemVector = new Vector();
Vector _xItemCodProducto = new Vector();
Vector _xItemCantidadProducto = new Vector();
int _xPosicionProducto = 0;
int _xPosicionItemsProducto = 0;
int _xPosicionCodigoProducto = 0;
int _xPosicionCantidadProducto = 0;
}catch(Exception ex){
System.out.println("Fallo for: " + ex.getMessage());
}
oConnection.setAutoCommit(false);
//Guardamos la cabezera en Nuestra Primera Invocacion
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDOCABECERA(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.registerOutParameter(1,Types.NUMERIC);
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,"1");
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,"1");
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,"20");
oCallableStatement.execute();
//Guardamos el detalle en Nuestra Segunda Invocacion
for(int i = 0; i <= _xArrItems.length -1;i++){
if(!_xArrItems[i].trim().equals("") && !_xArrItems[i].trim().equals("|") ){
oCallableStatement = oConnection.prepareCall("{call PA_INSERT_PEDIDODETALLE(?,?,?,?)}") ;
// Se indica que el primer interrogante es de salida.
oCallableStatement.setString(1,"1");
// Se pasa un parámetro en el segundo interrogante
oCallableStatement.setString(2,_xArrItems[i]);
// Se pasa un parámetro en el tercer interrogante.
oCallableStatement.setString(3,_xArrCodigoProducto[i]);
// Se pasa un parámetro en el cuarto interrogante.
oCallableStatement.setString(4,_xArrCantidadProducto[i]);
oCallableStatement.execute();
}
}
//_xCodigoPedidoCabecera = oCallableStatement.getString(1);
//mensaje = st.getString(1);
System.out.print("el mensaje es "+_xCodigoPedidoCabecera );
oCallableStatement.close();
oConnection.commit();
}catch(Exception ex){
oConnection.rollback();
System.out.println("Error en Transaccion: " +ex.getMessage());
}
oConnection.setAutoCommit(true);
como podemos ver tenemos la conexion setAutoCommit en modo False, porque cuando se crea una conexion por JDBC por defecto el modo de confirmacion de AUTOMATICO osea cuando realizamos un execute cada sentencia se maneja como si fuese una transaccion, pero hay ocasiones como esta donde queremos guardar un maestro detalle osea una composicion, para guardar dos o mas sentencias solo necesitamos desactivar el modo de confirmacion automatica oConnection.setAutoCommit(FALSE) y de esta manera podemos executar x sentencia DML, hasta cuando le indiquemos explicitamente que se va ha confirmar osea oConnection.setAutoCommit(true), espero les alla quedado claro.
Saludos
Suscribirse a:
Entradas (Atom)