![]() |
Cálculo de alimentación de viáticos
Salu2 amigos foristas
tengo 4 maskedits con 3 edits estoy tratando de desarrollar un sistema de viáticos en el maskedit1 pongo fecha de salida en el maskedit2 pongo hora de salida en el maskedit3 pongo fecha de retorno en el maskedit4 pongo hora de retorno necesito un algoritmo que lleve esta lógica: en el edit1 deberia dar cuantos desayunos le tocan a pepe en el eidt2 deberia dar cuantos almuerzos le tocan a pepe y en el edit3 deberia dar cuantas cenas le tocan a pepe ejemplo: si pepe sale el 01/10/2008 a las 9:00am y regresa el 03/10/2008 a las 8:00pm desayunos=2 almuerzos=3 cenas=3 gracias adelantadas a sus sugerencias |
se me olvidaba un detalle:
la hora: Desayuno=8:00am Almuerzo=12:00m Cena=6:00pm |
Pues en principio resta los datetimes y multiplica los días enteros que te salgan es decir con tu ejemplo :
3/10/2008 - 1/10/2008 = 2 días *1desayuno, 1comida, 1cena = 2 desayunos 2 comidas y dos cenas y luego revisa las horas de entrada y llegada. hora salida/hora llegada <8am >= 6pm sumar 1desayuno, 1comida, 1cena <8am >=12am sumar 1desayuno, 1comida <8am >=8am sumar 1desayuno en la unit dateutils (>d5) encontrarás funciones de fechas que te serviran.... |
ok muchas gracias intentaré con dateutils a ver que logro
|
el problema con restar las fechas y multiplicarlas, es que si Pepe sale en la tarde, esa operación igual le asignaría 1 desayuno, lo cuál sería incorrecto.
Yo no utilizaría TMAskEdit para las fechas, sería mejor utilizar TDateTimePIcker. Igual para las horas, nada más cambia la propiedad "Kind" |
podrias explicarte mejor contraveneno?
pense que seria bueno con maskedit para filtrar las fechas pero creo que tambien se podria realizar con datatimepicker pero mi dilema es: si pepe sale hoy(01/10/2008) a las 3:10pm y llega mañana(02/10/2008) a las 9:20 pm el 02/10/2008 cumplio el horario total asi que tiene 1 desayuno 1 almuerzo y 1 cena pero el 01/10/2008 amerita solo 1 cena creo que estoy en la lógica correcta pero no se como expresarlo con código gracias adelantadas a sus sugerencias se acepta cualquier método que funcione :D |
en relacion a lo que me indica contraveneno hice otro formulario el cual posee lo siguiente:
TDataTimePicker1 = Fecha de Salida TDataTimePicker2 = Fecha de Retorno TDataTimePicker3 = Hora de Salida TDataTimePicker4 = Hora de Llegada Edit1=Desayunos Edit2=Almuerzos Edit3=Cenas Botón Calcular Cotón Cerrar creo que seria bueno calcular la cantidad de horas que hay entre la salida y la llegada dividir entre 24(horas del dia) y lo que sobre serán las últimas horas del dia trabajado incompletamente pero como lo expreso con código :( gracias adelantadas |
Cita:
donde FechaIni y FechaFin, serían tus fechas que ya estan unidas con sus respectivas horas. Saluditos |
Por que no cambias el algoritmo a algo no tan exacto pues es obvio que nadie come ni desayuna exactamente a las mismas horas y más cuando vas de viaje, digamos que sales a las 5:00 AM (obviamente no desayunas) y el viaje tarde 5 horas, llegas a tu destino y no te da tiempo de desayunar poruqe enseguida te pones a trabajar, dan las 3 y ya comes y luego como a las 8 cenas. Técnicamente te correspondía un desayuno (que no pudiste tomar).
Lo más simple y utilizado en casi todos lados es sacar un estimado de cuanto cuesta un día de las tres comidas y usar ese datos sin importar si se utilicen o no. Por ejemplo: supongamos $100 de comidas diarios para un viaje de 3 días, serían $300 y no nos importa si el tipo come a sus horas. El control se lleva muy simple pues a su regreso el tipo tiene que comprobar $300 en facturas y/o efectivo. Obviamente las comidas que no haga no podrá presentar facturas (bueno teóricamente pq ya sabemos que en esto siempre hacen alguna transa): Esa verificación ya es parte del control interno de la empresa que es una función administrativa. No es bueno codificar tan precisamente la cuestion de horas y fechas porque en un viaje de trabajo NUNCA se cumplen los horarios y corres el riesgo de que a alguien no le alcance o bien le sobre demasiado, por eso normalmente para viáticos siempre te consideran un % de imprevistos (más o menos un 20%) para esos casos. Nuevamente el control para que no haya desviaciones o malos manejos debe ser administrativo y no sistematizado. Otra cosa, las comidas no valen igual normalmente para un empleado de nivel medio que para un ejecutivo (ve tu a saber por qué, jejeje). Así como el hospedaje y demás, por otro lado hay que considerar que algunos trabajadores normalmente hacen comidas con clientes que obviamente a veces no están programadas sino que salen de improviso...ahi es donde te digo que es muy difícil y peligroso sistematizarlo todo. Pero bueno, creo que sigo de metiche...solo era un comentario basado en mis experiencias. |
yo estoy de acuerdo con Azid... pero pues cuando el cliente te lo pide... :D
|
Cita:
Salud OS |
cierto, cierto... hay que saber cuando decir que no. :cool:
|
jaja creo que ya todos se pusieron en mi contra :( pues les comento que la empresa tiene una forma de trabajo y es que ellos calculan mediante su hora de llegada a destino que comidas le toca, si les toca hospedaje o no de acuerdo a la cantidad de dias y no creo que acepten cambiar su forma de trabajo por mi, además a las empresas no les interesa dar demás a sus empleados, ejemplo : es ilógico que si yo llego a mi destino a las 6pm me paguen desayuno y almuerzo de ese dia.... (Imaginense si la empresa fuese de 200 empleados y todos llegan a las 6pm a su destino y les pagan desayuno y almuerzo ) se imaginan la pérdida que yo le causaria a la empresa? asi que creo que no deberia tomarme esto tan a la ligera :(
de igual manera si a un empleado le dan el dinero para el desayuno, la empresa se lava las manos en caso de que el empleado no quiera comer para ahorrarse el dinero ó comer cualquier cosa para lograr el fin antes mencionado |
asi que me ayudaria muchisimo si alguno de ustedes me indica alguna forma de hacer tal cálculo :D o alguna idea ....
gracias adelantadas salu2.___ |
¿ el monto para el desayuno, la comida y la cena es diferente o es el mismo para las tres comidas ?
|
La unidad tributaria actual es 46 Bs.
Desayuno = 0.4 * Unidad Tributaria Almuerzo = 1.7* Unidad Tributaria Cena = 0.4* Unidad Tributaria con una hoja y un lapiz he sacado los rangos (a ver si sirven de algo) creo que si :D Desayuno= (<9:00am) y (<12:00m) y (<6:00pm) Almuerzo= (>9:00am) y (<12:00m) y (<6:00pm) Cena= (>9:00am) y (>12:00m) y (<6:00pm) salu2 y gracias adelantadas |
Pues se tendría que hacer al menos tres cálculos. Uno para determinar cuantas comidas le tocan al primer días, otro para determinar los días (este es el más fácil, daysbetween * 3 comidas por día) y otro para determinar cuantas comidas le corresponden al último día. Sumas y creo que con eso tienes.
|
Salu2
creo que la mejor forma de desarrollar el algoritmo es la siguiente Salida: 20/01/2008 Retorno: 25/01/2008 HoraSalida:13:00pm Hora Retorno:11:00 am Sacar la diferencia que hay entre salida y retorno Retorno - Salida = 5 - 2 =3 Por lo tanto Dias completos= 1Desayuno+1Almuerzo+1Cena // le resto 2 por que es muy posible que el dia de salida y el dia de retorno no se trabaje completo AlimentosSalida:24:00-13:00 = 11:00 Horas (Aqui asumir que faltaron 11 horas para culminar el dia) Por lo tanto Alimentos Salida = 1 Cena Alimentos Retorno=24:00-11:00 = 13:00 Por lo tanto Alimentos Retorno=1 Almuerzo+1Cena nota: yo se que para hacer una resta de horas se usa el hoursbetween de la libreria DateUtils, pero no se es como sacar la resta con hora militar :( porfa les agradesco su ayuda y gracias adelantadas :) |
Problema Resuelto:
Tengo lo siguiente: MaskEdit1 = Formato(99/99/9999) es la fecha de Salida MaskEdit2 = Formato(99/99/9999) esl la fecha de Retorno MaskEdit3 = Formato (99:99) es la Hora de Salida MaskEdit4 = Formato (99:99) es la hora de Retorno Combobox1 = am ó pm del dia de salida Combobox2 = am ó pm del dia de retorno Edit1 = son los dias completos (que ameritan todas las comidas del dia). Edit2 = son las horas restantes para que acabe el dia de salida Edit3 = son las horas restantes para que acabe el dia de retorno Edit4 = Total desayunos Edit5 = Total Almuerzos Edit6 = Total Cena Button1 = Cálculos Button2 = Cerrar Código del Form
Código del Boton Calcular
Código del Boton Cerrar
jejeje creo que me he ido por algo un tanto complicado pero fué la única forma que me surgio la solución :D espero que a alguien más le sirva :D |
La franja horaria es GMT +2. Ahora son las 23:46:19. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi