beh... nello script non usi mai la quantità.

mi sono permesso di rifarti la funzione
codice:
function aggiornaCalcoli(obj){
  var ff = obj.form
  var re = /[^\d]/g
  var indice = parseInt(obj.name.replace(re,''),10)
  var quantita = parseInt(ff.elements['quantita'+indice].value,10)
  if(isNaN(quantita))quantita=0
  var prezzo = parseFloat(ff.elements['prezzo'+indice].value)
  if(isNaN(prezzo))prezzo=0
  var sconto = parseFloat(ff.elements['sconto'+indice].value)
  if(isNaN(sconto))sconto=0
  ff.elements['finale'+indice].value = (prezzo-(prezzo/100)*sconto)*quantita
  var sum = 0.0
  var finale
  for(i=1;i<=16;i++){
    finale = parseFloat(ff.elements['finale'+i].value)
    if(isNaN(finale))finale=0
    sum+=finale
  }
  ff.totale.value=sum	
}
da richiamare all'onchange di tutti i text (tranne dei finale e totale)
codice:
<input type="text" name="quantita1" size="20" onchange="aggiornaCalcoli(this)">
<input name="prezzo1" type="text" id="prezzo" onchange="aggiornaCalcoli(this)" size="8">  
<input name="sconto1" type="text" id="sconto" onchange="aggiornaCalcoli(this)" size="8">  
<input name="finale1" type="text" id="finale" size="8">