Perguntas Modelo 3 MVC
- Wanderson
- Autor do Tópico
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 39
- Obrigados Recebidos: 0
2 anos 2 meses atrás #33281
por Wanderson
Modelo 3 MVC foi criado por Wanderson
Bom dia Pessoal,
Fiz meu primeiro modelo3 em mvc e quando tento passar para o segundo item na grid ele não deixa e gera um codigo de erro: array out of bounds ( 14 of 0 )
Estou disponibilizando o Fonte caso alguém possa me ajudar a resolver este problema.
#Include ‘Protheus.ch‘
#Include ‘FWMVCDef.ch‘
#INCLUDE "FWEditPanel.CH"
//Definções do Formulario
#Define ALIAS_FORM0 "ZZH" //Informe o Alias da Tabela
#DEFINE ROTINA_FILE "AXZZH.prw"
#DEFINE VERSAO_ROTINA " V " + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[04])) + "-" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[05])) + "[" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[03])) + "]"
#Define MODELO "aXZZHM"
#Define ID_MODEL "aXZZHM"
#Define TITULO_MODEL "Cadastro de Campanhas e Metas por Filial / Vendedor " + SubStr(VERSAO_ROTINA,1,17)
#DEFINE VERSAO_ROTINA "V" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[04])) + "-" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[05])) + "[" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[03])) + "]"
#Define TITULO_VIEW TITULO_MODEL
#Define ID_MODEL_FORM0 ALIAS_FORM0+"FORM0"
//Variáveis Estáticas
Static cTitulo := TITULO_MODEL
User Function AXZZH()
Local aArea := GetArea()
Local oBrowse
Local cModelo := MODELO
Local cTitulo := TITULO_MODEL
Local cIDModelForm := ID_MODEL_FORM0
oBrowse := FWMBrowse():New()
oBrowse:SetAlias("ZZH")
oBrowse:SetDescription(cTitulo)
oBrowse:Activate()
RestArea(aArea)
Return Nil
/*
*/
Static Function MenuDef()
Local aRot := {}
ADD OPTION aRot TITLE ‘Visualizar‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_VIEW ACCESS 0 //OPERATION 1
ADD OPTION aRot TITLE ‘Incluir‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_INSERT ACCESS 0 //OPERATION 3
ADD OPTION aRot TITLE ‘Alterar‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //OPERATION 4
ADD OPTION aRot TITLE ‘Excluir‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5
Return aRot
/*
*/
Static Function ModelDef()
Local oModel := Nil
Local oStPai := FWFormStruct(1, ‘ZZH‘ )
Local oStFilho := FWFormStruct(1, ‘ZZI‘ )
Local aZZHRel := {}
Local cModelo := MODELO
Local cIDModel := ID_MODEL
Local cTitulo := TITULO_MODEL
//Definições dos campos
oStPai:SetProperty(‘ZZH_NUM‘, MODEL_FIELD_WHEN, FwBuildFeature(STRUCT_FEATURE_WHEN, ‘.F.‘)) //Modo de Edição
//oStPai:SetProperty(‘ZZH_NUM‘, MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, ‘ExistCpo("ZZI", M->ZZI_CAMPAN)‘)) //Validação de Campo
oStFilho:SetProperty(‘ZZI_CAMPAN‘, MODEL_FIELD_WHEN, FwBuildFeature(STRUCT_FEATURE_WHEN, ‘.F.‘)) //Modo de Edição
oStFilho:SetProperty(‘ZZI_CAMPAN‘, MODEL_FIELD_OBRIGAT, .F. ) //Campo Obrigatório
oStFilho:SetProperty(‘ZZI_ITEM‘, MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, ‘u_fSeqGrid()‘)) //Ini Padrão
//Criando o modelo e os relacionamentos
oModel := MPFormModel():New(cIdModel,/*bPreValidacao*/,/*bPosValidacao*/,/*bCommit*/,/*bCancel*/)
oModel:AddFields(‘ZZ2MASTER‘,/*cOwner*/,oStPai)
oModel:AddGrid(‘ZZ3DETAIL‘,‘ZZ2MASTER‘,oStFilho,/*bLinePre*/, /*bLinePost*/,/*bPre - Grid Inteiro*/,/*bPos - Grid Inteiro*/,/*bLoad - Carga do modelo manualmente*/) //cOwner é para quem pertence
//Fazendo o relacionamento entre o Pai e Filho
aAdd(aZZHRel, {‘ZZI_FILIAL‘,‘ZZH_FILIAL‘} )
aAdd(aZZHRel, {‘ZZI_CAMPAN‘,‘ZZH_NUM‘})
oModel:SetRelation(‘ZZ3DETAIL‘, aZZHRel, ZZI->(IndexKey(1))) //IndexKey -> quero a ordenação e depois filtrado
oModel:GetModel(‘ZZ3DETAIL‘):SetUniqueLine({"ZZI_ITEM","ZZI_FILORI"}) //Não repetir informações ou combinações {"CAMPO1","CAMPO2"}
oModel:SetPrimaryKey({})
//Setando as descrições
oModel:SetDescription(cTitulo)
oModel:GetModel(‘ZZ2MASTER‘):SetDescription(‘Dados da Campanha‘)
oModel:GetModel(‘ZZ3DETAIL‘):SetDescription(‘Volume(s) por Filial‘)
Return oModel
/*
*/
Static Function ViewDef()
Local oView := Nil
Local oModel := FWLoadModel( ‘aXZZH‘ )
Local oStPai := FWFormStruct(2, ‘ZZH‘ )
Local oStFilho := FWFormStruct(2, ‘ZZI‘ )
Local nOperation:= MODEL_OPERATION_INSERT
//Criando a View
oView := FWFormView():New()
oView:SetModel(oModel)
//Adicionando os campos do cabeçalho e o grid dos filhos
oView:AddField(‘VIEW_ZZH‘,oStPai,‘ZZ2MASTER‘)
oView:AddGrid(‘VIEW_ZZI‘,oStFilho,‘ZZ3DETAIL‘)
//Setando o dimensionamento de tamanho
oView:CreateHorizontalBox(‘CABEC‘,30)
oView:CreateHorizontalBox(‘GRID‘,70)
//Amarrando a view com as box
oView:SetOwnerView(‘VIEW_ZZH‘,‘CABEC‘)
oView:SetOwnerView(‘VIEW_ZZI‘,‘GRID‘)
//Habilitando título
oView:EnableTitleView(‘VIEW_ZZH‘,‘Informações da Campanhas- Cadastro‘)
oView:EnableTitleView(‘VIEW_ZZI‘,‘Volume(s) por Filial‘)
//Força o fechamento da janela na confirmação
oView:SetCloseOnOk({||.T.})
//Remove os campos de Código do Artista e CD
//oStFilho:RemoveField(‘CAMPO1‘)
//oStFilho:RemoveField(‘CAMPO2‘)
Return oView
// Gera o Sequencial do Item
/*
*/
User Function fSeqGrid()
Local aArea := GetArea()
Local cCod := StrTran(Space(TamSX3( ‘ZZI_ITEM‘ )[1]), ‘ ‘ , ‘0‘ )
Local oModelPad := FWModelActive()
Local oModelGrid := oModelPad:GetModel( ‘ZZ3DETAIL‘ )
Local nOperacao := oModelPad:nOperation
Local nLinAtu := oModelGrid:nLine
Local nPosCod := aScan(oModelGrid:aHeader, {|x| AllTrim(x[2]) == AllTrim("ZZI_ITEM")})
//Se for a primeira linha
If nLinAtu < 1
cCod := Soma1(cCod)
//Senão, pega o valor da última linha
Else
cCod := oModelGrid:aCols[nLinAtu][nPosCod]
cCod := Soma1(cCod)
EndIf
RestArea(aArea)
Return cCod
/*
*/
// Função de Validação executada na Ativação do Modelo
Static Function activeForm(oModel)
Local cIDModelForm := ID_MODEL_FORM0
Local nOperation := oModel:GetOperation()
Local oModelForm := oModel:GetModel(cIDModelForm)
Local aSaveLines := FWSaveRows()
Local nRecord := 0
Local lRet := .T.
Local cPrefForm := PREFIXO_ALIAS_FORM0
Return lRet
Fiz meu primeiro modelo3 em mvc e quando tento passar para o segundo item na grid ele não deixa e gera um codigo de erro: array out of bounds ( 14 of 0 )
Estou disponibilizando o Fonte caso alguém possa me ajudar a resolver este problema.
#Include ‘Protheus.ch‘
#Include ‘FWMVCDef.ch‘
#INCLUDE "FWEditPanel.CH"
//Definções do Formulario
#Define ALIAS_FORM0 "ZZH" //Informe o Alias da Tabela
#DEFINE ROTINA_FILE "AXZZH.prw"
#DEFINE VERSAO_ROTINA " V " + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[04])) + "-" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[05])) + "[" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[03])) + "]"
#Define MODELO "aXZZHM"
#Define ID_MODEL "aXZZHM"
#Define TITULO_MODEL "Cadastro de Campanhas e Metas por Filial / Vendedor " + SubStr(VERSAO_ROTINA,1,17)
#DEFINE VERSAO_ROTINA "V" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[04])) + "-" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[05])) + "[" + Trim(AllToChar(GetAPOInfo(ROTINA_FILE)[03])) + "]"
#Define TITULO_VIEW TITULO_MODEL
#Define ID_MODEL_FORM0 ALIAS_FORM0+"FORM0"
//Variáveis Estáticas
Static cTitulo := TITULO_MODEL
User Function AXZZH()
Local aArea := GetArea()
Local oBrowse
Local cModelo := MODELO
Local cTitulo := TITULO_MODEL
Local cIDModelForm := ID_MODEL_FORM0
oBrowse := FWMBrowse():New()
oBrowse:SetAlias("ZZH")
oBrowse:SetDescription(cTitulo)
oBrowse:Activate()
RestArea(aArea)
Return Nil
/*
*/
Static Function MenuDef()
Local aRot := {}
ADD OPTION aRot TITLE ‘Visualizar‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_VIEW ACCESS 0 //OPERATION 1
ADD OPTION aRot TITLE ‘Incluir‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_INSERT ACCESS 0 //OPERATION 3
ADD OPTION aRot TITLE ‘Alterar‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_UPDATE ACCESS 0 //OPERATION 4
ADD OPTION aRot TITLE ‘Excluir‘ ACTION ‘VIEWDEF.aXZZH‘ OPERATION MODEL_OPERATION_DELETE ACCESS 0 //OPERATION 5
Return aRot
/*
*/
Static Function ModelDef()
Local oModel := Nil
Local oStPai := FWFormStruct(1, ‘ZZH‘ )
Local oStFilho := FWFormStruct(1, ‘ZZI‘ )
Local aZZHRel := {}
Local cModelo := MODELO
Local cIDModel := ID_MODEL
Local cTitulo := TITULO_MODEL
//Definições dos campos
oStPai:SetProperty(‘ZZH_NUM‘, MODEL_FIELD_WHEN, FwBuildFeature(STRUCT_FEATURE_WHEN, ‘.F.‘)) //Modo de Edição
//oStPai:SetProperty(‘ZZH_NUM‘, MODEL_FIELD_VALID, FwBuildFeature(STRUCT_FEATURE_VALID, ‘ExistCpo("ZZI", M->ZZI_CAMPAN)‘)) //Validação de Campo
oStFilho:SetProperty(‘ZZI_CAMPAN‘, MODEL_FIELD_WHEN, FwBuildFeature(STRUCT_FEATURE_WHEN, ‘.F.‘)) //Modo de Edição
oStFilho:SetProperty(‘ZZI_CAMPAN‘, MODEL_FIELD_OBRIGAT, .F. ) //Campo Obrigatório
oStFilho:SetProperty(‘ZZI_ITEM‘, MODEL_FIELD_INIT, FwBuildFeature(STRUCT_FEATURE_INIPAD, ‘u_fSeqGrid()‘)) //Ini Padrão
//Criando o modelo e os relacionamentos
oModel := MPFormModel():New(cIdModel,/*bPreValidacao*/,/*bPosValidacao*/,/*bCommit*/,/*bCancel*/)
oModel:AddFields(‘ZZ2MASTER‘,/*cOwner*/,oStPai)
oModel:AddGrid(‘ZZ3DETAIL‘,‘ZZ2MASTER‘,oStFilho,/*bLinePre*/, /*bLinePost*/,/*bPre - Grid Inteiro*/,/*bPos - Grid Inteiro*/,/*bLoad - Carga do modelo manualmente*/) //cOwner é para quem pertence
//Fazendo o relacionamento entre o Pai e Filho
aAdd(aZZHRel, {‘ZZI_FILIAL‘,‘ZZH_FILIAL‘} )
aAdd(aZZHRel, {‘ZZI_CAMPAN‘,‘ZZH_NUM‘})
oModel:SetRelation(‘ZZ3DETAIL‘, aZZHRel, ZZI->(IndexKey(1))) //IndexKey -> quero a ordenação e depois filtrado
oModel:GetModel(‘ZZ3DETAIL‘):SetUniqueLine({"ZZI_ITEM","ZZI_FILORI"}) //Não repetir informações ou combinações {"CAMPO1","CAMPO2"}
oModel:SetPrimaryKey({})
//Setando as descrições
oModel:SetDescription(cTitulo)
oModel:GetModel(‘ZZ2MASTER‘):SetDescription(‘Dados da Campanha‘)
oModel:GetModel(‘ZZ3DETAIL‘):SetDescription(‘Volume(s) por Filial‘)
Return oModel
/*
*/
Static Function ViewDef()
Local oView := Nil
Local oModel := FWLoadModel( ‘aXZZH‘ )
Local oStPai := FWFormStruct(2, ‘ZZH‘ )
Local oStFilho := FWFormStruct(2, ‘ZZI‘ )
Local nOperation:= MODEL_OPERATION_INSERT
//Criando a View
oView := FWFormView():New()
oView:SetModel(oModel)
//Adicionando os campos do cabeçalho e o grid dos filhos
oView:AddField(‘VIEW_ZZH‘,oStPai,‘ZZ2MASTER‘)
oView:AddGrid(‘VIEW_ZZI‘,oStFilho,‘ZZ3DETAIL‘)
//Setando o dimensionamento de tamanho
oView:CreateHorizontalBox(‘CABEC‘,30)
oView:CreateHorizontalBox(‘GRID‘,70)
//Amarrando a view com as box
oView:SetOwnerView(‘VIEW_ZZH‘,‘CABEC‘)
oView:SetOwnerView(‘VIEW_ZZI‘,‘GRID‘)
//Habilitando título
oView:EnableTitleView(‘VIEW_ZZH‘,‘Informações da Campanhas- Cadastro‘)
oView:EnableTitleView(‘VIEW_ZZI‘,‘Volume(s) por Filial‘)
//Força o fechamento da janela na confirmação
oView:SetCloseOnOk({||.T.})
//Remove os campos de Código do Artista e CD
//oStFilho:RemoveField(‘CAMPO1‘)
//oStFilho:RemoveField(‘CAMPO2‘)
Return oView
// Gera o Sequencial do Item
/*
*/
User Function fSeqGrid()
Local aArea := GetArea()
Local cCod := StrTran(Space(TamSX3( ‘ZZI_ITEM‘ )[1]), ‘ ‘ , ‘0‘ )
Local oModelPad := FWModelActive()
Local oModelGrid := oModelPad:GetModel( ‘ZZ3DETAIL‘ )
Local nOperacao := oModelPad:nOperation
Local nLinAtu := oModelGrid:nLine
Local nPosCod := aScan(oModelGrid:aHeader, {|x| AllTrim(x[2]) == AllTrim("ZZI_ITEM")})
//Se for a primeira linha
If nLinAtu < 1
cCod := Soma1(cCod)
//Senão, pega o valor da última linha
Else
cCod := oModelGrid:aCols[nLinAtu][nPosCod]
cCod := Soma1(cCod)
EndIf
RestArea(aArea)
Return cCod
/*
*/
// Função de Validação executada na Ativação do Modelo
Static Function activeForm(oModel)
Local cIDModelForm := ID_MODEL_FORM0
Local nOperation := oModel:GetOperation()
Local oModelForm := oModel:GetModel(cIDModelForm)
Local aSaveLines := FWSaveRows()
Local nRecord := 0
Local lRet := .T.
Local cPrefForm := PREFIXO_ALIAS_FORM0
Return lRet
Por favor Acessar ou Registrar para participar da conversa.
Tempo para a criação da página:0.118 segundos