Bom dia! Gostaria de saber como poderia exibir o conteúdo do array, sendo concatenado em uma mensagem, Segue o script da função:
Bom dia! Gostaria de saber como poderia exibir o conteúdo do array, sendo concatenado em uma mensagem, Segue o script da função:
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!
— Victor Hugo 17 de Nov de 2022Aproveitando 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
Nesse exemplo, você quer mostrar tudo que está dentro do array aLin?
— Daniel Mendes 17 de Nov de 2022