taSOPLotAuto

 

ALTER PROCEDURE [dbo].[taSopLotAuto] @I_vSOPTYPE SMALLINT, @I_vSOPNUMBE CHAR(21), @I_vUSERDATE DATETIME='', @I_vLNITMSEQ INT, @I_vITEMNMBR CHAR(30), @I_vLOCNCODE CHAR(10) ='', @I_vQUANTITY NUMERIC(19, 5), @I_vBIN CHAR(15) ='', @I_vCREATEBIN TINYINT=0, @I_vLOTNUMBR CHAR(20) ='', @I_vEXPNDATE DATETIME='', @I_vMFGDATE DATETIME='', @I_vQTYTYPE SMALLINT=1, @I_vRequesterTrx SMALLINT=0, @I_vDOCID CHAR(15) ='', @I_vDROPSHIP SMALLINT=0, @I_vQTYFULFI NUMERIC(19, 5) =NULL, @I_vALLOCATE SMALLINT=0, @I_vCMPNTSEQ INT=0, @I_vLOTNUMBRToReplace CHAR(20) ='', @I_vAUTOCREATELOT INT=0, @I_vUOFM CHAR(8) ='', @I_vDATERECD DATETIME='', @I_vUpdateIfExists SMALLINT=0, @I_vUSRDEFND1 CHAR(50) ='', @I_vUSRDEFND2 CHAR(50) ='', @I_vUSRDEFND3 CHAR(50) ='', @I_vUSRDEFND4 VARCHAR(8000) ='', @I_vUSRDEFND5 VARCHAR(8000) ='', @O_iErrorState INT OUTPUT, @oErrString VARCHAR(255) OUTPUT
AS
SET DEADLOCK_PRIORITY LOW;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
DECLARE @QTYRECVD NUMERIC(19, 5), @DTSEQNUM NUMERIC(19, 5), @UNITCOST NUMERIC(19, 5), @SLTSQNUM INT, @ATYALLOC NUMERIC(19, 5), @QTYSOLD NUMERIC(19, 5), @VCTNMTHD TINYINT, @OVRSERLT TINYINT, @ITMTRKOP TINYINT, @iStatus INT, @iError INT, @iCustomState INT, @iCustomErrString VARCHAR(255), @O_oErrorState INT, @ALLOCABY SMALLINT, @USPFULPR SMALLINT, @LOCNCODE CHAR(10), @ExstITEMNMBR CHAR(30), @ExstATYALLOC NUMERIC(19, 5), @ExstQTYFULFI NUMERIC(19, 5), @QTYBSUOM NUMERIC(19, 5), @SOPHdrTbl CHAR(18), @DexRowID INT, @oExists INT, @OInsStatus INT, @mylock TINYINT, @DexLockErrorState INT, @QUANTITY NUMERIC(19, 5), @QtyDone NUMERIC(19, 5), @LotFound SMALLINT, @QtyAvail NUMERIC(19, 5), @SERLTQTY NUMERIC(19, 5), @AmntOverExst NUMERIC(19, 5), @UOFMBASE CHAR(8), @UOMSCHDL CHAR(10), @DTSEQNUMREP NUMERIC(19, 5), @ATYALLOCMAST NUMERIC(19, 5), @ATYALLOCREP NUMERIC(19, 5), @DATERECDREP DATETIME, @ENABLEMULTIBIN TINYINT, @sCompanyID INT, @NOTEINDX NUMERIC(19, 5), @iGetNextNoteIdxErrState INT, @BinToReplace CHAR(15), @QTY NUMERIC(19, 5), @ALLEXPLOTSOTHER TINYINT, @ASSIGNLOTNUMBY TINYINT, @USEEXISTINGSNLOTS TINYINT, @LotHit TINYINT, @SITEINACTIVE TINYINT, @ITEMSITEINACTIVE TINYINT;
SELECT @QTYRECVD=0, @DTSEQNUM=0, @UNITCOST=0, @ATYALLOC=0, @QTYSOLD=0, @VCTNMTHD=0, @OVRSERLT=0, @ITMTRKOP=0, @iStatus=0, @iError=0, @iCustomState=0, @iCustomErrString='', @O_iErrorState=0, @ALLOCABY=0, @USPFULPR=0, @LOCNCODE='', @ExstITEMNMBR='', @ExstATYALLOC=0, @ExstQTYFULFI=0, @QTYBSUOM=0, @SOPHdrTbl='', @DexRowID=0, @oExists=0, @OInsStatus=0, @mylock=0, @DexLockErrorState=0, @QUANTITY=0, @QtyDone=0, @LotFound=0, @QtyAvail=0, @SERLTQTY=0, @AmntOverExst=0, @UOFMBASE=0, @UOMSCHDL='', @DTSEQNUMREP=0, @ATYALLOCMAST=0, @ATYALLOCREP=0, @DATERECDREP='', @ENABLEMULTIBIN=0, @sCompanyID=0, @NOTEINDX=0, @iGetNextNoteIdxErrState=0, @BinToReplace='', @QTY=0, @ALLEXPLOTSOTHER=0, @ASSIGNLOTNUMBY=1, @USEEXISTINGSNLOTS=0, @LotHit=0, @SITEINACTIVE=0, @ITEMSITEINACTIVE=0;
IF(@oErrString IS NULL)BEGIN
SELECT @oErrString='';
END;
EXEC @iStatus=taSopLotAutoPre @I_vSOPTYPE OUTPUT, @I_vSOPNUMBE OUTPUT, @I_vUSERDATE OUTPUT, @I_vLNITMSEQ OUTPUT, @I_vITEMNMBR OUTPUT, @I_vLOCNCODE OUTPUT, @I_vQUANTITY OUTPUT, @I_vBIN OUTPUT, @I_vCREATEBIN OUTPUT, @I_vLOTNUMBR OUTPUT, @I_vEXPNDATE OUTPUT, @I_vMFGDATE OUTPUT, @I_vQTYTYPE OUTPUT, @I_vRequesterTrx OUTPUT, @I_vDOCID OUTPUT, @I_vDROPSHIP OUTPUT, @I_vQTYFULFI OUTPUT, @I_vALLOCATE OUTPUT, @I_vCMPNTSEQ OUTPUT, @I_vLOTNUMBRToReplace OUTPUT, @I_vAUTOCREATELOT OUTPUT, @I_vUOFM OUTPUT, @I_vDATERECD OUTPUT, @I_vUpdateIfExists OUTPUT, @I_vUSRDEFND1 OUTPUT, @I_vUSRDEFND2 OUTPUT, @I_vUSRDEFND3 OUTPUT, @I_vUSRDEFND4 OUTPUT, @I_vUSRDEFND5 OUTPUT, @O_iErrorState=@iCustomState OUTPUT, @oErrString=@iCustomErrString OUTPUT;
SELECT @iError=@@error;
IF((@iStatus<>0)OR(@iCustomState<>0)OR(@iError<>0))BEGIN
    SELECT @oErrString=RTRIM(@oErrString)+' '+LTRIM(RTRIM(@iCustomErrString));
    SELECT @O_iErrorState=2629;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
