Imprimi Página | Fechar janela

Atualizar Grid em Mvc

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: ADVPL
Descrição do Forum: Dúvidas sobre a programação em ADVPL
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=1&TopicID=43759
Data da Impressão: quarta-feira, 24 de abril de 2024 at 10:48


Topico: Atualizar Grid em Mvc

Postado por: WANDERSONW
Assunto: Atualizar Grid em Mvc
Data Postagem: quinta-feira, 2 de setembro de 2021 at 15:22

Boa Tarde Pessoal,

Tenho uma tela de cadastro em MVC que tem cabeçalho e item mas, usando apenas uma tabela, neste cadastro o cabeçalho tenho 2 campos cCpoNatd e cCpoNatA, após preencher este segundo campo cCpoNatA gostaria que estás informações fossem para a grid de uma forma sequencia, tem como fazer isso?

Exemplo:

cCpoNatd: 000001
cCpoNatA: 000010

Na grid ele vai inserir as 10 linhas conforme a sequencia que o usuário preencher estes 2 campos.

Segue abaixo o fonte caso alguém possa me ajudar nesta dúvida.

#include "protheus.ch"
#include "fwmvcdef.ch"

User Function VSPCADN()
Local oBrowse As Object
Private aRotina := MenuDef()
oBrowse := FWMBrowse():New()
oBrowse:SetAlias("ZB1")
oBrowse:SetDescription("Amarração de Natureza x Contas")
oBrowse:SetMenuDef("GSFAT095")

oBrowse:Activate()

Return NIL

Static Function MenuDef()
Local aRotina As Array

aRotina := {}
ADD OPTION aRotina TITLE "Pesquisar" ACTION "VIEWDEF.VSPCADN" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.VSPCADN" OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE "Incluir"    ACTION "VIEWDEF.VSPCADN" OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE "Alterar"    ACTION "VIEWDEF.VSPCADN" OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE "Excluir"    ACTION "VIEWDEF.VSPCADN" OPERATION 5 ACCESS 0
ADD OPTION aRotina TITLE "Imprimir"   ACTION "VIEWDEF.VSPCADN" OPERATION 8 ACCESS 0
ADD OPTION aRotina TITLE "Copiar"     ACTION "VIEWDEF.VSPCADN" OPERATION 9 ACCESS 0
    
Return (aRotina)

Static Function ModelDef()
Local oMasterZB1 As Object
Local oDetailZB1 As Object
Local oModel As Object

oMasterZB1 := FWFormStruct(1, "ZB1", {|cIdField| VldField(cIdField)})
oDetailZB1 := FWFormStruct(1, "ZB1", {|cIdField| !VldField(cIdField)})

oModel := MPFormModel():New("VSPCADNM", /*bPre*/, /*bPost*/, /*bCommit*/, /*bCancel*/)

oModel:SetDescription("Contas x Natureza")
oModel:AddFields("ZB1MASTER", /*cOwner*/, oMasterZB1)
oModel:SetPrimaryKey({"ZB1_FILIAL", "ZB1_IDSEQ", "ZB1_ITEM"})

oModel:AddGrid("ZB1DETAIL", "ZB1MASTER", oDetailZB1, /*bLinePre*/, /*bLinePost*/, /*bPre*/, /*bLinePost*/, /*bLoad*/)
oModel:SetRelation("ZB1DETAIL", {{"ZB1_FILIAL", "FWxFilial(‘ZB1‘)"}, {"ZB1_IDSEQ", "ZB1_IDSEQ"}}, ZB1->(IndexKey(1)))

oModel:GetModel("ZB1DETAIL"):SetUniqueLine({"ZB1_ITEM"})
oModel:GetModel("ZB1MASTER"):SetDescription("Conta")
oModel:GetModel("ZB1DETAIL"):SetDescription("Naturezas")

Return (oModel)

Static Function ViewDef()
LOCAL oView      as Object
LOCAL oModel     as Object
LOCAL oMasterZB1 as Object
LOCAL oDetailZB1 as Object

