Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - softmania

Páginas: [1] 2 3
1
Visual Basic .NET / C# / Re:Solo Números en un TextBox (Vb .Net)
« en: Marzo 16, 2014, 09:42:31 pm »
Citar
La intención no es revivir el post haciendo spam, simplemente que considero que el foro es casi un manual para muchos miembros, por lo que no quería dejar dos post con soluciones a problemas similares

Código: (VB) [Seleccionar]
Enum TipoNumeros
        DECIMALES
        ENTEROS
    End Enum

Código: (VB) [Seleccionar]
  ''' <summary>
    ''' By Softmania -
    ''' Permite ingresar Solo Numeros.
    ''' Estos puenden ser del tipo entero o decimal.
    ''' (Colocar en el evento KeyPress del control)
    ''' </summary>
    ''' <param name="bAcepta_Signos">Permite establecer si se acepta el ingreso de signos</param>
    ''' <param name="e">Instancia del evento</param>
    ''' <param name="TipoNumero">Tipo de numeros, decimales o enteros</param>
    ''' <remarks></remarks>

    Public Sub Solo_Numeros(ByVal bAcepta_Signos As Boolean, ByVal e As System.Windows.Forms.KeyPressEventArgs, ByVal TipoNumero As TipoNumeros)
        Dim sCadena As String
        'By Softmania
        If bAcepta_Signos = True Then
            sCadena = "0123456789,-+"
        Else
            sCadena = "0123456789,"
        End If
        Select Case TipoNumero
            Case TipoNumeros.DECIMALES
                If InStr(1, sCadena & Chr(8), e.KeyChar) = 0 Then
                    'cambiamos el punto por la coma ...
                    If e.KeyChar = "." Then
                        e.KeyChar = ","
                    Else
                        e.KeyChar = ""
                    End If
                End If

            Case TipoNumeros.ENTEROS
                If InStr(1, sCadena & Chr(8), e.KeyChar) = 0 Then
                    e.KeyChar = ""
                End If
        End Select
    End Sub

Salu2 Colegas

2
Visual Basic .NET / C# / Re:Ayuda con un ComboBox
« en: Febrero 23, 2014, 10:43:25 pm »
Hola colega fezaca  :)

Citar
Agrega dos textbox y un combobox (TextBox1,TextBox2,ComboBox1)

Código: (VB) [Seleccionar]
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Agregar_Combo()
    End Sub

    Private Sub Agregar_Combo()
        ComboBox1.DisplayMember = "nombre"
        ComboBox1.ValueMember = "id"
        ComboBox1.DataSource = Obtener_Datos()
    End Sub


    Private Function Obtener_Datos() As DataTable
        Dim Dt As New DataTable
        Dim Dr As DataRow

        'aca pongo esto como para tener unos datos en el datatable
        'podrían ser los datos directos de tu BDD

        Dt.Columns.Add(New DataColumn("id", GetType(Integer)))
        Dt.Columns.Add(New DataColumn("nombre", GetType(String)))

        Dr = Dt.NewRow()
        Dr("id") = 10
        Dr("nombre") = "pepe"
        Dt.Rows.Add(Dr)

        Dr = Dt.NewRow()
        Dr("id") = 20
        Dr("nombre") = "juan"
        Dt.Rows.Add(Dr)

       
        Dt.AcceptChanges()

        Return Dt
    End Function

    Private Sub ComboBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
        TextBox1.Text = ComboBox1.Text
        TextBox2.Text = ComboBox1.SelectedValue
    End Sub
End Class

Espero te sirva ... salu2 8)

3
Visual Basic .NET / C# / Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« en: Noviembre 20, 2013, 02:04:22 am »
Hola nuevamente Colegas ...

Bueno acá les dejo el Link de un ejemplo en vb2010.  :)

Hay una clase que les permitirá utilizar un módem GSM ... y un plus  ::) ... que es una función que fue echa a medida del módem claro, separando la cadena de datos obtenidas y presentada en el listview ...

http://www.mediafire.com/download/9ijg2kwnpmkbbf8/Modem_SMS.rar

pass: softmania

Salu2 Colegas

4
Visual Basic .NET / C# / Re:ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« en: Noviembre 20, 2013, 12:20:01 am »
Hola Enter ... te defino a función que pides ...


Citar
Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String

Código: (VB) [Seleccionar]
Enum Tipo
        SMS_NO_LEIDOS
        SMS_LEIDOS
        SMS_NO_ENVIADOS
        SMS_ENVIADOS
        SMS_TODOS
    End Enum

 
Código: (VB) [Seleccionar]
  Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) 'este comando establece el modo texto

            Select Case Tipo
                Case Form1.Tipo.SMS_NO_LEIDOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC UNREAD" & Chr(34) & Chr(13)) 'solo recibiremos los sms no leidos
                Case Form1.Tipo.SMS_LEIDOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC READ" & Chr(34) & Chr(13)) 'solo recibiremos los sms leidos
                Case Form1.Tipo.SMS_NO_ENVIADOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO UNSENT" & Chr(34) & Chr(13)) 'solo recibiremos los sms no enviados
                Case Form1.Tipo.SMS_ENVIADOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO SENT" & Chr(34) & Chr(13)) 'solo recibiremos los sms enviados
                Case Form1.Tipo.SMS_TODOS
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "ALL" & Chr(34) & Chr(13)) 'Recibiremos todos los sms

            End Select
            Recibir_mensaje = vbOK
        Catch ex As Exception
            Recibir_mensaje = ex.Message
        End Try
    End Function

