Versão atual:

Copia de Dados para Grids MVC

Olá Pessoal, estou com um problema em replicar dados de uma Grid para outra...Tenho uma

rotina X com Grid, e ao apertar um botão abre uma rotina Y também com Grid, ambas em MVC.

ao alterar os dados de ambas as Grids quero que elas recebam os mesmo dados alterados. O problema é que a primeira linha de ambas as Grids ficam vazias. só na segunda linha que é preenchida com os dados alterados.

Como são dois Fontes, vou separa-los aqui

Tela Principal:

//Define os dados para o Objeto da Classe NF
User Function AbreDT()
    Local cProduto  := ""
    Local nLinha    := 1    
    Local oModel      := FwModelActive()
    Local oView     := FwViewActive() //Objeto da View, adicionado para dar refresh após adicioar uma nova linha
    Local oGrid    := Nil
    Local nTotLin

    oModel:GetModel("CABEC")
    //Pegando os dados da Grid
    oGrid := oModel:GetModel("CABEC_ITENS")

    nTotLin := oGrid:Length(.F.)

    For nLinha := 1 To nTotLin
        //Posicionando na linha atual
        oGrid:GoLine(nLinha)
        //Se a linha tiver deletada
        If oGrid:IsDeleted()
            /* ... */

            //Senão, se não for inserção
        ElseIf ! oGrid:IsInserted()

            //POSIONAR NO CAMPO ALTERADO
            cProduto := oGrid:GetValue("PRODUTO_PROTHEUS") //Pegando conteudo da Grid campo PRODUTO

            If (!Empty("PRODUTO_PROTHEUS"))
                oItemNF:SetProdProtheus(cProduto)
                //...set dos campos que são alterados
                //..set dos campos que são alterados
            EndIf
        EndIf
    Next

    oGrid:SetLine(1)

    // Atualiza toda a tela*
    oView:getModel("CABEC_ITENS")

    //oGrid:goLine(nLinha)

    U_NFLNFE02(oView) //Função Tela de Detalhes

    oView:deActivate()
    oView:activate()
Return()

Fonte da Segunda Grid, Tela de Detalhes

User Function NFLNFE02(oView)
    Local aArea            := GetArea()
    Local aEnableButtons := {}
    Local nRet             := 1

    aEnableButtons    :=    {    { .F., Nil }, { .F., Nil }, ;
        { .F., Nil }, { .F., Nil }, ;
        { .F., Nil }, { .F., Nil }, ;
        { .T., Nil }, { .T., Nil }, ;
        { .F., Nil }, { .F., Nil }, ;
        { .F., Nil }, { .F., Nil }, ;
        { .F., Nil }, { .F., Nil }    } //"Confirmar"###"Fechar"

    oModelDT := FWLoadModel("NFLNFE02")
    oModelDT:SetOperation(4)

    oModelDT:Activate()

    oMdlGrid:= oModelDT:getModel("GRID_ITENS")

    oMdlGrid:SetLine(1)

    nRet := FWExecView("e" , "NFLNFE02", 4, /*oDlg*/, ,/* bOk*/ ,0/*nPercReducao*/, aEnableButtons, /*bCancel*/ , /*cOperatId*/, /*cToolBar*/, oModelDT)

    if nRet == 0 /*Confirmação da tela*/

        FWMsgRun(,{|| CursorWait(), oView:deActivate(), oView:activate(), CursorArrow() }, "NFLNFE02", "Atualizando...")

    endIf

    RestArea(aArea)
Return

Obs: Na imagem está o campo que ter que ser atualizado/alterado em ambas as Grid, é o o campo (Produto) na primeira linha vem em brando, na linha de baixo ele carrega o dado alterado. o resto dos campos tem um carregamento diferente já que utilizo um objeto, então já estão pré carregados.

Obriga desde já!

Versões (2):

Ver a versão formatada

Replicar dados de um Rotina para outra

Comentário

new question