Code Segment

SharePoint - Mini post

Mar 31 2006 by csegura @ 22:01

Al parecer los chicos de Marketing ya se han puesto ha trabajar .... Así que si deseáis conocer alguna de las cosas que incluirá el nuevo SharePoint Server 2007 podéis descargar el SharePoint 2007 Product Guide

Yo he estado terminado la nueva versión del csegRollUp, que será la 3.5 (creo que ya hace todo lo que se puede hacer) .... en el foro esta la beta. A ver si mañana me da tiempo y os cuento un problemilla que he tenido con los interfaces de conexión de los webparts.

Comments (0)

Excel - Distribuciones, planificaciones, formulas matriciales

Mar 27 2006 by csegura @ 22:21

No se si lo he comentado alguna vez, pero en el trabajo suelo usar mucho Excel para hacer una gran variedad de cosas, en general mucho de lo que tiene que ver con el área económico financiera (lo terminamos haciendo en Excel).

Muchas de nuestras hojas de cálculo, son planes financieros, estudios de viabilidad, análisis etc. Básicamente estas hojas planifican cobros y pagos ó gastos e ingresos, la cuestión es la planificación, en Excel podemos planificar todo aquello que queramos, es sencillo podemos establecer una fila para cada previsión a realizar y en cada columna podemos poner un periodo (ene, feb, mar…), por último en cada celda (previsión / periodo) el importe de dicha previsión.


El problema se complica un poco cuando el importe de cada previsión no tiene un periodo fijo, sino que este debe establecerse en función de otra variable. Supongamos que tenemos que realizar una previsión entre dos periodos dados (Inicio y Final) y el importe debe ser proporcional al número de periodos.



Como es lógico las formulas se nos van complicando, más y más en función de las condiciones que necesitamos. Con lo que terminamos creando nuestras funciones en VBA para simplificar el proceso.

Function csPDistB(importe As Integer, periodo As Integer, inicio As Integer, fin As Integer)
 
    If (periodo >= inicio) And (periodo <= fin) Then
        csPDistB = importe / ((fin - inicio) + 1)
    End If
    
End Function

Realizaría el mismo trabajo que las formulas vistas. Dándole una vuelta más podemos crear una función matricial para hacer la misma tarea y que automáticamente tome el periodo actual en función del rango en donde se encuentre.

Public Function csPDistB(importe As Variant, primero As Integer, ultimo As Integer) As Variant
    Dim i As Integer
    Dim nPeriodos As Integer
    Dim valor As Double
    ReDim a(0 To Application.Caller.Rows.Count, 0 To Application.Caller.Columns.Count) As Variant
            
    On Error GoTo Handler
    
    nPeriodos = ultimo - primero
    valor = CDbl(importe / (nPeriodos + 1))
            
    For i = 0 To Application.Caller.Columns.Count
        If i + 1 >= primero And i + 1 <= ultimo Then
           a(0, i) = valor
        End If
    Next
        
    csPDistB = a
    Exit Function
Handler:
    csPDistB = CVErr(2015)  'xlErrNum = 2036
End Function

Por último con una pequeñas modificaciones sobre este código podemos crear funciones más complejas para nuestras planificaciones, por ejemplo distribuciones en función de una curva de porcentajes, 25%, 50% y 25% sería el 25% en el primer tercio, el 50% en el segundo tercio y el 25% en el tercer tercio del tiempo.

Public Function csPDistCP(importe As Variant, ParamArray porcentajes()) As Variant
    Dim i As Integer
    Dim nParte As Integer
    Dim p As Integer
    ReDim a(Application.Caller.Columns.Count) As Variant
            
    On Error GoTo Handler
    
    nParte = (UBound(a) + 1) / (UBound(porcentajes) + 1)
    p = -1
    For i = 0 To UBound(a)
      If i Mod Int(nParte) = 0 Then
         If p < UBound(porcentajes) Then
            p = p + 1
         End If
      End If
 
      a(i) = CDbl((importe / nParte) * porcentajes(p))
    Next
        
    csPDistCP = a
    Exit Function
Handler:
    csPDistCP = CVErr(2015)  'xlErrNum = 2036
End Function

Un último ejemplo en donde realizamos previsiones los periodos indicados, el importe proporcional al número de periodos.

 
Public Function csPDistP(importe As Variant, ParamArray periodos()) As Variant
    Dim i As Integer
    Dim nPeriodos As Integer
    Dim valor As Double
    ReDim a(Application.Caller.Columns.Count) As Variant
            
    On Error GoTo Handler
    
    nPeriodos = UBound(periodos)
    valor = CDbl(importe / (nPeriodos + 1))
            
    For i = 0 To nPeriodos
        a(periodos(i)) = valor
    Next
        
    csPDistP = a
    Exit Function
Handler:
    csPDistP = CVErr(2015)  'xlErrNum = 2036
End Function

 

Comments (0)

De vuelta del MVP Open Day (Madrid 23/24 Marzo 2006)

Mar 27 2006 by csegura @ 20:22

Estos dan las charlas

Este me bautiza

Este soy yo bautizado como em-vi-pi

Estas son las relaciones sociales

Ah... también trabajamos un poquito (si se le puede llamar trabajo :-)

 

Comments (1)

Una de sistemas

Mar 21 2006 by csegura @ 21:49

Durante la semana pasada me ha tocado ejercer de administrador de sistemas… he tenido poco tiempo para programar, pero sigo dándole vueltas al inforpathviewer así como algún que otro proyecto que tengo en mente.

Como administrador de sistemas la semana pasada reemplacé un controlador de dominio Windows 2003 por una nueva máquina manteniendo el nombre del anterior, un trabajo que a priori parecía sencillo se convirtió en una ardua tarea…. (vamos, lo de siempre) os dejo aquí un pequeño resumen de lo más y menos destacable.

Escenario: Servidor HP NetServer LC3 (DC + DNS+ DHCP + FileServer + PrintServer) que debía ser reemplazado por un Proliant ML 350 G3 e instalado en un rack donde el NetServer estaba de pie.

Episodio 1

El año pasado, instalaron el armario rack (60x90) según las especificaciones enviadas desde la central.
Cuando llegué me encontré un armario de (60x90) pero con la puerta colocada en el lado de 90 …. Ehhhh ….  (¿Haber como instalo aquí un cacharro con un fondo de 75?)

Episodio 2

Pido un servidor nuevo, más pequeño para poder ponerlo sobre una bandeja (Proliant ML 110 – 2Gb – 2x160Gb). Una logística increíble lo consigo tener en menos de 12 horas.

Episodio 3

La idea es poner los discos en una configuración RAID 1 usando la tarjeta integrada en el Proliant. Unir los dos discos en la BIOS de la tarjeta, no tiene precio 8 horas.

Episodio 4

No me quede esperando con lo que pude dormir unas horas…

Episodio 5

Instalación de Windows 2003, todo pintaba bien… pero Windows 2003 no reconoce la IDE SATA que trae el ML110 … ¿Qué hacer? Buscar los drivers, preparar un disco con ellos e introducirlo en el momento que la instalación nos solicita los drivers del fabricante. PERO …. El ML110 no trae unidad de disco…. No importa .. se desmonta una de un equipo Y?????????????? el ML110 no trae conector de unidad de disco por lo que es imposible conctarla, ¿Funcionará un lapiz USB? Pués NO.

Episodio 6

El tiempo apremia y hay un montón de cosas por hacer durante el viaje…. Hay que tomar una decisión YA.
El RAID funcionará por Software.

Episodio 7

Instalación del nuevo servidor, con Windows 2003. Ok, sin problemas. Lo llamo SrvDelegacion2.

Episodio 8

Copio todos los datos de SrvDelegacion a SrvDelegacion2, dedicándole muchas horas ya que cuando se encuentra con rutas largas la copia se detiene.

Episodio 9

Una vez copiados los datos, degradamos el SrvDelegacion. Se produce un error antes de finalizar (esto ya me ha pasado en alguna ocasión), se insiste y se le vuelve ha hacer el DCPROMO para degradarlo. La segunda intentona con ÉXITO.
Detenemos DNS y DHCP.
Renombramos el equipo como SrvDelegacionOld, nos conectamos por Terminal a la central y forzamos todas las replicas de directorio activo.

Episodio 10

Después de esperar un tiempo a que las replicas concluyerán. Instalamos DNS y DHCP en el SrvDelegacion2, y le cambiamos el nombre a SrvDelegacion. Nos volvemos a conectar a la central y forzamos replicas.

Episodio 11

Promocionamos SrvDelegacion a Controlador de dominio, BIEN, todo correcto a la primera.
Sitios y servicios de Active directory y configuramos la replicación.

Episodio 12

Restablecemos los permisos, creamos las colas de impresión.

Episodio 13

Instalación del DLT… humm, desmonto el DLT con su SCSI PCI y????? el ML110 ya no usa PCI solo PCI Express… Hablo con mi proveedor que vuelve ha hacer magia y me consigue una tarjeta en unas horas.

Episodio 14

Viernes, 17 de Marzo, el tren sale puntual y yo voy en el con la satisfacción de haber cumplido el trabajo, luce el sol y la película que ponen es una mierda.

Comments (0)

SharePoint - csegInfopathViewer test release

Mar 14 2006 by csegura @ 19:12

This is my first attempt to do an infopath viewer webpart, this is only a test version that run. To run this webpart you need fill the properties, list (form library) field name of the field that you want show in the combo box to select the form and the xsl to render it. (You can extract it from the infopath solution file, rename it as a .cab file and extract the xsl, then copy the content into the xsl property)

  csegInfopathViewer.zip (6,82 KB) 

 

Comments (5)