kill_spinal
Usuario (México)
..La impresion de codigos de barra en crystal reports no es tan complicada, basta con diseñar un reporte como cualquier otro y usar la fuente de codigo que necesites.aqui esta la configuracion de la pc en la que voy a realizar el ejemplo:- Windows 7 home basic 32bits- Visual Studio .Net 2010 (funciona con cualquier .net)- Crystal Reports para vs .net (el que se instala con vs 2010)- Access (puede ser sql server, mysql, etc)Notas:- La razon de usar access es porque no tengo instalada ninguna base de datos por ahora. Para usar otra base de datos solo debes cambiar la cadena de conexion y asunto arreglado.- El lenguaje es Visual Basic.- El codigo de barras a usar es el 39ANTES DE EMPEZAR seguramente ya sabes que existen varios tipos de codigo de barras, tambien deberias saber que los numeros de los codigos de barra pueden contener informacion de la empresa, producto, ubicacion etc.aqui no pretendo explicar esos detalles sino solamente la manera en que podemos imprimir unos codigos de barra de manera sencilla y rapida con pocas lineas y pocos minutos.Bueno, si no tienes instalado el crystal reports descargalo y lo instalas. puedes descargarlo desde aqui:http://huleronetfiles.sytes.net/cr_cb/crystal_reports_para_vs2010 13.0.1.execonsigue la fuente del codigo de barra 39. esta puedes descargarla desde la pagina de font river:http://es.fontriver.com/dingbats/bar_code/tambien lo puedes descargar desde mi servidor:http://huleronetfiles.sytes.net/cr_cb/ccode39.zipDESCOMPRIME EL archivo ccode39.zip en una carpeta nueva en el escritorio.- Entra a la carpeta donde descomprimiste el archivo zip- copia el archivo ConnectCode39.ttf a la carpeta c:\windows\fonts- con esto ya tienes instalada la fuente en windowsABRE ACCESS y crea una base de datos en blanco- ahora crea una tabla con 4 campos:id_producto numerodescripcion textocodigo numeroprecio numero (double)guarda la tabla con el nombre de codigosguarda la base de datos con el nombre de prueba con FORMATO DE ACCESS 97-2003, osea, extension mdb.ahora ingresale unos datos, al menos 5 registrosguarda la tabla con los nuevos datos.y cierras access.hasta aqui con la base de datos.ABRE EL Visual studio y crea un proyecto en visual basic de tipo windows formsponle el nombre de cc_testCuando se crea un nuevo proyecto de windows forms, vs nos agrega automaticamente un formulario llamado form1. Por ahora no le vamos a hacer caso a form1 y lo cerramos.Agrega un nuevo item al proyectoel item que vas a agregar es Crystal Reportsluego, escoges la opcion de reporte en blanco y le das aceptarentonces debe aparecer la pantalla de diseño del crystal reports, que es donde vamos a trabajar.a continuacion, primero hacemos la conexion a la base de datos- sobre cualquier seccion del reporte pulsamos el boton izquierdo del raton y luego elegimos database y luego database expertluego, elegimos el item crear nueva conexion y luego access/excelen la ventana que nos aparece, localizamos la base que creamos hace un rato y le damos finalizarahora nos aparece la ventana anterior, pero con la conexion hacia la base prueba.mdb activa, la opcion de agregar un comando y con unica tabla disponible de la bd.vamos a elegir la opcion de AGREGAR COMANDO y pulsamos el boton de agregarentonces nos aparece una ventana para escribir un comando, o mas bien una consulta en lenguaje sql. Ahi vamos a poner una sentencia que nos devuelva los campos que necesitamos.Hay que hacer notar que en tiempo de diseño, los datos devueltos seran los que pidamos en nuestro comando, sin embargo, en tiempo de ejecucion vamos a pedir solo los datos que necesitamos mediante el visual basic.y bueno, en la ventana del comando ponemos:select id_producto, descripcion, codigo, precio from codigos order by descripciony pulsamos aceptarcon esta accion regresamos a la pantalla anterior de datos, pero ahora ya nos muestra que tenemos un comando creado para el reporte.una vez hecho esto, ya podemos cerrar la ventana de datos y centrarnos al disenio del reporte.- en la parte izquierda de la ventana se encuentra la ventana FIELD EXPLORER en la que se encuentran los componentes que podemos insertar.Expandimos la seccion Database Fields y luego Comando para visualizar que los campos del comando que creamos estan disponibles para insertarlos al reporte.y asi lo hacemos, insertamos los 4 campos en la seccion detalle del reporte.la ubicacion sera cuestion de tu creatividad, pero para el ejemplo los voy a posicionar de la siguiente manera:- primero inserto id_producto- a la derecha inmediata de id_producto pongo la descripcion- abajo de id_producto y ocupando todo el espacio hasta el final de la descripcion, voy a insertar el codigo- abajo del codigo pongo el precio y ya.todos los campos son alineados a la izquierda a excepcion del precio.- en la seccion de ENCABEZADO DE INFORME ponemos un titulo cualquiera para el reporte usando un text object del toolbox con tamaño de letra 20asi podria verse nuestro reporte:El ultimo paso para terminar con el reporte es cambiar la fuente del campo codigo, para eso:- seleccionamos el campo codigo y luego le cambiamos el tipo de letra por ccode39 (previamente copiada en c:\windows\fonts)- entonces observamos que el campo codigo ya cambio de numeros al codigo de barras.ahora, para comprobar el reporte, le damos vista previa o main report preview (que es lo mismo) y nos debe mostrar el reporte con los cinco registro que ingresamos en access, pero mostrando su respectivo codigo de barra.y si hasta aqui todo va bien, entonces ya podemos cerrar el reporte, previo guardado, por supuesto.nota: para lo que sigue creo necesario aclarar la siguiente nomenclatura y prefijos:cmd = commandButton o buttontxt = textbox o textlbl = labelcmb = combobox o combolst = list o listboxchk = CheckBoxademas...asegurate que el framework target no es client profile, sino, no vas a poder ejecutar el proyecto:eso lo checas entrando a las propiedades del proyecto, luego te vas compilar y abajo buscas un boton que dice advanced compile options y ahi cambias el framework target.el framework 4 tambien tiene problemas con crystal reports.para el ejemplo estoy usando el 3.5 y todo corre perfecto.ABRE EL FORM1 e insertale los siguientes controles:- listbox con nombre lstItem- CheckBox con nombre chkPrintAll- Button con nombre cmdPrintLa ubicacion de cada uno depende de tu creatividad, para el ejemplo los voy a acomodar uno de bajo inmediato del otro como sigue:primero el lstItem, debajo el chkPrintAll y abajo de este va el cmdPrintno te olvides de ajustar el tamaño del form segun tu diseñolo que sigue es programar los eventos del formulario y sus controles.primero el evento load del formulario:aqui se debe cargar el campo descripcion de la tabla codigos. entonces escribimos el siguiente codigo:Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim dt As New System.Data.DataTable Dim strQuery As String strQuery = "select descripcion from codigos order by descripcion" Dim strCnx As String = "Provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=D:\Documentos\prueba.mdb" ' aqui guarde mi archivo prueba.mdb Dim da As New System.Data.OleDb.OleDbDataAdapter(strQuery, strCnx) da.Fill(dt) If dt.Rows.Count > 0 Then For Each r As System.Data.DataRow In dt.Rows Me.lstItem.Items.Add(r(0).ToString) Next End If dt.Clear() dt.Dispose() da.Dispose() End Subno olvides cambiar la ruta de tu archivo prueba.mdb para que no te marque error.pulsa f5 y si el formulario se ha ejecutado y ademas te muestra la lista con las descripciones de los productos, entonces ya podemos continuar con el codigo del ultimo control: en el evento click del cmdPrint ponemos lo siguiente: Private Sub cmdPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPrint.Click Dim strSQL As String Dim strCnx As String Dim dt As New DataTable If Me.chkPrint.Checked = False Then strSQL = "select id_producto, descripcion, codigo, precio from " _ & "codigos where descripcion = '" & Me.lstItem.SelectedItem.ToString & "'" Else strSQL = "select id_producto, descripcion, codigo, precio from " _ & "codigos order by descripcion" End If strCnx = "Provider=Microsoft.ACE.OLEDB.12.0;" _ & "Data Source=D:\Documentos\prueba.mdb" Dim da As New System.Data.OleDb.OleDbDataAdapter(strSQL, strCnx) da.Fill(dt) If dt.Rows.Count > 0 Then Dim r As New CrystalReport1 r.SetDataSource(dt) r.PrintToPrinter(1, True, 0, 0) r.Close() r.Dispose() End If da.Dispose() dt.Clear() dt.Dispose() End Sub- faltaria poner su try catch finally para evitar excepciones empty.- recuerda modificar tambien aqui la ruta de tu archivo prueba.mdby asi, con un reporte y 48 lineas basicas de codigo podemos imprimir nuestros codigos de barra.NOTAS FINALES- como siempre, el codigo es muy basico y hace falta poner seguridad, pero lo importante es que observes el proceso de imprimir un reporte desde visual basic, y tambien como llenarlo con los datos que quieres imprimir.- el diseño del reporte es arbitrario y simple porque esto no es una clase de diseño sino un post que muestra una de las tantas maneras de usar crystal reports con .net.- el reporte puede ser ajustado para imprimir en columnas sobre etiquetas.saludos.

