我有这样的存储过程。我发布的程序主体它有太多的参数,我需要很多控制来检查仓库活动。 它变得巨大,我无法控制它。什么是优化这个的最佳方法。
DECLARE @ORDERFICHEREF INT =488
DECLARE @STFICHEREF INT =560
DECLARE @CLIENTREF INT =608
DECLARE @BARCODE VARCHAR(50)='1536011000010'
DECLARE @ISPARTIAL BIT=0
DECLARE @TERMINALREF INT=1
DECLARE @PARAMETERREF INT=0
DECLARE @PARTIALAMOUNT FLOAT=1
DECLARE @PARTIALUOMREF INT=59
DECLARE @PARTIALCONVFACT1 INT =1
DECLARE @PARTIALCONVFACT2 INT =50
DECLARE @RESULT INT
DECLARE @FICHENO VARCHAR(20)
DECLARE @STATUS SMALLINT
DECLARE @BRANCH SMALLINT
DECLARE @SOURCEINDEX SMALLINT
DECLARE @BARCODEREF INT
DECLARE @ITEMREF INT
DECLARE @VARIANTREF INT
DECLARE @USREF INT
DECLARE @UOMREF INT
DECLARE @CONVFACT1 FLOAT
DECLARE @CONVFACT2 FLOAT
DECLARE @LSTAMOUNT FLOAT
DECLARE @USELABELUNITA INT
DECLARE @CHECKTYPE INT
DECLARE @ISEAN BIT
DECLARE @BARCODESPECODE VARCHAR(50)
DECLARE @PRICE FLOAT
SET @ISEAN=0
SET @CHECKTYPE =-1
SET @RESULT=0
DECLARE @SHIPINFOREF INT
SELECT @FICHENO =ORF.FICHENO,@STATUS=ORF.[STATUS],@BRANCH=ORF.BRANCH,@SOURCEINDEX=ORF.SOURCEINDEX
FROM ORDERFICHE ORF
INNER JOIN ORDERFICHE_TERMINAL ORFT ON ORF.LOGICALREF=ORFT.ORDERFICHEREF
WHERE ORF.LOGICALREF=@ORDERFICHEREF AND ORFT.TERMINALREF=@TERMINALREF
IF (@STATUS IS NULL OR (@STATUS NOT IN (0,1,6)))
BEGIN
SET @RESULT=14 --Fişe terminal atanmış ve fiş statusu tamamlandıdan küçük olacak
GOTO RESULT
END
SELECT
@BARCODEREF=LBL.LOGICALREF,
@ITEMREF=LBL.ITEMREF,
@VARIANTREF=LBL.VARIANTREF,
@UOMREF=LBL.UOMREF,
@USREF=LBL.USREF,
@CONVFACT1 = LBL.CONVFACT1,
@CONVFACT2 = LBL.CONVFACT2,
@LSTAMOUNT=SUM(CAST(CAST(STL.AMOUNT*STL.CONVFACT2/STL.CONVFACT1*(2-IOCODE)/ABS(2-IOCODE) AS NUMERIC(28,6)) AS FLOAT)),
@BARCODESPECODE = LBL.SPECODE
FROM LABEL_CARD LBL
LEFT OUTER JOIN STLINE STL ON LBL.LOGICALREF=STL.BARCODEREF AND STL.BRANCH=@BRANCH AND STL.SOURCEINDEX=@SOURCEINDEX
WHERE LBL.BARCODE=@BARCODE
GROUP BY LBL.LOGICALREF,LBL.ITEMREF,LBL.VARIANTREF,LBL.USREF,LBL.UOMREF,LBL.CONVFACT2,LBL.CONVFACT1,LBL.AMOUNT,STL.BRANCH,STL.SOURCEINDEX,LBL.SPECODE
--BARKOD - CARİ,SEVKİYAT ADRES KONTROLU
DECLARE @LABELCLINETREF INT
DECLARE @LABELLGORFICHEREF INT
DECLARE @LABELLGORFLINEREF INT
DECLARE @LABELSHIPINFOREF INT
IF(@BARCODEREF IS NOT NULL AND (SELECT CONVERT(BIT,VALUE) FROM ORDER_PARAMETER WHERE PARAMETERREF=86)=0) --Cari hesap için yazdırılmış etiket farklı cariye satılsın mı?
BEGIN
SELECT @SHIPINFOREF=SHIPINFOREF FROM STFICHE WHERE LOGICALREF=@STFICHEREF
SELECT @LABELCLINETREF=CLIENTREF,@LABELLGORFICHEREF=LGORFICHEREF,@LABELLGORFLINEREF=LGORFLINEREF,@LABELSHIPINFOREF=SHIPINFOREF
FROM LABEL_CARD_LGREFERENCE WHERE BARCODEREF=@BARCODEREF AND ISCANCELLED=0
IF(@LABELCLINETREF<>@CLIENTREF)
BEGIN
SET @RESULT=57 -- BAŞKA CARİ İÇİN YAZDIRILMIŞ ETİKET
GOTO RESULT
END
IF (ISNULL(@LABELSHIPINFOREF,0)>0)
BEGIN
IF(ISNULL(@LABELSHIPINFOREF,0)<>ISNULL(@SHIPINFOREF,0))
BEGIN
SET @RESULT=58 -- SEVKİYAT ADRESLERİ FARKLI
GOTO RESULT
END
END
END
IF (@BARCODEREF IS NULL )
BEGIN
DECLARE @EANCHARCOUNT INT
SELECT @EANCHARCOUNT=ISNULL(VALUE,0) FROM ORDER_PARAMETER WHERE PARAMETERREF=60
IF @EANCHARCOUNT>0
BEGIN
SET @BARCODE=LEFT(@BARCODE,@EANCHARCOUNT)
END
SELECT @ITEMREF=UB.ITEMREF,@VARIANTREF=ISNULL(UB.VARIANTREF,0),@UOMREF=UB.UNITLINEREF,@USREF=ITM.UNITSETREF,@CONVFACT1 = IUA.CONVFACT1,@CONVFACT2 =IUA.CONVFACT2
FROM {0}..LG_{1}_UNITBARCODE UB
JOIN {0}..LG_{1}_ITEMS ITM ON ITM.LOGICALREF=UB.ITEMREF
JOIN {0}..LG_{1}_ITMUNITA IUA ON IUA.UNITLINEREF=UB.UNITLINEREF AND IUA.LOGICALREF=UB.ITMUNITAREF AND UB.VARIANTREF=IUA.VARIANTREF
WHERE UB.TYP IN (0,1) AND UB.BARCODE=@BARCODE
IF ISNULL(@ITEMREF,0)=0
BEGIN
SET @RESULT=1 -- @ITEMREF NULL GELİYORSA EAN BARKOD YOK --Barkod LABEL_CARD'da ya sa UNITBARCODE da olmalı
GOTO RESULT
END
SET @ISEAN=1
SELECT @CHECKTYPE=CONVERT(INT,VALUE) FROM ORDER_PARAMETER WHERE PARAMETERREF=53
IF(@CHECKTYPE=0)
BEGIN
SELECT @LSTAMOUNT=SUM(CAST(CAST(AMOUNT*CONVFACT2/CONVFACT1*(2-IOCODE)/ABS(2-IOCODE) AS NUMERIC(28,6)) AS FLOAT))
FROM STLINE
WHERE BRANCH=@BRANCH AND SOURCEINDEX=@SOURCEINDEX AND ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF AND BARCODEREF IS NULL
END
IF(@CHECKTYPE=1)
BEGIN
SELECT @LSTAMOUNT=SUM(CAST(CAST(AMOUNT*(2.5-IOCODE)/ABS(2.5-IOCODE)*(UINFO2/UINFO1) AS NUMERIC(28,6)) AS FLOAT))
FROM {0}..LG_{1}_{2}_STLINE
WHERE SOURCEINDEX=@SOURCEINDEX AND STOCKREF=@ITEMREF AND VARIANTREF=@VARIANTREF AND CANCELLED=0 AND LPRODSTAT = 0 AND UINFO1>0 AND UINFO2>0
END
IF((SELECT CONVERT(BIT,VALUE) FROM ORDER_PARAMETER WHERE PARAMETERREF=54)=1)
BEGIN
SET @PARTIALAMOUNT=1
SET @PARTIALUOMREF = @UOMREF
SET @PARTIALCONVFACT1 = @CONVFACT1
SET @PARTIALCONVFACT2 = @CONVFACT2
END
IF(@CHECKTYPE=1)
BEGIN
DECLARE @BACKAMOUNT FLOAT
SELECT @BACKAMOUNT=ISNULL(CAST(CAST(SUM(STL.AMOUNT*STL.CONVFACT2/STL.CONVFACT1) AS NUMERIC(28,6)) AS FLOAT) ,0)
FROM STLINE STL
INNER JOIN ORDERFICHE ORF ON ORF.LOGICALREF=STL.ORDERFICHEREF
WHERE ORF.STATUS<>3 AND STL.IOCODE=4 AND ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF AND BARCODEREF IS NULL AND ORF.SOURCEINDEX=@SOURCEINDEX
SET @LSTAMOUNT=@LSTAMOUNT-@BACKAMOUNT
END
END
ELSE
BEGIN
--PARAMETEREREF=44
IF((SELECT DBO.FNC_EXPIRATIONDATE (@BARCODEREF,44))=1)
BEGIN
SET @RESULT=46
GOTO RESULT
END
END
IF(@CHECKTYPE<>2)
BEGIN
IF (@LSTAMOUNT IS NULL )
BEGIN
IF @CHECKTYPE=-1 AND EXISTS (SELECT NULL
FROM STLINE
WHERE BARCODEREF=@BARCODEREF AND (BRANCH<>@BRANCH OR SOURCEINDEX <> @SOURCEINDEX)
GROUP BY BARCODEREF
HAVING SUM(CAST(CAST(AMOUNT*(2-IOCODE)/ABS(2-IOCODE)*(CONVFACT2/CONVFACT1) AS NUMERIC(28,6)) AS FLOAT))>0)
BEGIN
SET @RESULT=55 --Barkod başka bir ambarda
GOTO RESULT
END
IF @CHECKTYPE=0 AND EXISTS (SELECT NULL
FROM STLINE
WHERE ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF AND BARCODEREF IS NULL AND (BRANCH<>@BRANCH OR SOURCEINDEX <> @SOURCEINDEX)
GROUP BY ITEMREF,VARIANTREF,USREF
HAVING SUM(CAST(CAST(AMOUNT*(2-IOCODE)/ABS(2-IOCODE)*(CONVFACT2/CONVFACT1) AS NUMERIC(28,6)) AS FLOAT))>0)
BEGIN
SET @RESULT=55 --Barkod başka bir ambarda
GOTO RESULT
END
IF @CHECKTYPE=1 AND EXISTS (SELECT NULL
FROM {0}..LG_{1}_{2}_STLINE
WHERE STOCKREF=@ITEMREF AND VARIANTREF=@VARIANTREF AND CANCELLED=0 AND LPRODSTAT = 0 AND UINFO1>0 AND UINFO2>0 AND SOURCEINDEX <> @SOURCEINDEX
GROUP BY STOCKREF,VARIANTREF,USREF
HAVING SUM(CAST(CAST(AMOUNT*(2.5-IOCODE)/ABS(2.5-IOCODE)*(UINFO2/UINFO1) AS NUMERIC(28,6)) AS FLOAT))>0)
BEGIN
SET @RESULT=55 --Barkod başka bir ambarda
GOTO RESULT
END
SET @RESULT=2 --Barkod Stokta olmalı - Girişi yapılmamış ürün
GOTO RESULT
END
IF (@LSTAMOUNT<=0)
BEGIN
IF EXISTS (SELECT 1 FROM STLINE WHERE STFICHEREF=@STFICHEREF AND BARCODEREF=@BARCODEREF)
BEGIN
SET @RESULT=15 --Barkod Stokta olmalı - Mevcut emirde okutulmuş
GOTO RESULT
END
ELSE
BEGIN
SET @RESULT=3 --Barkod Stokta olmalı - Çıkışı yapılmış
GOTO RESULT
END
END
END
IF((@ISPARTIAL=0 OR @ISEAN=1) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @LSTAMOUNT=@PARTIALAMOUNT
SET @UOMREF = @PARTIALUOMREF
SET @CONVFACT1 = @PARTIALCONVFACT1
SET @CONVFACT2 = @PARTIALCONVFACT2
END
IF EXISTS (SELECT 1 FROM ORDERLINE WHERE ORDERFICHEREF=@ORDERFICHEREF AND STFICHEREF=@STFICHEREF)
BEGIN
DECLARE @ORLCOUNT INT
SELECT @USELABELUNITA=USELABELCARDUNITA FROM LABEL_PARAMETERS WHERE LOGICALREF=1
SELECT @ORLCOUNT=COUNT(LOGICALREF) FROM ORDERLINE WHERE STFICHEREF=@STFICHEREF AND ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF AND USREF = @USREF
IF (ISNULL(@ORLCOUNT,0)=0)
BEGIN
SET @RESULT=13 --ITEMREF emirde olmalı
GOTO RESULT
END
IF (@ISEAN=1 AND ISNULL(@PARTIALAMOUNT,0)=0)
BEGIN
SET @RESULT=11
GOTO RESULT
END
IF(@ISPARTIAL=0 AND @ISEAN=0)
BEGIN
IF NOT EXISTS(SELECT NULL FROM ORDERLINE ORL
INNER JOIN LABEL_CARD_UNITA LBLA ON LBLA.BARCODEREF = @BARCODEREF AND ORL.UOMREF = LBLA.UOMREF
WHERE ORL.STFICHEREF=@STFICHEREF AND ORL.ITEMREF=@ITEMREF AND ORL.VARIANTREF=@VARIANTREF)
BEGIN
IF @USELABELUNITA=1
BEGIN
SET @RESULT=54 --etiket birim miktarı girilmelidir.
GOTO RESULT
END
END
DECLARE @TOAMOUNT FLOAT
DECLARE @TSAMOUNT FLOAT
SELECT @TOAMOUNT=CAST(CAST(SUM(ORL.AMOUNT*CASE WHEN LCU.LOGICALREF IS NULL THEN CASE WHEN @USELABELUNITA =1 THEN 0 ELSE ORL.CONVFACT2/ORL.CONVFACT1 END ELSE LCU.CONVFACT2/LCU.CONVFACT1 END)AS NUMERIC(28,6)) AS FLOAT)
FROM ORDERLINE ORL
LEFT OUTER JOIN LABEL_CARD_UNITA LCU ON LCU.BARCODEREF = @BARCODEREF AND ORL.UOMREF = LCU.UOMREF
WHERE ORL.STFICHEREF=@STFICHEREF AND ORL.ITEMREF=@ITEMREF AND ORL.VARIANTREF=@VARIANTREF
SELECT @TSAMOUNT=CAST(CAST(SUM(STL.AMOUNT*(STL.CONVFACT2/STL.CONVFACT1))AS NUMERIC(28,6)) AS FLOAT)
FROM ORDERLINE ORL
INNER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE ORL.STFICHEREF=@STFICHEREF AND ORL.ITEMREF=@ITEMREF AND ORL.VARIANTREF=@VARIANTREF
--Parçalı seri barkod emir miktar aşımı kontrolü için parçalı miktar ana birime çevriliyor.
DECLARE @MAINAMOUNT FLOAT
SET @MAINAMOUNT=@LSTAMOUNT
IF(@ISPARTIAL=0 AND @ISEAN=0 AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @MAINAMOUNT=@MAINAMOUNT*@CONVFACT2/@CONVFACT1
END
--IF (@MAINAMOUNT+ ISNULL(@TSAMOUNT,0)> ISNULL(@TOAMOUNT,0))
IF EXISTS(SELECT * FROM ORDER_PARAMETER WHERE PARAMETERREF=118 AND VALUE=0)
BEGIN
IF (CAST(CAST((ISNULL(@MAINAMOUNT,0)+ISNULL(@TSAMOUNT,0))AS NUMERIC(28,6))AS FLOAT)> ISNULL(CAST(CAST(@TOAMOUNT AS NUMERIC(28,6)) AS FLOAT),0))
BEGIN
SET @RESULT=25 --Emir miktarı aşılmamalı
GOTO RESULT
END
END
END
IF((@ISEAN=1) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
DECLARE @PTOAMOUNT FLOAT
DECLARE @PTSAMOUNT FLOAT
SELECT @PTOAMOUNT=ORL.AMOUNT,@PTSAMOUNT=CAST(CAST(SUM(STL.AMOUNT*(STL.CONVFACT2/STL.CONVFACT1))AS NUMERIC(28,6)) AS FLOAT) FROM ORDERLINE ORL
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF=STL.ORDERLINEREF
WHERE ORL.STFICHEREF=@STFICHEREF AND ORL.ITEMREF=@ITEMREF AND ORL.VARIANTREF=@VARIANTREF AND ORL.UOMREF=@UOMREF
GROUP BY ORL.LOGICALREF,ORL.AMOUNT
IF EXISTS(SELECT * FROM ORDER_PARAMETER WHERE PARAMETERREF=118 AND VALUE=0)
BEGIN
IF(CAST(CAST((@LSTAMOUNT + ISNULL(@PTSAMOUNT,0))AS NUMERIC(28,6))AS FLOAT) > ISNULL(@PTOAMOUNT,0))
BEGIN
SET @RESULT=25 --Emir miktarı aşılmamalı
GOTO RESULT
END
END
END
END
DECLARE @FIFOCONTROL INT
SELECT @FIFOCONTROL=DBO.FNC_ENTRYDATE(@BARCODEREF,@BRANCH,@SOURCEINDEX,@PARAMETERREF)
IF @FIFOCONTROL>0
BEGIN
SET @RESULT=24
GOTO RESULT
END
IF(@ISEAN=0)
BEGIN
DECLARE @ISCOUNTING SMALLINT
SELECT @ISCOUNTING=DBO.FNC_ISCOUNTING(@BRANCH,@SOURCEINDEX,@ITEMREF,@VARIANTREF,@BARCODEREF)
IF (@ISCOUNTING=2) --SAYIMDA OKUTULMAMIS MALZEME
BEGIN
SET @RESULT=21
GOTO RESULT
END
END
IF (@ISPARTIAL=1 OR (@ISEAN=1 AND ISNULL(@PARTIALAMOUNT,0)=0))
BEGIN
SET @RESULT=11 --miktar girilmeli
GOTO RESULT
END
-- HAREKET ÖZEL KODU
DECLARE @SPECODE VARCHAR(50)
IF EXISTS(SELECT * FROM ORDER_PARAMETER WHERE PARAMETERREF=101 AND VALUE=1)
BEGIN
IF (@ISEAN=0)
BEGIN
SET @SPECODE = @BARCODESPECODE
END
ELSE IF (@ISEAN=1)
BEGIN
SET @SPECODE = @EANSPECODE
END
END
DECLARE @ORDERLINEREF INT
DECLARE @DATE DATETIME
SET @ORDERLINEREF=NULL
IF (ISNULL(@ORLCOUNT,0)>1)
BEGIN
DECLARE @CUOMREF INT
DECLARE @COAMOUNT FLOAT
DECLARE @CSAMOUNT FLOAT
DECLARE @CURRAMOUNT FLOAT
DECLARE @CCONVFACT1 FLOAT
DECLARE @CCONVFACT2 FLOAT
DECLARE CURSOR_SORDER CURSOR FOR SELECT LOGICALREF,AMOUNT,UOMREF,CONVFACT1,CONVFACT2 FROM ORDERLINE WHERE STFICHEREF=@STFICHEREF AND ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF ORDER BY (CASE WHEN UOMREF=@UOMREF THEN 0 ELSE 1 END),ISNULL(LGORFICHEREF,2147483647)
OPEN CURSOR_SORDER
FETCH NEXT FROM CURSOR_SORDER INTO @ORDERLINEREF,@COAMOUNT,@CUOMREF,@CCONVFACT1,@CCONVFACT2
WHILE (@@FETCH_STATUS = 0)
BEGIN
IF (ISNULL(@LSTAMOUNT,0)<=0)
BEGIN
BREAK
END
SET @CURRAMOUNT=0
IF((@ISEAN=1 OR @ISPARTIAL=0) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @CURRAMOUNT=@LSTAMOUNT
--SET @CONVFACT1 = @CCONVFACT1
--SET @CONVFACT2 = @CCONVFACT2
END
ELSE
BEGIN
SELECT @CURRAMOUNT=@LSTAMOUNT*(CONVFACT1/CONVFACT2),@CONVFACT1=CONVFACT1,@CONVFACT2=CONVFACT2 FROM LABEL_CARD_UNITA WHERE BARCODEREF =@BARCODEREF AND UOMREF =@CUOMREF
END
IF (ISNULL(@USELABELUNITA,0)=0 AND @CURRAMOUNT =0)
BEGIN
SET @CURRAMOUNT = @LSTAMOUNT*@CCONVFACT1/@CCONVFACT2
SET @CONVFACT1 = @CCONVFACT1
SET @CONVFACT2 = @CCONVFACT2
END
SELECT @CSAMOUNT=ISNULL(SUM(CAST(CAST(AMOUNT AS NUMERIC(28,6)) AS FLOAT)),0) FROM STLINE WHERE STFICHEREF=@STFICHEREF AND ORDERLINEREF=@ORDERLINEREF AND ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF AND UOMREF=@CUOMREF
IF (@COAMOUNT>@CSAMOUNT AND ISNULL(@CURRAMOUNT,0)>0)
BEGIN
IF (@COAMOUNT >= @CSAMOUNT + (@CURRAMOUNT))
BEGIN
SET @LSTAMOUNT=0
END
ELSE
BEGIN
SET @CURRAMOUNT = (@COAMOUNT - @CSAMOUNT)
SET @LSTAMOUNT=@LSTAMOUNT-@CURRAMOUNT
END
SET @DATE=GETDATE()
--SELECT 'bir', @STFICHEREF,8,4,@ITEMREF,@VARIANTREF,@BARCODEREF,@CURRAMOUNT,@CUOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
EXEC MOB_STLINE_INSERT @STFICHEREF,8,4,@ITEMREF,@VARIANTREF,@BARCODEREF,@CURRAMOUNT,@CUOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
END
FETCH NEXT FROM CURSOR_SORDER INTO @ORDERLINEREF,@COAMOUNT,@CUOMREF,@CCONVFACT1,@CCONVFACT2
END
CLOSE CURSOR_SORDER
DEALLOCATE CURSOR_SORDER
END
ELSE
BEGIN
DECLARE @LUSTAMOUNT FLOAT
SET @DATE=GETDATE()
IF (ISNULL(@ORLCOUNT,0)=1)
BEGIN
DECLARE @OCONVFACT1 FLOAT
DECLARE @OCONVFACT2 FLOAT
SELECT @ORDERLINEREF=LOGICALREF,@UOMREF=UOMREF,@OCONVFACT1=CONVFACT1,@OCONVFACT2=CONVFACT2 FROM ORDERLINE WHERE STFICHEREF=@STFICHEREF AND ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF
IF((@ISEAN=1 OR @ISPARTIAL=0) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @LUSTAMOUNT=@LSTAMOUNT
END
ELSE
BEGIN
SELECT @LUSTAMOUNT=@LSTAMOUNT*CONVFACT1/CONVFACT2,@CONVFACT1=CONVFACT1,@CONVFACT2=CONVFACT2 FROM LABEL_CARD_UNITA WHERE BARCODEREF =@BARCODEREF AND UOMREF =@UOMREF
IF (@LUSTAMOUNT IS NULL)
BEGIN
SET @LUSTAMOUNT = @LSTAMOUNT*@OCONVFACT1/@OCONVFACT2
SET @CONVFACT1=@OCONVFACT1
SET @CONVFACT2=@OCONVFACT2
END
END
END
IF @LUSTAMOUNT IS NULL
BEGIN
IF((@ISEAN=1 OR @ISPARTIAL=0) AND @PARTIALAMOUNT IS NOT NULL)
BEGIN
SET @LUSTAMOUNT=@LSTAMOUNT
END
ELSE
BEGIN
SET @LUSTAMOUNT=@LSTAMOUNT*@CONVFACT1/@CONVFACT2
END
END
--SELECT 'iki', @STFICHEREF,8,4,@ITEMREF,@BARCODEREF,ISNULL(@LUSTAMOUNT,@LSTAMOUNT),@UOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
EXEC MOB_STLINE_INSERT @STFICHEREF,8,4,@ITEMREF,@VARIANTREF,@BARCODEREF,@LUSTAMOUNT,@UOMREF,@USREF,@CONVFACT1,@CONVFACT2,@CLIENTREF,@BRANCH,@SOURCEINDEX,NULL,NULL,@DATE,@ORDERFICHEREF,@ORDERLINEREF,NULL,NULL,NULL,@TERMINALREF,@SPECODE
END
IF (@STATUS=0 OR @STATUS=6)
BEGIN
UPDATE ORDERFICHE SET [STATUS]=1 WHERE LOGICALREF=@ORDERFICHEREF
INSERT INTO RECORD_LOG (MODULEREF,RECORDID,IDENTITYINFO,USERREF,TERMINALREF,PROCESSDATE,[TYPE],[DESCRIPTION])
VALUES (103,@ORDERFICHEREF,'Emir Numarası:' + ' ' + @FICHENO,NULL,@TERMINALREF,@DATE,16,'Durumu : Yükleniyor')
END
RESULT:
SELECT ISNULL(@RESULT,0) [RESULT]
IF (@ISPARTIAL=1 OR @ISEAN=1)
BEGIN
SELECT ISNULL(@LSTAMOUNT,0) [LSTAMOUNT],@ISEAN [ISEAN],@CHECKTYPE [CHECKTYPE],(SELECT TOP 1 UOMREF FROM ORDERLINE WHERE STFICHEREF=@STFICHEREF AND ITEMREF=@ITEMREF AND VARIANTREF=@VARIANTREF ORDER BY (CASE WHEN UOMREF=@UOMREF THEN 0 ELSE 1 END),ISNULL(LGORFICHEREF,2147483647)) [ORDERUOMREF]
IF(@ISEAN=1)
BEGIN
SELECT UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ISNULL(ORL.CONVFACT1,ITMA.CONVFACT1) [CONVFACT1],ISNULL(ORL.CONVFACT2,ITMA.CONVFACT2) [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN ITMA.UNITLINEREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT]
FROM {0}..LG_{1}_ITMUNITA ITMA
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON ITMA.UNITLINEREF = UNL.LOGICALREF
LEFT OUTER JOIN ORDERLINE ORL ON ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = ITMA.ITEMREF AND ORL.VARIANTREF = ITMA.VARIANTREF AND ORL.UOMREF = ITMA.UNITLINEREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE ITMA.ITEMREF = @ITEMREF AND ITMA.VARIANTREF = @VARIANTREF
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,ITMA.CONVFACT1,ORL.CONVFACT2,ITMA.CONVFACT2,ORL.LOGICALREF,ITMA.UNITLINEREF,ORL.AMOUNT
ORDER BY UNL.LINENR
END
ELSE
BEGIN
IF((@USELABELUNITA=1 AND ISNULL(@ORLCOUNT,0)>0) OR (ISNULL(@ORLCOUNT,0)=0))
BEGIN
SELECT UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,LBLA.CONVFACT1 [CONVFACT1],LBLA.CONVFACT2 [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN LBLA.UOMREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT]
FROM LABEL_CARD_UNITA LBLA
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON LBLA.UOMREF = UNL.LOGICALREF
LEFT OUTER JOIN ORDERLINE ORL ON ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = @ITEMREF AND ORL.VARIANTREF = @VARIANTREF AND ORL.UOMREF = LBLA.UOMREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE LBLA.BARCODEREF = @BARCODEREF
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,LBLA.CONVFACT1,ORL.CONVFACT2,LBLA.CONVFACT2,ORL.LOGICALREF,LBLA.UOMREF,ORL.AMOUNT
ORDER BY UNL.LINENR
END
ELSE IF(@USELABELUNITA=0 AND ISNULL(@ORLCOUNT,0)>0)
BEGIN
SELECT * FROM (
SELECT UNL.LINENR,UNL.LOGICALREF ,UNL.CODE,UNL.MAINUNIT,LBLA.CONVFACT1 [CONVFACT1],LBLA.CONVFACT2 [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN LBLA.UOMREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT],ORL.LOGICALREF [ORDERLINEREF]
FROM LABEL_CARD_UNITA LBLA
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON LBLA.UOMREF = UNL.LOGICALREF
LEFT OUTER JOIN ORDERLINE ORL ON ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = @ITEMREF AND ORL.VARIANTREF = @VARIANTREF AND ORL.UOMREF = LBLA.UOMREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE LBLA.BARCODEREF = @BARCODEREF
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,LBLA.CONVFACT1,ORL.CONVFACT2,LBLA.CONVFACT2,ORL.LOGICALREF,LBLA.UOMREF,ORL.AMOUNT
UNION ALL
SELECT UNL.LINENR,UNL.LOGICALREF ,UNL.CODE,UNL.MAINUNIT,LBLA.CONVFACT1 [CONVFACT1],LBLA.CONVFACT2 [CONVFACT2],
CASE WHEN ORL.LOGICALREF IS NULL THEN 0 ELSE 1 END [ORDERUNIT],
CASE WHEN LBLA.UOMREF = @UOMREF THEN 1 ELSE 0 END [DEFAULTUNIT],
ORL.AMOUNT - SUM(CAST(CAST(ISNULL(STL.AMOUNT,0) AS NUMERIC(28,6)) AS FLOAT)) [OAMOUNT],ORL.LOGICALREF [ORDERLINEREF]
FROM ORDERLINE ORL
INNER JOIN {0}..LG_{1}_UNITSETL UNL ON ORL.UOMREF = UNL.LOGICALREF
LEFT OUTER JOIN LABEL_CARD_UNITA LBLA ON ORL.UOMREF=LBLA.UOMREF
--AND ORL.UOMREF = LBLA.UOMREF
LEFT OUTER JOIN STLINE STL ON ORL.LOGICALREF = STL.ORDERLINEREF
WHERE LBLA.BARCODEREF = @BARCODEREF AND ORL.ORDERFICHEREF = @ORDERFICHEREF AND ORL.STFICHEREF = @STFICHEREF AND ORL.ITEMREF = @ITEMREF AND ORL.VARIANTREF = @VARIANTREF AND LBLA.LOGICALREF IS NULL
GROUP BY UNL.LINENR,UNL.LOGICALREF,UNL.CODE,UNL.MAINUNIT,ORL.CONVFACT1,LBLA.CONVFACT1,ORL.CONVFACT2,LBLA.CONVFACT2,ORL.LOGICALREF,LBLA.UOMREF,ORL.AMOUNT
) AS A
ORDER BY A.LINENR
END
END
END
答案 0 :(得分:0)
我很容易将每个逻辑都设为sprate。
之前
SELECT @FICHENO =ORF.FICHENO,@STATUS=ORF.[STATUS],@BRANCH=ORF.BRANCH,@SOURCEINDEX=ORF.SOURCEINDEX
FROM ORDERFICHE ORF
INNER JOIN ORDERFICHE_TERMINAL ORFT ON ORF.LOGICALREF=ORFT.ORDERFICHEREF
WHERE ORF.LOGICALREF=@ORDERFICHEREF AND ORFT.TERMINALREF=@TERMINALREF
IF (@STATUS IS NULL OR (@STATUS NOT IN (0,1,6)))
BEGIN
SET @RESULT=14 --Fişe terminal atanmış ve fiş statusu tamamlandıdan küçük olacak
GOTO RESULT
END
在
EXEC PRX_MINT_FICHE_STATUS_CONTROL @ORDERFICHEREF,@TERMINALREF,@RESULT OUTPUT,@FICHENO OUTPUT,@BRANCH OUTPUT,@SOURCEINDEX OUTPUT
IF @RESULT>0
GOTO RESULT;
我在创建输出变量的过程中编写相同的代码,这是后续步骤所需的。