martes, 15 de diciembre de 2009

Estreno en el Peru de la pelicula Luna Nueva

El estreno de la secuela de la saga de crepúsculo fue el momento más esperado de esta año (para mí lo fue), el cual se realizo el 26 de noviembre y que fue mucho antes de los esperado si tomamos en cuenta que la primera película crepúsculo tardo casi 2 meses en llegar a salas limeñas.

Con gran devoción llegue a verla el mismo 26 de noviembre, aunque con sala muy llena y muchos fanáticos esperando el que sucederá con el amor de Bella hacia Edward mientras Jacob ponía todo de su lado para poder conquistarla y estar con ella.

Aunque para ser sincero no fue como espere que fuera según lo que se basaba el libro; no puedo negar que me lleno de satisfacción poder ver como aumento la devoción a esta saga y que la gente pueda ver lo que muchos solo imaginamos cuando recorríamos cada párrafo del libro.

Ahora solo faltaría esperar un año más para Eclipse y poder desenlazar el final abrupto que tiene la película Luna Nueva.

sábado, 5 de diciembre de 2009

Problema para instalar SQL SERVER 2008

Les cuento una anécdota que tuve al instalar el Sql Server 2008 sobre una pc que tenia Windows 7 y Visual Studio 2008 sp1.

Primero empecemos con el error tan raro que me salía al momento de instalar el Sql Server 2008, donde me indicaba que tenia un problema con la versión de VS 2008.


Aunque tenia la ultima versión del VS 2008 sp1, la cual era la solicitada por Sql Server 2008 no era posible instalar. Pero encontré una trampa para poder evitar que haga la validación de la versión de VS.

En la consola de comandos y ubicándonos en la unidad donde se encuentra el instalador de Sql Server escribiremos.
setup /ACTION=install /SkipRules=VSShellInstalledRule RebootRequiredCheck


Con esto se evitara la verificación de versión de VS y podrá terminar la instalación de Sql Server 2008 sin ningún inconveniente.


Es una buena salida para este problema de instalación.

link original.

lunes, 16 de noviembre de 2009

Nombre de Numero en Letras

Ahora le dejo una función para poder convertir un monto numérico en un monto en letras, muy útil si se quiere hacer una descripción de un monto para alguna factura o boleta.

Primero crearemos la función llamada "fn_ConvertirNumeroLetras" que recibe 2 parámetros, uno es el numero que deseamos convertir a letras y el otro el nombre de la moneda que deseamos concatenarlo al monto.

Create FUNCTION [dbo].[fn_ConvertirNumeroLetra]

