Date entry or posting interruption issues are usual for Dynamics GP Clients with unstable network, several common issues are received from clients such as; a batch which is marked for posting, edited by another user ... etc. It has been almost a common sense to any GP Administrator that stable network for Dynamics GP is a "must" in order to ensure that no such issues arise. This is due to the structure of Dynamics GP which depends heavily on the SQL Server to validate data entry.


One of the most common cases due to network stability is the following error, which pops up for end users when they open the sales transaction entry window: "Your previous transaction-level posting session has not finished processing"

This error is a result of one of the following:

  1.  Locked records in SY00500 or SY00800 or SOP10100 ( SOP Work File ) 
  2. Records with blank batch numbers
  3. Records with UserID as a batch number

It's worth to mention that the details of this support case is thoroughly illustrated by Microsoft on support article 852623 with all the important details that are required to both; detect and resolve the issue.


Resolution

As mentioned above, the steps and the scripts to resolve the issue are illustrated in the support article mentioned above. Although, they might seem a little bit misleading. Therefore, I am providing a procedure below which can be run on Dynamics GP company database while all the users are logged out of the system


Important NoteS
  • The script below delete records from Dynamics GP Company database, primarily from SY00500, SOP10100 and SOP10200 ( depending on whether there are corrupted records or not.) 
  • Fill out the user ID which is giving this error in the @UserID parameter below  and run the script
  • Run the script on test environment to check the results before running on Live or operational Dynamics GP Companies.

DECLARE @UserID NVARCHAR(MAX);
SET @UserID = 'XYZ';

IF EXISTS (SELECT * FROM SY00500 WHERE BACHNUMB = '')
BEGIN
DELETE SY00500
WHERE BACHNUMB = '';
END;


IF EXISTS (SELECT * FROM SY00500 WHERE BACHNUMB = @UserID)
BEGIN
DELETE SY00500
WHERE BACHNUMB = @UserID;
END;


IF EXISTS (SELECT BACHNUMB, * FROM SOP10100 WHERE BACHNUMB = '')
BEGIN

DELETE FROM dbo.SOP10200
WHERE SOPNUMBE IN
(SELECTSOPNUMBE FROM dbo.SOP10100 WHERE BACHNUMB = '' );

DELETE dbo.SOP10100
WHERE BACHNUMB = '';
END;


IF EXISTS (SELECT BACHNUMB, * FROM SOP10100 WHERE BACHNUMB = @UserID)
BEGIN

DELETE FROM dbo.SOP10200
WHERE SOPNUMBE IN
(SELECTSOPNUMBE FROM dbo.SOP10100 WHERE BACHNUMB = @UserID);

DELETE dbo.SOP10100
WHERE BACHNUMB = @UserID;
END;



Best Regards, 
Mahmoud M. AlSaadi