taSopLineIvcInsertComponent

This is the complete (unencrypted) text for taSopLineIvcInsertComponent. 

DO NOT USE IT IN PRODUCTION, it's only here for us to look up how the logic works. 

 

 

ALTER PROCEDURE [dbo].[taSopLineIvcInsertComponent]
    @I_vSOPTYPE SMALLINT,
    @I_vSOPNUMBE CHAR(21),
    @I_vUSERDATE DATETIME = '',
    @I_vLOCNCODE CHAR(10) = '',
    @I_vLNITMSEQ INT,
    @I_vITEMNMBR CHAR(30),
    @I_vAutoAssignBin SMALLINT = 1,
    @I_vITEMDESC CHAR(100) = '',
    @I_vQUANTITY NUMERIC(19, 5),
    @I_vQTYTBAOR NUMERIC(19, 5) = 0,
    @I_vQTYCANCE NUMERIC(19, 5) = 0,
    @I_vQTYFULFI NUMERIC(19, 5) = NULL,
    @I_vQUOTEQTYTOINV NUMERIC(19, 5) = 0,
    @I_vQTYONHND NUMERIC(19, 5) = 0,
    @I_vQTYRTRND NUMERIC(19, 5) = 0,
    @I_vQTYINUSE NUMERIC(19, 5) = 0,
    @I_vQTYINSVC NUMERIC(19, 5) = 0,
    @I_vQTYDMGED NUMERIC(19, 5) = 0,
    @I_vCUSTNMBR CHAR(15),
    @I_vDOCID CHAR(15) = '',
    @I_vUNITCOST NUMERIC(19, 5) = NULL,
    @I_vNONINVEN SMALLINT = 0,
    @I_vAUTOALLOCATESERIAL INT = 0,
    @I_vAUTOALLOCATELOT INT = 0,
    @I_vCMPNTSEQ INT = 0,
    @I_vCMPITUOM CHAR(9) = '',
    @I_vCURNCYID CHAR(15) = '',
    @I_vUpdateIfExists SMALLINT = 0,
    @I_vRecreateDist SMALLINT = 0,
    @I_vRequesterTrx SMALLINT = 0,
    @I_vQtyShrtOpt SMALLINT = 2,
    @I_vRECREATECOMM 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 CHAR(255) OUTPUT
AS
SET DEADLOCK_PRIORITY LOW;
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
DECLARE @tCURNCYID CHAR(15),
        @RNDGAMNT NUMERIC(19, 5),
        @ROUNDTO SMALLINT,
        @ROUNDHOW SMALLINT,
        @LOFSGMNTALL INT,
        @NEW_ACCNT_STRING VARCHAR(100),
        @MAXSEG INT,
        @ACTINDX INT,
        @LOFSGMNTEND INT,
        @LOFSGMNT INT,
        @ACSEGSEP CHAR(1),
        @ACSGFLOC SMALLINT,
        @ACCNT_STRING CHAR(100),
        @Location_Segment CHAR(67),
        @ITMTRKOP SMALLINT,
        @DECPLQTY SMALLINT,
        @DECPLCUR SMALLINT,
        @ITEMTYPE INT,
        @EXTQTYAL NUMERIC(19, 5),
        @PriceGroup CHAR(11),
        @QTYDMGED NUMERIC(19, 5),
        @ATYALLOC NUMERIC(19, 5),
        @INVINDX INT,
        @CSLSINDX INT,
        @SLSINDX INT,
        @MKDNINDX INT,
        @RTNSINDX INT,
        @INUSINDX INT,
        @INSRINDX INT,
        @DMGDINDX INT,
        @RMSLSACC INT,
        @RMCOSACC INT,
        @UNITCOST NUMERIC(19, 5),
        @KITUOFM CHAR(8),
        @QTYBSUOM NUMERIC(19, 5),
        @KITQTYBSUOM NUMERIC(19, 5),
        @UOMSCHDL CHAR(10),
        @KITUOMSCHDL CHAR(10),
        @KITUOFMBASE CHAR(8),
        @ITEMDESC CHAR(100),
        @dtDEFAULT DATETIME,
        @MSTRNUMB INT,
        @BCHSOURC CHAR(15),
        @DOCID CHAR(15),
        @USDOCID1 CHAR(15),
        @USDOCID2 CHAR(15),
        @DOCAMNT NUMERIC(19, 5),
        @iStatus INT,
        @iError INT,
        @O_oErrorState INT,
        @iUpdDstLine4ErrState INT,
        @iCustomStatePre INT,
        @iCustomErrStringPre CHAR(255),
        @iCustomStatePost INT,
        @iCustomErrStringPost CHAR(255),
        @USEACFRM SMALLINT,
        @ALLOCABY SMALLINT,
        @USPFULPR SMALLINT,
        @KITITEMNMBR CHAR(30),
        @iCustomState INT,
        @ALLOCATED NUMERIC(19, 5),
        @KITITEMTYPE INT,
        @IVSLRNIX INT,
        @QTTYALLOC NUMERIC(19, 5),
        @QTYAVL NUMERIC(19, 5),
        @QTYTOBO NUMERIC(19, 5),
        @LotsToAllocate NUMERIC(19, 5),
        @serialstoallocate NUMERIC(19, 5),
        @SERIALQUANTITY NUMERIC(19, 5),
        @LOTQUANTITY NUMERIC(19, 5),
        @LOTQTY NUMERIC(19, 5),
        @SERIALQTY NUMERIC(19, 5),
        @SOP10201COUNTSERIAL SMALLINT,
        @LineCount INT,
        @ENABLEMULTIBIN SMALLINT,
        @BinFulfillQty NUMERIC(19, 5),
        @BinQtyAvail NUMERIC(19, 5),
        @BIN CHAR(15),
        @BinQtyType SMALLINT,
        @taSopLineDeleteErrState INT,
        @taSopLineDeleteErrString CHAR(255),
        @EXTDCOST NUMERIC(19, 5),
        @TOTALQTY NUMERIC(19, 5),
        @KITEXTDCOST NUMERIC(19, 5),
        @KITQUANTITY NUMERIC(19, 5),
        @CURRNIDX SMALLINT,
        @CMPITQTY NUMERIC(19, 5),
        @serialsallocated NUMERIC(19, 5),
        @VCTNMTHD SMALLINT,
        @SERLTNUM CHAR(20),
        @QTYTYPE SMALLINT,
        @DTSEQNUM SMALLINT,
        @DATERECD DATETIME,
        @iCustomErrString CHAR(255),
        @SOP10201COUNT SMALLINT,
        @DROPSHIP SMALLINT,
        @count INT,
        @ReqShipDate DATETIME,
        @SOPHdrTbl CHAR(18),
        @DexRowID INT,
        @oExists INT,
        @OInsStatus INT,
        @mylock TINYINT,
        @DexLockErrorState INT,
        @currdate DATETIME,
        @LOCNCODE CHAR(10),
        @ISMCTRX INT,
        @FUNCRIDX INT,
        @lock CHAR(30),
        @exists TINYINT,
        @hdrexists TINYINT,
        @cmpexists TINYINT,
        @DeleteType INT,
        @PRICMTHD SMALLINT,
        @CALCKITC TINYINT,
        @UOMPRICE NUMERIC(19, 5),
        @UNITPRCE NUMERIC(19, 5),
        @PRCLEVEL CHAR(10),
        @fieldupdate TINYINT,
        @XTNDPRCE NUMERIC(19, 5),
        @KITDECPLCUR INT,
        @FUNLCURR CHAR(15),
        @ITEMFUNCTDEC INT,
        @KITITEMFUNCTDEC INT,
        @FUNDECPLCUR INT,
        @EDITDECPLCUR INT,
        @KITUNITCOST NUMERIC(19, 5),
        @ORTDISAM NUMERIC(19, 5),
        @TRDISPCT NUMERIC(19, 5),
        @PYMTRMID CHAR(20),
        @DUEDATE DATETIME,
        @DISCDATE DATETIME,
        @DSCPCTAM NUMERIC(19, 5),
        @SopHdrUpdateState INT,
        @SopHdrUpdateErrString CHAR(255),
        @CHGAMNT NUMERIC(19, 5),
        @ISMCREG TINYINT,
        @SOP10201QTYONHND NUMERIC(19, 5),
        @SOP10201QTYRTRND NUMERIC(19, 5),
        @SOP10201QTYINUSE NUMERIC(19, 5),
        @SOP10201QTYINSVC NUMERIC(19, 5),
        @SOP10201QTYDMGED NUMERIC(19, 5),
        @LOCNCODEPassed SMALLINT,
        @LOCNCODELINE CHAR(10),
        @PRSTADCD CHAR(15),
        @ADDRESS1 CHAR(30),
        @ADDRESS2 CHAR(30),
        @ADDRESS3 CHAR(30),
        @CNTCPRSN CHAR(30),
        @FAXNUMBR CHAR(21),
        @CITY CHAR(30),
        @STATE CHAR(29),
        @ZIPCODE CHAR(10),
        @COUNTRY CHAR(20),
        @PHNUMBR1 CHAR(21),
        @PHNUMBR2 CHAR(21),
        @PHNUMBR3 CHAR(21),
        @SHIPMTHD CHAR(15),
        @SALSTERR CHAR(15),
        @SLPRSNID CHAR(15),
        @UPSZONE CHAR(3),
        @TAXEXMT1 CHAR(25),
        @TAXEXMT2 CHAR(25),
        @TXRGNNUM CHAR(25),
        @KTACCTSR TINYINT,
        @KITIVCOGSIX INT,
        @STOP INT,
        @RECALCBTCHTOT INT,
        @QTYCANCE NUMERIC(19, 5),
        @OLDKITXTNDPRCE NUMERIC(19, 5),
        @SITEINACTIVE TINYINT,
        @ITEMSITEINACTIVE TINYINT;
SELECT @tCURNCYID = '',
       @ROUNDTO = 0,
       @ROUNDHOW = 0,
       @RNDGAMNT = 0,
       @O_iErrorState = 0,
       @LOFSGMNTALL = 0,
       @NEW_ACCNT_STRING = '',
       @MAXSEG = 0,
       @ACTINDX = 0,
       @LOFSGMNTEND = 0,
       @LOFSGMNT = 0,
       @ACSEGSEP = '',
       @ACSGFLOC = 0,
       @ACCNT_STRING = '',
       @Location_Segment = '',
       @ITMTRKOP = 0,
       @DECPLQTY = 0,
       @DECPLCUR = 0,
       @ITEMTYPE = 0,
       @EXTQTYAL = 0,
       @PriceGroup = '',
       @INVINDX = 0,
       @CSLSINDX = 0,
       @SLSINDX = 0,
       @MKDNINDX = 0,
       @RTNSINDX = 0,
       @INUSINDX = 0,
       @INSRINDX = 0,
       @DMGDINDX = 0,
       @RMSLSACC = 0,
       @RMCOSACC = 0,
       @UNITCOST = 0,
       @KITUOFM = '',
       @QTYBSUOM = 1,
       @KITQTYBSUOM = 0,
       @UOMSCHDL = '',
       @KITUOMSCHDL = '',
       @KITUOFMBASE = '',
       @ITEMDESC = '',
       @dtDEFAULT = '',
       @MSTRNUMB = 0,
       @BCHSOURC = '',
       @DOCID = '',
       @USDOCID1 = '',
       @USDOCID2 = '',
       @DOCAMNT = 0,
       @iStatus = 0,
       @iError = 0,
       @O_oErrorState = 0,
       @iUpdDstLine4ErrState = 0,
       @iCustomStatePre = 0,
       @iCustomErrStringPre = '',
       @iCustomStatePost = 0,
       @iCustomErrStringPost = '',
       @USEACFRM = 0,
       @ALLOCABY = 0,
       @USPFULPR = 0,
       @KITITEMNMBR = '',
       @iCustomState = 0,
       @ALLOCATED = 0,
       @KITITEMTYPE = 0,
       @IVSLRNIX = 0,
       @QTTYALLOC = 0,
       @QTYAVL = 0,
       @QTYTOBO = 0,
       @LotsToAllocate = 0,
       @serialstoallocate = 0,
       @SERIALQUANTITY = 0,
       @LOTQUANTITY = 0,
       @LOTQTY = 0,
       @SERIALQTY = 0,
       @SOP10201COUNTSERIAL = 0,
       @LineCount = 0,
       @ENABLEMULTIBIN = 0,
       @BinFulfillQty = 0,
       @BinQtyAvail = 0,
       @BIN = '',
       @BinQtyType = 1,
       @taSopLineDeleteErrState = 0,
       @taSopLineDeleteErrString = '',
       @EXTDCOST = 0,
       @TOTALQTY = 0,
       @KITEXTDCOST = 0,
       @KITQUANTITY = 0,
       @CURRNIDX = 0,
       @CMPITQTY = 0,
       @serialsallocated = 0,
       @VCTNMTHD = 0,
       @SERLTNUM = '',
       @QTYTYPE = 1,
       @DTSEQNUM = 0,
       @DATERECD = '',
       @iCustomErrString = '',
       @SOP10201COUNT = 0,
       @DROPSHIP = 0,
       @count = 0,
       @ReqShipDate = '',
       @SOPHdrTbl = '',
       @DexRowID = 0,
       @oExists = 0,
       @OInsStatus = 0,
       @mylock = 0,
       @DexLockErrorState = 0,
       @currdate = CONVERT(VARCHAR(12), GETDATE()),
       @LOCNCODE = '',
       @ISMCTRX = 0,
       @FUNCRIDX = 0,
       @lock = '',
       @exists = 0,
       @hdrexists = 0,
       @cmpexists = 0,
       @DeleteType = 0,
       @PRICMTHD = 0,
       @CALCKITC = 0,
       @UOMPRICE = 0,
       @UNITPRCE = 0,
       @PRCLEVEL = '',
       @fieldupdate = 0,
       @XTNDPRCE = 0,
       @KITDECPLCUR = 0,
       @FUNLCURR = '',
       @ITEMFUNCTDEC = 0,
       @KITITEMFUNCTDEC = 0,
       @FUNDECPLCUR = 0,
       @EDITDECPLCUR = 2,
       @KITUNITCOST = 0,
       @DSCPCTAM = 0,
       @SopHdrUpdateState = 0,
       @SopHdrUpdateErrString = '',
       @CHGAMNT = 0,
       @ISMCREG = 1,
       @SOP10201QTYONHND = 0,
       @SOP10201QTYRTRND = 0,
       @SOP10201QTYINUSE = 0,
       @SOP10201QTYINSVC = 0,
       @SOP10201QTYDMGED = 0,
       @LOCNCODEPassed = 1,
       @LOCNCODELINE = '',
       @PRSTADCD = '',
       @ADDRESS1 = '',
       @ADDRESS2 = '',
       @ADDRESS3 = '',
       @CNTCPRSN = '',
       @FAXNUMBR = '',
       @CITY = '',
       @STATE = '',
       @ZIPCODE = '',
       @COUNTRY = '',
       @PHNUMBR1 = '',
       @PHNUMBR2 = '',
       @PHNUMBR3 = '',
       @SHIPMTHD = '',
       @SALSTERR = '',
       @SLPRSNID = '',
       @UPSZONE = '',
       @TAXEXMT1 = '',
       @TAXEXMT2 = '',
       @TXRGNNUM = '',
       @KTACCTSR = 0,
       @KITIVCOGSIX = 0,
       @STOP = 0,
       @RECALCBTCHTOT = 2,
       @QTYCANCE = 0,
       @OLDKITXTNDPRCE = 0,
       @SITEINACTIVE = 0,
       @ITEMSITEINACTIVE = 0;
