taRMTransaction

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
ALTER PROCEDURE [dbo].[taRMTransaction]
    @I_vRMDTYPAL SMALLINT,
    @I_vDOCNUMBR CHAR(20),
    @I_vDOCDATE DATETIME,
    @I_vBACHNUMB CHAR(15),
    @I_vCUSTNMBR CHAR(15),
    @I_vDOCAMNT NUMERIC(19, 5),
    @I_vSLSAMNT NUMERIC(19, 5),
    @I_vDOCDESCR CHAR(30) = '',
    @I_vADRSCODE CHAR(15) = '',
    @I_vSLPRSNID CHAR(15) = NULL,
    @I_vSALSTERR CHAR(15) = NULL,
    @I_vSHIPMTHD CHAR(15) = '',
    @I_vTAXSCHID CHAR(15) = NULL,
    @I_vCSTPONBR CHAR(20) = '',
    @I_vCOSTAMNT NUMERIC(19, 5) = 0,
    @I_vTRDISAMT NUMERIC(19, 5) = 0,
    @I_vTRDDISCT SMALLINT = 0,
    @I_vFRTAMNT NUMERIC(19, 5) = 0,
    @I_vMISCAMNT NUMERIC(19, 5) = 0,
    @I_vTAXAMNT NUMERIC(19, 5) = 0,
    @I_vBKTSLSAM NUMERIC(19, 5) = 0,
    @I_vBKTFRTAM NUMERIC(19, 5) = 0,
    @I_vBKTMSCAM NUMERIC(19, 5) = 0,
    @I_vCASHAMNT NUMERIC(19, 5) = 0,
    @I_vCBKIDCSH CHAR(15) = '',
    @I_vCASHDATE DATETIME = '',
    @I_vDCNUMCSH CHAR(20) = '',
    @I_vCHEKAMNT NUMERIC(19, 5) = 0,
    @I_vCBKIDCHK CHAR(15) = '',
    @I_vCBKIDCRD CHAR(15) = '',
    @I_vCHEKNMBR CHAR(20) = '',
    @I_vCHEKDATE DATETIME = '',
    @I_vDCNUMCHK CHAR(20) = '',
    @I_vCRCRDAMT NUMERIC(19, 5) = 0,
    @I_vCRCRDNAM CHAR(15) = '',
    @I_vRCTNCCRD CHAR(20) = '',
    @I_vCRCARDDT DATETIME = '',
    @I_vDCNUMCRD CHAR(20) = '',
    @I_vDISCRTND NUMERIC(19, 5) = 0,
    @I_vDISTKNAM NUMERIC(19, 5) = 0,
    @I_vWROFAMNT NUMERIC(19, 5) = 0,
    @I_vPPSAMDED NUMERIC(19, 5) = 0,
    @I_vGSTDSAMT NUMERIC(19, 5) = 0,
    @I_vPYMTRMID CHAR(20) = NULL,
    @I_vDISAVAMT NUMERIC(19, 5) = NULL,
    @I_vDSCDLRAM NUMERIC(19, 5) = NULL,
    @I_vDSCPCTAM NUMERIC(19, 2) = NULL,
    @I_vLSTUSRED CHAR(15) = '',
    @I_vPTDUSRID CHAR(15) = '',
    @I_vDistRef CHAR(30) = '',
    @I_vBatchCHEKBKID CHAR(15) = '',
    @I_vDUEDATE DATETIME = '',
    @I_vDISCDATE DATETIME = '',
    @I_vCURNCYID CHAR(15) = '',
    @I_vXCHGRATE NUMERIC(19, 7) = 0,
    @I_vRATETPID CHAR(15) = '',
    @I_vEXPNDATE DATETIME = '',
    @I_vEXCHDATE DATETIME = '',
    @I_vEXGTBDSC CHAR(30) = '',
    @I_vEXTBLSRC CHAR(50) = '',
    @I_vRATEEXPR SMALLINT = -1,
    @I_vDYSTINCR SMALLINT = -1,
    @I_vRATEVARC NUMERIC(19, 7) = 0,
    @I_vTRXDTDEF SMALLINT = -1,
    @I_vRTCLCMTD SMALLINT = -1,
    @I_vPRVDSLMT SMALLINT = 0,
    @I_vDATELMTS SMALLINT = 0,
    @I_vTIME1 DATETIME = '',
    @I_vCOMDLRAM NUMERIC(19, 2) = NULL,
    @I_vCOMAPPTO SMALLINT = NULL,
    @I_vRequesterTrx SMALLINT = 0,
    @I_vCREATEDIST SMALLINT = 1,
    @I_vUSRDEFND1 CHAR(50) = '',
    @I_vUSRDEFND2 CHAR(50) = '',
    @I_vUSRDEFND3 CHAR(50) = '',
    @I_vUSRDEFND4 VARCHAR(8000) = '',
    @I_vUSRDEFND5 VARCHAR(8000) = '',
    @O_iErrorState INT OUTPUT,
    @oErrString VARCHAR(255) OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
DECLARE @INTERID CHAR(5),
        @FUNLCURR CHAR(15),
        @EXGTBLID CHAR(15),
        @ISMCTRX INT,
        @ORCTRXAM NUMERIC(19, 5),
        @ORSLSAMT NUMERIC(19, 5),
        @ORCSTAMT NUMERIC(19, 5),
        @ORFRTAMT NUMERIC(19, 5),
        @ORMISCAMT NUMERIC(19, 5),
        @ORTAXAMT NUMERIC(19, 5),
        @ORCASAMT NUMERIC(19, 5),
        @ORCHKAMT NUMERIC(19, 5),
        @ORCCDAMT NUMERIC(19, 5),
        @ORAPPAMT NUMERIC(19, 5),
        @ORDISTKN NUMERIC(19, 5),
        @ORDAVAMT NUMERIC(19, 5),
        @ORDATKN NUMERIC(19, 5),
        @ORDISRTD NUMERIC(19, 5),
        @ORDDLRAT NUMERIC(19, 5),
        @ORTDISAM NUMERIC(19, 5),
        @ORORGTRX NUMERIC(19, 5),
        @ORWROFAM NUMERIC(19, 5),
        @ORCOMAMT NUMERIC(19, 5),
        @ORBKTSLS NUMERIC(19, 5),
        @ORBKTFRT NUMERIC(19, 5),
        @ORBKTMSC NUMERIC(19, 5),
        @DECPLCUR SMALLINT,
        @ORDECPLCUR SMALLINT,
        @MCINSTALLED SMALLINT,
        @DOCTYPE SMALLINT,
        @iStatus INT,
        @iAddBatchErrState INT,
        @CURRNIDX SMALLINT,
        @O_oErrState INT,
        @iCustomState INT,
        @iCustomErrString VARCHAR(255),
        @iCreateBatchErrString VARCHAR(255),
        @O_oErrorState INT,
        @iError INT,
        @DOCPRFIX CHAR(3),
        @I_TXENGCLD TINYINT,
        @POSTED TINYINT,
        @iUpdDistErrState INT,
        @SLSCHDID CHAR(15),
        @FRTSCHID CHAR(15),
        @MSCSCHID CHAR(15),
        @dDISCDATE DATETIME,
        @dDUEDATE DATETIME,
        @iCalcDueDateErrState INT,
        @iCalcDueDateErrString VARCHAR(255),
        @NCOMAMNT NUMERIC(19, 5),
        @COMDLRAM NUMERIC(19, 5),
        @TaxTotal NUMERIC(19, 5),
        @APLYWITH TINYINT,
        @CORRCTN TINYINT,
        @SIMPLIFD TINYINT,
        @CORRNXST TINYINT,
        @DocPrinted TINYINT,
        @DOCNCORR CHAR(20),
        @Electronic TINYINT,
        @ECTRX TINYINT,
        @O_iInitErrorState INT,
        @oInitErrString VARCHAR(255),
        @DSCLCTYP SMALLINT,
        @DSCDLRAM NUMERIC(19, 5),
        @DSCPCTAM NUMERIC(19, 5),
        @SALPURCH SMALLINT,
        @DISCNTCB SMALLINT,
        @FREIGHT SMALLINT,
        @MISC SMALLINT,
        @TAX SMALLINT,
        @PymtTermAmnt NUMERIC(19, 5),
        @NOTEINDX NUMERIC(19, 5),
        @CMPANYID SMALLINT,
        @iGetNextNoteIdxErrState INT,
        @round NUMERIC(19, 5),
        @SEQNUMB INT,
        @ROUNDACCT INT,
        @FUNLCURRINDEX INT,
        @ROUNDAMT NUMERIC(19, 5),
        @BACKOUTAMT NUMERIC(19, 5);
SELECT @INTERID = '',
       @FUNLCURR = '',
       @EXGTBLID = '',
       @ISMCTRX = 0,
       @ORCTRXAM = 0,
       @ORSLSAMT = 0,
       @ORCSTAMT = 0,
       @ORFRTAMT = 0,
       @ORMISCAMT = 0,
       @ORTAXAMT = 0,
       @ORCASAMT = 0,
       @ORCHKAMT = 0,
       @ORCCDAMT = 0,
       @ORAPPAMT = 0,
       @ORDISTKN = 0,
       @ORDAVAMT = 0,
       @ORDATKN = 0,
       @ORDISRTD = 0,
       @ORDDLRAT = 0,
       @ORTDISAM = 0,
       @ORORGTRX = 0,
       @ORWROFAM = 0,
       @ORCOMAMT = 0,
       @ORBKTSLS = 0,
       @ORBKTFRT = 0,
       @ORBKTMSC = 0,
       @DECPLCUR = 0,
       @ORDECPLCUR = 0,
       @MCINSTALLED = 1,
       @O_iErrorState = 0,
       @DOCPRFIX = '',
       @I_TXENGCLD = 1,
       @POSTED = 0,
       @APLYWITH = 0,
       @CORRCTN = 0,
       @SIMPLIFD = 0,
       @CORRNXST = 0,
       @DocPrinted = 0,
       @Electronic = 0,
       @NCOMAMNT = 0,
       @COMDLRAM = 0,
       @ECTRX = 0,
       @TaxTotal = 0,
       @DOCNCORR = '',
       @CURRNIDX = 0,
       @SLSCHDID = '',
       @FRTSCHID = '',
       @MSCSCHID = '',
       @DSCLCTYP = 0,
       @DSCDLRAM = 0,
       @DSCPCTAM = 0,
       @dDISCDATE = '',
       @dDUEDATE = '',
       @SALPURCH = 1,
       @DISCNTCB = 1,
       @FREIGHT = 1,
       @MISC = 1,
       @TAX = 1,
       @PymtTermAmnt = 0,
       @round = 0,
       @SEQNUMB = 0,
       @ROUNDACCT = 0,
       @FUNLCURRINDEX = 0,
       @ROUNDAMT = 0,
       @iCustomErrString = '',
       @iCustomState = 0,
       @O_oErrState = 0,
       @iCalcDueDateErrString = '',
       @iCreateBatchErrString = '',
       @iUpdDistErrState = 0,
       @BACKOUTAMT = 0;
SELECT @DOCTYPE = CASE @I_vRMDTYPAL
                      WHEN 1 THEN
                          1
                      WHEN 3 THEN
                          2
                      WHEN 4 THEN
                          3
                      WHEN 5 THEN
                          4
                      WHEN 6 THEN
                          5
                      WHEN 7 THEN
                          6
                      WHEN 8 THEN
                          7
                      ELSE
                          0
                  END;
