Segue uma forma de formatar telefone no Progress… funciona até para os numeros antigos (11)454-4785.
Basta chamar a procedure… ou adaptar para uma function

Procedure

PROCEDURE separa_telefone:
DEFINE INPUT  PARAMETER p_tel           AS CHARACTER.
DEFINE OUTPUT PARAMETER p_tel_formatado AS CHARACTER.

DEFINE VARIABLE icont    AS INTEGER                       NO-UNDO.
DEFINE VARIABLE tel-aux  AS CHARACTER                     NO-UNDO.
DEFINE VARIABLE len      AS CHARACTER INITIAL “7,8,10,12” NO-UNDO.

/* Filtra somente numeros */
DO icont = 1 to LENGTH( TRIM(p_tel) ):
IF INDEX(“0123456789”,SUBSTRING(TRIM(p_tel),icont,1) ) > 0 THEN
ASSIGN tel-aux = tel-aux + SUBSTRING(TRIM(p_tel),icont,1).
END.

ASSIGN p_tel = tel-aux.

/* Retira os zeros a esquerda */
DO WHILE p_tel BEGINS “0”:
ASSIGN p_tel = SUBSTR(p_tel, 2, LENGTH(p_tel) – 1).
END.

/* Numeros antigos (11)508-1300 */
IF LENGTH(p_tel) = 9 THEN DO:
ASSIGN p_tel = SUBSTR(p_tel, 1, 2) + “0” + SUBSTR(p_tel, 3, 9).
END.

/* Verifica se o telefone é valido */
IF LOOKUP(STRING(LENGTH(p_tel)),len) = 0  THEN
ASSIGN p_tel = “0”.

/* Preenche com zeros a esquerda */
ASSIGN p_tel = FILL(“0”,12 – LENGTH(p_tel)) + p_tel.

/* Formata telefone */
ASSIGN p_tel_formatado = STRING(p_tel,”(xxxx)xxxx-xxxx”).

END PROCEDURE.

flw