IF (@oErrString IS NULL)
BEGIN
    SELECT @oErrString = '';
END;
EXEC @iStatus = taSopLineIvcInsertComponentPre @I_vSOPTYPE OUTPUT,
                                               @I_vSOPNUMBE OUTPUT,
                                               @I_vUSERDATE OUTPUT,
                                               @I_vLOCNCODE OUTPUT,
                                               @I_vLNITMSEQ OUTPUT,
                                               @I_vITEMNMBR OUTPUT,
                                               @I_vAutoAssignBin OUTPUT,
                                               @I_vITEMDESC OUTPUT,
                                               @I_vQUANTITY OUTPUT,
                                               @I_vQTYTBAOR OUTPUT,
                                               @I_vQTYCANCE OUTPUT,
                                               @I_vQTYFULFI OUTPUT,
                                               @I_vQUOTEQTYTOINV OUTPUT,
                                               @I_vQTYONHND OUTPUT,
                                               @I_vQTYRTRND OUTPUT,
                                               @I_vQTYINUSE OUTPUT,
                                               @I_vQTYINSVC OUTPUT,
                                               @I_vQTYDMGED OUTPUT,
                                               @I_vCUSTNMBR OUTPUT,
                                               @I_vDOCID OUTPUT,
                                               @I_vUNITCOST OUTPUT,
                                               @I_vNONINVEN OUTPUT,
                                               @I_vAUTOALLOCATESERIAL OUTPUT,
                                               @I_vAUTOALLOCATELOT OUTPUT,
                                               @I_vCMPNTSEQ OUTPUT,
                                               @I_vCMPITUOM OUTPUT,
                                               @I_vCURNCYID OUTPUT,
                                               @I_vUpdateIfExists OUTPUT,
                                               @I_vRecreateDist OUTPUT,
                                               @I_vRequesterTrx OUTPUT,
                                               @I_vQtyShrtOpt OUTPUT,
                                               @I_vRECREATECOMM OUTPUT,
                                               @I_vUSRDEFND1 OUTPUT,
                                               @I_vUSRDEFND2 OUTPUT,
                                               @I_vUSRDEFND3 OUTPUT,
                                               @I_vUSRDEFND4 OUTPUT,
                                               @I_vUSRDEFND5 OUTPUT,
                                               @O_iErrorState = @iCustomStatePre OUTPUT,
                                               @oErrString = @iCustomErrStringPre OUTPUT;
SELECT @iError = @@error;
IF ((@iStatus <> 0) OR (@iCustomStatePre <> 0) OR (@iError <> 0))
BEGIN
    SELECT @oErrString = RTRIM(@oErrString) + ' ' + @iCustomErrStringPre;
    SELECT @O_iErrorState = 3424;
    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_vLOCNCODE IS NULL)
       OR (@I_vLNITMSEQ IS NULL)
       OR (@I_vITEMNMBR IS NULL)
       OR (@I_vITEMDESC IS NULL)
       OR (@I_vQUANTITY IS NULL)
       OR (@I_vQTYTBAOR IS NULL)
       OR (@I_vQTYCANCE IS NULL)
       OR (@I_vQUOTEQTYTOINV IS NULL)
       OR (@I_vQTYONHND IS NULL)
       OR (@I_vQTYRTRND IS NULL)
       OR (@I_vQTYINUSE IS NULL)
       OR (@I_vQTYINSVC IS NULL)
       OR (@I_vQTYDMGED IS NULL)
       OR (@I_vCUSTNMBR IS NULL)
       OR (@I_vDOCID IS NULL)
       OR (@I_vNONINVEN IS NULL)
       OR (@I_vAUTOALLOCATESERIAL IS NULL)
       OR (@I_vAUTOALLOCATELOT IS NULL)
       OR (@I_vCMPNTSEQ IS NULL)
       OR (@I_vCMPITUOM IS NULL)
       OR (@I_vCURNCYID IS NULL)
       OR (@I_vUpdateIfExists IS NULL)
       OR (@I_vRecreateDist IS NULL)
       OR (@I_vRequesterTrx IS NULL)
       OR (@I_vQtyShrtOpt IS NULL)
   )
BEGIN
    SELECT @O_iErrorState = 191;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
IF (
       (@I_vQTYTBAOR < 0)
       OR (@I_vQTYCANCE < 0)
       OR (@I_vQTYFULFI < 0)
       OR (@I_vQUOTEQTYTOINV < 0)
       OR (@I_vQTYONHND < 0)
       OR (@I_vQTYRTRND < 0)
       OR (@I_vQTYINUSE < 0)
       OR (@I_vQTYINSVC < 0)
       OR (@I_vQTYDMGED < 0)
       OR (@I_vUNITCOST < 0)
   )
BEGIN
    SELECT @O_iErrorState = 452;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
SELECT @I_vSOPNUMBE = UPPER(@I_vSOPNUMBE),
       @I_vLOCNCODE = UPPER(@I_vLOCNCODE),
       @I_vITEMNMBR = UPPER(@I_vITEMNMBR),
       @I_vCUSTNMBR = UPPER(@I_vCUSTNMBR),
       @I_vDOCID = UPPER(@I_vDOCID),
       @I_vCURNCYID = UPPER(@I_vCURNCYID);
IF (NOT EXISTS
(
    SELECT 1
    FROM tempdb..sysobjects
    WHERE id =
    (
        SELECT OBJECT_ID('tempdb..#eConnectCalledFromSopLine')
    )
)
   )
BEGIN
    IF (NOT EXISTS
    (
        SELECT 1
        FROM SOP10200 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = 0
    )
       )
    BEGIN
        SELECT @O_iErrorState = 193;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    ELSE
    BEGIN
        SELECT @exists = 1;
    END;
END;
IF EXISTS
(
    SELECT SOPNUMBE
    FROM SOP10100 (NOLOCK)
    WHERE SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
)
BEGIN
    SELECT @hdrexists = 1;
END;
IF (
       (@I_vSOPNUMBE = '')
       OR (@I_vITEMNMBR = '')
       OR (@I_vLNITMSEQ = 0)
       OR (@I_vCUSTNMBR = '')
   )
BEGIN
    SELECT @O_iErrorState = 192;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vSOPTYPE < 1) OR (@I_vSOPTYPE > 6))
BEGIN
    SELECT @O_iErrorState = 194;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vSOPTYPE <> 3)
   AND (@I_vQUANTITY < 0)
BEGIN
    SELECT @O_iErrorState = 7469;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vNONINVEN < 0) OR (@I_vNONINVEN > 1))
BEGIN
    SELECT @O_iErrorState = 3905;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vAUTOALLOCATESERIAL < 0) OR (@I_vAUTOALLOCATESERIAL > 2))
BEGIN
    SELECT @O_iErrorState = 3907;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vAUTOALLOCATELOT < 0) OR (@I_vAUTOALLOCATELOT > 2))
BEGIN
    SELECT @O_iErrorState = 3909;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vUpdateIfExists < 0) OR (@I_vUpdateIfExists > 1))
BEGIN
    SELECT @O_iErrorState = 4059;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vRecreateDist < 0) OR (@I_vRecreateDist > 1))
BEGIN
    SELECT @O_iErrorState = 8129;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vRequesterTrx < 0) OR (@I_vRequesterTrx > 1))
BEGIN
    SELECT @O_iErrorState = 6258;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vQtyShrtOpt NOT IN ( 1, 2, 3, 4, 5, 6 ))
BEGIN
    SELECT @O_iErrorState = 6259;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vQtyShrtOpt IN ( 1, 3, 4, 5, 6 )) AND (@I_vSOPTYPE = 3))
BEGIN
    SELECT @O_iErrorState = 6261;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vRECREATECOMM NOT IN ( 0, 1 ))
BEGIN
    SELECT @O_iErrorState = 12002;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vUpdateIfExists = 0)
   AND (@I_vRECREATECOMM = 1)
BEGIN
    SELECT @O_iErrorState = 12008;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (NOT EXISTS
(
    SELECT 1
    FROM tempdb..sysobjects
    WHERE id =
    (
        SELECT OBJECT_ID('tempdb..#eConnectCalledFromSopLine')
    )
)
   )
BEGIN
    SELECT @KITITEMNMBR = ITEMNMBR,
           @ALLOCATED = ATYALLOC,
           @CURRNIDX = CURRNIDX,
           @DROPSHIP = DROPSHIP,
           @ReqShipDate = ReqShipDate,
           @PRCLEVEL = PRCLEVEL,
           @LOCNCODELINE = LOCNCODE
    FROM SOP10200 (NOLOCK)
    WHERE SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
          AND LNITMSEQ = @I_vLNITMSEQ
          AND CMPNTSEQ = 0;
END;
ELSE
BEGIN
    SELECT @KITITEMNMBR = KITITEMNMBR,
           @ALLOCATED = ALLOCATED,
           @CURRNIDX = CURRNIDX,
           @DROPSHIP = DROPSHIP,
           @ReqShipDate = ReqShipDate
    FROM #eConnectCalledFromSopLine;
END;
SELECT @KITITEMTYPE = ITEMTYPE,
       @PRICMTHD = PRICMTHD,
       @KTACCTSR = KTACCTSR,
       @KITIVCOGSIX = IVCOGSIX
FROM IV00101 (NOLOCK)
WHERE ITEMNMBR = @KITITEMNMBR;
IF (
       (NOT EXISTS
(
    SELECT TOP 1
           CURNCYID
    FROM IV00105 (NOLOCK)
    WHERE CURNCYID <> ''
)
       )
       AND (NOT EXISTS
(
    SELECT TOP 1
           CURNCYID
    FROM CM00100 (NOLOCK)
    WHERE CURNCYID <> ''
)
           )
   )
BEGIN
    SELECT @ISMCREG = 0;
END;
IF (@hdrexists = 0)
BEGIN
    IF (@I_vCURNCYID = '')
    BEGIN
        SELECT @I_vCURNCYID = ISNULL(CURNCYID, '')
        FROM RM00101 (NOLOCK)
        WHERE CUSTNMBR = @I_vCUSTNMBR;
        IF (@I_vCURNCYID = '')
        BEGIN
            SELECT @I_vCURNCYID = ISNULL(FUNLCURR, '')
            FROM MC40000 (NOLOCK);
        END;
    END;
