Poner Fecha de Vencimiento

168 views
Skip to first unread message

norberto.ma...@gmail.com

unread,
Aug 18, 2021, 2:51:58 PM8/18/21
to Comunidad de Visual Foxpro en Español
Hola Grupo, les comento lo que me piden. Actualmente, dependiendo de una tabla calculo el vencimiento de un producto, en base a la fecha de elaboración + 182 dias. Como para calcular 6 meses después (puede variar esta cantidad de dias, en caso que sea 1 mes, 2 meses, etc.) , y ellos quieren si se elaboró un 20 de enero que el vencimiento sea 20 de junio (6 meses), pero como yo le sumo los dias, este dependiendo la fecha de elaboracion, puede caer en 22 de junio, u otra fecha. La pregunta es: Hay una forma rapida y elegante de calcular esta fecha de vencimiento, que en vez de indicarle la cantidad de dias, le indique la cantidad de meses?. Gracias por vuestra atención.

Norberto Alvarez
Buenos Aires, Argentina 

Zarlu

unread,
Aug 18, 2021, 3:00:51 PM8/18/21
to Comunidad de Visual Foxpro en Español
Buenas  tardes  <norberto.mario.alvarez !

SET DATE FRENCH
SET CENTURY ON
? GOMONTH(CTOD("20/01/2021"),6)

Suerte
zarlu
Chetumal, Quintana Roo, México

HernanCano

unread,
Aug 19, 2021, 12:22:32 AM8/19/21
to Comunidad de Visual Foxpro en Español
Zarlu: 
Recuerda que hay que evitar el uso de fechas en "character" como lo estás haciendo.

Norberto:
Hay dos formas:

Alternativa #1:
Usando la cantidad de meses: Indicas que seis meses:

local M.dFecContrato, M.dFecVence, M.nMeses
M.dFecContrato = date(2021,01,20)
M.nMeses = 6
M.dFecVence = GOMONTH(M.dFecContrato,M.nMeses)
? M.dFecVence && muestra 2021-07-20

Alternativa #2:
Usando la cantidad de días: Indicas que 182 días:

local M.dFecElaboracion, M.dFecVence, M.nDias
M.dFecElaboracion = date(2021,01,20)
M.nDias = 182
M.dFecVence = M.dFecElaboracion + M.nDias
? M.dFecVence && muestra 2021-07-21

Alternativa #3:

Para tu escenario mencionado, puedes decidir (tú!!) usar cualq de las dos primeras alternativas (pero la tercera te será util en general).

Y nos cuentas.

Aclaración:
Para cualq de las alternativas que te muestro aquí, los SET DATE y SET CENTURY pueden tener cualq valor: un valor AMER o USA o MDY no dará valor diferente a YMD o DMY o BRITISH o FRENCH o ANSI, lo cual sí sucederá si usa el método que te propone Zarlu (basado en CTOD(), por ejm CTOD("06/01/2021") con SET DATE DMY o con SET DATE MDY, o hasta con enero-20-2021).

Trento

unread,
Aug 19, 2021, 2:52:15 AM8/19/21
to Comunidad de Visual Foxpro en Español
Vamos a ver el planteamiento de la petición del cliente (que nunca sabe lo que quiere, pero asume que lo sabe todo).

Según comenta Norberto, el cliente pide "6 meses de caducidad" para el producto. Para uno, que no es más que un torpe programador que sólo puede ver las cosas en 1/0, Verdadero/Falso y así...  pues resulta entonces QUE 6 meses "en crudo" equivalen a 365/6 = 60.833 ad libitum de días (y sie es bisiesto...).
Podríamos entonces decirle al cliente:
- Mira, si me pasas los datos de, no solamente en qué fecha, sino en qué hora se fabricó el producto... pues ya te doy yo la fecha exacta de caducidad. Si hablamos de un producto perecedero, pues con más razón. Nadie querrá comer un queso echado a perder y más rancio que cualquier partido político  o "dianastía monárquica". Ok, fabricas/produces el queso un lunes a las 9:00am. ¿Qué sigue? ¿Ya quedó?
- ¿Estás loco? ¡Falta que la linea de producción lo termine de procesar,  lo empaquen, lo distribuyan y llegue al consumidor final!!!
- ... es decir que, quien pone la fecha de caducidad y la imprime en el producto es... ?
- ¡Pues el departamento de empaquetado y distribución!!!
- ... me queda claro.
- ¡Tú ponle 6 meses después de la fecha de producción!!!
- ... que imprimió, 3 días después, el departameto de.. ?
- ¡De distribución! ¿No entiendes eso??? ¡Tú ponle 6 meses después!!!! ¡Punto!!!!
- Va, pues entonces tendré que recalcular y reprogramar el módulo de producción; su control de lotes y fechas de fabricación/producción, el trazado o "tracking" del mismo hasta que llegue al módulo de empaquetado y distribución. Ufff...
- ¡Exacto!!! ¿Se puede hacer???
- Uy... eso va a salir caro.
- ¡Pero se puede hacer! ¿Verdad?

