select

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

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.COR_ANTIGA,
            M.TAM_NOVO,
            M.tamanho,
            iif(M.tamanho >= 10,'0',M.tamanho)||fn_lpad(m.cor_antiga,4,'0')||fn_lpad(m.codigooriginal,7,'0') as PRE_EAN
        from(
            select
                 s.modelo_id,
                 S.COR_ID,
                 cast(M.codigooriginal as integer) as codigooriginal,
                 m.descricao as MODELO,
                 c.descricao as COR,
                 c.codigo cor_antiga,
                 fn_tamanho_produto(p.codigo, s.tamanho) as TAM_NOVO,
                 p.codigo as produto_id,
                 S.tamanho
            from (
                SELECT C.Modelo_Id,
                   C.COR_ID,
                   Coalesce(T.Tamanho,0) as TAMANHO,
                   M.grade_codigo
              From TBModelo M 
              Left Join TbModelo_Cor C On M.Codigo = C.Modelo_Id
              Left Join TbGrade G On G.Codigo = M.Grade_Codigo
              Left Join TbGrade_Seq T On T.Tamanho <= G.Tamanhos
              WHERE M.grade_codigo > 0
              AND IIF(M.t01 = '1' AND T.Tamanho = 1, true,
                  IIF(M.t02 = '1' AND T.Tamanho = 2, true,
                  IIF(M.t03 = '1' AND T.Tamanho = 3, true,
                  IIF(M.t04 = '1' AND T.Tamanho = 4, true,
                  IIF(M.t05 = '1' AND T.Tamanho = 5, true,
                  IIF(M.t06 = '1' AND T.Tamanho = 6, true,
                  IIF(M.t07 = '1' AND T.Tamanho = 7, true,
                  IIF(M.t08 = '1' AND T.Tamanho = 8, true,
                  IIF(M.t09 = '1' AND T.Tamanho = 9, true,
                  IIF(M.t10 = '1' AND T.Tamanho =10, true, FALSE))))))))))

            ) 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

        ) m  where codigooriginal > 0

    ) a
)