Tonight I'm testing some changes to a GP VS Tools AddIn that I developed.
I apparently had a bug in a line of the AddIn code that caused GP to crash while I was editing a Payables Invoice.
So I fixed the bug, recompiled, and opened GP again, clearing out my old login record.
Strangely, when I opened the Payables Transaction Entry window and clicked on the 'last' record button, nothing happened. Using the First/Previous/Next/Last buttons wasn't bringing up my test invoice. Odd.
I then tried the lookup button next to the voucher number field. There was the invoice. Hmmm.
But when I tried to select the invoice to open it, I received this message.
Um, ya, of course the voucher number already exists! It's a saved voucher!
So apparently the GP crash caused some problem that is preventing GP from opening the voucher.
To start my detective work, I closed the Payables Transaction Entry window, and I checked DEX_LOCK, SY00800, and SY00801. Nothing.
Then I opened the window again and traced the SQL activity that occurred when I selected the saved voucher. Nothing obvious that I could decipher.
I then queried PM00400 and saw a small oddity--voucher 680 had a blank record, and I hadn't attempted to save it. It wasn't obvious if that might be related, but it does look like an invalid record.
I also noticed that the REBILL batch to which the invoice belongs has a transaction count of 2, even though there is only one transaction in the batch. I've done lots of testing and had several GP crashes, so I am guessing the transaction count was already wrong.
So, as a last resort, I entered a new voucher so that I could compare the data for that new record to my problem voucher.
And that's when I saw an issue.
Voucher 680 had a document status of 0. Even though the voucher had been previously saved, when GP crashed, it somehow caused the document status for the voucher number to be set to 0 in the PM Keys table.
I can proudly say that I have crashed GP hundreds, nay, thousands of times with my test code, and have never seen this issue.
So I set the DCSTATUS value to 1 and tried opening the voucher. Nope. Same error.
So then I queried PM10000 to see if I could find any odd values.
I found that the PSTGSTUS field was indicating that the voucher was being edited. Which makes sense.
After setting the posting status back to 20, I was finally able to open the voucher again.
That was a fun waste of 30 minutes.
It'll teach me to never have a bug again. My first and only bug.