This problem happened today, first time for a few years, but it used to happen regularly (every few months). The issue is that the auto populated sales order number in sales transaction entry gets overwritten with the number from the quotation number range.
My guess for the circumstances of this issue, is that the SOP Entry window is open with a quote showing, but not actually started yet. Somehow the order type gets changed from quote to order in the forms internal variables (integration or misbehaving code or connection lost or something?).
The Sop Entry window is then closed, or the order type drop down is changed to order from quote, causing the GP window to attempt to return the unused quote number to the pool to be reused via the next sop number field in sop setup.
However as we are saying that the window variable that holds order type is incorrect and thinks this is a quotation, the window actually returns this quote number to the next order number field, when it should have returned it to the next quote number field. Hence the next sales order number becomes a quote number! eek!
Ok, to fix this is easy, right? -open SOP setup by navigating to Microsoft Dynamics GP>>Tools>>Setup>>Sales>>Sales Order Processing then click [Numbers] button.
Correct the next document number to what it should be (see SQL later to find this), note that you need to close both windows to ensure it saves, and be quick if users are generating numbers you will get a optimistic concurrency violation on save. The problem you then encounter is that if you have distributed sales force, spread over the globe, they will have picked up numbers from the incorrect sop number range, and have them sitting like a time bomb on new sales orders in the sop entry window. Even when you change the number in the sop set up window, if any of those users choose to subsequently close the Sop Entry window, having not used the erroneous sop number, then that number will again get returned to the sop next number field in sop setup, undoing your good work! This is exactly what happens, the number keeps jumping back to the quote range of numbers and you fight a losing battle against the users.
One answer is to ask all users to exit sop entry, make the change then let them back in, with a distributed work force, that may not be actually easy to contact or worse, not in front of the machines when you need to make the change, this is not practical. In this case, I have used the script below to keep resetting the number so immediately the users corrupts the next sop number, it gets corrected again.
Leave the script below running in SSMS until you are confident all users are now on the correct range of numbers.
DECLARE @NextSopNumber CHAR(21) SET @NextSopNumber = '01447267' WHILE 1 = 1 BEGIN IF EXISTS ( SELECT SOPNUMBE FROM SOP40300 --Here SOPTYPE = 2 is an Order - could be changed to target another type WHERE SOPTYPE = 2 AND SOPNUMBE NOT LIKE -- Make a like stub from the next number to see that the number has not jumped CONCAT ( SUBSTRING(@NextSopNumber, 1, LEN(@NextSopNumber) - 3) ,'%' ) ) BEGIN UPDATE SOP40300 SET SOPNUMBE = @NextSopNumber WHERE DOCTYABR = 'ORD' END PRINT 'WAIT' -- 5 second delay then check again WAITFOR DELAY '00:00:05' END
In the above script, set the next sop number in the above script from the number that looks reasonable as a last number from running, looking at the SOPTYPE for the correct document type in question:
SELECT TOP(40) * FROM SOP10100 order by DEX_ROW_ID DESC
So long as the next SOPNumber is within 1000 of the actual last number used, then the GP client will scroll up through, finding the actual next sop number that is available for allocation. The exact number is not critical, and it wont matter until 1000 orders have been entered. After 1000 you will get an error message saying a new sop number could not be found.
Do let me know if this was helpful, in the comments, keeps me motivated to write more!