In case this was lost in the discussion, here are some helpful numbers:
there are about 500 Vendors in the vendor files (ACB, AZN, FSH, FST, etc...)
there are about 16,000 vendor items in the system (ACB-001, AZN-989, FSH-453, etc...)
there are about 45,000 purchase order line items (ACB-001, etc...)
So changing all 16,000 vendor items first from 7 characters to 8 characters seems to be the first step. Then the referential integerity will change all 45,000 purchase order line items.
From there, with the new sizing in place, the duplicate vendor issue can be addressed.
Before I forget, when using something like Val(Right(vitemId)) + 1000; does it place any null characters in there when writing it back out as a string? I seem to remember numbers have a leading space and had to be 'trimmed' to get the true length of the number. In our case, we want just 4 digits, and it has to have 4 digits. So no space or null, but zero(es) before any number that is not 4 digits.
Tim