Duvida Formatação do Endereço (Logradouro + Número) - Datasul

Discussão em 'EMS , HCM e Totvs 11' iniciado por Alan Gastaldi, Dezembro 4, 2025.

  1. Alan Gastaldi

    Alan Gastaldi Sem Pontuação

    Olá a todos.

    Estou a um tempo procurando como o Datasul faz para separar o logradouro e o número do campo de endereço, mas até agora não obtive sucesso.

    Cheguei a encontrar este tópico aqui, aqui do fórum, mas é de 2016 e tem apenas a mesma recomendação que sempre ouvi - separar o logradouro do número com uma vírgula.

    Durante este tempo, alguém chegou a descobrir se existe alguma API ou BO específica pra isso? Ou pelo menos se essa é realmente a regra que o Datasul usa?

    Obrigado pessoal.
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Se já tem vírgula é só pegar assim

    ENTRY(1, CampoEndereco,",")
    ENTRY(2, CampoEndereco,",")

    Ou só

    ENTRY(1, CampoEndereco)
    ENTRY(2, CampoEndereco)
    Alan Gastaldi curtiu isso.
  3. Alan Gastaldi

    Alan Gastaldi Sem Pontuação

    @rafael.andrade, minha dúvida é mais sobre a regra em si, pois ainda tem o complemento, que não sei se existe uma regra de fato para segregar. Por isso estava procurando se existe alguma API ou alguém que já teve acesso a regra original.

    Na minha base, tentei usar um Regex com o padrão /(.*)(?:, ?)([^ ]*)(.*)/, mas não deu certo. Agora eu não sei se é porque minha regra não está valida ou se é porque minha base tem dados antigos que podem ser anteriores a essa validação.

    O Regex está pegando o primeiro grupo até a virgula, o segundo grupo depois da virgula até um espaço e o complemento é do espaço em diante, por exemplo para "RUA QUALQUER COISA, 350A SALA 3", ele separa:
    Grupo 1: RUA QUALQUER COISA
    Grupo 2: 350A
    Grupo 3: SALA 3
  4. lcpaulino

    lcpaulino Membro Participativo

    olá, tente isso (abaixo), talvez ajude:

    DEFINE VARIABLE c-endereco AS CHARACTER NO-UNDO.
    DEFINE VARIABLE c-rua AS CHARACTER NO-UNDO.
    DEFINE VARIABLE c-nro AS CHARACTER NO-UNDO.
    DEFINE VARIABLE c-comp AS CHARACTER NO-UNDO.
    DEFINE VARIABLE h-cdapi704 AS HANDLE NO-UNDO.
    FOR FIRST emitente NO-LOCK
    WHERE emitente.cod-emitente = 27174 /*codigo do cliente/fornecedor desejado*/

    :
    RUN cdp/cdapi704.p PERSISTENT SET h-cdapi704.
    ASSIGN c-endereco = emitente.endereco
    c-rua = ""
    c-nro = ""
    c-comp = "".
    IF INDEX(c-endereco,CHR(ASC("§"))) > 0 THEN /* Retirar caracter especial */
    ASSIGN c-endereco = REPLACE(c-endereco,CHR(ASC("§")),"").
    RUN pi-trata-endereco IN h-cdapi704 (INPUT c-endereco,
    OUTPUT c-rua,
    OUTPUT c-nro,
    OUTPUT c-comp).
    IF c-nro = "" THEN
    ASSIGN c-nro = "S/N".


    MESSAGE 'c-endereco: ' c-endereco SKIP
    'c-rua: ' c-rua SKIP
    'c-nro: ' c-nro SKIP
    'c-comp: ' c-comp

    VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.



    END.

    IF VALID-HANDLE(h-cdapi704) THEN DO:
    DELETE PROCEDURE h-cdapi704.
    ASSIGN h-cdapi704 = ?.
    END.
    Alan Gastaldi curtiu isso.
  5. Alan Gastaldi

    Alan Gastaldi Sem Pontuação

    Obrigado @lcpaulino, acho que isso vai funcionar bem.

Compartilhe esta Página