IF (@oErrString IS NULL)
BEGIN
    SELECT @oErrString = '';
END;
EXEC @iStatus = taRMTransactionPre @I_vRMDTYPAL OUTPUT,
                                   @I_vDOCNUMBR OUTPUT,
                                   @I_vDOCDATE OUTPUT,
                                   @I_vBACHNUMB OUTPUT,
                                   @I_vCUSTNMBR OUTPUT,
                                   @I_vDOCAMNT OUTPUT,
                                   @I_vSLSAMNT OUTPUT,
                                   @I_vDOCDESCR OUTPUT,
                                   @I_vADRSCODE OUTPUT,
                                   @I_vSLPRSNID OUTPUT,
                                   @I_vSALSTERR OUTPUT,
                                   @I_vSHIPMTHD OUTPUT,
                                   @I_vTAXSCHID OUTPUT,
                                   @I_vCSTPONBR OUTPUT,
                                   @I_vCOSTAMNT OUTPUT,
                                   @I_vTRDISAMT OUTPUT,
                                   @I_vTRDDISCT OUTPUT,
                                   @I_vFRTAMNT OUTPUT,
                                   @I_vMISCAMNT OUTPUT,
                                   @I_vTAXAMNT OUTPUT,
                                   @I_vBKTSLSAM OUTPUT,
                                   @I_vBKTFRTAM OUTPUT,
                                   @I_vBKTMSCAM OUTPUT,
                                   @I_vCASHAMNT OUTPUT,
                                   @I_vCBKIDCSH OUTPUT,
                                   @I_vCASHDATE OUTPUT,
                                   @I_vDCNUMCSH OUTPUT,
                                   @I_vCHEKAMNT OUTPUT,
                                   @I_vCBKIDCHK OUTPUT,
                                   @I_vCBKIDCRD OUTPUT,
                                   @I_vCHEKNMBR OUTPUT,
                                   @I_vCHEKDATE OUTPUT,
                                   @I_vDCNUMCHK OUTPUT,
                                   @I_vCRCRDAMT OUTPUT,
                                   @I_vCRCRDNAM OUTPUT,
                                   @I_vRCTNCCRD OUTPUT,
                                   @I_vCRCARDDT OUTPUT,
                                   @I_vDCNUMCRD OUTPUT,
                                   @I_vDISCRTND OUTPUT,
                                   @I_vDISTKNAM OUTPUT,
                                   @I_vWROFAMNT OUTPUT,
                                   @I_vPPSAMDED OUTPUT,
                                   @I_vGSTDSAMT OUTPUT,
                                   @I_vPYMTRMID OUTPUT,
                                   @I_vDISAVAMT OUTPUT,
                                   @I_vDSCDLRAM OUTPUT,
                                   @I_vDSCPCTAM OUTPUT,
                                   @I_vLSTUSRED OUTPUT,
                                   @I_vPTDUSRID OUTPUT,
                                   @I_vDistRef OUTPUT,
                                   @I_vBatchCHEKBKID OUTPUT,
                                   @I_vDUEDATE OUTPUT,
                                   @I_vDISCDATE OUTPUT,
                                   @I_vCURNCYID OUTPUT,
                                   @I_vXCHGRATE OUTPUT,
                                   @I_vRATETPID OUTPUT,
                                   @I_vEXPNDATE OUTPUT,
                                   @I_vEXCHDATE OUTPUT,
                                   @I_vEXGTBDSC OUTPUT,
                                   @I_vEXTBLSRC OUTPUT,
                                   @I_vRATEEXPR OUTPUT,
                                   @I_vDYSTINCR OUTPUT,
                                   @I_vRATEVARC OUTPUT,
                                   @I_vTRXDTDEF OUTPUT,
                                   @I_vRTCLCMTD OUTPUT,
                                   @I_vPRVDSLMT OUTPUT,
                                   @I_vDATELMTS OUTPUT,
                                   @I_vTIME1 OUTPUT,
                                   @I_vCOMDLRAM OUTPUT,
                                   @I_vCOMAPPTO OUTPUT,
                                   @I_vRequesterTrx OUTPUT,
                                   @I_vCREATEDIST OUTPUT,
                                   @I_vUSRDEFND1 OUTPUT,
                                   @I_vUSRDEFND2 OUTPUT,
                                   @I_vUSRDEFND3 OUTPUT,
                                   @I_vUSRDEFND4 OUTPUT,
                                   @I_vUSRDEFND5 OUTPUT,
                                   @O_iErrorState = @iCustomState OUTPUT,
                                   @oErrString = @iCustomErrString OUTPUT;
SELECT @iError = @@error;
IF @iStatus = 0
   AND @iError <> 0
BEGIN
    SELECT @iStatus = @iError;
END;
IF (@iStatus <> 0)
   OR (@iCustomState <> 0)
BEGIN
    SELECT @oErrString = RTRIM(@oErrString) + ' ' + LTRIM(RTRIM(@iCustomErrString));
    SELECT @O_iErrorState = 161;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
