Exibindo todo o conteúdo de um array

Bom dia! Gostaria de saber como poderia exibir o conteúdo do array, sendo concatenado em uma mensagem, Segue o script da função:

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Nesse exemplo, você quer mostrar tudo que está dentro do array aLin?

Victor,

Se compreendi bem, o que você deseja é isso:


//-------------------------------------------------------------------
/*/{Protheus.doc} ValidaFunc
Valida alguma coisa...

@return lRet, logical, Descrição...

@author Daniel Mendes
@since 17/11/2022
@version 1.0
/*/
//-------------------------------------------------------------------
user function ValidaFunc()
local aLinhas as array
local cWorkarea as character
local aAreaZTR as array
local lRet as logical

cWorkarea := Alias()
aAreaZTR := ZTR->(GetArea())

ZTR->(dbSetOrder(5))

if ZTR->(dbSeek(M->ZTR_FILIA+M->ZTR_MAT))
    while !ZTR->(Eof()) .and. M->ZTR_FILIA+M->ZTR_MAT == ZTR->ZTR_FILIA+ZTR->ZTR_MAT
        aAdd(aLinhas, AllTrim(ZTR->ZTR_CELEMP)) 
        ZTR->(dbSkip())
    enddo

    if MsgYesNo("Colaborador já cadastrado. Linhas cadastradas: " + arrayToStr(aLin) + ", gostaria de amarrar mesmo assim? ", "[Título da mensagem]")
        lRet := .T.
    else
        lRet := .F.
    endif
else
    lRet := .T.
endif

RestArea(aAreaZTR)

if !Empty(cWorkarea)
    dbSelectArea(cWorkarea)
endif

return lRet

//-------------------------------------------------------------------
/*/{Protheus.doc} arrayToStr
Converte um array simples com valores em string para uma única string

@param aArray, array, array de valores em string para gerar uma única string

@return cRet, character, valor do array em character

@author Daniel Mendes
@since 17/11/2022
@version 1.0
/*/
//-------------------------------------------------------------------
static function arrayToStr(aArray)
local nI as numeric
local cRet as character

cRet := ""

for nI := 1 to Len(aArray)
    cRet += aArray[nY] + ","
next

cRet := SubStr(cRet, 1, Len(cRet) - 1)

return cRet

Não testei o fonte, mas acredito que isso venha a resolver o seu problema.

Porém existem alguns pontos de atenção, como qual o tamanho da string que pode ser gerada, valores duplicados etc.

Espero ter ajudado :)

Agradeço, ajudou muito!

Aproveitando o gancho do Daniel, também poderia ser feito como coloquei abaixo. Pressupondo que você não precise do array em outros locais/processamentos. Como muita coisa em programação sempre tem várias formas de fazer o que se precisa.


user function ValidaFunc()
    local aLinhas as array
    local cWorkarea as character
    local cTxtTmp as character
    local aAreaZTR as array
    local lRet as logical

    cWorkarea := Alias()
    aAreaZTR := ZTR->(GetArea())

    cTxtTmp    := ''
    ZTR->(dbSetOrder(5))
    If ZTR->(dbSeek(M->ZTR_FILIA+M->ZTR_MAT))
        While     ZTR->(!Eof()) .and. ;
                ZTR->ZTR_FILIA == M->ZTR_FILIA .And. ;
                ZTR->ZTR_MAT == M->ZTR_MAT

            cTxtTmp    += AllTrim(ZTR->ZTR_CELEMP)

            ZTR->(dbSkip())

            //Só não adiciona vírgula no último item
            If ZTR->(!Eof())
                cTxtTmp    += ','
            EndIf
        EndDo

        If MsgYesNo("Colaborador já cadastrado. Linhas cadastradas: " + cTxtTmp + ", gostaria de amarrar mesmo assim? ", "[Título da mensagem]")
            lRet := .T.
        Else
            lRet := .F.
        EndIf
    Else
        lRet := .T.
    EndIf

    RestArea(aAreaZTR)

    If !Empty(cWorkarea)
        dbSelectArea(cWorkarea)
    EndIf

return lRet