IF(@I_vSOPTYPE IS NULL OR @I_vSOPNUMBE IS NULL OR @I_vUSERDATE IS NULL OR @I_vITEMNMBR IS NULL OR @I_vQUANTITY IS NULL OR @I_vBIN IS NULL OR @I_vCREATEBIN IS NULL OR @I_vLNITMSEQ IS NULL OR @I_vDOCID IS NULL OR @I_vDROPSHIP IS NULL OR @I_vALLOCATE IS NULL OR @I_vCMPNTSEQ IS NULL OR @I_vLOTNUMBRToReplace IS NULL OR @I_vAUTOCREATELOT IS NULL OR @I_vUOFM IS NULL OR @I_vUpdateIfExists IS NULL)BEGIN
    SELECT @O_iErrorState=3332;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vSOPTYPE=0)OR(@I_vSOPNUMBE=''))BEGIN
    SELECT @O_iErrorState=3333;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF(@I_vUSERDATE='')BEGIN
    SELECT @I_vUSERDATE=CONVERT(VARCHAR(12), GETDATE());
END;
IF @I_vDATERECD='' BEGIN
    SELECT @I_vDATERECD=CONVERT(VARCHAR(12), GETDATE());
END;
SELECT @I_vSOPNUMBE=UPPER(@I_vSOPNUMBE), @I_vITEMNMBR=UPPER(@I_vITEMNMBR), @I_vLOTNUMBR=UPPER(@I_vLOTNUMBR), @I_vLOCNCODE=UPPER(@I_vLOCNCODE), @I_vDOCID=UPPER(@I_vDOCID), @I_vBIN=UPPER(@I_vBIN);
IF(@I_vSOPTYPE<>3)AND(@I_vQUANTITY<0)BEGIN
    SELECT @O_iErrorState=7478;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
SELECT @QTY=@I_vQUANTITY;
IF(@I_vSOPTYPE=3 AND @I_vQUANTITY<0)BEGIN
    SELECT @I_vQUANTITY=@I_vQUANTITY *-1;
END;
SELECT @ENABLEMULTIBIN=ENABLEMULTIBIN, @ALLEXPLOTSOTHER=ALLEXPLOTSOTHER, @ASSIGNLOTNUMBY=ASSIGNLOTNUMBY, @USEEXISTINGSNLOTS=USEEXISTINGSNLOTS
FROM IV40100(NOLOCK)
WHERE SETUPKEY=1;
SELECT @ITMTRKOP=ITMTRKOP FROM IV00101(NOLOCK)WHERE ITEMNMBR=@I_vITEMNMBR;
IF(@ITMTRKOP<>3)BEGIN
    SELECT @O_iErrorState=2080;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vUpdateIfExists<0)OR(@I_vUpdateIfExists>1))BEGIN
    SELECT @O_iErrorState=4697;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vQTYTYPE<1)OR(@I_vQTYTYPE>5))BEGIN
    SELECT @O_iErrorState=4727;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vUpdateIfExists=0)AND(@I_vLOTNUMBRToReplace<>''))BEGIN
    SELECT @O_iErrorState=4698;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vUpdateIfExists=1)AND(@I_vSOPTYPE IN (2, 3, 6))AND(@I_vLOTNUMBRToReplace<>'')AND NOT EXISTS (SELECT 1
                                                                                                    FROM IV00300(NOLOCK)
                                                                                                    WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBRToReplace))BEGIN
    IF((@I_vUpdateIfExists=1)AND(@I_vLOTNUMBRToReplace<>'')AND NOT EXISTS (SELECT 1
                                                                           FROM IV00300(NOLOCK)
                                                                           WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBRToReplace))BEGIN
        SELECT @O_iErrorState=4699;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
END;
IF((@I_vUpdateIfExists=1)AND(@I_vLOTNUMBRToReplace<>'')AND NOT EXISTS (SELECT 1
                                                                       FROM SOP10201(NOLOCK)
                                                                       WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ AND POSTED=0 AND ITEMNMBR=@I_vITEMNMBR AND SERLTNUM=@I_vLOTNUMBRToReplace))BEGIN
    SELECT @O_iErrorState=4700;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vSOPTYPE IN (2, 3, 6))AND(@I_vQUANTITY>0)AND(@I_vAUTOCREATELOT=0)AND(@I_vLOTNUMBR<>'')AND(NOT EXISTS (SELECT 1
                                                                                                             FROM IV00300(NOLOCK)
                                                                                                             WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBR AND LOCNCODE=@I_vLOCNCODE)))BEGIN
    SELECT @O_iErrorState=4725;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vSOPTYPE<2)OR(@I_vSOPTYPE>6))BEGIN
    SELECT @O_iErrorState=3334;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF(@I_vQTYFULFI>0)BEGIN
SELECT @I_vQUANTITY=@I_vQTYFULFI;
END;
IF(@I_vQTYFULFI IS NULL)BEGIN
SELECT @I_vQTYFULFI=@I_vQUANTITY;
END;
IF(@I_vQTYFULFI=0)BEGIN
RETURN;
END;
IF(@I_vLOCNCODE='')BEGIN
    SELECT @I_vLOCNCODE=LOCNCODE FROM SOP40100(NOLOCK);