(
@Numero NUMERIC(20,2),
@Moneda VARCHAR(100)
)
RETURNS VARCHAR(512)
AS
BEGIN
DECLARE @lnEntero INT,
@lcRetorno VARCHAR(512),
@lnTerna INT,
@lcMiles VARCHAR(512),
@lcCadena VARCHAR(512),
@lnUnidades INT,
@lnDecenas INT,
@lnCentenas INT,
@lnFraccion INT,
@resultado as varchar(512)
SELECT @lnEntero = CAST(@Numero AS INT),
@lnFraccion = (@Numero - @lnEntero) * 100,
@lcRetorno = '',
@lnTerna = 1
WHILE @lnEntero > 0
BEGIN /* WHILE */
-- Recorro terna por terna
SELECT @lcCadena = ''
SELECT @lnUnidades = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnDecenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
SELECT @lnCentenas = @lnEntero % 10
SELECT @lnEntero = CAST(@lnEntero/10 AS INT)
-- Analizo las unidades
SELECT @lcCadena =
CASE /* UNIDADES */
WHEN @lnUnidades = 1 AND @lnTerna = 1 THEN 'UNO ' + @lcCadena
WHEN @lnUnidades = 1 AND @lnTerna <> 1 THEN 'UN ' + @lcCadena
WHEN @lnUnidades = 2 THEN 'DOS ' + @lcCadena
WHEN @lnUnidades = 3 THEN 'TRES ' + @lcCadena
WHEN @lnUnidades = 4 THEN 'CUATRO ' + @lcCadena
WHEN @lnUnidades = 5 THEN 'CINCO ' + @lcCadena
WHEN @lnUnidades = 6 THEN 'SEIS ' + @lcCadena
WHEN @lnUnidades = 7 THEN 'SIETE ' + @lcCadena
WHEN @lnUnidades = 8 THEN 'OCHO ' + @lcCadena
WHEN @lnUnidades = 9 THEN 'NUEVE ' + @lcCadena
ELSE @lcCadena
END /* UNIDADES */
-- Analizo las decenas
SELECT @lcCadena =
CASE /* DECENAS */
WHEN @lnDecenas = 1 THEN
CASE @lnUnidades
WHEN 0 THEN 'DIEZ '
WHEN 1 THEN 'ONCE '
WHEN 2 THEN 'DOCE '
WHEN 3 THEN 'TRECE '
WHEN 4 THEN 'CATORCE '
WHEN 5 THEN 'QUINCE '
ELSE 'DIECI' + @lcCadena
END
WHEN @lnDecenas = 2 AND @lnUnidades = 0 THEN 'VEINTE ' + @lcCadena
WHEN @lnDecenas = 2 AND @lnUnidades <> 0 THEN 'VEINTI' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades = 0 THEN 'TREINTA ' + @lcCadena
WHEN @lnDecenas = 3 AND @lnUnidades <> 0 THEN 'TREINTA Y ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades = 0 THEN 'CUARENTA ' + @lcCadena
WHEN @lnDecenas = 4 AND @lnUnidades <> 0 THEN 'CUARENTA Y ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades = 0 THEN 'CINCUENTA ' + @lcCadena
WHEN @lnDecenas = 5 AND @lnUnidades <> 0 THEN 'CINCUENTA Y ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades = 0 THEN 'SESENTA ' + @lcCadena
WHEN @lnDecenas = 6 AND @lnUnidades <> 0 THEN 'SESENTA Y ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades = 0 THEN 'SETENTA ' + @lcCadena
WHEN @lnDecenas = 7 AND @lnUnidades <> 0 THEN 'SETENTA Y ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades = 0 THEN 'OCHENTA ' + @lcCadena
WHEN @lnDecenas = 8 AND @lnUnidades <> 0 THEN 'OCHENTA Y ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades = 0 THEN 'NOVENTA ' + @lcCadena
WHEN @lnDecenas = 9 AND @lnUnidades <> 0 THEN 'NOVENTA Y ' + @lcCadena
ELSE @lcCadena
END /* DECENAS */

-- Analizo las centenas
SELECT @lcCadena =
CASE /* CENTENAS */
WHEN @lnCentenas = 1 AND @lnUnidades = 0 AND @lnDecenas = 0 THEN 'CIEN ' +
@lcCadena
WHEN @lnCentenas = 1 AND NOT(@lnUnidades = 0 AND @lnDecenas = 0) THEN
'CIENTO ' + @lcCadena
WHEN @lnCentenas = 2 THEN 'DOSCIENTOS ' + @lcCadena
WHEN @lnCentenas = 3 THEN 'TRESCIENTOS ' + @lcCadena
WHEN @lnCentenas = 4 THEN 'CUATROCIENTOS ' + @lcCadena
WHEN @lnCentenas = 5 THEN 'QUINIENTOS ' + @lcCadena
WHEN @lnCentenas = 6 THEN 'SEISCIENTOS ' + @lcCadena
WHEN @lnCentenas = 7 THEN 'SETECIENTOS ' + @lcCadena
WHEN @lnCentenas = 8 THEN 'OCHOCIENTOS ' + @lcCadena
WHEN @lnCentenas = 9 THEN 'NOVECIENTOS ' + @lcCadena
ELSE @lcCadena
END /* CENTENAS */
-- Analizo la terna
SELECT @lcCadena =
CASE /* TERNA */
WHEN @lnTerna = 1 THEN @lcCadena
WHEN @lnTerna = 2 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN
@lcCadena + ' MIL '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0 THEN @lcCadena + '
MILLON '
WHEN @lnTerna = 3 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) AND
NOT (@lnUnidades = 1 AND @lnDecenas = 0 AND @lnCentenas = 0) THEN @lcCadena
+ ' MILLONES '
WHEN @lnTerna = 4 AND (@lnUnidades + @lnDecenas + @lnCentenas <> 0) THEN
@lcCadena + ' MIL MILLONES '
ELSE ''
END /* TERNA */
-- Armo el retorno terna a terna
SELECT @lcRetorno = @lcCadena + @lcRetorno
SELECT @lnTerna = @lnTerna + 1
END /* WHILE */
IF @lnTerna = 1
SELECT @lcRetorno = 'CERO'
SELECT @resultado = RTRIM(@lcRetorno) + ' CON ' + LTRIM(STR(@lnFraccion,2)) + '/100 ' + @Moneda