Hola Jerónimo

Citar
no sé si se necesita un modem especial

Puedes usar cualquier módem gsm ... (puede que tengas un módem gsm a mano como son los módem claro y movistar que se usan para conectividad de internet o simplemente tu celular ... con el tema del celular puedes tener algunos  inconveniente dependiendo de la marca y modelo ...  )

Y como dice el colega Waldo

Citar
Si, si un simcard comun y silvestre como el de cualquier telefono



Esto tiene muchas aplicaciones. Se puede implementar en Desarrollos en donde automáticamente se envíen mensajes individuales o masivos para diferentes propósitos ....

Publicidades, estados de deudas, etc ...

Pero esto es potenciado con la capacidad de recibir y procesar los mensajes recibidos ... ya que mediante ellos se puede tener una conversación automatizada con el emisor ... ejemplo ... ampliaciones de servicios, selección de opciones, códigos de alertas,etc

Creo que ampliaré un poco mas con un ejemplo, consigan un módem claro, este tipo módem trae los driver contenidos en el mismo ...  ya estaré subiendo un ejemplo ... salu2 colegas


5
Visual Basic .NET / C# / ENVIAR Y RECIBIR SMS - MODEM GSM - COMANDOS AT
« en: Noviembre 19, 2013, 01:46:14 am »
Citar
Esto se encuentra en el foro de vb6 y el código es correspondiente a vb.net ... Moderador mi intención no es hacer spam ... simplemente trato de ordenar la información, el tema es que no se si debo borrar de vb6 el post ya que fue una respuesta.

Hola, bueno explicaré un poco como es el tema de los módem GSM a través de USB, así pueden practicar desde su celular, módem Claro, módem Movistar o desde cuales quiera…

Es realmente fácil la manipulación de los mismos, hay código AT estándar  que se aplica prácticamente en todos los módem y hay otros que son particulares de cada dispositivo…
Estos códigos AT nos permiten conversar con el dispositivo, pudiendo ejecutar intrucciones en el mismo, obtener datos y establecer configuraciones ...
No empecé explicando que es un comando AT, porque no pretendo profundizar conceptos, ni aburrirlos, pero sería bueno que investiguen un poco sobre el tema
Vamos al grano…

Explicaré con Vb.net, pero es equivalente a VB6…

Trataré de hacer el ejemplo lo más simple que se pueda

Primero hay que tener el driver del módem el cual permitirá interactuar con el puerto serie a través del puerto USB … este puede venir en forma individual o contenido en el aplicativo que la empresa haya proporcionado para interactuar con el mismo … ok

Una vez que tenemos instalado el driver… hay que identificar el puerto COM con el que acepta los comandos AT, ya que puede haber más de uno utilizados por el dispositivo…

En algunos casos se puede saber porque esta descripto en el mismo nombre con el que se encuentra el driver, en administrador de dispositivos (caso Windows), pero otras veces habrá que hacer algunas pruebas…

Programación

Agregamos un Control que nos permite conectar el puerto COM (o puerto serial), “Serialport”

Armamos una función de conexión

Código: (VB) [Seleccionar]
Private Function Conectar() As String
        Try
            With SerialPort1
                If .IsOpen Then
                    .Close()
                End If
                .PortName = “COM9”
                .BaudRate = 9600 ‘bits por segundo (velocidad)
                .DataBits = 8 ‘bits de datos
                .DtrEnable = False
                .StopBits = IO.Ports.StopBits.One
                .Parity = IO.Ports.Parity.None
                .Handshake = IO.Ports.Handshake.None
                .WriteBufferSize = 1024 ‘buffer de escritura
                .ReadBufferSize = 2048 ‘buffer de lectura
                .WriteTimeout = 500 ‘tiempo de espera
                .Encoding = System.Text.Encoding.Default
                .Open()
            End With
            Conectar = vbOK
        Catch ex As Exception
            Conectar = ex.Message
        End Try
    End Function

Citar
De donde saque los datos de la función?  De las propiedades del dispositivo,  allí se detalla la configuración del puerto …

Bién, ya estamos conectados… ahora … ¿Cómo enviamos un comando AT?

Haremos otra función para que se entienda

Código: (VB) [Seleccionar]
Public Function Check_AT() As String
        Try
            SerialPort1.Write("AT" & Chr(13))
            Check_AT = vbOK
        Catch ex As Exception
            Check_AT = ex.Message
        End Try
    End Function

Citar
EL chr(13) es necesario para darle ingreso al comando AT


Ahora unos comandos AT para tener en cuenta

ATZ&F = resetea el dispositivo

Código: (VB) [Seleccionar]
Private Function Resetear() As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            Resetear = vbOK
        Catch ex As Exception
            Resetear = ex.Message
        End Try
End Function

Para enviar SMS se construiría de la siguiente manera: AT+CMGS