oModel     := FWLoadModel("VSPCADN")
oMasterZB1 := FWFormStruct(2, "ZB1", {|cIdField| VldField(cIdField)})
oDetailZB1 := FWFormStruct(2, "ZB1", {|cIdField| !VldField(cIdField)})

oMasterZB1:RemoveField("ZB1_LEGEND")
oMasterZB1:RemoveField("ZB1_OK")

oView := FWFormView():New()
oView:SetModel(oModel)

oView:AddField("ZB1MASTER", oMasterZB1)
oView:AddGrid("ZB1DETAIL", oDetailZB1)

oView:AddIncrementField("ZB1DETAIL", "ZB1_ITEM")

oView:CreateHorizontalBox("SUPERIOR", 40)
oView:CreateHorizontalBox("INFERIOR", 60)

oView:SetOwnerView("ZB1MASTER", "SUPERIOR")
oView:SetOwnerView("ZB1DETAIL", "INFERIOR")

Return (oView)

Static Function VldField(cIdField As Char)
Local aHeader As Array
Local lRet As Logical

aHeader := {}
AAdd(aHeader, "ZB1_IDSEQ")
AAdd(aHeader, "ZB1_CONTA")
AAdd(aHeader, "ZB1_FILATI")
AAdd(aHeader, "ZB1_FILBLQ")

lRet := (AScan(aHeader, {|x| (x == RTrim(cIdField))}) > 0)

Return (lRet)



User Function zOpcoes()
Local aArea   := GetArea()
Local cOpcoes := ""

//Montando as opções de retorno

cOpcoes +=   "BARRACAO; "
cOpcoes +=   "CALL CENTER; "
cOpcoes +=   "CARRO; "
cOpcoes +=   "CAVALO; "
cOpcoes +=   "DESPESAS CHACARA; "
cOpcoes +=   "DESPESAS RANCHO;"
cOpcoes +=   "DESPESAS VIAGEM;"
cOpcoes +=   "EMPRESTIMOS A FAZ;"
cOpcoes +=   "GASTOS GERAIS;"
cOpcoes +=   "GREENVILLE;"
cOpcoes +=   "HUM.CL;"
cOpcoes +=   "IGREJA;"
cOpcoes +=   "IMPOSTO MATRIZ;"
cOpcoes +=   "INVESTIMO HUM;"
cOpcoes +=   "INVESTIMO LOJA 01;"
cOpcoes +=   "JUROS DR;"
cOpcoes +=   "JUROS ZECA;"
cOpcoes +=   "MARKETING FILIAL 01;"
cOpcoes +=   "MATRIZ;"
cOpcoes +=   "QUAY;"
cOpcoes +=   "REFEITORIO;"
cOpcoes +=   "RETIRADA CAPITAL;"
cOpcoes +=   "ROYAL GARDEN;"
cOpcoes +=   "SALARIO"

RestArea(aArea)
Return cOpcoes






Respostas:

Postado Por: WANDERSONW
Data Postagem: sexta-feira, 3 de setembro de 2021 at 12:54

Boa Tarde Pessoal já descobrir como fazer porem ainda continuo com uma duvida.
Quando Informo o código no cabeçalho ele monta o array e preenche o grid com as informações deste array porem preciso que, quando eu for digitar a nova sequencia de códigos ele de sequencia no grid e isso que não esta acontecendo agora. Segue abaixo o fonte atualizado caso alguém possa me ajudar.

#include "protheus.ch"
#include "fwmvcdef.ch"

User Function VSPCADN()
Local oBrowse As Object
Private aRotina := MenuDef()
Private aSED := {}
oBrowse := FWMBrowse():New()
oBrowse:SetAlias("ZB1")
oBrowse:SetDescription("Amarração de Natureza x Contas para o Quiken")
oBrowse:SetMenuDef("GSFAT095")
oBrowse:Activate()

Return NIL

Static Function MenuDef()
Local aRotina As Array

