- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dar continuidade no preenchimento da Grid em MVC através de gatilhos
Perguntas Dar continuidade no preenchimento da Grid em MVC através de gatilhos
- Wanderson
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 39
- Obrigados Recebidos: 0
2 anos 7 meses atrás #33264
por Wanderson
Pessoal,
Tenho um cadastro em MVC com tabela unica e com grid, no cabelho tenho um campo que, apos preenchido alimenta o grid com informações do cadastro de natureza, quando utilizo
a opção incluir tudo ok com a rotina, agora se eu precisar alterar um cadastro e inserir mais de uma conta usando este gatilho, o grid está se perdendo e sobrepondo os dados ao inves de verificar o ultimo item e adicionar o proximo ate atingir o intervalo informado. Alguém consegui me ajudar a resolver este problema?
Segue parte do Codigo
USER FUNCTION fAlimGrid(oView, cIdView, cField, xValue)
Local nOperation := 0
Local nI := 0
Local i := 0
Local oModel := oView:GetModel()
Local cNatDe := oModel:GetValue("ZB1MASTER", "ZB1_NATD")
Local cNatAte := oModel:GetValue("ZB1MASTER", "ZB1_NATA")
Local cNatSt := oModel:GetValue("ZB1MASTER", "ZB1_NATST")
// Busco as Naturezas de acordo com Informado nos Parametros
cQrySED:=" SELECT "
cQrySED+=" SED.ED_CODIGO "
cQrySED+=" , SED.ED_DESCRIC "
cQrySED+=" FROM "
cQrySED+=RetSqlName("SED")+" SED WITH(NOLOCK) "
cQrySED+=" WHERE "
cQrySED+=" SED.ED_CODIGO BETWEEN ‘" + Alltrim(cNatde) + "‘ AND ‘" + Alltrim(cNatAte) +"‘"
cQrySED+=" AND SED.D_E_L_E_T_=‘‘ "
cQrySED+=" ORDER BY SED.ED_CODIGO "
TcQuery cQrySED New Alias "TEMPSED"
DbSelectArea(‘TEMPSED‘)
dbGotop()
If Len(aSed) > 0
aSed:={}
Endif
While ! TEMPSED->( EOF() )
aAdd(aSED,{TEMPSED->ED_CODIGO,TEMPSED->ED_DESCRIC})
TEMPSED->( dbSkip())
Enddo
TEMPSED->(dbclosearea())
nOperation := oModel:GetOperation()
// Vai executar a atualização do Grid quando for Inclusão e Atualização
IF nOperation == MODEL_OPERATION_INSERT .Or. nOperation == MODEL_OPERATION_UPDATE
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" , cNatSt) && Status
else
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" , cNatSt) && Status
Endif
oView:Refresh()
next i
oModel:GetModel("ZB1DETAIL"):GoLine(1)
ENDIF
ENDIF
RETURN (nil)
Tenho um cadastro em MVC com tabela unica e com grid, no cabelho tenho um campo que, apos preenchido alimenta o grid com informações do cadastro de natureza, quando utilizo
a opção incluir tudo ok com a rotina, agora se eu precisar alterar um cadastro e inserir mais de uma conta usando este gatilho, o grid está se perdendo e sobrepondo os dados ao inves de verificar o ultimo item e adicionar o proximo ate atingir o intervalo informado. Alguém consegui me ajudar a resolver este problema?
Segue parte do Codigo
USER FUNCTION fAlimGrid(oView, cIdView, cField, xValue)
Local nOperation := 0
Local nI := 0
Local i := 0
Local oModel := oView:GetModel()
Local cNatDe := oModel:GetValue("ZB1MASTER", "ZB1_NATD")
Local cNatAte := oModel:GetValue("ZB1MASTER", "ZB1_NATA")
Local cNatSt := oModel:GetValue("ZB1MASTER", "ZB1_NATST")
// Busco as Naturezas de acordo com Informado nos Parametros
cQrySED:=" SELECT "
cQrySED+=" SED.ED_CODIGO "
cQrySED+=" , SED.ED_DESCRIC "
cQrySED+=" FROM "
cQrySED+=RetSqlName("SED")+" SED WITH(NOLOCK) "
cQrySED+=" WHERE "
cQrySED+=" SED.ED_CODIGO BETWEEN ‘" + Alltrim(cNatde) + "‘ AND ‘" + Alltrim(cNatAte) +"‘"
cQrySED+=" AND SED.D_E_L_E_T_=‘‘ "
cQrySED+=" ORDER BY SED.ED_CODIGO "
TcQuery cQrySED New Alias "TEMPSED"
DbSelectArea(‘TEMPSED‘)
dbGotop()
If Len(aSed) > 0
aSed:={}
Endif
While ! TEMPSED->( EOF() )
aAdd(aSED,{TEMPSED->ED_CODIGO,TEMPSED->ED_DESCRIC})
TEMPSED->( dbSkip())
Enddo
TEMPSED->(dbclosearea())
nOperation := oModel:GetOperation()
// Vai executar a atualização do Grid quando for Inclusão e Atualização
IF nOperation == MODEL_OPERATION_INSERT .Or. nOperation == MODEL_OPERATION_UPDATE
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" , cNatSt) && Status
else
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" , cNatSt) && Status
Endif
oView:Refresh()
next i
oModel:GetModel("ZB1DETAIL"):GoLine(1)
ENDIF
ENDIF
RETURN (nil)
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dar continuidade no preenchimento da Grid em MVC através de gatilhos
Tempo para a criação da página:0.090 segundos