taPMTransactionInsert

Full text below. This is from GP2018, NOT SUITABLE TO USE IN PRODUCTION, but it is useful for finding error messages

 

ALTER PROCEDURE [dbo].[taPMTransactionInsert]
    @I_vBACHNUMB CHAR(15),
    @I_vVCHNUMWK CHAR(17),
    @I_vVENDORID CHAR(15),
    @I_vDOCNUMBR CHAR(20),
    @I_vDOCTYPE SMALLINT,
    @I_vDOCAMNT NUMERIC(19, 5),
    @I_vDOCDATE DATETIME,
    @I_vPSTGDATE DATETIME = '',
    @I_vVADCDTRO CHAR(15) = '',
    @I_vVADDCDPR CHAR(15) = '',
    @I_vPYMTRMID CHAR(20) = NULL,
    @I_vTAXSCHID CHAR(15) = '',
    @I_vDUEDATE DATETIME = '',
    @I_vDSCDLRAM NUMERIC(19, 5) = NULL,
    @I_vDISCDATE DATETIME = '',
    @I_vPRCHAMNT NUMERIC(19, 5) = 0,
    @I_vCHRGAMNT NUMERIC(19, 5) = 0,
    @I_vCASHAMNT NUMERIC(19, 5) = 0,
    @I_vCAMCBKID CHAR(15) = '',
    @I_vCDOCNMBR CHAR(20) = '',
    @I_vCAMTDATE DATETIME = '',
    @I_vCAMPMTNM CHAR(20) = '',
    @I_vCHEKAMNT NUMERIC(19, 5) = 0,
    @I_vCHAMCBID CHAR(15) = '',
    @I_vCHEKDATE DATETIME = '',
    @I_vCAMPYNBR CHAR(20) = '',
    @I_vCRCRDAMT NUMERIC(19, 5) = 0,
    @I_vCCAMPYNM CHAR(20) = '',
    @I_vCHEKNMBR CHAR(20) = '',
    @I_vCARDNAME CHAR(15) = '',
    @I_vCCRCTNUM CHAR(20) = '',
    @I_vCRCARDDT DATETIME = '',
    @I_vCHEKBKID CHAR(15) = '',
    @I_vTRXDSCRN CHAR(30) = '',
    @I_vTRDISAMT NUMERIC(19, 5) = 0,
    @I_vTAXAMNT NUMERIC(19, 5) = 0,
    @I_vFRTAMNT NUMERIC(19, 5) = 0,
    @I_vTEN99AMNT NUMERIC(19, 5) = 0,
    @I_vMSCCHAMT NUMERIC(19, 5) = 0,
    @I_vPORDNMBR CHAR(20) = '',
    @I_vSHIPMTHD CHAR(15) = NULL,
    @I_vDISAMTAV NUMERIC(19, 5) = NULL,
    @I_vDISTKNAM NUMERIC(19, 5) = 0,
    @I_vAPDSTKAM NUMERIC(19, 5) = 0,
    @I_vMDFUSRID CHAR(15) = '',
    @I_vPOSTEDDT DATETIME = '',
    @I_vPTDUSRID CHAR(15) = '',
    @I_vPCHSCHID CHAR(15) = '',
    @I_vFRTSCHID CHAR(15) = '',
    @I_vMSCSCHID CHAR(15) = '',
    @I_vPRCTDISC NUMERIC(19, 2) = NULL,
    @I_vTax_Date 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_vBatchCHEKBKID CHAR(15) = '',
    @I_vCREATEDIST SMALLINT = 1,
    @I_vRequesterTrx SMALLINT = 0,
    @I_vUSRDEFND1 CHAR(50) = '',
    @I_vUSRDEFND2 CHAR(50) = '',
    @I_vUSRDEFND3 CHAR(50) = '',
    @I_vUSRDEFND4 VARCHAR(8000) = '',
    @I_vUSRDEFND5 VARCHAR(8000) = '',
    @O_iErrorState INT OUTPUT,
    @oErrString VARCHAR(255) OUTPUT
AS
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET NOCOUNT ON;
DECLARE @CMPANYID SMALLINT,
        @NOTEINDX NUMERIC(19, 5),
        @FUNLCURR CHAR(15),
        @EXGTBLID CHAR(15),
        @ISMCTRX INT,
        @ORDISTKN NUMERIC(19, 5),
        @ORDDLRAT NUMERIC(19, 5),
        @ORTDISAM NUMERIC(19, 5),
        @OCHGAMT NUMERIC(19, 5),
        @OR1099AM NUMERIC(19, 5),
        @ORCTRXAM NUMERIC(19, 5),
        @ORCASAMT NUMERIC(19, 5),
        @ORCHKAMT NUMERIC(19, 5),
        @ORCCDAMT NUMERIC(19, 5),
        @OMISCAMT NUMERIC(19, 5),
        @ORFRTAMT NUMERIC(19, 5),
        @ORTAXAMT NUMERIC(19, 5),
        @OPURAMT NUMERIC(19, 5),
        @ORDOCAMT NUMERIC(19, 5),
        @ODISAMTAV NUMERIC(19, 5),
        @DECPLCUR SMALLINT,
        @PRCHAMNT NUMERIC(19, 5),
        @CURTRXAM NUMERIC(19, 5),
        @DCSTATUS TINYINT,
        @CNTRLTYP TINYINT,
        @TAXAMNT NUMERIC(19, 5),
        @BCHSOURC CHAR(15),
        @ADUPINNM INT,
        @DSCLCTYP SMALLINT,
        @DSCPCTAM NUMERIC(19, 5),
        @DSCDLRAM NUMERIC(19, 5),
        @dDISCDATE DATETIME,
        @dDUEDATE DATETIME,
        @iCalcDueDateErrState INT,
        @iCalcDueDateErrString VARCHAR(255),
        @iCustomState INT,
        @iCustomErrString VARCHAR(255),
        @iStatement INT,
        @iStatus INT,
        @iAddBatchErrState INT,
        @iAddShippingErrState INT,
        @iAddShippingErrString VARCHAR(255),
        @iCreateBatchErrString VARCHAR(255),
        @CURRNIDX SMALLINT,
        @iAddCodeErrState INT,
        @iError INT,
        @iUpdDistErrState INT,
        @O_oErrorState INT,
        @CreditCardVendorID CHAR(15),
        @O_iInitErrorState INT,
        @oInitErrString VARCHAR(255),
        @SALPURCH SMALLINT,
        @DISCNTCB SMALLINT,
        @FREIGHT SMALLINT,
        @MISC SMALLINT,
        @TAX SMALLINT,
        @PymtTermAmnt NUMERIC(19, 5),
        @ORDECPLCUR SMALLINT,
        @iGetNextNoteIdxErrState INT,
        @round NUMERIC(19, 5),
        @SEQNUMB INT,
        @ROUNDACCT INT,
        @FUNLCURRINDEX INT,
        @INTERID CHAR(5),
        @BKTPURAM NUMERIC(19, 5),
        @MCINSTALLED TINYINT,
        @TEN99TYPE SMALLINT,
        @TEN99BOXNUMBER SMALLINT,
        @OBKPURAMT NUMERIC(19, 5),
        @BKTFRTAM NUMERIC(19, 5),
        @BKTMSCAM NUMERIC(19, 5),
        @ORBKTFRT NUMERIC(19, 5),
        @ORBKTMSC NUMERIC(19, 5),
        @PYBLGRBX TINYINT,
        @BACHNUMB CHAR(15),
        @checkbookid CHAR(15),
        @BatchExists TINYINT,
        @RCVBGRBX TINYINT,
        @Workflow_Status SMALLINT;
SELECT @CURTRXAM = 0,
       @CMPANYID = 0,
       @FUNLCURR = '',
       @EXGTBLID = '',
       @ISMCTRX = 0,
       @ORDISTKN = 0,
       @ORCTRXAM = 0,
       @ORDDLRAT = 0,
       @ORTDISAM = 0,
       @OCHGAMT = 0,
       @OR1099AM = 0,
       @ORCASAMT = 0,
       @ORCHKAMT = 0,
       @ORCCDAMT = 0,
       @OMISCAMT = 0,
       @ORFRTAMT = 0,
       @ORTAXAMT = 0,
       @OPURAMT = 0,
       @ORDOCAMT = 0,
       @ODISAMTAV = 0,
       @DECPLCUR = 0,
       @PRCHAMNT = @I_vPRCHAMNT,
       @DCSTATUS = 1,
       @TAXAMNT = 0,
       @CNTRLTYP = 0,
       @ADUPINNM = 0,
       @DSCLCTYP = 0,
       @DSCPCTAM = 0,
       @DSCDLRAM = 0,
       @dDISCDATE = '',
       @dDUEDATE = '',
       @CURRNIDX = 0,
       @BCHSOURC = 'PM_Trxent',
       @iError = 0,
       @iAddBatchErrState = 0,
       @iAddCodeErrState = 0,
       @iUpdDistErrState = 0,
       @iCalcDueDateErrState = 0,
       @iCalcDueDateErrString = '',
       @iStatus = 0,
       @oErrString = '',
       @O_oErrorState = 0,
       @iStatement = 0,
       @O_iErrorState = 0,
       @SALPURCH = 1,
       @DISCNTCB = 1,
       @FREIGHT = 1,
       @MISC = 1,
       @TAX = 1,
       @PymtTermAmnt = 0,
       @ORDECPLCUR = 0,
       @round = 0,
       @SEQNUMB = 0,
       @ROUNDACCT = 0,
       @FUNLCURRINDEX = 0,
       @INTERID = '',
       @MCINSTALLED = 1,
       @BKTPURAM = 0,
       @INTERID = '',
       @TEN99TYPE = 0,
       @TEN99BOXNUMBER = 0,
       @OBKPURAMT = 0,
       @BKTFRTAM = 0,
       @BKTMSCAM = 0,
       @ORBKTFRT = 0,
       @ORBKTMSC = 0,
       @PYBLGRBX = 0,
       @BACHNUMB = '',
       @checkbookid = '',
       @BatchExists = 0,
       @RCVBGRBX = 0,
       @Workflow_Status = 0;