aRotina := {}
ADD OPTION aRotina TITLE "Pesquisar" ACTION "VIEWDEF.VSPCADN" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.VSPCADN" OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.VSPCADN" OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.VSPCADN" OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.VSPCADN" OPERATION 5 ACCESS 0
ADD OPTION aRotina TITLE "Imprimir" ACTION "VIEWDEF.VSPCADN" OPERATION 8 ACCESS 0
ADD OPTION aRotina TITLE "Copiar" ACTION "VIEWDEF.VSPCADN" OPERATION 9 ACCESS 0

Return (aRotina)

Static Function ModelDef()
Local oMasterZB1 As Object
Local oDetailZB1 As Object
Local oModel As Object

oMasterZB1 := FWFormStruct(1, "ZB1", {|cIdField| VldField(cIdField)})
oDetailZB1 := FWFormStruct(1, "ZB1", {|cIdField| !VldField(cIdField)})

oModel := MPFormModel():New("VSPCADNM", /*bPre*/, /*bPost*/, /*bCommit*/, /*bCancel*/)

oModel:SetDescription("Contas x Natureza")
oModel:AddFields("ZB1MASTER", /*cOwner*/, oMasterZB1)
oModel:SetPrimaryKey({"ZB1_FILIAL", "ZB1_IDSEQ", "ZB1_ITEM"})

oModel:AddGrid("ZB1DETAIL", "ZB1MASTER", oDetailZB1, /*bLinePre*/, /*bLinePost*/, /*bPre*/, /*bLinePost*/, /*bLoad*/)
oModel:SetRelation("ZB1DETAIL", {{"ZB1_FILIAL", "FWxFilial(‘ZB1‘)"}, {"ZB1_IDSEQ", "ZB1_IDSEQ"}}, ZB1->(IndexKey(1)))

oModel:GetModel("ZB1DETAIL"):SetUniqueLine({"ZB1_ITEM"})
oModel:GetModel("ZB1MASTER"):SetDescription("Conta")
oModel:GetModel("ZB1DETAIL"):SetDescription("Naturezas")

Return (oModel)

Static Function ViewDef()
LOCAL oView as Object
LOCAL oModel as Object
LOCAL oMasterZB1 as Object
LOCAL oDetailZB1 as Object

oModel := FWLoadModel("VSPCADN")
oMasterZB1 := FWFormStruct(2, "ZB1", {|cIdField| VldField(cIdField)})
oDetailZB1 := FWFormStruct(2, "ZB1", {|cIdField| !VldField(cIdField)})

//Remove Field da Grid
oMasterZB1:RemoveField("ZB1_LEGEND")
oMasterZB1:RemoveField("ZB1_OK")
oMasterZB1:RemoveField("ZB1_NATD")
oMasterZB1:RemoveField("ZB1_NATA")


oView := FWFormView():New()
oView:SetModel(oModel)

oView:AddField("ZB1MASTER", oMasterZB1)
oView:AddGrid("ZB1DETAIL", oDetailZB1)

oView:AddIncrementField("ZB1DETAIL", "ZB1_ITEM")

oView:CreateHorizontalBox("SUPERIOR", 30)
oView:CreateHorizontalBox("INFERIOR", 70)

oView:SetOwnerView("ZB1MASTER", "SUPERIOR")
oView:SetOwnerView("ZB1DETAIL", "INFERIOR")


&& Gatilho para encrementar o grid
oView:SetFieldAction("ZB1_FILBLQ", {|oView, cIdView, cField, xValue| U_CL073LIN(oView, cIdView, cField, xValue)})
Return (oView)

Static Function VldField(cIdField As Char)
Local aHeader As Array
Local lRet As Logical

aHeader := {}
AAdd(aHeader, "ZB1_IDSEQ")
AAdd(aHeader, "ZB1_CONTA")
AAdd(aHeader, "ZB1_FILATI")
AAdd(aHeader, "ZB1_FILBLQ")
AAdd(aHeader, "ZB1_NATD")
AAdd(aHeader, "ZB1_NATA")

lRet := (AScan(aHeader, {|x| (x == RTrim(cIdField))}) > 0)

Return (lRet)