Código: (VB) [Seleccionar]
Private Function Enviar_mensaje(ByVal Numero_Movil As String, ByVal Mensaje As String) As String
        Try
            SerialPort1.Write("APZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘este comando establece el modo texto
            SerialPort1.Write("AT+CMGS=" & Chr(34) & (Numero_Movil) & Chr(34) & Chr(13))
            SerialPort1.Write(Mensaje & Chr(26))
            Enviar_mensaje = vbOK
        Catch ex As Exception
            Enviar_mensaje = ex.Message
        End Try
End Function

Citar
Chr(26) es un carácter especial necesario para poder indicar el envío del mensaje “→”

Para obtener mensajes contenidos en el dispositivo sería algo así: AT+CMGL

Código: (VB) [Seleccionar]
Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘este comando establece el modo texto

            Select Case Tipo
                Case 0
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC UNREAD" & Chr(34) & Chr(13)) ‘solo recibiremos los sms no leidos
                Case 1
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC READ" & Chr(34) & Chr(13)) ‘solo recibiremos los sms leidos
                Case 2
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO UNSENT" & Chr(34) & Chr(13)) ‘solo recibiremos los sms no enviados
                Case 3
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO SENT" & Chr(34) & Chr(13)) ‘solo recibiremos los sms enviados
                Case 4
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "ALL" & Chr(34) & Chr(13)) ‘Recibiremos todos los sms

            End Select
            Recibir_mensaje = vbOK
        Catch ex As Exception
            Recibir_mensaje = ex.Message
        End Try
End Function

Para recibir en forma automática mensajes que vaya recibiendo el dispositivo sería:

Código: (VB) [Seleccionar]
Private Function Auto_Recibir() As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13)) ‘reseteamos
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘establecemos el modo texto
            SerialPort1.Write("AT+CNMI=" & Chr(34) & "1,2,0,0,0" & Chr(34) & Chr(13)) ‘esto es más largo de explicar, recomiendo lo investiguen
            Auto_Recibir = vbOK
        Catch ex As Exception

            Auto_Recibir = ex.Message
        End Try

    End Function

Bueno hay muchos comandos mas, como saber la señal del dispositivo, nivel de carga de la batería, fabricante, se pueden hacer llamadas, colgar llamadas, etc y algo interesante para que investiguen, se pueden redireccionar llamadas ... mnmnm

Bueno salu2

6
Hola a todos los Colegas ...
 
aquí quiero mostrarles una función que les permitirá construir la consulta SQL necesaria para realizar una búsqueda de datos.

Hay funciones especificas según el motor de base de datos utilizado, que resolverían esto de manera mas eficiente, algunos sujetos a pre-configuraciones.

Citar
Esta función nos permite independizar nuestro desarrollo de una base de datos específica

El tema de un buscador es no complicar al cliente con muchas opciones, simplemente que encuentre los datos de manera eficiente ...

Esta función permite establecer en forma descentralizada algunas opciones en la búsqueda, ideal para considerarla dentro de un módulo como pública ...

Primero se ingresan los datos a buscar, estos son de l estilo "gaseosa cola 2l", es decir que el espacio implicará el final y el comienzo de una cadena para la búsqueda

Luego se ingresan en los campos que deseamos buscar, separando cada nombre de campo con un caracter determinado, en este caso usé el "|"

asi que por ejemplo sería --- "codigo|descripcion|proveedor" --- > significa que se buscarán coincidencias en esos tres campos al mismo tiempo o por separado, ya explico mas adelante


Establecemos la tabla correspondiente "tb_articulos"

La próxima opción sería in índice, el cual al ingresar 0 (cero), permitirá buscar de manera simultánea en todos los campos ingresados

codigo   descripcion   proveedor

pero si colocamos por ejemplo 1, solo buscará coincidencias con el campo "codigo", si es 2 "descripcion" y así sucesivamente

Ahora bién esto nos permitiría construir opciones de búsquedas, por ejemplo:

0- Búsqueda general        (buscar en todos los campos)
--------------------------
1- Búscar por código
2- Búscar por descripción
3- Búscar por proveedor

Por último, como no podía faltar una compuerta lógica ... la cual puede ser muy discutible, ya que muchos optarán por implementar caracteres especiales para esto como "(+)" o bién palabras como "AND" y "OR", pero permitan expresar mi humilde opinión sobre esto, en mi experiencia como desarrollador, he notado que las personas solo utilizan el sistema de búsqueda "O", similar a lo que realizan con el buscador google, sin prefijos ni nada por el estilo, solo en casos muy especiales un usuario requiere una "Y" ... vendrán a la mente muchas opciones en donde podríamos implementar una lógica "Y", pero sinceramente, la necesidad de usar esta lógica dependerá mucho de la cantidad de datos contenidos en la base de datos, que puedan coincidir en dos o tres muestras de cadenas de búsqueda. A pesar de esto solo será relevante dependiendo de la cantidad de resultados que obtengamos en dicha búsqueda, ya que pueden ser pocos y de fácil visualización, es decir, si volvemos al ejemplo anterior:

"gaseosa cola 2l"

supongo que si ponemos "gaseosa" apareceran mas coincidencias que en "gaseosa cola 2l", y estas coincidencias disminuirán  de manera rigurosa si por ejemplo agregamos una marca o un código, ejemplos


"coca cola 2l"