END;
SELECT @I_vUOFM=CASE WHEN @I_vUOFM='' THEN SELNGUOM ELSE @I_vUOFM END, @UOMSCHDL=UOMSCHDL
FROM IV00101(NOLOCK)
WHERE ITEMNMBR=@I_vITEMNMBR;
SELECT @UOFMBASE=BASEUOFM FROM IV40201(NOLOCK)WHERE UOMSCHDL=@UOMSCHDL;
SELECT @QTYBSUOM=QTYBSUOM
FROM IV40202(NOLOCK)
WHERE UOMSCHDL=@UOMSCHDL AND EQUIVUOM=@UOFMBASE AND UOFM=@I_vUOFM;
IF(@I_vUOFM='')BEGIN
    SELECT @O_iErrorState=4729;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF NOT EXISTS (SELECT 1 FROM IV00107(NOLOCK)WHERE ITEMNMBR=@I_vITEMNMBR AND UOFM=@I_vUOFM)BEGIN
    SELECT @O_iErrorState=7190;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
SELECT @QUANTITY=@I_vQUANTITY;
SELECT @I_vQUANTITY=@I_vQUANTITY * @QTYBSUOM;
SELECT TOP 1 @LOCNCODE=LOCNCODE FROM IV40700(NOLOCK)WHERE LOCNCODE<>'';
IF(@I_vLOCNCODE='')BEGIN
    IF(@LOCNCODE<>'')BEGIN
        SELECT @O_iErrorState=969;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
END;
ELSE BEGIN
    IF(NOT EXISTS (SELECT 1 FROM IV40700(NOLOCK)WHERE LOCNCODE=@I_vLOCNCODE))BEGIN
        SELECT @O_iErrorState=1367;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
    IF((NOT EXISTS (SELECT 1
                    FROM IV00102(NOLOCK)
                    WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE)))BEGIN
        SELECT @O_iErrorState=1388;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
END;
IF(@LOCNCODE='')BEGIN
    SELECT @O_iErrorState=2078;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
SELECT @SITEINACTIVE=INACTIVE
FROM IV40700(NOLOCK)
WHERE LOCNCODE=@I_vLOCNCODE;
SELECT @ITEMSITEINACTIVE=INACTIVE
FROM IV00102(NOLOCK)
WHERE(ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE);
IF(@I_vLOCNCODE<>'' AND @SITEINACTIVE=1)BEGIN
    SELECT @O_iErrorState=11813;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF(@I_vLOCNCODE<>'' AND @I_vITEMNMBR<>'' AND @ITEMSITEINACTIVE=1)BEGIN
    SELECT @O_iErrorState=11814;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF(@I_vUpdateIfExists=1)BEGIN
    IF(NOT EXISTS (SELECT 1
                   FROM SOP10100(NOLOCK)
                   WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE))BEGIN
        SELECT @O_iErrorState=4701;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
    SELECT @ExstITEMNMBR=ITEMNMBR, @ExstATYALLOC=ATYALLOC, @ExstQTYFULFI=QTYFULFI, @QTYBSUOM=QTYBSUOM
    FROM SOP10200(NOLOCK)
    WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ;
    IF(@I_vITEMNMBR<>@ExstITEMNMBR)BEGIN
        SELECT @O_iErrorState=4702;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
    IF((@I_vLOTNUMBR<>'')AND(@I_vLOTNUMBRToReplace='')AND(@ExstQTYFULFI+@I_vQTYFULFI>@ExstATYALLOC))BEGIN
        SELECT @O_iErrorState=4703;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
END;
IF(@I_vDOCID<>'' AND @I_vSOPTYPE<>6)AND(NOT EXISTS (SELECT 1
                                                    FROM SOP40200(NOLOCK)
                                                    WHERE DOCID=@I_vDOCID AND SOPTYPE=@I_vSOPTYPE))BEGIN
    SELECT @O_iErrorState=5656;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
IF((@I_vDOCID<>'' AND @I_vSOPTYPE=6)AND(NOT EXISTS (SELECT 1
                                                    FROM SOP40200(NOLOCK)
                                                    WHERE DOCID=@I_vDOCID AND SOPTYPE=3 AND WORKFLOWENABLED=1)))BEGIN
    SELECT @O_iErrorState=7741;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
IF(@I_vDOCID<>'')AND(@I_vSOPTYPE<>6)BEGIN
    SELECT @ALLOCABY=ALLOCABY, @USPFULPR=USPFULPR
    FROM SOP40200(NOLOCK)
    WHERE DOCID=@I_vDOCID AND SOPTYPE=@I_vSOPTYPE;
END;
ELSE BEGIN
    SELECT @ALLOCABY=1, @USPFULPR=0;
END;
IF(@I_vDOCID<>'')AND(@I_vSOPTYPE=6)BEGIN
    SELECT @ALLOCABY=ALLOCABY, @USPFULPR=USPFULPR
    FROM SOP40200(NOLOCK)
    WHERE DOCID=@I_vDOCID AND SOPTYPE=3;
END;
ELSE BEGIN
    SELECT @ALLOCABY=1, @USPFULPR=0;
END;
IF((@I_vSOPTYPE IN (2, 3, 6))AND(@I_vQTYTYPE<>1))BEGIN
    SELECT @O_iErrorState=4726;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF((@I_vDROPSHIP=1)AND(@I_vAUTOCREATELOT=1))BEGIN
    SELECT @O_iErrorState=4724;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
END;
IF(@I_vLOTNUMBRToReplace<>'')BEGIN
    IF(NOT EXISTS (SELECT 1
                   FROM SOP10201(NOLOCK)
                   WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ AND QTYTYPE=@I_vQTYTYPE AND SERLTNUM=@I_vLOTNUMBRToReplace AND SERLTQTY=@I_vQUANTITY))BEGIN
        SELECT @O_iErrorState=4731;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
END;
IF(@ENABLEMULTIBIN=0)BEGIN
    IF(@I_vCREATEBIN=1)BEGIN
        SELECT @O_iErrorState=7199;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
    IF(@I_vBIN<>'')BEGIN
        SELECT @O_iErrorState=7174;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
