Alguém tem algum exemplo de implementação do método AddLine do MVC só que para inserção automática de múltiplas linhas sequenciais baseadas em uma query e usando de gatilho um campo do cabeçalho?
1 curtida
Bom dia Bruno,
Cara segue função que inclui linhas do result set de uma query.
Só um exemplo campo no cabeçalho: Inf. Clientes: Sim será o gatilho do cabeçalho.
static function fPreencha()
local lContinua := .T.
local oModel := fwModelActive()
Local oModelGRID := oModel:GetModel(‘MdGridZK1’)
local oStruct := oModelGRID:GetStruct()
local aCampos := oStruct:GetFields()
local ni := 0
local no := 0
local cItem := ""
local nLinhaMax := oModelGrid:length()
local nLinMaxAtu := oModelGrid:length()
local cCodigoCli := "***"
local cLojaCli := "***"
local aValores := {}
local cAlias := getNextAlias()
local aLinhaAtual := fwSaveRows()
if !altera .and. !inclui
MsgStop("A funcionalidade somente pode ser utilizada na inclusão ou alteração!","A T E N Ç Ã O !")
return
endif
while lContinua
if nLinhaMax <= 0
msgStop("Todas as linhas estão deletadas, favor verificar!","A T E N Ç Ã O !")
return
endif
oModelGRID:goLine(nLinhaMax)
if oModelGRID:isDeleted()
nLinhaMax -= 1
else
cCodigoCli := oModelGrid:getValue("ZK1_CLIENT")
cLojaCli := oModelGrid:getValue("ZK1_LOJA")
lContinua := .F.
endif
enddo
oModelGRID:goLine(nLinMaxAtu)
aValores := {}
for ni := 1 to len(aCampos)
aadd(aValores, {aCampos[ni][3], oModelGrid:getValue(aCampos[ni][3])})
next
cQuery := " SELECT A1_COD, A1_LOJA FROM "+retsqlname("SA1")+" (NOLOCK) "+CRLF
cQuery += " WHERE A1_COD = '"+cCodigoCli+"' AND A1_LOJA <> '"+cLojaCli+"' AND A1_YCODGRU = '' "+CRLF
cQuery += " AND D_E_L_E_T_ <> '*' " +CRLF
tcQuery cQuery new alias &cAlias
cItem := ""
while !(cAlias)->(eof())
oModelGrid:addLine()
for no := 1 to len(aValores)
do case
case alltrim(aValores[no][1]) == "ZK1_ITEM"
if empty(cItem)
cItem := soma1(aValores[no][2])
else
cItem := soma1(cItem)
endif
oModelGrid:loadValue(aValores[no][1],cItem)
case alltrim(aValores[no][1]) == "ZK1_CLIENT"
oModelGrid:loadValue(aValores[no][1],(cAlias)->A1_COD)
case alltrim(aValores[no][1]) == "ZK1_LOJA"
oModelGrid:loadValue(aValores[no][1],(cAlias)->A1_LOJA)
case alltrim(aValores[no][1]) == "ZK1_MATRIZ"
oModelGrid:loadValue(aValores[no][1],'N')
otherwise
oModelGrid:loadValue(aValores[no][1],aValores[no][2])
endcase
next
(cAlias)->(dbSkip())
enddo
(cAlias)->(dbCloseArea())
fwRestRows(aLinhaAtual)
return nil
1 curtida
Muito obrigado Dilson!