Calcular Antiguedad formato Años, Meses y Días Nomina 1.2

1,915 views
Skip to first unread message

Fausto Rguez

unread,
Apr 22, 2017, 2:26:08 PM4/22/17
to vfp-factura-electronica-mexico
Un saludo a todos, durante bastante tiempo he estado siguiendo a este grupo, y la verdad que me han ayudado mucho en este tema de la facturación electronica,
No se si este tema ya este tratado en alguna otra publicación, (la busque y no la encontre), 

por ese motivo les les comparto el código que estoy utilizando para calcular la antiguedad en formato Años, Meses y Días.

Me encontré parte de este código en algún foro, la verdad no recuerdo donde, y lo adapte para este fin.

Ya he realizado muchas pruebas y las he Timbrado y los resultados están correctos, si alguien encuentra alguna combinación de fechas donde el programa falle, nos retroalimenta por favor, 


Saludos a todos.



*** Calcular Atributo Antiguedad Nomina 1.2 
**  formato    P10Y8M15D     &&&& 10 años, 8 meses, 15 días, 
*** Observaciones:
***    La fecha que se debe tomar en cuenta para calcular la antiguedad es:   FechaInicioRelLaboral  Y ...
***       NO es el atributo:  FechaPago       = Es la fecha en que efectivamente el empleador realizó el pago (erogación) de la nómina al trabajador
***       SI es el atributo:  FechaFinalPago  = Es la fecha final del período de pago, debe ser mayor o igual a la FechaInicialPago.
_DFecIniRelLab = CTOD("27/02/2013")
_DFecfinPer    = CTOD("15/04/2017")
_Antiguedad = Calcula_Antiguedad( _DFecIniRelLab, _DFecfinPer )
?
?"Antiguedad: ", _Antiguedad, "     Fec Ini Rel LAB= " + DTOC(_DFecIniRelLab)+ "   Fec Fin Per = " + DTOC( _DFecfinPer )
RETURN



Procedure Calcula_Antiguedad
LPARAMETERS tdFecha1,tdFecha2
***************************
*tdFecha1 es la fecha inferior  Fec Ini Rel Laboral
*tdFecha2 es la fecha superior o Date()
************************************
Store 0 to nDetanos,nMeses,nDias
Store "" to cTiempo, cAno,cmes,cdia
Store 0 to zDias1,zDias2, xmMes,xmAno
    nDetanos =Year(tdFecha2)-Year(tdFecha1) - 1
    nMeses =12-Month(tdFecha1) + Month(tdFecha2) - 1
    IF DAY(tdFecha2)>=DAY(tdFecha1)
       nMeses=nMeses + 1
    ENDIF
    if nMeses >= 12
       nMeses =nMeses - 12
       nDetanos =nDetanos + 1
    endif
    if Day(tdFecha1)=Day(tdFecha2)
       nDias = 1
    else
       if Day(tdFecha2) > Day(tdFecha1)
          nDias =Day(tdFecha2)-Day(tdFecha1)
          nDias = nDias + 1 
       else
          zDias1 =Day(tdFecha1)
          zDias2 =Day(tdFecha2)
          ** Apartir de la tdFecha1   calcula la ultima fecha del mes  28, 29, 30,31  para esto utilizo la 
          ** Funcion GOMONTH()
          ** Ejemplos:
          **      tdFecha1= 16/02/2016  FecFinMesx= 29/02/2016
          FecFinMesx  = ( GOMONTH( (tdFecha1 - dAY(tdFecha1))+1  ,1 )) -1 
          zFin1= DAY( FecFinMesx )
          ndias = ((zFin1 - zDias1)+ 1) + zDias2
       endif
   ENDIF
   *** Atributo Antiguedad 
   _AntiguedadZ = "P"
   IF nDetanos>0
      _AntiguedadZ = _AntiguedadZ + Allt(sTR(nDetanos)) + "Y"
   ENDIF
   IF nmeses>0
      _AntiguedadZ = _AntiguedadZ + Allt(sTR(nmeses)) + "M"
   endif
   IF ndias>0
      _AntiguedadZ = _AntiguedadZ + Allt(sTR(ndias)) + "D"
   ENDIF
   *Antigüedad= P10Y8M15D     &&&& 10 años, 8 meses, 15 días, 
RETURN _AntiguedadZ





Arturo Ramos

unread,
Apr 27, 2017, 9:05:13 PM4/27/17
to vfp-factura-electronica-mexico
Gracias Fausto,

Yo lo tengo, simplemente así:

* - Antigüedad: cociente de (la suma del número de días transcurridos entre 
*   la FechaInicioRelLaboral y la FechaFinalPago más uno) dividido entre siete.
nlAntiguedad = INT((curExplorar.ffinalpago - curReceptor.fecha_ingreso + 1) / 7)

.Receptor.Antigüedad = "P" + ALLTRIM(STR( nlAntiguedad )) + "W"

El total de semanas.

Hasta ahora, todos timbrados correctamente.

¿Qué opinan?

Saludos.

Arturo Ramos
Cancún, México

Arturo Ramos

unread,
Apr 27, 2017, 9:09:09 PM4/27/17
to vfp-factura-electronica-mexico
...

A la fecha final del pago del comprobante le resto la fecha de ingreso del empleado más uno y todo lo divido entre siete; con eso tengo el total de semanas y las encadeno a "P" al inicio y "W" al final.
Reply all
Reply to author
Forward
0 new messages