EXEC @iStatus = taPMTransactionInsertPre @I_vBACHNUMB OUTPUT,
                                         @I_vVCHNUMWK OUTPUT,
                                         @I_vVENDORID OUTPUT,
                                         @I_vDOCNUMBR OUTPUT,
                                         @I_vDOCTYPE OUTPUT,
                                         @I_vDOCAMNT OUTPUT,
                                         @I_vDOCDATE OUTPUT,
                                         @I_vPSTGDATE OUTPUT,
                                         @I_vVADCDTRO OUTPUT,
                                         @I_vVADDCDPR OUTPUT,
                                         @I_vPYMTRMID OUTPUT,
                                         @I_vTAXSCHID OUTPUT,
                                         @I_vDUEDATE OUTPUT,
                                         @I_vDSCDLRAM OUTPUT,
                                         @I_vDISCDATE OUTPUT,
                                         @I_vPRCHAMNT OUTPUT,
                                         @I_vCHRGAMNT OUTPUT,
                                         @I_vCASHAMNT OUTPUT,
                                         @I_vCAMCBKID OUTPUT,
                                         @I_vCDOCNMBR OUTPUT,
                                         @I_vCAMTDATE OUTPUT,
                                         @I_vCAMPMTNM OUTPUT,
                                         @I_vCHEKAMNT OUTPUT,
                                         @I_vCHAMCBID OUTPUT,
                                         @I_vCHEKDATE OUTPUT,
                                         @I_vCAMPYNBR OUTPUT,
                                         @I_vCRCRDAMT OUTPUT,
                                         @I_vCCAMPYNM OUTPUT,
                                         @I_vCHEKNMBR OUTPUT,
                                         @I_vCARDNAME OUTPUT,
                                         @I_vCCRCTNUM OUTPUT,
                                         @I_vCRCARDDT OUTPUT,
                                         @I_vCHEKBKID OUTPUT,
                                         @I_vTRXDSCRN OUTPUT,
                                         @I_vTRDISAMT OUTPUT,
                                         @I_vTAXAMNT OUTPUT,
                                         @I_vFRTAMNT OUTPUT,
                                         @I_vTEN99AMNT OUTPUT,
                                         @I_vMSCCHAMT OUTPUT,
                                         @I_vPORDNMBR OUTPUT,
                                         @I_vSHIPMTHD OUTPUT,
                                         @I_vDISAMTAV OUTPUT,
                                         @I_vDISTKNAM OUTPUT,
                                         @I_vAPDSTKAM OUTPUT,
                                         @I_vMDFUSRID OUTPUT,
                                         @I_vPOSTEDDT OUTPUT,
                                         @I_vPTDUSRID OUTPUT,
                                         @I_vPCHSCHID OUTPUT,
                                         @I_vFRTSCHID OUTPUT,
                                         @I_vMSCSCHID OUTPUT,
                                         @I_vPRCTDISC OUTPUT,
                                         @I_vTax_Date 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_vBatchCHEKBKID OUTPUT,
                                         @I_vCREATEDIST OUTPUT,
                                         @I_vRequesterTrx 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 = 153;
    EXEC @iStatus = taUpdateString @O_iErrorState,
                                   @oErrString,
                                   @oErrString OUTPUT,
                                   @O_oErrorState OUTPUT;
    RETURN (@O_iErrorState);