RETURN @resultado
END

GO
Para ejecutarlo solo nos bastara con llamar a la función y pasarle los 2 parámetros mencionados.
SELECT [dbo].fn_ConvertirNumeroLetra(150.50, 'Nuevos Soles')
Esto nos dará como resultado lo siguiente.
CIENTO CINCUENTA CON 50/100 Nuevos Soles

Referencia: http://tinyurl.com/yag3ouo

viernes, 14 de agosto de 2009

Validar RUC (SUNAT - PERU)

Para saber de que el RUC es valido se usa un algoritmo tambien llamado Modulo 11, esto nos permite hacer un calculo de los primeros 10 digitos y validarlo con el digito numero 11, de ser correcto se dice que el RUC es valido.

Aqui le adjunto la funcion que hace la validacion al RUC
Public Function ValidationRUC(ByVal ruc As String) As Boolean
Try

If Not IsNumeric(ruc) Then
Throw New Exception("El valor no es numerico")
End If

If ruc.Length <> 11 Then
Throw New Exception("Numero de digitos invalido")
End If

Dim dig01 As Integer = CInt(ruc.Substring(0, 1)) * 5
Dim dig02 As Integer = CInt(ruc.Substring(1, 1)) * 4
Dim dig03 As Integer = CInt(ruc.Substring(2, 1)) * 3
Dim dig04 As Integer = CInt(ruc.Substring(3, 1)) * 2
Dim dig05 As Integer = CInt(ruc.Substring(4, 1)) * 7
Dim dig06 As Integer = CInt(ruc.Substring(5, 1)) * 6
Dim dig07 As Integer = CInt(ruc.Substring(6, 1)) * 5
Dim dig08 As Integer = CInt(ruc.Substring(7, 1)) * 4
Dim dig09 As Integer = CInt(ruc.Substring(8, 1)) * 3
Dim dig10 As Integer = CInt(ruc.Substring(9, 1)) * 2
Dim dig11 As Integer = CInt(ruc.Substring(10, 1))

Dim suma As Integer = dig01 + dig02 + dig03 + dig04 + dig05 + dig06 + dig07 + dig08 + dig09 + dig10
Dim residuo As Integer = suma Mod 11
Dim resta As Integer = 11 - residuo

Dim digChk As Integer
If resta = 10 Then
digChk = 0
ElseIf resta = 11 Then
digChk = 1
Else
digChk = resta
End If

If dig11 = digChk Then
Return True
Else
Return False
End If

Catch ex As Exception
Throw ex
End Try
End Function
Ejm:
RUC = 10254824220
FACTOR = 5432765432

Se separa los 10 primeros digitos de la izquierda y se hace un calculo inividual
1 * 5 =5
0 * 4 = 0
2 * 3 = 6
5 * 2 = 10
4 * 7 = 28
8 * 6 = 48
2 * 5 = 10
4 * 4 = 16
2 * 3 = 6
2 * 2 = 4

Se suma el resultado de todas las multiplicaciones
SUMA = 133

Se calcula el residuo de la division por 11
133/ 11 = 1
RESIDUO = 1

Se resta 11 menos el residuo
11 - 1
RESTA = 10

