Hmm..
Mal eine andere Frage:
Könnten Positionen mit der Nummer 999 nicht stornierte, somit ungültige Rechnungs-Positionen sein?
Deshalb stellt sich hier eher die Frage, ob diese überhaupt gelistet werden oder sowieso keine 'echte' Positionsnummer haben, da storniert.
Ansonsten müsstest Du eine temporäre Tabelle per z.B. Select insert anlegen, dort per die Position anfügen und immer die PosNr neu anhand der letzten Pos aus der Temptable vergeben.
Da diese Temptable immer die höchste PosNr enthält, würde auch der Insert immer die richtige nächste PosNr verwenden.
Zum Schluss würde diese TempTable als Record zurück gegeben werden oder dann als Datenquelle für den Update dienen.
Hab leider kein Beispiel zur Hand..