Segundo post dedicado a excel. Hoy me he levantado muy temprano y de buen humor. Y es por eso mismo que en vez de meterle mano al formulario del post anterior, he decidido brincarme todo el rollo y publicar una propuesta de un archivo que nos permita imprimir una factura, incluyendo su modulo de clientes y productos. Antes de empezar, la configuracion de mi pc: - Windows Home Basic. - Office 2010 Consideraciones - el codigo VBA es el mismo de Visual basic 6, por lo que debe funcionar tambien en versiones anteriores a excel 2010. De todos modos, el codigo que vamos a escribir sera de lo mas sencillo para brincar esa cuestion. Se podria escribir un codigo bastante robusto y optimo pero eso incrementaria las lineas al triple y podria causar confusion a los lectores novatos en programacion. En el post anterior tenemos un ejemplo de como insertar datos en hoja desde un formulario. Esa es la misma mecanica que vamos usar, con la unica diferencia que ahora vamos a leer datos de la hoja y a pasarlos al formulario. FORMATEANDO LAS HOJAS bueno, tons, primero abre excel y de inmediato guardas el libro como factura.xls o factura xlsm. en excel 2010 debes guardarlo como libro con ejecucion de macros ( xlsm ) en 2007 creo que solo tienes que habilitar las macros. en anteriores a 2007 da igual. ahora, el libro nos crea automaticamente 3 hojas. vamos a cambiarles el nombre como sigue: hoja1 = clientes hoja2 = productos hoja3 = facturas bien, ahora inserta una hoja mas y le pones el nombre de impresion - lo siguiente son los encabezados. en la hoja clientes vamos a escribir lo siguiente es las celdas siguientes: A1 = razon, B1 = rfc, C1 = direccion ingresale unos cuantos datos la hoja productos A1 = clave, B1 = descripcion, C1 = precio ingresale unos cuantos datos la hoja facturas A1 = factura, B1 = fecha, C1 = razon, D1 = descripcion, E1 = precio, F1 = cantidad, G1 = total - ahora va la hoja de la impresion. aqui deberias hacer una replica de tu factura de papel en la hoja de excel, pero solo vamos a tomar en cuenta los lugares que hay que llenar, ya que en el papel estan marcados las lineas. en pocas palabras, excel solo va a imprimir lo que deberias escribir a mano. por ejemplo, supongamos que nuestra factura de papel en blanco es la siguiente: AJUSTANDO LA HOJA DE IMPRESION entonces, en excel vamos a hacer una plantilla identica a la factura, la llenamos con datos ficticios y luego la imprimimos en una hoja reciclada(no en la hoja de la factura). luego transparentamos la hoja reciclada con la factura y checamos que los espacios que llenamos estan en el lugar correcto que corresponde al papel de la factura. este paso hay que repetirlo hasta que, cuando transpongamos la hoja reciclada con la factura original, los lugares queden perfectamente alineados. Finalmente, para comprobar que la plantilla de excel corresponde al papel de tu factura, sacale una copia fotostatica a tu factura e imprimimes la plantilla de excel en la copia. si todo corresponde, entonces podemos pasar al siguiente paso. Guarda el archivo para que no pierdas los cambios, (murphy dice que windows solo falla cuando tienes algo sin guardar en pantalla) DISEÑO DE LOS FORMULARIOS Pulsa ALT + F11 y se abre la ventana de VBA. Los formularios a crear son: - captura de clientes - captura de productos - impresion de factura - catalogo de productos - catalogo de clientes - menu sin embargo, la captura de datos simples esta explicado en mi post anterior, por lo que la captura de clientes y de productos la vamos a omitir para centrarnos en la impresion de la factura. La creacion de los formularios omitidos la debes hacer tu mismo. la manera de cambiar las propiedades tambien esta explicado en el post anterior, tambien vamos a omitir esa explicacion. la creacion de formularios e insercion de controles tambien sera omitida, pues esta en el post anterior. los prefijos que vamos a usar para los controles son: lbl = etiqueta o label txt = cuadro de texto o textbox cmb = cuadro combinado o combobox lst = cuadro de lista o listview grb = marco o frame (grb de groupbox, no se nota la influencia de .net) chk = casilla de verificacion o checkbox (el cuadrito que le pones o quitas una palomita) Quiero hacer notar que existe un control grid que facilita la tarea de almacenar datos, pero dado que hay que encontrar su referencia, y a que tambien varia su uso, ubicacion y existencia con el uso de cada version de windows, no lo vamos a usar. No vamos a agregar ningun control externo para hacer mas compatible este archivo entre ordenadores con diferentes sistemas operativos. bueno, una vez aclarados los puntos anteriores, vamos por el form mas culero: FACTURACION - agrega un nuevo formulario y le pones el nombre de frmFacturacion y caption - IMPRESION DE FACTURA - inserta los siguientes controles con los siguientes nombres/propiedades: grbDatosCliente con caption = Datos del Cliente, width = 444 y height = 78 (estira el form para que quepa) -- dentro de grbDatosCliente vas a insertar 5 etiquedas y 5 cuadros de texto -----lblRazon con caption = Razon -----lblDireccion con caption = Direccion -----lblRFC con caption = RFC -----lblFecha con caption = Fecha -----lblNoFactura con caption = No. Factura -----txtRazon -----txtDireccion -----txtRFC -----txtFecha -----txtNoFactura recuerda que a una etiqueta le corresponde a su lado un cuadro de texto con el mismo nombre, por ejemplo, txtRazon va ubicado al lado derecho de lblRazon. Acomoda los espacios de manera que todo quede bien a la vista del usuario: - ahora inserta 4 cuadros de lista afuera y por debajo del grbDatos Cliente con los siguientes atributos lstCantidad con width = 54 y height = 162 lstDescripcion con width = 227.25 y height = 162 lstPrecio con width = 67.55 y height = 162 lstImporte con width = 77.25 y height = 162 en el orden de creacion, ubicalos a la misma altura uno junto de otro. ademas, inserta una etiqueta arriba de cada lista para que el usuario sepa que contiene cada columna: arriba de lstCantidad pones una lblCantidad con caption Cantidad arriba de lst Descripcion pones un lblDescripcion con caption descripcion y asi con las otras dos listas restantes. mira nomas que chulo esta quedando el form: - continuamos con la ultima parte de su diseño: inserta tres cuadros de texto debajo inmediato de lstImporte con los siguientes atributos: txtSubtotal con width = 61.5 y enabled = false txtIVA con width = 61.5 y enabled = false (estoy en en mexico, se nota????) txtTotal con width = 61.5 y enabled = false (cuando enabled es falso el control esta bloqueado para su uso, cuando es true se puede usar) -estos tres txt's ponles sus correspondientes etiquetas, osea al txtSubtotal le pones a su izquierda un lblSubtotal con caption = Subtotal, y asi con los tres txt's -ademas, inserta un txtLetras debajo del lstCantidad y estiras su tamaño hacia la derecha hasta llegar a la lblSubtotal y luego estiras hacia abajo hasta coincidir con lblIVA. Le pones multiline = true, enabled = false. Este txt no lleva etiqueta. -Agregar un boton de comando llamado cmdBuscar con caption = Buscar Cliente y lo ubicamos en la parte de mas abajo del formulario a la izquierda. -agrega un boton de comando llamado cmdProductos con caption = Productos y ubicalo a la derecha de cmdBuscar -agrega un boton de comando llamado cmdAceptar con caption = Aceptar y ubicalo a la derecha de cmdProductos -agrega una casilla de verificacion o checkbox con nombre chkImprimir y caption = Imprimir al aceptar y ubicala a la derecha de cmdCancel este es el aspecto final que deberia tener el formulario: PROGRAMANDO LOS EVENTOS - haz doble click encima del form en alguna region donde no tenga ningun control. - aparece la ventana de codigo. si te fijas, en la parte de arriba del lado izquierdo tiene el nombre de todos los controles que contiene el formulario, incluyendo el propio formulario pero con el nombre de UserForm, y del lado derecho estan los eventos de los mismos. tons para programar un evento, escogemos en el lado izquierdo el control y del lado derecho el evento a programar. - escoge el control UserForm (osea, el formulario) - luego escoge el evento ACTIVATE - VBA te va a insertar el encabezado y final del evento activate. Las lineas de codigo que pongamos en ese espacio se van a ejecutar cuando formulario se active. las lineas de abajo del evento click las podemos eliminar para no causar confusion. y bueno, escribimos dentro del evento activate del formulario las siguientes lineas: Private Sub UserForm_Activate() Me.txtFecha.Text = Date End Sub a continuacion pulsa F5 y verifica que en el txtFecha se ha escrito la fecha automaticamente. si hasta aqui todo va bien, continuamos con los eventos de los demas controles como sigue: control cmdAceptar, evento Click Private Sub cmdAceptar_Click() If MsgBox( “finalizar la captura de la factura?", vbQuestion + vbYesNo) = vbNo Then Exit Sub guardarFactura MsgBox (chkImprimir.Value) If Me.chkImprimir.Value = True Then ImprimirFactura End Sub control cmdBuscar, evento Click Private Sub cmdBuscar_Click() frmBuscarCliente.Show ' mostrar el formulario de buscar clientes End Sub control cmdProductos, evento Click Private Sub cmdProductos_Click() frmAgregarProducto.Show ' mostrar el formulario de agregar productos End Sub control UserForm, evento activate Private Sub UserForm_Activate() Me.txtFecha.Text = Date ' para poner la fecha cuando se ejecute el form End Sub '-- al final de la ventana de codigo, vamos a crear tres procedimientos que no estan ligados al evento de ningun control, y que pueden ser ejecutados cuando se requiera, aun sin ejecutar ningun evento. Public Sub sumarImporte() ' suma solo la ultima lista, osea, los importes Dim i As Integer Dim dTotal As Double dTotal = 0 For i = 0 To Me.lstImporte.ListCount - 1 dTotal = dTotal + Val(Me.lstImporte.List(i)) Next Me.txtSubtotal.Text = dTotal If dTotal > 0 Then ' aqui se hacen los calculos para el subtotal, iva y total Me.txtIVA.Text = Round((Val(Me.txtSubtotal.Text) / 100) * 16, 2) Me.txtTotal.Text = Val(Me.txtSubtotal.Text) + Val(Me.txtIVA.Text) End If End Sub Private Sub guardarFactura() Dim i As Integer Sheets( "facturas “ ).Activate ' activamos la hoja en la que vamos a trabajar If Trim(Range( "A2" ).Value) = "" Then ' localizamos la celda en donde vamos a empezar a insertar Range( "A2" ).Activate Else Range( “ A1 “ ).End(xlDown)(xlDropDown).Activate End If ActiveCell.Value = Me.txtNoFactura.Text ' insertamos los datos ActiveCell.Next.Value = Me.txtFecha.Text ActiveCell.Next.Next.Value = Me.txtRazon.Text For i = 0 To Me.lstCantidad.ListCount ActiveCell.Next.Next.Next.Value = Me.lstDescripcion.List(i) ActiveCell.Next.Next.Next.Next.Value = Me.lstPrecio.List(i) ActiveCell.Next.Next.Next.Next.Next.Value = Me.lstCantidad.List(i) ActiveCell.Next.Next.Next.Next.Next.Next.Value = Me.lstImporte.List(i) Next End Sub Private Sub ImprimirFactura() ' esta hace lo mismo pero con la hoja de impresion Dim i As Integer Sheets( “IMPRESION” ).Activate Range( "a1:h25" ).ClearContents ' limpiamos la hoja para la nueva impresion (esta linea es necesaria) Range( “g2” ).Value = Me.txtFecha.Text Range( “C2” ).Value = Me.txtRazon.Text Range( “C3” ).Value = Me.txtDireccion.Text Range( “b8” ).Select For i = 0 To Me.lstCantidad.ListCount - 1 ActiveCell.Value = Me.lstCantidad.List(i) ActiveCell.Next.Value = Me.lstDescripcion.List(i) ActiveCell.Next.Next.Value = Me.lstPrecio.List(i) ActiveCell.Next.Next.Next.Next.Value = Me.lstPrecio.List(i) ActiveCell.Next.Next.Next.Next.Next.Value = Me.lstImporte.List(i) ActiveCell(xlDropDown).Activate Next Range( “g19” ).Value = Me.txtSubtotal.Text Range( “g20” ).Value = Me.txtIVA.Text Range( “g21” ).Value = Me.txtTotal.Text Range( “b20” ).Value = Me.txtLetras.Text ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False End Sub - aqui las capturas -- NOTACION - en el ejemplo no estoy incluyendo la funcion para convertir los numeros en texto porque es muy largo, sin embargo, en el archivo de ejemplo que dejo al final si esta implementada. y eso es todo con respecto a la facturacion. CARGAR CLIENTES - cierra el formulario frmFacturacion - agrega otro formulario llamado frmBuscarCliente con caption = Buscar Cliente - agregale los siguientes controles. lblClientes con caption = Clientes cmbClientes con style = 2 frmStyleDropDownList (lista para escoger items) cmdAceptar con caption = Aceptar ubicalos de la siguiente manera: lblClientes en la parte mas arriba, luego abajo el cmbClientes y abajo de este pones el cmdAceptar. los eventos: control cmdClientes, evento Change Private Sub cmbClientes_Change() Cells.Find(What:=Me.cmbClientes.Text, After:=ActiveCell, LookIn:= _ xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _ xlNext, MatchCase:=False, SearchFormat:=False).Activate End Sub control cmdAceptar, evento Click Private Sub cmdAceptar_Click() With frmFacturacion .txtRazon.Text = ActiveCell.Value .txtRFC.Text = ActiveCell.Next.Value .txtDireccion.Text = ActiveCell.Next.Next.Value End With Unload Me End Sub control UserForm, evento Activate Private Sub UserForm_Activate() Dim sUltimaCelda As String Me.cmbClientes.Clear Sheets( “CLIENTEs” ).Activate If Trim(Range( “A2” ).Value) = "" Then Exit Sub If Trim(Range( “A3” ).Value) = "" Then Me.cmbClientes.AddItem (Range( “A2” ).Value) Exit Sub End If sUltimaCelda = Range( “A1” ).End(xlDown).Address For Each f In Range( “A2:" & sUltimaCelda).Cells Me.cmbClientes.AddItem (f.Value) Next End Sub asi se debe ver en la ventana de codigo y con eso ya podemos cargar a los clientes en la factura. AGREGAR PRODUCTOS a la factura es similar a cargar los clientes, solo que vamos a llenar las listas. - cierra los formularios abiertos - agrega un nuevo formulario llamado frmAgregarProducto y le pones caption = Agregar Productos - insertale los siguientes controles: cmbClave con style = 2 frmStyleDropDownList txtDescripcion con enabled = false txtPrecio con enabled = false txtCantidad cmdAgregar con caption = Agregar a los txt's y al cmb les pones sus respectivos lbl's asi podria verse el diseño: y ahora el codigos de los eventos: Private Sub cmbClave_Change() If Me.cmbClave.Value = "" Then Exit Sub Dim sUltimaCelda As String Me.txtDescripcion.Text = "" Me.txtPrecio.Text = "" If Me.cmbClave.ListCount > 1 Then sUltimaCelda = Range( “A1” ).End(xlDown).Address Else sUltimaCelda = "A2" End If Range( “A2:" & sUltimaCelda).Select Selection.Find(What:=Trim(Me.cmbClave.Text), After:=ActiveCell, LookIn:=xlValues _ , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _ xlNext, MatchCase:=False, SearchFormat:=False).Activate With Me .txtDescripcion.Text = ActiveCell.Next.Value .txtPrecio.Text = ActiveCell.Next.Next.Value End With End Sub Private Sub cmdAgregar_Click() If Trim(Me.txtCantidad.Text) = "" Then MsgBox ( “Debes ingresar la cantidad!!” ): Exit Sub If Me.txtDescripcion.Text = "" Then MsgBox ( “Debes elegir un producto!!” ): Exit Sub With frmFacturacion .lstCantidad.AddItem (Me.txtCantidad.Text) .lstDescripcion.AddItem (Me.txtDescripcion.Text) .lstPrecio.AddItem (Me.txtPrecio.Text) .lstImporte.AddItem (Str(Val(Me.txtCantidad.Text) * Val(Me.txtPrecio.Text))) End With frmFacturacion.sumarImporte Me.txtDescripcion.Text = "" Me.txtPrecio.Text = "" Me.txtCantidad.Text = "" Me.cmbClave.ListIndex = -1 Me.cmbClave.SetFocus End Sub Private Sub txtCantidad_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) ' esto es para que el textbox solo acepte numeros If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End If End Sub Private Sub UserForm_Activate() Dim sUltimaCelda As String Me.cmbClave.Clear Sheets( “PRODUCTOS" ).Activate If Trim(Range( “A2” ).Value) = "" Then Exit Sub If Trim(Range( “A3” ).Value) = "" Then Me.cmbClave.AddItem (Range( “A2” ).Value) Exit Sub End If sUltimaCelda = Range( “A1” ).End(xlDown).Address For Each f In Range( “A2:" & sUltimaCelda).Cells Me.cmbClave.AddItem (f.Value) Next End Sub - aqui estan las capturas pa que vean la identacion - EL MENU es para finalizar el ejemplo: - inserta un form con nombre frmMenu y caption = Menu -inserta tres botones cmdFacturar con caption = Facturar cmdCapturaCliente con caption = Agregar Cliente cmdCapturaProducto con caption = Agregar Producto - ubicalos en el orden de creacion uno al lado de otro este es el aspecto que podria tener: - en el evento Click del control cmdFacturar escribe lo siguiente: Private Sub cmdFacturar_Click() frmFacturacion.Show End Sub y hasta aqui. PARA FINALIZAR - en la hoja de impresion, debes quitar las lineas y texto que sirvieron para checar la factura con la plantilla sin mover los tamaños de las celdas. - como podras observar, el codigo hace referencia directa a ciertas celdas y hojas. Si cambias el nombre de una hoja, tambien lo debes hacer en el codigo. - el nombre del libro no importa LO QUE DEBES IMPLEMENTAR TU MISMO - una macro o boton para ejecutar el formulario menu desde excel - el formulario de captura de clientes - el formulario de captura de productos - al hacer click en una lista, las otras tres listas deben activar el item que esta en la misma direccion. TIPS - te molesta que los cambios de hojas e insercion sean visibles detras del formulario?? entonces en el evento activate del menu ponle application.screenupdating = false. esto desconecta la pantalla de excel y se queda congelada mientras trabajas en el formulario. No olvides poner en true de nuevo esta opcion en el evento queryunload del formulario, sino no vas a poder descongelar la pantalla. - la funcion application.visible = false, es igual a la anterior pero esta esconde definitivamente a excel de windows dejando solo el formulario activo. Tambien tienes que activarla cuando cierres el formulario. - para ejecutar el formulario de manera automatica al abrir el libro, en el entorno de VBA, en el explorador de objetos das doble click en el objeto Thisworkbook y en el evento open le pones frmMenu.show - para cerrar el libro cuando cierres el menu pones en el evento queryunload del menu la siguiente linea: activeworkbook.save ' para guardar los cambios hechos application.quit - para controlar el texto que aparece en el statusbar de excel, usas la funcion application.statusbar = "lo que quieras escribir" MODIFICACION PARA DESCONTAR EXISTENCIAS CUANDO SE IMPRIMA O GUARDE LA FACTURA - en la hoja de productos, agrega una encabezado mas con el titulo existencia metele algunos datos, estos deben ser numeros (pues es existencia) ahora, hay que agregar un procedimiento mas al formulario de facturacion, ese procedimiento sera el encargado de que por cada producto que se encuentre en la factura, sus existencia sea descontada de la hoja. ese procedimiento es sencillo: Private Sub descontarExistencia(ByVal sDescripcion As String, ByVal nCantidad As Integer) Dim sUltimaCelda As String Dim hojaActiva As String hojaActiva = ActiveSheet.Name ' para recordar la hoja activa Sheets("PRODUCTOS" ).Activate ' nos pasamos a la hoja de productos ' aqui nomas fijamos los rangos, pa que no marque error si no hay nada en la lista If Trim(Range("b2" ).value) <> "" Then sUltimaCelda = Range("b1" ).End(xlDown).Address Else sUltimaCelda = "b2" End If 'seleccionamos el rango de busqueda, para hacer mas rapido el proceso Range("b2:" & sUltimaCelda).Select ' esto es para localizar la clave que nos interesa... mmm estoy pensando que ' esta parte deberia ser mas corta. Selection.Find(What:=sDescripcion, After:=ActiveCell, LookIn:=xlValues _ , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _ xlNext, MatchCase:=False, SearchFormat:=False).Activate ' una vez localizada la clave, solo hacemos la resta With Me ActiveCell.Next.Next.value = Val(ActiveCell.Next.Next.value) - nCantidad End With 'finalmente, regresamos a la hoja anterior, esto es para evitar errores ActiveWorkbook.Sheets(hojaActiva).Activate End Sub ' aqui esta la pantalla pa que vean la identacion y luego, en el mismo formulario de facturacion, en el evento click del boton cmdAceptar modificamos el codigo para que " trabaje " este nuevo procedimiento. esta modificacion consta de agregar solamente una linea dentro del bucle, asi nos aseguramos de que se ejecute por cada producto de la lista: Private Sub guardarFactura() Dim i As Integer Sheets("facturas" ).Activate ' activamos la hoja en la que vamos a trabajar If Trim(Range("A2" ).value) = "" Then ' localizamos la celda en donde vamos a empezar a insertar Range("A2" ).Activate Else Range("A1" ).End(xlDown)(xlDropDown).Activate End If ActiveCell.value = Me.txtNoFactura.Text ' insertamos los datos ActiveCell.Next.value = Me.txtFecha.Text ActiveCell.Next.Next.value = Me.txtRazon.Text For i = 0 To Me.lstCantidad.ListCount - 1 ActiveCell.Next.Next.Next.value = Me.lstDescripcion.List(i) ActiveCell.Next.Next.Next.Next.value = Me.lstPrecio.List(i) ActiveCell.Next.Next.Next.Next.Next.value = Me.lstCantidad.List(i) ActiveCell.Next.Next.Next.Next.Next.Next.value = Me.lstImporte.List(i) descontarExistencia Me.lstDescripcion.List(i), Val(Me.lstCantidad.List(i)) Next End Sub pruebenlo y me dicen que px. descargar el libro de ejemplo: https://skydrive.live.com/?cid=6A76BCFD39519EAE&id=6A76BCFD39519EAE%21397#cid=6A76BCFD39519EAE&id=6A76BCFD39519EAE%21397 - quiero aprovechar para agradecer las 7000 visitas y sus putos 63 puntos, aunque con el karma eso ya vale madres.
cuando programas con el .net framework es muy facil conectarse a bases de datos de sql server usando oledb, sin embargo, es posible que te topes con la necesidad de conectarte a una base de Mysql y si no tienes mucha paciencia y/o experiencia en el ambito de las conexiones vas a pasar al menos cinco minutos de dolor de cabeza. (y digo 5 minutos porque al final es muy sencillo y nada complicado). en las paginas de soporte aconsejan usar odbc pero no me convence mucho depender de un origen de datos, ademas, deberiamos hacer todo bajo codigo sin usar asistentes para conservar la elegancia de la programacion. ANTES DE CONTINUAR LEYENDO. asumo que: - tienes un servidor web corriendo y soportando paginas aspx - estas habituado con .net - podria poner solo el codigo de las funciones pero supongo que si alguien busca informacion hay que proporcionarle lo mas que se pueda y no solo limitarnos a decirle la solucion sin los pasos previos, por eso me extiendo la explicacion un poco mas de lo normal. como siempre, primero mis caracteristicas de mi equipo y configuracion: - Windows 7 home premium (funciona con xp, y todas las versiones de 7, starter no he probado) - Mysql 5.5.11 - Mysqlyog (no es necesario para la conexion pero desde aqui vamos a gestionar la base de manera grafica) - mysql-connector-net-6.2.4 (el espacio MySql.Data para conectarnos a la base de datos) - Visual Web Developer (visual basic) sera usado en el ejemplo (podria ser un visual studio.net) - apache - mod_aspdotnet los programas los pueden buscar en la web y aparecen rapido, pero como siempre hay mas de un huevon (y lo digo por ser mexicano) pueden descargar los archivos de esta direccion: http://huleronetfiles.sytes.net ... servidor activo solo durante el dia. PRIMERO instala los programas; dado que es un ejemplo del acceso a datos, no voy a detallar los pasos para instalar y configurar los programas y la base de datos. usando mySQLyog o desde la consola de mysql: 1- crea una base de datos en mysql llamada tuxes 2- crea dentro de tuxes una tabla llamada usuarios con los sig campos: - id_tux int auto incremental - nombre varchar 20 - edad int y guardas la tabla. 3- metele unos datos, al menos 3, por ejemplo: jose 20 maria 25 pedro 16 4- siempre es bueno realizar una consulta para verificar los datos introducidos. y hasta aqui con la base de datos. SEGUIDAMENTE vamos a abrir el visual web developer y creamos un sitio asp.net vacio - antes de cualquier cosa, vamos a agregar una referencia al sitio - en el explorador de soluciones hacemos click con el boton derecho encima del sitio y escogemos agregar referencia - en el cuadro de referencias vamos a .net y ahi buscamos el componente MySql.Data (v. 6.2.4.0 si bajaron el archivo de aqui mismo) - aceptamos y ya tenemos la referencia agregada al sitio. - agregamos un nuevo web form y le dejamos el nombre default.aspx - abrimos el archivo default.aspx.vb AHORA LAS FUNCIONES - aqui vamos a crear una FUNCION llamada mysqlQUERY que devolvera una tabla con los resultados de la consulta: Private Function mysqlQUERY(ByVal strMySQL As String) As System.Data.DataTable Dim dt As New System.Data.DataTable ' la tabla que nos va a servir para almacenar el resultado de la consulta Dim strCNX As String ' la cadena de conexion hacia mysql strCNX = "server=localhost;user=root;database=tuxes;port=3306;password=tu_password;" ' no olvides cambiar tu pass y user de mysql Dim da As New MySql.Data.MySqlClient.MySqlDataAdapter(strMySQL, strCNX) 'al adapter da.Fill(dt) ' llenamos la tabla Return dt End Function - y ahora un procedimiento para EJECUTAR INSTRUCCIONES sql Private Sub mysqlExecute(ByVal strMySQL As String) Dim strCNX As String Dim cnx As New MySql.Data.MySqlClient.MySqlConnection strCNX = "server=localhost;user=root;database=tuxes;port=3306;password=tu_password;" ' no olvides cambiar tu pass y user de mysql cnx.ConnectionString = strCNX cnx.Open() If cnx.State = Data.ConnectionState.Open Then Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(strMySQL, cnx) ' construimos el comando cmd.ExecuteNonQuery() cmd.Dispose() End If cnx.Close() cnx.Dispose() End Sub el codigo es muy basico y aun hay que ponerle su try.. catch... finally pero asi lo vamos a usar para no confundirnos. SI EL ESPACIO MySql.Data no te aparece es que no has agregado la referencia correcta o podria ser que no has instalado el mysql-connector-net-6.2.4. deberias asegurarte por ambos casos. - con las dos funciones anteriores podemos gestionar la base de datos casi por completo. aqui va la manera de hacerlo: - inserta un boton llamado cmdQuery y un label llamado lblResults en la pagina default.aspx - haz doble click encima del boton y se abrira el archivo default.aspx.vb con un nuevo procedimiento para el evento click del boton cmdQuery. ahi vamos a poner el codigo para la consulta y quedaria mas o menos asi: Protected Sub cmdQuery_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdQuery.Click Dim strQuery As String Dim dtt As New System.Data.DataTable strQuery = "select * from usuarios" dtt = mysqlQUERY(strQuery) If dtt.Rows.Count > 0 Then For Each r As System.Data.DataRow In dtt.Rows Me.lblResults.Text += "<br/>" & r.Item(0).ToString & " - Nombre: " & r.Item(1).ToString & " Edad: " & r.Item(2).ToString Next Else Me.lblResults.Text = "No hay resultados." End If dtt.items.clear dtt.dispose End Sub - luego ejecutas tu pagina, haces click en el boton y si te muestra los registros que insertaste manualmente quiere decir que todo ha estado bien. - faltaria el ejemplo para la insercion pero como es mas sencillo nomas voy a decir que: - agregas un boton mas que se llame cmdInsert y dos textbox's llamados nombre y edad respectivamente - en el evento del boton cmdInsert pones algo como esto: dim strMySQL as string strMySQL = "insert into usuarios(nombre, edad)values('" & me.txtNombre.tex & "','" & me.txtEdad.tex & "')" mysqlExecute(strMySQL) que les vaya mu' bonito muchachitos.

