Saludos amigos del foro,
Acabo de elaborar una pantalla de pagos de facturas para un punto de venta que me pidió un amigo cercano. Ya termine el método para aplicar el pago a varias facturas a la vez, pero NO ESTOY CONFORME con el código que hice para hacer dicha tarea. Por lo tanto, necesito que por favor me ayuden a elaborar un código mas optimizado ó mas entendible para distribuir el monto a pagar a varias facturas.
Si no saben o no entienden a que me refiero les dejo un link de un video en YouTube que expone exactamente lo que quiero hacer: https://www.youtube....h?v=ySPtVuV12lY para hacer mas exacto adelanten el video hacia el minuto 1:50, si quieren verlo completo eso es opción de ustedes
El código que hice para aplicar el pago es este :
//AQUI SE DISTRIBUYE EL MONTO APLICADO A TODAS LAS FACTURAS... procedure TForm1.EdMontoChange(Sender: TObject); var ConceptoPago, ConceptoAbono, ValorEncontrado : string; MontoApagar : Currency; begin MontoApagar := EdMonto.Value; //EN ESTE TEDIT LLAMADO "EdMonto" CAPTURO EL MONTO QUE SE APLICARA A LAS FACTURAS ConceptoPago := ''; //Estas variables las uso para armar el concepto de pago ConceptoAbono := ''; EdConcepto.Text := ''; //EN ESTE TEDIT MUESTRO EL CONCEPTO DE PAGO ValorEncontrado := ''; TbFacturas.First; while not TbFacturas.Eof do begin TbFacturas.Edit; TbFacturas.FieldByName('MontoApagar').AsFloat := 0.00; if EdMonto.Value = TbFacturas.FieldByName('MontoPendiente').AsFloat then begin TbFacturas.FieldByName('MontoApagar').AsFloat := EdMonto.Value; ValorEncontrado := 'SI'; ConceptoPago := 'Saldo Factura Nro. ' + IntToStr(TbFacturas.FieldByName('NroFactura').AsInteger); Break; end; TbFacturas.Next; end; if ValorEncontrado <> 'SI' then begin TbFacturas.First; while not TbFacturas.Eof do begin TbFacturas.Edit; TbFacturas.FieldByName('MontoApagar').AsFloat := 0.00; if MontoApagar < TbFacturas.FieldByName('MontoPendiente').AsFloat then begin TbFacturas.FieldByName('MontoApagar').AsFloat := MontoApagar; if MontoApagar > 0 then ConceptoAbono := 'Abono Factura Nro. ' + IntToStr(TbFacturas.FieldByName('NroFactura').AsInteger); MontoApagar := 0; end else begin TbFacturas.FieldByName('MontoApagar').AsFloat := TbFacturas.FieldByName('MontoPendiente').AsFloat; MontoApagar := MontoApagar - TbFacturas.FieldByName('MontoPendiente').AsFloat; if ConceptoPago = '' then ConceptoPago := 'Saldo Factura Nro. ' + IntToStr(TbFacturas.FieldByName('NroFactura').AsInteger) else ConceptoPago := ConceptoPago + ', ' + IntToStr(TbFacturas.FieldByName('NroFactura').AsInteger) end; TbFacturas.Next; end; end; if (ConceptoPago <> '') and (ConceptoAbono <> '') then EdConcepto.Text := ConceptoPago + ', ' + ConceptoAbono else EdConcepto.Text := ConceptoPago + ConceptoAbono; end;
La razón por la cual no quede conforme con el código que hice es por que tuve que emplear dos bucles para recorrer la tabla, (la lógica no me quedo bien) y emplee una variable auxiliar llamada "ValorEncontrado".
Por favor vean el video en el link que le puse y revisen el código que hice y ayúdenme a mejorarlo ya que me quedo muy largo y algo redundante.
Gracias por su atención.
Att: Jorge Abel