User Function zOpcoes()
Local aArea := GetArea()
Local cOpcoes := ""

//Montando as opções de retorno

cOpcoes += "BARRACAO; "
cOpcoes += "CALL CENTER; "
cOpcoes += "CARRO; "
cOpcoes += "CAVALO; "
cOpcoes += "DESPESAS CHACARA; "
cOpcoes += "DESPESAS RANCHO;"
cOpcoes += "DESPESAS VIAGEM;"
cOpcoes += "EMPRESTIMOS A FAZ;"
cOpcoes += "GASTOS GERAIS;"
cOpcoes += "GREENVILLE;"
cOpcoes += "HUM.CL;"
cOpcoes += "IGREJA;"
cOpcoes += "IMPOSTO MATRIZ;"
cOpcoes += "INVESTIMO HUM;"
cOpcoes += "INVESTIMO LOJA 01;"
cOpcoes += "JUROS DR;"
cOpcoes += "JUROS ZECA;"
cOpcoes += "MARKETING FILIAL 01;"
cOpcoes += "MATRIZ;"
cOpcoes += "QUAY;"
cOpcoes += "REFEITORIO;"
cOpcoes += "RETIRADA CAPITAL;"
cOpcoes += "ROYAL GARDEN;"
cOpcoes += "SALARIO"

RestArea(aArea)
Return cOpcoes

//Função para le Cadastro de Natureza

Static Function fSED()
BeginSql alias ‘TEMPSED‘
SELECT
SED.ED_CODIGO
, SED.ED_DESCRIC
FROM
SED010 SED
WHERE
SED.ED_CODIGO BETWEEN ‘231300‘ AND ‘231305‘
AND SED.D_E_L_E_T_=‘‘
ORDER BY SED.ED_CODIGO
EndSql

DbSelectArea(‘TEMPSED‘)
While ! TEMPSED->( EOF() )

aAdd(aSED,{TEMPSED->ED_CODIGO,TEMPSED->ED_DESCRIC})

TEMPSED->( dbSkip())

Enddo

Return


USER FUNCTION CL073LIN(oView, cIdView, cField, xValue)

LOCAL nOperation := 0
LOCAL nI := 0
LOCAL nNroBras := xValue
LOCAL aProdscan := {}
LOCAL aEstrut := {}
Local i := 0
LOCAL lAprodscan := .T.
LOCAL oModel := oView:GetModel()
Local cCodigo := Space(15)
Private aProdutos := {}
Private cCodPai := oModel:GetValue("ZB1MASTER", "ZB1_NATA")

FSED()

nOperation := oModel:GetOperation()
IF nOperation == MODEL_OPERATION_INSERT
IF oModel:GetModel("ZB1DETAIL"):CanClearData()
oModel:GetModel("ZB1DETAIL"):ClearData()

if Len(aSED) <> 0
For i:=1 to Len(aSED)
IF oModel:GetModel("ZB1DETAIL"):AddLine() == ++nI
oModel:GetModel("ZB1DETAIL"):GoLine(nI)
oModel:GetModel("ZB1DETAIL"):SetValue("ZB1_ITEM" , STRZERO(nI, 4)) && ITEM
oModel:GetModel("ZB1DETAIL"):SetValue("ZB1_CODNAT" , aSED[i,1]) && Codigo da Natureza
oModel:GetModel("ZB1DETAIL"):SetValue("ZB1_NOMNAT" , aSED[i,2]) && Descrição da Natureza
oModel:GetModel("ZB1DETAIL"):SetValue("ZB1_STATUS" , "A") && Status

ENDIF
oView:Refresh()

next i
oModel:GetModel("ZB1DETAIL"):GoLine(1)
ENDIF
oModel:GetModel("ZB1DETAIL"):GoLine(1)
ENDIF
ENDIF
TEMPSED->( dbCloseArea() )
RETURN (nil)



Postado Por: WANDERSONW
Data Postagem: sexta-feira, 3 de setembro de 2021 at 14:41

Boa Tarde Pessoal,

Já consegui resolver obrigado.




Imprimir Página | Fechar Janela