END;
ELSE
BEGIN
    IF (@ISMCREG = 0)
    BEGIN
        SELECT @I_vCURNCYID = ISNULL(FUNLCURR, '')
        FROM MC40000 (NOLOCK);
    END;
    ELSE
    BEGIN
        SELECT @I_vCURNCYID = CURNCYID
        FROM SOP10100 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE;
    END;
END;
SELECT @FUNLCURR = FUNLCURR
FROM MC40000 (NOLOCK);
IF ((@I_vCURNCYID <> '') AND (@I_vCURNCYID <> @FUNLCURR))
BEGIN
    SELECT @ISMCTRX = 1;
END;
IF (@I_vCURNCYID = '')
BEGIN
    SELECT @O_iErrorState = 8119;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
SELECT @FUNCRIDX = FUNCRIDX
FROM MC40000 (NOLOCK);
IF (@CURRNIDX <> @FUNCRIDX)
BEGIN
    SELECT @ISMCTRX = 1;
END;
IF (@ALLOCATED > 0)
    SELECT @ALLOCABY = 1;
ELSE
    SELECT @ALLOCABY = 0;
IF (@I_vDOCID <> '')
BEGIN
    IF (@I_vSOPTYPE <> 6)
    BEGIN
        SELECT @USPFULPR = USPFULPR
        FROM SOP40200 (NOLOCK)
        WHERE DOCID = @I_vDOCID
              AND SOPTYPE = @I_vSOPTYPE;
    END;
    ELSE
    BEGIN
        SELECT @USPFULPR = USPFULPR
        FROM SOP40200 (NOLOCK)
        WHERE DOCID = @I_vDOCID
              AND SOPTYPE = 3;
    END;
END;
ELSE
BEGIN
    SELECT @USPFULPR = 0;
END;
IF (@KITITEMTYPE <> 3)
BEGIN
    SELECT @O_iErrorState = 831;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vLOCNCODE = '')
BEGIN
    SELECT @LOCNCODEPassed = 0;
END;
IF (@LOCNCODEPassed = 0)
BEGIN
    SELECT @I_vLOCNCODE = @LOCNCODELINE;
END;
IF (@I_vNONINVEN = 0)
BEGIN
    SELECT @EXTQTYAL = CASE
                           WHEN QTYONHND - ATYALLOC > 0 THEN
                               QTYONHND - ATYALLOC
                           WHEN @I_vQUANTITY < 0 THEN
                               0
                           ELSE
                               0
                       END
    FROM IV00102 (NOLOCK)
    WHERE ITEMNMBR = @I_vITEMNMBR
          AND LOCNCODE = @I_vLOCNCODE;
    SELECT @UOMSCHDL = UOMSCHDL,
           @VCTNMTHD = VCTNMTHD
    FROM IV00101 (NOLOCK)
    WHERE ITEMNMBR = @I_vITEMNMBR;
    IF (@I_vCMPITUOM = '')
    BEGIN
        SELECT @I_vCMPITUOM = CMPITUOM
        FROM IV00104 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND CMPTITNM = @I_vITEMNMBR;
        SELECT @count = @@rowcount;
        IF (@count = 0)
        BEGIN
            SELECT @O_iErrorState = 3906;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        IF (@count > 1)
        BEGIN
            SELECT @O_iErrorState = 8117;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    SELECT @CMPITQTY = CMPITQTY
    FROM IV00104 (NOLOCK)
    WHERE ITEMNMBR = @KITITEMNMBR
          AND CMPTITNM = @I_vITEMNMBR
          AND CMPITUOM = @I_vCMPITUOM;
    SELECT @QTYBSUOM = QTYBSUOM
    FROM IV40202 (NOLOCK)
    WHERE UOMSCHDL = @UOMSCHDL
          AND UOFM = @I_vCMPITUOM;
    SELECT @KITUOFM = SELNGUOM,
           @KITUOMSCHDL = UOMSCHDL
    FROM IV00101 (NOLOCK)
    WHERE ITEMNMBR = @KITITEMNMBR;
    SELECT @KITUOFMBASE = UOFM
    FROM IV40202 (NOLOCK)
    WHERE UOMSCHDL = @KITUOMSCHDL
          AND QTYBSUOM = 1.00000;
    SELECT @KITQTYBSUOM = QTYBSUOM
    FROM IV40202 (NOLOCK)
    WHERE UOMSCHDL = @KITUOMSCHDL
          AND EQUIVUOM = @KITUOFMBASE
          AND UOFM = @KITUOFM;
END;
ELSE
BEGIN
    IF (@I_vCMPITUOM = '')
    BEGIN
        SELECT @I_vCMPITUOM = 'Each';
    END;
END;
SELECT @TOTALQTY = @I_vQUANTITY + @I_vQTYCANCE + @I_vQTYTBAOR + @I_vQUOTEQTYTOINV;
IF (
       (@I_vNONINVEN = 0)
       AND (@I_vCMPITUOM <> '')
       AND (NOT EXISTS
(
    SELECT 1
    FROM IV40202 (NOLOCK)
    WHERE UOMSCHDL = @UOMSCHDL
          AND UOFM = @I_vCMPITUOM
)
           )
   )
BEGIN
    SELECT @O_iErrorState = 3915;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vUpdateIfExists = 1)
BEGIN
    IF (NOT EXISTS
    (
        SELECT 1
        FROM SOP10200
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = @I_vCMPNTSEQ
              AND ITEMNMBR = @I_vITEMNMBR
    )
       )
    BEGIN
        SELECT @O_iErrorState = 4065;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    ELSE
    BEGIN
        SELECT @cmpexists = 1;
        SELECT @EXTQTYAL = EXTQTYAL,
               @QTYCANCE = QTYCANCE
        FROM SOP10200 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = @I_vCMPNTSEQ;
    END;
END;
IF (@I_vCMPNTSEQ = 0)
BEGIN
    SELECT @I_vCMPNTSEQ = ISNULL(MAX(CMPNTSEQ), 0) + 16384
    FROM SOP10200 (NOLOCK)
    WHERE SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
          AND LNITMSEQ = @I_vLNITMSEQ;
END;
ELSE
BEGIN
    IF (
           (@I_vUpdateIfExists = 0)
           AND (EXISTS
    (
        SELECT 1
        FROM SOP10200 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = @I_vCMPNTSEQ
    )
               )
       )
    BEGIN
        SELECT @O_iErrorState = 3910;
        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 = 3467;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
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 = 7742;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vQTYFULFI > 0) AND (@ALLOCABY = 0))
BEGIN
    SELECT @O_iErrorState = 3546;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (
       (@I_vQTYFULFI > 0)
       AND
       (
           (@I_vSOPTYPE = 1)
           OR (@I_vSOPTYPE = 4)
           OR (@I_vSOPTYPE = 5)
       )
   )
BEGIN
    SELECT @O_iErrorState = 3547;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vQTYCANCE > 0) AND (@I_vSOPTYPE = 4))
BEGIN
    SELECT @O_iErrorState = 3548;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@ALLOCABY = 3) AND (@I_vQTYFULFI > 0))
BEGIN
    SELECT @O_iErrorState = 3549;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vQTYFULFI > @I_vQUANTITY)
   AND (@I_vQUANTITY > 0)
BEGIN
    SELECT @O_iErrorState = 3550;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (
       (@I_vQUANTITY <> @I_vQTYINSVC + @I_vQTYINUSE + @I_vQTYDMGED + @I_vQTYRTRND + @I_vQTYONHND)
       AND (@I_vSOPTYPE = 4)
   )
BEGIN
    SELECT @O_iErrorState = 3912;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vLOCNCODE = '')
BEGIN
    SELECT @I_vLOCNCODE = LOCNCODE
    FROM SOP40100 (NOLOCK);
END;
SELECT TOP 1
       @LOCNCODE = LOCNCODE
FROM IV40700 (NOLOCK)
WHERE LOCNCODE <> '';
IF (@I_vLOCNCODE = '')
BEGIN
    IF (@LOCNCODE <> '')
    BEGIN
        SELECT @O_iErrorState = 195;
        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 = 196;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    IF (
           (@I_vNONINVEN = 0)
           AND (NOT EXISTS
    (
        SELECT 1
        FROM IV00102 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND LOCNCODE = @I_vLOCNCODE
    )
               )
       )
    BEGIN
        SELECT @O_iErrorState = 197;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
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 = 11811;
    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 = 11812;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (
       (
           (@LOCNCODE = '')
           AND (@I_vLOCNCODE = '')
       )
       AND (@I_vQtyShrtOpt IN ( 1, 3, 4, 5, 6 ))
   )
BEGIN
    SELECT @O_iErrorState = 2097;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (
       (@I_vNONINVEN = 0)
       AND (NOT EXISTS
(
    SELECT 1
    FROM IV00101 (NOLOCK)
    WHERE ITEMNMBR = @I_vITEMNMBR
)
           )
   )
BEGIN
    SELECT @O_iErrorState = 198;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF ((@I_vUNITCOST >= 0) AND (@I_vSOPTYPE <> 4) AND (@I_vNONINVEN = 0))
BEGIN
    SELECT @O_iErrorState = 3553;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (
       (
           (@I_vQTYINSVC <> 0)
           OR (@I_vQTYINUSE <> 0)
           OR (@I_vQTYDMGED <> 0)
           OR (@I_vQTYRTRND <> 0)
           OR (@I_vQTYONHND <> 0)
       )
       AND
       (
           @I_vSOPTYPE IN ( 1, 2, 5 )
           OR
           (
               @I_vSOPTYPE = 3
               AND @I_vQUANTITY > 0
           )
       )
   )
BEGIN
    SELECT @O_iErrorState = 8502;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (
       (@I_vSOPTYPE <> 2)
       AND (@I_vSOPTYPE <> 3)
       AND (@I_vSOPTYPE <> 6)
       AND (@I_vQTYTBAOR <> 0)
   )
BEGIN
    SELECT @O_iErrorState = 830;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
END;
IF (@I_vNONINVEN = 0)
BEGIN
    SELECT @ITEMDESC = ITEMDESC,
           @PriceGroup = PriceGroup,
           @UNITCOST = CASE
                           WHEN @VCTNMTHD IN ( 4, 5 ) THEN
                               STNDCOST
                           ELSE
                               CURRCOST
                       END,
           @INVINDX = IVIVINDX,
           @CSLSINDX = IVCOGSIX,
           @SLSINDX = CASE
                          WHEN
                          (
                              @I_vSOPTYPE <> 4
                              AND @I_vQUANTITY >= 0
                          ) THEN
                              IVSLSIDX
                          ELSE
                              IVSLRNIX
                      END,
           @MKDNINDX = IVSLDSIX,
           @RTNSINDX = IVRETIDX,
           @INUSINDX = IVINUSIX,
           @INSRINDX = IVINSVIX,
           @DMGDINDX = IVDMGIDX,
           @ITEMTYPE = ITEMTYPE,
           @DECPLQTY = DECPLQTY,
           @ITMTRKOP = ITMTRKOP
    FROM IV00101 (NOLOCK)
    WHERE ITEMNMBR = @I_vITEMNMBR;
    IF (@RTNSINDX = 0)
        SELECT @RTNSINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 5
              AND SEQNUMBR = 1300;
    IF (@INUSINDX = 0)
        SELECT @INUSINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 5
              AND SEQNUMBR = 700;
    IF (@INSRINDX = 0)
        SELECT @INSRINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 5
              AND SEQNUMBR = 800;
    IF (@DMGDINDX = 0)
        SELECT @DMGDINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 5
              AND SEQNUMBR = 900;
    IF (@MKDNINDX = 0)
        SELECT @MKDNINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 5
              AND SEQNUMBR = 500;
END;
ELSE
BEGIN
    SELECT @ITEMDESC = @I_vITEMDESC;
    SELECT @INVINDX = ACTINDX,
           @MKDNINDX = 0,
           @RTNSINDX = ACTINDX,
           @INUSINDX = ACTINDX,
           @INSRINDX = ACTINDX,
           @IVSLRNIX = ACTINDX,
           @DMGDINDX = ACTINDX
    FROM SY01100 (NOLOCK)
    WHERE SERIES = 3
          AND SEQNUMBR = 2400;
    SELECT @DECPLQTY = DECPLQTY,
           @DECPLCUR = DECPLCUR
    FROM SOP40100 (NOLOCK)
    WHERE SETUPKEY = 1;
    SELECT @SLSINDX = 0,
           @CSLSINDX = 0;
END;
IF (@I_vNONINVEN = 0)
BEGIN
    IF (@ISMCTRX = 1)
    BEGIN
        SELECT @DECPLCUR = DECPLCUR
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND CURNCYID = @I_vCURNCYID;
        SELECT @KITDECPLCUR = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND CURNCYID = @I_vCURNCYID;
        SELECT @ITEMFUNCTDEC = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND CURNCYID = @FUNLCURR;
        SELECT @KITITEMFUNCTDEC = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND CURNCYID = @FUNLCURR;
    END;
    ELSE
    BEGIN
        SELECT @DECPLCUR = DECPLCUR
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND
              (
                  CURNCYID = ''
                  OR CURNCYID = @I_vCURNCYID
              );
        SELECT @KITDECPLCUR = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND
              (
                  CURNCYID = ''
                  OR CURNCYID = @I_vCURNCYID
              );
        SELECT @ITEMFUNCTDEC = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND
              (
                  CURNCYID = ''
                  OR CURNCYID = @FUNLCURR
              );
        SELECT @KITITEMFUNCTDEC = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND
              (
                  CURNCYID = ''
                  OR CURNCYID = @FUNLCURR
              );
    END;
END;
ELSE
BEGIN
    SELECT @ITEMFUNCTDEC = DECPLCUR - 1
    FROM SOP40600 (NOLOCK)
    WHERE CURNCYID = @FUNLCURR;
    IF (@ISMCTRX = 1)
    BEGIN
        SELECT @KITDECPLCUR = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND CURNCYID = @I_vCURNCYID;
        SELECT @KITITEMFUNCTDEC = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND CURNCYID = @FUNLCURR;
    END;
    ELSE
    BEGIN
        SELECT @KITDECPLCUR = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND
              (
                  CURNCYID = ''
                  OR CURNCYID = @I_vCURNCYID
              );
        SELECT @KITITEMFUNCTDEC = DECPLCUR - 1
        FROM IV00105 (NOLOCK)
        WHERE ITEMNMBR = @KITITEMNMBR
              AND
              (
                  CURNCYID = ''
                  OR CURNCYID = @FUNLCURR
              );
    END;
END;
SELECT @FUNDECPLCUR = DECPLCUR
FROM MC40000 a (NOLOCK),
     DYNAMICS..MC40200 b (NOLOCK)
WHERE a.FUNCRIDX = b.CURRNIDX
      AND a.FUNLCURR = b.CURNCYID;
IF (@ISMCTRX = 1)
BEGIN
    SELECT @EDITDECPLCUR = DECPLCUR - 1
    FROM DYNAMICS..MC40200 (NOLOCK)
    WHERE CURNCYID = @I_vCURNCYID;
END;
ELSE
BEGIN
    SELECT @EDITDECPLCUR = @FUNDECPLCUR - 1;
END;
IF (
       (@I_vNONINVEN = 1)
       AND EXISTS
(
    SELECT 1
    FROM SOP40600 (NOLOCK)
    WHERE CURNCYID = @I_vCURNCYID
)
   )
BEGIN
    SELECT @DECPLCUR = DECPLCUR
    FROM SOP40600 (NOLOCK)
    WHERE CURNCYID = @I_vCURNCYID;
END;
IF ((@ITEMTYPE IN ( 4, 5, 6 )) OR (@I_vSOPTYPE = 1))
BEGIN
    SELECT @I_vQtyShrtOpt = 2;
END;
IF (@MKDNINDX = 0)
    SELECT @MKDNINDX = ACTINDX
    FROM SY01100 (NOLOCK)
    WHERE SERIES = 5
          AND SEQNUMBR = 500;
SELECT @USEACFRM = USEACFRM,
       @CALCKITC = CALCKITC
FROM SOP40100 (NOLOCK);
IF (@USEACFRM = 1)
BEGIN
    SELECT @SLSINDX = CASE
                          WHEN @I_vSOPTYPE <> 4
                               AND
                               (
                                   @I_vSOPTYPE IN ( 3, 6 )
                                   AND @I_vQUANTITY >= 0
                               ) THEN
                              RMSLSACC
                          ELSE
                              0
                      END,
           @CSLSINDX = RMCOSACC
    FROM RM00101 (NOLOCK)
    WHERE CUSTNMBR = @I_vCUSTNMBR;
    IF (@I_vSOPTYPE <> 4)
       AND
       (
           @I_vSOPTYPE = 3
           AND @I_vQUANTITY < 0
       )
    BEGIN
        IF (@SLSINDX = 0)
        BEGIN
            SELECT @SLSINDX = ACTINDX
            FROM SY01100 (NOLOCK)
            WHERE SERIES = 3
                  AND SEQNUMBR = 1100;
        END;
    END;
    ELSE
    BEGIN
        SELECT @SLSINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 3
              AND SEQNUMBR = 1200;
    END;
    IF (@CSLSINDX = 0)
    BEGIN
        SELECT @CSLSINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 3
              AND SEQNUMBR = 200;
    END;
    IF (@INVINDX = 0)
    BEGIN
        SELECT @INVINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 3
              AND SEQNUMBR = 900;
    END;
END;
ELSE
BEGIN
    IF (@INVINDX = 0)
    BEGIN
        SELECT @INVINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 5
              AND SEQNUMBR = 100;
    END;
    IF (@SLSINDX = 0)
    BEGIN
        IF @I_vSOPTYPE = 4
           OR
           (
               @I_vSOPTYPE = 3
               AND @I_vQUANTITY < 0
           )
        BEGIN
            SELECT @SLSINDX = ACTINDX
            FROM SY01100 (NOLOCK)
            WHERE SERIES = 5
                  AND SEQNUMBR = 600;
        END;
        ELSE
        BEGIN
            SELECT @SLSINDX = ACTINDX
            FROM SY01100 (NOLOCK)
            WHERE SERIES = 5
                  AND SEQNUMBR = 400;
        END;
    END;
    IF (@KTACCTSR = 1)
    BEGIN
        SELECT @CSLSINDX = @KITIVCOGSIX;
    END;
    IF (@CSLSINDX = 0)
    BEGIN
        SELECT @CSLSINDX = ACTINDX
        FROM SY01100 (NOLOCK)
        WHERE SERIES = 5
              AND SEQNUMBR = 300;
    END;
END;
SELECT @MAXSEG = MAX(SGMTNUMB)
FROM SY00300 (NOLOCK);
SELECT @Location_Segment = ISNULL(Location_Segment, '')
FROM IV40700 (NOLOCK)
WHERE LOCNCODE = @I_vLOCNCODE;
SELECT @ACSGFLOC = ACSGFLOC,
       @ENABLEMULTIBIN = ENABLEMULTIBIN
