SET TERM ^ ;

CREATE OR ALTER procedure SPC_ITEM_CUSTO (
    NFE_ITEM_ID integer)
returns (
    VALOR_CUSTO numeric(15,4))
as
declare variable CONTROLE integer;
declare variable VALOR_UNITARIO numeric(18,8);
declare variable PERCENTUAL_PIS numeric(10,5);
declare variable PERCENTUAL_COFINS numeric(10,5);
declare variable PERCENTUAL_ICMS numeric(10,5);
declare variable PERCENTUAL_BASECALCULO_ICMS numeric(10,5);
declare variable REDUCAO_ICMS_ST numeric(15,4);
declare variable ALIQUOTA_ICMS_ST numeric(15,4);
declare variable VALOR_PIS_UNITARIO numeric(18,8);
declare variable VALOR_COFINS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_ST_UNITARIO numeric(18,8);
declare variable VALOR_ACRESCIMO numeric(10,2);
declare variable VALOR_SEGURO numeric(10,2);
declare variable VALOR_FRETE numeric(10,2);
declare variable VALOR_DESCONTO numeric(10,2);
declare variable OUTROS_CUSTOS numeric(15,2);
declare variable VALOR_FRETE_RATEADO numeric(15,2);
declare variable CUSTO_FRETE_RATEADO numeric(15,2);
declare variable QUANTIDADE numeric(10,5);
declare variable FORMULA_CUSTO_UNITARIO varchar(7000);
declare variable VALOR_CUSTO_RET numeric(10,5);
BEGIN
    FOR SELECT
        T.CONTROLE,
        T.VALOR_UNITARIO,
        COALESCE(T.PERCENTUAL_PIS, 0),
        COALESCE(T.PERCENTUAL_COFINS, 0),
        COALESCE(T.PERCENTUAL_ICMS, 0),
        COALESCE(T.BASECALCULO_ICMS, 0) AS PERCENTUAL_BASECALCULO_ICMS,
        IIF(COALESCE(T.REDUCAO_ICMS_ST, 0) = 0, 100, COALESCE(T.REDUCAO_ICMS_ST, 0)),
        COALESCE(T.ALIQUOTA_ICMS_ST, 0),
        COALESCE(T.VALOR_ACRESCIMO, 0),
        COALESCE(T.VALOR_SEGURO, 0),
        COALESCE(T.VALOR_FRETE, 0),
        COALESCE(T.VALOR_DESCONTO, 0),
        COALESCE(T.OUTROS_CUSTOS, 0),
        COALESCE(T.VALOR_FRETE_RATEADO, 0),
		coalesce(T.CUSTO_FRETE_RATEADO,0),
        T.QUANTIDADE

    FROM TBNFE_ITEM T
    WHERE T.CONTROLE = :NFE_ITEM_ID
    INTO :CONTROLE, :VALOR_UNITARIO, :PERCENTUAL_PIS, :PERCENTUAL_COFINS,
    :PERCENTUAL_ICMS, :PERCENTUAL_BASECALCULO_ICMS, :REDUCAO_ICMS_ST, :ALIQUOTA_ICMS_ST,
    :VALOR_ACRESCIMO, :VALOR_SEGURO, :VALOR_FRETE, :VALOR_DESCONTO, :OUTROS_CUSTOS, :VALOR_FRETE_RATEADO, :CUSTO_FRETE_RATEADO, :QUANTIDADE
    DO BEGIN

        :VALOR_PIS_UNITARIO         = :VALOR_UNITARIO * (:PERCENTUAL_PIS / 100);
        :VALOR_COFINS_UNITARIO      = :VALOR_UNITARIO * (:PERCENTUAL_COFINS / 100);
        :VALOR_ICMS_UNITARIO        = CAST(:VALOR_UNITARIO * CAST(((:PERCENTUAL_BASECALCULO_ICMS / 100) * (:PERCENTUAL_ICMS / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
        :VALOR_ICMS_ST_UNITARIO     = CAST(:VALOR_UNITARIO * CAST(((:REDUCAO_ICMS_ST / 100) * (:ALIQUOTA_ICMS_ST / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
    
        :FORMULA_CUSTO_UNITARIO     = CAST(FN_PARAMETRO('SISTEMA.FORMULA_CUSTO_UNITARIO') AS VARCHAR(7000));

        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_UNIT', :VALOR_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_PIS_UNIT', :VALOR_PIS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_COFINS_UNIT', :VALOR_COFINS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_UNIT', :VALOR_ICMS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_ST_UNIT', :VALOR_ICMS_ST_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ACRES', :VALOR_ACRESCIMO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_SEG', :VALOR_SEGURO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_FRETE', :VALOR_FRETE);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_DESCONTO', :VALOR_DESCONTO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'OUTROS_CUSTOS', :OUTROS_CUSTOS);
		:FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VALOR_FRETE_RATEADO', :VALOR_FRETE_RATEADO);
		:FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'CUSTO_FRETE_RATEADO', :CUSTO_FRETE_RATEADO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'QTD', :QUANTIDADE);

        :VALOR_CUSTO_RET            = CAST(FN_EXECUTE_CALC_V3(:FORMULA_CUSTO_UNITARIO) AS NUMERIC(15,4));
    
        :VALOR_CUSTO                = COALESCE(:VALOR_CUSTO_RET, 0);

        SUSPEND;
    END

END
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFE_ITEM_CUSTO
returns (
    NF integer,
    NFE_ID integer,
    DATA_ENTRADA date,
    NFE_ITEM_ID integer,
    SEQUENCIA integer,
    VALOR_CUSTO_RET numeric(15,4),
    VALOR_CUSTO_ATUAL numeric(15,4),
    DIFERENCA numeric(15,4),
    EMPRESA varchar(100),
    PRODUTO varchar(100),
    QUANTIDADE numeric(18,8),
    VALOR_UNITARIO numeric(18,8),
    VALOR_FRETE_RATEADO numeric(18,8),
    CUSTO_FRETE_RATEADO numeric(18,8))
as
declare variable CONTROLE integer;
declare variable PERCENTUAL_PIS numeric(10,5);
declare variable PERCENTUAL_COFINS numeric(10,5);
declare variable PERCENTUAL_ICMS numeric(10,5);
declare variable PERCENTUAL_BASECALCULO_ICMS numeric(10,5);
declare variable REDUCAO_ICMS_ST numeric(15,4);
declare variable ALIQUOTA_ICMS_ST numeric(15,4);
declare variable VALOR_PIS_UNITARIO numeric(18,8);
declare variable VALOR_COFINS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_ST_UNITARIO numeric(18,8);
declare variable VALOR_ACRESCIMO numeric(10,2);
declare variable VALOR_SEGURO numeric(10,2);
declare variable VALOR_FRETE numeric(10,2);
declare variable VALOR_DESCONTO numeric(10,2);
declare variable OUTROS_CUSTOS numeric(15,2);
declare variable VR_FRETE_RATEADO numeric(15,2);
declare variable CUS_FRETE_RATEADO numeric(15,2);
declare variable FORMULA_CUSTO_UNITARIO varchar(7000);
declare variable VALOR_CUSTO numeric(10,5);
declare variable NFE_CONTROLE integer;
declare variable SEQUENCIA_ITEM integer;
declare variable VALOR_CUSTO_ITEM numeric(10,5);
BEGIN
    FOR SELECT
        T.NFE_CONTROLE,
        E.DATA_ENTRADA,
        T.CONTROLE,
        T.SEQUENCIA,
        T.VALOR_UNITARIO,
        COALESCE(T.PERCENTUAL_PIS, 0),
        COALESCE(T.PERCENTUAL_COFINS, 0),
        COALESCE(T.PERCENTUAL_ICMS, 0),
        COALESCE(T.BASECALCULO_ICMS, 0) AS PERCENTUAL_BASECALCULO_ICMS,
        IIF(COALESCE(T.REDUCAO_ICMS_ST, 0) = 0, 100, COALESCE(T.REDUCAO_ICMS_ST, 0)),
        COALESCE(T.ALIQUOTA_ICMS_ST, 0),
        COALESCE(T.VALOR_ACRESCIMO, 0),
        COALESCE(T.VALOR_SEGURO, 0),
        COALESCE(T.VALOR_FRETE, 0),
        COALESCE(T.VALOR_DESCONTO, 0),
        COALESCE(T.OUTROS_CUSTOS, 0),
        T.QUANTIDADE,
        T.VALOR_CUSTO,
        E.EMPRESA_RAZAOSOCIAL,
        T.PRODUTO_DESCRICAO,
        E.NUMERO_NOTAFISCAL,
        T.VALOR_FRETE_RATEADO,
        coalesce(T.CUSTO_FRETE_RATEADO,0)

    FROM TBNFE_ITEM T
    INNER JOIN TBNFE E ON E.CONTROLE = T.NFE_CONTROLE
    INNER JOIN TBPRODUTO P ON P.CODIGO = T.PRODUTO_CODIGO
    INNER JOIN TBOPERACAO O ON O.CODIGO = T.OPERACAO_CODIGO
    WHERE T.DATA_ENTRADA >= '01.05.2022'
    AND  T.VALOR_CUSTO > 0
    AND P.INVENTARIO = '1'
    AND O.CONTROLE_ESTOQUE = '1'
    AND T.CFOP_CODIGO NOT IN ('1.124', '2.124', '1.352', '2.352', '2.949', '1.949')
    ORDER BY T.DATA_ENTRADA DESC
    INTO :NFE_CONTROLE, :DATA_ENTRADA, :CONTROLE, :SEQUENCIA_ITEM, :VALOR_UNITARIO, :PERCENTUAL_PIS, :PERCENTUAL_COFINS,
    :PERCENTUAL_ICMS, :PERCENTUAL_BASECALCULO_ICMS, :REDUCAO_ICMS_ST, :ALIQUOTA_ICMS_ST,
    :VALOR_ACRESCIMO, :VALOR_SEGURO, :VALOR_FRETE, :VALOR_DESCONTO, :OUTROS_CUSTOS, :QUANTIDADE, :VALOR_CUSTO_ITEM, :EMPRESA, :PRODUTO, :NF,
    :VR_FRETE_RATEADO, :CUS_FRETE_RATEADO
    DO BEGIN

        :VALOR_PIS_UNITARIO         = :VALOR_UNITARIO * (:PERCENTUAL_PIS / 100);
        :VALOR_COFINS_UNITARIO      = :VALOR_UNITARIO * (:PERCENTUAL_COFINS / 100);
        :VALOR_ICMS_UNITARIO        = CAST(:VALOR_UNITARIO * CAST(((:PERCENTUAL_BASECALCULO_ICMS / 100) * (:PERCENTUAL_ICMS / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
        :VALOR_ICMS_ST_UNITARIO     = CAST(:VALOR_UNITARIO * CAST(((:REDUCAO_ICMS_ST / 100) * (:ALIQUOTA_ICMS_ST / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
    
        :FORMULA_CUSTO_UNITARIO     = CAST(FN_PARAMETRO('SISTEMA.FORMULA_CUSTO_UNITARIO') AS VARCHAR(7000));

        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_UNIT', :VALOR_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_PIS_UNIT', :VALOR_PIS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_COFINS_UNIT', :VALOR_COFINS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_UNIT', :VALOR_ICMS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_ST_UNIT', :VALOR_ICMS_ST_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ACRES', :VALOR_ACRESCIMO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_SEG', :VALOR_SEGURO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_FRETE', :VALOR_FRETE);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_DESCONTO', :VALOR_DESCONTO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'OUTROS_CUSTOS', :OUTROS_CUSTOS);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VALOR_FRETE_RATEADO', :VR_FRETE_RATEADO);
		:FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'CUSTO_FRETE_RATEADO', :CUS_FRETE_RATEADO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'QTD', :QUANTIDADE);

        :VALOR_CUSTO = CAST(FN_EXECUTE_CALC_V3(:FORMULA_CUSTO_UNITARIO) AS NUMERIC(15,4));


    
        IF(:VALOR_CUSTO <> :VALOR_CUSTO_ITEM) THEN
        BEGIN
            :NFE_ID = :NFE_CONTROLE;
            :NFE_ITEM_ID = :CONTROLE;
            :SEQUENCIA = :SEQUENCIA_ITEM;
            :VALOR_CUSTO_RET = :VALOR_CUSTO;
            :VALOR_CUSTO_ATUAL = :VALOR_CUSTO_ITEM;
            :VALOR_FRETE_RATEADO = :VR_FRETE_RATEADO;
			:CUSTO_FRETE_RATEADO = :CUS_FRETE_RATEADO;
            :DIFERENCA = ABS(:VALOR_CUSTO_RET - :VALOR_CUSTO_ATUAL);
            if (DIFERENCA > 0.0001) THEN
            SUSPEND;
        END

    END

END
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER procedure SPU_NFE_ITEM_CUSTO
as
declare variable CONTROLE integer;
declare variable VALOR_UNITARIO numeric(18,8);
declare variable PERCENTUAL_PIS numeric(10,5);
declare variable PERCENTUAL_COFINS numeric(10,5);
declare variable PERCENTUAL_ICMS numeric(10,5);
declare variable PERCENTUAL_BASECALCULO_ICMS numeric(10,5);
declare variable REDUCAO_ICMS_ST numeric(15,4);
declare variable ALIQUOTA_ICMS_ST numeric(15,4);
declare variable VALOR_PIS_UNITARIO numeric(18,8);
declare variable VALOR_COFINS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_ST_UNITARIO numeric(18,8);
declare variable VALOR_ACRESCIMO numeric(10,2);
declare variable VALOR_SEGURO numeric(10,2);
declare variable VALOR_FRETE numeric(10,2);
declare variable VALOR_DESCONTO numeric(10,2);
declare variable OUTROS_CUSTOS numeric(15,2);
declare variable VALOR_FRETE_RATEADO numeric(15,2);
declare variable CUSTO_FRETE_RATEADO numeric(15,2);
declare variable QUANTIDADE numeric(10,5);
declare variable FORMULA_CUSTO_UNITARIO varchar(7000);
declare variable VALOR_CUSTO numeric(10,5);
BEGIN
    FOR SELECT
        T.CONTROLE,
        T.VALOR_UNITARIO,
        COALESCE(T.PERCENTUAL_PIS, 0),
        COALESCE(T.PERCENTUAL_COFINS, 0),
        COALESCE(T.PERCENTUAL_ICMS, 0),
        COALESCE(T.BASECALCULO_ICMS, 0) AS PERCENTUAL_BASECALCULO_ICMS,
        IIF(COALESCE(T.REDUCAO_ICMS_ST, 0) = 0, 100, COALESCE(T.REDUCAO_ICMS_ST, 0)),
        COALESCE(T.ALIQUOTA_ICMS_ST, 0),
        COALESCE(T.VALOR_ACRESCIMO, 0),
        COALESCE(T.VALOR_SEGURO, 0),
        COALESCE(T.VALOR_FRETE, 0),
        COALESCE(T.VALOR_DESCONTO, 0),
        COALESCE(T.OUTROS_CUSTOS, 0),
        COALESCE(T.VALOR_FRETE_RATEADO, 0),
		COALESCE(T.CUSTO_FRETE_RATEADO, 0),
        T.QUANTIDADE

    FROM TBNFE_ITEM T
    INTO :CONTROLE, :VALOR_UNITARIO, :PERCENTUAL_PIS, :PERCENTUAL_COFINS,
    :PERCENTUAL_ICMS, :PERCENTUAL_BASECALCULO_ICMS, :REDUCAO_ICMS_ST, :ALIQUOTA_ICMS_ST,
    :VALOR_ACRESCIMO, :VALOR_SEGURO, :VALOR_FRETE, :VALOR_DESCONTO, :OUTROS_CUSTOS, :VALOR_FRETE_RATEADO, :CUSTO_FRETE_RATEADO, :QUANTIDADE
    DO BEGIN

        :VALOR_PIS_UNITARIO         = :VALOR_UNITARIO * (:PERCENTUAL_PIS / 100);
        :VALOR_COFINS_UNITARIO      = :VALOR_UNITARIO * (:PERCENTUAL_COFINS / 100);
        :VALOR_ICMS_UNITARIO        = CAST(:VALOR_UNITARIO * CAST(((:PERCENTUAL_BASECALCULO_ICMS / 100) * (:PERCENTUAL_ICMS / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
        :VALOR_ICMS_ST_UNITARIO     = CAST(:VALOR_UNITARIO * CAST(((:REDUCAO_ICMS_ST / 100) * (:ALIQUOTA_ICMS_ST / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
    
        :FORMULA_CUSTO_UNITARIO     = CAST(FN_PARAMETRO('SISTEMA.FORMULA_CUSTO_UNITARIO') AS VARCHAR(7000));

        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_UNIT', :VALOR_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_PIS_UNIT', :VALOR_PIS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_COFINS_UNIT', :VALOR_COFINS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_UNIT', :VALOR_ICMS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_ST_UNIT', :VALOR_ICMS_ST_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ACRES', :VALOR_ACRESCIMO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_SEG', :VALOR_SEGURO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_FRETE', :VALOR_FRETE);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_DESCONTO', :VALOR_DESCONTO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'OUTROS_CUSTOS', :OUTROS_CUSTOS);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VALOR_FRETE_RATEADO', :VALOR_FRETE_RATEADO);
		:FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'CUSTO_FRETE_RATEADO', :CUSTO_FRETE_RATEADO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'QTD', :QUANTIDADE);

        :VALOR_CUSTO = CAST(FN_EXECUTE_CALC_V3(:FORMULA_CUSTO_UNITARIO) AS NUMERIC(15,4));
    
        IF(:VALOR_CUSTO > 0) THEN
        BEGIN
            UPDATE TBNFE_ITEM V SET V.VALOR_CUSTO = :VALOR_CUSTO WHERE V.CONTROLE = :CONTROLE;
        END

    END

END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER trigger ttbnfe_item_b11u for tbnfe_item
active before update position 11
AS

declare variable VALOR_PIS_UNITARIO numeric(18,8);
declare variable VALOR_COFINS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_UNITARIO numeric(18,8);
declare variable VALOR_ICMS_ST_UNITARIO numeric(18,8);
declare variable FORMULA_CUSTO_UNITARIO varchar(7000);
declare variable VALOR_CUSTO_RET numeric(10,5);
begin
  IF(NEW.VALOR_FRETE_RATEADO IS DISTINCT FROM OLD.VALOR_FRETE_RATEADO) THEN
  BEGIN
        :VALOR_PIS_UNITARIO         = NEW.VALOR_UNITARIO * (NEW.PERCENTUAL_PIS / 100);
        :VALOR_COFINS_UNITARIO      = NEW.VALOR_UNITARIO * (NEW.PERCENTUAL_COFINS / 100);
        :VALOR_ICMS_UNITARIO        = CAST(NEW.VALOR_UNITARIO * CAST(((NEW.BASECALCULO_ICMS / 100) * (NEW.PERCENTUAL_ICMS / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
        :VALOR_ICMS_ST_UNITARIO     = CAST(NEW.VALOR_UNITARIO * CAST(((IIF(COALESCE(NEW.REDUCAO_ICMS_ST, 0) = 0, 100, COALESCE(NEW.REDUCAO_ICMS_ST, 0)) / 100) * (NEW.ALIQUOTA_ICMS_ST / 100)) AS NUMERIC(15,4)) AS NUMERIC(18,8));
    
        :FORMULA_CUSTO_UNITARIO     = CAST(FN_PARAMETRO('SISTEMA.FORMULA_CUSTO_UNITARIO') AS VARCHAR(7000));

        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_UNIT', COALESCE(NEW.VALOR_UNITARIO, 0));
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_PIS_UNIT', :VALOR_PIS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_COFINS_UNIT', :VALOR_COFINS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_UNIT', :VALOR_ICMS_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ICMS_ST_UNIT', :VALOR_ICMS_ST_UNITARIO);
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_ACRES', COALESCE(NEW.VALOR_ACRESCIMO, 0));
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_SEG', COALESCE(NEW.VALOR_SEGURO, 0));
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_FRETE', COALESCE(NEW.VALOR_FRETE, 0));
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VR_DESCONTO', COALESCE(NEW.VALOR_DESCONTO, 0));
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'OUTROS_CUSTOS', COALESCE(NEW.OUTROS_CUSTOS, 0));
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'VALOR_FRETE_RATEADO', COALESCE(NEW.VALOR_FRETE_RATEADO, 0));
		:FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'CUSTO_FRETE_RATEADO', COALESCE(NEW.CUSTO_FRETE_RATEADO, 0));
        :FORMULA_CUSTO_UNITARIO     = REPLACE(:FORMULA_CUSTO_UNITARIO, 'QTD', COALESCE(NEW.QUANTIDADE, 0));

        :VALOR_CUSTO_RET            = CAST(FN_EXECUTE_CALC_V3(:FORMULA_CUSTO_UNITARIO) AS NUMERIC(15,4));
    
        NEW.VALOR_CUSTO             = COALESCE(:VALOR_CUSTO_RET, 0);
  END
end
^

SET TERM ; ^




UPDATE TBPARAMETRO SET 
    OBSERVACAO = 'VARIÁVEIS DISPONÍVEIS DO ITEM:
- VR_UNIT - VALOR UNITARIO;
- VR_PIS_UNIT - PIS UNITARIO;
- VR_COFINS_UNIT - COFINS UNITARIO;
- VR_ICMS_UNIT - ICMS UNITARIO;
- VR_ICMS_ST_UNIT - ICMS ST UNITARIO;
- VR_ACRES - VALOR ACRESCIMO;
- VR_SEG - VALOR SEGURO;
- VR_FRETE - VALOR_FRETE;
- VR_DESCONTO - VALOR DESCONTO;
- OUTROS_CUSTOS - OUTROS CUSTOS;
- VALOR_FRETE_RATEADO - VALOR DO FRETE RATEADO; (TOTAL)
- CUSTO_FRETE_RATEADO - CUSTO DO FRETE RATEADO; (UNITARIO)
- QTD - QUANTIDADE;'
WHERE (TABELA = 'SISTEMA') AND
      (CODIGO = 'FORMULA_CUSTO_UNITARIO');


COMMIT WORK;