Es más fácil para el usuario establecer una "forma" (quizás en el cargado de un artículo) para una búsqueda eficiente, que recordar la manera o que opciones debería seleccionar para buscar cada artículo, y obtener la menor cantidad de resultados posible, se comprende?

Pero bueno el tema es que existe la lógica "AND" y "OR" de manera "generalizada" dentro de la función y si se desea se puede agregar como opción, mediante false para "OR" y true para "AND"

Dependiendo del motor utilizado (ej. caso mysql, si se codifica la base de datos correctamente), seguramente no habrá inconvenientes con LIKE, en cuanto a acentos. Tampoco hará distinción entre mayúsculas o minúsculas. Pero siempre hay que recordar las funciones SQL UPPER(), REPLACE(), LOWER() si se requiere por algún motivo acomodar la función a nuestras necesidades.

Bueno entonces la función sería:



Código: (VB) [Seleccionar]
Dim sDatos as string = "cadena1 cadena2 cadena3"

fBuscador(sDatos, "codigo|descripcion|proveedor", "tb_articulos", 0, false)

Código: (VB) [Seleccionar]
Imports System.Text
Código: (VB) [Seleccionar]
    Function fBuscador(ByVal sDato As String, ByVal sCampos As String, ByVal sTabla As String, ByVal iIndiceCampo As Integer, ByVal bLogica As Boolean) As String
        'BY SOFTMANIA
        Dim sDatos As New StringBuilder
        Dim sSplitDatos() As String = sDato.Split(" ")
        Dim sSplitCampos() As String = sCampos.Split("|")
        Dim bVerifica As Boolean
        Dim iCont As Integer
        Dim iCantCampos As Integer

        sDatos.Append("SELECT " & sTabla & ".* FROM " & sTabla & " WHERE ")

        iCantCampos = UBound(sSplitCampos)

        For Each sSplitCampo As String In sSplitCampos
            iCont = iCont + 1
            If iIndiceCampo = iCont Or iIndiceCampo = 0 Then

                bVerifica = False

                For Each sSplitDato As String In sSplitDatos

                    If bLogica = False Then
                        If bVerifica = False Then
                            sDatos.Append("(" & sTabla & "." & sSplitCampo & " LIKE '%" & sSplitDato & "%'")
                            bVerifica = True
                        Else
                            sDatos.Append(" OR " & sTabla & "." & sSplitCampo & " LIKE '%" & sSplitDato & "%'")
                        End If
                    Else
                        If bVerifica = False Then
                            sDatos.Append("(" & sTabla & "." & sSplitCampo & " LIKE '%" & sSplitDato & "%'")
                            bVerifica = True
                        Else
                            sDatos.Append(" AND " & sTabla & "." & sSplitCampo & " LIKE '%" & sSplitDato & "%'")
                        End If
                    End If
                Next
                If iIndiceCampo = 0 And iCantCampos > 0 And iCantCampos > iCont - 1 Then
                    sDatos.Append(") OR ")
                Else
                    sDatos.Append(")")
                End If
            End If
        Next
        sDatos.Append(";")
        Return sDatos.ToString
    End Function

Citar
Mucha explicación para una función tan simple y básica, pero la idea es abrir el debate  ;)



Salu2 COLEGAS

7
Visual Basic .NET / C# / Re:Un Split con mas de un separador
« en: Noviembre 16, 2013, 02:35:31 am »
Hola colega NDWgt ... en el ejemplo que pusiste veo que tienes un split y con un solo separador, el espacio ... es por eso que explico que no es tan común usar un split con varios separadores, la idea era mostrar como se puede extender un split con mas de un separador. En muchos lenguajes hay que hacer una gran función para poder obtener los resultados que se obtiene en una simple línea de vb.net, a pesar de que en esos lenguajes también exista dicha función o su equivalente.

8
Visual Basic .NET / C# / Un Split con mas de un separador
« en: Noviembre 10, 2013, 11:47:24 pm »
Hola a todos ...

Aquí les dejo como hacer un split con varios separadores

 
Código: (VB) [Seleccionar]

        Dim sCadena As String
        Dim sResultado As String = ""
        Dim sSplit() As String
        'cargamos una cadena de nombres y variamos los separadores
        sCadena = "pablo;juan;pedro|marcos;miguel|jorge"
        'en el split especificamos que carateres serán utilizados como separador
        'en este caso ";" y "|"
        sSplit = sCadena.Split(New [Char]() {";", "|"})
        'y mostramos el resultado
        For Each sResulFor As String In sSplit
            sResultado = sResultado + sResulFor + vbNewLine
        Next
        MsgBox(sResultado)

   
Citar
  No es algo muy común de utilizar, pero en algún momento pueden necesitarlo ...

      salu2 a todos

9
Visual Basic .NET / C# / Usar XML como un archivo INI
« en: Octubre 27, 2013, 02:29:02 am »
Hola, como lo dice el título una forma de usar XML para guardar configuración.

Código: (VB) [Seleccionar]
  Public Function LeerConfig(ByVal sNombre As String) As String
        Dim sReturn As String = String.Empty
        Dim dsConfig As New DataSet
        If System.IO.File.Exists(Application.StartupPath & "\config.xml") Then
            dsConfig.ReadXml(Application.StartupPath & "\config.xml")
        Else
            dsConfig.Tables.Add("Configuracion")
            dsConfig.Tables(0).Columns.Add("Nombre", GetType(String))
            dsConfig.Tables(0).Columns.Add("Valor", GetType(String))
        End If

        Dim dr() As DataRow = dsConfig.Tables("Configuracion").Select("Nombre = '" & sNombre & "'")
        If dr.Length = 1 Then sReturn = dr(0)("Valor").ToString

        Return sReturn
    End Function

    Public Sub GuadarConfig(ByVal sNombre As String, ByVal sValor As String)
        Dim dsConfig As New DataSet
        If System.IO.File.Exists(Application.StartupPath & "\config.xml") Then
            dsConfig.ReadXml(Application.StartupPath & "\config.xml")
        Else

            dsConfig.Tables.Add("Configuracion")
            dsConfig.Tables(0).Columns.Add("Nombre", GetType(String))
            dsConfig.Tables(0).Columns.Add("Valor", GetType(String))
        End If

        Dim dr() As DataRow = dsConfig.Tables(0).Select("Nombre = '" & sNombre & "'")
        If dr.Length = 1 Then
            dr(0)("Valor") = sValor
        Else
            Dim drConfig As DataRow = dsConfig.Tables("Configuracion").NewRow
            drConfig("Nombre") = sNombre
            drConfig("Valor") = sValor
            dsConfig.Tables("Configuracion").Rows.Add(drConfig)
        End If
        dsConfig.WriteXml(Application.StartupPath & "\config.xml")
    End Sub

SALU2

10
Visual Basic .NET / C# / Verificación de CUIT
« en: Octubre 25, 2013, 10:37:27 pm »
Esta función permite verificar si el CUIT ingresado es correcto

Código: (VB) [Seleccionar]
  Public Function VerificacionCuit(ByVal sValor As String) As Boolean
        Dim sValorNeto As String
        Dim iSuma As Integer
        Dim iResto As Integer
        Dim iVerificador As Integer
        Dim iVerificadorCadena As Integer
        Dim iValorMaTrizConst() As Integer = {5, 4, 3, 2, 7, 6, 5, 4, 3, 2}
        Dim iCont As Integer
        'by softmania
        'Quitamos los caracteres que no usaremos
        sValorNeto = sValor.Replace("-", "").ToString
        'sValorNeto = Valor.Replace("/", "").ToString

        Try
            'verificamos que sean 11 dígitos
            If sValorNeto.Length <> 11 Then Return False : Exit Function
            'separamos el dígito verificador del resto de los números
            iVerificadorCadena = CInt(sValorNeto.Substring(10, 1).ToString)
            'separamos todos los números del dígito verficador
            sValorNeto = sValorNeto.Substring(0, 10).ToString

            For iCont = 0 To 9
                'aquí se suman las multiplicaciones de cada dígito por cada número contenido en la matríz
                'ejemplo 20-28175331-1
                'sería
                '  2   0   2    8   1    7    5    3   3   1
                'X
                '  5   4   3    2   7    6    5    4   3   2
                '-------------------------------------------
                ' 10 + 0 + 6 + 16 + 7 + 42 + 25 + 12 + 9 + 2 =  129

                iSuma = iSuma + (CInt(sValorNeto.Substring(iCont, 1)) * iValorMaTrizConst(iCont))

            Next
            ' Obtenermos el resto de la suma dividida 11
            iResto = iSuma Mod 11


            'Según el resto obtenido calculamos el dígito verificador
            If iResto = 0 Then
                iVerificador = 0
            ElseIf iResto = 1 Then
                iVerificador = 9
            Else
                iVerificador = 11 - iResto
            End If

            'comparamos el dígito verificador obtenido con el dígito de verificación ingresado
            'establecemos si la función devuelve false o true según corresponda
            If iVerificador = iVerificadorCadena Then
                Return True

            Else
                Return False

            End If

        Catch ex As Exception
            Return False
        End Try

    End Function

11
Puede ser de ayuda en sistema de gestión contable ...

Es una función que utilizaba visual basic 6, pero unos mínimos retoques y quedo funcional para NET

Citar
Espero que les sea útil

Código: [Seleccionar]
Enum Tipo_Redondeo
        arriba = 0
        abajo = 1
        cercano = 2
    End Enum
    Public Function fRedondeo(ByVal dblValor As Double, ByVal dblSalto_Redondeo As Double, ByVal Tipo As Tipo_Redondeo) As Double
    'por softmania
        Dim dblReferencia As Double
        Dim dblResultado As Double
        Dim boolSigno As Boolean
        'se verifica el signo para despúes asignarlo al resultado
        If dblValor < 0 Then boolSigno = True
        dblValor = Math.Abs(dblValor)

        'cargamos la variable que servirá de referencia
        dblReferencia = dblValor - Int(dblValor)
        'Verificamos que el valor requiera redondeo decimal
        If dblReferencia = 0 Then fRedondeo = dblValor : Exit Function
        Select Case Tipo
            Case 0
                'redondeo decimal hacia arriba
                If dblReferencia <= dblSalto_Redondeo Then
                    dblResultado = Int(dblValor) + dblSalto_Redondeo
                Else
                    dblResultado = dblReferencia / dblSalto_Redondeo
                    dblResultado = -Int(dblResultado * (-1))
                    dblResultado = Int(dblValor) + (dblResultado * dblSalto_Redondeo)
                End If
            Case 1
                'redondeo decimal hacia abajo
                Select Case dblSalto_Redondeo
                    Case Is > dblReferencia
                        dblResultado = Int(dblValor)
                    Case Is = dblReferencia
                        dblResultado = Int(dblValor) + dblSalto_Redondeo
                    Case Is < dblReferencia
                        dblResultado = Int(dblReferencia / dblSalto_Redondeo)
                        dblResultado = Int(dblValor) + (dblSalto_Redondeo * dblResultado)
                End Select

            Case 2
                'redondeo decimal por proximidad de valor
                dblResultado = Math.Round(dblReferencia / dblSalto_Redondeo)
                dblResultado = Int(dblValor) + (dblSalto_Redondeo * dblResultado)

        End Select

        If boolSigno = True Then
            fRedondeo = dblResultado * (-1)
        Else
            fRedondeo = dblResultado
        End If



    End Function