Reto: laptop hp ze4800 vieja, muy vieja, con disco duro de 60gb y 256 de ram.escenario: no sirve el cd-rom, no inicia desde usb.objetivo: instalar cualquier sistema operativo pa no tenerla tirada junto a los zapatos.Antes de comenzar, hay que aclarar que segui todos o casi todos los tutoriales que hay en la red, y lo mas cabron es que te dicen que hacer pero no te dicen como.- las configuraciones son dependiendo de la computadora que estes instalando.- para este ejemplo usaremos windows xp home, porque es para lo que alcanza el hardware.en escencia, hay que realizar tres pasos:1- crear 1 o 2 particiones en el cliente(c: y d2- acceder a la carpeta del instalador de windows(i386)3- lanzar el instalador de windowslos pasos 1 y 3 son muy sencillos, pero el paso 2 es el mas complicado.primero, el equipo a usar y sus configuraciones- pc con windows 7 home basic con tarjeta de red (funciona con cualquier windows 7 y con xp y vista)- modem ruteador, el que tengo es el de cable, en mexico, funciona con 2wires, thompson... y basicamente con cualquier modem-ruteador qu arme una red domestica- 2 cables de red- la malquerida ze4800 cto con los defectos antes mencionados (procedimiento valido para otros modelos)Aclaro que las imagenes y links de los archivos a descargar estan alojados en mi servidor casero, y este solo lo tengo encendido durante el dia. Por esta razon, las imagenes y archivos solo estan disponibles durante el dia.En unos dias espero tener disponible un equipo para cargarlo con el servidor y evitar esta molestia.para empezar hay que conseguir los siguientes archivos:- tftpd32.exe (buscalo en google, viene en un paquete con el mismo nombre)- pxelinux.0 (lo consigues en un paquete que se llama syslinux, buscalo facilmente en la red)- memdisk (tambien esta en el sislinux)- bfd (bajalo de la pagina de www.Nu2.nu)- Virtual Floppy (si no tienes floppy fisico, como yo)- WinImage. cualquier version- SmartDRV.exe- Everest. para saber cual es la tarjeta de red que tienesAl final del post puse los links para descargar todos estos archivos y programas.Para este ejemplo, la pc con windows 7 la voy a llamar servidor, y al programa que nos proporcionara el servicio lo llamare pxe.PREPARANDO EL SERVIDOR- para empezar, deshabilita el firewall de windows, y tambien del antivirus.- crea una carpeta en c y ponle el nombre pxe, te debe quedar como c:pxe- ahi en c:pxe vas a meter los archivos pxelinux.0, memdisk y tftpd32.exeahora, hay que crear una imagen de diskette que nos permita bootear.mmm? preguntaste que porque? bueno, la respuesta es la siguiente:el proceso de inicio desde la red por pxe comienza cuando una pc cliente (ze4800) inicia y en vez buscar un so en el disco duro, por alguna razon lo busca en la red (previamente configurada para esta accion). Tons, si el cable de red esta conectado a la ze4800, esta comenzara a buscar algun servidor pxe disponible. Si se topa con nuestro server, entonces comenzaran a comunicarse entre server y cliente. Y despues de conocerse un poco, el cliente le preguntara al server si tiene algun sistema operativo para que pueda funcionar. El server le dice que si y le envia el sistema operativo por medio de la red. Entonces el cliente lo ejecuta en su memoria y con eso ya podemos usarla para nuestros propositos.El detalle esta en que ese so debe ser muy pequeño como para pasarlo por medio de una red. Eso nos reduce las opciones a unos pocos, entre ellos el ms-dos.Es por eso que debemos hacer una imagen de un diskette de inicio de ms-dos. ya que este es el pasara por medio de la red a la ze4800 y con su simbolo de sistema podremos ejecutar los comando necesarios para instalar el windows mencionado.Sin embargo, aqui hay otro problema: una vez iniciado el ms-dos en la pc cliente, la red se desconecta debido a que la tarjeta de red solo esta disponible para el pxe en el inicio de la pc. Osea, que iniciamos por red, pero no podemos comunicarnos con el server.este pequeño detallito es el causante de que las cosas no salgan tan bien y tan facil como explican los tutoriales en la red.La solucion a este problema esta en crear un diskette de inicio con soporte para red. Pero esto nos trae otro problema, ya que al crear el disco de inicio con soporte para red, hay que decirle al ms-dos que nos instale el driver de nuestra tarjeta. Pero eso ya esta solucionado:Corre el everest y busca el modelo de tu tarjeta de red.si la laptop no tiene ningun sistema instalado como para revisar el modelo de tarjeta de red, entonces vas a tener que averiguarlo de otras maneras.- revisando sus caracteristicas en la pagina del fabricante de la laptop- desarmandola para verificar el modelo del chipen mi caso, la ze4800 tiene el disco duro limpio y por eso no puedo correr el everest.la desarme para revisar el chip de la tarjeta de red pero no me ayudo de mucho tampoco.afortunadamente en la red alguien puso un informe del everest de la ze4800 y ahi vi el modelo de la tarjeta.En el informe de la ze4800 sale lo siguiente:---Placa de red Adaptador de Fast Ethernet PCI basado en National Semiconductor DP83815 lo que quiere decir que el modelo es DP83815 y el fabricante es National Semiconductor.con esta informacion voy a la pagina de www.Nu2.nu y busco la lista de drivers descargables para el bfd y descargo el modelo que necesito y lo guardo en el escritorio:- Crea una carpeta en el escritorio que se llame pxeTemp. Aqui vamos a poner los archivos utilitarios para trabajar sin perderlos.DESCOMPRIME EL BFD en pxeTempbfd y luego explora la carpeta bfd.- vas a buscar la siguiente ruta: bfdcabsdriversndis- ahi vas a pegar el driver que descargaste, sin descomprimirlo.abre el floppy virtuale inicia la ejecucion del driverluego, te donde dice drive0 y le das open/create, te va a aparecer otra ventana, ahi tambien le das en createcon esto ya debes tener creado un diskette virtual en la disketera virtual- Sin cerrar el virtual floppy, abre una ventana de Simbolo de Sistema.- accede a la carpeta que esta en el escritorio pxeTemp que esta en el escritorio.- ahora tecleas el comando bfd msnet y das enteraparece una ventana avisando que el diskette se va a formatearle dices que c (es es lo que pide que pongas), y comenzara a crear un diskette booteable con soporte para red con nuestro driver incluido.al final te debe decir que todo salio bien.- cierra el simbolo de sistema y revisa si el diskette virtual tiene los archivos del bfd:- ok, ahora cierra la ventana donde estas viendo los archivos del diskette, sino, nos marcara error el siguiente proceso.- descomprime el winImage en la carpeta pxeTemp del escritorio.- ejecuta el WinImage- en la ventana que aparece, abre el menu DISK y marcas la casilla USE FLOPPY A- luego en el mismo menu, le das en READ DISK- la ventana se va a llenar con los archivos del diskette- y luego solo le das file>>save as y le pones como nombre IMAGEN.IMZ y lo guardas en la carpeta c:pxeasegurate de que tenga la extension imzy cierras el WinImage-En la carpeta c:pxe debes tener 4 archivos ahora: pxelinux.0, tftpd32.exe, memdisk e imagen.imz.- ahora crea una carpeta en c:pxe y la vas a nombrar pxelinux.cfg (es una carpeta, no un archivo)- ingresa a la carpeta recien creada pxelinux.cfg y ahi mismo vas a crear un archivo txt y lo llamas default-modifica ese archivo y le pones lo siguiente:default bootprompt 0say booting... culerolabel bootkernel memdiskappend initrd=imagen.imz- lo guardas y lo cierras- ahora quitale la extension a default.txt y debe quedar solo como default (asegurate que no tiene extension el archivo, sino, no funcionara)- ahora regresa a la carpeta c:pxe y ejecuta el programa tftpd32.exe- dale un click en el boton settings y luego en el tab de DHCP- ahora hay que poner unas sencillas configuraciones:- 192.168.1.80 es la direccion de la pc en donde esta corriendo el server pxe- 192.168.1.254 es la direccion del modem o ruteador- 192.168.1.100 es el rango desde donde va a empezar a asignar direcciones a los clientes el servidor- size of pool es cuantos clientes se van a conectar al pxe- pxelinux.0 es el kernel- lo demas es obvioluego, pasate a la pestaña TFTP y pones la siguiente configuracion:- en base directory pones un punto .- en tftp security pones none- en advanced solo debes tener 3 opciones activadas: option negotiation, show progress bar y translate unix file name.- timeout = 3- max retransmit = 6- tftp port = 69 las demas pestañas no las movemos- dale en el boton de ok y con eso ya tenemos el servidor pxe corriendo y bien configurado.- dejalo corriendo.PARA TERMINAR con el serversi tienes el cd de instalacion de windows:- coloca el disco de instalacion de windows en el c-rom- comparte la unidad de cd-rom con permisos y quitale el uso compartido de archivos con contraseña.o si tienes una imagen o no tienes cd-rom-crea una carpeta compartida en la ubicacion que quieras. Para el ejemplo creare una carpeta en c y la llamaremos publica. la ruta debe quedar asi: c:publica.- comparte esa carpeta. En windows 7 y vista debes otorgar permisos y quitar el " uso compartido de archivos con contraseña "- copia o descomprime en esta carpeta los archivos del disco de instalacion de windowssi tienes una pc adicional disponible, comprueba que la carpeta o unidad que compartiste se puede acceder desde la red.con esto damos por terminada la configuracion del serverCON RESPECTO AL CLIENTE- entra al bios del cliente y configura el boot de manera que arranque por medio de la red.- asegurate que el cliente esta conectado al modem o ruteador- reinicia el cliente y observa que comience a buscar el acceso por medio de la redNOTA: las imagenes del cliente no las pongo porque no tengo manera de captarlas. Tratare de ser lo mas descriptivo que se pueda.- mientras el cliente esta revisando la red, en el server, en la pestaña de log viewer, podemos observar como se comunican las dos computadoras.Hay que hacer notar que en la pantalla del cliente tambien sale el mismo rollo, pero en otro formato.por ejemplo, si en el pxe server dice enviado, en el cliente dice recibido.- hasta que al final, el server le envia la imagen del diskette que creamos, y entonces el cliente inicia en modo ms-dos.si la pc cliente se queda congelada, es porque hay algo en la imagen del diskette que no es correcto. tendras que crear otra vez la imagen del diskette.si de plano no se comunican las pc's, entonces revisa la configuracion del tftpd32.exe- LO PRIMERO QUE OCURRE en el cliente es una pequeño menu de 4 items que son las formas de iniciar la pc.vamos a elegir la primera:Boot with emm386 max memoryentonces entra en escena un programa que se llama msnet y que es el encargado de crear la conexion de red entre el pxe server y el cliente.los comando de msnet se empiezan a ejecutar y van cargando los archivos necesarios:-aparece la ventana de configuracion de cliente, no movemos nada y la cerramos.(o se cierra sola despues de 3 secs)- luego aparece la ventana de configuracion de red. y es aqui donde podemos tener problemas(si no bajamos el driver correcto) Si el driver que inlcuimos en el bfd es el correcto, la ventana se cerrara en unos segundos, pues se detectara automaticamente.si no detecta el driver, el ms-dos te dira que no lo encontro y pasaras a buscarlo manualmente.- entonces, se te mostrara una lista de drivers (los que estaban en la carpeta del bfd, recuerdas?), y entre ellos debe estar el tuyo.- lo elijes y sigues.SI EN EL PASO DE ELEGIR EL DRIVER marca un error o dice que no lo pudo instalar, o que el dispositivo no se encontro o algo por el estilo, entonces el driver no es el correcto.Tendras que asegurarte que tarjeta ethernet tienes, bajar el driver correspondiente para dos y volver a crear la imagen con el nuevo driver incluido.si hasta aqui todo va bien, entonces casi podemos decir que nos chingamos al pxe.- en todas las demas ventanas nomas las cierras o les das ok SIN MOVER NADA.- Una vez pasada la parte de las ventanas, el sistema se seguira cargando hasta llegar a un punto en que msnet te pregunta el password del usuario nonele das enter y el msnet termina de cargarse por completo y nos deja el cursor con el simbolo del usuario + el nombre de la pc, en el caso del ejemplo, el simbolo quedo asi: none@PC-254562 Q:net>si el simbolo de sistema no esta formado de la misma manera (user+pc+directorio activo), quiere decir que no estamos conectados.Tendras que revisar el log de ejecucion para ver si hubo algun problema en la carga, aunque el unico problema que podrias tener es el descrito mas arriba: el driversi hasta aqui todo va bien, entonces continuamos- ahora hay que conectar una carpeta del servidor al clienteesto lo hacemos con el comando net de la siguiente maneranet use x: servidorpublicadonde- net es el comando para indicar que trabajaremos en la red- use es el parametro que indica que conectaremos una ruta de red a una unidad de disco virtual- x: es la unidad virtual que apunta la carpeta compartida en el servidor, puede ser cualquier letra no usada como unidad, pero para este ejemplo usaremos x- servidorpublica servidor es el nombre de la pc que esta ejecutando el pxe server y publica es la carpeta compartida con los archivos de instalacion.(si compartiste la unidad de cd-rom, entonces pones su letra)es posible que tengas algun error:- que no encuentre la carpeta, tons asegurate que el nombre de la carpeta y servidor estan bien.- si no se puede conectar, revisa que NO ESTA ACTIVADO el uso compartido de archivos por contraseña- si no encuentra el nombre de servidor, prueba cambiando el nombre por la ip o viceversa.el resultado debe ser: The command completed successfully.- ahora ponemos x: y pulsamos enter. Esto nos pasara a la unidad virtual x- ponemos dir y pulsamos enter. Los archivos del cd-rom o carpeta se deben mostrar.si todo ha salido bien hasta aqui, entonces ya podemos preparar el disco duro para iniciar la instalacion:- pasate a Q otra vez. q: y le das enter. deberia dejarte en el directorio Q:netcon el fdisk- crea dos particiones en el disco duro(c: y d - formatea las dos particionesyo tuve problemas al momento de borrar y crear particiones con fdisk. Por eso use spfdisk.exe que tiene varias herramientas y con facilidad pude crear las dos particiones.como la ze4800 no tiene disketera, el cd-rom no sirve y el usb aun no lo reconoce(ni con plop ni nada), tons comparti una carpeta mas en el servidor y ahi puse el spfdisk.exe y luego conecte esa carpeta con la letra Y en el cliente con el comando net use.de manera que en x: tengo el instalador de windows y en y: tengo una carpeta con archivos o programas para ejecutar.bueno, ya aclarado el asunto y con las particiones formateada, seguimos:- en la carpeta compartida Y o en X, pon una copia de SMARTDRV.exe- ejecuta el SMARTDRV.exeSi no ejecutas el smartdrv.exe no podras instalar correctamente el sistema.- busca la carpeta i386, que debe estar en x: y ejecutas WINNT.exe.el instalador de windows se ejecutara y te preguntara en donde estan los archivos instaladores, te muestra la ruta y solo confirmas.- comienza la copia de los archivos necesarios para instalar windows y dura unos segundos y se detiene un momento.se paciente, en unos segundos mas comenzara el proceso de instalacion copiando los archivos al disco duro.CUANDO TE PIDA REINICIAR DEBES HABER DESCONECTADO EL CABLE DE RED, ya que si no lo haces, en vez de iniciar la configuracion de windows se iniciara el boot desde el servidor pxe.con esto se acaba el tema del servidor pxe.el pxe configurado en el ejemplo lo puedes descargar aquihttp://huleronetfiles.sytes.net/pxe_server/pxe_configurado_driver_ze4800.rary los archivos a utilizar lo puedes bajar aquihttp://huleronetfiles.sytes.net/pxe_server/pxeTemp.rarsaludos.
Aqui les dejo un post mas de VBA para Excel para los que quieran aprender un poco mas acerca de los comandos y funciones que podemos utilizar para hacer nuestro trabajo diario mas rapido y sencillo. Bueno, en esta ocasion pretendo mostrar dos caracteristicas de vba que podrian ayudarnos a tener un mejor control de nuestro codigo y que nos permitiran darle un mejor estilo a nuestro programa, me refiero a la utilizacion de un listbox con varias columnas y a controlar los errores que ocurren por datos incorrectos sin que nuestro programa se detenga o muestre la ventana de vba al usuario. para empezar, las consideraciones de costumbre: Como siempre digo, es un codigo muy sencillo, corto y facil de entender porque va dirigido a las personas que aun estan aprendiendo, sin embargo, este codigo podria hacerse muchisimo mas robusto hasta alcanzar un nivel de desarrollo profesional pero la intension no es demostrar que somos los mejores programadores sino mostrar un camino mas a los interesados en el tema. este ejemplo fue escrito en una maquina con las siguientes carcateristicas: - windows home premium 64 bits - microsoft office 2013 Excel antes de empezar quiero hacer una aclaracion mas: debido a la hora en que escribo, el ejemplo sera sencillo y con las explicaciones mas cortas que pueda.... eso sin mencionar que hoy es sabado de carnaval y hay que salir a joder un rato con los amigos borrachos. dicho esto, abre excel y enseguida guarda un nuevo libro con el nombre que quieras. esta vez no vamos a usar ninguna hoja ni celda, vamos a trabajar exclusivamenre en VBA. abre el editor de vbs y crea un nuevo formulario. a ese formulario, agregale tres textbox con sus respectivas etiquetas, agrega un boton y un listbox. nombralos como quieras, para el ejemplo yo he utilizado los siguientes nombres: frmPrueba lstDatos lblA lblB lblC txtA txtB txtC cmdAdd este es el aspecto que podria tener el form: ahora, al listbox, en sus propiedades, vamos a poner que use tres columnas. eso se hace en la propiedad COLUMNCOUNT que por defecto viene con el valor 1, ahi le ponemos 3 y eso es todo en cuanto al diseño. ahora viene lo mas sencillo, el codigo. este es el codigo del boton, en el cual hacemos dos validaciones: 1- se valida que los valores de los textboxs no sean vacios 2- cuando se han insertado 5 registros, entonces se provoca un error a proposito, el cual estaremos esperando para interceptarlo y mostrar un msg, de esta manera, el programa no se detiene ni se interrumpe, sino que solo muestra el msg de que algo ha ocurrido pero podemos seguir usando el form sin ningun problema. y a continuacion, el segundo proceso, que es el agregado de un registro a un listbox con mas de una columna, en nuestro caso, tres columnas creo que no esta de mas mencionar que para asignar los valores de un registro en un listbox multicolumn se hace de la siguiente manera listbox.column(indexColumna, indexFila) = valor y para obtener el valor de una columna es lo inverso valor = listbox.column(indexColumna, indexFila) y eso es todo. de esta manera, tenemos un form que nos muestra como capturar errores que podrian suceder por parte del usuario, como busquedas sin resultados, numeros incorrectos, mala ortografia, etc. pero tambien nos muestra el mismo form como podemos usar un listbox multicolum que seria muy util a la hora de mostrar o capturar datos en forma de registros. para los que quieran el libro de ejemplo y las imagenes, aqui esta el link: http://1drv.ms/1eNXvop saludos y que tengan un buen carnaval.

En esta ocasion, vamos a realizar un ejercicio tal que, como lo dice el titulo del post, varios libros puedan guardar informacion en un unico archivo sin duplicar la informacion. El ejemplo que se me ocurre para illustrarlo es el siguiente: Supongamos por un momento que tenemos una tienda y que las notas las hacemos en un formatito chingon que hemos creado en un archivo de excel, mismo que contiene el consecutivo de las notas que hemos vendido y tambien nuestro inventario, el cual se actualiza con cada venta que hacemos. Ahora, como somos buenos empresarios, el negocio ha crecido y necesitamos abrir una caja mas con un empleado que necesita hacer sus notas y actualizar inventario; de manera que en el mostrador de nuestra tienda hay dos compus con su archivo de ventas respectivamente. Podemos, entonces, hacer dos archivos y al final del dia juntarlos para actualizar el inventario, pero eso ocasiona varios problemas: - cada archivo tiene su propio numero o consecutivo de nota lo cual es incorrecto, pues se puede repetir y podria darse el caso de dos clientes con el mismo numero de nota. - cada archivo tiene su inventario, lo cual tambien es incorrecto, pues podriamos vender un producto que ya no tenga existencia. - problemas al hacer el corte o cierre de dia, semana, mes; problemas de control de minimos y maximos, etc. la solucion es que las notas de ambos archivos se deben guardar en un mismo archivo de datos, asi como el inventario debe estar en el mismo archivo de las notas guardadas. De esta manera, si una pc de mostrador necesita hacer una nota de venta, entonces consulta en el archivo de datos cual es el siguiente numero de folio disponible, y la otra pc trabaja de la misma manera; asi, solo tendremos un consecutivo de folios. La misma mecanica aplica para el inventario, Para esto vamos a crear tres archivos A, B y C. Donde A y B son archivos que contienen el formatito chingon y que esta cada uno en una de las dos compus del mostrador de nuestra tienda. C es un archivo que contiene el inventario y el registro de las notas de ambos archivos y puede estar en cualquier computadora de la red. Esta de mas decir que las tres computadoras estan conectadas a la red y que el archivo de datos esta en un directorio compartido y accesible desde los otros dos equipos. Las reglas son: - A y B no contienen ningun dato de notas ni inventario - C no tiene el formatito chingon de la nota - La informacion que se muestra en A y B proviene de C - Y la informacion que se genera en A y B se guarda en C Este ejemplo esta hecho con las siguientes caracteristicas: - Windows 7 home premium 64 bits - Microsoft Office Excel 2013 Consideraciones: - Escribir codigo en VBA 2013 es mas sencillo que en las versiones anteriores pero la compatibilidad se sigue conservando con las versiones anteriores( al menos eso creo ) . - Para el ejemplo, vamos a crear dos libros que lean y guarden informacion en la hoja de un tercer libro que se encuentra en otra ubicacion IMPORTANTE: no voy a ejemplificar por completo el sistema de ventas que he mencionado arriba, sino que me voy a limitar a describir el proceso basico de acceder remotamente, leer y guardar informacion en un libro ajeno. Eso seria suficiente para que saques tus propias conclusiones, para que mejores el codigo y tambien para que lo uses en tus necesidades o preferencias. UNA VEZ MAS, DEBO ACLARAR que el codigo es muy basico y austero para hacerlo lo mas entendible posible a los ojos de los programadores iniciados recientemente; obviamente, se podria construir una aplicacion completa con vba pero ese no es el objetivo del post. - para empezar, crea una carpeta de trabajo en el escritorio y nombrala EXCEL_MULTI - dentro de esa carpeta crea dos carpetas mas: DATOS y FORMATO Estas carpetas van a funcionar como nuestro entorno de red simulado. bueno, 1- Abre excel, selecciona la Hoja1 y le cambias el nombre a DATOS 2- en las celdas A1, B1 y C1 escribes CONSECUTIVO, LEER, GUARDAR respectivamente. sombrea estas celdas, pues serviran de encabezados. 3- guarda el libro con el nombre Bdata en el directorio excel_multiDATOS y luego lo cierras, no es necesario que lo habilites para macros, a menos que tengas pensado escribir procedimientos para otros fines. 4- Crea otro libro y guardalo con el nombre MOSTRADOR1 en la carpeta excel_multiFORMATOS Este archivo lo habilitas para macros, osea, extension xlsm 5- pulsa ALT + F11 para abrir el editor de VBA 6- inserta un nuevo formulario 7- establece las siguientes propiedades al form name: frmTest caption: tu_nombre - Prueba de MultiExcel 8- inserta 3 textbox's con sus respectivas etiquetas: txtConsecutivo txtLeer txtGuardar 9- inserta un boton a la derecha de cada text y pones las propiedades siguientes: name / caption cmdConsecutivo Consecutivo cmdLeer Leer cmdGuardar Guardar 10- a continuacion pongo el codigo de los tres botones: cmdConsecutivo: Private Sub cmdConsecutivo_Click() Dim libro As Workbook ' referencia al libro que vamos a abrir Dim hoja As Worksheet ' la hoja que nos interesa Dim valor As Integer Application.StatusBar = " Procesando la informacion " Application.DisplayAlerts = False Application.ScreenUpdating = False checarLibroAbierto Set libro = Application.Workbooks.Open( "192.168.0.2UsershulerotuxDesktopexcel_multiDATOSBData.xlsx" ) If libro Is Nothing Then MsgBox "No se pudo abrir el libro de datos" & vbCrLf & "verifique el nombre y la ruta" Exit Sub End If Set hoja = libro.Worksheets( "DATOS" ) If hoja Is Nothing Then MsgBox "No se localizo la hoja de datos" & vbCrLf & "Revisa si no se ha cambiado el nombre de la hoja" Exit Sub End If If hoja.Range( "A2 " ).Value = "" Then hoja.Range( "A2" ).Value = 1 hoja.Range( "B2" ).Value = "Leer 1" hoja.Range(" C2" ).Next.Value = "Guardar 1" valor = 1 Else hoja.Range( "A1" ).End( xlDown )( xlDropDown ).Value = Val(hoja.Range( "A1" ).End( xlDown ) .Value ) + 1 valor = hoja.Range( "A1" ).End( xlDown ).Value hoja.Range( "A1" ).End( xlDown ). Next.Value = "leer " & valor hoja.Range( "A1" ).End( xlDown ). Next.Next.Value = "Guardar " & valor End If libro.Save libro.Close Me.txtConsecutivo.Text = valor Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub Private Sub cmdLeer_Click() Dim libro As Workbook Dim hoja As Worksheet Dim valor, valor2 As String Application.StatusBar = "COMPROBANDO LIBRO DE DATOS..." Application.DisplayAlerts = False Application.ScreenUpdating = False checarLibroAbierto Application.StatusBar = "ABRIENDO LIBRO" Set libro = Application.Workbooks.Open("192.168.0.2UsershulerotuxDesktopexcel_multiDATOSBData.xlsx" If libro Is Nothing Then MsgBox "No se pudo abrir el libro de datos" & vbCrLf & "verifique el nombre y la ruta" Exit Sub End If Application.StatusBar = "SELECCIONANDO HOJA" Set hoja = libro.Worksheets("DATOS" If hoja Is Nothing Then MsgBox "No se localizo la hoja de datos" & vbCrLf & "Revisa si no se ha cambiado el nombre de la hoja" Exit Sub End If If hoja.Range( "A2" ).Value = "" Then valor = "Sin valor" valor2 = "Sin Valor" Else valor = hoja.Range( "A1" ).End(xlDown).Next.Value valor2 = hoja.Range( "A1" ).End(xlDown).Next.Next.Value End If Application.StatusBar = "CERRANDO LIBRO DE DATOS" libro.Close Me.txtLeer.Text = valor Me.txtGuardar.Text = valor2 Application.StatusBar = "OPERACION TERMINADA CORRECTAMENTE" Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub Private Sub Guardar_Click() Dim libro As Workbook Dim hoja As Worksheet Dim valor As Integer Application.StatusBar = "COMPROBANDO LIBRO DE DATOS..." Application.DisplayAlerts = False Application.ScreenUpdating = False checarLibroAbierto Application.StatusBar = "ABRIENDO DATOS... ESPERE UN MOMENTO" Set libro = Application.Workbooks.Open("192.168.0.2UsershulerotuxDesktopexcel_multiDATOSBData.xlsx" If libro Is Nothing Then MsgBox "No se pudo abrir el libro de datos" & vbCrLf & "verifique el nombre y la ruta" Exit Sub End If Application.StatusBar = "SELECCIONADO HOJA DE TRABAJO" Set hoja = libro.Worksheets("DATOS" If hoja Is Nothing Then MsgBox "No se localizo la hoja de datos" & vbCrLf & "Revisa si no se ha cambiado el nombre de la hoja" Exit Sub End If If hoja.Range("A2".Value = "" Then hoja.Range("A2".Next.Next.Value = Me.txtGuardar.Text Else hoja.Range("A1".End(xlDown).Next.Next.Value = Me.txtGuardar.Text End If Application.StatusBar = "GUARDANDO LA INFORMACION...." libro.Save Application.StatusBar = "CERRANDO LIBRO DE DATOS..." libro.Close Application.DisplayAlerts = True Application.ScreenUpdating = True Application.StatusBar = "LA INFORMACION SE GUARDO CORRECTAMENTE." MsgBox "La informacion se ha guardado correctamente" End Sub Private Sub checarLibroAbierto() For i = 1 To Application.Workbooks.Count If Application.Workbooks(i).Name = "BData.xlsx" Then Application.Workbooks(i).Close Exit For End If Next End Sub y aqui las imagenes para que vean la identacion: 11 - copia el libro MOSTRADOR1 en la misma carpeta y nombra como MOSTRADOR2 12 - Si abres los dos archivos en simultaneo y ejecutas el form, te daras cuenta que cualquiera de los dos archivos actualizan al libro de datos sin duplicar la informacion guardada. En mi pc excel no me permite tener varias instancias pero si pruebas a abrir los archivos en dos pc's conectadas en red, te daras cuenta de su funcionamiento. Asi, el archivo de datos puede estar en la compu del jefe y los formatos en las compus del mostrador; ambos archivos trabajarian con los mismos datos sin temor a duplicar la informacion. - La direccion 192.168.0.2 que aparece en la imagen corresponde a la direccion de red en donde se encuentra el archivo de datos. ESTA DIRECCION LA DEBES CAMBIAR con la ip correspondiente a tu red. - Si tienes dudas de algunos conceptos, entonces visita mis post anteriores para salir de dudas. En esta direccion puedes encontrar el archivo con las carpetas, archivos e imagenes usados en el post. http://sdrv.ms/1e83NE1
no estoy descubriendo el hilo negro pero no habia encontrado ninguna solucion en ninguna pagina, asi que estuve dandole vueltas al asunto hasta que encontre una solucion a mi problema. 1- tengo un campo Formula Field llamado "Importe" que es la suma de los importes de cada registro 2- agregue un nuevo campo Formula Field llamado EnLetras y en el codigo le puse lo siguiente: ' en basic sintax dim enteros as string dim centavos as string enteros = towords({@importe},0) ' convierto a texto solo la parte entera del centavos = right(totext({@importe}),2) & "/100 M.N." ' me agarro los 2 digitos que corresponden a los centavos formula = ucase(enteros & " PESOS CON " & centavos) ' y regreso la formula en mayusculas listo. no se si tengan problemas con el idioma pero al menos a mi el resultado me aparece en español y el formato de los numeros es español mexico. antes habia leido que si aparecia en ingles habia que cambiar una dll del crystal pero yo no tuve necesidad de hacer ninguna de esas jaladas, solo tengo configurada mi compu como sigue: visual studio 2005 team suite en ingles Crystal reports (el que viene incluido con el visual studio) db de access 2007 windows 7 home basic con configuracion regional español mexico y eso es todo.
Estos son los pasos que segui para levantar un servidor web en la pc de mi casa:mi equipo y software- Windows 7 home basic x86 (funciona con xp y cualquier version de windows 7, con starter no he probado)- cablemodem DOCSIS 1.0/1.1/2.0 Compliant de cablemas mexico- servidor apache- .net framework- direccion ip de la pc = 192.168.1.80archivos a bajar:- apache 2.2.17-win32-x86-no_ssl.msi (puede ser otra version)- no-ip DUC.exe (proporcionado por no-ip)- mod_aspdotnet (el mod de apache para asp.net)- uniextract161 (para extraer archivos msi)los links de los programas no los puse porque me dio mucha hueva mientras escribia los apuntes al configurar mi servidor, asi que ustedes no sean huevones y busquen los programas que aparecen en google de manera facil y rapida. (bueno, pueden descargar los archivos desde mi propio servidor) CONFIGURANDO EL CABLEMODEM1- entrar al modem, normalmente en mexico nos ponen 192.168.1.1. o 192.168.0.12- ir ala seccion gateway3- en el menu izquierdo seleccionar FOFWARDING vas a ver una tabla de 10 filas, si tu modem es virgencito, ningun registro estara habilitado. Bueno, aqui vamos a agregar un registro con los siguientes datos: -local ip = 192.168.1.80 (es la direccion de la pc que sera servidor) -internal port = 80 (puede ser otro, pero para el ejemplo vamos a usar este) -public interface = 0.0.0.0 -ext start port = 80 -ext end port = 80 -protocol = both -enabled = activada le damos apply.4- ahora vamos a Gateway y luego en el menu de la izquierda clickamos en information y apuntamos el la ip publica de nuestro modem, debe decir Internet IP Addres. Por ahora ten la ip publica a la mano, pues vamos a necesitarla mas adelante.explicacion: con esta configuacion nuestro modem sera capaz de recibir solicitudes desde otros equipos en internet y cada vez que detecte una conexion va a dirigirla hacia la direccion ip y puerto especificados, osea, nuestra pc.CONFIGURANDO WINDOWS (Home basic x86)- primero que nada vamos a deshabilitar el firewall de windows- tambien el firewall del antivirus- instalate el .net framework, yo tengo el visual studio 2010 y ese ya te lo pone(en windows xp tenia instalado el .net framework 4 pero tuve que instalar el 3.5 para que no me marque error)INSTALANDO APACHEahora vamos a instalar el apache:1- ejecutamos el instalador del apache2- aceptamos la licencia y next3- en la pantalla de Server Information ponemos los siguientes datos: - Network domain = el nombre de tu red(workgroup, mired, etc etc) - server name = el nombre de tu pc (servidor, server, equipo, juan, manuel... etc) - Administrator's Email address = tu correo electronicoabajo de esta informacion hay dos opciones, deja la primera For all user, on port 80 (obviamente) y le das next4- dejamos la opcion typical y luego next5- en la siguiente pantalla podemos cambiar el directorio de o dejar asi, para este ejemplo lo vamos a cambiar: ponemos D:apache y next y luego install y esperamos a que termine la instalacion.PROBANDO APACHE - una vez que se haya terminado la instalacion del apache, verificamos que el servicio este corriendo, esto lo podemos hacer rapidamente en la bandeja del sistema, debe haber un icono con una pluma roja que es el simbolo de apache, debe decir running.Entonces abrimos nuestro explorador favorito y en la barra de direcciones vamos a poner nuestra ip publica (la que apuntaste del modem, recuerdas???) y le damos enter. si te sale una pagina que dice It works! entonces ya tienes tu servidor web en internet listo y funcionando!!!! (para paginas html solamente)PERO, TENGO IP DINAMICA!!!!no todo es felicidad en esta vida y nuestro proveedor de internet se encarga de que no se nos olvide ni por un momento. afortunadamente hay personas que han tomado medidas y nos ofrecen una solucion:1- entra a http://www.no-ip.com/ y crea una cuenta gratuita2- una vez registrado y logueado, ve a la seccion HOSTS/REDIRECT y luego haz click en la opcion ADD HOST3- donde dice hostname va el nombre de tu servidor pero para este ejemplo vamos a pone un nombre generico(luego lo podras cambiar por el de tu gusto). el nombre de host sera: tu nombre + ciudad + nombre de pc, ejemplo: juanmexicoservidor y escogemos el subdominio sytes.net; quedaria asi el nombre de host: juanmexicoservidor.sytes.net.4- donde dice host type verificamos que sea DNS HOST (A)5- port 80 redirect y web redirect van deshabilitados6- en ip address va tu ip publica (la misma que apuntaste), pero no-ip ya la puso por ti, te fijaste???7- lo demas lo dejamos asi como esta y damos click en CREATE HOST8- si te aparece una pagina en donde tu host ya esta creado quiere decir que todo ha salido bien.ahora vamos a probar de nuevo tu servidor web pero en vez de poner la ip publica vamos a poner el nombre de host que creamos: en una ventana de tu explorador de internet escribe en la barra de direcciones el host que creaste, en mi caso pongo juanmexicoservidor.sytes.net y luego das enter. si vuelves a ver una pagina que dice It Works! quiere decir que ahora ya tienes un dominio para tu servidor web.explicacion: no-ip guarda tu direccion ip publica y cad vez que alguien pone el nombre de host en un explorador revisa a que direccion esta ligada y envia a esa ip la solicitud.pero aun no hemos terminado, ya que cuando apagues tu modem, la direccion ip publica sera otra y no-ip no la encontrara, para eso vamos a instalar el programa de no-ip DUC.1- ejecuta el instalador y acepta la licencia y le das next y luego install2- una vez instalado, ejecuta el programa DUC.3- la primera pantalla te va a pedir un usuario y password, ponle el mismo que creaste en la pagina de no-ip4- una vez logueado te va a aparecer una pantalla con el host que creaste, activa la opcion y luego aceptas5- eso es todo con respecto al problema de la direccion ip dinamica.explicacion de DUC - duc es un programa cliente que se conecta a no-ip y cada 5 minutos aprox actualiza la direccion ip que esta enlazada al nombre de host. tu proveedor de internet puede cambiar tu ip mil veces y no tendras problema alguno para acceder a tu servidor web.nota. DUC deberia iniciarse con windows, asi que sera mejor que pongas un acceso directo al inicio de windows para este fin o lo configures para el mismo efecto.Bien, vamos por la ultima parte del post:CONFIGURAR APACHE PARA CORRER PAGINAS DE ASP.NET (ASPX)ademas de habilitar asp.net en apache, vamos a agregarle una caracteristica mas: servir archivos para dos sitios diferentes, osea juanmexicoservidor.sytes.net y manuelmexicoservidor.sytes.net por ejemplo.si te avientas a tener dos sitios en tu servidor hay que hacer unas modificaciones en la pagina de no-ip1- entra a no-ip y create otro host con el nombre que quieras por ejemplo manuelmexicoservidor.sytes.net2- abre el programa DUC y luego le das en el boton select hosts3- en la ventana que se abre te deben aparecer dos hosts, juanmexicoservidor.sytes.net y manuelmexicoservidor.sytes.net en mi caso.4- selecciona los dos hosts5- le das en el boton saveahora, con cualquiera de los dos nombres de host que pongas en el explorador te va a llevar a la pagina It works!, pero la idea es que cada nombre de host te lleve a una pagina o sitio distinto en el mismo servidor y eso es precisamente lo que vamos a decirle a apache que haga:1- instala el programa uniextract1612- descomprime el archivo mod_aspdotnet.msi en una carpeta con el uniextract1613- de la carpeta recien creada vamos a copiar la carpeta GlobalAssemblyCache y el archivo Apache.Web.dll a la carpeta bin en la ruta de instalacion de apache, en mi caso d:apachebin. observacion: el archivo Apache.Web.dll debe quedar una copia dentro de la carpeta GlobalAssemblyCache y tambien una copia en d:apachebin4- ahora, ejecutar el archivo mod_aspdotnet-2.2.0.2006-setup-r2.msi que esta en la carpeta recien descomprimida5- en la instalacion solo damos next o siguiente hasta que se haya terminado de instalar.6- hay que verificar que exista la carpeta C:/Windows/Microsoft.NET/Framework/v2.0.50727/Temporary ASP.NET Files, si no existe entonces debemos crearla con el nombre y ruta exacta.(importante)todo bien hasta aqui?? ja ja ja... ahora vamos por la ultima parte de la ultima parte: tenemos que decirle al apache que ya podemos interpretar paginas aspx y que tambien nos direccione a una pagina distinta segun el host que hayamos escrito en el explorador.1- create dos carpetas donde quieras, para el ejemplo vamos a usar d:websjuan y d:websmanuel, una para cada host que creamos en no-ip, recuerdas?????2- abre el block de notas y escribe lo siguiente ahi: <html><body><h1>este es el sitio de juan</h1></body></html>3- en el menu del block de notas le das guardar como, en nombre le pones index.aspx y en tipo de archivo elijes todos los archivos y lo guardas en la carpeta d:websjuan4- 2- abre el block de notas otra vez y escribe lo siguiente ahi: <html><body><h1>este es el sitio de manueeeel</h1></body></html>5- en el menu del block de notas le das guardar como, en nombre le pones index.aspx y en tipo de archivo elijes todos los archivos y lo guardas en la carpeta d:websmanuel6- ahora vamos a la carpeta de instalacion de apache, d:apache7- entramos a la carpeta conf y abrimos el archivo httpd con el block de notas. nos vamos hasta el final del archivo sin mover nada y agregamos las siguientes lineas al final:LoadModule aspdotnet_module "modules/mod_aspdotnet.so"AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj licx rem resources resx soap vb vbproj vsdisco webinfo<IfModule aspdotnet_module> # Mount the ASP.NET /asp application #AspNetMount /MyWebSiteName "D:/ApacheNET/MyWebSiteName.com" Alias /webs" D:/webs"# para juanNameVirtualHost *:80 <VirtualHost *:80> DocumentRoot "D:/webs/juan" ServerName juanmexicoservidor.sytes.net ServerAlias juanmexicoservidor.sytes.net AspNetMount / "D:/webs/juan"# Other directives here <Directory "D:/webs/juan"> Options FollowSymlinks Indexes Includes ExecCGI AspNet All #AspNet Virtual Files Directory Order allow,deny Allow from all DirectoryIndex default.aspx index.aspx index.html #default the index page to .htm and .aspx </Directory> </VirtualHost># para manuel <VirtualHost *:80> DocumentRoot "D:/webs/manuel" ServerName manuelmexicoservidor.sytes.net ServerAlias manuelmexicoservidor.sytes.net AspNetMount / "D:/webs/manuel"# Other directives here <Directory "D:/webs/manuel"> Options FollowSymlinks Indexes Includes ExecCGI AspNet All #AspNet Virtual Files Directory Order allow,deny Allow from all DirectoryIndex default.aspx index.aspx index.html #default the index page to .htm and .aspx </Directory> </VirtualHost> # For all virtual ASP.NET webs, we need the aspnet_client files # to serve the client-side helper scripts. AliasMatch /aspnet_client/system_web/(d+)_(d+)_(d+)_(d+)/(.*) "C:/Windows /Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4" <Directory "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles"> Options FollowSymlinks Order allow,deny Allow from all </Directory></IfModule>y guardamos el archivo.8- ahora reiniciamos apache9- en una ventana del explorador escribe juanmexicoservidor.sytes.net y te va a aparecer una pagina que dice "este es el sitio de juan"10 - ahora escribe en el explorador manuelmexicoservidor.sytes.net y te va a aparecer una pagina que dice "este es el sitio de manueeeel"y listo, ya tienes un servidor y dos sitios. ahora solo te falta empezar a poner tu sitio en las carpetas.si quieres tener solo un sitio, pues en el archivo de configuracion de apache solo pones un virtual host. no-ip permite hasta 5 hosts con una cuenta gratuita.obviamente vas a cambiar el nombre del/los hosts que diste de alta en no-ip, cuando lo hagas, tambien tienes que cambiar los nombres en el archivo de configuracion del apache y actualizar los hosts en el no-ip DUC.notas:- recomiendo ampliamente el visual web developer para desarrollar tu sitio- bajate elmysql-connector-odbc-5.1.8-win32 para conectar mysql con odbcfeliz programacion web masters.
...Desde niño siempre me han gustado las motos deportivas, sin embargo, el primer vehiculo que pude adquirir fue un nissan tsuru que me salio muy bueno.Y me la pase bien con ese auto, sin embargo, una vez yendo de camino a la universidad me toco el semaforo en rojo justo en un restaurant donde estaban vendiendo una moto que tenia buena vista. Fue entonces cuando me dije: " No es bueno que el programador este solo... "Al dia siguiente pase por ahi otra vez y seguia la moto en venta, entonces contacte al dueño y me dijo el precio.Ese dia, en vez de ir a la escuela me fui a vender mi carro y al medio dia ya estaba haciendo el trato de la moto.nunca me habia yo subido a una moto, ni siquiera como pasajero, asi que la moto se paso una semana en mi casa sin moverse mientras se me quitaba el miedo de sacarla. hasta que por fin lo hice y de ahi en adelante todo fue felicidad.Esta fue mi primera moto y era una Kawasaki Ex500, tambien la han llamado Ninja 500. Muy buena moto para ser la primera experiencia que tuve.Tengo muy buenos recuerdos de esa moto:Las cicatrices que me dejaron dos barridas.La vez que estaba con una niña buenissima y no quiso arrancar la muy culera.(luego arrancaba por arte de magia)Las lluvias que me pasaron encima... o el frio que congela hasta los huevos.A mi vieja no le gustaba, de hecho, creo que la moto era peor que estar con otra chica, pero los dias que la llevaba a correr conmigo se vestia muy sexy y mientras estabamos en la carretera se quitaba el casco y se soltaba el pelo. chingaos!! pues no que no te gustaba??!!!El primer dia de trabajo y escuela.Cilindrada: 498 cc.Carburadores: 2Potencia: 60 cv. a 9800 rpm.Refigeracion: liquida/ por agua.Caja de cambios: De 6 velocidades.Trasmision: Por cadena.Neumaticos: Delantero, 110/70-17. Trasero, 130/70-17.Frenos: Delantero, doble disco 270 mm. Trasero, balatasDistancia entre ejes: 1,450 mm.Altura del asiento: 780 mm.peso: 179 kg.Capacidad del deposito: 18 litros (2 litros de reserva incluidos)Capacidad del carter: 3,4 litros.Bateria : 12 v. 14 Ah.Aqui en servicio con majevama, buen amigo y compañero.Aqui ya sin las franjas rojas, luego la pinte otra vez negra con franjas rojas y letras blancas.como es de esperarse, despues de varias discusiones voluntariamente obligado me vi en la necesidad de deshacerme de la moto y adquirir un vehiculo " decente " ( entiendase decente por algo que tenga puertas ) . y asi lo hice, pero a los pocos meses se dio la oportunidad de adquirir otra moto, y esta vez, con las experiencias de la anterior en los talleres, piezas, rendimiento y velocidad me enfoque a una que tenga mas cc. Tenia en mente una cbr pero al pasar en una calle desierta vi al fondo un color azul que llamaba la atencion, me acerque y vi una Suzuki gsx 600(Katana), muy jodida, sin espejos, el asiento roto, escape abollado y varios desperfectos mas. Pedi al dueño que la encienda y al escuchar su ronco rugido no lo pense dos veces y me la lleve a casa. Era un 30 de abril y ese dia me saco de la casa mi vieja, tons me fui con mi madre y despues de unas horas recibi una llamada con el permiso de regresar. Mi esposa nunca se subio a esta moto.El primer dia en casa.GSX quiere decir:G: 4 cilindros, 4 tiemposS: Sport, no TouringX: 4 cilindros transversales de alto rendimientoMarca: SuzukiModelo: GSX 600 F (Katana)Estilo: SportAño: 1991MOTOR: ENGINETipo de Motor: 599 cc, Refrigerado por Aire y aceite, 4 - Cilindros en linea, 4 TiemposCilindro/Separación: 62.6 mm x 48.7 mmVálvulas: 4 Válvulas por cilindroPotencia: 86 hp (64.1 kW) @ 11000 rpmTorque: 59.8 Nm (441.1 ft. lbs) @ 9600 rpmTRANSMISION: TRANSMISSIONCaja de Cambios: 6 VelocidadesTransmisión trasera: CadenaRUEDAS Y NEUMATICOS: WHEELSNeumático delantero: 110/80-17Neumático Trasero: 140/80-17Frenos Delanteros: Doble disco de 285 mm con 2-Pistones CalipersFrenos Traseros: Monodisco de 240 mm con 2-Pistones CalipersDIMENSIONES: DIMENSIONSEstanque - reserva: 20 l (5.3 gallon US)Peso en seco: 201 kg (443.1 pounds)No le habia ni quitado el signo de venta :pDomingo en la mañana, jodiendo a los vecinos de la esquina.Unos meses despues de comprar la gsx me robaron en mi negocio y desgraciadamente tuve que deshacerme de la gsx.Me hubiera gustado agregar mas fotos de ambas motos y los cambios que les hice poco a poco a cada una, pero mi esposa me ha borrado todas las que encontro. Las que he compartido en este post se salvaron porque las tenia en mi correo.Ahora estoy en planes de tener otra moto, probablemente esta vez consiga una cbr. pero eso no lo sabre hasta que llegue el momento.

Como podrán ver en algunos de mis post anteriores, en diciembre me hice de una suzuki 750 del año 1989, la cual se ve bien de primera vista pero que, como es de esperarse, hay muchas cosas que necesita corregirse. Fui a buscarla al pueblo de Muna, que esta aproximadamente a 60-80 minutos de mi ciudad y la traje por carretera con algunos problemas pero se dejo sentir los caballos que tiene ese motor. una vez en mi casa, hice un plan de 3 etapas para empezar a dejarla en su estado original segun mis posibilidades, pues algunas piezas solo se encuentran en deshuesaderos o cucaracheando de taller en taller. Las etapas son: - carburadores - motor - estetica los problemas que tiene son: - el motor estaba muy acelerado - a veces la primera la escupe, hay que dejarla pisada. - la bateria hay que reemplazarla. - los espejos funcionan pero estan en muy mal estado, hay que cambiarlos. - el motor suda aceite. - hay que reemplazar el embrague. Esta moto la compre contra toda voluntad de mi esposa, la cual odia las motos y mas las deportivas, a eso hay que sumarle que el modelo es viejo y que necesito gastarle dinero para que pueda estar presentable. A la semana la lleve a mi mecanico para que le baje un poco a la aceleracion, lo cual se hizo en un dia y no hubo ningun problema. A la semana siguiente, la lleve al bar donde voy algunos sabados y ahi estuve presumiendola toda la tarde; a la hora de regresar ya no quiso arrancar la maldita, ni empujada ni pasandole carga ni nada, muerta completamente. Aqui empezaron mis problemas. Arrastre sus 180kg por casi cuatro kilometros desde el bar hasta mi casa. En cada paso juraba que la iba a vender por piezas o chatarra. Lo peor fue que mi esposa me recordo que esto era una mala idea. Estas fotos las tome mientras descansaba de la caminata con la culera. El problema fue el regulador y como me dio mucha flojera llevarla hasta mi taller de confianza, la lleve a otro que esta en la esquina de mi casa para que le cambien el regulador, lo cual se hizo el mismo dia y fui a buscarla en la tarde... preparense para los problemas, mas vale que teman... Cuando fui a recogerla, le pedi al mecanico que le revise el aceite y que lave los carburadores, de buena gana me dijo que si y que al dia siguiente podria ir por ella; al dia siguiente fui y no estaba lista, al segundo dia tampoco, y asi una semana hasta que me dijo que no podia sincronizar los carburadores, me devolvio la moto y ya no arrancaba. estas fotos las tome cuando iba cada dia a verla al taller: De este taller la lleve a otro, en donde le cambiaron las agujas y ya por fin arranco, sin embargo, cuando el motor se calentaba se apagaba, y eso ocurria a los cinco minutos porque el sistema de enfriamiento es por aceite solamente, por lo que la moto debe estar en movimiento para que pueda funcionar. Asi la estuve usando por dos semanas hasta que se revento el cable del embrague, por lo que tuve que pedir un rescate. Se la lleve a mi mecanico y me dijo que no queria recibirla porque no sabia como calibrar los carburadores, y asi me paso con otros dos talleres mas; encabronado, la deje asentada en mi casa por un poco mas de un mes mientras pensaba la manera de deshacerme de ella. Mi ultima opcion era el taller de la suzuki pero ya no estaba seguro de contar con el dinero que me costaria su servicio. Hace una semana, regresando del trabajo, vi un taller pequeño y en la puerta habia una ninja 250; yo tuve una ex500, por lo que me acerque a verla y aproveche para preguntarle al mecanico si conocia las 750 de suzuki, a lo que m respondio que si, y que tambien sabia que era un problema carburarlas sin un vacuometro. Le conte mis desgracias con la gorda y me dijo que se la lleve para ver que podia hacer, asi que el sabado me levante temprano y se la lleve arrastrando. Me dijo que la vaya a buscar el lunes, pero ese dia no estaba lista, ni siquiera la habia revisado, lo se porque estaba en el mismo lugar y en la misma posicion que yo mismo la habia dejado. Y asi me estuvo dando vueltas hasta que fue sabado otra vez. Ese dia pase en la mañana y la vi en el mismo lugar y ni siquiera entre a verla, segui de largo pensando que ya no habia remedio para mi moto. Al medio dia me decidi ir a buscarla y llevarla de nuevo arrastrando hasta mi casa pero me dan la sorpresa que ya esta lista. El pinche mecanico le cambio las piezas y la carburo en dos o tres horas mas o menos!!! Ademas, me comento que tiene almacenado un motor del mismo modelo del cual me puede vender piezas originales en buen estado. Aun hay una pequeña falla en la carburacion pero es minima y casi imperceptible; el finde debo llevarla para un segundo ajuste que debe corregir este problema y espero que con eso ya quede solucionado en lo que a los mikuni se refiere. Me falta meter mano al motor, lo cual es mas caro y tardado; por ahora la voy a usar asi porque me he gastado mas del presupuesto que le tenia asignado, pero al menos ya tengo a un mecanico que la conoce y que sabe en que se mete. Aqui unas fotillos que le tome cuando la traje: y como plus, he de contar que el domingo la saque para llenarle el tanque y se me paro en la esquina, ya no quiso arrancar. Estuve intentando arrancarla sin exito hasta que me di cuenta que el boton de la gasolina estaba presionado; lo puse en la posicion correcta y todo bien, pero fue un buen susto. saludos.