FoxPro/Visual FoxPro - Ver los pagos que tienen que cobrar p/s

 
Vista:

Ver los pagos que tienen que cobrar p/s

Publicado por es_binario (757 intervenciones) el 10/07/2010 08:54:12
Buenas noches, pues por aqui ando programando y aunque este tema lo tengo resuelto de una forma un tanto complicada quiero ver si me apoyan con un codigo mucho mas corto les explico.

Tengo un formulario en donde Se elige un Cobrador de un combo y se hace una consulta de Cuantas cuentas tiene, y cuanto tiene que cobrar, esto de una tabla ventas, en donde tengo tambien los datos del cobrador bueno eso resulta muy facil y les pongo algo del codigo.

este codigo calcula el total de su cuenta

SELECT COUNT(folio) as tot_folios FROM venta;
WHERE LEFT(venta.cobrador,1) <> "*" ;
AND sist_pago = "S" ;
AND cobrador = cobra_dor;
INTO CURSOR cur_sem
*// evitando valores nulos
IF ISNULL(cur_sem.tot_folios)
Thisform.TxtfolSem.Value = 0
ELSE && no es nulo
Thisform.TxtfolSem.Value = INT(cur_sem.tot_folios * (porcentaje/100))
ENDIF
SELECT SUM(pagos) tot_pagos FROM venta;
WHERE LEFT(venta.cobrador,1) <> "*" ;
AND sist_pago = "S" ;
AND cobrador = cobra_dor;
INTO CURSOR cur_sem_p
IF ISNULL(cur_sem_p.tot_pagos)
Thisform.txttotSem.Value = 0
ELSE && no es nulo
Thisform.txttotSem.Value = cur_sem_p.tot_pagos * (porcentaje/100)
ENDIF

Bueno esto en teoria es lo que deberia cobrar el cobrador pero no es del todo cierto, ya que no hay seguridad de que le caigan pagos quincenales, o pagos mensuales, bueno mi propuesta fue la siguiente, tengo 2 textbox mas, 1 para la fecha inicial y 2 para la fecha final, ahora debo ver cuales de todas las cuentas tienen pagos en el periodo entre la fecha 1 y la fecha2.

Aqui se me complico un poco, bueno ahora les comento lo que hago lo que hago es que genero el calendario de pagos de todos los folios que tiene el cobrador asignados, como genero el calendario, tambien en esa tabla ventas existe un campo que se llama sistema de pago.

Bueno y es algo asi la forma de determinar cada cuando es su pago

DO CASE
CASE sist_pago = "S"
fecha = fecha + 7
CASE sist_pago = "Q"
*// dia 2 y dia 16
fecha = fecha + 15
CASE sist_pago = "M"
*// Suma 1 para meses
fecha = GOMONTH(nva_fecha, a)
CASE sist_pago = "C"
*// Suma 1 para meses
fecha = fecha + 14
ENDCASE

<-- S semanal, Q Quincenal, M Mensual, C Catorcenal, el problema radica en que digamos si un cobrador tiene 200 cuentas a su cargo, estamos hablando de una tabla que va a contener 200 folios por alrededor de 50 registros de calendario de pago lo que me da un total de 10 mil registros en donde despues se debe hacer una consulta, esto resulta sumamente complicado en equipos no muy poderosos y con poca memoria, por lo que requiero que me hagan una mejor sugerencia,

de antemano se los agradezco y les comento que no existe una tabla del calendario de pagos.

gracias por las sugerencias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauricio
Val: 471
Plata
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

Ver los pagos que tienen que cobrar p/s