salu2 a todos


12
Visual Basic .NET / C# / CLASE PARA ENVIAR CORREOS
« en: Octubre 17, 2013, 08:52:59 pm »
Citar
Hola a todos ... aquí les dejo una clase para enviar correos.
La clase lo único que hace es ordenar un poco.
Las clases System.Net.Mail.MailMessage y System.Net.Mail.SmtpClient son excelentes y fácil de usar en forma directa

Código: (VB) [Seleccionar]
Public Class cMail

#Region "INTRO"

    'Clase creada por SoftMania
    'Aplicación: Clase para envíar correos

    'Declarar clase
    'Dim Correo As New cMail

    'Modo de implementación

    'Los nombres son intuitivos ----------------------------------------------------------------

    '   Correo.pServidorCorreo = "smtp.gmail.com"
    '   Correo.pPuertoCorreo = 587
    '   Correo.pHabilitarSsl = True                         'conexión segura si fuera requerido
    '   Correo.pUsuario = "correo_origen@xxxx.com"          'usuario del correo
    '   Correo.pPassWord = "xxxxx"                          'pass del correo
    '   Correo.pCodificacion = cMail.eCodificacion.UTF8
    '   Correo.pCorreoRemitente = "correo_origen@xxxx.com"  'el que envía :P
    '   Correo.pCorreoDestino = "correo_destino@xxxx.com"   'el que recine :P
    '   Correo.pApodo = "PEPE"
    '   Correo.pAsunto = "AQUI EL ASUNTO"
    '   Correo.pMensaje = "AQUI EL MENSAJE"
    '   Correo.pFormatoHtml = True
    '   Correo.pPrioridad = cMail.ePrioridad.NORMAL
    '   Correo.Enviar_correo()
    '-------------------------------------------------------------------------------------------
#End Region

#Region "DECLARACION"
    Dim sCorreoRemitente As String
    Dim sServidorCorreo As String = "smtp.gmail.com"
    Dim sPuertoCorreo As Integer = 587
    Dim sHabilitarSsl As Boolean = True
    Dim sCorreoDestino As String
    Dim sAsunto As String
    Dim sMensaje As String
    Dim sPrioridad As ePrioridad = ePrioridad.NORMAL
    Dim sCodificacion As eCodificacion = eCodificacion.UTF8
    Dim sUsuario As String
    Dim sPassWord As String
    Dim sApodo As String
    Dim sFormatoHtml As Boolean = True
    Enum eCodificacion
        UTF8
        UTF32
        UTF7
        ASCII
    End Enum
    Enum ePrioridad
        ALTA
        NORMAL
        BAJA
    End Enum
#End Region
#Region "PROPIEDADES"
    Public Property pFormatoHtml() As String
        Get
            Return sFormatoHtml
        End Get
        Set(ByVal value As String)
            sFormatoHtml = value
        End Set
    End Property
    Public Property pUsuario() As String
        Get
            Return sUsuario
        End Get
        Set(ByVal value As String)
            sUsuario = value
        End Set
    End Property
    Public Property pApodo() As String
        Get
            Return sApodo
        End Get
        Set(ByVal value As String)
            sApodo = value
        End Set
    End Property
    Public Property pPassWord() As String
        Get
            Return sPassWord
        End Get
        Set(ByVal value As String)
            sPassWord = value
        End Set
    End Property
    Public Property pPrioridad() As ePrioridad
        Get
            Return sPrioridad
        End Get
        Set(ByVal value As ePrioridad)
            sPrioridad = value
        End Set
    End Property
    Public Property pCodificacion() As eCodificacion
        Get
            Return sCodificacion
        End Get
        Set(ByVal value As eCodificacion)
            sCodificacion = value
        End Set
    End Property
    Public Property pMensaje() As String
        Get
            Return sMensaje
        End Get
        Set(ByVal value As String)
            sMensaje = value
        End Set
    End Property
    Public Property pAsunto() As String
        Get
            Return Me.sAsunto
        End Get
        Set(ByVal value As String)
            Me.sAsunto = value
        End Set
    End Property
    Public Property pCorreoDestino() As String
        Get
            Return Me.sCorreoDestino
        End Get
        Set(ByVal value As String)
            Me.sCorreoDestino = value
        End Set
    End Property
    Public Property pHabilitarSsl() As Boolean
        Get
            Return Me.sHabilitarSsl
        End Get
        Set(ByVal value As Boolean)
            Me.sHabilitarSsl = value
        End Set
    End Property
    Public Property pPuertoCorreo() As Integer
        Get
            Return Me.sPuertoCorreo
        End Get
        Set(ByVal value As Integer)
            Me.sPuertoCorreo = value
        End Set
    End Property
    Public Property pServidorCorreo() As String
        Get
            Return Me.sServidorCorreo
        End Get
        Set(ByVal value As String)

            Me.sServidorCorreo = value
        End Set
    End Property
    Public Property pCorreoRemitente() As String
        Get
            Return Me.sCorreoRemitente
        End Get
        Set(ByVal value As String)
            Me.sCorreoRemitente = value
        End Set
    End Property
#End Region
#Region "FUNCIONES"
    Public Function Enviar_correo() As Boolean
        Dim rCodificacion As System.Text.Encoding
        Dim rPrioridad As System.Net.Mail.MailPriority
        Dim vMensaje As New System.Net.Mail.MailMessage
        Dim ServSMTP As New System.Net.Mail.SmtpClient
        ServSMTP.Host = sServidorCorreo
        ServSMTP.Port = sPuertoCorreo
        ServSMTP.EnableSsl = sHabilitarSsl
        ServSMTP.Credentials = New System.Net.NetworkCredential(sUsuario, sPassWord)
        vMensaje.[To].Add(sCorreoDestino) 'Cuenta de Correo al que se le quiere enviar el e-mail
        Select Case sCodificacion
            Case eCodificacion.ASCII
                rCodificacion = System.Text.Encoding.ASCII
            Case eCodificacion.UTF32
                rCodificacion = System.Text.Encoding.UTF32
            Case eCodificacion.UTF7
                rCodificacion = System.Text.Encoding.UTF7
            Case Else
                rCodificacion = System.Text.Encoding.UTF8
        End Select
        Select Case sPrioridad
            Case ePrioridad.ALTA
                rPrioridad = Net.Mail.MailPriority.High
            Case ePrioridad.BAJA
                rPrioridad = Net.Mail.MailPriority.Low
            Case ePrioridad.NORMAL
                rPrioridad = Net.Mail.MailPriority.Normal
        End Select
        vMensaje.From = New System.Net.Mail.MailAddress(sCorreoRemitente, sApodo, rCodificacion)
        vMensaje.Subject = sAsunto
        vMensaje.SubjectEncoding = rCodificacion
        vMensaje.Body = sMensaje
        vMensaje.BodyEncoding = rCodificacion
        vMensaje.IsBodyHtml = sFormatoHtml
        vMensaje.Priority = rPrioridad
        Try
            ServSMTP.Send(vMensaje)
            Return True
        Catch ex As System.Net.Mail.SmtpException
            Return False
        End Try
    End Function
#End Region
End Class

Ando con poco tiempo, me despido colegas ...  salu2 a todos  ;)

13
Visual Basic 6 / Re:ENVIAR SMS DESDE VISUAL BASIC EN ARGENTINA
« en: Junio 16, 2013, 02:23:00 am »
Hola, bueno explicaré un poco como es el tema de los módem GSM a través de USB, así pueden practicar desde su celular, módem Claro, módem Movistar o desde cuales quiera…

Es realmente fácil la manipulación de los mismos, hay código AT estándar  que se aplica prácticamente en todos los módem y hay otros que son particulares de cada dispositivo…
Estos códigos AT nos permiten conversar con el dispositivo, pudiendo ejecutar intrucciones en el mismo, obtener datos y establecer configuraciones ...
No empecé explicando que es un comando AT, porque no pretendo profundizar conceptos, ni aburrirlos, pero sería bueno que investiguen un poco sobre el tema
Vamos al grano…

Explicaré con Vb.net, pero es equivalente a VB6…

Trataré de hacer el ejemplo lo más simple que se pueda

Primero hay que tener el driver del módem el cual permitirá interactuar con el puerto serie a través del puerto USB … este puede venir en forma individual o contenido en el aplicativo que la empresa haya proporcionado para interactuar con el mismo … ok

Una vez que tenemos instalado el driver… hay que identificar el puerto COM con el que acepta los comandos AT, ya que puede haber más de uno utilizados por el dispositivo…

En algunos casos se puede saber porque esta descripto en el mismo nombre con el que se encuentra el driver, en administrador de dispositivos (caso Windows), pero otras veces habrá que hacer algunas pruebas…

Programación

Agregamos un Control que nos permite conectar el puerto COM (o puerto serial), “Serialport”

Armamos una función de conexión

Código: [Seleccionar]
Private Function Conectar() As String
        Try
            With SerialPort1
                If .IsOpen Then
                    .Close()
                End If
                .PortName = “COM9”
                .BaudRate = 9600 ‘bits por segundo (velocidad)
                .DataBits = 8 ‘bits de datos
                .DtrEnable = False
                .StopBits = IO.Ports.StopBits.One
                .Parity = IO.Ports.Parity.None
                .Handshake = IO.Ports.Handshake.None
                .WriteBufferSize = 1024 ‘buffer de escritura
                .ReadBufferSize = 2048 ‘buffer de lectura
                .WriteTimeout = 500 ‘tiempo de espera
                .Encoding = System.Text.Encoding.Default
                .Open()
            End With
            Conectar = vbOK
        Catch ex As Exception
            Conectar = ex.Message
        End Try
    End Function

