Pessoal tive a necessidade de durante um comando fazer um comando find first para minha surpresa eu precise criar uma rotina de busca usando o cpf ou cnpj, porém no cliente existem casos onde o cpf e cnpj esta com caracteres referentes a mascara então qual foi minha ideia: FIND FIRST preserv WHERE preserv.cd-unidade = srvalida.cd-unidade AND replace(REPLACE(preserv.nr-cgc-cpf,".","-"),"/") = replace(REPLACE(contrat.nr-cgc-cpf,".","-"),"/") NO-LOCK NO-ERROR. Para minha surpresa quando eu tento executar ou checar a sintaxe do programa ele exibe a mensagem de que o progress client parou existe uma forma de utilizar alguma função nesse sentido, ate tentei criar uma função retornando char mas a quantidade de digitos que ele esta retornando não bate exemplo da função: FUNCTION limpavar RETURN CHARACTER (nm-limpa-retorno-aux AS CHARACTER): ASSIGN nm-limpa-retorno-aux = REPLACE(nm-limpa-retorno-aux,".","-"). ASSIGN nm-limpa-retorno-aux = REPLACE(nm-limpa-retorno-aux,"/"). RETURN nm-limpa-retorno-aux. END FUNCTION. Mas quando retorna ele retorna apenas por exemplo se o cpf for assim 999.999.999-05 ele retorna apenas 99999999 e não 99999999905, alguem saberia como me ajudar estou usando progress 10.1b?
Saudações tenta assim: Código: replace(replace(replace(campo,'.',''),'-',''),'/','') no caso do retorno errado, este não deve estar errado, deve ser pq vc tá dando display sem format e o Progress usa format X(8) por padrão... deve ser...
Não tem problema nenhum fazer replace dentro de replace(talvez não consiga a melhor performance). O replace sempre tem que ser: replace(variavel_que_será_analisada, string_a_ser_substituída, string_substituta) No find, você preencheu corretamente os replaces internos, mas deixou faltando 1 elemento em cada um dos replaces externos. Assim funcionaria: Código: FIND FIRST preserv WHERE preserv.cd-unidade = srvalida.cd-unidade AND replace(REPLACE(preserv.nr-cgc-cpf,".","-"),"/","") = replace(REPLACE(contrat.nr-cgc-cpf,".","-"),"/","") NO-LOCK NO-ERROR. Criar uma function para isso deve funcionar, mas o replace também já é uma function. Só uma observação... Não lembro exatamente em quais circunstâncias, mas sei que colocar functions no where nem sempre funciona como esperado.