|
Su uso se basa en 2 API's del tipo CEE. Atención
al compilar: leer el comentario que figura en el
fuente sobre los parámetros que deberán
completarse del mandato CRTBNDRPG.
El fuente de este utilitario se llama diashabr. Como
es natural este programa no tiene en cuenta los días
no laborables (feriados) puesto que éstos son
propios de cada nación por lo que, si se quiere
hacerlo más preciso, solamente tendrán
que agregar una tabla que contenga un único campo
del tipo fecha (L) y luego en el programa acceder a
dicha tabla con la fecha obtenida en cada iteracción
y si la encuentra no contabilizarla como hábil;
simple verdad?
*=================================================================
* PROGRAMA...: DIASHABR
* DESCRIPCION: Calcular cantidad de días hábiles entre 2 fechas.
* AUTOR......: Diego M. ACEVEDO -Buenos Aires, Argentina-
* FECHA......: 05/03/2004
*
* Atención!!: Compilar con el comando CRTBNDRPG con los siguientes
* parámetros DFTACTGRP(*NO) BNDDIR(QUSAPIBD)
*=================================================================
* ILE-CEE Api's
*----------------------------------------------------------
d ceedays pr ExtProc('CEEDAYS') OpDesc
d 10a
d 10a
d 10i 0
d d Like(fc)
*----------------------------------------------------------
d ceedywk pr ExtProc('CEEDYWK') OpDesc
d 10i 0
d 10i 0
d z Like(fc)
*----------------------------------------------------------
* Feedback .
*--------------------------------------------------
d fc Ds
d sev 5U 0
d msgno 5U 0
d flags 1
d facid 3
d isi 10U 0
*--------------------------------------------------
d Fecha s 10a Inz
d Formato s 10a Inz('YYYYMMDD')
d Lilian s 10I 0 Inz
d DayOfWeek s Like(Lilian)
d DiasHabiles s Like(Lilian)
*--------------------------------------------------
* Input parameters.
*--------------------------------------------------
d FechaDes ds
d From_Date d
d f_AÑo 4s 0 overlay(From_Date)
d f_Mes 2s 0 overlay(From_Date:6)
d f_Dia 2s 0 overlay(From_Date:9)
*--------------------------------------------------
d FechaHas ds
d To_Date d
d c_Año 4s 0 overlay(To_Date)
d c_Mes 2s 0 overlay(To_Date:6)
d c_Dia 2s 0 overlay(To_Date:9)
*--------------------------------------------------
c *Entry Plist
c Parm FechaDes
c Parm FechaHas
c Parm Resultado 10
*==================================================
*
* M A I N P R O G R A M
*
*==================================================
c DoU From_Date > To_Date
c *Iso0 Move From_Date Fecha
c CallP ceedays(Fecha:Formato:Lilian:fc)
c CallP ceedywk(Lilian:DayOfWeek:fc)
c If DayOfWeek <> 1 and DayOfWeek <> 7
c Eval DiasHabiles = DiasHabiles+1
c EndIf
c From_Date AddDur 1:*d From_Date
c EndDo
c Eval Resultado = %Char(DiasHabiles)
c SetOn LR
Documento enviado por Diego M. Acevedo
Puedes ver el fuente en formato texto aquí
Marzo 2004

|