問題描述:
每次在審核或者棄審其他出入庫單時,都會提示這種錯誤:xxx不符合當前單據約束條件或者不是來源於上游單據的,該序列號目前狀態處於待入庫,當前操作需要處於以下狀態:xxx
(不限於這種情況,出錯的情況有很多種,這里只是舉例說明一下問題的展示效果)

原因分析:
下面講一個例子:
背景:銷售調出單(這個是二開的產品,非標准功能)原理應該也是同普通調撥單,以銷售調出單為例來講解
從商務整機倉(001)調撥到區域倉(100)
單據審核順序:
審核:先審核出庫、再審核入庫
棄審:先棄審入庫,再棄審出庫



現在我們來查看一下后台是怎么展示的:
select AutoID,cInvCode,cWhCode,iSNState,iSNOperateCount,cInvSN ,* from ST_SNState WHERE cInvSN in('HME170220301011') select AutoID,cInvCode,cWhCode,iSNPreState,iSNOperateCount,iVouchsID,iVouchID,cInvSN ,* from ST_SNDetail_OtherIN where cInvSN in('HME170220301011') select AutoID,cInvCode,cWhCode,iSNPreState,iSNOperateCount,iVouchsID,iVouchID ,cInvSN ,* from ST_SNDetail_Otherout where cInvSN in('HME170220301011')

當出庫、入庫都審核完的狀態為:
| cwhcode(倉庫) |
isnstate(狀態) |
| 100(區域倉) |
2(在庫) |
先棄審【入庫】:棄審完為開立狀態
此時【序列號狀態表】為:
| cwhcode(倉庫) |
isnstate(狀態) |
| 100(區域倉) |
1(待入庫) |
先棄審【出庫】:棄審完為開立狀態
此時【序列號狀態表】為:
| cwhcode(倉庫) |
isnstate(狀態) |
| 001(區域倉) |
3(待入庫) |
錯誤操作:
棄審出庫:
此時序列號狀態表為:
| cwhcode(倉庫) |
isnstate(狀態) |
| 100(區域倉) |
3(待入庫) |
過程不怎么操作什么了,就提示錯誤:xxx不符合當前單據約束條件或者不是來源於上游單據的,該序列號目前狀態處於待入庫,當前操作需要處於以下狀態:xxx
就改成原始狀態(這個過程只需要修改序列號狀態表,其他2個表不用修改,數據是不變的)
update ST_SNState SET cWhCode='100',iSNState=2 WHERE cInvCode='2300100070'and cInvSN='HME170220301011'
然后再按正常的順序棄審
要棄審什么:就把序列號狀態表返回到:xx倉庫在庫
要審核什么:就把序列號狀態表返回到:xx倉庫待出庫,再審核
總結:
操作及狀態:
| 操作 |
倉庫 |
狀態 |
| 初始 |
001商務整機倉 |
3(待出庫) |
| ①其他出庫審核 |
100區域倉 |
1(待入庫) |
| ②其他入庫審核 |
100區域倉 |
2(在庫) |
| ③其他入庫【棄審】 |
100區域倉 |
1(待入庫) |
| ④其他出庫【棄審】 |
001商務整機倉 |
3(待出庫) |
