Duvida sobre o addline em MVC com grid

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!