金蝶K3有个最大的问题就是流程复杂而且你没法批量做。销售出库单审核后,下推生成发票就是这样一个坑爹的设计,它只能一张一张下推,加上金蝶本身就SQL写得很差慢得要死,当销售出库单多的时候,下推生成销售发票工作量非常巨大。
下面的程序可以帮你减轻这个工作量,也就是销售出库单审核时自动生成销售发票并审核钩稽:
CREATE TRIGGER [dbo].[AutoSale]
ON [dbo].[ICStockBill]
/*
日期:2012-03-28
作者:鲁志译
描述:审核销售出库单时,自动生成销售发票,审核并钩稽
*/
FOR UPDATE AS
DECLARE
@Status INT,
@TranType INT,
@InterID INT,
@SaleInterID INT,
@InvoiceID INT,
@BillNo VARCHAR(20),
@SaleBillNo VARCHAR(20),
@DigitWidth INT,
@Amount DECIMAL(15, 5),
@ID INT,
@GroupNo INT,
@BillerID INT;
SELECT @BillerID = FUserID FROM t_User WHERE FName = 'Administrator';
SELECT
@BillNo = FBillNo,
@Status = FStatus,
@TranType = FTranType,
@InterID = FInterID,
@BillerID = FBillerID,
@InvoiceID = FRelateInvoiceID
FROM
inserted;
IF UPDATE(FCheckerID) AND @Status = 1 AND @TranType = 21 AND @InvoiceID = 0
BEGIN
EXEC p_GetAnyBillNo '80', 1, @SaleInterID OUTPUT, @SaleBillNo OUTPUT, @DigitWidth OUTPUT;
INSERT INTO ICSaleEntry
(
FInterID,
FEntryID,
FItemID,
FQty,
FPrice,
FAmount,
FTaxRate,
FTaxAmount,
FUnitID,
FAuxPrice,
FAuxQty,
FTaxPrice,
FAuxTaxPrice,
FSourceEntryID,
FStdAmount,
FStdTaxAmount,
FAmountincludetax,
FStdAmountincludetax,
FBatchNo,
FClassID_SRC,
FKFDate,
FKFperiod,
FPeriodDate,
FPriceDiscount,
FAuxPriceDiscount,
FSourceTranType,
FSourceInterId,
FSourceBillNo,
FRemainQty,
FRemainAmount,
FRemainAmountFor,
FNote,
FMTONo
)
SELECT
@SaleInterID,
FEntryID,
t_ICItem.FItemID,
FQty,
100 * FConsignPrice / (100 + t_ICItem.FTaxRate),
100 * FConsignAmount / (100 + t_ICItem.FTaxRate),
t_ICItem.FTaxRate,
t_ICItem.FTaxRate * FConsignAmount / (100 + t_ICItem.FTaxRate),
ICStockBillEntry.FUnitID,
100 * FConsignPrice / (100 + t_ICItem.FTaxRate),
FAuxQty,
FConsignPrice,
FConsignPrice,
FEntryID,
100 * FConsignAmount / (100 + t_ICItem.FTaxRate),
t_ICItem.FTaxRate * FConsignAmount / (100 + t_ICItem.FTaxRate),
FConsignAmount,
FConsignAmount,
FBatchNo,
21,
FKFDate,
ICStockBillEntry.FKFPeriod,
FPeriodDate,
FConsignPrice,
FConsignPrice,
21,
@InterID,
@BillNo,
FQty,
FConsignAmount,
FConsignAmount,
'',
FMTONo
FROM
ICStockBillEntry
LEFT JOIN t_ICItem ON t_ICItem.FItemID = ICStockBillEntry.FItemID
WHERE
FInterID = @InterID;
INSERT INTO ICSale
(
FInterID,
FBillNo,
FTranType,
FROB,
FClassTypeID,
FYear,
FPeriod,
FFincDate,
FDate,
FCustID,
FDeptID,
FEmpID,
FBillerID,
FCurrencyID,
FExchangeRate,
FCompactNo,
FSaleStyle,
FAcctID,
FYearPeriod,
FYtdIntRate,
FNote,
FSelTranType,
FManagerID,
FBrID,
FVchInterID,
FSettleID,
FSysStatus,
FCussentAcctID,
FSettleDate,
FItemClassID,
FAdjustExchangeRate
)
SELECT
@SaleInterID,
@SaleBillNo,
80,
FROB,
1000002,
YEAR(FDate),
MONTH(FDate),
FDate,
FDate,
FSupplyID,
FDeptID,
FEmpID,
@BillerID,
1,
1,
'',
FSaleStyle,
0,
CONVERT(VARCHAR(7), FDate, 120),
0,
FNote,
FSelTranType,
0,
0,
0,
0,
2,
1091,
FDate,
1,
1
FROM
ICStockBill
WHERE
FInterID = @InterID;
SELECT @ID = ISNULL(MAX(FID), 0) + 1 FROM t_RP_Contact;
SELECT @Amount = SUM(FConsignAmount) FROM ICStockBillEntry WHERE FInterID = @InterID;
INSERT INTO t_RP_Contact
(
FID,
FYear,
FPeriod,
FRP,
FType,
FDate,
FFincDate,
FNumber,
FCustomer,
FDepartment,
FEmployee,
FCurrencyID,
FExchangeRate,
FAmount,
FAmountFor,
FRemainAmount,
FRemainAmountFor,
FInvoiceID,
FRPDate,
FK3Import,
FBillType,
FInvoiceType,
FItemClassID,
FExplanation,
FPreparer,
FStatus,
FToBal
)
SELECT
@ID,
YEAR(FDate),
MONTH(FDate),
1,
3,
FDate,
FDate,
@SaleBillNo,
FSupplyID,
FDeptID,
FEmpID,
1,
1,
@Amount,
@Amount,
@Amount,
@Amount,
@SaleInterID,
FDate,
1,
1,
1,
1,
'',
@BillerID,
1,
1
FROM
ICStockBill
WHERE
FInterID = @InterID;
INSERT INTO t_RP_Plan_Ar
(
FOrgID,
FDate,
FAmount,
FAmountFor,
FRemainAmount,
FRemainAmountFor,
FRP,
FInterID
)
SELECT
FID,
FDate,
FRemainAmount,
FRemainAmount,
FRemainAmount,
FRemainAmount,
FRP,
FInvoiceID
FROM
t_RP_Contact
WHERE
FID = @ID;
UPDATE
t_Organization
SET
FLastTradeDate = FDate,
FLastTradeAmount = @Amount
FROM
t_Organization, inserted
WHERE
FItemID = FSupplyID;
SELECT @GroupNo = ISNULL(MAX(FGroupNo), 0) + 1 FROM ICHookRelations;
INSERT INTO
ICHookRelations
SELECT
@GroupNo,
1,
0,
0,
@SaleInterID,
@SaleBillNo,
'X',
MONTH(FDate),
YEAR(FDate),
0,
FDate,
FEntryID,
FItemID,
0,
FQty,
FSupplyID,
0,
@BillerID,
0,
FSaleStyle,
FConsignAmount,
80,
0
FROM
ICStockBillEntry
LEFT JOIN ICStockBill ON ICStockBill.FInterID = ICStockBillEntry.FInterID
WHERE
ICStockBillEntry.FInterID = @InterID
UNION SELECT
@GroupNo,
1,
0,
1,
@InterID,
@BillNo,
'X',
MONTH(FDate),
YEAR(FDate),
0,
FDate,
FEntryID,
FItemID,
0,
FQty,
FSupplyID,
0,
@BillerID,
0,
FSaleStyle,
FConsignAmount,
21,
0
FROM
ICStockBillEntry
LEFT JOIN ICStockBill ON ICStockBill.FInterID = ICStockBillEntry.FInterID
WHERE
ICStockBillEntry.FInterID = @InterID;
UPDATE
ICStockBill
SET
FRelateInvoiceID = @SaleInterID,
FHookInterID = @GroupNo,
FHookStatus = 2
WHERE
FInterID = @InterID;
UPDATE
ICStockBillEntry
SET
FAllHookQTY = FQty,
FCurrentHookQTY = FQty,
FQtyInvoice = FQty,
FAuxQtyInvoice = FQty
WHERE
FInterID = @InterID;
UPDATE
ICSale
SET
FCheckDate = FDate,
FCheckerID = @BillerID,
FStatus = 1,
FHookerID = @BillerID,
FArApStatus = FArApStatus | 1,
FHookStatus = 2,
FHookInterID = @GroupNo
WHERE
FInterID = @SaleInterID;
UPDATE
ICSaleEntry
SET
FAllHookQTY = FQty,
FAllHookAmount = FAmountincludetax,
FCurrentHookQTY = FQty,
FCurrentHookAmount = FAmountincludetax,
FStdAllHookAmount = FAmountincludetax,
FStdCurrentHookAmount = FAmountincludetax
WHERE
FInterID = @SaleInterID;
本人所写的批量生成发票及批量录回款程序在我公司已经使用七八个月,没任何问题。如果有类似需求的用户,请与本人联络。
浙公网安备 33010602011771号