نوشتن کوئریهای خام INSERT در جداول اصلی سند هلو یا سپیدار باعث خرابی ساختار عطف سند، مسدود شدن تراکنشها (Deadlock) و غیرقابل استفاده شدن نرمافزار برای حسابداران میشود.
یک جدول جداگانه مانند `tbl_ai_orders_staging` بسازید تا دادههای ورودی هرگز مستقیماً به جداول اصلی نریزند.
تمام مراحل استعلام موجودی، کسر موقت و درج پیشفاکتور باید درون یک تراکنش بسته با قابلیت Rollback اجرا شود.
BEGIN TRY
BEGIN TRANSACTION;
-- ۱. بررسی موجودی واقعی انبار
IF (SELECT StockQty FROM tbl_Stock WHERE ItemCode = @ItemCode) >= @RequestedQty
BEGIN
-- ۲. ثبت در جدول پیشفاکتور
INSERT INTO tbl_PreInvoice (CustomerCode, ItemCode, Qty, TotalAmount, CreatedAt)
VALUES (@CustomerCode, @ItemCode, @RequestedQty, @TotalAmount, GETDATE());
COMMIT TRANSACTION;
SELECT 'SUCCESS' AS Status, SCOPE_IDENTITY() AS PreInvoiceID;
END
ELSE
BEGIN
ROLLBACK TRANSACTION;
SELECT 'INSUFFICIENT_STOCK' AS Status;
END
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION;
SELECT 'ERROR' AS Status, ERROR_MESSAGE() AS Message;
END CATCH پس از ثبت موفق پیشفاکتور، کد پیگیری و لینک تایید فاکتور بلافاصله با پترن خدماتی پیامک به مشتری ارسال میشود.
یک پیلود استاندارد استعلام و رزرو سفارش همراه با تراکنش ایمن SQL ارسال کنید.