Publicado por Mauricio (1541 intervenciones) el 11/07/2010 18:10:53
Es binario, esto es una sugerencia nada mas, podemos seguir poniendo nuestros puntos de vista afines luego.
*--- LWP es_binario Pagos por cobrar
* Es Binario, creo que podrias haer 3 select: uno semanal, otro quincenal y el ultimo mensual
*** SEMANANL
SELECT COUNT(folio) AS tot_folios, SUM(pagos) AS tot_pagos FROM venta ;
WHERE LEFT(cobrador,1) <> "*" AND sist_pago = "S" ;
AND cobrador = cobra_dor INTO CURSOR cur_sem
*// evitando valores nulos
IF ISNULL(tot_folios)
Thisform.TxtfolSem.Value = 0
ELSE && no es nulo
Thisform.TxtfolSem.Value = INT(tot_folios * (porcentaje/100))
ENDIF
*// evitando valores nulos
IF ISNULL(tot_pagos)
Thisform.txttotSem.Value = 0
ELSE && no es nulo
Thisform.txttotSem.Value = tot_pagos * (porcentaje/100)
ENDIF
*
*** QUINCENAL
SELECT COUNT(folio) AS tot_folios, SUM(pagos) AS tot_pagos FROM venta ;
WHERE LEFT(cobrador,1) <> "*" AND sist_pago = "Q" ;
AND cobrador = cobra_dor INTO CURSOR cur_sem
*// evitando valores nulos
IF ISNULL(tot_folios)
Thisform.TxtfolSem.Value = 0
ELSE && no es nulo
Thisform.TxtfolSem.Value = INT(tot_folios * (porcentaje/100))
ENDIF
*// evitando valores nulos
IF ISNULL(tot_pagos)
Thisform.txttotSem.Value = 0
ELSE && no es nulo
Thisform.txttotSem.Value = tot_pagos * (porcentaje/100)
ENDIF
*
*** MENSUAL
SELECT COUNT(folio) AS tot_folios, SUM(pagos) AS tot_pagos FROM venta ;
WHERE LEFT(cobrador,1) <> "*" AND sist_pago = "M" ;
AND cobrador = cobra_dor INTO CURSOR cur_sem
*// evitando valores nulos
IF ISNULL(tot_folios)
Thisform.TxtfolSem.Value = 0
ELSE && no es nulo
Thisform.TxtfolSem.Value = INT(tot_folios * (porcentaje/100))
ENDIF
*// evitando valores nulos
IF ISNULL(tot_pagos)
Thisform.txttotSem.Value = 0
ELSE && no es nulo
Thisform.txttotSem.Value = tot_pagos * (porcentaje/100)
ENDIF
*
* El caso catorcenal creo que deberias incluirlo o modificarlo dentro del quincenal
*****************
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ver los pagos que tienen que cobrar p/s

Publicado por es_binario (757 intervenciones) el 13/07/2010 20:24:11
Te agradezco mucho, pero esa parte ya la tengo controlada, lo que yo quiero ahora es poder saber que cuentas estan para un periodo, es decir que cuentas dentro de un periodo se supone deben ser pagadas, entre un rango de fechas

tengo la fecha inicial y la final,

por el momento ya logre hacerle otra mejor, pero creo que todabia se puede mejorar mas, la solucion es la siguiente, rehago el calendario de pagos.

selecciono las cuentas que tiene un cobrador en este caso digamos la semanal, ahora veo a partir de la fehca en que compro mas los pagos si esta cuenta debiese estar abonada dimamos para esta semana suponiendo que sea el periodo elegido por el usuario bueno, si en el calendari se encuentra entre la fecha inicia y la final, lo agrego a un cursor, esto lo hago con todos las formas de pago, catorcenal, quincenal, y mensual, y luego sobre el cursor solo hago un count sobre los numeros de pago esperados, y lo multiploco por su abono y listo, para todo esto utilizo un for, segun el numero de cuentas que traiga cada cobrador,

pero debe de haber una forma mas rapida, solo que no la he craneado bien, igul uds, podrian darme nada mas un norte para guiarme...

pero de momento el programa funciona, mi unico temor es que digamos en un p4, o cuando tenga unas 10 mil cuentas en la cartera demore esta mecanica, un tanto ingeniosa, pero no del todo eficiente

te agradezco, y si hay otra idea, por favor comentala,

gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar