lunes, 16 de diciembre de 2013

Generar dígito de verificación de NIT de Colombia en PowerBuilder



Recientemente me he involucrado en un proyecto de implementación del ERP El Gestor a un cliente en Medellín, quien nos solicitó implementar el dígito de verificación que la DIAN obliga para el NIT de los proveedores.

Luego de algo de investigación, encontramos un post con el algoritmo en Visual Basic para excel, lo tradujimos a PowerScript y funcionó perfecto.

A continuación el código:


///******************************************************** 
//* FUNCION : fn_co_nitdv
//* FUNCION : Devuelve el Digito de Verificacion de un Nit (COLOMBIA) 
//* PARAMETROS : _nit: Numero de Nit a Calcular en string
//* RETORNO : Digito de Verificación en string
//* AUTOR : Johan Gálvez (johangalvez@lylsistemas.com) 
//********************************************************/ 
long WSuma, lnRetorno, Arreglo_PA[15], WDig_Ver, I
string WDato

_Nit = TRIM(_Nit) 
if _Nit="" or isnull(_Nit) then
 MESSAGEBOX("Error de NIT","El valor de NIT no puede ser nulo.") 
 RETURN 0
end if 

Arreglo_PA[1] = 71 
Arreglo_PA[2] = 67 
Arreglo_PA[3] = 59 
Arreglo_PA[4] = 53 
Arreglo_PA[5] = 47 
Arreglo_PA[6] = 43 
Arreglo_PA[7] = 41 
Arreglo_PA[8] = 37 
Arreglo_PA[9] = 29 
Arreglo_PA[10] = 23 
Arreglo_PA[11] = 19 
Arreglo_PA[12] = 17 
Arreglo_PA[13] = 13 
Arreglo_PA[14] = 7 
Arreglo_PA[15] = 3 
lnRetorno = 0 
WDato=RIGHT(SPACE(15)+TRIM(_Nit),15) 
WSuma=0 
WDig_Ver=0 

FOR I = 1 TO 15 
 WSuma=WSuma+(long(mid(WDato,I,1))*Arreglo_PA[I])
NEXT 

WSuma=MOD(WSuma,11) 

IF WSuma=0 OR WSuma=1 then 
 lnRetorno = WSuma 
ELSE 
 lnRetorno = 11 - WSuma 
END IF 

RETURN lnRetorno 


lunes, 8 de abril de 2013

WampServer: Liberar puerto 80 en Windows 7




Detener el servicio: "Servicio de Publicación World Wide Web"

Luego volver a intentar "Start All Services" del Wamp Server y listo




miércoles, 27 de febrero de 2013

WorkFlow ERP: Pasos para mostrar un formulario o pagina web


Despachar tarea pendiente
  1. Al abrir formulario
    1. Validación de proceso abierto en la fecha.
    2. Validación de tareas previas concluidas.
    3. Validación de estados de documentos de tarea.
    4. Validación de permisos de usuario para la tarea.
    5. Carga de información necesaria.
    6. Visualización según diseño.
    7. Al redactar
      1. Validación de redacción correcta
      2. Validación presupuestal (por ejemplo PCA y PIM)
      3. Al grabar
        1. Grabar datos del formulario (en cada documento de tarea).
        2. Grabar nuevos estados (de cada documento de tarea)
        3. Grabar estado de tarea realizado en proceso y usuario
        4. Grabar estado de tarea pendiente en proceso y usuario
        5. Grabar afectación contable
        6. Grabar afectación presupuestal
        7. Preguntar - Emitir notificación a interesados de tarea (por defecto: participantes anteriores) del proceso.


      lunes, 4 de febrero de 2013

      Power Builder: Luego de Filter() hacer Sort() y GroupCalc()

      En Power Builder 9, luego del filter() es obligatorio volver a correr el ordenamiento SetSort() y Sort() y luego aplicar un GroupCalc():

      ===


      //filtrado
      string ls_filter, ls_ofi

      ls_ofi = dw_oficinas.object.s_idofi[dw_oficinas.getrow()]
      if isnull(ls_ofi) or ls_ofi = "%" then
      ls_filter = ""
      else
      ls_filter = "idoficodigo='"+ls_ofi+"'"
      end if
      dw_rep_impresion.setfilter(ls_filter)
      dw_rep_impresion.filter()

      //Ordenamiento - Se pierde el sort al filtrar

      dw_rep_impresion.SetRedraw(false)

      dw_rep_impresion.SetSort("idmoncodigo, tvcfchvencim, tvcfchrecep, tvcnumero")
      dw_rep_impresion.Sort( )

      dw_rep_impresion.GroupCalc()
      dw_rep_impresion.SetRedraw(true)

      ===

      Alguien lo preguntó antes y me sirvió la respuesta

      Saludos