select

    substring(PRE_EAN from 1 for  8) PREFIXO,
    substring(PRE_EAN from 8 for 12)CODIGO,
    MODELO_ID,
    COR_ID,
    TAMANHO_NOVO TAMANHO,
    EAN

from(
    select
        a.*,
        PRE_EAN||fn_digitoean(PRE_EAN) as EAN
    from(
        select  
            M.MODELO,
            M.COR,
            M.MODELO_ID,
            M.COR_ID,
            M.PRODUTO_ID,
            M.PERFIL,
            M.COR_ANTIGA,
            M.OLD_GRADE_CODIGO,
            M.TAM_NOVO,
            J.TAMANHO as TAM_ANTIGO,
            J.TAMANHO_ANTIGO,
            J.TAMANHO_NOVO,
            iif(j.TAMANHO_ANTIGO >= 10,'0',j.TAMANHO_ANTIGO)||fn_lpad(m.cor_antiga,4,'0')||fn_lpad(m.modelo_id,7,'0') as PRE_EAN
        from(
            select
                 s.*,
                 m.descricao as MODELO,
                 c.descricao as COR,
                 c.cor_antiga,
                 m.old_grade_codigo,
                 fn_tamanho_produto(p.codigo, s.tamanho) as TAM_NOVO,
                 p.codigo as produto_id
            from vwsku s, tbcor c, tbmodelo m, tbproduto p
            where m.codigo = s.modelo_id
            and c.codigo = s.cor_id
            and p.modelo_codigo = m.codigo
            and p.cor_codigo = c.codigo
            and s.PERFIL is not null
        ) m
        left join tbmapeamento_grade j on j.grade_id = m.old_grade_codigo and j.tamanho_novo = m.tamanho and j.tamanho_novo > 0
    ) a where TAM_NOVO = TAM_ANTIGO
)-- where EAN = '2009210203001'