Ir al contenido


Foto

Desglosar efectivo en billetes y monedas


  • Por favor identifícate para responder
3 respuestas en este tema

#1 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 11 septiembre 2010 - 09:04

Pues esto hace lo inverso que el contador de monedas de Seoane
Para que sirve?
Pues para facilitarle el trabajo al cajero cuando va a buscar el dinero de las nóminas al banco, que sepa rapidamente la cantidad de billetes y monedas por denominación que tiene que pedir
Tambien le sirve para cuando vaya a entregar el salario a cada trabajador



delphi
  1. procedure TForm1.Desglosar(Importe :Single; var Billetes:array of Single; var Monedas:array of Single);
  2. var
  3.   Dinero,
  4.   Desglose :Single;
  5.  
  6. begin
  7.  
  8. //****************************** Billetes ******************************
  9. Dinero:=Int(Importe);
  10. //Billetes de 100
  11. if cb100.Checked then
  12.   begin
  13.     Desglose:=Int(Dinero / 100);
  14.     Dinero:=Dinero - Desglose * 100;
  15.     Billetes[0]:=Billetes[0] + Desglose;
  16.   end;
  17.  
  18. //Billetes de 50
  19. if cb50.Checked then
  20.   begin
  21.     Desglose:=Int(Dinero / 50);
  22.     Dinero:=Dinero - Desglose * 50;
  23.     Billetes[1]:=Billetes[1] + Desglose;
  24.   end;
  25.  
  26. //Billetes de 20
  27. if cb20.Checked then
  28.   begin
  29.     Desglose:=Int(Dinero / 20);
  30.     Dinero:=Dinero - Desglose * 20;
  31.     Billetes[2]:=Billetes[2] + Desglose;
  32.   end;
  33.  
  34. //Billetes de 10
  35. if cb10.Checked then
  36.   begin
  37.     Desglose:=Int(Dinero / 10);
  38.     Dinero:=Dinero - Desglose * 10;
  39.     Billetes[3]:=Billetes[3] + Desglose;
  40.   end;
  41.  
  42.   //Billetes de 5
  43. if cb05.Checked then
  44.   begin
  45.     Desglose:=Int(Dinero / 5);
  46.     Dinero:=Dinero - Desglose * 5;
  47.     Billetes[4]:=Billetes[4] + Desglose;
  48.   end;
  49.  
  50.   //Billetes de 3
  51. if cb03.Checked then
  52.   begin
  53.     Desglose:=Int(Dinero / 3);
  54.     Dinero:=Dinero - Desglose * 3;
  55.     Billetes[5]:=Billetes[5] + Desglose;
  56.   end;
  57.  
  58.   //Billetes de 1
  59. Desglose:=Int(Dinero / 1);
  60. Dinero:=Dinero - Desglose * 1;
  61. Billetes[6]:=Billetes[6] + Desglose;
  62.  
  63. //****************************** Monedas ******************************
  64. Dinero:=(Round((Frac(Importe)*100)));
  65.  
  66. //Monedas de 0.20
  67. if cb020.Checked then
  68.   begin
  69.     Desglose:=Int(Dinero / 20);
  70.     Dinero:=Dinero - Desglose * 20;
  71.     Monedas[0]:=Monedas[0] + Desglose;
  72.   end;
  73.  
  74. //Monedas de 0.05
  75. if cb005.Checked then
  76.   begin
  77.     Desglose:=Int(Dinero / 5);
  78.     Dinero:=Dinero - Desglose * 5;
  79.     Monedas[1]:=Monedas[1] + Desglose;
  80.   end;
  81.  
  82. //Monedas de 0.02
  83. if cb002.Checked then
  84.   begin
  85.     Desglose:=Int(Dinero / 2);
  86.     Dinero:=Dinero - Desglose * 2;
  87.     Monedas[2]:=Monedas[2] + Desglose;
  88.   end;
  89.  
  90. //Monedas de 0.01
  91. Desglose:=Int(Dinero / 1);
  92. Dinero:=Dinero - Desglose * 1;
  93. Monedas[3]:=Monedas[3] + Desglose;
  94.  
  95. end;



Una forma de llamarlo:



delphi
  1.   Desglosar(StrToFloat(Valor.Text), Bill, Mon);




Está hecho con las nomenclaturas de mi país, pero se puede modificar para adaptarlo a las nomenclaturas deseadas
Tal vez pueda optimizarse, pues esta fue una solución rápida que encontré y funciona bien. Este modulo forma parte de un Sistema de Nóminas que hice hace algunos años

Este es el formulario correspondiente a este código:

Archivos adjuntos


  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 septiembre 2010 - 09:11

En México utilizamos las siguientes denominaciones:

Billetes 1,000, 500, 200, 100, 50, 20
Monedas (pesos) 10, 5, 2, 1
Monedas (centavos) 50, 20, 10

Salud OS


  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 11 septiembre 2010 - 08:58

Hola

He modificado un poco tu código para las denominaciones en México, adjunto el programa y el código.



delphi
  1. function CalculaFraccion(const Denominacion: single): single;
  2. begin
  3.   Desglose := Int(Dinero / Denominacion);
  4.   Dinero:= Dinero - Desglose * Denominacion;
  5.   Result := Desglose;
  6. end;
  7.  
  8. procedure TForm1.Button1Click(Sender: TObject);
  9. var
  10.   i, j, k: Integer;
  11.   Total: single;
  12.   comp, comp_edt: TComponent;
  13. begin
  14.   for k := 0 to ComponentCount-1 do
  15.   begin
  16.     if Components[k] is TEdit then
  17.     begin
  18.       comp_edt := FindComponent(Components[k].Name);
  19.       if TEdit(comp_edt).Tag <> 999 then
  20.         TEdit(comp_edt).Text := format('%3.0f',[0.0]);
  21.     end;
  22.   end;
  23.   Dinero := strtofloat(edit1.Text);
  24.   for i := 0 to ComponentCount-1 do
  25.   begin
  26.     if Components[i] is TCheckBox then
  27.     begin
  28.       comp := FindComponent(Components[i].Name);
  29.       if TCheckBox(comp).checked then
  30.       begin
  31.         Total := CalculaFraccion(strtofloat(TCheckBox(comp).Caption));
  32.         for j := 0 to ComponentCount - 1 do
  33.         begin
  34.           if Components[j] is TEdit then
  35.           begin
  36.             comp_edt := FindComponent(Components[j].Name);
  37.             if TEdit(comp_edt).Tag = TCheckBox(comp).Tag then
  38.                 TEdit(comp_edt).Text := format('%3.0f',[Total]);
  39.           end;
  40.         end;
  41.       end;
  42.     end;
  43.   end;
  44. end;



Salud OS

Archivos adjuntos


  • 1

#4 JoAnCa

JoAnCa

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 775 mensajes
  • LocationPinar del Río, Cuba

Escrito 13 septiembre 2010 - 01:20

Sabia que se podia optimizar el código, pues eso lo hice hace "algunos años" por el 1997 o 1998  *-) , que manera de escribir código  *-)

Pero no lo toqué mas porque, despues me cambié de empresa y en la nueva ya tenian un sistema integral que tambien contenía las nóminas

  • 0




IP.Board spam blocked by CleanTalk.