Hola
En realidad creo que la parte en donde actuliza es la que te podria servir mas o donde podrias sacar mas provecho.
Este es el pequeño codigo:
Código Delphi
[-]
procedure TFFactura.BitBtn4Click(Sender: TObject);
var numfact, i, OrdTrans : integer;
Fecha, FechaVence, iv: String;
FPagoOK : Boolean;
MntContado, MntCheque, MntTarjeta, MntOtros, Saldo, Pagado :String;
BalanceAnterior, BalanceTotal : Double;
Tipo :char;
begin
If cbTipo.ItemIndex = 0 then
begin
FFormaPago:=TFFormaPago.Create(self);
FFormaPago.Valores(SubTotal, Impuesto, Total);
try
FFormaPago.ShowModal;
finally
FPagoOK := FFormaPago.OK;
MntContado := FFormaPago.FEContado.Text;
MntCheque := FFormaPago.FECheque.Text;
MntTarjeta := FFormaPago.FETarjeta.Text;
MntOtros := FFormaPago.FEOtro.Text;
Saldo := FloatToStr(FFormaPago.Saldo);
Pagado := FloatToStr(FFormaPago.Pagado);
FFormaPago.Free;
end;
Tipo:= 'F';
end else
begin
FPagoOK := True;
MntContado := '0';
MntCheque := '0';
MntTarjeta := '0';
MntOtros := '0';
Saldo := '0';
Pagado := '0';
Tipo := 'C';
end;
If FPagoOk then
begin
ShortDateFormat := 'yyyy-mm-dd';
Fecha := DateToStr(now);
FechaVence := DateToStr(IncDay(now,(StrToInt(Label21.Caption))));
ShortDateFormat := 'dd/mm/yyyy';
QTemp.SQL.Text := 'Select Max(CodFactura) From Factura where Tipo = '+QuotedStr(Tipo);
QTemp.Open;
If QTemp.RecordCount = 0 then NumFact:=1
else NumFact := QTemp.Fields[0].AsInteger+1;
QTemp.Close;
DataModule1.AC1.BeginTrans;
try
If Edit2.Text <> '' then
QTemp.SQL.Text := 'Insert Into Factura Values '+
'( '+IntToStr(NumFact)+', 0, '+QuotedStr(Tipo)+', '+QuotedStr(Fecha)+', '+Edit1.Text+', '+QuotedStr(Label19.Caption)+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(Edit5.Text)+', '+QuotedStr(Edit3.Text)+
', False, ''0.13'', False, ''0.00'', '+QuotedStr(SGTotal.Cells[1,0])+', '+QuotedStr(SGTotal.Cells[1,1])+', '+
QuotedStr(SGTotal.Cells[1,2])+', '+QuotedStr(SGTotal.Cells[1,3])+', '+Edit2.Text+', '+QuotedStr(MntContado)+', '+QuotedStr(MntCheque)+', '+
QuotedStr(MntTarjeta)+', '+QuotedStr(MntOtros)+', '+QuotedStr(Saldo)+', '+QuotedStr(Pagado)+', '+QuotedStr(FloatToStr(TipoCambio))+')'
else
QTemp.SQL.Text := 'Insert Into Factura ( CodFactura, Secuencia, Tipo, Fecha, CodCliente, Terminos, OrdenCompra, CodVendedor, Excento, TasaImpuesto, Anulada, MntEnvio, MntSubTotal, MntDescuento, MntImpuesto, MntTotal, '+
'MntContado, MntCheque, MntTarjeta, MntOtros, Saldo, Pagado, TC) Values '+
'( '+IntToStr(NumFact)+', 0, '+QuotedStr(Tipo)+', '+QuotedStr(Fecha)+', '+Edit1.Text+', '+QuotedStr(Label19.Caption)+', '+QuotedStr(Edit4.Text)+', '+QuotedStr(Edit5.Text)+', '+QuotedStr(Edit3.Text)+
', False, ''0.13'', False, ''0.00'', '+QuotedStr(SGTotal.Cells[1,0])+', '+QuotedStr(SGTotal.Cells[1,1])+', '+
QuotedStr(SGTotal.Cells[1,2])+', '+QuotedStr(SGTotal.Cells[1,3])+', '+QuotedStr(MntContado)+', '+QuotedStr(MntCheque)+', '+
QuotedStr(MntTarjeta)+', '+QuotedStr(MntOtros)+', '+QuotedStr(Saldo)+', '+QuotedStr(Pagado)+', '+QuotedStr(FloatToStr(TipoCambio))+')';
QTemp.ExecSQL;
For i := 1 to SgFact.RowCount-1 do
begin
if SGFact.Cells[6,i] = 'Si' then iv:='True)' else iv:='False)';
QTemp.SQL.Text := 'Insert Into FacturaItem Values '+
'( '+IntToStr(numfact)+', 0, '+QuotedStr(Tipo)+', '+IntToStr(i)+', '+QuotedStr(SGFact.Cells[0,i])+', '+QuotedStr(SGFact.Cells[2,i])+','+QuotedStr(SGFact.Cells[3,i])+', '+
QuotedStr(SGFact.Cells[4,i])+', '+iv;
QTemp.ExecSQL;
end;
QTemp.SQL.Text := 'SELECT Max([OrdTrans]) AS Expr1 '+
'FROM CxCobrar;';
QTemp.Active := True;
If QTemp.RecordCount = 0 then OrdTrans:=1
else OrdTrans := QTemp.Fields[0].AsInteger+1;
QTemp.Close;
If Tipo = 'F' then
begin
QTemp.SQL.Text := 'Select BalanceTotal From CxCobrar where CodCliente = '+Edit1.Text+
' Order By OrdTrans;';
QTemp.Open;
IF QTemp.RecordCount = 0 then BalanceAnterior := 0
else
begin
QTemp.Last;
BalanceAnterior := QTemp.Fields[0].AsFloat;
end;
QTemp.Close;
BalanceTotal := StrToFloat(Saldo) + BalanceAnterior;
QTemp.SQL.Text := 'Insert Into CxCobrar ( CodTransac, Secuencia, TipoTransac, OrdTrans, FechaTransac, FechaVencimiento, CodCliente, SubTotal, Descuento, Impuesto, Total, Efectivo, Cheque, Tarjeta, Otro, Balance, BalanceTotal, BalanceAnterior, PagosRec, EstadoCuenta )'+
' Values ('+IntToStr(NumFact)+', 0, ''FA'', '+IntToStr(OrdTrans)+', '+QuotedStr(Fecha)+', '+QuotedStr(FechaVence)+', '+Edit1.Text+', '+QuotedStr(SGTotal.Cells[1,0])+', '+QuotedStr(SGTotal.Cells[1,1])+', '+
QuotedStr(SGTotal.Cells[1,2])+', '+QuotedStr(SGTotal.Cells[1,3])+', '+QuotedStr(MntContado)+', '+QuotedStr(MntCheque)+', '+
QuotedStr(MntTarjeta)+', '+QuotedStr(MntOtros)+', '+QuotedStr(Saldo)+', '+QuotedStr(FloatToStr(BalanceTotal))+', '+QuotedStr(FloatToStr(BalanceAnterior))+', 0, 0)';
QTemp.ExecSQL;
end;
For i := 1 to SgFact.RowCount-1 do
begin
if Tipo = 'F' then
QTemp.SQL.Text := 'Update Series Set NumFactura = '+IntToStr(numfact)+', Estado = ''Facturado'' Where '+
'NumSerie = '+SGFact.Cells[2,i]
else
QTemp.SQL.Text := 'Update Series Set NumFactura = '+IntToStr(numfact)+', Estado = ''Consignac'' Where '+
'NumSerie = '+SGFact.Cells[2,i];
QTemp.ExecSQL;
end;
For i := 1 to SgFact.RowCount-1 do
begin
if Tipo = 'F' then
QTemp.SQL.Text := 'Update OrdenProdItem Set Estacion = ''Est05'' Where '+
'NumSerie = '+SGFact.Cells[2,i]
else
QTemp.SQL.Text := 'Update OrdenProdItem Set Estacion = ''Est06'' Where '+
'NumSerie = '+SGFact.Cells[2,i];
QTemp.ExecSQL;
end;
For i := 1 to SgFact.RowCount-1 do
begin
QTemp.SQL.Text := 'Update Articulos Set Disponible = Disponible - '+SGFact.Cells[3,i]+' Where '+
'CodParte = '+QuotedStr(SGFact.Cells[0,i]);
QTemp.ExecSQL;
end;
DataModule1.AC1.CommitTrans;
FImprimirFactura:=TFImprimirFactura.Create(self);
FImprimirFactura.numfact := numfact;
FImprimirFactura.Tipo := Tipo;
try
FImprimirFactura.ShowModal;
finally
FImprimirFactura.Free;
end;
except
on E:Exception do
begin
DataModule1.AC1.RollbackTrans;
MessageDlg('No fue posible completar la transacción, por favor contacte al administrador',mtError,[mbOK],0);
end;
end; end;
Close;
end;
Espero te sirva de ejemplo.
Saludos