No necesitas hacer una función abrir(). Las funciones sirven si quieres definirlo una vez, y llamarla luego las veces que quieras. En tu caso quieres definirla
una por cada vez que la vas a llamar.
Código PHP:
$i=1;
do{
echo'<tr>';
echo '<td class="texto_tabla"> '.$row[fecha].'</td> ';
echo '<td class="texto_tabla"> '.$row[cliente].'</td> ';
echo '<td class="texto_tabla"> '.$row[tipocomp].'</td> ';
echo '<td class="texto_tabla"> '.$row[npref].'</td> ';
echo '<td class="texto_tabla"> '.$row[ncomp].'</td> ';
echo '<td class="texto_tabla"> '.$row[debe].'</td> ';
echo '<td class="texto_tabla"> '.$row[haber].'</td> ';
echo '<td class="texto_tabla"> '.$row[saldo].'</td> ';
$comprobante[$i]=$row[tipocomp];
$prefijo[$i]=$row[npref];
$nuemerocomp[$i]=$row[ncomp];
$det='<a href="javascript:window.open("/accesorios/litadoshtml/htm_detallecomp.php?id=1&ses=1&comp='.$comprobante[$i].'&pref='.$prefijo[$i].'&num='.$nuemerocomp[$i].'","","type=fullWindow, location=no, toolbar=no, menubar=no, resizable=yes, scrollbars=yes, top=0,left=0, width=1024,height=768").focus();">+ detalle</a>';
echo '<td class="texto_tabla"> '.$det.'</td> ';
$i++;
}
while ($row =mysql_fetch_array($res));
echo '</tr>';
echo '</table>';

Suerte