Citar
De donde saque los datos de la función?  De las propiedades del dispositivo,  allí se detalla la configuración del puerto …

Bién, ya estamos conectados… ahora … ¿Cómo enviamos un comando AT?

Haremos otra función para que se entienda

Código: [Seleccionar]
Public Function Check_AT() As String
        Try
            SerialPort1.Write("AT" & Chr(13))
            Check_AT = vbOK
        Catch ex As Exception
            Check_AT = ex.Message
        End Try
    End Function

Citar
EL chr(13) es necesario para darle ingreso al comando AT


Ahora unos comandos AT para tener en cuenta

ATZ&F = resetea el dispositivo

Código: [Seleccionar]
Private Function Resetear() As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            Resetear = vbOK
        Catch ex As Exception
            Resetear = ex.Message
        End Try
End Function

Para enviar SMS se construiría de la siguiente manera: AT+CMGS

Código: [Seleccionar]
Private Function Enviar_mensaje(ByVal Numero_Movil As String, ByVal Mensaje As String) As String
        Try
            SerialPort1.Write("APZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘este comando establece el modo texto
            SerialPort1.Write("AT+CMGS=" & Chr(34) & (Numero_Movil) & Chr(34) & Chr(13))
            SerialPort1.Write(Mensaje & Chr(26))
            Enviar_mensaje = vbOK
        Catch ex As Exception
            Enviar_mensaje = ex.Message
        End Try
End Function

Citar
Chr(26) es un carácter especial necesario para poder indicar el envío del mensaje “→”

Para obtener mensajes contenidos en el dispositivo sería algo así: AT+CMGL

Código: [Seleccionar]
Private Function Recibir_mensaje(ByVal Tipo As Tipo) As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13))
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘este comando establece el modo texto

            Select Case Tipo
                Case 0
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC UNREAD" & Chr(34) & Chr(13)) ‘solo recibiremos los sms no leidos
                Case 1
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "REC READ" & Chr(34) & Chr(13)) ‘solo recibiremos los sms leidos
                Case 2
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO UNSENT" & Chr(34) & Chr(13)) ‘solo recibiremos los sms no enviados
                Case 3
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "STO SENT" & Chr(34) & Chr(13)) ‘solo recibiremos los sms enviados
                Case 4
                    SerialPort1.Write("AT+CMGL=" & Chr(34) & "ALL" & Chr(34) & Chr(13)) ‘Recibiremos todos los sms

            End Select
            Recibir_mensaje = vbOK
        Catch ex As Exception
            Recibir_mensaje = ex.Message
        End Try
End Function

Para recibir en forma automática mensajes que vaya recibiendo el dispositivo sería:

Código: [Seleccionar]
Private Function Auto_Recibir() As String
        Try
            SerialPort1.Write("ATZ&F" & Chr(13)) ‘reseteamos
            SerialPort1.Write("AT+CMGF=1" & Chr(13)) ‘establecemos el modo texto
            SerialPort1.Write("AT+CNMI=" & Chr(34) & "1,2,0,0,0" & Chr(34) & Chr(13)) ‘esto es más largo de explicar, recomiendo lo investiguen
            Auto_Recibir = vbOK
        Catch ex As Exception

            Auto_Recibir = ex.Message
        End Try

    End Function

Bueno hay muchos comandos mas, como saber la señal del dispositivo, nivel de carga de la batería, fabricante, se pueden hacer llamadas, colgar llamadas, etc y algo interesante para que investiguen, se pueden redireccionar llamadas ... mnmnm

Bueno salu2

14
Soy programador de .net, pero no migré porque hubiera algo que no haya podido hacer en vb6, solo por actualizarme. A través de él, pude aprender varios lenguajes en el camino, los cuales compartían mucho de su estructura, entre ellos el que mencionas, , visual movile, hb++ que es la contracara, de palm's y WIN CE. Así que entiendo tu sentimiento hacia vb6, jejejeje. Basic4Android es muy similar a vb6 en cuanto a código, es un poco precario en como fue diseñado en algunas cosas, que se yo, un ejemplo simple, en como se agregan los eventos, la declaración de los objetos ... etc, pero es muy potente. Cambian algunas cosas radicales, como es por ejemplo el conexionado a mysql, en donde ya interviene un poco de PHP, nada de otro mundo, pero que puede perder un poco a un usuario con poca experiencia. Salu2

15
Visual Basic 6 / Re:ENVIAR SMS DESDE VISUAL BASIC EN ARGENTINA
« en: Mayo 15, 2013, 02:09:45 am »
Hola Bazooka, tu puedes enviar mensajes y recibirlos también, hacer llamadas, etc , desde visual, abres un puerto serial del COM correspondiente módem GSM o bién tu propio móvil conectado a través del USB o Serial, envías comandos AT y listo ...  Puedes hacer mucho mas cosas, que se yo ... ver señal del equipo, cuanto le queda de batería, etc etc etc etc ... salu2

Páginas: [1] 2 3