END;
ELSE BEGIN
    IF((@I_vAUTOCREATELOT=0)AND(@I_vCREATEBIN=1)AND(@I_vSOPTYPE<>4))BEGIN
        SELECT @O_iErrorState=7175;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
    IF(@I_vSOPTYPE=4)BEGIN
        IF(@I_vBIN='')BEGIN
            SELECT @I_vBIN=SORETURNBIN
            FROM IV00102(NOLOCK)
            WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE;
        END;
        IF(@I_vBIN='')BEGIN
            SELECT @I_vBIN=SORETURNBIN FROM IV40700(NOLOCK)WHERE LOCNCODE=@I_vLOCNCODE;
        END;
        IF(@I_vBIN='')BEGIN
            SELECT @O_iErrorState=7176;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
        END;
    END;
    IF((@I_vSOPTYPE<>4)AND(@I_vBIN<>'')AND(@I_vCREATEBIN=0))BEGIN
        IF NOT EXISTS (SELECT 1
                       FROM IV00112(NOLOCK)
                       WHERE ITEMNMBR=@I_vITEMNMBR AND BIN=@I_vBIN AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE)BEGIN
            SELECT @O_iErrorState=7177;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
        END;
        ELSE BEGIN
            IF((SELECT QUANTITY-ATYALLOC
                FROM IV00112(NOLOCK)
                WHERE ITEMNMBR=@I_vITEMNMBR AND BIN=@I_vBIN AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE)<@I_vQTYFULFI)BEGIN
                SELECT @O_iErrorState=7178;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            END;
        END;
    END;
    IF((@I_vBIN='')AND(@I_vCREATEBIN=1))BEGIN
        SELECT @O_iErrorState=7179;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
    IF(@I_vCREATEBIN NOT IN (0, 1))BEGIN
        SELECT @O_iErrorState=7180;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
    IF((@I_vBIN<>'')AND NOT EXISTS (SELECT 1 FROM IV40701(NOLOCK)WHERE LOCNCODE=@I_vLOCNCODE AND BIN=@I_vBIN)AND(@I_vCREATEBIN=0))BEGIN
        SELECT @O_iErrorState=7181;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    END;
END;
IF(@O_iErrorState<>0)BEGIN
RETURN (@O_iErrorState);
END;
IF(@I_vRequesterTrx=0)BEGIN
    EXEC @iStatus=eConnectOutVerify @I_vDOCTYPE='Sales_Transaction', @I_vINDEX1=@I_vSOPNUMBE, @I_vINDEX2=@I_vSOPTYPE, @I_vINDEX3='', @I_vINDEX4='', @I_vINDEX5='', @I_vINDEX6='', @I_vINDEX7='', @I_vINDEX8='', @I_vINDEX9='', @I_vINDEX10='', @I_vINDEX11='', @I_vINDEX12='', @I_vINDEX13='', @I_vINDEX14='', @I_vINDEX15='', @I_vDelete=0, @O_iErrorState=@iCustomState OUTPUT;
    SELECT @iError=@@error;
    IF((@iStatus<>0)OR(@iCustomState<>0)OR(@iError<>0))BEGIN
        SELECT @oErrString=RTRIM(@oErrString)+' '+@iCustomState;
        SELECT @O_iErrorState=4705;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
        RETURN (@O_iErrorState);
    END;
