Grabar Asistencia Mensual‏ en Vfp9

De nuevo molestandote

Mi Problema es que tengo q controlar la asistencia de Personal (80 Trabajadores) su entrada y salida y cuanto con los siguientes Campos q hasta aki no hay problema por que se Graba secuencialmente hacia abajo y saco reportes de esta forma.

Nº Nº DNI Datos Fecha H. Entrada H. Salida

  1. 10203040 Juan Perez 06/11/2015  07:45 17:10
  2. 09901213 Carla Sanchez 06/11/2015  08:05 17:05

.,,,,...

Asi sucesivamante el problema es que me estan solicitando un Reporte Detallado Mensual de todo el Personal y un total de Faltas de la siguiente manera.

Listado mensual mes: octubre

Del 01 al 31

Nº Nº DNI Datos 01 02 03 04 05 ... 31 TDA TDF

1. 10203040 Juan Perez A A F A A F 4 2

2. 09901213 Carla Sanchez F A A A F F 3 3

- En donde el Campo 01, 02, 03, 04, 05 y 31 son los dias del mes de Octubre

- TDA: el total de Dias que Asistio

- TDF: el total de Dias que Falto

Espero tu pronta ayuda por q me encuentro desorientado y no se como platear este problema

1 Respuesta

Respuesta
1

Te envío un código que te creará la estructura en una tabla cursor equivalente a los días de la semana laborales, tomando en cuenta el mes y año:

&& ---- INICIO

Clear
valX = 0
nMes = 8
nAnio = 2015
cCadena = ''
cDias = 'DOM,LUN,MAR,MIE,JUE,VIE,SAB,'
For valX=1 To 31
    miFecha = Ctod(Transform(valX)+'/'+Transform(nMes)+'/'+Transform(nAnio))
    If Dow(miFecha) = 1 && es Domingo.
        Loop
    Endif
    cCadena = cCadena+Iif(!Empty(cCadena),',','')+ ;
        GETWORDNUM(cDias,Dow(miFecha),',')+;
        strt(Transform(valX,'##'),' ','0')
    cCadena = cCadena +' C(1)'
    ? cCadena
Next
cCadena = 'DOCUMENTO C(8),DATOS C(30),'+cCadena
Select Select(1)
Create Cursor Asistencia (&cCadena)

&& ---- FIN

Este código te crea una tabla cursor de nombre "ASISTENCIA" solamente la estructura; asi:

--- Documento, Datos, Sab01, Lun03, Mar04, Mie05... Lun31 ---

Los días domingo no los incluirá...

Por otro lado podrías usar el comando FILTER para filtrar por cada Empleado y mes, luego recorres la tabla filtrada con un SCAN por ejemplo y ubicas el valor de P (presente) en cada coincidencia...

Por ej.: Tienes filtrado el mes 8 y un empleado... lees de la registro de fechas que asistio el día "20/08/2015", entonces...

El siguiente código transformará la fecha al mismo valor (nombre) del campo existente en la tabla cursor "ASISTENCIA":

&& ---- INICIO

miFecha = "20/08/2015"

cDias = 'DOM,LUN,MAR,MIE,JUE,VIE,SAB,'

cCampo = getwordnum(cDias,Dow(miFecha),',')+Transform(day(miFecha))

&& El código anterior mostrara para 20/08/215 el valor JUE20.

&& ahora solo reemplazas el valor equivalente en la tabla...

replace &cCampo with miFecha

&&---- FIN

.. Ésto reemplazará con una P (presente) los días que asistió el empleado.; el resto de los de ausencias quedarán vacíos.

Ojala te séa útil, o al menos te guie.

Abel

Estimado Abel Gracias por tu pronta respuesta, pero cuando ejecuto el código para generar la Tabla me sale Sintaxis de Error en esta línea:

Create Cursor Asistencia (&cCadena)

Es que posiblemente lo hayas copiado literal y como aquí el texto cuando supera el margen hace un salto de línea y no reconocerá el comando...

Voy a numerar cada línea para que sepas como debería quedar:

&& ---- INICIO