digito de chequeo = RESTA
si resta = 10 entonces digito de cheque = 0
si resta = 11 entonces digito de cheque = 1

Por lo tanto el RUC 10254824220 es valido por que su digito numero 11 es 0 y el digito de chekeo es 0.

Obtener multiples resultados en ADO.NET

Para poder obtener multiples resultados de consultas SQL en una sola operacion se debe tener en cuenta usar el objeto SqlDataReader. Esta es la forma mas practica de poder ejecutar varias sentencias SQL al mismo tiempo y poder recibirlas con un objeto SqlDataReader.

Aqui se muestra como ejecutar y recuperar el resultados de 3 consultas SQL.
Private Sub MultipleQuery()

Dim sqlCnn As New SqlConnection("Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password")
Dim sqlCmd As SqlCommand

'Definimos las 3 sentencias SQL solamente separandolas con ";"
Dim sql As String = "Select top 2 * from product; " & _
"select top 2 * from ordermaster; " & _
"select top 2 * from orderdetails"

Try
'Abrimos la Conexion
sqlCnn.Open()

'Configuramos el Comando con la conexion y la Sentencia SQL
sqlCmd = New SqlCommand(sql, sqlCnn)

'Ejecutamos el Comando y el resultado se lo asignamos a un sqlDataReader
Dim sqlReader As SqlDataReader = sqlCmd.ExecuteReader()

'Recorremos el primer resultado de "Select top 2 * from product"
While sqlReader.Read()
MsgBox("Primer SQL - " & sqlReader.Item(0) & " - " & sqlReader.Item(1))
End While

'Cambiamos al siguiente resultado SQL
sqlReader.NextResult()

'Recorremos el segundo resultado de "Select top 2 * from ordermaster"
While sqlReader.Read()
MsgBox("Segundo SQL - " & sqlReader.Item(0) & " - " & sqlReader.Item(1))
End While

'Cambiamos al siguiente resultado SQL
sqlReader.NextResult()

'Recorremos el tercer resultado de "Select top 2 * from orderdetails"
While sqlReader.Read()
MsgBox("Tercer SQL - " & sqlReader.Item(0) & " - " & sqlReader.Item(1))
End While

sqlReader.Close()
sqlCmd.Dispose()
sqlCnn.Close()

Catch ex As Exception
MsgBox("No se puedo ejecutar la operacion")
End Try

End Sub
Aqui el enlace original: Link Referencial

martes, 30 de junio de 2009

Primera reunion del PLUG

El sabado 27 tuvo lugar la primera reunion de PLUG en las instalaciones del Compu Palace en donde se pudo compartir un momento grato entre todos los colaboradores e intercambiando opiniones y experiencias sobre el uso, difucion y ventajas de sistema operativo open source llamado comunmente linux.

Mi Certificacion MCTS Windows Form Application 2008

Despues de algun tiempo de que obtuve la certificacion MCTS web application 2005. Me quede con las ganas de actulizarme a la nueva version del 2008. Para ello, un amigo me facilito un ticket para rendir el examen gratuitamente y solo lo que debia hacer era estudiar.

Como ya tenia una experiencia similar con la anterior certificacion, solo debia guiarme del libro que te entregan en los cursos para dar el examen, por lo que me consegui uno en formato PDF (Torrents).

Una vez obtenido mi ticket de examen y conseguido el manual solo me faltaba coordinar la fecha del examen. Para ello, escogi el dia viernes 26 a las 2 pm como la gran fecha para rendir mi examen de certificacion MCTS windows form application 2008.

Estube estudiando 15 dias antes de la fecha de mi examen, aunque fue un tiempo suficiente para poder acabar todo el manual aun asi me sentia nervioso el dia que fui a rendir dicho examen.

El dia llego y rendi mi examen a puertas cerradas solamente con el conocimiento aprendido en los dias previos, afortunadamente mi dedicacion tuvo un resultado positivo y pude obtener una nota aprobatoria por 1000 puntos, motivo por que me siento orgulloso.

Ahora puedo mostrar el logo obtenido y el que puedo sustentar como un logro.