FROM IV40100 (NOLOCK)
WHERE SETUPKEY = 1;
IF ((@INVINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @INVINDX;
    IF (@ACSGFLOC < @MAXSEG)
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @INVINDX = @ACTINDX;
    END;
END;
IF ((@MKDNINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @MKDNINDX;
    IF (@ACSGFLOC < @MAXSEG)
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @MKDNINDX = @ACTINDX;
    END;
END;
IF ((@RTNSINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @RTNSINDX;
    IF (@ACSGFLOC < @MAXSEG)
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @RTNSINDX = @ACTINDX;
    END;
END;
IF ((@INUSINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @INUSINDX;
    IF @ACSGFLOC < @MAXSEG
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @INUSINDX = @ACTINDX;
    END;
END;
IF ((@INSRINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @INSRINDX;
    IF (@ACSGFLOC < @MAXSEG)
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @INSRINDX = @ACTINDX;
    END;
END;
IF ((@DMGDINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @DMGDINDX;
    IF (@ACSGFLOC < @MAXSEG)
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @DMGDINDX = @ACTINDX;
    END;
END;
IF ((@CSLSINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @CSLSINDX;
    IF (@ACSGFLOC < @MAXSEG)
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @CSLSINDX = @ACTINDX;
    END;
END;
IF ((@SLSINDX <> 0) AND (@Location_Segment <> '') AND (@ACSGFLOC <> 0))
BEGIN
    SELECT @ACTINDX = 0,
           @ACCNT_STRING = '',
           @NEW_ACCNT_STRING = '';
    SELECT @ACCNT_STRING = ACTNUMST
    FROM GL00105 (NOLOCK)
    WHERE ACTINDX = @SLSINDX;
    IF (@ACSGFLOC < @MAXSEG)
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB >= @ACSGFLOC;
        SELECT @LOFSGMNTEND = SUM(LOFSGMNT) + (@MAXSEG - @ACSGFLOC)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB > @ACSGFLOC;
    END;
    ELSE
    BEGIN
        SELECT @LOFSGMNT = SUM(LOFSGMNT)
        FROM SY00300 (NOLOCK)
        WHERE SGMTNUMB = @ACSGFLOC;
    END;
    SELECT @LOFSGMNTALL = SUM(LOFSGMNT) + (@MAXSEG - 1)
    FROM SY00300 (NOLOCK);
    IF (@ACSGFLOC = @MAXSEG)
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment));
    END;
    ELSE
    BEGIN
        SELECT @NEW_ACCNT_STRING
            = SUBSTRING(@ACCNT_STRING, 1, @LOFSGMNTALL - @LOFSGMNT) + RTRIM(LTRIM(@Location_Segment))
              + SUBSTRING(@ACCNT_STRING, @LOFSGMNTALL - @LOFSGMNTEND + 1, @LOFSGMNTALL);
    END;
    SELECT @ACTINDX = ISNULL(ACTINDX, 0)
    FROM GL00105 (NOLOCK)
    WHERE ACTNUMST = @NEW_ACCNT_STRING;
    IF (@ACTINDX <> 0)
    BEGIN
        SELECT @SLSINDX = @ACTINDX;
    END;
END;
IF (
       (
           (@I_vSOPTYPE = 4)
           OR
           (
               @I_vSOPTYPE = 3
               AND @I_vQUANTITY < 0
           )
       )
       AND (@ITMTRKOP IN ( 2, 3 ))
   )
BEGIN
    SELECT @SOP10201QTYONHND = SUM(SERLTQTY)
    FROM SOP10201 (NOLOCK)
    WHERE QTYTYPE = 1
          AND SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
          AND ITEMNMBR = @I_vITEMNMBR
          AND LNITMSEQ = @I_vLNITMSEQ
          AND CMPNTSEQ = @I_vCMPNTSEQ;
    SELECT @SOP10201QTYRTRND = SUM(SERLTQTY)
    FROM SOP10201 (NOLOCK)
    WHERE QTYTYPE = 2
          AND SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
          AND ITEMNMBR = @I_vITEMNMBR
          AND LNITMSEQ = @I_vLNITMSEQ
          AND CMPNTSEQ = @I_vCMPNTSEQ;
    SELECT @SOP10201QTYINUSE = SUM(SERLTQTY)
    FROM SOP10201 (NOLOCK)
    WHERE QTYTYPE = 3
          AND SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
          AND ITEMNMBR = @I_vITEMNMBR
          AND LNITMSEQ = @I_vLNITMSEQ
          AND CMPNTSEQ = @I_vCMPNTSEQ;
    SELECT @SOP10201QTYINSVC = SUM(SERLTQTY)
    FROM SOP10201 (NOLOCK)
    WHERE QTYTYPE = 4
          AND SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
          AND ITEMNMBR = @I_vITEMNMBR
          AND LNITMSEQ = @I_vLNITMSEQ
          AND CMPNTSEQ = @I_vCMPNTSEQ;
    SELECT @SOP10201QTYDMGED = SUM(SERLTQTY)
    FROM SOP10201 (NOLOCK)
    WHERE QTYTYPE = 5
          AND SOPTYPE = @I_vSOPTYPE
          AND SOPNUMBE = @I_vSOPNUMBE
          AND ITEMNMBR = @I_vITEMNMBR
          AND LNITMSEQ = @I_vLNITMSEQ
          AND CMPNTSEQ = @I_vCMPNTSEQ;
    IF (
           (@SOP10201QTYONHND <> @I_vQTYONHND * @QTYBSUOM)
           OR (@SOP10201QTYRTRND <> @I_vQTYRTRND * @QTYBSUOM)
           OR (@SOP10201QTYINUSE <> @I_vQTYINUSE * @QTYBSUOM)
           OR (@SOP10201QTYINSVC <> @I_vQTYINSVC * @QTYBSUOM)
           OR (@SOP10201QTYDMGED <> @I_vQTYDMGED * @QTYBSUOM)
       )
    BEGIN
        SELECT @O_iErrorState = 8243;
        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 = 4061;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
        RETURN (@O_iErrorState);
    END;
END;
WHILE (1 = 1)
BEGIN
    IF (@exists = 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 = 4060;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
    END;
    IF (@I_vUpdateIfExists = 1)
    BEGIN
        IF (
               (
                   @I_vAUTOALLOCATESERIAL IN ( 1, 2 )
                   AND @ITMTRKOP = 2
               )
               OR
               (
                   @I_vAUTOALLOCATELOT IN ( 1, 2 )
                   AND @ITMTRKOP = 3
               )
           )
        BEGIN
            SELECT @DeleteType = 998;
        END;
        ELSE
        BEGIN
            SELECT @DeleteType = 2;
        END;
        EXEC @iStatus = taSopLineDelete @I_vSOPTYPE = @I_vSOPTYPE,
                                        @I_vSOPNUMBE = @I_vSOPNUMBE,
                                        @I_vLNITMSEQ = @I_vLNITMSEQ,
                                        @I_vITEMNMBR = @I_vITEMNMBR,
                                        @I_vCMPNTSEQ = @I_vCMPNTSEQ,
                                        @I_vDeleteType = @DeleteType,
                                        @I_vRequesterTrx = 1,
                                        @O_iErrorState = @taSopLineDeleteErrState OUTPUT,
                                        @oErrString = @taSopLineDeleteErrString OUTPUT;
        SELECT @iError = @@error;
        IF ((@iStatus <> 0) OR (@taSopLineDeleteErrState <> 0) OR (@iError <> 0))
        BEGIN
            SELECT @oErrString = RTRIM(@oErrString) + ' ' + @taSopLineDeleteErrString;
            SELECT @O_iErrorState = 4064;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    SELECT @lock = ITEMNMBR
    FROM IV00102 WITH (UPDLOCK INDEX(PKIV00102))
    WHERE ITEMNMBR = @I_vITEMNMBR
          AND
          (
              LOCNCODE = @I_vLOCNCODE
              OR LOCNCODE = ''
          );
    IF ((@ITEMTYPE NOT IN ( 3, 4, 5, 6 )) AND (@I_vQtyShrtOpt <> 2))
    BEGIN
        SELECT @QTTYALLOC = ATYALLOC
        FROM IV00102 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND LOCNCODE = @I_vLOCNCODE;
        IF (@QTTYALLOC >= 0)
        BEGIN
            SELECT @QTYAVL = QTYONHND - ATYALLOC
            FROM IV00102 (NOLOCK)
            WHERE ITEMNMBR = @I_vITEMNMBR
                  AND LOCNCODE = @I_vLOCNCODE;
        END;
        ELSE
        BEGIN
            SELECT @QTYAVL = QTYONHND + ATYALLOC
            FROM IV00102 (NOLOCK)
            WHERE ITEMNMBR = @I_vITEMNMBR
                  AND LOCNCODE = @I_vLOCNCODE;
        END;
        IF (@QTYAVL < 0)
        BEGIN
            SELECT @QTYAVL = 0;
        END;
        IF (
               (@I_vNONINVEN = 0)
               AND
               (
                   (@I_vSOPTYPE = 2)
                   OR (@I_vSOPTYPE = 3)
                   OR (@I_vSOPTYPE = 6)
               )
               AND ((@I_vQUANTITY * @QTYBSUOM) > @QTYAVL)
           )
        BEGIN
            IF ((@I_vQtyShrtOpt IN ( 1, 3, 4, 5, 6 )) AND (@I_vQTYFULFI <> 0))
            BEGIN
                SELECT @O_iErrorState = 3545;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrorState OUTPUT;
            END;
            IF (@I_vQtyShrtOpt = 1)
            BEGIN
                SELECT @I_vQUANTITY = ROUND(@QTYAVL / @QTYBSUOM, @DECPLQTY - 1, 1);
                SELECT @TOTALQTY = ROUND(@QTYAVL / @QTYBSUOM, @DECPLQTY - 1, 1) + @I_vQTYCANCE + @I_vQTYTBAOR;
            END;
            ELSE
            BEGIN
                IF (@I_vQtyShrtOpt = 3)
                BEGIN
                    SELECT @QTYTOBO = @I_vQUANTITY,
                           @I_vQUANTITY = 0;
                    SELECT @TOTALQTY = @QTYTOBO + @I_vQTYCANCE + @I_vQTYTBAOR;
                END;
                ELSE
                BEGIN
                    IF (@I_vQtyShrtOpt = 4)
                    BEGIN
                        SELECT @QTYTOBO = @I_vQUANTITY - ROUND(@QTYAVL / @QTYBSUOM, @DECPLQTY - 1, 1);
                        SELECT @I_vQUANTITY = @I_vQUANTITY - @QTYTOBO;
                        SELECT @TOTALQTY = @I_vQUANTITY + @QTYTOBO + @I_vQTYCANCE + @I_vQTYTBAOR;
                    END;
                    ELSE
                    BEGIN
                        IF (@I_vQtyShrtOpt = 5)
                        BEGIN
                            SELECT @I_vQTYCANCE = @I_vQTYCANCE + @I_vQUANTITY,
                                   @I_vQUANTITY = 0;
                            SELECT @TOTALQTY = @I_vQTYCANCE + @I_vQTYTBAOR;
                        END;
                        ELSE
                        BEGIN
                            IF (@I_vQtyShrtOpt = 6)
                            BEGIN
                                SELECT @I_vQTYCANCE
                                    = @I_vQTYCANCE + (@I_vQUANTITY - ROUND(@QTYAVL / @QTYBSUOM, @DECPLQTY - 1, 1));
                                SELECT @I_vQUANTITY = @I_vQUANTITY - @I_vQTYCANCE;
                                SELECT @TOTALQTY = @I_vQUANTITY + @I_vQTYCANCE + @I_vQTYTBAOR;
                            END;
                        END;
                    END;
                END;
            END;
        END;
    END;
    IF (@I_vQTYFULFI IS NULL)
    BEGIN
        IF (
               (@ALLOCABY = 1)
               AND (@USPFULPR = 0)
               AND
               (
                   (@I_vSOPTYPE = 2)
                   OR (@I_vSOPTYPE = 3)
                   OR (@I_vSOPTYPE = 6)
               )
           )
        BEGIN
            SELECT @I_vQTYFULFI = @I_vQUANTITY;
        END;
        ELSE
        BEGIN
            SELECT @I_vQTYFULFI = 0;
        END;
    END;
    IF (
           (@ITMTRKOP = 3)
           AND (@ITEMTYPE IN ( 1, 2 ))
           AND (@I_vNONINVEN = 0)
           AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
           AND (@LOCNCODE <> '')
       )
    BEGIN
        SELECT @LOTQUANTITY = @I_vQTYFULFI * @QTYBSUOM;
        SELECT @LotsToAllocate = @LOTQUANTITY - ISNULL(SUM(SERLTQTY), 0)
        FROM SOP10201 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND ITEMNMBR = @I_vITEMNMBR
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = @I_vCMPNTSEQ;
        IF (@LotsToAllocate < 0)
        BEGIN
            SELECT @O_iErrorState = 3916;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (
           (@ITMTRKOP = 2)
           AND (@ITEMTYPE = 1)
           AND (@I_vNONINVEN = 0)
           AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
           AND
           (
               @LOCNCODE <> ''
               AND @I_vQUANTITY >= 0
           )
       )
    BEGIN
        SELECT @SERIALQUANTITY = @I_vQTYFULFI * @QTYBSUOM;
        SELECT @serialstoallocate = @SERIALQUANTITY - ISNULL(COUNT(SERLTQTY), 0)
        FROM SOP10201 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND ITEMNMBR = @I_vITEMNMBR
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = @I_vCMPNTSEQ;
        IF (@serialstoallocate < 0)
        BEGIN
            SELECT @O_iErrorState = 3457;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        SELECT @SOP10201COUNTSERIAL = COUNT(*)
        FROM SOP10201 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND ITEMNMBR = @I_vITEMNMBR
              AND LNITMSEQ = @I_vLNITMSEQ;
        IF (
               (@SOP10201COUNTSERIAL = 0)
               AND
               (
                   (@I_vAUTOALLOCATESERIAL = 1)
                   OR (@I_vAUTOALLOCATESERIAL = 2)
               )
               AND (@ITMTRKOP = 2)
               AND
               (
                   (@USPFULPR = 0)
                   OR (@I_vQTYFULFI > 0)
               )
               AND
               (
                   (@I_vQTYFULFI <> 0)
                   OR (@I_vQTYFULFI IS NULL)
               )
           )
        BEGIN
            SELECT @O_iErrorState = 3466;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (
           (@ITMTRKOP = 3)
           AND (@I_vNONINVEN = 0)
           AND
           (
               (@I_vAUTOALLOCATELOT = 0)
               OR (@I_vAUTOALLOCATELOT = 2)
           )
           AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
           AND
           (
               (@USPFULPR = 0)
               OR (@I_vQTYFULFI > 0)
           )
           AND (@I_vQTYFULFI <> 0)
           AND (@LOCNCODE <> '')
       )
    BEGIN
        SELECT @LOTQTY = ISNULL(SUM(QTYRECVD), 0)
        FROM IV00300 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND LTNUMSLD = 0
              AND QTYTYPE = 1;
        IF ((@LOTQTY < @LotsToAllocate) AND (@I_vQtyShrtOpt = 2))
        BEGIN
            SELECT @O_iErrorState = 3468;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (
           (@ITMTRKOP = 2)
           AND (@I_vNONINVEN = 0)
           AND
           (
               (@I_vAUTOALLOCATESERIAL = 0)
               OR (@I_vAUTOALLOCATESERIAL = 2)
           )
           AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
           AND (@LOCNCODE <> '')
       )
    BEGIN
        SELECT @SERIALQTY = COUNT(*)
        FROM IV00200 (NOLOCK)
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND SERLNSLD = 0
              AND QTYTYPE = 1;
        IF ((@SERIALQTY < @serialstoallocate) AND (@I_vQtyShrtOpt = 2))
        BEGIN
            SELECT @O_iErrorState = 3469;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (@I_vNONINVEN = 1)
    BEGIN
        IF (@I_vUNITCOST IS NOT NULL)
        BEGIN
            SELECT @UNITCOST = @I_vUNITCOST;
        END;
        ELSE
        BEGIN
            SELECT @UNITCOST = 0;
        END;
    END;
    IF (@I_vSOPTYPE = 4)
    BEGIN
        IF (@I_vNONINVEN = 1)
        BEGIN
            IF (@I_vUNITCOST IS NOT NULL)
            BEGIN
                SELECT @UNITCOST = @I_vUNITCOST;
            END;
            ELSE
            BEGIN
                SELECT @UNITCOST = 0;
            END;
        END;
    END;
    IF (
           (@ITMTRKOP = 2)
           AND (@ITEMTYPE = 1)
           AND (@I_vNONINVEN = 0)
           AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
           AND
           (
               (@I_vAUTOALLOCATESERIAL = 0)
               OR (@I_vAUTOALLOCATESERIAL = 2)
           )
           AND (@LOCNCODE <> '')
       )
    BEGIN
        WHILE (@serialsallocated < @serialstoallocate)
        BEGIN
            IF ((@VCTNMTHD = 1) OR (@VCTNMTHD = 3) OR (@VCTNMTHD = 4))
                SELECT TOP 1
                       @SERLTNUM = SERLNMBR,
                       @QTYTYPE = QTYTYPE,
                       @DTSEQNUM = DTSEQNUM,
                       @DATERECD = DATERECD
                FROM IV00200 (NOLOCK)
                WHERE ITEMNMBR = @I_vITEMNMBR
                      AND LOCNCODE = @I_vLOCNCODE
                      AND SERLNSLD = 0
                      AND QTYTYPE = 1
                ORDER BY DATERECD,
                         DTSEQNUM;
            ELSE
                SELECT TOP 1
                       @SERLTNUM = SERLNMBR,
                       @QTYTYPE = QTYTYPE,
                       @DTSEQNUM = DTSEQNUM,
                       @DATERECD = DATERECD
                FROM IV00200 (NOLOCK)
                WHERE ITEMNMBR = @I_vITEMNMBR
                      AND LOCNCODE = @I_vLOCNCODE
                      AND SERLNSLD = 0
                      AND QTYTYPE = 1
                ORDER BY DATERECD DESC,
                         DTSEQNUM DESC;
            IF (@SERLTNUM = '')
            BEGIN
                SELECT @O_iErrorState = 3911;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrorState OUTPUT;
                BREAK;
            END;
            ELSE
            BEGIN
                EXEC @iStatus = taSopSerial @I_vSOPTYPE = @I_vSOPTYPE,
                                            @I_vSOPNUMBE = @I_vSOPNUMBE,
                                            @I_vLNITMSEQ = @I_vLNITMSEQ,
                                            @I_vCMPNTSEQ = @I_vCMPNTSEQ,
                                            @I_vQTYTYPE = 1,
                                            @I_vITEMNMBR = @I_vITEMNMBR,
                                            @I_vLOCNCODE = @I_vLOCNCODE,
                                            @I_vQUANTITY = 1,
                                            @I_vSERLNMBR = @SERLTNUM,
                                            @I_vAUTOCREATESERIAL = 0,
                                            @I_vDOCID = @I_vDOCID,
                                            @I_vRequesterTrx = 1,
                                            @O_iErrorState = @iCustomState OUTPUT,
                                            @oErrString = @iCustomErrString OUTPUT;
                IF (@iCustomState NOT IN ( 0, 1526 ))
                BEGIN
                    SELECT @iError = @@error;
                    IF ((@iStatus <> 0) OR (@iCustomState <> 0) OR (@iError <> 0))
                    BEGIN
                        SELECT @oErrString = RTRIM(@oErrString) + ' ' + LTRIM(RTRIM(@iCustomErrString));
                        SELECT @O_iErrorState = 3461;
                        EXEC @iStatus = taUpdateString @O_iErrorState,
                                                       @oErrString,
                                                       @oErrString OUTPUT,
                                                       @O_oErrorState OUTPUT;
                        BREAK;
                    END;
                END;
                SELECT @SERLTNUM = '';
                SELECT @serialsallocated = @serialsallocated + 1;
            END;
        END;
    END;
    IF (
           (@ITMTRKOP = 2)
           AND (@ITEMTYPE = 1)
           AND (@I_vNONINVEN = 0)
           AND
           (
               (@USPFULPR = 0)
               OR (@I_vQTYFULFI > 0)
           )
           AND (@I_vQTYFULFI <> 0)
           AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
           AND (@LOCNCODE <> '')
       )
    BEGIN
        SELECT @ALLOCATED = ISNULL(COUNT(SERLTQTY), 0)
        FROM SOP10201 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND ITEMNMBR = @I_vITEMNMBR
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = @I_vCMPNTSEQ;
        IF (@SERIALQUANTITY <> @ALLOCATED)
        BEGIN
            SELECT @O_iErrorState = 3914;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF ((@ITMTRKOP = 3) AND (@LOCNCODE <> ''))
    BEGIN
        SELECT @SOP10201COUNT = COUNT(*)
        FROM SOP10201 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND ITEMNMBR = @I_vITEMNMBR
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = @I_vCMPNTSEQ;
        IF (
               (@SOP10201COUNT = 0)
               AND
               (
                   (@I_vAUTOALLOCATELOT = 1)
                   OR (@I_vAUTOALLOCATELOT = 2)
               )
               AND (@ITMTRKOP = 3)
               AND
               (
                   (@USPFULPR = 0)
                   OR (@I_vQTYFULFI > 0)
               )
               AND (@I_vQTYFULFI <> 0)
           )
        BEGIN
            SELECT @O_iErrorState = 3462;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        IF (
               (@SOP10201COUNT > 0)
               AND (@I_vAUTOALLOCATELOT = 0)
               AND (@ITMTRKOP = 3)
           )
        BEGIN
            SELECT @O_iErrorState = 3463;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        IF (
               (@I_vSOPTYPE IN ( 2, 3, 6 ))
               AND (@ITMTRKOP = 3)
               AND (@ITEMTYPE = 1)
               AND (@I_vNONINVEN = 0)
               AND
               (
                   (@I_vAUTOALLOCATELOT = 0)
                   OR (@I_vAUTOALLOCATELOT = 2)
               )
               AND (@LotsToAllocate > 0)
               AND
               (
                   (@USPFULPR = 0)
                   OR (@I_vQTYFULFI > 0)
               )
               AND (@I_vQTYFULFI <> 0)
               AND (@ALLOCABY = 1)
           )
        BEGIN
            IF (@I_vUSERDATE = '')
            BEGIN
                SELECT @I_vUSERDATE = CONVERT(VARCHAR(12), GETDATE());
            END;
            EXEC @iStatus = taSopLot @I_vSOPTYPE = @I_vSOPTYPE,
                                     @I_vSOPNUMBE = @I_vSOPNUMBE,
                                     @I_vUSERDATE = @I_vUSERDATE,
                                     @I_vLNITMSEQ = @I_vLNITMSEQ,
                                     @I_vCMPNTSEQ = @I_vCMPNTSEQ,
                                     @I_vITEMNMBR = @I_vITEMNMBR,
                                     @I_vLOCNCODE = @I_vLOCNCODE,
                                     @I_vQUANTITY = @LotsToAllocate,
                                     @I_vDOCID = @I_vDOCID,
                                     @I_vDROPSHIP = @DROPSHIP,
                                     @O_iErrorState = @iCustomState OUTPUT,
                                     @oErrString = @iCustomErrString OUTPUT;
            SELECT @iError = @@error;
            IF ((@iStatus <> 0) OR (@iCustomState <> 0) OR (@iError <> 0))
            BEGIN
                SELECT @oErrString = RTRIM(@oErrString) + ' ' + @iCustomErrString;
                SELECT @O_iErrorState = 3464;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrorState OUTPUT;
                BREAK;
            END;
        END;
    END;
    IF (@I_vSOPTYPE = 3 AND @I_vQTYTBAOR > 0)
    BEGIN
        SELECT @EXTDCOST = ROUND((@I_vQTYTBAOR * @UNITCOST) * @QTYBSUOM, @FUNDECPLCUR - 1);
    END;
    ELSE
    BEGIN
        SELECT @EXTDCOST = ROUND((@I_vQUANTITY * @UNITCOST) * @QTYBSUOM, @FUNDECPLCUR - 1);
    END;
    INSERT SOP10200
    (
        UOFM,
        SOPTYPE,
        SOPNUMBE,
        LNITMSEQ,
        CMPNTSEQ,
        ITEMNMBR,
        ITEMDESC,
        NONINVEN,
        LOCNCODE,
        UNITCOST,
        ORUNTCST,
        UNITPRCE,
        ORUNTPRC,
        XTNDPRCE,
        OXTNDPRC,
        REMPRICE,
        OREPRICE,
        EXTDCOST,
        OREXTCST,
        MRKDNAMT,
        ORMRKDAM,
        MRKDNTYP,
        INVINDX,
        CSLSINDX,
        SLSINDX,
        MKDNINDX,
        RTNSINDX,
        INUSINDX,
        INSRINDX,
        DMGDINDX,
        QUANTITY,
        ATYALLOC,
        QTYONHND,
        QTYCANCE,
        QTYRTRND,
        QTYINUSE,
        QTYINSVC,
        QTYDMGED,
        QTYREMAI,
        QTYTOINV,
        QTYTORDR,
        QTYFULFI,
        QTYSLCTD,
        QTYBSUOM,
        EXTQTYAL,
        EXTQTYSEL,
        ReqShipDate,
        FUFILDAT,
        ACTLSHIP,
        CURRNIDX,
        PURCHSTAT,
        QTYONPO,
        QTYRECVD,
        QTYPRVRECVD,
        QTYORDER,
        QTYTBAOR,
        ITEMCODE,
        DECPLQTY,
        DECPLCUR,
        ODECPLCU
    )
    SELECT @I_vCMPITUOM,
           @I_vSOPTYPE,
           @I_vSOPNUMBE,
           @I_vLNITMSEQ,
           @I_vCMPNTSEQ,
           @I_vITEMNMBR,
           CASE
               WHEN @I_vITEMDESC = '' THEN
                   @ITEMDESC
               ELSE
                   @I_vITEMDESC
           END,
           @I_vNONINVEN,
           @I_vLOCNCODE,
           CASE
               WHEN
               (
                   (@ISMCTRX = 0)
                   OR (@I_vUNITCOST IS NULL)
               ) THEN
                   @UNITCOST * @QTYBSUOM
               ELSE
                   0
           END,
           CASE
               WHEN
               (
                   (@ISMCTRX = 0)
                   OR (@I_vUNITCOST IS NOT NULL)
               ) THEN
                   @UNITCOST * @QTYBSUOM
               ELSE
                   0
           END,
           0,
           0,
           0,
           0,
           0,
           0,
           CASE
               WHEN
               (
                   (@ISMCTRX = 0)
                   OR (@I_vUNITCOST IS NULL)
               ) THEN
                   @EXTDCOST
               ELSE
                   0
           END,
           CASE
               WHEN
               (
                   (@ISMCTRX = 0)
                   OR (@I_vUNITCOST IS NOT NULL)
               ) THEN
                   @EXTDCOST
               ELSE
                   0
           END,
           0,
           0,
           0,
           @INVINDX,
           @CSLSINDX,
           @SLSINDX,
           @MKDNINDX,
           @RTNSINDX,
           @INUSINDX,
           @INSRINDX,
           @DMGDINDX,
           @TOTALQTY,
           CASE
               WHEN
               (
                   (@I_vNONINVEN = 0)
                   AND (@DROPSHIP = 0)
                   AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
                   AND (@ALLOCABY = 1)
                   AND (@ITEMTYPE IN ( 1, 2, 3 ))
               ) THEN
                   @TOTALQTY - @I_vQTYCANCE - @I_vQTYTBAOR - @QTYTOBO
               ELSE
                   0
           END,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE = 4)
                   AND (@I_vQTYONHND > 0)
               ) THEN
                   @I_vQTYONHND
               WHEN (
                        @I_vSOPTYPE = 3
                        AND @I_vQUANTITY < 0
                    )
                    AND (@ITEMTYPE IN ( 1, 2, 3 )) THEN
                   @I_vQUANTITY * -1
               ELSE
                   0
           END,
           @I_vQTYCANCE,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE = 4)
                   AND (@I_vQTYRTRND > 0)
               ) THEN
                   @I_vQTYRTRND
               ELSE
                   0
           END,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE = 4)
                   AND (@I_vQTYINUSE > 0)
               ) THEN
                   @I_vQTYINUSE
               ELSE
                   0
           END,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE = 4)
                   AND (@I_vQTYINSVC > 0)
               ) THEN
                   @I_vQTYINSVC
               ELSE
                   0
           END,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE = 4)
                   AND (@I_vQTYDMGED > 0)
               ) THEN
                   @I_vQTYDMGED
               ELSE
                   0
           END,
           CASE
               WHEN (@I_vSOPTYPE = 4)
                    OR
                    (
                        @I_vSOPTYPE = 3
                        AND @I_vQUANTITY < 0
                    ) THEN
                   0
               ELSE
                   @TOTALQTY - @I_vQTYCANCE
           END,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE = 2)
                   OR
                   (
                       (@I_vSOPTYPE = 3)
                       AND (@I_vQUANTITY >= 0)
                   )
                   OR (@I_vSOPTYPE = 5)
                   OR (@I_vSOPTYPE = 6)
               ) THEN
                   @I_vQUANTITY
               WHEN (@I_vSOPTYPE = 1) THEN
                   @I_vQUOTEQTYTOINV
               ELSE
                   0
           END,
           CASE
               WHEN (@I_vSOPTYPE = 1) THEN
                   @I_vQUANTITY
               ELSE
                   0
           END,
           CASE
               WHEN (@I_vSOPTYPE IN ( 2, 3, 6 )) THEN
                   @I_vQTYFULFI
               ELSE
                   0
           END,
           CASE
               WHEN (@I_vSOPTYPE IN ( 2, 3, 6 )) THEN
                   @I_vQTYFULFI * @QTYBSUOM
               ELSE
                   0
           END,
           @QTYBSUOM,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE NOT IN ( 1, 4, 5 ))
                   AND (@ALLOCABY = 1)
                   AND (@I_vQUANTITY > 0)
               ) THEN
                   @EXTQTYAL
               WHEN (
                        (@I_vSOPTYPE = 3)
                        AND (@I_vQTYTBAOR > 0)
                    )
                    OR
                    (
                        (@cmpexists = 1)
                        AND
                        (
                            (@I_vSOPTYPE NOT IN ( 1, 4, 5 ))
                            AND (@ALLOCABY = 1)
                            AND (@I_vQUANTITY >= 0)
                        )
                    ) THEN
                   @EXTQTYAL
               ELSE
                   0
           END,
           CASE
               WHEN
               (
                   (@I_vSOPTYPE IN ( 2, 3, 6 ))
                   AND
                   (
                       (@ITMTRKOP = 2)
                       OR (@ITMTRKOP = 3)
                   )
                   AND (@USPFULPR = 0)
               ) THEN
                   @I_vQTYFULFI * @QTYBSUOM
               ELSE
                   0
           END,
           @ReqShipDate,
           CASE
               WHEN
               (
                   (@I_vUpdateIfExists = 1)
                   AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
                   AND (@I_vQTYFULFI > 0)
               ) THEN
                   @currdate
               ELSE
                   @dtDEFAULT
           END,
           CASE
               WHEN
               (
                   (@I_vUpdateIfExists = 1)
                   AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
                   AND (@I_vQTYFULFI > 0)
               ) THEN
                   @currdate
               ELSE
                   @dtDEFAULT
           END,
           0,
           CASE
               WHEN (
                        (@I_vNONINVEN = 1)
                        OR (@I_vQTYTBAOR > 0)
                        OR (@QTYTOBO > 0)
                        OR
                        (
                            (@I_vSOPTYPE = 5)
                            AND (@I_vQUANTITY > 0)
                        )
                        OR @DROPSHIP = 1
                    )
                    OR @ITEMTYPE IN ( 3, 4, 5, 6 )
                       AND (@I_vSOPTYPE NOT IN ( 1, 3, 4 )) THEN
                   2
               ELSE
                   1
           END,
           0,
           0,
           0,
           CASE
               WHEN (
                        @I_vSOPTYPE = 3
                        OR @I_vSOPTYPE = 6
                    )
                    AND (@I_vQUANTITY > 0) THEN
                   @I_vQUANTITY
               WHEN
               (
                   @I_vSOPTYPE = 3
                   AND @I_vQTYTBAOR > 0
               ) THEN
                   @I_vQTYTBAOR
               ELSE
                   0
           END,
           (@QTYTOBO + @I_vQTYTBAOR),
           '',
           @DECPLQTY,
           @ITEMFUNCTDEC + 1,
           @DECPLCUR;
    IF (@@error <> 0)
    BEGIN
        SELECT @O_iErrorState = 182;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
        BREAK;
    END;
    IF (
           (@ITEMTYPE IN ( 1, 2, 4, 5, 6 ))
           AND (@I_vSOPTYPE <> 1)
           AND (@I_vSOPTYPE <> 4)
           AND (@I_vSOPTYPE <> 5)
           AND (@DROPSHIP = 0)
           AND (@LOCNCODE <> '')
       )
    BEGIN
        IF (@ALLOCABY = 1)
           AND (@ITEMTYPE IN ( 1, 2 ))
        BEGIN
            UPDATE IV00102
            SET ATYALLOC = ATYALLOC + (@I_vQUANTITY * @QTYBSUOM),
                QTYBKORD = QTYBKORD + ((@I_vQTYTBAOR + @QTYTOBO) * (@QTYBSUOM))
            FROM IV00102 WITH (UPDLOCK INDEX(PKIV00102))
            WHERE ITEMNMBR = @I_vITEMNMBR
                  AND LOCNCODE = @I_vLOCNCODE;
        END;
        ELSE
        BEGIN
            UPDATE IV00102
            SET QTYBKORD = QTYBKORD + ((@I_vQTYTBAOR + @QTYTOBO) * (@QTYBSUOM))
            FROM IV00102 WITH (UPDLOCK INDEX(PKIV00102))
            WHERE ITEMNMBR = @I_vITEMNMBR
                  AND LOCNCODE = @I_vLOCNCODE;
        END;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 470;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
        IF (@ALLOCABY = 1)
           AND (@ITEMTYPE IN ( 1, 2 ))
        BEGIN
            UPDATE IV00102
            SET ATYALLOC = ATYALLOC + (@I_vQUANTITY * @QTYBSUOM),
                QTYBKORD = QTYBKORD + ((@I_vQTYTBAOR + @QTYTOBO) * (@QTYBSUOM))
            FROM IV00102 WITH (UPDLOCK INDEX(PKIV00102))
            WHERE ITEMNMBR = @I_vITEMNMBR
                  AND LOCNCODE = '';
        END;
        ELSE
        BEGIN
            UPDATE IV00102
            SET QTYBKORD = QTYBKORD + ((@I_vQTYTBAOR + @QTYTOBO) * (@QTYBSUOM))
            FROM IV00102 WITH (UPDLOCK INDEX(PKIV00102))
            WHERE ITEMNMBR = @I_vITEMNMBR
                  AND LOCNCODE = '';
        END;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 587;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF (
           (@I_vSOPTYPE = 5)
           AND (@ITEMTYPE IN ( 1, 2, 3, 5 ))
           AND (@LOCNCODE <> '')
       )
    BEGIN
        UPDATE IV00102
        SET QTYBKORD = QTYBKORD + (@I_vQUANTITY * @QTYBSUOM)
        FROM IV00102 WITH (UPDLOCK INDEX(PKIV00102))
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND LOCNCODE = @I_vLOCNCODE;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 521;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
        UPDATE IV00102
        SET QTYBKORD = QTYBKORD + (@I_vQUANTITY * @QTYBSUOM)
        FROM IV00102 WITH (UPDLOCK INDEX(PKIV00102))
        WHERE ITEMNMBR = @I_vITEMNMBR
              AND LOCNCODE = '';
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 3472;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF (NOT EXISTS
    (
        SELECT 1
        FROM tempdb..sysobjects
        WHERE id =
        (
            SELECT OBJECT_ID('tempdb..#eConnectCalledFromSopLine')
        )
    )
       )
    BEGIN
        SELECT @KITEXTDCOST = ROUND(SUM(EXTDCOST), @FUNDECPLCUR - 1)
        FROM SOP10200 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ > 0;
        SELECT @KITQUANTITY = QUANTITY,
               @OLDKITXTNDPRCE = XTNDPRCE
        FROM SOP10200 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = 0;
        IF (@KITQUANTITY = 0)
        BEGIN
            SELECT @KITUNITCOST = 0;
        END;
        ELSE
        BEGIN
            SELECT @KITUNITCOST
                = ABS(ISNULL(ROUND(SUM(UNITCOST * (QUANTITY - QTYCANCE)) / @KITQUANTITY, @KITITEMFUNCTDEC), 0))
            FROM SOP10200 (NOLOCK)
            WHERE SOPTYPE = @I_vSOPTYPE
                  AND SOPNUMBE = @I_vSOPNUMBE
                  AND LNITMSEQ = @I_vLNITMSEQ
                  AND CMPNTSEQ <> 0;
        END;
        IF (@CALCKITC = 1)
        BEGIN
            IF (@PRICMTHD IN ( 3, 4, 5, 6 ))
            BEGIN
                SELECT @fieldupdate = 1;
                SELECT @UOMPRICE = UOMPRICE / 100
                FROM IV00108 (NOLOCK)
                WHERE ITEMNMBR = @KITITEMNMBR
                      AND CURNCYID = @FUNLCURR
                      AND PRCLEVEL = @PRCLEVEL
                      AND UOFM = @KITUOFM
                      AND FROMQTY <= @KITQUANTITY
                      AND TOQTY >= @KITQUANTITY;
                IF (@PRICMTHD = 3)
                BEGIN
                    SELECT @UNITPRCE
                        = ROUND(
                                   ROUND((SUM(b.CURRCOST * (a.QUANTITY - a.QTYCANCE)) / @KITQUANTITY), @KITITEMFUNCTDEC)
                                   * ISNULL(ROUND(1 + @UOMPRICE, @KITITEMFUNCTDEC), 0),
                                   @KITITEMFUNCTDEC
                               )
                    FROM SOP10200 a,
                         IV00101 b,
                         IV40202 c
                    WHERE a.ITEMNMBR = b.ITEMNMBR
                          AND a.LNITMSEQ = @I_vLNITMSEQ
                          AND a.SOPTYPE = @I_vSOPTYPE
                          AND a.SOPNUMBE = @I_vSOPNUMBE
                          AND a.CMPNTSEQ > 0
                          AND c.UOMSCHDL = b.UOMSCHDL
                          AND c.UOFM = a.UOFM;
                END;
                ELSE
                BEGIN
                    IF (@PRICMTHD = 4)
                    BEGIN
                        SELECT @UNITPRCE
                            = ROUND(
                                       ROUND(
                                                (SUM(b.STNDCOST * (a.QUANTITY - a.QTYCANCE)) / @KITQUANTITY),
                                                @KITITEMFUNCTDEC
                                            ) * ISNULL(ROUND(1 + @UOMPRICE, @KITITEMFUNCTDEC), 0),
                                       @KITITEMFUNCTDEC
                                   )
                        FROM SOP10200 a,
                             IV00101 b,
                             IV40202 c
                        WHERE a.ITEMNMBR = b.ITEMNMBR
                              AND a.LNITMSEQ = @I_vLNITMSEQ
                              AND a.SOPTYPE = @I_vSOPTYPE
                              AND a.SOPNUMBE = @I_vSOPNUMBE
                              AND a.CMPNTSEQ > 0
                              AND c.UOMSCHDL = b.UOMSCHDL
                              AND c.UOFM = a.UOFM;
                    END;
                    ELSE
                    BEGIN
                        IF (@PRICMTHD = 5)
                        BEGIN
                            SELECT @UNITPRCE
                                = ROUND(
                                           ROUND(
                                                    (SUM(b.CURRCOST * (a.QUANTITY - a.QTYCANCE)) / @KITQUANTITY),
                                                    @KITITEMFUNCTDEC
                                                ) / ISNULL(1 - @UOMPRICE, 0),
                                           @KITITEMFUNCTDEC
                                       )
                            FROM SOP10200 a,
                                 IV00101 b,
                                 IV40202 c
                            WHERE a.ITEMNMBR = b.ITEMNMBR
                                  AND a.LNITMSEQ = @I_vLNITMSEQ
                                  AND a.SOPTYPE = @I_vSOPTYPE
                                  AND a.SOPNUMBE = @I_vSOPNUMBE
                                  AND a.CMPNTSEQ > 0
                                  AND c.UOMSCHDL = b.UOMSCHDL
                                  AND c.UOFM = a.UOFM;
                        END;
                        ELSE
                        BEGIN
                            IF (@PRICMTHD = 6)
                            BEGIN
                                SELECT @UNITPRCE
                                    = ROUND(
                                               ROUND(
                                                        (SUM(b.STNDCOST * (a.QUANTITY - a.QTYCANCE)) / @KITQUANTITY),
                                                        @KITITEMFUNCTDEC
                                                    ) / ISNULL(1 - @UOMPRICE, 0),
                                               @KITITEMFUNCTDEC
                                           )
                                FROM SOP10200 a,
                                     IV00101 b,
                                     IV40202 c
                                WHERE a.ITEMNMBR = b.ITEMNMBR
                                      AND a.LNITMSEQ = @I_vLNITMSEQ
                                      AND a.SOPTYPE = @I_vSOPTYPE
                                      AND a.SOPNUMBE = @I_vSOPNUMBE
                                      AND a.CMPNTSEQ > 0
                                      AND c.UOMSCHDL = b.UOMSCHDL
                                      AND c.UOFM = a.UOFM;
                            END;
                        END;
                    END;
                END;
                IF EXISTS
                (
                    SELECT TOP 1
                           1
                    FROM IV00108 (NOLOCK)
                    WHERE ITEMNMBR = @I_vITEMNMBR
                          AND CURNCYID <> ''
                )
                BEGIN
                    SELECT @tCURNCYID = @I_vCURNCYID;
                END;
                ELSE
                BEGIN
                    SELECT @tCURNCYID = '';
                END;
                SELECT @RNDGAMNT = ISNULL(RNDGAMNT, 0),
                       @ROUNDHOW = ISNULL(ROUNDHOW, 0),
                       @ROUNDTO = ISNULL(ROUNDTO, 0)
                FROM IV00107 (NOLOCK)
                WHERE ITEMNMBR = @KITITEMNMBR
                      AND CURNCYID = @I_vCURNCYID
                      AND PRCLEVEL = @PRCLEVEL
                      AND UOFM = @KITUOFM
                      AND QTYBSUOM = @QTYBSUOM;
                IF @ROUNDTO > 1
                   AND @ROUNDTO < 5
                BEGIN
                    EXEC @iStatus = taPricingGetRoundPrice @ROUNDTO,
                                                           @ROUNDHOW,
                                                           @RNDGAMNT,
                                                           @UNITPRCE OUTPUT;
                    SELECT @iError = @@error;
                    IF (@iError <> 0)
                       OR (@iStatus <> 0)
                    BEGIN
                        IF (@iStatus <> 0)
                        BEGIN
                            SELECT @oErrString = RTRIM(@oErrString) + ' ' + @iStatus;
                        END;
                        SELECT @O_iErrorState = 8183;
                        EXEC @iStatus = taUpdateString @O_iErrorState,
                                                       @oErrString,
                                                       @oErrString OUTPUT,
                                                       @O_oErrorState OUTPUT;
                    END;
                END;
                IF (@UNITPRCE IS NULL)
                BEGIN
                    SELECT @UNITPRCE = 0;
                END;
            END;
            SELECT @XTNDPRCE = ISNULL(ROUND(QUANTITY * (@UNITPRCE - MRKDNAMT), @EDITDECPLCUR), 0)
            FROM SOP10200 (NOLOCK)
            WHERE SOPTYPE = @I_vSOPTYPE
                  AND SOPNUMBE = @I_vSOPNUMBE
                  AND LNITMSEQ = @I_vLNITMSEQ
                  AND CMPNTSEQ = 0;
        END;
        UPDATE SOP10200
        SET UNITCOST = CASE
                           WHEN
                           (
                               (@ISMCTRX = 0)
                               OR (@I_vUNITCOST IS NULL)
                           ) THEN
                               @KITUNITCOST
                           ELSE
                               0
                       END,
            ORUNTCST = CASE
                           WHEN
                           (
                               (@ISMCTRX = 0)
                               OR (@I_vUNITCOST IS NOT NULL)
                           ) THEN
                               @KITUNITCOST
                           ELSE
                               0
                       END,
            EXTDCOST = CASE
                           WHEN
                           (
                               (@ISMCTRX = 0)
                               OR (@I_vUNITCOST IS NULL)
                           ) THEN
                               @KITEXTDCOST
                           ELSE
                               0
                       END,
            OREXTCST = CASE
                           WHEN
                           (
                               (@ISMCTRX = 0)
                               OR (@I_vUNITCOST IS NOT NULL)
                           ) THEN
                               @KITEXTDCOST
                           ELSE
                               0
                       END,
            UNITPRCE = CASE
                           WHEN @fieldupdate = 1 THEN
                               @UNITPRCE
                           ELSE
                               UNITPRCE
                       END,
            ORUNTPRC = CASE
                           WHEN @fieldupdate = 1
                                AND @ISMCTRX = 1 THEN
                               0
                           WHEN @fieldupdate = 1
                                AND @ISMCTRX = 0 THEN
                               @UNITPRCE
                           ELSE
                               ORUNTPRC
                       END,
            XTNDPRCE = CASE
                           WHEN @fieldupdate = 1 THEN
                               @XTNDPRCE
                           ELSE
                               XTNDPRCE
                       END,
            OXTNDPRC = CASE
                           WHEN @fieldupdate = 1
                                AND @ISMCTRX = 1 THEN
                               0
                           WHEN @fieldupdate = 1
                                AND @ISMCTRX = 0 THEN
                               @XTNDPRCE
                           ELSE
                               OXTNDPRC
                       END,
            REMPRICE = CASE
                           WHEN @fieldupdate = 1 THEN
                               @XTNDPRCE
                           ELSE
                               REMPRICE
                       END,
            OREPRICE = CASE
                           WHEN @fieldupdate = 1 THEN
                               @XTNDPRCE
                           ELSE
                               OREPRICE
                       END
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE
              AND LNITMSEQ = @I_vLNITMSEQ
              AND CMPNTSEQ = 0;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 522;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF ((@ENABLEMULTIBIN = 1) AND (@ITMTRKOP = 1))
    BEGIN
        IF (@I_vSOPTYPE = 4)
        BEGIN
            SELECT @I_vAutoAssignBin = 1;
        END;
        IF (
               (@ITEMTYPE IN ( 1, 2 ))
               AND (@I_vNONINVEN = 0)
               AND (@I_vSOPTYPE IN ( 2, 3, 6 ))
           )
        BEGIN
            IF (@I_vQTYFULFI > 0)
            BEGIN
                SELECT @BinFulfillQty = @I_vQTYFULFI * @QTYBSUOM;
            END;
            ELSE
            BEGIN
                IF (
                       (
                           (
                               (@ALLOCABY = 3)
                               OR (@ALLOCABY = 2)
                           )
                           OR
                           (
                               (@ALLOCABY = 1)
                               AND (@USPFULPR = 1)
                           )
                       )
                       OR (@I_vQTYFULFI = 0)
                   )
                BEGIN
                    SELECT @BinFulfillQty = 0;
                END;
                ELSE
                BEGIN
                    SELECT @BinFulfillQty = CASE
                                                WHEN @ITMTRKOP = 1 THEN
                                                    @I_vQUANTITY * @QTYBSUOM
                                                WHEN @ITMTRKOP = 2 THEN
                                                    @serialstoallocate
                                                WHEN @ITMTRKOP = 3 THEN
                                                    @LotsToAllocate
                                                ELSE
                                                    0
                                            END;
                END;
            END;
        END;
        IF (@I_vAutoAssignBin = 1)
        BEGIN
            IF EXISTS
            (
                SELECT 1
                FROM SOP10203 (NOLOCK)
                WHERE SOPTYPE = @I_vSOPTYPE
                      AND SOPNUMBE = @I_vSOPNUMBE
                      AND ITEMNMBR = @I_vITEMNMBR
                      AND LNITMSEQ = @I_vLNITMSEQ
            )
            BEGIN
                SELECT @O_iErrorState = 7192;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrorState OUTPUT;
            END;
            WHILE (@BinQtyType < 6)
            BEGIN
                IF (@I_vSOPTYPE = 4)
                BEGIN
                    SELECT @BinFulfillQty = CASE @BinQtyType
                                                WHEN 1 THEN
                                                    @I_vQTYONHND
                                                WHEN 2 THEN
                                                    @I_vQTYRTRND
                                                WHEN 3 THEN
                                                    @I_vQTYINUSE
                                                WHEN 4 THEN
                                                    @I_vQTYINSVC
                                                WHEN 5 THEN
                                                    @I_vQTYDMGED
                                                ELSE
                                                    @BinFulfillQty
                                            END;
                END;
                IF (@BinFulfillQty > 0)
                BEGIN
                    EXEC @iStatus = taSopMultiBin @I_vSOPNUMBE = @I_vSOPNUMBE,
                                                  @I_vSOPTYPE = @I_vSOPTYPE,
                                                  @I_vITEMNMBR = @I_vITEMNMBR,
                                                  @I_vLNITMSEQ = @I_vLNITMSEQ,
                                                  @I_vCMPNTSEQ = @I_vCMPNTSEQ,
                                                  @I_vBIN = '',
                                                  @I_vQTYTYPE = @BinQtyType,
                                                  @I_vUOFM = @KITQTYBSUOM,
                                                  @I_vQUANTITY = @BinFulfillQty,
                                                  @I_vCreateBin = 0,
                                                  @I_vOverrideBin = 1,
                                                  @I_vRequesterTrx = 1,
                                                  @O_iErrorState = @iCustomState OUTPUT,
                                                  @oErrString = @iCustomErrString OUTPUT;
                    SELECT @iError = @@error;
                    IF ((@iStatus <> 0) OR (@iCustomState <> 0) OR (@iError <> 0))
                    BEGIN
                        SELECT @oErrString = RTRIM(@oErrString) + ' ' + @iCustomErrString;
                        SELECT @O_iErrorState = 7191;
                        EXEC @iStatus = taUpdateString @O_iErrorState,
                                                       @oErrString,
                                                       @oErrString OUTPUT,
                                                       @O_oErrorState OUTPUT;
                        BREAK;
                    END;
                END;
                IF (@I_vSOPTYPE = 4)
                BEGIN
                    SELECT @BinQtyType = @BinQtyType + 1;
                END;
                ELSE
                BEGIN
                    SELECT @BinQtyType = 6;
                END;
            END;
        END;
    END;
    BREAK;
END;
IF (@I_vUpdateIfExists = 1)
   AND (@I_vSOPTYPE = 2)
   AND (@PRICMTHD IN ( 3, 4, 5, 6 ))
BEGIN
    SELECT @CHGAMNT = @OLDKITXTNDPRCE;
    SELECT @STOP = 1,
           @RECALCBTCHTOT = 4;
END;
IF (@mylock = 1)
BEGIN
    IF (@hdrexists = 1)
    BEGIN
        SELECT @ORTDISAM = ORTDISAM,
               @TRDISPCT = TRDISPCT,
               @PYMTRMID = PYMTRMID,
               @DUEDATE = DUEDATE,
               @DISCDATE = DISCDATE,
               @CHGAMNT = CASE
                              WHEN @STOP = 1 THEN
                                  @CHGAMNT
                              ELSE
                                  ORSUBTOT
                          END,
               @PRSTADCD = PRSTADCD,
               @DSCPCTAM = DSCPCTAM / 100,
               @ADDRESS1 = ADDRESS1,
               @ADDRESS2 = ADDRESS2,
               @ADDRESS3 = ADDRESS3,
               @CNTCPRSN = CNTCPRSN,
               @FAXNUMBR = FAXNUMBR,
               @CITY = CITY,
               @STATE = STATE,
               @ZIPCODE = ZIPCODE,
               @COUNTRY = COUNTRY,
               @PHNUMBR1 = PHNUMBR1,
               @PHNUMBR2 = PHNUMBR2,
               @PHNUMBR3 = PHONE3,
               @SHIPMTHD = SHIPMTHD,
               @SALSTERR = SALSTERR,
               @SLPRSNID = SLPRSNID,
               @UPSZONE = UPSZONE,
               @TAXEXMT1 = TAXEXMT1,
               @TAXEXMT2 = TAXEXMT2,
               @TXRGNNUM = TXRGNNUM
        FROM SOP10100 (NOLOCK)
        WHERE SOPTYPE = @I_vSOPTYPE
              AND SOPNUMBE = @I_vSOPNUMBE;
        IF (@TRDISPCT > 0)
        BEGIN
            SELECT @TRDISPCT = @TRDISPCT / 100.00,
                   @ORTDISAM = NULL;
        END;
        IF (@TRDISPCT = 0)
        BEGIN
            SELECT @ORTDISAM = @ORTDISAM,
                   @TRDISPCT = NULL;
        END;
        EXEC @iStatus = taSopHdrRecalc @I_vSOPTYPE = @I_vSOPTYPE,
                                       @I_vSOPNUMBE = @I_vSOPNUMBE,
                                       @I_vSHIPMTHD = @SHIPMTHD,
                                       @I_vPYMTRMID = @PYMTRMID,
                                       @I_vPRSTADCD = @PRSTADCD,
                                       @I_vADDRESS1 = @ADDRESS1,
                                       @I_vADDRESS2 = @ADDRESS2,
                                       @I_vADDRESS3 = @ADDRESS3,
                                       @I_vCNTCPRSN = @CNTCPRSN,
                                       @I_vFAXNUMBR = @FAXNUMBR,
                                       @I_vCITY = @CITY,
                                       @I_vSTATE = @STATE,
                                       @I_vZIPCODE = @ZIPCODE,
                                       @I_vCOUNTRY = @COUNTRY,
                                       @I_vPHNUMBR1 = @PHNUMBR1,
                                       @I_vPHNUMBR2 = @PHNUMBR2,
                                       @I_vPHNUMBR3 = @PHNUMBR3,
                                       @I_vDUEDATE = @DUEDATE,
                                       @I_vDISCDATE = @DISCDATE,
                                       @I_vTRDISAMT = @ORTDISAM,
                                       @I_vTRADEPCT = @TRDISPCT,
                                       @I_vSALSTERR = @SALSTERR,
                                       @I_vSLPRSNID = @SLPRSNID,
                                       @I_vUPSZONE = @UPSZONE,
                                       @I_vTAXEXMT1 = @TAXEXMT1,
                                       @I_vTAXEXMT2 = @TAXEXMT2,
                                       @I_vTXRGNNUM = @TXRGNNUM,
                                       @I_vRECREATEDIST = @I_vRecreateDist,
                                       @I_vRECREATECOMM = @I_vRECREATECOMM,
                                       @I_vRECREATETAXES = 0,
                                       @I_vRECALCBTCHTOT = @RECALCBTCHTOT,
                                       @I_vDSCPCTAM = @DSCPCTAM,
                                       @I_vCHGAMNT = @CHGAMNT,
                                       @I_vUSRDEFND1 = @I_vLNITMSEQ,
                                       @O_iErrorState = @SopHdrUpdateState OUTPUT,
                                       @oErrString = @SopHdrUpdateErrString OUTPUT;
        SELECT @iError = @@error;
        IF ((@iStatus <> 0) OR (@SopHdrUpdateState <> 0) OR (@iError <> 0))
        BEGIN
            SELECT @oErrString = RTRIM(@oErrString) + ' ' + @SopHdrUpdateErrString;
            SELECT @O_iErrorState = 8130;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            RETURN (@O_iErrorState);
        END;
    END;
    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 = 4063;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
        RETURN (@O_iErrorState);
    END;
