Para guardar se usa tabla.Post, pero tú has usado ¿tabla.Insert? ¿insertar un nuevo registro? ... eso provocará guardar el registro actual, pero no creo sea correcto.
El "case" ese grande, se resume en este:
Código Delphi
[-]
const sqlU = 'update contfac%s set numfac%s = %d';
var strSQL :string;
begin
case frmtipofac.RadioGroup1.ItemIndex of
0: strSQL := Format(sqlU, ['a', 'a',numfaca]
1,2,3,4: strSQL := Format(sqlU, ['b', 'b',numfacb];
end;
frmtipofac.Query1.Close;
frmtipofac.Query1.SQL.Text := strSQL;
frmprincipal.Query1.ExecSQL;
El fallo que comentas no lo veo, pero "numfa" no veo donde se le asigna el valor.
Además veo algunos .Insert innecesarios (ya que crea registros en blanco), como por ejemplo aquí:
Código Delphi
[-]
dmzingueria.facdetalle.Insert; frmfactura.MDtemporal.Insert; frmfactura.MDtemporal.First;
while not frmfactura.MDtemporal.Eof do
begin
dmzingueria.facdetalle.Append;
Saludos