? GOMONTH( DATE() , 6)

- ... tendré que hacer pruebas...
- ¿Qué tantas???
- No lo sé, pero tengo un "conocido" en Argentina que trabaja con cítricos y así.Otros en Inglaterra que se dedican a producción y varios en USA. Y no menciono a un gurú español, pero en fin. Tendré que consultar eso. Ya sabes, las normas regulatorias de producción varían de país en país. Aparte, ya sabes: los formatos de fechas cambian igualmente en cada país. Porque estás exportando, ¿verdad?
- ... No había pensado en eso!!!!
- ... Dios, esto no va a ser gratis... Muy complicado, esto.


FIN.

Saludos Hernán, saludos Zarlu. Saludos a todos.
Simplemente tenía gana de escribir.

Alejandro Jorge Falca

unread,
Aug 19, 2021, 7:55:08 AM8/19/21
to publice...@googlegroups.com
Buenos dias MAESTROS, placer de seguir aprendiendo de Uds.

Trento, entiendo que cometiste un error 6 meses son 365/12*6=182.5 dias... y si veo que tenias ganas de escribir, soy de Argentina y aca los perecederos nunca vencen, ya estamos siendo tantos los pobres que asi tenga un año lo comemos igual...Abrazo para todos...


--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/7552f264-5475-4f95-b7d8-695c4def6671n%40googlegroups.com.


--
Alejandro J. Falca
S.F.V. de Catamarca
(4700) Catamarca
+54-0383-154512079


norberto.ma...@gmail.com

unread,
Aug 19, 2021, 10:54:54 AM8/19/21
to Comunidad de Visual Foxpro en Español
Gracias a todos por los comentarios, la verdad no conocia la Funcion  GOMONTH, Muchas Gracias.
Trento, aca en la Argentina tenemos una frase, que dice "Donde manda Capitan, no manda Marinero". Yo tambien creo que en el momento que indicas el vencimiento de un producto perecedero, lo mejor es indicarlo en días, pero quieren que sea en meses, y no pense que era tan facil, ya estaba por encarar un proceso. Gracias como de costumbre a todos los Maestros. Y todavía no me entra en la cabeza, porque Microsoft descontinuó este maravilloso lenguaje.

Norberto Alvarez
Buenos Aires, Argentina 

Arnaldo Toledano

unread,
Aug 19, 2021, 11:05:11 AM8/19/21
to publice...@googlegroups.com

Esto me recuerda a hace muchos años atrás.
Era gerente de un supermercado en Rio Gallegos, alla donde termina la parte continental de Argentina.
Por la nieve en los caminos, NO TENIA LÁCTEOS.
Se me habían acabado y los camiones no podía llegar.
Yo era amigo del gerente de distribucion de la empresa de Lácteos, (la Serenesima, para los Argentinos).
El me avisa que llegaba el camión un día JUEVES, (supongamos).
Me fui con un empleado y la camioneta para retirar directamente del centro de distribución y llevarlo URGENTE al Supermercado.
Por mi apuro me dieron la mercaderia que estaba al final del camión frigorífico.
Cuando veo las FECHAS DE PRODUCCIÓN DE LOS YOGURES, era JUSTAMENTE ESE JUEVES que estaba retirando la mercadería.

Conclusión.
La fecha de producción la ponen cuando se les da la gana.


Arnaldo Toledano
Córdoba
Argentina

Luis Maria Guayan

unread,
Aug 20, 2021, 8:03:29 PM8/20/21
to Comunidad de Visual Foxpro en Español
Le la ayuda de la función GOMONTH() 

https://www.vfphelp.com/help/_5wn12pqyz.htm

rjdc...@gmail.com

unread,
Aug 23, 2021, 11:24:49 AM8/23/21
to Comunidad de Visual Foxpro en Español
buen dia, aqui lo hago algo mas complejo pero a mi me funciona

lo primero es que los codigos para los productos perecederos no uso los de barra, ya que en un pedido de 10 cajas de un medicamento vienen con varias fechas de vencimiento.
asi que la logica a seguir es simple.
1.- un codigo personal
2.- agrego el mes y el ano de vencimiento al codigo (al momento de hacer mi etiqueta o labels)

asi que el codigo termina de asi.
0000001  (siete digitos para el codigo y es el que tengo en la base de datos. de lo contrario cada cambio de fecha me daria un nuevo codigo.)
082021 (mes y ano de vencimiento)
0000001082021 codigo final impreso en un labels

al leer en mi programa de compra entoces primero busco el codigo completo si no estas en la base de datos paso a tomar solo los primeros 7 digitos y busco otra vez
si aparece entocen divido mes y ano para saber su vencimiento. el dia no me importa.

al tirar reportes de vencimientos entonces busco  0000001 y reviso la fecha de vencimientos de entrada (compras) y las salidas (ventas) si ha diferencia significa que quedan producto de ese 
vencimiento en almacen.

muchos codigos muchos if pero me funciona a la perfeccion
Reply all
Reply to author
Forward
0 new messages