END;
EXEC @iStatus = taSopLineIvcInsertComponentPost @I_vSOPTYPE,
                                                @I_vSOPNUMBE,
                                                @I_vUSERDATE,
                                                @I_vLOCNCODE,
                                                @I_vLNITMSEQ,
                                                @I_vITEMNMBR,
                                                @I_vAutoAssignBin,
                                                @I_vITEMDESC,
                                                @I_vQUANTITY,
                                                @I_vQTYTBAOR,
                                                @I_vQTYCANCE,
                                                @I_vQTYFULFI,
                                                @I_vQUOTEQTYTOINV,
                                                @I_vQTYONHND,
                                                @I_vQTYRTRND,
                                                @I_vQTYINUSE,
                                                @I_vQTYINSVC,
                                                @I_vQTYDMGED,
                                                @I_vCUSTNMBR,
                                                @I_vDOCID,
                                                @I_vUNITCOST,
                                                @I_vNONINVEN,
                                                @I_vAUTOALLOCATESERIAL,
                                                @I_vAUTOALLOCATELOT,
                                                @I_vCMPNTSEQ,
                                                @I_vCMPITUOM,
                                                @I_vCURNCYID,
                                                @I_vUpdateIfExists,
                                                @I_vRecreateDist,
                                                @I_vRequesterTrx,
                                                @I_vQtyShrtOpt,
                                                @I_vRECREATECOMM,
                                                @I_vUSRDEFND1,
                                                @I_vUSRDEFND2,
                                                @I_vUSRDEFND3,
                                                @I_vUSRDEFND4,
                                                @I_vUSRDEFND5,
                                                @O_iErrorState = @iCustomStatePost OUTPUT,
                                                @oErrString = @iCustomErrStringPost OUTPUT;
SELECT @iError = @@error;
IF ((@iStatus <> 0) OR (@iCustomStatePost <> 0) OR (@iError <> 0))
BEGIN
    SELECT @oErrString = RTRIM(@oErrString) + ' ' + @iCustomErrStringPost;
    SELECT @O_iErrorState = 3423;
    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 = 4062;
        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