WHILE 1 = 1
BEGIN
    IF (
           @I_vRMDTYPAL IS NULL
           OR @I_vDOCNUMBR IS NULL
           OR @I_vDOCDATE IS NULL
           OR @I_vBACHNUMB IS NULL
           OR @I_vCUSTNMBR IS NULL
           OR @I_vDOCAMNT IS NULL
           OR @I_vDOCDESCR IS NULL
           OR @I_vADRSCODE IS NULL
           OR @I_vSHIPMTHD IS NULL
           OR @I_vCSTPONBR IS NULL
           OR @I_vCOSTAMNT IS NULL
           OR @I_vSLSAMNT IS NULL
           OR @I_vTRDISAMT IS NULL
           OR @I_vTRDDISCT IS NULL
           OR @I_vFRTAMNT IS NULL
           OR @I_vMISCAMNT IS NULL
           OR @I_vTAXAMNT IS NULL
           OR @I_vBKTSLSAM IS NULL
           OR @I_vBKTFRTAM IS NULL
           OR @I_vBKTMSCAM IS NULL
           OR @I_vCASHAMNT IS NULL
           OR @I_vCBKIDCSH IS NULL
           OR @I_vCASHDATE IS NULL
           OR @I_vDCNUMCSH IS NULL
           OR @I_vCHEKAMNT IS NULL
           OR @I_vCBKIDCHK IS NULL
           OR @I_vCBKIDCRD IS NULL
           OR @I_vCHEKNMBR IS NULL
           OR @I_vCHEKDATE IS NULL
           OR @I_vDCNUMCHK IS NULL
           OR @I_vCRCRDAMT IS NULL
           OR @I_vCRCRDNAM IS NULL
           OR @I_vRCTNCCRD IS NULL
           OR @I_vCRCARDDT IS NULL
           OR @I_vDCNUMCRD IS NULL
           OR @I_vDISCRTND IS NULL
           OR @I_vDISTKNAM IS NULL
           OR @I_vWROFAMNT IS NULL
           OR @I_vPPSAMDED IS NULL
           OR @I_vGSTDSAMT IS NULL
           OR @I_vLSTUSRED IS NULL
           OR @I_vPTDUSRID IS NULL
           OR @I_vDUEDATE IS NULL
           OR @I_vDISCDATE IS NULL
           OR @I_vDistRef IS NULL
           OR @I_vCURNCYID IS NULL
           OR @I_vXCHGRATE IS NULL
           OR @I_vRATETPID IS NULL
           OR @I_vEXPNDATE IS NULL
           OR @I_vEXCHDATE IS NULL
           OR @I_vEXGTBDSC IS NULL
           OR @I_vEXTBLSRC IS NULL
           OR @I_vRATEEXPR IS NULL
           OR @I_vDYSTINCR IS NULL
           OR @I_vRATEVARC IS NULL
           OR @I_vTRXDTDEF IS NULL
           OR @I_vRTCLCMTD IS NULL
           OR @I_vPRVDSLMT IS NULL
           OR @I_vDATELMTS IS NULL
           OR @I_vTIME1 IS NULL
           OR @I_vRequesterTrx IS NULL
           OR @I_vCREATEDIST IS NULL
       )
    BEGIN
        SELECT @O_iErrorState = 185;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    SELECT @I_vDOCNUMBR = UPPER(@I_vDOCNUMBR),
           @I_vBACHNUMB = UPPER(@I_vBACHNUMB),
           @I_vCUSTNMBR = UPPER(@I_vCUSTNMBR),
           @I_vSLPRSNID = UPPER(@I_vSLPRSNID),
           @I_vSALSTERR = UPPER(@I_vSALSTERR),
           @I_vTAXSCHID = UPPER(@I_vTAXSCHID),
           @I_vSHIPMTHD = UPPER(@I_vSHIPMTHD),
           @I_vCBKIDCHK = UPPER(@I_vCBKIDCHK),
           @I_vCBKIDCSH = UPPER(@I_vCBKIDCSH),
           @I_vBatchCHEKBKID = UPPER(@I_vBatchCHEKBKID),
           @I_vADRSCODE = UPPER(@I_vADRSCODE),
           @I_vCURNCYID = UPPER(@I_vCURNCYID),
           @I_vRATETPID = UPPER(@I_vRATETPID);
    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 @MCINSTALLED = 0;
    END;
    SELECT @INTERID = INTERID,
           @CMPANYID = CMPANYID
    FROM DYNAMICS..SY01500 (NOLOCK)
    WHERE INTERID = DB_NAME();
    EXEC @iStatus = DYNAMICS..tasmGetNextNoteIndex @I_sCompanyID = @CMPANYID,
                                                   @I_iSQLSessionID = 0,
                                                   @I_noteincrement = 1,
                                                   @O_mNoteIndex = @NOTEINDX OUTPUT,
                                                   @O_iErrorState = @iGetNextNoteIdxErrState OUTPUT;
    SELECT @iError = @@error;
    IF @iStatus = 0
       AND @iError <> 0
    BEGIN
        SELECT @iStatus = @iError;
    END;
    IF (@iStatus <> 0)
       OR (@iGetNextNoteIdxErrState <> 0)
    BEGIN
        IF (@iGetNextNoteIdxErrState <> 0)
        BEGIN
            EXEC @iStatus = taUpdateString @iGetNextNoteIdxErrState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        SELECT @O_iErrorState = 5445;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    IF (@I_vRATETPID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM MC40100 (NOLOCK)
            WHERE RATETPID = @I_vRATETPID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 535;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (@I_vDOCDATE = '')
    BEGIN
        SELECT @O_iErrorState = 216;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vADRSCODE <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM RM00102 (NOLOCK)
            WHERE CUSTNMBR = @I_vCUSTNMBR
                  AND ADRSCODE = @I_vADRSCODE
        )
           )
        BEGIN
            SELECT @O_iErrorState = 217;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vCUSTNMBR = '')
    BEGIN
        SELECT @O_iErrorState = 186;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vDOCNUMBR = '')
    BEGIN
        SELECT @O_iErrorState = 187;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (LEN(@I_vDOCNUMBR) > 17)
    BEGIN
        SELECT @O_iErrorState = 12003;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    IF (
           EXISTS
    (
        SELECT 1
        FROM RM00401 (NOLOCK)
        WHERE RMDTYPAL = @I_vRMDTYPAL
              AND DOCNUMBR = @I_vDOCNUMBR
    )
           OR EXISTS
    (
        SELECT 1
        FROM RM10301 (NOLOCK)
        WHERE RMDTYPAL = @I_vRMDTYPAL
              AND DOCNUMBR = @I_vDOCNUMBR
    )
           OR EXISTS
    (
        SELECT 1
        FROM RM20101 (NOLOCK)
        WHERE RMDTYPAL = @I_vRMDTYPAL
              AND DOCNUMBR = @I_vDOCNUMBR
    )
           OR EXISTS
    (
        SELECT 1
        FROM RM30101 (NOLOCK)
        WHERE RMDTYPAL = @I_vRMDTYPAL
              AND DOCNUMBR = @I_vDOCNUMBR
    )
       )
    BEGIN
        SELECT @O_iErrorState = 190;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vDOCAMNT < 0)
    BEGIN
        SELECT @O_iErrorState = 188;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    SELECT @TaxTotal = ISNULL(SUM(TAXAMNT), 0)
    FROM RM10601 (NOLOCK)
    WHERE RMDTYPAL = @I_vRMDTYPAL
          AND DOCNUMBR = @I_vDOCNUMBR
          AND BKOUTTAX = 0;
    IF (@I_vTAXAMNT <> @TaxTotal)
    BEGIN
        SELECT @O_iErrorState = 712;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    SELECT @BACKOUTAMT = ISNULL(SUM(TAXAMNT), 0.00)
    FROM RM10601 (NOLOCK)
    WHERE RMDTYPAL = @I_vRMDTYPAL
          AND DOCNUMBR = @I_vDOCNUMBR
          AND BKOUTTAX = 1;
    IF (@I_vBACHNUMB = '')
    BEGIN
        SELECT @O_iErrorState = 189;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vBACHNUMB <> '')
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM SY00500 (NOLOCK)
            WHERE BACHNUMB = @I_vBACHNUMB
                  AND MKDTOPST <> 0
                  AND BCHSOURC = 'RM_Sales'
        )
           )
        BEGIN
            SELECT @O_iErrorState = 202;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vBACHNUMB <> '')
    BEGIN
        IF EXISTS
        (
            SELECT 1
            FROM SY00500 a (NOLOCK)
            WHERE a.BACHNUMB = @I_vBACHNUMB
                  AND APPROVL = 1
        )
        BEGIN
            SELECT @O_iErrorState = 5625;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (@I_vRMDTYPAL NOT IN ( 1, 3, 4, 5, 6, 7, 8 ))
    BEGIN
        SELECT @O_iErrorState = 627;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vXCHGRATE < 0)
    BEGIN
        SELECT @O_iErrorState = 5598;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    IF (@I_vBatchCHEKBKID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vBatchCHEKBKID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 363;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vBatchCHEKBKID
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9522;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vCBKIDCHK <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCBKIDCHK
        )
           )
        BEGIN
            SELECT @O_iErrorState = 632;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCBKIDCHK
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9523;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vCBKIDCSH <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCBKIDCSH
        )
           )
        BEGIN
            SELECT @O_iErrorState = 620;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCBKIDCSH
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9524;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vCRCRDNAM <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM SY03100 (NOLOCK)
            WHERE CARDNAME = @I_vCRCRDNAM
                  AND CBRCVBLE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 608;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vSLPRSNID <> '')
       AND (@I_vSLPRSNID IS NOT NULL)
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM RM00301 (NOLOCK)
            WHERE SLPRSNID = @I_vSLPRSNID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 7149;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM RM00301 (NOLOCK)
            WHERE SLPRSNID = @I_vSLPRSNID
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9537;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vTAXSCHID IS NULL)
       AND (@I_vRMDTYPAL IN ( 1, 5, 8 ))
    BEGIN
        SELECT @I_vTAXSCHID = TAXSCHID
        FROM RM00101 (NOLOCK)
        WHERE CUSTNMBR = @I_vCUSTNMBR;
        SELECT @I_vTAXSCHID = ISNULL(@I_vTAXSCHID, '');
    END;
    IF (@I_vTAXSCHID IS NULL)
       AND (@I_vRMDTYPAL IN ( 2, 3, 4, 6, 7 ))
    BEGIN
        SELECT @I_vTAXSCHID = ISNULL(@I_vTAXSCHID, '');
    END;
    IF (@I_vTAXSCHID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM TX00101 (NOLOCK)
            WHERE TAXSCHID = @I_vTAXSCHID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 7023;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vSALSTERR <> '')
       AND (@I_vSALSTERR IS NOT NULL)
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM RM00303 (NOLOCK)
            WHERE SALSTERR = @I_vSALSTERR
        )
           )
        BEGIN
            SELECT @O_iErrorState = 7024;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vRequesterTrx < 0 OR @I_vRequesterTrx > 1)
    BEGIN
        SELECT @O_iErrorState = 3723;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vSHIPMTHD <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM SY03000 (NOLOCK)
            WHERE SHIPMTHD = @I_vSHIPMTHD
        )
           )
        BEGIN
            SELECT @O_iErrorState = 1320;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vDISAVAMT > @I_vSLSAMNT - @I_vTRDISAMT + @I_vFRTAMNT + @I_vMISCAMNT + @I_vTAXAMNT)
    BEGIN
        SELECT @O_iErrorState = 586;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vCURNCYID = '')
    BEGIN
        SELECT @I_vCURNCYID = ISNULL(CURNCYID, '')
        FROM RM00101 (NOLOCK)
        WHERE CUSTNMBR = @I_vCUSTNMBR;
        IF (@I_vCURNCYID <> '')
        BEGIN
            SELECT @CURRNIDX = ISNULL(CURRNIDX, 0)
            FROM DYNAMICS..MC40200 (NOLOCK)
            WHERE CURNCYID = @I_vCURNCYID;
        END;
        ELSE
        BEGIN
            SELECT @I_vCURNCYID = ISNULL(FUNLCURR, ''),
                   @CURRNIDX = ISNULL(FUNCRIDX, 0)
            FROM MC40000 (NOLOCK);
        END;
    END;
    ELSE
    BEGIN
        SELECT @CURRNIDX = ISNULL(CURRNIDX, 0)
        FROM DYNAMICS..MC40200 (NOLOCK)
        WHERE CURNCYID = @I_vCURNCYID;
    END;
    IF ((@CURRNIDX = 0) OR (@I_vCURNCYID = ''))
    BEGIN
        SELECT @O_iErrorState = 536;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vCOMDLRAM < 0)
    BEGIN
        SELECT @O_iErrorState = 7443;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vCOMAPPTO < 0 OR @I_vCOMAPPTO > 1)
    BEGIN
        SELECT @O_iErrorState = 7449;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vSLPRSNID IS NULL)
    BEGIN
        IF (@I_vRMDTYPAL IN ( 1, 5, 8 ))
        BEGIN
            SELECT @I_vSLPRSNID = SLPRSNID
            FROM RM00101 (NOLOCK)
            WHERE CUSTNMBR = @I_vCUSTNMBR;
        END;
        ELSE
        BEGIN
            SELECT @I_vSLPRSNID = '';
        END;
    END;
    IF (@I_vSALSTERR IS NULL)
    BEGIN
        IF (@I_vRMDTYPAL IN ( 1, 5, 8 ))
        BEGIN
            SELECT @I_vSALSTERR = SALSTERR
            FROM RM00101 (NOLOCK)
            WHERE CUSTNMBR = @I_vCUSTNMBR;
        END;
        ELSE
        BEGIN
            SELECT @I_vSALSTERR = '';
        END;
    END;
    IF (@I_vCOMAPPTO IS NULL)
    BEGIN
        SELECT @I_vCOMAPPTO = COMAPPTO
        FROM RM00301 (NOLOCK)
        WHERE SLPRSNID = @I_vSLPRSNID;
    END;
    IF (@I_vCOMAPPTO IS NULL)
    BEGIN
        SELECT @I_vCOMAPPTO = 0;
    END;
    SELECT @NCOMAMNT = ISNULL(SUM(NCOMAMNT), 0),
           @COMDLRAM = ISNULL(SUM(COMDLRAM), 0)
    FROM RM10501 (NOLOCK)
    WHERE CUSTNMBR = @I_vCUSTNMBR
          AND RMDTYPAL = @I_vRMDTYPAL
          AND DOCNUMBR = @I_vDOCNUMBR;
    IF (@I_vCOMDLRAM IS NULL)
    BEGIN
        SELECT @I_vCOMDLRAM = ISNULL(SUM(COMDLRAM), 0)
        FROM RM10501
        WHERE RMDTYPAL = @I_vRMDTYPAL
              AND DOCNUMBR = @I_vDOCNUMBR;
    END;
    IF (@I_vCOMDLRAM <> @COMDLRAM)
    BEGIN
        SELECT @O_iErrorState = 7450;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    SELECT @FUNLCURR = FUNLCURR
    FROM MC40000 (NOLOCK);
    SELECT @DECPLCUR = DECPLCUR - 1
    FROM DYNAMICS..MC40200 (NOLOCK)
    WHERE CURNCYID = @FUNLCURR;
    SELECT @ORDECPLCUR = DECPLCUR - 1
    FROM DYNAMICS..MC40200 (NOLOCK)
    WHERE CURNCYID = @I_vCURNCYID;
    IF (@I_vCURNCYID <> '')
       AND (@I_vCURNCYID <> @FUNLCURR)
    BEGIN
        SELECT @ISMCTRX = 1;
        EXEC @iStatus = taMCCurrencyValidate @I_vMASTERID = @I_vCUSTNMBR,
                                             @I_vDOCDATE = @I_vDOCDATE,
                                             @I_vCURNCYID = @I_vCURNCYID,
                                             @I_vEXGTBDSC = @I_vEXGTBDSC,
                                             @I_vEXTBLSRC = @I_vEXTBLSRC,
                                             @I_vRATEEXPR = @I_vRATEEXPR OUTPUT,
                                             @I_vDYSTINCR = @I_vDYSTINCR OUTPUT,
                                             @I_vRATEVARC = @I_vRATEVARC,
                                             @I_vTRXDTDEF = @I_vTRXDTDEF,
                                             @I_vPRVDSLMT = @I_vPRVDSLMT,
                                             @I_vDATELMTS = @I_vDATELMTS,
                                             @I_vMODULE = 1,
                                             @I_vEXCHDATE = @I_vEXCHDATE OUTPUT,
                                             @I_vTIME1 = @I_vTIME1 OUTPUT,
                                             @I_vXCHGRATE = @I_vXCHGRATE OUTPUT,
                                             @I_vEXPNDATE = @I_vEXPNDATE OUTPUT,
                                             @I_vRATETPID = @I_vRATETPID OUTPUT,
                                             @I_vRTCLCMTD = @I_vRTCLCMTD OUTPUT,
                                             @I_vEXGTBLID = @EXGTBLID OUTPUT,
                                             @oErrString = @oErrString OUTPUT,
                                             @O_iErrorState = @iUpdDistErrState OUTPUT;
        SELECT @iError = @@error;
        IF @iStatus = 0
           AND @iError <> 0
            SELECT @iStatus = @iError;
        IF (@iStatus <> 0)
           OR (@iUpdDistErrState <> 0)
        BEGIN
            SELECT @O_iErrorState = 537;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            RETURN (@O_iErrorState);
        END;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 538;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
    END;
    ELSE
    BEGIN
        SELECT @ISMCTRX = 0,
               @I_vRATEEXPR = 0,
               @I_vDYSTINCR = 0,
               @I_vXCHGRATE = 1;
        IF (
               (@I_vDOCAMNT <> ROUND(@I_vDOCAMNT, @DECPLCUR, 1))
               OR (@I_vSLSAMNT <> ROUND(@I_vSLSAMNT, @DECPLCUR, 1))
               OR (@I_vCOSTAMNT <> ROUND(@I_vCOSTAMNT, @DECPLCUR, 1))
               OR (@I_vTRDISAMT <> ROUND(@I_vTRDISAMT, @DECPLCUR, 1))
               OR (@I_vFRTAMNT <> ROUND(@I_vFRTAMNT, @DECPLCUR, 1))
               OR (@I_vMISCAMNT <> ROUND(@I_vMISCAMNT, @DECPLCUR, 1))
               OR (@I_vTAXAMNT <> ROUND(@I_vTAXAMNT, @DECPLCUR, 1))
               OR (@I_vBKTSLSAM <> ROUND(@I_vBKTSLSAM, @DECPLCUR, 1))
               OR (@I_vBKTFRTAM <> ROUND(@I_vBKTFRTAM, @DECPLCUR, 1))
               OR (@I_vBKTMSCAM <> ROUND(@I_vBKTMSCAM, @DECPLCUR, 1))
               OR (@I_vCASHAMNT <> ROUND(@I_vCASHAMNT, @DECPLCUR, 1))
               OR (@I_vCHEKAMNT <> ROUND(@I_vCHEKAMNT, @DECPLCUR, 1))
               OR (@I_vCRCRDAMT <> ROUND(@I_vCRCRDAMT, @DECPLCUR, 1))
               OR (@I_vDISCRTND <> ROUND(@I_vDISCRTND, @DECPLCUR, 1))
               OR (@I_vDISTKNAM <> ROUND(@I_vDISTKNAM, @DECPLCUR, 1))
               OR (@I_vWROFAMNT <> ROUND(@I_vWROFAMNT, @DECPLCUR, 1))
               OR (@I_vPPSAMDED <> ROUND(@I_vPPSAMDED, @DECPLCUR, 1))
               OR (@I_vGSTDSAMT <> ROUND(@I_vGSTDSAMT, @DECPLCUR, 1))
               OR (@I_vDISAVAMT <> ROUND(@I_vDISAVAMT, @DECPLCUR, 1))
               OR (@I_vDSCDLRAM <> ROUND(@I_vDSCDLRAM, @DECPLCUR, 1))
           )
        BEGIN
            SELECT @O_iErrorState = 7020;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            RETURN (@O_iErrorState);
        END;
    END;
    IF (@I_vDISAVAMT IS NOT NULL)
       AND (@ISMCTRX = 1)
    BEGIN
        IF (@I_vDISAVAMT <> ROUND(@I_vDISAVAMT, @ORDECPLCUR, 1))
        BEGIN
            SELECT @O_iErrorState = 8147;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            RETURN (@O_iErrorState);
        END;
    END;
    IF (@I_vRMDTYPAL IN ( 1, 3, 4, 5 ))
    BEGIN
        IF (@I_vPYMTRMID IS NULL)
        BEGIN
            SELECT @I_vPYMTRMID = PYMTRMID
            FROM RM00101 (NOLOCK)
            WHERE CUSTNMBR = @I_vCUSTNMBR;
            SELECT @I_vPYMTRMID = ISNULL(@I_vPYMTRMID, '');
        END;
        SELECT @SALPURCH = SALPURCH,
               @DISCNTCB = DISCNTCB,
               @FREIGHT = FREIGHT,
               @MISC = MISC,
               @TAX = TAX
        FROM SY03300 (NOLOCK)
        WHERE PYMTRMID = @I_vPYMTRMID;
        SELECT @PymtTermAmnt = @PymtTermAmnt + (@I_vSLSAMNT * @SALPURCH),
               @PymtTermAmnt = @PymtTermAmnt - (@I_vTRDISAMT * @DISCNTCB),
               @PymtTermAmnt = @PymtTermAmnt + (@I_vFRTAMNT * @FREIGHT),
               @PymtTermAmnt = @PymtTermAmnt + (@I_vMISCAMNT * @MISC),
               @PymtTermAmnt = @PymtTermAmnt + (@I_vTAXAMNT * @TAX);
        IF (
               (@I_vPYMTRMID = '')
               AND (@I_vDISAVAMT IS NULL)
               AND (@I_vDSCDLRAM IS NULL)
               AND (@I_vDSCPCTAM IS NULL)
           )
            SELECT @I_vDISAVAMT = 0,
                   @I_vDSCDLRAM = 0,
                   @I_vDSCPCTAM = 0;
        IF ((@I_vDISAVAMT IS NOT NULL) AND (@I_vDSCDLRAM IS NULL))
            SELECT @I_vDSCDLRAM = 0;
        IF (
               (@I_vDISAVAMT IS NOT NULL)
               AND
               (
                   @I_vDSCPCTAM IS NULL
                   OR ROUND((@I_vDSCPCTAM / 100) * @PymtTermAmnt, @ORDECPLCUR) <> @I_vDISAVAMT
               )
           )
            SELECT @I_vDSCPCTAM = 0;
        IF (
               (
                   @I_vDSCDLRAM IS NOT NULL
                   AND @I_vDSCDLRAM <> 0
               )
               AND
               (
                   @I_vDSCPCTAM IS NOT NULL
                   AND @I_vDSCPCTAM <> 0
               )
           )
        BEGIN
            SELECT @O_iErrorState = 7126;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        IF ((@I_vDSCDLRAM IS NOT NULL) AND (@I_vDISAVAMT IS NULL))
        BEGIN
            SELECT @I_vDISAVAMT = @I_vDSCDLRAM,
                   @I_vDSCPCTAM = 0;
        END;
        IF ((@I_vDSCPCTAM IS NOT NULL) AND (@I_vDISAVAMT IS NULL))
        BEGIN
            SELECT @I_vDISAVAMT = ((@I_vDSCPCTAM / 100) * @PymtTermAmnt),
                   @I_vDSCDLRAM = 0;
        END;
        IF (
               (@I_vPYMTRMID <> '')
               AND (@I_vDISAVAMT IS NULL)
               AND (@I_vDSCDLRAM IS NULL)
               AND (@I_vDSCPCTAM IS NULL)
           )
        BEGIN
            SELECT @DSCLCTYP = DSCLCTYP,
                   @DSCDLRAM = DSCDLRAM,
                   @DSCPCTAM = DSCPCTAM
            FROM SY03300 (NOLOCK)
            WHERE PYMTRMID = @I_vPYMTRMID;
            IF (@DSCLCTYP = 1)
            BEGIN
                SELECT @I_vDSCPCTAM = @DSCPCTAM / 100.0,
                       @I_vDSCDLRAM = 0;
                IF (@ISMCTRX = 1)
                BEGIN
                    SELECT @ORDAVAMT = ROUND((@I_vDSCPCTAM / 100.0) * @PymtTermAmnt, @ORDECPLCUR);
                    SELECT @ORDDLRAT = 0;
                    SELECT @I_vDISAVAMT = CASE
                                              WHEN (@I_vRTCLCMTD = 0) THEN
                                                  ROUND(@ORDAVAMT * @I_vXCHGRATE, @DECPLCUR)
                                              WHEN (@I_vRTCLCMTD = 1) THEN
                                                  ROUND(@ORDAVAMT / @I_vXCHGRATE, @DECPLCUR)
                                              ELSE
                                                  0
                                          END;
                END;
                ELSE
                BEGIN
                    SELECT @I_vDISAVAMT = ROUND((@I_vDSCPCTAM / 100.0) * @PymtTermAmnt, @DECPLCUR);
                    SELECT @ORDAVAMT = @I_vDISAVAMT;
                END;
            END;
            ELSE IF (@DSCLCTYP = 2)
            BEGIN
                SELECT @I_vDSCPCTAM = 0;
                IF (@ISMCTRX = 1)
                BEGIN
                    SELECT @I_vDISAVAMT = @DSCDLRAM,
                           @I_vDSCDLRAM = @DSCDLRAM;
                    SELECT @ORDAVAMT = CASE
                                           WHEN (@I_vRTCLCMTD = 0) THEN
                                               ROUND(@I_vDISAVAMT / @I_vXCHGRATE, @ORDECPLCUR)
                                           WHEN (@I_vRTCLCMTD = 1) THEN
                                               ROUND(@I_vDISAVAMT * @I_vXCHGRATE, @ORDECPLCUR)
                                           ELSE
                                               0
                                       END;
                    SELECT @ORDDLRAT = @ORDAVAMT;
                END;
                ELSE
                BEGIN
                    SELECT @I_vDSCDLRAM = @DSCDLRAM,
                           @I_vDISAVAMT = @DSCDLRAM;
                    SELECT @ORDDLRAT = 0,
                           @ORDAVAMT = @I_vDISAVAMT;
                END;
            END;
        END;
        ELSE IF (@ISMCTRX = 1)
        BEGIN
            SELECT @ORDAVAMT = @I_vDISAVAMT;
            SELECT @I_vDISAVAMT = CASE
                                      WHEN (@I_vRTCLCMTD = 0) THEN
                                          ROUND(@ORDAVAMT * @I_vXCHGRATE, @DECPLCUR)
                                      WHEN (@I_vRTCLCMTD = 1) THEN
                                          ROUND(@ORDAVAMT / @I_vXCHGRATE, @DECPLCUR)
                                      ELSE
                                          0
                                  END;
            SELECT @ORDAVAMT = ROUND(@ORDAVAMT, @ORDECPLCUR);
            IF ((@I_vDSCPCTAM = 0) AND (@I_vDSCDLRAM <> 0))
            BEGIN
                SELECT @ORDDLRAT = @ORDAVAMT;
                SELECT @I_vDSCDLRAM = @I_vDISAVAMT;
            END;
        END;
        ELSE
        BEGIN
            SELECT @I_vDISAVAMT = ROUND(@I_vDISAVAMT, @DECPLCUR);
        END;
    END;
    ELSE
    BEGIN
        SELECT @I_vPYMTRMID = '',
               @I_vDISAVAMT = 0,
               @I_vDSCDLRAM = 0,
               @I_vDSCPCTAM = 0;
    END;
    IF (@I_vPYMTRMID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM SY03300 (NOLOCK)
            WHERE PYMTRMID = @I_vPYMTRMID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 626;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vPYMTRMID = '')
       AND (@I_vDUEDATE = '')
       AND (@I_vDISCDATE = '')
    BEGIN
        SELECT @I_vDUEDATE = @I_vDOCDATE,
               @I_vDISCDATE = @I_vDOCDATE;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vCBKIDCSH = ''))
    BEGIN
        SELECT @O_iErrorState = 203;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vCASHDATE = ''))
    BEGIN
        SELECT @O_iErrorState = 204;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vDCNUMCSH = ''))
    BEGIN
        SELECT @O_iErrorState = 205;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vDCNUMCSH <> ''))
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM RM00401 (NOLOCK)
            WHERE RMDTYPAL = 9
                  AND DOCNUMBR = @I_vDCNUMCSH
        )
           )
        BEGIN
            SELECT @O_iErrorState = 241;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (
           (@I_vCASHAMNT = 0)
           AND
           (
               @I_vCBKIDCSH <> ''
               OR @I_vDCNUMCSH <> ''
               OR @I_vCASHDATE <> ''
           )
       )
    BEGIN
        SELECT @O_iErrorState = 642;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vCBKIDCHK = ''))
    BEGIN
        SELECT @O_iErrorState = 206;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vCHEKDATE = ''))
    BEGIN
        SELECT @O_iErrorState = 808;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vDCNUMCHK = ''))
    BEGIN
        SELECT @O_iErrorState = 644;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vDCNUMCHK <> ''))
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM RM00401 (NOLOCK)
            WHERE RMDTYPAL = 9
                  AND DOCNUMBR = @I_vDCNUMCHK
        )
           )
        BEGIN
            SELECT @O_iErrorState = 645;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (
           (@I_vCHEKAMNT = 0)
           AND
           (
               @I_vCBKIDCHK <> ''
               OR @I_vCHEKNMBR <> ''
               OR @I_vCHEKDATE <> ''
               OR @I_vDCNUMCHK <> ''
           )
       )
    BEGIN
        SELECT @O_iErrorState = 643;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vCRCRDNAM = ''))
    BEGIN
        SELECT @O_iErrorState = 809;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vCRCARDDT = ''))
    BEGIN
        SELECT @O_iErrorState = 615;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vDCNUMCRD = '') AND (@I_vRMDTYPAL <> 8))
    BEGIN
        SELECT @O_iErrorState = 616;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vDCNUMCRD <> ''))
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM RM00401 (NOLOCK)
            WHERE RMDTYPAL = 9
                  AND DOCNUMBR = @I_vDCNUMCRD
        )
           )
        BEGIN
            SELECT @O_iErrorState = 646;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
    END;
    IF (@I_vPPSAMDED > @I_vDOCAMNT)
    BEGIN
        SELECT @O_iErrorState = 617;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vPPSAMDED > @I_vWROFAMNT)
    BEGIN
        SELECT @O_iErrorState = 618;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vGSTDSAMT > @I_vDISTKNAM)
    BEGIN
        SELECT @O_iErrorState = 619;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vDOCAMNT <> @I_vSLSAMNT - @I_vTRDISAMT + @I_vFRTAMNT + @I_vMISCAMNT + @I_vTAXAMNT)
    BEGIN
        SELECT @O_iErrorState = 621;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vRMDTYPAL = 7 OR @I_vRMDTYPAL = 6) AND (@I_vCASHAMNT <> 0))
    BEGIN
        SELECT @O_iErrorState = 622;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vRMDTYPAL = 7 OR @I_vRMDTYPAL = 6) AND (@I_vCHEKAMNT <> 0))
    BEGIN
        SELECT @O_iErrorState = 623;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vRMDTYPAL = 7 OR @I_vRMDTYPAL = 6) AND (@I_vCRCRDAMT <> 0))
    BEGIN
        SELECT @O_iErrorState = 624;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vRMDTYPAL = 6 AND @I_vDISTKNAM <> 0)
    BEGIN
        SELECT @O_iErrorState = 472;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vRMDTYPAL = 6 AND @I_vPYMTRMID <> '')
    BEGIN
        SELECT @O_iErrorState = 473;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vRMDTYPAL = 7) AND (@I_vPYMTRMID <> ''))
    BEGIN
        SELECT @O_iErrorState = 625;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF ((@I_vRMDTYPAL = 8) AND (@I_vPYMTRMID <> ''))
    BEGIN
        SELECT @O_iErrorState = 474;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vRMDTYPAL NOT IN ( 7, 8 ) AND (@I_vDISCRTND <> 0))
    BEGIN
        SELECT @O_iErrorState = 585;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vRMDTYPAL IN ( 7, 8 ) AND (@I_vDISTKNAM <> 0))
    BEGIN
        SELECT @O_iErrorState = 475;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vDSCDLRAM > 0 AND @I_vDSCPCTAM > 0)
    BEGIN
        SELECT @O_iErrorState = 476;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
    END;
    IF (@I_vRMDTYPAL IN ( 6, 7, 8 ))
    BEGIN
        SELECT @I_vDUEDATE = @I_vDOCDATE;
        SELECT @I_vDISCDATE = @I_vDOCDATE;
    END;
    ELSE
    BEGIN
        EXEC @iStatus = taCalcDueDateRM @I_vCUSTNMBR = @I_vCUSTNMBR,
                                        @I_vPYMTRMID = @I_vPYMTRMID,
                                        @I_vDOCDATE = @I_vDOCDATE,
                                        @O_dDISCDATE = @dDISCDATE OUTPUT,
                                        @O_dDUEDATE = @dDUEDATE OUTPUT,
                                        @O_iErrorState = @iCalcDueDateErrState OUTPUT,
                                        @oErrString = @iCalcDueDateErrString OUTPUT;
        SELECT @iError = @@error;
        IF @iStatus = 0
           AND @iError <> 0
        BEGIN
            SELECT @iStatus = @iError;
        END;
        IF (@iStatus <> 0)
           OR
           (
               @iCalcDueDateErrState <> 0
               OR @dDISCDATE = NULL
               OR @dDUEDATE = NULL
           )
        BEGIN
            SELECT @oErrString = RTRIM(@oErrString) + ' ' + LTRIM(RTRIM(@iCalcDueDateErrString));
            SELECT @O_iErrorState = 482;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            RETURN (@O_iErrorState);
        END;
        IF (@I_vDUEDATE = '')
            SELECT @I_vDUEDATE = @dDUEDATE;
        IF (@I_vDISCDATE = '')
            SELECT @I_vDISCDATE = @dDISCDATE;
    END;
    IF (@O_iErrorState <> 0)
    BEGIN
        BREAK;
    END;
    SELECT @ORCTRXAM = CASE @I_vRMDTYPAL
                           WHEN 6 THEN
                               0
                           WHEN 7 THEN
        (@I_vDOCAMNT - @I_vDISCRTND)
                           ELSE
        (@I_vDOCAMNT - @I_vCASHAMNT - @I_vCHEKAMNT - @I_vCRCRDAMT - @I_vDISTKNAM)
                       END,
           @ORSLSAMT = @I_vSLSAMNT,
           @ORCSTAMT = @I_vCOSTAMNT,
           @ORFRTAMT = @I_vFRTAMNT,
           @ORMISCAMT = @I_vMISCAMNT,
           @ORTAXAMT = @I_vTAXAMNT,
           @ORCASAMT = @I_vCASHAMNT,
           @ORCHKAMT = @I_vCHEKAMNT,
           @ORCCDAMT = @I_vCRCRDAMT,
           @ORDISTKN = @I_vDISTKNAM,
           @ORDISRTD = @I_vDISCRTND,
           @ORTDISAM = @I_vTRDISAMT,
           @ORORGTRX = @I_vDOCAMNT,
           @ORWROFAM = @I_vWROFAMNT,
           @ORCOMAMT = @I_vCOMDLRAM,
           @ORBKTSLS = @I_vBKTSLSAM,
           @ORBKTFRT = @I_vBKTFRTAM,
           @ORBKTMSC = @I_vBKTMSCAM;
    IF (@ISMCTRX = 1)
    BEGIN
        IF (
               (@I_vDOCAMNT <> ROUND(@I_vDOCAMNT, @ORDECPLCUR, 1))
               OR (@I_vSLSAMNT <> ROUND(@I_vSLSAMNT, @ORDECPLCUR, 1))
               OR (@I_vCOSTAMNT <> ROUND(@I_vCOSTAMNT, @ORDECPLCUR, 1))
               OR (@I_vTRDISAMT <> ROUND(@I_vTRDISAMT, @ORDECPLCUR, 1))
               OR (@I_vFRTAMNT <> ROUND(@I_vFRTAMNT, @ORDECPLCUR, 1))
               OR (@I_vMISCAMNT <> ROUND(@I_vMISCAMNT, @ORDECPLCUR, 1))
               OR (@I_vTAXAMNT <> ROUND(@I_vTAXAMNT, @ORDECPLCUR, 1))
               OR (@I_vBKTSLSAM <> ROUND(@I_vBKTSLSAM, @ORDECPLCUR, 1))
               OR (@I_vBKTFRTAM <> ROUND(@I_vBKTFRTAM, @ORDECPLCUR, 1))
               OR (@I_vBKTMSCAM <> ROUND(@I_vBKTMSCAM, @ORDECPLCUR, 1))
               OR (@I_vCASHAMNT <> ROUND(@I_vCASHAMNT, @ORDECPLCUR, 1))
               OR (@I_vCHEKAMNT <> ROUND(@I_vCHEKAMNT, @ORDECPLCUR, 1))
               OR (@I_vCRCRDAMT <> ROUND(@I_vCRCRDAMT, @ORDECPLCUR, 1))
               OR (@I_vDISCRTND <> ROUND(@I_vDISCRTND, @ORDECPLCUR, 1))
               OR (@I_vDISTKNAM <> ROUND(@I_vDISTKNAM, @ORDECPLCUR, 1))
               OR (@I_vWROFAMNT <> ROUND(@I_vWROFAMNT, @ORDECPLCUR, 1))
               OR (@I_vPPSAMDED <> ROUND(@I_vPPSAMDED, @ORDECPLCUR, 1))
               OR (@I_vGSTDSAMT <> ROUND(@I_vGSTDSAMT, @ORDECPLCUR, 1))
               OR (@I_vDSCDLRAM <> ROUND(@I_vDSCDLRAM, @ORDECPLCUR, 1))
           )
        BEGIN
            SELECT @O_iErrorState = 4643;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            RETURN (@O_iErrorState);
        END;
        IF (
               (
                   @I_vCASHDATE <> ''
                   AND @I_vCASHDATE <> @I_vDOCDATE
               )
               OR
               (
                   @I_vCRCARDDT <> ''
                   AND @I_vCRCARDDT <> @I_vDOCDATE
               )
               OR
               (
                   @I_vCHEKDATE <> ''
                   AND @I_vCHEKDATE <> @I_vDOCDATE
               )
           )
        BEGIN
            SELECT @O_iErrorState = 1322;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            RETURN (@O_iErrorState);
        END;
        INSERT MC020102
        (
            DCSTATUS,
            RMDTYPAL,
            DOCNUMBR,
            DOCDATE,
            CUSTNMBR,
            CURNCYID,
            TRXSORCE,
            CURRNIDX,
            RATETPID,
            EXGTBLID,
            XCHGRATE,
            EXCHDATE,
            TIME1,
            RTCLCMTD,
            ORCTRXAM,
            ORSLSAMT,
            ORCSTAMT,
            ORFRTAMT,
            ORMISCAMT,
            ORTAXAMT,
            ORCASAMT,
            ORCHKAMT,
            ORCCDAMT,
            ORAPPAMT,
            ORDISTKN,
            ORDAVAMT,
            ORDATKN,
            ORDISRTD,
            ORDDLRAT,
            ORTDISAM,
            ORORGTRX,
            ORWROFAM,
            ORCOMAMT,
            ORBKTSLS,
            ORBKTFRT,
            ORBKTMSC,
            UNGANLOS,
            RMMCERRS,
            DENXRATE,
            MCTRXSTT,
            OrigBackoutTradeDisc
        )
        SELECT 1,
               @I_vRMDTYPAL,
               @I_vDOCNUMBR,
               @I_vDOCDATE,
               @I_vCUSTNMBR,
               @I_vCURNCYID,
               '',
               @CURRNIDX,
               @I_vRATETPID,
               @EXGTBLID,
               @I_vXCHGRATE,
               @I_vEXCHDATE,
               @I_vTIME1,
               @I_vRTCLCMTD,
               @ORCTRXAM,
               @ORSLSAMT,
               @ORCSTAMT,
               @ORFRTAMT,
               @ORMISCAMT,
               @ORTAXAMT,
               @ORCASAMT,
               @ORCHKAMT,
               @ORCCDAMT,
               0,
               @ORDISTKN,
               @ORDAVAMT,
               @ORDATKN,
               @ORDISRTD,
               @ORDDLRAT,
               @ORTDISAM,
               @ORORGTRX,
               @ORWROFAM,
               @ORCOMAMT,
               @ORBKTSLS,
               @ORBKTFRT,
               @ORBKTMSC,
               0,
               0,
               0,
               0,
               0;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 539;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
        IF (@I_vXCHGRATE = 0)
        BEGIN
            SELECT @O_iErrorState = 551;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
        IF @I_vRTCLCMTD = 0
        BEGIN
            SELECT @I_vSLSAMNT = ROUND(@I_vSLSAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vCOSTAMNT = ROUND(@I_vCOSTAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vTRDISAMT = ROUND(@I_vTRDISAMT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vFRTAMNT = ROUND(@I_vFRTAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vMISCAMNT = ROUND(@I_vMISCAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vTAXAMNT = ROUND(@I_vTAXAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vBKTSLSAM = ROUND(@I_vBKTSLSAM * @I_vXCHGRATE, @DECPLCUR),
                   @I_vBKTFRTAM = ROUND(@I_vBKTFRTAM * @I_vXCHGRATE, @DECPLCUR),
                   @I_vBKTMSCAM = ROUND(@I_vBKTMSCAM * @I_vXCHGRATE, @DECPLCUR),
                   @I_vCASHAMNT = ROUND(@I_vCASHAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vCHEKAMNT = ROUND(@I_vCHEKAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vCRCRDAMT = ROUND(@I_vCRCRDAMT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vDISCRTND = ROUND(@I_vDISCRTND * @I_vXCHGRATE, @DECPLCUR),
                   @I_vDISTKNAM = ROUND(@I_vDISTKNAM * @I_vXCHGRATE, @DECPLCUR),
                   @I_vWROFAMNT = ROUND(@I_vWROFAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vPPSAMDED = ROUND(@I_vPPSAMDED * @I_vXCHGRATE, @DECPLCUR),
                   @I_vGSTDSAMT = ROUND(@I_vGSTDSAMT * @I_vXCHGRATE, @DECPLCUR);
        END;
        ELSE IF @I_vRTCLCMTD = 1
        BEGIN
            SELECT @I_vSLSAMNT = ROUND(@I_vSLSAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vCOSTAMNT = ROUND(@I_vCOSTAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vTRDISAMT = ROUND(@I_vTRDISAMT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vFRTAMNT = ROUND(@I_vFRTAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vMISCAMNT = ROUND(@I_vMISCAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vTAXAMNT = ROUND(@I_vTAXAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vBKTSLSAM = ROUND(@I_vBKTSLSAM / @I_vXCHGRATE, @DECPLCUR),
                   @I_vBKTFRTAM = ROUND(@I_vBKTFRTAM / @I_vXCHGRATE, @DECPLCUR),
                   @I_vBKTMSCAM = ROUND(@I_vBKTMSCAM / @I_vXCHGRATE, @DECPLCUR),
                   @I_vCASHAMNT = ROUND(@I_vCASHAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vCHEKAMNT = ROUND(@I_vCHEKAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vCRCRDAMT = ROUND(@I_vCRCRDAMT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vDISCRTND = ROUND(@I_vDISCRTND / @I_vXCHGRATE, @DECPLCUR),
                   @I_vDISTKNAM = ROUND(@I_vDISTKNAM / @I_vXCHGRATE, @DECPLCUR),
                   @I_vWROFAMNT = ROUND(@I_vWROFAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vPPSAMDED = ROUND(@I_vPPSAMDED / @I_vXCHGRATE, @DECPLCUR),
                   @I_vGSTDSAMT = ROUND(@I_vGSTDSAMT / @I_vXCHGRATE, @DECPLCUR);
        END;
        IF ((@ISMCTRX = 1) AND (@I_vRTCLCMTD = 0))
        BEGIN
            UPDATE RM10601
            SET TAXAMNT = ROUND(TAXAMNT * @I_vXCHGRATE, @DECPLCUR),
                ORTAXAMT = TAXAMNT,
                STAXAMNT = ROUND(STAXAMNT * @I_vXCHGRATE, @DECPLCUR),
                ORSLSTAX = STAXAMNT,
                FRTTXAMT = ROUND(FRTTXAMT * @I_vXCHGRATE, @DECPLCUR),
                ORFRTTAX = FRTTXAMT,
                MSCTXAMT = ROUND(MSCTXAMT * @I_vXCHGRATE, @DECPLCUR),
                ORMSCTAX = MSCTXAMT,
                TAXDTSLS = ROUND(TAXDTSLS * @I_vXCHGRATE, @DECPLCUR),
                ORTOTSLS = TAXDTSLS,
                TDTTXSLS = ROUND(TDTTXSLS * @I_vXCHGRATE, @DECPLCUR),
                ORTXSLS = TDTTXSLS,
                CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 540;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
            UPDATE RM10101
            SET DEBITAMT = ROUND(DEBITAMT * @I_vXCHGRATE, @DECPLCUR),
                ORDBTAMT = DEBITAMT,
                CRDTAMNT = ROUND(CRDTAMNT * @I_vXCHGRATE, @DECPLCUR),
                ORCRDAMT = CRDTAMNT,
                CURNCYID = @I_vCURNCYID,
                CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR
                  AND DISTTYPE <> 25;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 1505;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
            UPDATE RM10501
            SET NCOMAMNT = ROUND(NCOMAMNT * @I_vXCHGRATE, @DECPLCUR),
                SLSAMNT = ROUND(SLSAMNT * @I_vXCHGRATE, @DECPLCUR),
                COMDLRAM = ROUND(COMDLRAM * @I_vXCHGRATE, @DECPLCUR),
                CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 7451;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
        END;
        ELSE IF ((@ISMCTRX = 1) AND (@I_vRTCLCMTD = 1))
        BEGIN
            UPDATE RM10601
            SET TAXAMNT = ROUND(TAXAMNT / @I_vXCHGRATE, @DECPLCUR),
                ORTAXAMT = TAXAMNT,
                STAXAMNT = ROUND(STAXAMNT / @I_vXCHGRATE, @DECPLCUR),
                ORSLSTAX = STAXAMNT,
                FRTTXAMT = ROUND(FRTTXAMT / @I_vXCHGRATE, @DECPLCUR),
                ORFRTTAX = FRTTXAMT,
                MSCTXAMT = ROUND(MSCTXAMT / @I_vXCHGRATE, @DECPLCUR),
                ORMSCTAX = MSCTXAMT,
                TAXDTSLS = ROUND(TAXDTSLS / @I_vXCHGRATE, @DECPLCUR),
                ORTOTSLS = TAXDTSLS,
                TDTTXSLS = ROUND(TDTTXSLS / @I_vXCHGRATE, @DECPLCUR),
                ORTXSLS = TDTTXSLS,
                CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 541;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
            UPDATE RM10101
            SET DEBITAMT = ROUND(DEBITAMT / @I_vXCHGRATE, @DECPLCUR),
                ORDBTAMT = DEBITAMT,
                CRDTAMNT = ROUND(CRDTAMNT / @I_vXCHGRATE, @DECPLCUR),
                ORCRDAMT = CRDTAMNT,
                CURNCYID = @I_vCURNCYID,
                CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR
                  AND DISTTYPE <> 25;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 1389;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
            UPDATE RM10501
            SET NCOMAMNT = ROUND(NCOMAMNT / @I_vXCHGRATE, @DECPLCUR),
                SLSAMNT = ROUND(SLSAMNT / @I_vXCHGRATE, @DECPLCUR),
                COMDLRAM = ROUND(COMDLRAM / @I_vXCHGRATE, @DECPLCUR),
                CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 7452;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
        END;
        SELECT @I_vTAXAMNT = ISNULL(SUM(TAXAMNT), 0)
        FROM RM10601 (NOLOCK)
        WHERE RMDTYPAL = @I_vRMDTYPAL
              AND DOCNUMBR = @I_vDOCNUMBR;
        SELECT @I_vDOCAMNT = @I_vSLSAMNT - @I_vTRDISAMT + @I_vFRTAMNT + @I_vMISCAMNT + @I_vTAXAMNT + @ROUNDAMT;
    END;
    ELSE
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM RM00101 (NOLOCK)
            WHERE CUSTNMBR = @I_vCUSTNMBR
                  AND
                  (
                      CURNCYID = @I_vCURNCYID
                      OR CURNCYID = ''
                  )
        )
           )
        BEGIN
            UPDATE RM10101
            SET CURNCYID = @I_vCURNCYID,
                CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 4016;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
            UPDATE RM10601
            SET CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 4017;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
            UPDATE RM10501
            SET CURRNIDX = @CURRNIDX
            WHERE RMDTYPAL = @I_vRMDTYPAL
                  AND DOCNUMBR = @I_vDOCNUMBR;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 7453;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
        END;
    END;
    INSERT RM00401
    (
        DOCNUMBR,
        RMDTYPAL,
        DCSTATUS,
        BCHSOURC,
        TRXSORCE,
        CUSTNMBR,
        DOCDATE,
        NEGQTYSOPINV
    )
    SELECT @I_vDOCNUMBR,
           @I_vRMDTYPAL,
           1,
           'RM_Sales',
           '',
           @I_vCUSTNMBR,
           @I_vDOCDATE,
           0;
    IF (@@error <> 0)
    BEGIN
        SELECT @O_iErrorState = 609;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
        BREAK;
    END;
    IF (@I_vDCNUMCSH <> '')
    BEGIN
        INSERT RM00401
        (
            DOCNUMBR,
            RMDTYPAL,
            DCSTATUS,
            BCHSOURC,
            TRXSORCE,
            CUSTNMBR,
            DOCDATE,
            NEGQTYSOPINV
        )
        SELECT @I_vDCNUMCSH,
               9,
               0,
               'RM_Sales',
               '',
               @I_vCUSTNMBR,
               @I_vCASHDATE,
               0;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 641;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
    END;
    IF (@I_vDCNUMCHK <> '')
    BEGIN
        INSERT RM00401
        (
            DOCNUMBR,
            RMDTYPAL,
            DCSTATUS,
            BCHSOURC,
            TRXSORCE,
            CUSTNMBR,
            CHEKNMBR,
            DOCDATE,
            NEGQTYSOPINV
        )
        SELECT @I_vDCNUMCHK,
               9,
               0,
               'RM_Sales',
               '',
               @I_vCUSTNMBR,
               @I_vCHEKNMBR,
               @I_vCHEKDATE,
               0;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 647;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
    END;
    IF (@I_vDCNUMCRD <> '')
    BEGIN
        INSERT RM00401
        (
            DOCNUMBR,
            RMDTYPAL,
            DCSTATUS,
            BCHSOURC,
            TRXSORCE,
            CUSTNMBR,
            DOCDATE,
            NEGQTYSOPINV
        )
        SELECT @I_vDCNUMCRD,
               9,
               0,
               'RM_Sales',
               '',
               @I_vCUSTNMBR,
               @I_vCRCARDDT,
               0;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 648;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
    END;
    IF (@ORBKTSLS > 0)
    BEGIN
        SELECT @BACKOUTAMT = @I_vSLSAMNT - @ORBKTSLS;
    END;
    EXEC @iStatus = taRMDistributionCreate @I_vRMDTYPAL = @I_vRMDTYPAL,
                                           @I_vDOCNUMBR = @I_vDOCNUMBR,
                                           @I_vCUSTNMBR = @I_vCUSTNMBR,
                                           @I_vCURRNIDX = @CURRNIDX,
                                           @I_vCURNCYID = @I_vCURNCYID,
                                           @I_vPTDUSRID = @I_vPTDUSRID,
                                           @I_vTRADEAMT = @I_vTRDISAMT,
                                           @I_vFREIGHTAMT = @I_vFRTAMNT,
                                           @I_vMISCAMNT = @I_vMISCAMNT,
                                           @I_vCASHAMT = @I_vCASHAMNT,
                                           @I_vCashCHEKBKID = @I_vCBKIDCSH,
                                           @I_vCHECKAMT = @I_vCHEKAMNT,
                                           @I_vCheckCHEKBKID = @I_vCBKIDCHK,
                                           @I_vCRCRDAMT = @I_vCRCRDAMT,
                                           @I_vTDISTKAMT = @I_vDISTKNAM,
                                           @I_vDISAVAMT = @I_vDISAVAMT,
                                           @I_vCRCRDNAM = @I_vCRCRDNAM,
                                           @I_vDISCRTND = @I_vDISCRTND,
                                           @I_vDOCAMNT = @I_vDOCAMNT,
                                           @I_vSLSAMNT = @I_vSLSAMNT,
                                           @I_vCOSTAMNT = @I_vCOSTAMNT,
                                           @I_vCOMDLRAM = @I_vCOMDLRAM,
                                           @I_vRATETPID = @I_vRATETPID,
                                           @I_vXCHGRATE = @I_vXCHGRATE,
                                           @I_vEXCHDATE = @I_vEXCHDATE,
                                           @I_vEXPNDATE = @I_vEXPNDATE,
                                           @I_vEXGTBLID = @EXGTBLID,
                                           @I_vTIME1 = @I_vTIME1,
                                           @I_vFNDECPLCUR = @DECPLCUR,
                                           @I_vORCTRXAM = @ORCTRXAM,
                                           @I_vORSLSAMT = @ORSLSAMT,
                                           @I_vORCSTAMT = @ORCSTAMT,
                                           @I_vORFRTAMT = @ORFRTAMT,
                                           @I_vORMISCAMT = @ORMISCAMT,
                                           @I_vORTAXAMT = @ORTAXAMT,
                                           @I_vORCASAMT = @ORCASAMT,
                                           @I_vORCHKAMT = @ORCHKAMT,
                                           @I_vORCCDAMT = @ORCCDAMT,
                                           @I_vORAPPAMT = @ORAPPAMT,
                                           @I_vORDISTKN = @ORDISTKN,
                                           @I_vORDAVAMT = @ORDAVAMT,
                                           @I_vORDATKN = @ORDATKN,
                                           @I_vORDISRTD = @ORDISRTD,
                                           @I_vORDDLRAT = @ORDDLRAT,
                                           @I_vORTDISAM = @ORTDISAM,
                                           @I_vORORGTRX = @ORORGTRX,
                                           @I_vORWROFAM = @ORWROFAM,
                                           @I_vORCOMAMT = @ORCOMAMT,
                                           @I_vORBKTSLS = @BACKOUTAMT,
                                           @I_vORBKTFRT = @ORBKTFRT,
                                           @I_vORBKTMSC = @ORBKTMSC,
                                           @I_vApply = 0,
                                           @I_vTRXSORCE = '',
                                           @I_vWROFAMNT = 0,
                                           @I_vDistRef = '',
                                           @I_vPOSTEDDT = '',
                                           @I_vCMPANYID = @CMPANYID,
                                           @I_vINTERID = @INTERID,
                                           @I_vRTCLCMTD = @I_vRTCLCMTD,
                                           @I_vDECPLCUR = @ORDECPLCUR,
                                           @I_vCREATEDIST = @I_vCREATEDIST,
                                           @O_iErrorState = @iUpdDistErrState OUTPUT,
                                           @oErrString = @oErrString OUTPUT;
    SELECT @iError = @@error;
    IF @iStatus = 0
       AND @iError <> 0
        SELECT @iStatus = @iError;
    IF (@iStatus <> 0)
       OR (@iUpdDistErrState <> 0)
    BEGIN
        IF (@iUpdDistErrState <> 0)
        BEGIN
            EXEC @iStatus = taUpdateString @iUpdDistErrState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
        END;
        SELECT @O_iErrorState = 628;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
        BREAK;
    END;
    IF (@iError <> 0)
    BEGIN
        SELECT @O_iErrorState = 611;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
        BREAK;
    END;
    IF (@ISMCTRX = 1)
    BEGIN
        SELECT @ROUNDAMT = DEBITAMT
        FROM RM10101 (NOLOCK)
        WHERE DOCNUMBR = @I_vDOCNUMBR
              AND RMDTYPAL = @I_vRMDTYPAL
              AND DISTTYPE = 26;
        IF (@ROUNDAMT = 0)
        BEGIN
            SELECT @ROUNDAMT = CRDTAMNT * -1
            FROM RM10101 (NOLOCK)
            WHERE DOCNUMBR = @I_vDOCNUMBR
                  AND RMDTYPAL = @I_vRMDTYPAL
                  AND DISTTYPE = 26;
        END;
        SELECT @I_vDOCAMNT = @I_vSLSAMNT - @I_vTRDISAMT + @I_vFRTAMNT + @I_vMISCAMNT + @I_vTAXAMNT + @ROUNDAMT;
    END;
    IF (@I_vRequesterTrx = 0)
    BEGIN
        EXEC @iStatus = eConnectOutVerify @I_vDOCTYPE = 'Receivables_Transaction',
                                          @I_vINDEX1 = @I_vRMDTYPAL,
                                          @I_vINDEX2 = @I_vDOCNUMBR,
                                          @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
           AND @iError <> 0
        BEGIN
            SELECT @iStatus = @iError;
        END;
        IF (@iStatus <> 0)
           OR (@iCustomState <> 0)
        BEGIN
            SELECT @O_iErrorState = 1298;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            RETURN (@O_iErrorState);
        END;
    END;
    SELECT @SLSCHDID = SLSCHDID,
           @FRTSCHID = FRTSCHID,
           @MSCSCHID = MSCSCHID
    FROM RM40101 (NOLOCK)
    WHERE SETUPKEY = 1;
    INSERT RM10301
    (
        DOCTYPE,
        RMDTYPAL,
        RMDNUMWK,
        DOCNUMBR,
        DOCPRFIX,
        DOCDESCR,
        DOCDATE,
        BACHNUMB,
        BCHSOURC,
        NOTEINDX,
        CUSTNMBR,
        CUSTNAME,
        ADRSCODE,
        SLPRSNID,
        SALSTERR,
        COMAPPTO,
        COMDLRAM,
        NCOMAMNT,
        SHIPMTHD,
        CSTPONBR,
        TAXSCHID,
        SLSCHDID,
        FRTSCHID,
        MSCSCHID,
        COSTAMNT,
        SLSAMNT,
        TRDISAMT,
        TRDDISCT,
        FRTAMNT,
        MISCAMNT,
        TAXAMNT,
        BKTSLSAM,
        BKTFRTAM,
        BKTMSCAM,
        TXENGCLD,
        DOCAMNT,
        APPLDAMT,
        CASHAMNT,
        CBKIDCSH,
        CASHDATE,
        DCNUMCSH,
        CHEKAMNT,
        CBKIDCHK,
        CBKIDCRD,
        CHEKNMBR,
        CHEKDATE,
        DCNUMCHK,
        CRCRDAMT,
        CRCRDNAM,
        RCTNCCRD,
        CRCARDDT,
        DCNUMCRD,
        DISCRTND,
        DISTKNAM,
        DISAVTKN,
        WROFAMNT,
        PPSAMDED,
        GSTDSAMT,
        ACCTAMNT,
        PYMTRMID,
        DISAVAMT,
        DISCDATE,
        DUEDATE,
        DSCDLRAM,
        DSCPCTAM,
        CURNCYID,
        POSTED,
        LSTEDTDT,
        LSTUSRED,
        RMTREMSG,
        RMDPEMSG,
        GLPOSTDT,
        POSTEDDT,
        PTDUSRID,
        Tax_Date,
        APLYWITH,
        SALEDATE,
        CORRCTN,
        SIMPLIFD,
        CORRNXST,
        DOCNCORR,
        RMTREMSG2,
        DocPrinted,
        DISGRPER,
        DUEGRPER,
        Electronic,
        ECTRX,
        PSTGSTUS,
        BackoutTradeDisc,
        DIRECTDEBIT,
        EFTFLAG
    )
    SELECT @DOCTYPE,
           @I_vRMDTYPAL,
           @I_vDOCNUMBR,
           @I_vDOCNUMBR,
           @DOCPRFIX,
           @I_vDOCDESCR,
           @I_vDOCDATE,
           @I_vBACHNUMB,
           'RM_Sales',
           @NOTEINDX,
           @I_vCUSTNMBR,
           CUSTNAME,
           CASE
               WHEN (@I_vADRSCODE = '') THEN
                   ADRSCODE
               ELSE
                   @I_vADRSCODE
           END,
           @I_vSLPRSNID,
           @I_vSALSTERR,
           @I_vCOMAPPTO,
           @I_vCOMDLRAM,
           @NCOMAMNT,
           CASE
               WHEN (@I_vSHIPMTHD = '')
                    AND (@I_vRMDTYPAL IN ( 1, 5, 8 )) THEN
                   SHIPMTHD
               ELSE
                   @I_vSHIPMTHD
           END,
           @I_vCSTPONBR,
           CASE
               WHEN (@I_vTAXSCHID = '')
                    AND (@I_vRMDTYPAL IN ( 1, 5, 8 )) THEN
                   TAXSCHID
               ELSE
                   @I_vTAXSCHID
           END,
           @SLSCHDID,
           @FRTSCHID,
           @MSCSCHID,
           @I_vCOSTAMNT,
           @I_vSLSAMNT,
           @I_vTRDISAMT,
           @I_vTRDDISCT,
           @I_vFRTAMNT,
           @I_vMISCAMNT,
           @I_vTAXAMNT,
           CASE
               WHEN @I_vBKTSLSAM = 0
                    AND @BACKOUTAMT > 0 THEN
                   @I_vSLSAMNT - @BACKOUTAMT
               ELSE
                   @I_vBKTSLSAM
           END,
           @I_vBKTFRTAM,
           @I_vBKTMSCAM,
           @I_TXENGCLD,
           @I_vDOCAMNT,
           0,
           @I_vCASHAMNT,
           @I_vCBKIDCSH,
           @I_vCASHDATE,
           @I_vDCNUMCSH,
           @I_vCHEKAMNT,
           CASE
               WHEN (@I_vRMDTYPAL IN ( 1, 3, 4, 5, 8 )) THEN
                   @I_vCBKIDCHK
               ELSE
                   ''
           END,
           @I_vCBKIDCRD,
           @I_vCHEKNMBR,
           @I_vCHEKDATE,
           @I_vDCNUMCHK,
           @I_vCRCRDAMT,
           @I_vCRCRDNAM,
           CASE
               WHEN
               (
                   (@I_vRCTNCCRD = '')
                   AND (@I_vCRCRDNAM <> '')
               ) THEN
                   CRCRDNUM
               ELSE
                   @I_vRCTNCCRD
           END,
           @I_vCRCARDDT,
           @I_vDCNUMCRD,
           @I_vDISCRTND,
           @I_vDISTKNAM,
           0,
           @I_vWROFAMNT,
           @I_vPPSAMDED,
           @I_vGSTDSAMT,
           CASE
               WHEN (@I_vRMDTYPAL = 6) THEN
                   0
               WHEN @I_vRMDTYPAL = 7 THEN
           (@I_vDOCAMNT - @I_vDISCRTND)
               WHEN @I_vRMDTYPAL = 8
                    AND (@I_vCASHAMNT = 0)
                    AND (@I_vCHEKAMNT = 0)
                    AND (@I_vCRCRDAMT = 0) THEN
           (@I_vDOCAMNT - @I_vDISCRTND)
               ELSE
           (@I_vDOCAMNT - @I_vCASHAMNT - @I_vCHEKAMNT - @I_vCRCRDAMT - @I_vDISTKNAM)
           END,
           @I_vPYMTRMID,
           @I_vDISAVAMT,
           @I_vDISCDATE,
           @I_vDUEDATE,
           @I_vDSCDLRAM,
           @I_vDSCPCTAM * 100,
           CASE
               WHEN @MCINSTALLED = 1 THEN
                   @I_vCURNCYID
               ELSE
                   ''
           END,
           @POSTED,
           CONVERT(VARCHAR(12), GETDATE()),
           @I_vLSTUSRED,
           0,
           0,
           @I_vDOCDATE,
           '',
           @I_vPTDUSRID,
           @I_vDOCDATE,
           @APLYWITH,
           '',
           @CORRCTN,
           @SIMPLIFD,
           @CORRNXST,
           @DOCNCORR,
           0,
           @DocPrinted,
           DISGRPER,
           DUEGRPER,
           @Electronic,
           @ECTRX,
           20,
           0,
           0,
           0
    FROM RM00101 (NOLOCK)
    WHERE CUSTNMBR = @I_vCUSTNMBR;
    IF (@@error <> 0)
    BEGIN
        SELECT @O_iErrorState = 201;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
        BREAK;
    END;
    IF (@I_vRMDTYPAL IN ( 1, 3, 4, 5 ))
    BEGIN
        UPDATE RM00103
        SET UNPSTDCA = UNPSTDCA + @I_vCASHAMNT + @I_vCHEKAMNT + @I_vCRCRDAMT,
            UNPSTDSA = UNPSTDSA + @I_vSLSAMNT - @I_vTRDISAMT + @I_vFRTAMNT + @I_vMISCAMNT + @I_vTAXAMNT
        WHERE CUSTNMBR = @I_vCUSTNMBR;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 610;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
    END;
    IF (@I_vRMDTYPAL = 7)
    BEGIN
        UPDATE RM00103
        SET UNPSTDCA = UNPSTDCA + @I_vDOCAMNT
        WHERE CUSTNMBR = @I_vCUSTNMBR;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 469;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
    END;
    IF (@I_vRMDTYPAL = 8)
    BEGIN
        UPDATE RM00103
        SET UNPSTDCA = UNPSTDCA - @I_vCASHAMNT - @I_vCHEKAMNT - @I_vCRCRDAMT,
            UNPSTDSA = UNPSTDSA - @I_vSLSAMNT + @I_vTRDISAMT - @I_vFRTAMNT - @I_vMISCAMNT - @I_vTAXAMNT
        WHERE CUSTNMBR = @I_vCUSTNMBR;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 468;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
    END;
    EXEC @iStatus = taCreateUpdateBatchHeaderRcd @I_vBACHNUMB = @I_vBACHNUMB,
                                                 @I_vSERIES = 3,
                                                 @I_vGLPOSTDT = @I_vDOCDATE,
                                                 @I_vBCHSOURC = 'RM_Sales',
                                                 @I_vDOCAMT = @I_vDOCAMNT,
                                                 @I_vORIGIN = 1,
                                                 @I_vNUMOFTRX = 1,
                                                 @I_vCHEKBKID = @I_vBatchCHEKBKID,
                                                 @I_vUSERID = @I_vLSTUSRED,
                                                 @O_iErrorState = @iAddBatchErrState OUTPUT,
                                                 @oErrString = @iCreateBatchErrString OUTPUT;
    SELECT @iError = @@error;
    IF @iStatus = 0
       AND @iError <> 0
        SELECT @iStatus = @iError;
    IF ((@iAddBatchErrState <> 0) OR (@iStatus <> 0))
    BEGIN
        IF (@iAddBatchErrState = 12012)
        BEGIN
            EXEC @iStatus = taUpdateString @iAddBatchErrState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        SELECT @oErrString = RTRIM(ISNULL(@oErrString, '')) + ' ' + @iCreateBatchErrString;
        SELECT @O_iErrorState = 633;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrState OUTPUT;
        BREAK;
    END;
    IF (@ISMCTRX = 0)
       OR
       (
           (NOT EXISTS
    (
        SELECT DISTINCT
               1
        FROM IV00105 (NOLOCK)
        WHERE CURNCYID <> ''
    )
           )
           AND (NOT EXISTS
    (
        SELECT DISTINCT
               1
        FROM CM00100 (NOLOCK)
        WHERE CURNCYID <> ''
    )
               )
       )
    BEGIN
        UPDATE RM10101
        SET ORCRDAMT = 0,
            ORDBTAMT = 0
        WHERE RMDTYPAL = @I_vRMDTYPAL
              AND DOCNUMBR = @I_vDOCNUMBR;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 5469;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrState OUTPUT;
            BREAK;
        END;
        IF EXISTS (SELECT 1 FROM sysobjects (NOLOCK) WHERE name = 'AAG20001')
        BEGIN
            UPDATE AAG20001
            SET ORDBTAMT = 0,
                ORCRDAMT = 0
            WHERE aaSubLedgerHdrID =
            (
                SELECT aaSubLedgerHdrID
                FROM AAG20000 (NOLOCK)
                WHERE DOCNUMBR = @I_vDOCNUMBR
                      AND DOCTYPE = @I_vRMDTYPAL
            );
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 8697;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @O_oErrState OUTPUT;
                BREAK;
            END;
        END;
    END;
    BREAK;
END;
IF @O_iErrorState <> 0
    RETURN (@O_iErrorState);
EXEC @iStatus = taRMTransactionPost @I_vRMDTYPAL,
                                    @I_vDOCNUMBR,
                                    @I_vDOCDATE,
                                    @I_vBACHNUMB,
                                    @I_vCUSTNMBR,
                                    @I_vDOCAMNT,
                                    @I_vSLSAMNT,
                                    @I_vDOCDESCR,
                                    @I_vADRSCODE,
                                    @I_vSLPRSNID,
                                    @I_vSALSTERR,
                                    @I_vSHIPMTHD,
                                    @I_vTAXSCHID,
                                    @I_vCSTPONBR,
                                    @I_vCOSTAMNT,
                                    @I_vTRDISAMT,
                                    @I_vTRDDISCT,
                                    @I_vFRTAMNT,
                                    @I_vMISCAMNT,
                                    @I_vTAXAMNT,
                                    @I_vBKTSLSAM,
                                    @I_vBKTFRTAM,
                                    @I_vBKTMSCAM,
                                    @I_vCASHAMNT,
                                    @I_vCBKIDCSH,
                                    @I_vCASHDATE,
                                    @I_vDCNUMCSH,
                                    @I_vCHEKAMNT,
                                    @I_vCBKIDCHK,
                                    @I_vCBKIDCRD,
                                    @I_vCHEKNMBR,
                                    @I_vCHEKDATE,
                                    @I_vDCNUMCHK,
                                    @I_vCRCRDAMT,
                                    @I_vCRCRDNAM,
                                    @I_vRCTNCCRD,
                                    @I_vCRCARDDT,
                                    @I_vDCNUMCRD,
                                    @I_vDISCRTND,
                                    @I_vDISTKNAM,
                                    @I_vWROFAMNT,
                                    @I_vPPSAMDED,
                                    @I_vGSTDSAMT,
                                    @I_vPYMTRMID,
                                    @I_vDISAVAMT,
                                    @I_vDSCDLRAM,
                                    @I_vDSCPCTAM,
                                    @I_vLSTUSRED,
                                    @I_vPTDUSRID,
                                    @I_vDistRef,
                                    @I_vBatchCHEKBKID,
                                    @I_vDUEDATE,
                                    @I_vDISCDATE,
                                    @I_vCURNCYID,
                                    @I_vXCHGRATE,
                                    @I_vRATETPID,
                                    @I_vEXPNDATE,
                                    @I_vEXCHDATE,
                                    @I_vEXGTBDSC,
                                    @I_vEXTBLSRC,
                                    @I_vRATEEXPR,
                                    @I_vDYSTINCR,
                                    @I_vRATEVARC,
                                    @I_vTRXDTDEF,
                                    @I_vRTCLCMTD,
                                    @I_vPRVDSLMT,
                                    @I_vDATELMTS,
                                    @I_vTIME1,
                                    @I_vCOMDLRAM,
                                    @I_vCOMAPPTO,
                                    @I_vRequesterTrx,
                                    @I_vCREATEDIST,
                                    @I_vUSRDEFND1,
                                    @I_vUSRDEFND2,
                                    @I_vUSRDEFND3,
                                    @I_vUSRDEFND4,
                                    @I_vUSRDEFND5,
                                    @O_iErrorState = @iCustomState OUTPUT,
                                    @oErrString = @iCustomErrString OUTPUT;
SELECT @iError = @@error;
IF @iStatus = 0
   AND @iError <> 0
BEGIN
    SELECT @iStatus = @iError;
END;
IF (@iStatus <> 0)
   OR (@iCustomState <> 0)
BEGIN
    SELECT @oErrString = RTRIM(@oErrString) + ' ' + LTRIM(RTRIM(@iCustomErrString));
    SELECT @O_iErrorState = 162;
    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 = 'Receivables_Transaction',
                                      @I_vINDEX1 = @I_vRMDTYPAL,
                                      @I_vINDEX2 = @I_vDOCNUMBR,
                                      @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
       AND @iError <> 0
    BEGIN
        SELECT @iStatus = @iError;
    END;
    IF (@iStatus <> 0)
       OR (@iCustomState <> 0)
    BEGIN
        SELECT @O_iErrorState = 1299;
        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