END;
WHILE(1=1)BEGIN
    SELECT @SOPHdrTbl=RTRIM(DB_NAME())+'.dbo.SOP10100';
    SELECT @DexRowID=DEX_ROW_ID
    FROM SOP10100(NOLOCK)
    WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE;
    IF(NOT EXISTS (SELECT 1
                   FROM tempdb..DEX_LOCK(NOLOCK)
                   WHERE table_path_name=@SOPHdrTbl AND row_id=@DexRowID AND session_id=@@spid))BEGIN
        SELECT @mylock=1;
        EXEC DYNAMICS..taDEXLOCKS @I_vOperation=1, @I_vtable_path_name=@SOPHdrTbl, @I_vrow_id=@DexRowID, @O_oExists=@oExists OUTPUT, @O_oInsertStatus=@OInsStatus OUTPUT, @O_iErrorState=@DexLockErrorState OUTPUT;
        SELECT @iError=@@error;
        IF((@OInsStatus<>1)OR(@DexLockErrorState<>0)OR(@iError<>0))BEGIN
            IF(@DexLockErrorState<>0)BEGIN
                SELECT @oErrString=RTRIM(@oErrString)+' '+@DexLockErrorState;
            END;
            SELECT @O_iErrorState=4706;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF(@I_vUpdateIfExists=1)BEGIN
        IF(@I_vLOTNUMBRToReplace<>'')BEGIN
            SELECT @DTSEQNUMREP=DTSEQNUM, @DATERECDREP=DATERECD, @ATYALLOCREP=SERLTQTY, @BinToReplace=BIN
            FROM SOP10201(NOLOCK)
            WHERE SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ AND QTYTYPE=@I_vQTYTYPE AND SERLTNUM=@I_vLOTNUMBRToReplace AND SERLTQTY=@I_vQUANTITY;
            IF(@I_vSOPTYPE IN (2, 3))BEGIN
                SELECT @ATYALLOCMAST=ATYALLOC
                FROM IV00300(NOLOCK)
                WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBRToReplace AND DTSEQNUM=@DTSEQNUMREP AND DATERECD=@DATERECDREP;
                IF(@ATYALLOCREP>@ATYALLOCMAST)BEGIN
                    SELECT @O_iErrorState=4732;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
            IF((@I_vSOPTYPE<>4)AND(@BinToReplace<>''))BEGIN
                UPDATE IV00112
                SET ATYALLOC=ATYALLOC-@I_vQUANTITY
                FROM IV00112(UPDLOCK)
                WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND BIN=@BinToReplace AND QTYTYPE=@I_vQTYTYPE;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=7182;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
            DELETE SOP10201
            WHERE SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ AND QTYTYPE=@I_vQTYTYPE AND SERLTNUM=@I_vLOTNUMBRToReplace AND SERLTQTY=@I_vQUANTITY;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=4707;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
            UPDATE IV00300
            SET ATYALLOC=ATYALLOC-@I_vQUANTITY
            FROM IV00300(UPDLOCK)
            WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBRToReplace AND DTSEQNUM=@DTSEQNUMREP AND DATERECD=@DATERECDREP;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=4708;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
        IF(@I_vLOTNUMBR<>'')BEGIN
            UPDATE SOP10200
            SET FUFILDAT=@I_vUSERDATE, ACTLSHIP=@I_vUSERDATE
            WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=4709;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
        IF(@I_vCMPNTSEQ<>0)BEGIN
            UPDATE SOP10200
            SET FUFILDAT=@I_vUSERDATE, ACTLSHIP=@I_vUSERDATE
            WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=0;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=4734;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
        IF((@I_vLOTNUMBRToReplace<>'')AND(@I_vLOTNUMBR=''))BEGIN
            UPDATE SOP10200
            SET QTYFULFI=QTYFULFI-@QUANTITY, QTYSLCTD=QTYSLCTD-@I_vQUANTITY, EXTQTYSEL=EXTQTYSEL-@I_vQUANTITY
            WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=7183;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
        IF(@I_vLOTNUMBRToReplace<>'')BEGIN
            IF((SELECT RCTSEQNM
                FROM IV00300(NOLOCK)
                WHERE LOTNUMBR=@I_vLOTNUMBRToReplace AND ITEMNMBR=@I_vITEMNMBR AND DTSEQNUM=@DTSEQNUMREP)=0)BEGIN
                DELETE IV00300
                WHERE LOTNUMBR=@I_vLOTNUMBRToReplace AND ITEMNMBR=@I_vITEMNMBR AND RCTSEQNM=0;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=6523;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
                UPDATE IV00102
                SET QTYONHND=QTYONHND-@I_vQUANTITY
                FROM IV00102(UPDLOCK)
                WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=6524;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
                UPDATE IV00102
                SET QTYONHND=QTYONHND-@I_vQUANTITY
                FROM IV00102(UPDLOCK)
                WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE='';
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=6525;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
                IF(@BinToReplace<>'')BEGIN
                    UPDATE IV00112
                    SET QUANTITY=QUANTITY-@I_vQUANTITY
                    FROM IV00112(UPDLOCK)
                    WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND BIN=@BinToReplace AND QTYTYPE=@I_vQTYTYPE;
                    IF(@@error<>0)BEGIN
                        SELECT @O_iErrorState=6526;
                        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                        BREAK;
                    END;
                END;
            END;
        END;
        IF((@I_vLOTNUMBR<>'')AND(@I_vLOTNUMBRToReplace=''))BEGIN
            UPDATE SOP10200
            SET QTYFULFI=QTYFULFI+@QUANTITY, QTYSLCTD=QTYSLCTD+@I_vQUANTITY, EXTQTYSEL=EXTQTYSEL+@I_vQUANTITY
            WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=7184;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
    END;
    IF(@UNITCOST=0)BEGIN
        SELECT @UNITCOST=CASE WHEN VCTNMTHD IN (4, 5) THEN STNDCOST ELSE CURRCOST END
        FROM IV00101(NOLOCK)
        WHERE ITEMNMBR=@I_vITEMNMBR;
    END;
    IF((@I_vCREATEBIN=1)AND NOT EXISTS (SELECT 1 FROM IV40701(NOLOCK)WHERE LOCNCODE=@I_vLOCNCODE AND BIN=@I_vBIN))BEGIN
        SELECT @sCompanyID=CMPANYID
        FROM DYNAMICS..SY01500(NOLOCK)
        WHERE INTERID=DB_NAME();
        EXEC @iStatus=DYNAMICS..tasmGetNextNoteIndex @I_sCompanyID=@sCompanyID, @I_iSQLSessionID=0, @I_noteincrement=1, @O_mNoteIndex=@NOTEINDX OUTPUT, @O_iErrorState=@iGetNextNoteIdxErrState OUTPUT;
        SELECT @iError=@@error;
        IF((@iStatus<>0)OR(@iGetNextNoteIdxErrState<>0)OR(@iError<>0))BEGIN
            SELECT @oErrString=RTRIM(@oErrString)+' '+@iGetNextNoteIdxErrState;
            SELECT @O_iErrorState=7185;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            BREAK;
        END;
        INSERT IV40701(LOCNCODE, BIN, NOTEINDX)
        SELECT @I_vLOCNCODE, @I_vBIN, @NOTEINDX;
        IF(@@error<>0)BEGIN
            SELECT @O_iErrorState=7186;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF(@I_vAUTOCREATELOT=1)BEGIN
        SELECT @AmntOverExst=ISNULL(SUM(QTYRECVD-QTYSOLD-ATYALLOC), 0)-@I_vQUANTITY
        FROM IV00300(NOLOCK)
        WHERE QTYTYPE=1 AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR;
        IF(@AmntOverExst<0)BEGIN
SELECT @AmntOverExst=@AmntOverExst *-1;
        END; ELSE BEGIN
            SELECT @AmntOverExst=0;
        END;
    END;
    IF((@I_vAUTOCREATELOT=1)AND(@AmntOverExst>0)AND(@I_vLOTNUMBR<>'')AND((@I_vSOPTYPE IN (2, 3, 6)AND @QTY>0))AND((@ALLOCABY=1)OR(@I_vALLOCATE=1))AND((@USPFULPR=0)OR(@I_vQTYFULFI>0))AND(@I_vQTYFULFI<>0)AND(@I_vDROPSHIP=0))BEGIN
        SELECT @DTSEQNUM=ISNULL(MAX(DTSEQNUM), 0)+16384
        FROM IV00300(NOLOCK)
        WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND DATERECD=@I_vDATERECD;
        IF(@ENABLEMULTIBIN=1)BEGIN
            IF((@I_vCREATEBIN=1)AND NOT EXISTS (SELECT 1
                                                FROM IV00112(NOLOCK)
                                                WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND BIN=@I_vBIN AND QTYTYPE=1))BEGIN
                INSERT IV00112(ITEMNMBR, LOCNCODE, BIN, QTYTYPE, QUANTITY, ATYALLOC)
                SELECT @I_vITEMNMBR, @I_vLOCNCODE, @I_vBIN, 1, 0, 0;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=7187;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
            UPDATE IV00112
            SET QUANTITY=QUANTITY+@I_vQUANTITY
            FROM IV00112(UPDLOCK)
            WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND BIN=@I_vBIN AND QTYTYPE=@I_vQTYTYPE;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=7188;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
        IF(@USEEXISTINGSNLOTS=1)BEGIN
            SELECT @O_iErrorState=9593;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            BREAK;
        END;
        SELECT @OVRSERLT=1;
        INSERT IV00300(ITEMNMBR, LOCNCODE, DATERECD, DTSEQNUM, LOTNUMBR, QTYRECVD, QTYSOLD, ATYALLOC, UNITCOST, RCTSEQNM, VNDRNMBR, LTNUMSLD, QTYTYPE, BIN, MFGDATE, EXPNDATE)
        SELECT @I_vITEMNMBR, @I_vLOCNCODE, @I_vDATERECD, @DTSEQNUM, @I_vLOTNUMBR, @AmntOverExst, 0, 0, @UNITCOST, 0, '', 0, @I_vQTYTYPE, CASE @ENABLEMULTIBIN WHEN 1 THEN @I_vBIN ELSE '' END, @I_vMFGDATE, @I_vEXPNDATE;
        IF(@@error<>0)BEGIN
            SELECT @O_iErrorState=2081;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            BREAK;
        END;
        IF((SELECT ISNULL(LOTTYPE, '')FROM IV00101(NOLOCK)WHERE ITEMNMBR=@I_vITEMNMBR)<>'')BEGIN
            IF NOT EXISTS (SELECT 1
                           FROM IV00301(NOLOCK)
                           WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBR)BEGIN
                INSERT IV00301(ITEMNMBR, LOTNUMBR, LOTATRB1, LOTATRB2, LOTATRB3, LOTATRB4, LOTATRB5, IUSCOUNT, RCRDSTTS)
                SELECT @I_vITEMNMBR, @I_vLOTNUMBR, '', '', '', '', '', 1, 2;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=6354;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
            ELSE BEGIN
                IF(@I_vLOTNUMBRToReplace='')BEGIN
                    UPDATE IV00301
                    SET IUSCOUNT=IUSCOUNT+1
                    FROM IV00301(UPDLOCK)
                    WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBR;
                END;
                ELSE BEGIN
                    UPDATE IV00301
                    SET IUSCOUNT=IUSCOUNT-1
                    FROM IV00301(UPDLOCK)
                    WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBR;
                END;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=6358;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
        END;
        UPDATE IV00102
        SET QTYONHND=QTYONHND+@I_vQUANTITY
        FROM IV00102(UPDLOCK)
        WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE;
        IF(@@error<>0)BEGIN
            SELECT @O_iErrorState=3327;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            BREAK;
        END;
        UPDATE IV00102
        SET QTYONHND=QTYONHND+@I_vQUANTITY
        FROM IV00102(UPDLOCK)
        WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE='';
        IF(@@error<>0)BEGIN
            SELECT @O_iErrorState=3328;
            EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF((@I_vAUTOCREATELOT=1)AND(@AmntOverExst>0)AND(@I_vLOTNUMBR<>'')AND((@I_vSOPTYPE IN (2, 3, 6)AND @QTY<0))AND((@ALLOCABY=1)OR(@I_vALLOCATE=1))AND((@USPFULPR=0)OR(@I_vQTYFULFI>0))AND(@I_vQTYFULFI<>0)AND(@I_vDROPSHIP=0))BEGIN
        IF((SELECT ISNULL(LOTTYPE, '')FROM IV00101(NOLOCK)WHERE ITEMNMBR=@I_vITEMNMBR)<>'')BEGIN
            IF NOT EXISTS (SELECT 1
                           FROM IV00301(NOLOCK)
                           WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBR)BEGIN
                INSERT IV00301(ITEMNMBR, LOTNUMBR, LOTATRB1, LOTATRB2, LOTATRB3, LOTATRB4, LOTATRB5, IUSCOUNT, RCRDSTTS)
                SELECT @I_vITEMNMBR, @I_vLOTNUMBR, '', '', '', '', '', 1, 0;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=5658;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
            ELSE BEGIN
                IF(@I_vLOTNUMBRToReplace='')BEGIN
                    UPDATE IV00301
                    SET IUSCOUNT=IUSCOUNT+1
                    FROM IV00301(UPDLOCK)
                    WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBR;
                END;
                ELSE BEGIN
                    UPDATE IV00301
                    SET IUSCOUNT=IUSCOUNT-1
                    FROM IV00301(UPDLOCK)
                    WHERE ITEMNMBR=@I_vITEMNMBR AND LOTNUMBR=@I_vLOTNUMBR;
                END;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=5659;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
        END;
    END;
    WHILE((@LotFound=0)AND(@I_vLOTNUMBR<>''))BEGIN
        SELECT @LotHit=0;
        SELECT @SLTSQNUM=ISNULL(MAX(SLTSQNUM), 0)+1
        FROM SOP10201(NOLOCK)
        WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ;
        SELECT @DTSEQNUM=ISNULL(MAX(DTSEQNUM), 0)+16384
        FROM IV00300(NOLOCK)
        WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND DATERECD=@I_vDATERECD;
        IF(@I_vSOPTYPE<>4)AND(@QTY>0)BEGIN
            SELECT @VCTNMTHD=VCTNMTHD FROM IV00101(NOLOCK)WHERE ITEMNMBR=@I_vITEMNMBR;
            IF(@VCTNMTHD IN (1, 3, 4))BEGIN
                IF(@ALLEXPLOTSOTHER=1)BEGIN
                    IF(@ASSIGNLOTNUMBY=2)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE=''))OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE=''))
                            ORDER BY EXPNDATE, DTSEQNUM;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY EXPNDATE, DTSEQNUM;
                        END;
                    END;
                    IF(@LotHit=0)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE=''))OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE=''))
                            ORDER BY DATERECD, DTSEQNUM;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY DATERECD, DTSEQNUM;
                        END;
                    END;
                END;
                ELSE BEGIN
                    IF(@ASSIGNLOTNUMBY=2)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN)
                            ORDER BY EXPNDATE, DTSEQNUM;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY EXPNDATE, DTSEQNUM;
                        END;
                    END;
                    IF(@LotHit=0)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN)
                            ORDER BY DATERECD, DTSEQNUM;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY DATERECD, DTSEQNUM;
                        END;
                    END;
                END;
            END;
            ELSE BEGIN
                IF(@ALLEXPLOTSOTHER=1)BEGIN
                    IF(@ASSIGNLOTNUMBY=2)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN)
                            ORDER BY EXPNDATE DESC, DTSEQNUM DESC;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY EXPNDATE DESC, DTSEQNUM DESC;
                        END;
                    END;
                    IF(@LotHit=0)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE=''))OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE=''))
                            ORDER BY DATERECD DESC, DTSEQNUM DESC;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY DATERECD DESC, DTSEQNUM DESC;
                        END;
                    END;
                END;
                ELSE BEGIN
                    IF(@ASSIGNLOTNUMBY=2)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN)
                            ORDER BY EXPNDATE DESC, DTSEQNUM DESC;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY EXPNDATE DESC, DTSEQNUM DESC;
                        END;
                    END;
                    IF(@LotHit=0)BEGIN
                        IF(@I_vEXPNDATE='')BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND(EXPNDATE>@I_vUSERDATE OR EXPNDATE='')AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN)
                            ORDER BY DATERECD DESC, DTSEQNUM DESC;
                        END;
                        ELSE BEGIN
                            SELECT TOP 1 @DTSEQNUM=ISNULL(DTSEQNUM, 0), @I_vDATERECD=ISNULL(DATERECD, ''), @LotHit=1
                            FROM IV00300(NOLOCK)
                            WHERE(@I_vBIN='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND EXPNDATE=@I_vEXPNDATE)OR(@I_vBIN<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND QTYTYPE=@I_vQTYTYPE AND LTNUMSLD=0 AND LOTNUMBR=@I_vLOTNUMBR AND BIN=@I_vBIN AND EXPNDATE=@I_vEXPNDATE)
                            ORDER BY DATERECD DESC, DTSEQNUM DESC;
                        END;
                    END;
                END;
            END;
            IF((@I_vEXPNDATE<>'')AND NOT EXISTS (SELECT 1
                                                 FROM IV00300(NOLOCK)
                                                 WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND LOTNUMBR=@I_vLOTNUMBR AND DATERECD=@I_vDATERECD AND DTSEQNUM=@DTSEQNUM AND LTNUMSLD=0 AND QTYTYPE=@I_vQTYTYPE AND EXPNDATE=@I_vEXPNDATE))BEGIN
                SELECT @O_iErrorState=9595;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
            IF(@LotHit=0)BEGIN
                SELECT @O_iErrorState=4728;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
            IF(@LotHit>0)BEGIN
                SELECT @QTYRECVD=QTYRECVD, @ATYALLOC=ATYALLOC, @QTYSOLD=QTYSOLD, @UNITCOST=UNITCOST, @I_vBIN=CASE @ENABLEMULTIBIN WHEN 1 THEN BIN ELSE '' END, @I_vEXPNDATE=EXPNDATE, @I_vMFGDATE=MFGDATE
                FROM IV00300(NOLOCK)
                WHERE(@I_vEXPNDATE<>'' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND LOTNUMBR=@I_vLOTNUMBR AND DATERECD=@I_vDATERECD AND DTSEQNUM=@DTSEQNUM AND LTNUMSLD=0 AND QTYTYPE=@I_vQTYTYPE AND EXPNDATE=@I_vEXPNDATE)OR(@I_vEXPNDATE='' AND ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND LOTNUMBR=@I_vLOTNUMBR AND DATERECD=@I_vDATERECD AND DTSEQNUM=@DTSEQNUM AND LTNUMSLD=0 AND QTYTYPE=@I_vQTYTYPE);
                IF((@I_vEXPNDATE<>'')AND(@I_vEXPNDATE<=@I_vUSERDATE)AND(@ALLEXPLOTSOTHER=0)AND(@OVRSERLT=0))BEGIN
                    SELECT @O_iErrorState=9594;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
                IF(@I_vQUANTITY>(@QTYRECVD-@ATYALLOC-@QTYSOLD+@QtyDone))BEGIN
                    SELECT @QtyAvail=@QTYRECVD-@ATYALLOC-@QTYSOLD;
                    SELECT @SERLTQTY=@QtyAvail;
                END;
                ELSE BEGIN
                    SELECT @LotFound=1;
                    SELECT @SERLTQTY=@I_vQUANTITY-@QtyDone;
                    SELECT @QtyAvail=@I_vQUANTITY-@QtyDone;
                END;
            END;
            ELSE BEGIN
                SELECT @O_iErrorState=3330;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
        IF(@I_vSOPTYPE=4)OR(@QTY<0)BEGIN
SELECT @SERLTQTY=@I_vQUANTITY;
        END;
        IF(NOT EXISTS (SELECT 1
                       FROM SOP10201(NOLOCK)
                       WHERE SOPTYPE=@I_vSOPTYPE AND SOPNUMBE=@I_vSOPNUMBE AND LNITMSEQ=@I_vLNITMSEQ AND CMPNTSEQ=@I_vCMPNTSEQ AND QTYTYPE=@I_vQTYTYPE AND SLTSQNUM=@SLTSQNUM))AND(((@ALLOCABY=1)OR(@I_vALLOCATE=1)OR(@I_vSOPTYPE=4))AND((@USPFULPR=0)OR(@I_vQTYFULFI>0))AND(@I_vQTYFULFI<>0)AND(@I_vDROPSHIP=0)AND(@I_vLOTNUMBR<>''))BEGIN
            INSERT SOP10201(SOPTYPE, SOPNUMBE, LNITMSEQ, CMPNTSEQ, QTYTYPE, SERLTNUM, SERLTQTY, SLTSQNUM, DATERECD, DTSEQNUM, UNITCOST, ITEMNMBR, TRXSORCE, POSTED, OVRSERLT, BIN, MFGDATE, EXPNDATE)
            SELECT @I_vSOPTYPE, @I_vSOPNUMBE, @I_vLNITMSEQ, @I_vCMPNTSEQ, @I_vQTYTYPE, @I_vLOTNUMBR, @SERLTQTY, @SLTSQNUM, CASE WHEN (@I_vSOPTYPE=4)OR(@I_vSOPTYPE=3 AND @QTY<0) THEN '' ELSE @I_vDATERECD END, CASE WHEN (@I_vSOPTYPE=4)OR(@I_vSOPTYPE=3 AND @QTY<0) THEN 0 ELSE @DTSEQNUM END, CASE WHEN (@I_vSOPTYPE=4)OR(@I_vSOPTYPE=3 AND @QTY<0) THEN 0 ELSE @UNITCOST END, @I_vITEMNMBR, '', 0, CASE WHEN (@I_vSOPTYPE=3 AND @QTY<0) THEN 0 ELSE @OVRSERLT END, CASE @ENABLEMULTIBIN WHEN 1 THEN @I_vBIN ELSE '' END, @I_vMFGDATE, @I_vEXPNDATE;
            IF(@@error<>0)BEGIN
                SELECT @O_iErrorState=3324;
                EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                BREAK;
            END;
            IF(@ENABLEMULTIBIN=1)AND(@I_vSOPTYPE<>4)BEGIN
                UPDATE IV00112
                SET ATYALLOC=ATYALLOC+@SERLTQTY
                FROM IV00112(UPDLOCK)
                WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND BIN=@I_vBIN AND QTYTYPE=@I_vQTYTYPE;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=7189;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
        END;
        IF(@I_vSOPTYPE<>4)AND(@QTY>0)BEGIN
            IF(((@USPFULPR=0)OR(@I_vQTYFULFI>0))AND(@I_vDROPSHIP=0))BEGIN
                UPDATE IV00300
                SET ATYALLOC=ATYALLOC+@QtyAvail, LTNUMSLD=CASE WHEN @QTYRECVD=@ATYALLOC+@QtyAvail+@QTYSOLD THEN 1 ELSE 0 END
                FROM IV00300(UPDLOCK)
                WHERE ITEMNMBR=@I_vITEMNMBR AND LOCNCODE=@I_vLOCNCODE AND LOTNUMBR=@I_vLOTNUMBR AND DATERECD=@I_vDATERECD AND DTSEQNUM=@DTSEQNUM AND QTYTYPE=@I_vQTYTYPE;
                IF(@@error<>0)BEGIN
                    SELECT @O_iErrorState=3329;
                    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
                    BREAK;
                END;
            END;
        END;
        SELECT @QtyDone=@QtyDone+@QtyAvail;
        SELECT @DTSEQNUM=0;
        IF((@LotFound=1)OR(@QtyDone=@I_vQUANTITY)OR(@I_vSOPTYPE=4)OR(@QTY<0))BEGIN
            BREAK;
        END;
    END;
    BREAK;
END;
IF(@mylock=1)BEGIN
    EXEC @iStatus=DYNAMICS..taDEXLOCKS @I_vOperation=3, @I_vtable_path_name=@SOPHdrTbl, @I_vrow_id=@DexRowID, @O_oExists=@oExists OUTPUT, @O_oInsertStatus=@OInsStatus OUTPUT, @O_iErrorState=@DexLockErrorState OUTPUT;
    SELECT @iError=@@error;
    IF((@iStatus<>0)OR(@DexLockErrorState<>0)OR(@iError<>0))BEGIN
        IF(@DexLockErrorState<>0)BEGIN
            SELECT @oErrString=RTRIM(@oErrString)+' '+@DexLockErrorState;
        END;
        SELECT @O_iErrorState=4712;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
        RETURN (@O_iErrorState);
    END;
END;
EXEC @iStatus=taSopLotAutoPost @I_vSOPTYPE, @I_vSOPNUMBE, @I_vUSERDATE, @I_vLNITMSEQ, @I_vITEMNMBR, @I_vLOCNCODE, @I_vQUANTITY, @I_vBIN, @I_vCREATEBIN, @I_vLOTNUMBR, @I_vEXPNDATE, @I_vMFGDATE, @I_vQTYTYPE, @I_vRequesterTrx, @I_vDOCID, @I_vDROPSHIP, @I_vQTYFULFI, @I_vALLOCATE, @I_vCMPNTSEQ, @I_vLOTNUMBRToReplace, @I_vAUTOCREATELOT, @I_vUOFM, @I_vDATERECD, @I_vUpdateIfExists, @I_vUSRDEFND1, @I_vUSRDEFND2, @I_vUSRDEFND3, @I_vUSRDEFND4, @I_vUSRDEFND5, @O_iErrorState=@iCustomState OUTPUT, @oErrString=@iCustomErrString OUTPUT;
SELECT @iError=@@error;
IF((@iStatus<>0)OR(@iCustomState<>0)OR(@iError<>0))BEGIN
    SELECT @oErrString=RTRIM(@oErrString)+' '+LTRIM(RTRIM(@iCustomErrString));
    SELECT @O_iErrorState=2630;
    EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
IF(@I_vRequesterTrx=0)BEGIN
    EXEC @iStatus=eConnectOutVerify @I_vDOCTYPE='Sales_Transaction', @I_vINDEX1=@I_vSOPNUMBE, @I_vINDEX2=@I_vSOPTYPE, @I_vINDEX3='', @I_vINDEX4='', @I_vINDEX5='', @I_vINDEX6='', @I_vINDEX7='', @I_vINDEX8='', @I_vINDEX9='', @I_vINDEX10='', @I_vINDEX11='', @I_vINDEX12='', @I_vINDEX13='', @I_vINDEX14='', @I_vINDEX15='', @I_vDelete=1, @O_iErrorState=@iCustomState OUTPUT;
    SELECT @iError=@@error;
    IF((@iStatus<>0)OR(@iCustomState<>0)OR(@iError<>0))BEGIN
        SELECT @oErrString=RTRIM(@oErrString)+' '+@iCustomState;
        SELECT @O_iErrorState=4713;
        EXEC @iStatus=taUpdateString @O_iErrorState, @oErrString, @oErrString OUTPUT, @O_oErrorState OUTPUT;
        RETURN (@O_iErrorState);
    END;
END;
RETURN (@O_iErrorState);

 


RealWorldCode gives developers practical, real‑world solutions with clean, working code — no fluff, no theory, just answers.
Links
Home
Knowledge Areas
Sitemap
Contact
Et cetera
Privacy Policy
Terms and Conditions
Cookie Preferences