1. Clear
2. valX = 0
3. nMes = 8
4. nAnio = 2015
5. cCadena = ''
6. cDias = 'DOM,LUN,MAR,MIE,JUE,VIE,SAB,'
7. For valX=1 To 31
   8. miFecha = Ctod(Transform(valX)+'/'+Transform(nMes)+;

     '/'+Transform(nAnio))
    9. If Dow(miFecha) = 1 && es Domingo.
    10.    Loop
    11. Endif
    12. cCadena = cCadena+Iif(!Empty(cCadena),',','')+ ;
        GETWORDNUM(cDias,Dow(miFecha),',')+;
        strt(Transform(valX,'##'),' ','0')
    13. cCadena = cCadena +' C(1)'
14. Next
15. cCadena = 'DOCUMENTO C(8),DATOS C(30),'+cCadena
16. Select Select(1)
17. Create Cursor Asistencia (&cCadena)

&& ---- FIN

Otra cosa que podría dar errores es que el signo que ves = ' es el equivalente de comilla simple (') o lo mismo que comilla doble (") y cuando lo copias por una cuestión de código pone un símbolo extraño que Fox no reconoce.

Jechu, pudiste resolver tu problema/duda?.

Estimado amigo nada ya hice todo lo que me has indicado y nada siempre me sale error aquí en esta Línea del Código

17. Create Cursor Asistencia (&cCadena)

Lo he probado y me da bien el código... recuerda meterlo dentro de un archivo tipo PRG y ejecutarlo desde allí con DO (bueno eso ya lo sabes).

Te creará ésta estructura..

Eso mismo he copiado, pegado en el PRG y ejecutado y luego con BROWSE abro el resultado y ya esta.

Siento no poder decirte algo más ya que no me da el mismo problema. Si no lo resuelves dime y pensaré en otra opción para ayudarte.

Existos.

Abel

Si te da error incluye entre el comando.. cCadena =.... y Select Select(1) lo siguiente...

El MESSAGEBOX debería mostrarte la estructura de la tabla a crear; ahí podríamos determinar por que del error.

Si ya quedo bien por fin pude crear la tabla para los meses pero ahora tengo este problema de la 2da parte el saber cuantas faltas tienen el personal yo tengo este procedimiento pero no funciona bien.

PUBLIC Xdni, Xasis
USE Personal
SELECT Personal
GO Top
SCAN
  Xdni=ALLTRIM(Personal.Dni)
  SET FILTER TO ALLTRIM(Personal.Dni)=Xdni
  COUNT FOR Asiste="F" TO Xasis
  REPLACE Personal.Nasistencia WITH Xasis
   SELECT Personal
   SET FILTER TO
ENDSCAN
GO top
BROWSE
lo q deseo obtener es la cantidad de dias q ha faltado este trabajador
hago el barrido como me indicaste lo filtro y luego quiero contar y luego
este valor q conto se grabe en mi campo Nasistencia

Prueba lo siguiente

.. Te explico paso a paso que hace éste código para que pueda serte útil..

1. Abre tabla personal (eso está claro)

2. Crea una tabla cursor llamada "csrPersonal" que contiene los datos distinguiendo documento y nombre del personal para el mes 8.

2.a. Tendrás una tabla en donde estaran filtrados solo los documentos y nombres de empleados del mes 8.

3. Pones una lista de los días de la seman del 1 al 7 ya qyue en general la mayoría usamos Visual FoxPro en ingles.

4. Haces un SCAN de la nueva tabla cursor creada..

5. Seleccionas tu tabla original donde tienes guardado todos los datos.

6. Haces un filter de los datos de la tabla cursor de acuerdo al número de documento y te quedará filtrado el Empleado solamente de acuerdo al mes y a su número de DNI.

7. Aquí hace un nuevo scan pero ya de la tabla Personal original.

8. Lees la fecha y la convirtes según el día que le corresponda.. JUE1 VIe2, LUN25 y así.

9. Luego debes meterlo dentro de la tabla que hayas creado en el 1er. Paso... si la tabla en el primer paso se llamaba (por ej. Asistencia); pues el campo replace tiene que tener el dato correcto.

Espero que pueda guiarte esto y Resuelvas el problema... Sino seguimos, solo que dama un poquito más de información.

Exitos.

Abel

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas