Quizas la logica que uso no sea la mas adecuada, por lo que cualquier sugerencia para cambiarla sera aceptada.
El problema es que tengo una tabla prenominas, pero al calcular tengo que dividirla en dos, los miembros de la direccion y los consultores.
Entonces hago dos consultas basadas en prenomina, una para la direccion del area y otra para los consultores de esa area, y los muestro en sus datagrid respectivos.
Al calcular, las formulas de los 2 casos son diferentes, pero la cantidad de salario a distribuir es comun para los dos.
En una ocasion el error me lo dio en la consulta de la direccion de la 2da area, vacie la tabla y despues me lo da en la consulta de los consultores en la 6ta area.
Es decir, que da el error arbitrariamente ??
Este es el codigo que uso en el boton Calcular
- with ModuloBD do 
-   begin 
-     //--- Direccion del Grupo de Trabajo --- 
-     TDeveng:=0; TAjust:=0; TPenal:=0; 
-     fdtPrenomGTDir.First; 
-     fdtPrenomGTDir.DisableControls; 
-     while not fdtPrenomGTDir.Eof do 
-     begin 
-       fdtPrenomGTDir.Edit; 
-         fdtPrenomGTDirSalarioNeto.Value:=fdtPrenomGTDirSalarioAjust.Value + fdtPrenomGTDirEstimAdic.Value; 
-         fdtPrenomGTDirEstimulac.Value:=fdtPrenomGTDirSalarioNeto.Value - fdtPrenomGTDirSalarioDeveng.Value; 
-         // Calcular el formado 
-         if fdtPrenomGTDirIngresos.Value > 0 then 
-           SalForm:=fdtPrenomGTDirIngresos.Value * fdtAuxiliarCDSEspPrinc.Value 
-         else 
-         begin 
-           //--- Si es el Esp. Princiapal --- 
-           if fdtPrenomGTDirIDSUBCAT.Value = 7 then 
-             if frmSisleg.CantTrabGT > 0 then SalForm:=(fdtIngxGruposMontoADist.Value / frmSisleg.CantTrabGT) * fdtPrenomGTDirSalarioDeveng.Value / fdtPrenomGTDirSalarioBasico.Value 
-             else SalForm:=0 
-           //--- Si es la Contadora 
-           else 
-             if frmSisleg.CantTrabGT > 0 then SalForm:=(fdtIngxGruposMontoADist.Value / frmSisleg.CantTrabGT) * fdtPrenomGTDirSalarioDeveng.Value / fdtPrenomGTDirSalarioBasico.Value * 50 / 100 
-             else SalForm:=0 
-         end; 
-         fdtPrenomGTDirSalarioFormado.Value:=SalForm; 
-       fdtPrenomGTDir.Post; 
-       //--- Totalizar --- 
-       TAjust:=TAjust + fdtPrenomGTDirSalarioAjust.Value; 
-       TPenal:=TPenal + fdtPrenomGTDirPenalizacion.Value; 
-       fdtPrenomGTDir.Next; 
-     end; 
-     fdtPrenomGTDir.First;   fdtPrenomGTDir.Refresh; 
-     fdtPrenomGTDir.EnableControls; 
-     qryTotPrenomGTDir.Refresh; 
-     TDeveng:=dbtxtTotSalEsc.Field.Value + dbtxtTotDFer.Field.Value + dbtxtTotOtrosP.Field.Value; 
-     lblDevengDG.Caption:=FloatToStrF(TDeveng, ffNumber, 6, 2); 
-     lblSalAjustDG.Caption:=FloatToStrF(TAjust, ffNumber, 6, 2); 
-     lblTotPenalDG.Caption:=FloatToStrF(TPenal, ffNumber, 6, 2); 
-   
-     //--- Consultores --- 
-     fdtPrenomGTCons.Refresh; 
-     TDeveng:=0; TAjust:=0; TPenal:=0; 
-     fdtPrenomGTCons.DisableControls; 
-     fdtPrenomGTCons.First; 
-     while not fdtPrenomGTCons.Eof do 
-     begin 
-       fdtPrenomGTCons.Edit; 
-         fdtPrenomGTConsSalarioNeto.Value:=fdtPrenomGTConsSalarioAjust.Value + fdtPrenomGTConsEstimAdic.Value; 
-         fdtPrenomGTConsEstimulac.Value:=fdtPrenomGTConsSalarioNeto.Value - fdtPrenomGTConsSalarioDeveng.Value; 
-         // Calcular el formado 
-         if fdtPrenomGTConsIngresos.Value > 0 then 
-           SalForm:=fdtPrenomGTConsIngresos.Value * StrToFloatDef(lblCDSCons.Caption, 0) 
-         else 
-           SalForm:=0; 
-         fdtPrenomGTConsSalarioFormado.Value:=SalForm; 
-       fdtPrenomGTCons.Post; 
-       //--- Totalizar --- 
-       TAjust:=TAjust + fdtPrenomGTConsSalarioAjust.Value; 
-       TPenal:=TPenal + fdtPrenomGTConsPenalizacion.Value; 
-       fdtPrenomGTCons.Next; 
-     end; 
-     fdtPrenomGTCons.First;  fdtPrenomGTCons.Refresh; 
-     fdtPrenomGTCons.EnableControls; 
-     qryTotPrenomGTCons.Refresh; 
-     TDeveng:=dbtxtTotSalEsc1.Field.Value + dbtxtTotDFer1.Field.Value + dbtxtTotOtrosP1.Field.Value; 
-     lblDevengCons.Caption:=FloatToStrF(TDeveng, ffNumber, 6, 2); 
-     lblSalAjustCons.Caption:=FloatToStrF(TAjust, ffNumber, 6, 2); 
-     lblTotPenalCons.Caption:=FloatToStrF(TPenal, ffNumber, 6, 2); 
-   end; 
							Editado por JoAnCa, 28 septiembre 2018 - 11:19 .