|
|
|
@@ -431,7 +431,7 @@ const StockLedgerFixPageClient: React.FC = () => { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
const onAdjApply = async () => { |
|
|
|
const onAdjApply = async (step: "2.7a" | "2.7b") => { |
|
|
|
if (adjRunInFlight.current) return; |
|
|
|
const d = adjDate.trim(); |
|
|
|
if (!d) { |
|
|
|
@@ -443,7 +443,9 @@ const StockLedgerFixPageClient: React.FC = () => { |
|
|
|
return; |
|
|
|
} |
|
|
|
const ok = window.confirm( |
|
|
|
`會在 ${d} 對最後餘額不等於 onHandQty 的庫存桶各寫一筆 ADJ(入或出),掛在既有 lot 上,並寫入庫存調整記錄。不改 lot line、不改 inventory。已對齊的桶不會再寫;缺調整記錄的舊 ADJ 會補上。確定?`, |
|
|
|
step === "2.7a" |
|
|
|
? `會在 ${d} 找出出數量大於入數量的批號列,把入數量改成和出數量一樣,並在同一條批寫一筆入倉 ADJ(差額)和庫存調整記錄。已補過的列再跑不會再寫。確定?` |
|
|
|
: `會在 ${d} 對最後餘額不等於 onHandQty 的庫存桶各寫一筆 ADJ(入或出),掛在既有 lot 上,並寫入庫存調整記錄。不改 lot line、不改 inventory。已對齊的桶不會再寫;缺調整記錄的舊 ADJ 會補上。確定?`, |
|
|
|
); |
|
|
|
if (!ok) return; |
|
|
|
adjRunInFlight.current = true; |
|
|
|
@@ -451,9 +453,11 @@ const StockLedgerFixPageClient: React.FC = () => { |
|
|
|
setAdjError(null); |
|
|
|
setAdjMessage(null); |
|
|
|
try { |
|
|
|
const res = await runStockLedgerFixAdj(d); |
|
|
|
const res = await runStockLedgerFixAdj(d, step); |
|
|
|
setAdjMessage( |
|
|
|
`ADJ ${res.adjDate}:入 ${res.insertedIn}、出 ${res.insertedOut}、調整記錄 ${res.adjustmentRecords ?? 0}、lotQty ${res.filledLotQty}、balance ${res.filledBalance}、日結 ${res.dayRowsWritten}`, |
|
|
|
step === "2.7a" |
|
|
|
? `2.7a ${res.adjDate}:批號列 ${res.insertedIn}、調整記錄 ${res.adjustmentRecords ?? 0}、lotQty ${res.filledLotQty}、balance ${res.filledBalance}、日結 ${res.dayRowsWritten}` |
|
|
|
: `2.7b ${res.adjDate}:入 ${res.insertedIn}、出 ${res.insertedOut}、調整記錄 ${res.adjustmentRecords ?? 0}、lotQty ${res.filledLotQty}、balance ${res.filledBalance}、日結 ${res.dayRowsWritten}`, |
|
|
|
); |
|
|
|
} catch (e) { |
|
|
|
console.error(e); |
|
|
|
@@ -730,11 +734,10 @@ const StockLedgerFixPageClient: React.FC = () => { |
|
|
|
|
|
|
|
<Paper sx={{ p: 2 }}> |
|
|
|
<Stack spacing={1.5}> |
|
|
|
<Typography variant="h6">2.7 ADJ:對齊最後餘額與 onHandQty</Typography> |
|
|
|
<Typography variant="h6">2.7 ADJ</Typography> |
|
|
|
<Typography variant="body2" color="text.secondary"> |
|
|
|
選 ADJ 日期後直接執行。預設昨天;freeze dump 夜可選今天。最後餘額低於 onHandQty |
|
|
|
的桶補一筆入倉 ADJ,高於 onHandQty 的桶補一筆出倉 ADJ,掛在既有 lot 上。不改 lot |
|
|
|
line、不改 inventory。一次執行共用一張入倉單、一張出倉單;已對齊的桶再跑不會再寫。 |
|
|
|
先跑 2.7a,再跑 2.7b。2.7a 只處理出數量大於入數量的批號列:入數量改成和出數量一樣,並在同一條批寫入倉 |
|
|
|
ADJ。2.7b 對最後餘額不等於 onHandQty 的庫存桶補一筆入或出,不改批號列。兩邊再跑都不會重複寫已對齊的資料。 |
|
|
|
</Typography> |
|
|
|
<Stack direction="row" spacing={1} alignItems="center" flexWrap="wrap" useFlexGap> |
|
|
|
<TextField |
|
|
|
@@ -779,9 +782,17 @@ const StockLedgerFixPageClient: React.FC = () => { |
|
|
|
variant="contained" |
|
|
|
color="warning" |
|
|
|
disabled={adjRunning} |
|
|
|
onClick={() => void onAdjApply()} |
|
|
|
onClick={() => void onAdjApply("2.7a")} |
|
|
|
> |
|
|
|
{adjRunning ? "寫入 ADJ 中…" : "Apply ADJ"} |
|
|
|
{adjRunning ? "寫入 ADJ 中…" : "Apply 2.7a"} |
|
|
|
</Button> |
|
|
|
<Button |
|
|
|
variant="outlined" |
|
|
|
color="warning" |
|
|
|
disabled={adjRunning} |
|
|
|
onClick={() => void onAdjApply("2.7b")} |
|
|
|
> |
|
|
|
{adjRunning ? "寫入 ADJ 中…" : "Apply 2.7b"} |
|
|
|
</Button> |
|
|
|
</Stack> |
|
|
|
</Stack> |
|
|
|
|