END;
WHILE (@iStatement = 0)
BEGIN
    IF (
           @I_vBACHNUMB IS NULL
           OR @I_vVCHNUMWK IS NULL
           OR @I_vVENDORID IS NULL
           OR @I_vDOCNUMBR IS NULL
           OR @I_vDOCTYPE IS NULL
           OR @I_vDOCAMNT IS NULL
           OR @I_vDOCDATE IS NULL
           OR @I_vPSTGDATE IS NULL
           OR @I_vVADCDTRO IS NULL
           OR @I_vVADDCDPR IS NULL
           OR @I_vDUEDATE IS NULL
           OR @I_vDISCDATE IS NULL
           OR @I_vPRCHAMNT IS NULL
           OR @I_vCHRGAMNT IS NULL
           OR @I_vCASHAMNT IS NULL
           OR @I_vCAMCBKID IS NULL
           OR @I_vCDOCNMBR IS NULL
           OR @I_vCAMTDATE IS NULL
           OR @I_vCAMPMTNM IS NULL
           OR @I_vCHEKAMNT IS NULL
           OR @I_vCHAMCBID IS NULL
           OR @I_vCHEKDATE IS NULL
           OR @I_vCAMPYNBR IS NULL
           OR @I_vCRCRDAMT IS NULL
           OR @I_vCCAMPYNM IS NULL
           OR @I_vCHEKNMBR IS NULL
           OR @I_vCARDNAME IS NULL
           OR @I_vCCRCTNUM IS NULL
           OR @I_vCRCARDDT IS NULL
           OR @I_vCHEKBKID IS NULL
           OR @I_vTRXDSCRN IS NULL
           OR @I_vTRDISAMT IS NULL
           OR @I_vTAXAMNT IS NULL
           OR @I_vFRTAMNT IS NULL
           OR @I_vTEN99AMNT IS NULL
           OR @I_vMSCCHAMT IS NULL
           OR @I_vPORDNMBR IS NULL
           OR @I_vDISTKNAM IS NULL
           OR @I_vAPDSTKAM IS NULL
           OR @I_vMDFUSRID IS NULL
           OR @I_vPOSTEDDT IS NULL
           OR @I_vPTDUSRID IS NULL
           OR @I_vPCHSCHID IS NULL
           OR @I_vFRTSCHID IS NULL
           OR @I_vMSCSCHID 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_vBatchCHEKBKID IS NULL
           OR @I_vCREATEDIST IS NULL
           OR @I_vRequesterTrx IS NULL
       )
    BEGIN
        SELECT @O_iErrorState = 481;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (
           (@I_vPRCHAMNT < 0)
           OR (@I_vCHRGAMNT < 0)
           OR (@I_vCASHAMNT < 0)
           OR (@I_vCHEKAMNT < 0)
           OR (@I_vCRCRDAMT < 0)
           OR (@I_vTRDISAMT < 0)
           OR (@I_vFRTAMNT < 0)
           OR (@I_vTEN99AMNT < 0)
           OR (@I_vTEN99AMNT < 0)
           OR (@I_vXCHGRATE < 0)
           OR (@I_vRATEVARC < 0)
           OR (@I_vDSCDLRAM < 0)
       )
    BEGIN
        SELECT @O_iErrorState = 5631;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    SELECT @I_vVENDORID = UPPER(@I_vVENDORID),
           @I_vBACHNUMB = UPPER(@I_vBACHNUMB),
           @I_vDOCNUMBR = UPPER(@I_vDOCNUMBR),
           @I_vTAXSCHID = UPPER(@I_vTAXSCHID),
           @I_vCHEKBKID = UPPER(@I_vCHEKBKID),
           @I_vPCHSCHID = UPPER(@I_vPCHSCHID),
           @I_vFRTSCHID = UPPER(@I_vFRTSCHID),
           @I_vMSCSCHID = UPPER(@I_vMSCSCHID),
           @I_vCAMCBKID = UPPER(@I_vCAMCBKID),
           @I_vCHAMCBID = UPPER(@I_vCHAMCBID),
           @I_vCURNCYID = UPPER(@I_vCURNCYID),
           @I_vSHIPMTHD = UPPER(@I_vSHIPMTHD),
           @I_vBatchCHEKBKID = UPPER(@I_vBatchCHEKBKID);
    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;
    IF (@I_vCURNCYID = '')
    BEGIN
        SELECT @I_vCURNCYID = ISNULL(CURNCYID, '')
        FROM PM00200 (NOLOCK)
        WHERE VENDORID = @I_vVENDORID;
        IF (@I_vCURNCYID = '')
            SELECT @I_vCURNCYID = ISNULL(FUNLCURR, ''),
                   @CURRNIDX = ISNULL(FUNCRIDX, 0)
            FROM MC40000 (NOLOCK);
    END;
    SELECT @CURRNIDX = ISNULL(CURRNIDX, 0)
    FROM DYNAMICS..MC40200 (NOLOCK)
    WHERE CURNCYID = @I_vCURNCYID;
    IF ((@CURRNIDX = 0) OR (@I_vCURNCYID = ''))
    BEGIN
        SELECT @O_iErrorState = 761;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vXCHGRATE < 0)
    BEGIN
        SELECT @O_iErrorState = 5597;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    IF ((@I_vDSCDLRAM > @I_vPRCHAMNT) OR (@I_vDSCDLRAM < 0))
    BEGIN
        SELECT @O_iErrorState = 4608;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vDSCDLRAM > 0) AND (@I_vPRCTDISC > 0))
    BEGIN
        SELECT @O_iErrorState = 4637;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vDISAMTAV > @I_vPRCHAMNT) OR (@I_vDISAMTAV < 0))
    BEGIN
        SELECT @O_iErrorState = 4609;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState 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;
        IF (
               (
                   @I_vCAMTDATE <> ''
                   AND @I_vCAMTDATE <> @I_vDOCDATE
               )
               OR
               (
                   @I_vCHEKDATE <> ''
                   AND @I_vCHEKDATE <> @I_vDOCDATE
               )
               OR
               (
                   @I_vCRCARDDT <> ''
                   AND @I_vCRCARDDT <> @I_vDOCDATE
               )
           )
        BEGIN
            SELECT @O_iErrorState = 1323;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
        EXEC @iStatus = taMCCurrencyValidate @I_vMASTERID = @I_vVENDORID,
                                             @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 = 0,
                                             @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 = 265;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 266;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
    END;
    ELSE
    BEGIN
        SELECT @ISMCTRX = 0,
               @I_vRATEEXPR = 0,
               @I_vDYSTINCR = 0,
               @I_vXCHGRATE = 1;
    END;
    IF (@I_vDOCTYPE NOT IN ( 4, 5 ))
    BEGIN
        IF (@I_vPYMTRMID IS NULL)
        BEGIN
            SELECT @I_vPYMTRMID = PYMTRMID
            FROM PM00200 (NOLOCK)
            WHERE VENDORID = @I_vVENDORID;
            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_vPRCHAMNT * @SALPURCH),
               @PymtTermAmnt = @PymtTermAmnt - (@I_vTRDISAMT * @DISCNTCB),
               @PymtTermAmnt = @PymtTermAmnt + (@I_vFRTAMNT * @FREIGHT),
               @PymtTermAmnt = @PymtTermAmnt + (@I_vMSCCHAMT * @MISC),
               @PymtTermAmnt = @PymtTermAmnt + (@I_vTAXAMNT * (@TAX));
        IF (
               (@I_vPYMTRMID = '')
               AND (@I_vDISAMTAV IS NULL)
               AND (@I_vDSCDLRAM IS NULL)
               AND (@I_vPRCTDISC IS NULL)
           )
            SELECT @I_vDISAMTAV = 0,
                   @I_vDSCDLRAM = 0,
                   @I_vPRCTDISC = 0;
        IF (
               (@I_vDISAMTAV IS NOT NULL)
               AND
               (
                   @I_vDSCDLRAM IS NULL
                   OR @I_vDSCDLRAM <> @I_vDISAMTAV
               )
           )
            SELECT @I_vDSCDLRAM = 0;
        IF (
               (@I_vDISAMTAV IS NOT NULL)
               AND
               (
                   @I_vPRCTDISC IS NULL
                   OR ROUND((@I_vPRCTDISC / 100) * @PymtTermAmnt, @ORDECPLCUR) <> @I_vDISAMTAV
               )
           )
            SELECT @I_vPRCTDISC = 0;
        IF (
               (
                   @I_vDSCDLRAM IS NOT NULL
                   AND @I_vDSCDLRAM <> 0
               )
               AND
               (
                   @I_vPRCTDISC IS NOT NULL
                   AND @I_vPRCTDISC <> 0
               )
           )
        BEGIN
            SELECT @O_iErrorState = 4611;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
        IF ((@I_vDSCDLRAM IS NOT NULL) AND (@I_vDISAMTAV IS NULL))
            SELECT @I_vDISAMTAV = @I_vDSCDLRAM,
                   @I_vPRCTDISC = 0;
        IF ((@I_vPRCTDISC IS NOT NULL) AND (@I_vDISAMTAV IS NULL))
            SELECT @I_vDISAMTAV = ((@I_vPRCTDISC / 100) * @PymtTermAmnt),
                   @I_vDSCDLRAM = 0;
        IF (
               (@I_vPYMTRMID <> '')
               AND (@I_vDISAMTAV IS NULL)
               AND (@I_vDSCDLRAM IS NULL)
               AND (@I_vPRCTDISC IS NULL)
           )
        BEGIN
            SELECT @DSCLCTYP = DSCLCTYP,
                   @DSCDLRAM = DSCDLRAM,
                   @DSCPCTAM = DSCPCTAM
            FROM SY03300 (NOLOCK)
            WHERE PYMTRMID = @I_vPYMTRMID;
            IF (@DSCLCTYP = 1)
            BEGIN
                SELECT @I_vPRCTDISC = @DSCPCTAM / 100,
                       @I_vDSCDLRAM = 0;
                IF (@ISMCTRX = 1)
                BEGIN
                    SELECT @ODISAMTAV = ROUND((@I_vPRCTDISC / 100) * @PymtTermAmnt, @ORDECPLCUR);
                    SELECT @ORDDLRAT = 0;
                    SELECT @I_vDISAMTAV = CASE
                                              WHEN (@I_vRTCLCMTD = 0) THEN
                                                  ROUND(@ODISAMTAV * @I_vXCHGRATE, @DECPLCUR)
                                              WHEN (@I_vRTCLCMTD = 1) THEN
                                                  ROUND(@ODISAMTAV / @I_vXCHGRATE, @DECPLCUR)
                                              ELSE
                                                  0
                                          END;
                END;
                ELSE
                BEGIN
                    SELECT @I_vDISAMTAV = ROUND((@I_vPRCTDISC / 100) * @PymtTermAmnt, @DECPLCUR);
                    SELECT @ODISAMTAV = 0;
                END;
            END;
            ELSE IF (@DSCLCTYP = 2)
            BEGIN
                SELECT @I_vPRCTDISC = 0;
                IF (@ISMCTRX = 1)
                BEGIN
                    SELECT @I_vDISAMTAV = @DSCDLRAM,
                           @I_vDSCDLRAM = @DSCDLRAM;
                    SELECT @ODISAMTAV = CASE
                                            WHEN (@I_vRTCLCMTD = 0) THEN
                                                ROUND(@I_vDISAMTAV / @I_vXCHGRATE, @ORDECPLCUR)
                                            WHEN (@I_vRTCLCMTD = 1) THEN
                                                ROUND(@I_vDISAMTAV * @I_vXCHGRATE, @ORDECPLCUR)
                                            ELSE
                                                0
                                        END;
                    SELECT @ORDDLRAT = @ODISAMTAV;
                END;
                ELSE
                BEGIN
                    SELECT @I_vDSCDLRAM = @DSCDLRAM,
                           @I_vDISAMTAV = @DSCDLRAM;
                    SELECT @ORDDLRAT = 0,
                           @ODISAMTAV = 0;
                END;
            END;
        END;
        ELSE IF (@ISMCTRX = 1)
        BEGIN
            SELECT @ODISAMTAV = @I_vDISAMTAV;
            SELECT @I_vDISAMTAV = CASE
                                      WHEN (@I_vRTCLCMTD = 0) THEN
                                          ROUND(@ODISAMTAV * @I_vXCHGRATE, @DECPLCUR)
                                      WHEN (@I_vRTCLCMTD = 1) THEN
                                          ROUND(@ODISAMTAV / @I_vXCHGRATE, @DECPLCUR)
                                      ELSE
                                          0
                                  END;
            SELECT @ODISAMTAV = ROUND(@ODISAMTAV, @ORDECPLCUR);
            IF (@I_vPRCTDISC = 0)
            BEGIN
                SELECT @ORDDLRAT = @ODISAMTAV,
                       @I_vDSCDLRAM = @I_vDISAMTAV;
            END;
        END;
        ELSE
        BEGIN
            SELECT @I_vDISAMTAV = ROUND(@I_vDISAMTAV, @DECPLCUR);
            IF (@I_vPRCTDISC = 0)
            BEGIN
                SELECT @I_vDSCDLRAM = @I_vDISAMTAV;
            END;
        END;
    END;
    ELSE
    BEGIN
        SELECT @I_vPYMTRMID = '',
               @I_vDISAMTAV = 0,
               @I_vDSCDLRAM = 0,
               @I_vPRCTDISC = 0;
    END;
    IF (@ISMCTRX = 1)
        SELECT @ORCTRXAM = @I_vCHRGAMNT,
               @OPURAMT = @I_vPRCHAMNT,
               @ORFRTAMT = @I_vFRTAMNT,
               @OMISCAMT = @I_vMSCCHAMT,
               @ORTAXAMT = @I_vTAXAMNT,
               @ORCASAMT = @I_vCASHAMNT,
               @ORCHKAMT = @I_vCHEKAMNT,
               @ORCCDAMT = @I_vCRCRDAMT,
               @ORDISTKN = @I_vDISTKNAM,
               @ORTDISAM = @I_vTRDISAMT,
               @OCHGAMT = @I_vCHRGAMNT,
               @ORDOCAMT = @I_vDOCAMNT,
               @OR1099AM = @I_vTEN99AMNT;
    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 = 5373;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    IF ((@I_vDOCTYPE < 1) OR (@I_vDOCTYPE > 5))
    BEGIN
        SELECT @O_iErrorState = 300;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (
           (@I_vDOCTYPE = 5)
           AND
           (
               @I_vPYMTRMID <> ''
               OR @I_vCASHAMNT <> 0
               OR @I_vCHEKAMNT <> 0
               OR @I_vCRCRDAMT <> 0
               OR @I_vDISAMTAV <> 0
               OR @I_vDISTKNAM <> 0
           )
       )
    BEGIN
        SELECT @O_iErrorState = 480;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vDOCTYPE = 4) AND (@I_vPYMTRMID <> ''))
    BEGIN
        SELECT @O_iErrorState = 1100;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vRequesterTrx NOT IN ( 0, 1 ))
    BEGIN
        SELECT @O_iErrorState = 3725;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    SELECT @ADUPINNM = ISNULL(ADUPINNM, 0)
    FROM PM40100 (NOLOCK)
    WHERE UNIQKEY = '1';
    IF (@I_vPSTGDATE = '')
        SELECT @I_vPSTGDATE = @I_vDOCDATE;
    IF (
           (@I_vDUEDATE = '')
           AND (@I_vPYMTRMID = '')
           AND (@I_vDOCTYPE NOT IN ( 4, 5 ))
       )
        SELECT @I_vDUEDATE = @I_vDOCDATE;
    IF (@I_vTax_Date = '')
        SELECT @I_vTax_Date = @I_vDOCDATE;
    SELECT @I_vPCHSCHID = CASE
                              WHEN (@I_vPCHSCHID = '') THEN
                                  PCHSCHID
                              ELSE
                                  @I_vPCHSCHID
                          END,
           @I_vMSCSCHID = CASE
                              WHEN (@I_vMSCSCHID = '') THEN
                                  MSCSCHID
                              ELSE
                                  @I_vMSCSCHID
                          END,
           @I_vFRTSCHID = CASE
                              WHEN (@I_vFRTSCHID = '') THEN
                                  FRTSCHID
                              ELSE
                                  @I_vFRTSCHID
                          END
    FROM PM40100 (NOLOCK)
    WHERE UNIQKEY = '1';
    SELECT @CURTRXAM = @I_vCHRGAMNT;
    IF (@I_vVENDORID = '')
    BEGIN
        SELECT @O_iErrorState = 255;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF NOT EXISTS
    (
        SELECT 1
        FROM PM00200 (NOLOCK)
        WHERE VENDORID = @I_vVENDORID
    )
    BEGIN
        SELECT @O_iErrorState = 372;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vDOCNUMBR = '')
    BEGIN
        SELECT @O_iErrorState = 257;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@ADUPINNM = 1) OR (@ADUPINNM = 2))
    BEGIN
        IF EXISTS
        (
            SELECT 1
            FROM PM00400 a (NOLOCK)
            WHERE a.VENDORID = @I_vVENDORID
                  AND a.DOCNUMBR = @I_vDOCNUMBR
                  AND a.DOCTYPE <> 6
        )
           OR EXISTS
        (
            SELECT 1
            FROM PM20000 a (NOLOCK)
            WHERE a.VENDORID = @I_vVENDORID
                  AND a.DOCNUMBR = @I_vDOCNUMBR
                  AND a.DOCTYPE <> 6
        )
           OR EXISTS
        (
            SELECT 1
            FROM PM10000 a (NOLOCK)
            WHERE a.VENDORID = @I_vVENDORID
                  AND a.DOCNUMBR = @I_vDOCNUMBR
                  AND a.DOCTYPE <> 6
        )
           OR EXISTS
        (
            SELECT 1
            FROM PM30200 a (NOLOCK)
            WHERE a.VENDORID = @I_vVENDORID
                  AND a.DOCNUMBR = @I_vDOCNUMBR
                  AND a.DOCTYPE <> 6
        )
           OR EXISTS
        (
            SELECT 1
            FROM POP10300 a (NOLOCK)
            WHERE a.VENDORID = @I_vVENDORID
                  AND a.VNDDOCNM = @I_vDOCNUMBR
        )
           OR EXISTS
        (
            SELECT 1
            FROM MC020103 a (NOLOCK)
            WHERE a.DOCTYPE = @I_vDOCTYPE
                  AND a.VCHRNMBR = @I_vVCHNUMWK
        )
        BEGIN
            SELECT @O_iErrorState = 305;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF EXISTS
    (
        SELECT 1
        FROM PM00400 a (NOLOCK)
        WHERE a.CNTRLTYP = @CNTRLTYP
              AND a.CNTRLNUM = @I_vVCHNUMWK
    )
    BEGIN
        SELECT @O_iErrorState = 306;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vDOCAMNT < 0)
    BEGIN
        SELECT @O_iErrorState = 307;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vDOCAMNT <> @I_vMSCCHAMT + @I_vPRCHAMNT + @I_vTAXAMNT + @I_vFRTAMNT - @I_vTRDISAMT)
    BEGIN
        SELECT @O_iErrorState = 308;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vCHRGAMNT <> @I_vDOCAMNT - @I_vCASHAMNT - @I_vCHEKAMNT - @I_vCRCRDAMT - @I_vDISTKNAM)
    BEGIN
        SELECT @O_iErrorState = 399;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vTAXSCHID <> '')
    BEGIN
        IF NOT EXISTS
        (
            SELECT 1
            FROM TX00102 (NOLOCK)
            WHERE TAXSCHID = @I_vTAXSCHID
        )
        BEGIN
            SELECT @O_iErrorState = 309;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (@I_vPCHSCHID <> '')
    BEGIN
        IF NOT EXISTS
        (
            SELECT 1
            FROM TX00102 (NOLOCK)
            WHERE TAXSCHID = @I_vPCHSCHID
        )
        BEGIN
            SELECT @O_iErrorState = 310;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (@I_vMSCSCHID <> '')
    BEGIN
        IF NOT EXISTS
        (
            SELECT 1
            FROM TX00102 (NOLOCK)
            WHERE TAXSCHID = @I_vMSCSCHID
        )
        BEGIN
            SELECT @O_iErrorState = 311;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (@I_vFRTSCHID <> '')
    BEGIN
        IF NOT EXISTS
        (
            SELECT 1
            FROM TX00102 (NOLOCK)
            WHERE TAXSCHID = @I_vFRTSCHID
        )
        BEGIN
            SELECT @O_iErrorState = 312;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    SELECT @TAXAMNT = ISNULL(SUM(TAXAMNT), 0.00)
    FROM PM10500 (NOLOCK)
    WHERE DOCTYPE = @I_vDOCTYPE
          AND VCHRNMBR = @I_vVCHNUMWK
          AND BKOUTTAX <> 1;
    IF (@TAXAMNT <> @I_vTAXAMNT)
    BEGIN
        SELECT @O_iErrorState = 313;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @O_oErrorState OUTPUT;
    END;
    IF EXISTS
    (
        SELECT 1
        FROM PM10500 (NOLOCK)
        WHERE DOCTYPE = @I_vDOCTYPE
              AND VCHRNMBR = @I_vVCHNUMWK
              AND BKOUTTAX = 1
    )
    BEGIN
        SELECT @BKTPURAM = ISNULL(SUM(PCTAXAMT), 0),
               @BKTFRTAM = ISNULL(SUM(FRTTXAMT), 0),
               @BKTMSCAM = ISNULL(SUM(MSCTXAMT), 0)
        FROM PM10500 (NOLOCK)
        WHERE DOCTYPE = @I_vDOCTYPE
              AND VCHRNMBR = @I_vVCHNUMWK
              AND BKOUTTAX = 1;
        IF (@ISMCTRX = 1)
        BEGIN
            SELECT @OBKPURAMT = @I_vPRCHAMNT - @BKTPURAM,
                   @ORBKTFRT = @I_vFRTAMNT - @BKTFRTAM,
                   @ORBKTMSC = @I_vMSCCHAMT - @BKTMSCAM;
        END;
    END;
    IF (@I_vBACHNUMB = '')
    BEGIN
        SELECT @O_iErrorState = 314;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (EXISTS
    (
        SELECT 1
        FROM SY00500 (NOLOCK)
        WHERE BACHNUMB = @I_vBACHNUMB
              AND MKDTOPST <> 0
              AND BCHSOURC = @BCHSOURC
    )
       )
    BEGIN
        SELECT @O_iErrorState = 316;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    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 = 5626;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
    END;
    IF (@I_vDOCDATE = '')
    BEGIN
        SELECT @O_iErrorState = 317;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vVADDCDPR <> '')
    BEGIN
        IF NOT EXISTS
        (
            SELECT 1
            FROM PM00300 (NOLOCK)
            WHERE VENDORID = @I_vVENDORID
                  AND ADRSCODE = @I_vVADDCDPR
        )
        BEGIN
            SELECT @O_iErrorState = 318;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    ELSE
    BEGIN
        SELECT @I_vVADDCDPR = VADDCDPR
        FROM PM00200 (NOLOCK)
        WHERE VENDORID = @I_vVENDORID;
    END;
    IF (@I_vVADCDTRO <> '')
    BEGIN
        IF NOT EXISTS
        (
            SELECT 1
            FROM PM00300 (NOLOCK)
            WHERE VENDORID = @I_vVENDORID
                  AND ADRSCODE = @I_vVADCDTRO
        )
        BEGIN
            SELECT @O_iErrorState = 9286;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    ELSE
    BEGIN
        SELECT @I_vVADCDTRO = VADCDTRO
        FROM PM00200 (NOLOCK)
        WHERE VENDORID = @I_vVENDORID;
    END;
    IF (@I_vPYMTRMID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM SY03300 a (NOLOCK)
            WHERE a.PYMTRMID = @I_vPYMTRMID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 319;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF ((@I_vPYMTRMID <> '') AND (@I_vDUEDATE = '' OR @I_vDISCDATE = ''))
    BEGIN
        EXEC @iStatus = taCalcDueDatePM @I_vVENDORID = @I_vVENDORID,
                                        @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 = 4610;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            RETURN (@O_iErrorState);
        END;
        IF (@I_vDUEDATE = '')
            SELECT @I_vDUEDATE = @dDUEDATE;
        IF (@I_vDISCDATE = '')
            SELECT @I_vDISCDATE = @dDISCDATE;
    END;
    IF ((@I_vPRCTDISC > 100) OR (@I_vPRCTDISC < 0))
    BEGIN
        SELECT @O_iErrorState = 4607;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vBatchCHEKBKID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vBatchCHEKBKID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 361;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vBatchCHEKBKID
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9518;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vCAMCBKID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCAMCBKID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 320;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCAMCBKID
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9519;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vCHAMCBID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCHAMCBID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 322;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCHAMCBID
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9520;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vCHEKBKID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCHEKBKID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 324;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE CHEKBKID = @I_vCHEKBKID
                  AND INACTIVE = 1
        )
           )
        BEGIN
            SELECT @O_iErrorState = 9521;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vSHIPMTHD IS NULL)
    BEGIN
        SELECT @I_vSHIPMTHD = SHIPMTHD
        FROM PM00200 (NOLOCK)
        WHERE VENDORID = @I_vVENDORID;
        SELECT @I_vSHIPMTHD = ISNULL(@I_vSHIPMTHD, '');
    END;
    IF (@I_vSHIPMTHD <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM SY03000 (NOLOCK)
            WHERE SHIPMTHD = @I_vSHIPMTHD
        )
           )
        BEGIN
            EXEC @iStatus = taCreateShippingMethod @I_vSHIPMTHD = @I_vSHIPMTHD,
                                                   @I_vUpdateIfExists = 0,
                                                   @O_iErrorState = @iAddShippingErrState OUTPUT,
                                                   @oErrString = @iAddShippingErrString OUTPUT;
            SELECT @iError = @@error;
            IF ((@iStatus = 0) AND (@iError <> 0))
            BEGIN
                SELECT @iStatus = @iError;
            END;
            IF ((@iStatus <> 0) OR (@iAddShippingErrState <> 0))
            BEGIN
                SELECT @oErrString = RTRIM(@oErrString) + ' ' + LTRIM(RTRIM(@iAddShippingErrString));
                SELECT @O_iErrorState = 326;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
            END;
        END;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vCAMCBKID = ''))
    BEGIN
        SELECT @O_iErrorState = 327;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vCAMTDATE = ''))
    BEGIN
        SELECT @O_iErrorState = 328;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vCDOCNMBR = ''))
    BEGIN
        SELECT @O_iErrorState = 329;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vCAMPMTNM = ''))
    BEGIN
        SELECT @O_iErrorState = 330;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCASHAMNT > 0) AND (@I_vCAMPMTNM <> ''))
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM PM00400 (NOLOCK)
            WHERE CNTRLTYP = 1
                  AND CNTRLNUM = @I_vCAMPMTNM
        )
           )
        BEGIN
            SELECT @O_iErrorState = 331;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (
           (@I_vCASHAMNT = 0)
           AND
           (
               @I_vCAMCBKID <> ''
               OR @I_vCAMPMTNM <> ''
               OR @I_vCAMTDATE <> ''
               OR @I_vCDOCNMBR <> ''
           )
       )
    BEGIN
        SELECT @O_iErrorState = 332;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vCHAMCBID = ''))
    BEGIN
        SELECT @O_iErrorState = 333;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vCHEKDATE = ''))
    BEGIN
        SELECT @O_iErrorState = 334;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vCAMPYNBR = ''))
    BEGIN
        SELECT @O_iErrorState = 335;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vCHEKNMBR = ''))
    BEGIN
        SELECT @O_iErrorState = 336;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCHEKAMNT > 0) AND (@I_vCAMPYNBR <> ''))
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM PM00400 (NOLOCK)
            WHERE CNTRLTYP = 1
                  AND CNTRLNUM = @I_vCAMPYNBR
        )
           )
        BEGIN
            SELECT @O_iErrorState = 337;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
        IF (EXISTS
        (
            SELECT 1
            FROM CM00100 (NOLOCK)
            WHERE DUPCHNUM = 0
                  AND CHEKBKID = @I_vCHAMCBID
        )
           )
        BEGIN
            IF (EXISTS
            (
                SELECT 1
                FROM PM00400 (NOLOCK)
                WHERE DOCTYPE = 6
                      AND VENDORID = @I_vVENDORID
                      AND DOCNUMBR = @I_vCHEKNMBR
                      AND CHEKBKID = @I_vCHAMCBID
            )
               )
            BEGIN
                SELECT @O_iErrorState = 1643;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
            END;
        END;
    END;
    IF (
           (@I_vCHEKAMNT = 0)
           AND
           (
               @I_vCHAMCBID <> ''
               OR @I_vCHEKNMBR <> ''
               OR @I_vCHEKDATE <> ''
               OR @I_vCAMPYNBR <> ''
           )
       )
    BEGIN
        SELECT @O_iErrorState = 338;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vCARDNAME = ''))
    BEGIN
        SELECT @O_iErrorState = 339;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vCRCARDDT = ''))
    BEGIN
        SELECT @O_iErrorState = 340;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vCCRCTNUM = ''))
    BEGIN
        SELECT @O_iErrorState = 341;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vCCAMPYNM = ''))
    BEGIN
        SELECT @O_iErrorState = 342;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF ((@I_vCRCRDAMT > 0) AND (@I_vCCAMPYNM <> ''))
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM PM00400 (NOLOCK)
            WHERE CNTRLTYP = 0
                  AND CNTRLNUM = @I_vCCAMPYNM
        )
           )
        BEGIN
            SELECT @O_iErrorState = 343;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vCARDNAME <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM SY03100 (NOLOCK)
            WHERE CARDNAME = @I_vCARDNAME
        )
           )
        BEGIN
            SELECT @O_iErrorState = 344;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vRATETPID <> '')
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM MC40100 (NOLOCK)
            WHERE RATETPID = @I_vRATETPID
        )
           )
        BEGIN
            SELECT @O_iErrorState = 560;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vTEN99AMNT > 0)
    BEGIN
        IF (EXISTS
        (
            SELECT 1
            FROM PM00200 (NOLOCK)
            WHERE VENDORID = @I_vVENDORID
                  AND TEN99TYPE < 2
        )
           )
        BEGIN
            SELECT @O_iErrorState = 713;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
        END;
    END;
    IF (@I_vTEN99AMNT > 0)
       AND (@I_vPRCHAMNT - @I_vTRDISAMT < @I_vTEN99AMNT)
    BEGIN
        SELECT @O_iErrorState = 714;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    IF (@I_vDOCTYPE <> 5)
    BEGIN
        SELECT @TEN99TYPE = TEN99TYPE,
               @TEN99BOXNUMBER = TEN99BOXNUMBER
        FROM PM00200 (NOLOCK)
        WHERE VENDORID = @I_vVENDORID;
    END;
    IF (@O_iErrorState <> 0)
    BEGIN
        BREAK;
    END;
    INSERT PM00400
    (
        CNTRLNUM,
        CNTRLTYP,
        DCSTATUS,
        DOCTYPE,
        VENDORID,
        DOCNUMBR,
        TRXSORCE,
        CHEKBKID,
        DUEDATE,
        DISCDATE,
        BCHSOURC,
        DOCDATE,
        USERID
    )
    SELECT @I_vVCHNUMWK,
           @CNTRLTYP,
           @DCSTATUS,
           @I_vDOCTYPE,
           @I_vVENDORID,
           @I_vDOCNUMBR,
           '',
           '',
           @I_vDUEDATE,
           @I_vDISCDATE,
           @BCHSOURC,
           @I_vDOCDATE,
           @I_vMDFUSRID;
    IF (@@error <> 0)
    BEGIN
        SELECT @O_iErrorState = 345;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
        BREAK;
    END;
    IF (@I_vCAMPMTNM <> '')
    BEGIN
        INSERT PM00400
        (
            CNTRLNUM,
            CNTRLTYP,
            DCSTATUS,
            DOCTYPE,
            VENDORID,
            DOCNUMBR,
            TRXSORCE,
            CHEKBKID,
            BCHSOURC,
            DOCDATE,
            USERID
        )
        SELECT @I_vCAMPMTNM,
               1,
               @DCSTATUS,
               6,
               @I_vVENDORID,
               @I_vCDOCNMBR,
               '',
               @I_vCAMCBKID,
               @BCHSOURC,
               @I_vCAMTDATE,
               @I_vMDFUSRID;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 346;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
    END;
    IF (@I_vCAMPYNBR <> '')
    BEGIN
        INSERT PM00400
        (
            CNTRLNUM,
            CNTRLTYP,
            DCSTATUS,
            DOCTYPE,
            VENDORID,
            DOCNUMBR,
            TRXSORCE,
            CHEKBKID,
            BCHSOURC,
            DOCDATE,
            USERID
        )
        SELECT @I_vCAMPYNBR,
               1,
               @DCSTATUS,
               6,
               @I_vVENDORID,
               @I_vCHEKNMBR,
               '',
               @I_vCHAMCBID,
               @BCHSOURC,
               @I_vCHEKDATE,
               @I_vMDFUSRID;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 347;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
    END;
    SELECT @CreditCardVendorID = VENDORID,
           @PYBLGRBX = PYBLGRBX,
           @RCVBGRBX = RCVBGRBX
    FROM SY03100 (NOLOCK)
    WHERE CARDNAME = @I_vCARDNAME;
    IF ((@I_vDOCTYPE IN ( 1, 2, 3, 4 )) AND (@I_vCCAMPYNM <> ''))
    BEGIN
        INSERT PM00400
        (
            CNTRLNUM,
            CNTRLTYP,
            DCSTATUS,
            DOCTYPE,
            VENDORID,
            DOCNUMBR,
            TRXSORCE,
            CHEKBKID,
            BCHSOURC,
            DOCDATE,
            USERID,
            DUEDATE
        )
        SELECT @I_vCCAMPYNM,
               CASE
                   WHEN @PYBLGRBX = 1 THEN
                       1
                   ELSE
                       0
               END,
               @DCSTATUS,
               CASE
                   WHEN @I_vDOCTYPE = 4
                        AND @PYBLGRBX = 0 THEN
                       5
                   WHEN @PYBLGRBX = 1 THEN
                       6
                   ELSE
                       1
               END,
               CASE
                   WHEN @CreditCardVendorID <> '' THEN
                       @CreditCardVendorID
                   ELSE
                       @I_vVENDORID
               END,
               @I_vCCRCTNUM,
               '',
               '',
               @BCHSOURC,
               @I_vDOCDATE,
               @I_vMDFUSRID,
               @I_vDOCDATE;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 348;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
    END;
    IF (@I_vRequesterTrx = 0)
    BEGIN
        EXEC @iStatus = eConnectOutVerify @I_vDOCTYPE = 'Payables_Transaction',
                                          @I_vINDEX1 = @I_vVCHNUMWK,
                                          @I_vINDEX2 = @I_vBACHNUMB,
                                          @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 = 1292;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
            BREAK;
        END;
    END;
    IF (@ISMCTRX = 1)
    BEGIN
        INSERT MC020103
        (
            DCSTATUS,
            DOCTYPE,
            VCHRNMBR,
            PMNTNMBR,
            DOCDATE,
            VENDORID,
            CURNCYID,
            CURRNIDX,
            RATETPID,
            EXGTBLID,
            XCHGRATE,
            EXCHDATE,
            TIME1,
            RTCLCMTD,
            ORCTRXAM,
            OPURAMT,
            ORFRTAMT,
            OMISCAMT,
            ORTAXAMT,
            ORCASAMT,
            ORCHKAMT,
            ORCHKTTL,
            ORCCDAMT,
            ORAPPAMT,
            ORDISTKN,
            ORDATKN,
            ORDDLRAT,
            ORTDISAM,
            ORWROFAM,
            OBKPURAMT,
            ORBKTFRT,
            ORBKTMSC,
            UNGANLOS,
            RMMCERRS,
            OCHGAMT,
            ORDOCAMT,
            ODISAMTAV,
            ORGAPDISCTKN,
            OTOTPAY,
            OR1099AM,
            DENXRATE,
            MCTRXSTT,
            OrigBackoutTradeDisc
        )
        SELECT 1,
               @I_vDOCTYPE,
               @I_vVCHNUMWK,
               '',
               @I_vDOCDATE,
               @I_vVENDORID,
               @I_vCURNCYID,
               @CURRNIDX,
               @I_vRATETPID,
               @EXGTBLID,
               @I_vXCHGRATE,
               @I_vEXCHDATE,
               @I_vTIME1,
               @I_vRTCLCMTD,
               @ORCTRXAM,
               @OPURAMT,
               @ORFRTAMT,
               @OMISCAMT,
               @ORTAXAMT,
               @ORCASAMT,
               @ORCHKAMT,
               0,
               @ORCCDAMT,
               0,
               @ORDISTKN,
               0,
               @ORDDLRAT,
               @ORTDISAM,
               0,
               @OBKPURAMT,
               @ORBKTFRT,
               @ORBKTMSC,
               0,
               0,
               @OCHGAMT,
               @ORDOCAMT,
               @ODISAMTAV,
               0,
               0,
               @OR1099AM,
               0,
               0,
               0;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 264;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
        IF (@I_vXCHGRATE = 0)
        BEGIN
            SELECT @O_iErrorState = 552;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
        IF ((@ISMCTRX = 1) AND (@I_vRTCLCMTD = 0))
        BEGIN
            SELECT @I_vDOCAMNT
                = ROUND(
                           (@I_vMSCCHAMT + @I_vPRCHAMNT + @I_vTAXAMNT + @I_vFRTAMNT - @I_vTRDISAMT) * @I_vXCHGRATE,
                           @DECPLCUR
                       );
            SELECT @I_vPRCHAMNT = ROUND(@I_vPRCHAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @BKTPURAM = ROUND(@BKTPURAM * @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_vTRDISAMT = ROUND(@I_vTRDISAMT * @I_vXCHGRATE, @DECPLCUR),
                   @I_vFRTAMNT = ROUND(@I_vFRTAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @BKTFRTAM = ROUND(@BKTFRTAM * @I_vXCHGRATE, @DECPLCUR),
                   @I_vMSCCHAMT = ROUND(@I_vMSCCHAMT * @I_vXCHGRATE, @DECPLCUR),
                   @BKTMSCAM = ROUND(@BKTMSCAM * @I_vXCHGRATE, @DECPLCUR),
                   @I_vDISTKNAM = ROUND(@I_vDISTKNAM * @I_vXCHGRATE, @DECPLCUR),
                   @I_vTAXAMNT = ROUND(@I_vTAXAMNT * @I_vXCHGRATE, @DECPLCUR),
                   @CURTRXAM = ROUND(@CURTRXAM * @I_vXCHGRATE, @DECPLCUR);
        END;
        ELSE IF ((@ISMCTRX = 1) AND (@I_vRTCLCMTD = 1))
        BEGIN
            SELECT @I_vDOCAMNT
                = ROUND(
                           (@I_vMSCCHAMT + @I_vPRCHAMNT + @I_vTAXAMNT + @I_vFRTAMNT - @I_vTRDISAMT) / @I_vXCHGRATE,
                           @DECPLCUR
                       );
            SELECT @I_vPRCHAMNT = ROUND(@I_vPRCHAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @BKTPURAM = ROUND(@BKTPURAM / @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_vTRDISAMT = ROUND(@I_vTRDISAMT / @I_vXCHGRATE, @DECPLCUR),
                   @I_vFRTAMNT = ROUND(@I_vFRTAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @BKTFRTAM = ROUND(@BKTFRTAM / @I_vXCHGRATE, @DECPLCUR),
                   @I_vMSCCHAMT = ROUND(@I_vMSCCHAMT / @I_vXCHGRATE, @DECPLCUR),
                   @BKTMSCAM = ROUND(@BKTMSCAM / @I_vXCHGRATE, @DECPLCUR),
                   @I_vDISTKNAM = ROUND(@I_vDISTKNAM / @I_vXCHGRATE, @DECPLCUR),
                   @I_vTAXAMNT = ROUND(@I_vTAXAMNT / @I_vXCHGRATE, @DECPLCUR),
                   @CURTRXAM = ROUND(@CURTRXAM / @I_vXCHGRATE, @DECPLCUR);
        END;
        IF (@I_vDOCAMNT < 0.00)
        BEGIN
            SELECT @I_vDOCAMNT = 0.00;
        END;
        SELECT @I_vCHRGAMNT = @I_vDOCAMNT - @I_vCASHAMNT - @I_vCHEKAMNT - @I_vCRCRDAMT - @I_vDISTKNAM;
        IF ((@ISMCTRX = 1) AND (@I_vRTCLCMTD = 0))
        BEGIN
            UPDATE PM10500
            SET TAXAMNT = ROUND(TAXAMNT * @I_vXCHGRATE, @DECPLCUR),
                ORTAXAMT = TAXAMNT,
                PCTAXAMT = ROUND(PCTAXAMT * @I_vXCHGRATE, @DECPLCUR),
                ORPURTAX = PCTAXAMT,
                FRTTXAMT = ROUND(FRTTXAMT * @I_vXCHGRATE, @DECPLCUR),
                ORFRTTAX = FRTTXAMT,
                MSCTXAMT = ROUND(MSCTXAMT * @I_vXCHGRATE, @DECPLCUR),
                ORMSCTAX = MSCTXAMT,
                TDTTXPUR = CASE
                               WHEN TDTTXPUR <> 0 THEN
                                   ROUND(TDTTXPUR * @I_vXCHGRATE, @DECPLCUR)
                               ELSE
                                   ROUND(@PRCHAMNT * @I_vXCHGRATE, @DECPLCUR)
                           END,
                ORTXBPUR = CASE
                               WHEN ORTXBPUR <> 0 THEN
                                   ORTXBPUR
                               ELSE
                                   @PRCHAMNT
                           END,
                TXDTTPUR = CASE
                               WHEN TXDTTPUR <> 0 THEN
                                   ROUND(TXDTTPUR * @I_vXCHGRATE, @DECPLCUR)
                               ELSE
                                   ROUND(@PRCHAMNT * @I_vXCHGRATE, @DECPLCUR)
                           END,
                ORTOTPUR = CASE
                               WHEN ORTOTPUR <> 0 THEN
                                   ORTOTPUR
                               ELSE
                                   @PRCHAMNT
                           END,
                CURRNIDX = @CURRNIDX
            WHERE VCHRNMBR = @I_vVCHNUMWK;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 542;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
                BREAK;
            END;
            UPDATE PM10100
            SET DEBITAMT = ROUND(DEBITAMT * @I_vXCHGRATE, @DECPLCUR),
                ORDBTAMT = DEBITAMT,
                CRDTAMNT = ROUND(CRDTAMNT * @I_vXCHGRATE, @DECPLCUR),
                ORCRDAMT = CRDTAMNT,
                RATETPID = @I_vRATETPID,
                EXGTBLID = @EXGTBLID,
                XCHGRATE = @I_vXCHGRATE,
                EXCHDATE = @I_vEXCHDATE,
                TIME1 = @I_vTIME1,
                RTCLCMTD = @I_vRTCLCMTD,
                CURNCYID = CASE
                               WHEN @MCINSTALLED = 1 THEN
                                   @I_vCURNCYID
                               ELSE
                                   ''
                           END,
                CURRNIDX = @CURRNIDX
            WHERE VCHRNMBR = @I_vVCHNUMWK;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 934;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
                BREAK;
            END;
        END;
        ELSE IF ((@ISMCTRX = 1) AND (@I_vRTCLCMTD = 1))
        BEGIN
            UPDATE PM10500
            SET TAXAMNT = ROUND(TAXAMNT / @I_vXCHGRATE, @DECPLCUR),
                ORTAXAMT = TAXAMNT,
                PCTAXAMT = ROUND(PCTAXAMT / @I_vXCHGRATE, @DECPLCUR),
                ORPURTAX = PCTAXAMT,
                FRTTXAMT = ROUND(FRTTXAMT / @I_vXCHGRATE, @DECPLCUR),
                ORFRTTAX = FRTTXAMT,
                MSCTXAMT = ROUND(MSCTXAMT / @I_vXCHGRATE, @DECPLCUR),
                ORMSCTAX = MSCTXAMT,
                TDTTXPUR = CASE
                               WHEN TDTTXPUR <> 0 THEN
                                   ROUND(TDTTXPUR / @I_vXCHGRATE, @DECPLCUR)
                               ELSE
                                   ROUND(@PRCHAMNT / @I_vXCHGRATE, @DECPLCUR)
                           END,
                ORTXBPUR = CASE
                               WHEN ORTXBPUR <> 0 THEN
                                   ORTXBPUR
                               ELSE
                                   @PRCHAMNT
                           END,
                TXDTTPUR = CASE
                               WHEN TXDTTPUR <> 0 THEN
                                   ROUND(TXDTTPUR / @I_vXCHGRATE, @DECPLCUR)
                               ELSE
                                   ROUND(@PRCHAMNT / @I_vXCHGRATE, @DECPLCUR)
                           END,
                ORTOTPUR = CASE
                               WHEN ORTOTPUR <> 0 THEN
                                   ORTOTPUR
                               ELSE
                                   @PRCHAMNT
                           END,
                CURRNIDX = @CURRNIDX
            WHERE VCHRNMBR = @I_vVCHNUMWK;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 543;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
                BREAK;
            END;
            UPDATE PM10100
            SET DEBITAMT = ROUND(DEBITAMT / @I_vXCHGRATE, @DECPLCUR),
                ORDBTAMT = DEBITAMT,
                CRDTAMNT = ROUND(CRDTAMNT / @I_vXCHGRATE, @DECPLCUR),
                ORCRDAMT = CRDTAMNT,
                RATETPID = @I_vRATETPID,
                EXGTBLID = @EXGTBLID,
                XCHGRATE = @I_vXCHGRATE,
                EXCHDATE = @I_vEXCHDATE,
                TIME1 = @I_vTIME1,
                RTCLCMTD = @I_vRTCLCMTD,
                CURNCYID = CASE
                               WHEN @MCINSTALLED = 1 THEN
                                   @I_vCURNCYID
                               ELSE
                                   ''
                           END,
                CURRNIDX = @CURRNIDX
            WHERE VCHRNMBR = @I_vVCHNUMWK;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 935;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
                BREAK;
            END;
        END;
        SELECT @I_vTAXAMNT = ISNULL(SUM(TAXAMNT), 0)
        FROM PM10500 (NOLOCK)
        WHERE VCHRNMBR = @I_vVCHNUMWK
              AND DOCTYPE = @I_vDOCTYPE
              AND BKOUTTAX <> 1;
        UPDATE PM10000
        SET TAXAMNT = @I_vTAXAMNT
        WHERE VCHNUMWK = @I_vVCHNUMWK
              AND BACHNUMB = @I_vBACHNUMB;
        IF (@@error <> 0)
        BEGIN
            SELECT @O_iErrorState = 4018;
            EXEC @iStatus = taUpdateString @O_iErrorState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @iAddCodeErrState OUTPUT;
            BREAK;
        END;
    END;
    ELSE
    BEGIN
        IF (NOT EXISTS
        (
            SELECT 1
            FROM PM00200 (NOLOCK)
            WHERE VENDORID = @I_vVENDORID
                  AND
                  (
                      CURNCYID = @I_vCURNCYID
                      OR CURNCYID = ''
                  )
        )
           )
        BEGIN
            UPDATE PM10100
            SET CURNCYID = @I_vCURNCYID,
                CURRNIDX = @CURRNIDX
            WHERE VCHRNMBR = @I_vVCHNUMWK;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 4019;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
                BREAK;
            END;
            UPDATE PM10500
            SET CURRNIDX = @CURRNIDX
            WHERE VCHRNMBR = @I_vVCHNUMWK;
            IF (@@error <> 0)
            BEGIN
                SELECT @O_iErrorState = 4020;
                EXEC @iStatus = taUpdateString @O_iErrorState,
                                               @oErrString,
                                               @oErrString OUTPUT,
                                               @iAddCodeErrState OUTPUT;
                BREAK;
            END;
        END;
    END;
    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 @I_vCURNCYID = '',
               @CURRNIDX = 0;
    END;
    EXEC @iStatus = taPMDistributionCreate @I_vDOCTYPE = @I_vDOCTYPE,
                                           @I_vVCHNUMWK = @I_vVCHNUMWK,
                                           @I_vVENDORID = @I_vVENDORID,
                                           @I_vCURRNIDX = @CURRNIDX,
                                           @I_vCURNCYID = @I_vCURNCYID,
                                           @I_vDECPLCUR = @DECPLCUR,
                                           @I_vPTDUSRID = @I_vPTDUSRID,
                                           @I_vPRCHAMNT = @I_vPRCHAMNT,
                                           @I_vTRDISAMT = @I_vTRDISAMT,
                                           @I_vFRTAMNT = @I_vFRTAMNT,
                                           @I_vMSCCHAMT = @I_vMSCCHAMT,
                                           @I_vDISTKNAM = @I_vDISTKNAM,
                                           @I_vCASHAMNT = @I_vCASHAMNT,
                                           @I_vCHEKAMNT = @I_vCHEKAMNT,
                                           @I_vCRCRDAMT = @I_vCRCRDAMT,
                                           @I_vDOCAMNT = @I_vDOCAMNT,
                                           @I_vDISAMTAV = @I_vDISAMTAV,
                                           @I_vGSTDSAMT = 0,
                                           @I_vCAMCBKID = @I_vCAMCBKID,
                                           @I_vCHAMCBID = @I_vCHAMCBID,
                                           @I_vCARDNAME = @I_vCARDNAME,
                                           @I_vRATETPID = @I_vRATETPID,
                                           @I_vXCHGRATE = @I_vXCHGRATE,
                                           @I_vEXCHDATE = @I_vEXCHDATE,
                                           @I_vEXPNDATE = @I_vEXPNDATE,
                                           @I_vEXGTBLID = @EXGTBLID,
                                           @I_vTIME1 = @I_vTIME1,
                                           @I_vORCASHAMNT = @ORCASAMT,
                                           @I_vORCHEKAMNT = @ORCHKAMT,
                                           @I_vORCRCRDAMT = @ORCCDAMT,
                                           @I_vORDISTKNAM = @ORDISTKN,
                                           @I_vORTRDISAMT = @ORTDISAM,
                                           @I_vORMSCCHAMT = @OMISCAMT,
                                           @I_vORFRTAMNT = @ORFRTAMT,
                                           @I_vORTAXAMNT = @ORTAXAMT,
                                           @I_vORPRCHAMNT = @OPURAMT,
                                           @I_vORDOCAMNT = @ORDOCAMT,
                                           @I_vORDISAMTAV = @ODISAMTAV,
                                           @I_vRTCLCMTD = @I_vRTCLCMTD,
                                           @I_vCMPANYID = @CMPANYID,
                                           @I_vINTERID = @INTERID,
                                           @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,
                                           @iAddCodeErrState OUTPUT;
        END;
        SELECT @O_iErrorState = 349;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
        BREAK;
    END;
    IF (@@error <> 0)
    BEGIN
        SELECT @O_iErrorState = 350;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
        BREAK;
    END;
    BEGIN
        IF EXISTS (SELECT Workflow_Type_Name FROM WF100001 WHERE FormID = 252)
           AND EXISTS
        (
            SELECT 1
            FROM WF100002
            WHERE WF100002.ACTIVE = 1
                  AND Workflow_Type_Name =
                  (
                      SELECT Workflow_Type_Name FROM WF100001 WHERE FormID = 252
                  )
        )
            SELECT @Workflow_Status = 1;
        ELSE
            SELECT @Workflow_Status = 9;
    END;
    INSERT PM10000
    (
        BACHNUMB,
        BCHSOURC,
        VCHNUMWK,
        VENDORID,
        DOCNUMBR,
        DOCTYPE,
        SOURCDOC,
        DOCAMNT,
        DOCDATE,
        PSTGDATE,
        VADCDTRO,
        VADDCDPR,
        PYMTRMID,
        TAXSCHID,
        DUEDATE,
        DSCDLRAM,
        DISCDATE,
        PRCHAMNT,
        CHRGAMNT,
        CASHAMNT,
        CAMCBKID,
        CDOCNMBR,
        CAMTDATE,
        CAMPMTNM,
        CHEKAMNT,
        CHAMCBID,
        CHEKDATE,
        CAMPYNBR,
        CRCRDAMT,
        CCAMPYNM,
        CHEKNMBR,
        CARDNAME,
        CCRCTNUM,
        CRCARDDT,
        CURNCYID,
        CHEKBKID,
        TRXDSCRN,
        TRDISAMT,
        TAXAMNT,
        FRTAMNT,
        TEN99AMNT,
        UN1099AM,
        MSCCHAMT,
        PORDNMBR,
        SHIPMTHD,
        DISAMTAV,
        DISTKNAM,
        APDSTKAM,
        WROFAMNT,
        CURTRXAM,
        TXENGCLD,
        GSTDSAMT,
        PGRAMSBJ,
        PPSAMDED,
        PPSTAXRT,
        POSTED,
        PSTGSTUS,
        APPLDAMT,
        VCHRNMBR,
        CNTRLTYP,
        MODIFDT,
        MDFUSRID,
        POSTEDDT,
        PTDUSRID,
        NOTEINDX,
        BKTFRTAM,
        BKTMSCAM,
        BKTPURAM,
        PCHSCHID,
        FRTSCHID,
        MSCSCHID,
        PRINTED,
        PRCTDISC,
        RETNAGAM,
        ICTRX,
        ICDISTS,
        Tax_Date,
        PRCHDATE,
        CORRCTN,
        SIMPLIFD,
        CORRNXST,
        VCHRNCOR,
        BNKRCAMT,
        APLYWITH,
        Electronic,
        ECTRX,
        DocPrinted,
        TaxInvReqd,
        BackoutTradeDisc,
        CBVAT,
        TEN99TYPE,
        TEN99BOXNUMBER,
        Workflow_Status
    )
    SELECT @I_vBACHNUMB,
           @BCHSOURC,
           @I_vVCHNUMWK,
           @I_vVENDORID,
           @I_vDOCNUMBR,
           @I_vDOCTYPE,
           '',
           @I_vDOCAMNT,
           @I_vDOCDATE,
           @I_vPSTGDATE,
           CASE
               WHEN @I_vDOCTYPE IN ( 4, 5 ) THEN
                   ''
               ELSE
                   @I_vVADCDTRO
           END,
           @I_vVADDCDPR,
           @I_vPYMTRMID,
           @I_vTAXSCHID,
           @I_vDUEDATE,
           @I_vDSCDLRAM,
           @I_vDISCDATE,
           @I_vPRCHAMNT,
           @I_vCHRGAMNT,
           @I_vCASHAMNT,
           @I_vCAMCBKID,
           @I_vCDOCNMBR,
           @I_vCAMTDATE,
           @I_vCAMPMTNM,
           @I_vCHEKAMNT,
           @I_vCHAMCBID,
           @I_vCHEKDATE,
           @I_vCAMPYNBR,
           @I_vCRCRDAMT,
           @I_vCCAMPYNM,
           @I_vCHEKNMBR,
           @I_vCARDNAME,
           @I_vCCRCTNUM,
           @I_vCRCARDDT,
           CASE
               WHEN @MCINSTALLED = 1 THEN
                   @I_vCURNCYID
               ELSE
                   ''
           END,
           @I_vCHEKBKID,
           @I_vTRXDSCRN,
           @I_vTRDISAMT,
           @I_vTAXAMNT,
           @I_vFRTAMNT,
           @I_vTEN99AMNT,
           @I_vTEN99AMNT,
           @I_vMSCCHAMT,
           @I_vPORDNMBR,
           @I_vSHIPMTHD,
           @I_vDISAMTAV,
           @I_vDISTKNAM,
           @I_vAPDSTKAM,
           0,
           @CURTRXAM,
           1,
           0,
           0,
           0,
           0,
           0,
           20,
           0,
           @I_vVCHNUMWK,
           @CNTRLTYP,
           CONVERT(VARCHAR(12), GETDATE()),
           @I_vMDFUSRID,
           '',
           @I_vPTDUSRID,
           @NOTEINDX,
           CASE
               WHEN @BKTFRTAM > 0 THEN
                   @I_vFRTAMNT - @BKTFRTAM
               ELSE
                   0
           END,
           CASE
               WHEN @BKTMSCAM > 0 THEN
                   @I_vMSCCHAMT - @BKTMSCAM
               ELSE
                   0
           END,
           CASE
               WHEN @BKTPURAM > 0 THEN
                   @I_vPRCHAMNT - @BKTPURAM
               ELSE
                   0
           END,
           @I_vPCHSCHID,
           @I_vFRTSCHID,
           @I_vMSCSCHID,
           0,
           @I_vPRCTDISC * 100.0,
           0,
           0,
           0,
           @I_vTax_Date,
           '',
           0,
           0,
           0,
           '',
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           0,
           @TEN99TYPE,
           @TEN99BOXNUMBER,
           @Workflow_Status;
    IF (@@error <> 0)
    BEGIN
        SELECT @O_iErrorState = 351;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
        BREAK;
    END;
    SELECT @BACHNUMB = BACHNUMB
    FROM SY00500 (NOLOCK)
    WHERE BACHNUMB = @I_vBACHNUMB
          AND BCHSOURC = 'PM_Trxent';
    IF (@BACHNUMB <> '')
    BEGIN
        SELECT @BatchExists = 1;
    END;
    IF (@BatchExists = 1)
    BEGIN
        IF (@I_vBACHNUMB <> '' AND @I_vBatchCHEKBKID = '')
        BEGIN
            SELECT @checkbookid = CHEKBKID
            FROM SY00500 (NOLOCK)
            WHERE BACHNUMB = @I_vBACHNUMB
                  AND BCHSOURC = 'PM_Trxent';
            SELECT @I_vBatchCHEKBKID = @checkbookid;
        END;
        ELSE
        BEGIN
            SELECT @checkbookid = CHEKBKID
            FROM SY00500 (NOLOCK)
            WHERE BACHNUMB = @I_vBACHNUMB
                  AND BCHSOURC = 'PM_Trxent';
        END;
    END;
    ELSE
    BEGIN
        IF @I_vBatchCHEKBKID = ''
        BEGIN
            SELECT @I_vBatchCHEKBKID = CHEKBKID
            FROM PM40100 (NOLOCK)
            WHERE UNIQKEY = '1';
            SELECT @checkbookid = @I_vBatchCHEKBKID;
            BEGIN
                IF (@I_vBatchCHEKBKID = '')
                BEGIN
                    SELECT @O_iErrorState = 11479;
                    EXEC @iStatus = taUpdateString @O_iErrorState,
                                                   @oErrString,
                                                   @oErrString OUTPUT,
                                                   @iAddCodeErrState OUTPUT;
                END;
            END;
        END;
        ELSE
        BEGIN
            SELECT @checkbookid = @I_vBatchCHEKBKID;
        END;
    END;
    IF (@I_vBatchCHEKBKID <> @checkbookid)
    BEGIN
        SELECT @O_iErrorState = 11986;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
    END;
    EXEC @iStatus = taCreateUpdateBatchHeaderRcd @I_vBACHNUMB = @I_vBACHNUMB,
                                                 @I_vSERIES = 4,
                                                 @I_vGLPOSTDT = @I_vPSTGDATE,
                                                 @I_vBCHSOURC = 'PM_Trxent',
                                                 @I_vDOCAMT = @I_vDOCAMNT,
                                                 @I_vORIGIN = 1,
                                                 @I_vNUMOFTRX = 1,
                                                 @I_vCHEKBKID = @I_vBatchCHEKBKID,
                                                 @O_iErrorState = @iAddBatchErrState OUTPUT,
                                                 @oErrString = @iCreateBatchErrString OUTPUT;
    IF ((@iAddBatchErrState <> 0) OR (@iStatus <> 0))
    BEGIN
        IF (@iAddBatchErrState = 12012)
        BEGIN
            EXEC @iStatus = taUpdateString @iAddBatchErrState,
                                           @oErrString,
                                           @oErrString OUTPUT,
                                           @O_oErrorState OUTPUT;
        END;
        SELECT @O_iErrorState = 352;
        EXEC @iStatus = taUpdateString @O_iErrorState,
                                       @oErrString,
                                       @oErrString OUTPUT,
                                       @iAddCodeErrState OUTPUT;
        BREAK;
    END;
    SELECT @iStatement = 1;
    BREAK;
END;
IF (@O_iErrorState <> 0)
    RETURN (@O_iErrorState);
EXEC @iStatus = taPMTransactionInsertPost @I_vBACHNUMB,
                                          @I_vVCHNUMWK,
                                          @I_vVENDORID,
                                          @I_vDOCNUMBR,
                                          @I_vDOCTYPE,
                                          @I_vDOCAMNT,
                                          @I_vDOCDATE,
                                          @I_vPSTGDATE,
                                          @I_vVADCDTRO,
                                          @I_vVADDCDPR,
                                          @I_vPYMTRMID,
                                          @I_vTAXSCHID,
                                          @I_vDUEDATE,
                                          @I_vDSCDLRAM,
                                          @I_vDISCDATE,
                                          @I_vPRCHAMNT,
                                          @I_vCHRGAMNT,
                                          @I_vCASHAMNT,
                                          @I_vCAMCBKID,
                                          @I_vCDOCNMBR,
                                          @I_vCAMTDATE,
                                          @I_vCAMPMTNM,
                                          @I_vCHEKAMNT,
                                          @I_vCHAMCBID,
                                          @I_vCHEKDATE,
                                          @I_vCAMPYNBR,
                                          @I_vCRCRDAMT,
                                          @I_vCCAMPYNM,
                                          @I_vCHEKNMBR,
                                          @I_vCARDNAME,
                                          @I_vCCRCTNUM,
                                          @I_vCRCARDDT,
                                          @I_vCHEKBKID,
                                          @I_vTRXDSCRN,
                                          @I_vTRDISAMT,
                                          @I_vTAXAMNT,
                                          @I_vFRTAMNT,
                                          @I_vTEN99AMNT,
                                          @I_vMSCCHAMT,
                                          @I_vPORDNMBR,
                                          @I_vSHIPMTHD,
                                          @I_vDISAMTAV,
                                          @I_vDISTKNAM,
                                          @I_vAPDSTKAM,
                                          @I_vMDFUSRID,
                                          @I_vPOSTEDDT,
                                          @I_vPTDUSRID,
                                          @I_vPCHSCHID,
                                          @I_vFRTSCHID,
                                          @I_vMSCSCHID,
                                          @I_vPRCTDISC,
                                          @I_vTax_Date,
                                          @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_vBatchCHEKBKID,
                                          @I_vCREATEDIST,
                                          @I_vRequesterTrx,
                                          @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 = 154;
    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 = 'Payables_Transaction',
                                      @I_vINDEX1 = @I_vVCHNUMWK,
                                      @I_vINDEX2 = @I_vBACHNUMB,
                                      @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 = 3343;
        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