Eu criei um grid no mvc porem ele so esta aparecendo uma linha quando eu faço a consulta com sql, mesmo a consulta retornando varios valores, queria saber como adiciono mais linhas nos grid filhos
User Function CPFIN51()
Local aArea := GetArea()
Local cFunBkp := FunName()
SetFunName("CPFIN51")
Local aButtons //Remover todos os botões da tela e deixar apenas "Fechar"
aButtons := {{.F.,Nil},{.F.,Nil},{.F.,Nil},{.F.,Nil},{.F.,Nil},{.F.,Nil},{.F.,"Salvar"},{.T.,"Fechar"},;
{.F.,Nil},{.F.,Nil},{.F.,Nil},{.F.,Nil},{.F.,Nil},{.F.,Nil}}
// Função para exibir diretamente o View, sem a necessidade do Browse
FWExecView(cTitulo, 'CPFIN51', MODEL_OPERATION_INSERT, , { || .T. }, , ,aButtons)
SetFunName(cFunBkp)
RestArea(aArea)
Return Nil
/*---------------------------------------------------------------------*
| Func: MenuDef |
| Desc: Criação do menu MVC |
*---------------------------------------------------------------------*/
/*---------------------------------------------------------------------*
| Func: ModelDef |
| Desc: Criação do modelo de dados MVC |
*---------------------------------------------------------------------*/
Static Function ModelDef()
Local oModel := Nil
//Local oStTmpPai := FWFormStruct(1, 'SF2')
Local oStTmpPai := FWFormModelStruct():New()
Local oStTmpZZ5 := FWFormStruct(1, 'ZZ5')
Local oStTmpSF2 := FWFormStruct(1, 'SF2')
Local oStTmpSD2 := FWFormStruct(1, 'SD2')
Local oStTmpSFT := FWFormStruct(1, 'SFT')
Local oStTmpSF3 := FWFormStruct(1, 'SF3')
Local oStTmpSE1 := FWFormStruct(1, 'SE1')
Local oStTmpSE5 := FWFormStruct(1, 'SE5')
// Criando as tabelas temporarias
//oStTmpPai:AddTable('SF2', {'F2_FILIAL','F2_DOC', 'F2_SERIE', 'F2_EMISSAO'}, "Cabecalho SF2")
oStTmpPai:AddField(;
"Filial",; // [01] C Titulo do campo
"Filial",; // [02] C ToolTip do campo
"F2FILIAL",; // [03] C Id do Field
"C",; // [04] C Tipo do campo
TamSX3("F2_FILIAL")[1],; // [05] N Tamanho do campo
0,; // [06] N Decimal do campo
Nil,; // [07] B Code-block de validação do campo
Nil,; // [08] B Code-block de validação When do campo
{},; // [09] A Lista de valores permitido do campo
.F.,; // [10] L Indica se o campo tem preenchimento obrigatório
,; // [11] B Code-block de inicializacao do campo
.T.,; // [12] L Indica se trata-se de um campo chave
.F.,; // [13] L Indica se o campo pode receber valor em uma operação de update.
.T.)
oStTmpPai:AddField(;
"Nota Fiscal",; // [01] C Titulo do campo
"Nota Fiscal",; // [02] C ToolTip do campo
"F2_DOC",; // [03] C Id do Field
"C",; // [04] C Tipo do campo
TamSX3("F2_DOC")[1],; // [05] N Tamanho do campo
0,; // [06] N Decimal do campo
Nil,; // [07] B Code-block de validação do campo
Nil,; // [08] B Code-block de validação When do campo
{},; // [09] A Lista de valores permitido do campo
.F.,; // [10] L Indica se o campo tem preenchimento obrigatório
,; // [11] B Code-block de inicializacao do campo
.T.,; // [12] L Indica se trata-se de um campo chave
.F.,; // [13] L Indica se o campo pode receber valor em uma operação de update.
.F.) // [14] L Indica se o campo é virtual
oStTmpPai:AddField(;
"Serie",; // [01] C Titulo do campo
"Serie",; // [02] C ToolTip do campo
"F2_SERIE",; // [03] C Id do Field
"C",; // [04] C Tipo do campo
TamSX3("F2_SERIE")[1],; // [05] N Tamanho do campo
0,; // [06] N Decimal do campo
Nil,; // [07] B Code-block de validação do campo
Nil,; // [08] B Code-block de validação When do campo
{},; // [09] A Lista de valores permitido do campo
.F.,; // [10] L Indica se o campo tem preenchimento obrigatório
,; // [11] B Code-block de inicializacao do campo
.T.,; // [12] L Indica se trata-se de um campo chave
.F.,; // [13] L Indica se o campo pode receber valor em uma operação de update.
.F.) // [14] L Indica se o campo é virtual
oStTmpPai:AddField(;
"DT Emissao",; // [01] C Titulo do campo
"DT Emissao",; // [02] C ToolTip do campo
"F2_EMISSAO",; // [03] C Id do Field
"D",; // [04] C Tipo do campo
TamSX3("F2_EMISSAO")[1],; // [05] N Tamanho do campo
0,; // [06] N Decimal do campo
Nil,; // [07] B Code-block de validação do campo
Nil,; // [08] B Code-block de validação When do campo
{},; // [09] A Lista de valores permitido do campo
.F.,; // [10] L Indica se o campo tem preenchimento obrigatório
,; // [11] B Code-block de inicializacao do campo
.T.,; // [12] L Indica se trata-se de um campo chave
.F.,; // [13] L Indica se o campo pode receber valor em uma operação de update.
.F.) // [14] L Indica se o campo é virtual
oStTmpPai:AddField( ;
"Carregar" , ; // [01] Titulo do campo
"Carregar", ; // [02] ToolTip do campo
'BOTAO', ; // [03] Id do Field
'BT', ; // [04] Tipo do campo
1, ; // [05] Tamanho do campo
0, ; // [06] Decimal do campo
{ |oMdl| CP001( oMdl ), .T. } ) // [07] Code-block de validação do campo
oStTmpSF2:AddField(;
"NEXTSER",; // [01] C Titulo do campo
"NEXTSER",; // [02] C ToolTip do campo
"F2_NEXTSER",; // [03] C Id do Field
"C",; // [04] C Tipo do campo
TamSX3("F2_NEXTSER")[1],; // [05] N Tamanho do campo
0,; // [06] N Decimal do campo
Nil,; // [07] B Code-block de validação do campo
Nil,; // [08] B Code-block de validação When do campo
{},; // [09] A Lista de valores permitido do campo
.F.,; // [10] L Indica se o campo tem preenchimento obrigatório
,; // [11] B Code-block de inicializacao do campo
.T.,; // [12] L Indica se trata-se de um campo chave
.F.,; // [13] L Indica se o campo pode receber valor em uma operação de update.
.F.) // [14] L Indica se o campo é virtual
//Criando o modelo
oModel := MPFormModel():New('CPFIN51M')
oModel:AddFields('SF2_MASTER', /*cOwner*/, oStTmpPai)
//Criando as grids dos filhos
oModel:AddGrid('FILHO_ZZ5', 'SF2_MASTER', oStTmpZZ5)
oModel:AddGrid('FILHO_SF2', 'SF2_MASTER', oStTmpSF2)
oModel:AddGrid('FILHO_SD2', 'SF2_MASTER', oStTmpSD2)
oModel:AddGrid('FILHO_SFT', 'SF2_MASTER', oStTmpSFT)
oModel:AddGrid('FILHO_SF3', 'SF2_MASTER', oStTmpSF3)
oModel:AddGrid('FILHO_SE1', 'SF2_MASTER', oStTmpSE1)
oModel:AddGrid('FILHO_SE5', 'SF2_MASTER', oStTmpSE5)
//Criando os relacionamentos dos pais e filhos
//aAdd(aRelFilho1, {'F2_DOC', 'F2_DOC'})
//aAdd(aRelFilho1, {'F2_SERIE', 'F2_SERIE'})
//aAdd(aRelFilho2, {'D2_DOC', 'F2_DOC'})
//aAdd(aRelFilho2, {'D2_SERIE', 'F2_SERIE'})
//Criando o relacionamento do Filho 1
//oModel:SetRelation('FILHO_ZZ5', aRelFilho1, SF2->(IndexKey(1)))
//oModel:GetModel('FILHO_ZZ5'):SetUniqueLine({"F2_DOC"})
//Criando o relacionamento do Filho 2
//oModel:SetRelation('FILHO_SF2', aRelFilho2, SD2->(IndexKey(1)))
//oModel:GetModel('FILHO_SF2'):SetUniqueLine({"D2_SERIE"})
//oModel:SetRelation('FILHO_SD2', aRelFilho3, SFT->(IndexKey(1)))
//oModel:GetModel('FILHO_SD2'):SetUniqueLine({"FT_SERIE"})
//oModel:SetRelation( 'FILHODETAIL', { { 'F2_FILIAL', 'xFilial( "SF2" )' }, { 'F2_DOC', 'F2_DOC' } }, SF2->( IndexKey( 1 ) ) )
//Finaliznado a criação do Model
oModel:SetPrimaryKey({})
oModel:SetDescription("Grupo de Produtos - com Abas")
oModel:GetModel('SF2_MASTER'):SetDescription('Modelo Grupo')
oModel:GetModel('FILHO_ZZ5'):SetDescription('ZZ5')
oModel:GetModel('FILHO_SF2'):SetDescription('SF2')
oModel:GetModel('FILHO_SD2'):SetDescription('SD2')
oModel:GetModel('FILHO_SFT'):SetDescription('SFT')
oModel:GetModel('FILHO_SF3'):SetDescription('SF3')
oModel:GetModel('FILHO_SE1'):SetDescription('SE1')
oModel:GetModel('FILHO_SE5'):SetDescription('SE5')
Return oModel
/*---------------------------------------------------------------------*
| Func: ViewDef |
| Desc: Criação da visão MVC |
*---------------------------------------------------------------------*/
Static Function ViewDef()
Local oView := Nil
Local oModel := FWLoadModel('CPFIN51')
Local oStTmpPai := FWFormViewStruct():New()
Local oStTmpZZ5 := FWFormStruct(2, 'ZZ5')
Local oStTmpSF2 := FWFormStruct(2, 'SF2')
Local oStTmpSD2 := FWFormStruct(2, 'SD2')
Local oStTmpSFT := FWFormStruct(2, 'SFT')
Local oStTmpSF3 := FWFormStruct(2, 'SF3')
Local oStTmpSE1 := FWFormStruct(2, 'SE1')
Local oStTmpSE5 := FWFormStruct(2, 'SE5')
oStTmpPai:AddField(;
"F2FILIAL",; // [01] C Nome do Campo
"01",; // [02] C Ordem
"Filial",; // [03] C Titulo do campo
X3Descric('F2FILIAL'),; // [04] C Descricao do campo
Nil,; // [05] A Array com Help
"C",; // [06] C Tipo do campo
X3Picture("F2FILIAL"),; // [07] C Picture
Nil,; // [08] B Bloco de PictTre Var
Nil,; // [09] C Consulta F3
( .T.),; // [10] L Indica se o campo é alteravel //( .T., .F.),;
Nil,; // [11] C Pasta do campo
Nil,; // [12] C Agrupamento do campo
Nil,; // [13] A Lista de valores permitido do campo (Combo)
Nil,; // [14] N Tamanho maximo da maior opção do combo
Nil,; // [15] C Inicializador de Browse
.T.,; // [16] L Indica se o campo é virtual
Nil,; // [17] C Picture Variavel
Nil) // [18] L Indica pulo de linha após o campo
oStTmpPai:AddField(;
"F2_DOC",; // [01] C Nome do Campo
"02",; // [02] C Ordem
"Nota Fiscal",; // [03] C Titulo do campo
X3Descric('F2_DOC'),; // [04] C Descricao do campo
Nil,; // [05] A Array com Help
"C",; // [06] C Tipo do campo
X3Picture("F2_DOC"),; // [07] C Picture
Nil,; // [08] B Bloco de PictTre Var
Nil,; // [09] C Consulta F3
( .T.),; // [10] L Indica se o campo é alteravel
Nil,; // [11] C Pasta do campo
Nil,; // [12] C Agrupamento do campo
Nil,; // [13] A Lista de valores permitido do campo (Combo)
Nil,; // [14] N Tamanho maximo da maior opção do combo
Nil,; // [15] C Inicializador de Browse
Nil,; // [16] L Indica se o campo é virtual
Nil,; // [17] C Picture Variavel
Nil) // [18] L Indica pulo de linha após o campo
oStTmpPai:AddField(;
"F2_SERIE",; // [01] C Nome do Campo
"03",; // [02] C Ordem
"Serie",; // [03] C Titulo do campo
X3Descric('F2_SERIE'),; // [04] C Descricao do campo
Nil,; // [05] A Array com Help
"C",; // [06] C Tipo do campo
X3Picture("F2_SERIE"),; // [07] C Picture
Nil,; // [08] B Bloco de PictTre Var
Nil,; // [09] C Consulta F3
( .T. ),; // [10] L Indica se o campo é alteravel
Nil,; // [11] C Pasta do campo
Nil,; // [12] C Agrupamento do campo
Nil,; // [13] A Lista de valores permitido do campo (Combo)
Nil,; // [14] N Tamanho maximo da maior opção do combo
Nil,; // [15] C Inicializador de Browse
Nil,; // [16] L Indica se o campo é virtual
Nil,; // [17] C Picture Variavel
Nil) // [18] L Indica pulo de linha após o campo
oStTmpPai:AddField(;
"F2_EMISSAO",; // [01] C Nome do Campo
"04",; // [02] C Ordem
"Data Emissão",; // [03] C Titulo do campo
X3Descric('F2_EMISSAO'),; // [04] C Descricao do campo
Nil,; // [05] A Array com Help
"D",; // [06] C Tipo do campo
X3Picture("F2_EMISSAO"),; // [07] C Picture
Nil,; // [08] B Bloco de PictTre Var
Nil,; // [09] C Consulta F3
( .T.),; // [10] L Indica se o campo é alteravel
Nil,; // [11] C Pasta do campo
Nil,; // [12] C Agrupamento do campo
Nil,; // [13] A Lista de valores permitido do campo (Combo)
Nil,; // [14] N Tamanho maximo da maior opção do combo
Nil,; // [15] C Inicializador de Browse
Nil,; // [16] L Indica se o campo é virtual
Nil,; // [17] C Picture Variavel
Nil) // [18] L Indica pulo de linha após o campo
oStTmpPai:AddField( ;
'BOTAO' , ; // [01] Campo
"5" , ; // [02] Ordem
"Carregar" , ; // [03] Titulo
"Carregar" , ; // [04] Descricao
NIL , ; // [05] Help
'BT' ) // [06] Tipo do campo COMBO, Get ou CHECK
oStTmpSF2:AddField(;
"F2_NEXTSER",; // [01] C Nome do Campo
"XX",; // [02] C Ordem
"NEXTSER",; // [03] C Titulo do campo
X3Descric('F2_NEXTSER'),; // [04] C Descricao do campo
Nil,; // [05] A Array com Help
"D",; // [06] C Tipo do campo
X3Picture("F2_NEXTSER"),; // [07] C Picture
Nil,; // [08] B Bloco de PictTre Var
Nil,; // [09] C Consulta F3
( .T.),; // [10] L Indica se o campo é alteravel
Nil,; // [11] C Pasta do campo
Nil,; // [12] C Agrupamento do campo
Nil,; // [13] A Lista de valores permitido do campo (Combo)
Nil,; // [14] N Tamanho maximo da maior opção do combo
Nil,; // [15] C Inicializador de Browse
Nil,; // [16] L Indica se o campo é virtual
Nil,; // [17] C Picture Variavel
Nil) // [18] L Indica pulo de linha após o campo
//Criando a View
oView := FWFormView():New()
oView:SetModel(oModel)
//Adicionando os campos do cabeçalho
oView:AddField('VIEW_SF2', oStTmpPai, 'SF2_MASTER')
//Setando o dimensionamento de tamanho
oView:CreateHorizontalBox('SUPERIOR', 30)
oView:CreateHorizontalBox('INFERIOR', 70)
//Criando a folder dos produtos (filhos)
oView:CreateFolder('PASTA_FILHOS', 'INFERIOR')
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO01', "ZZ5")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO02', "SF1 / SF2")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO03', "SD1 / SD2 ")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO04', "SFT ")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO05', "SF3")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO06', "SE1 / SE1")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO07', "SE5")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO08', "SPED050")
oView:AddSheet('PASTA_FILHOS', 'ABA_FILHO09', "SPED054")
//Grids dos filhos
oView:AddGrid('VIEW_FILHO1', oStTmpZZ5, 'FILHO_ZZ5')
oView:AddGrid('VIEW_FILHO2', oStTmpSF2, 'FILHO_SF2')
oView:AddGrid('VIEW_FILHO3', oStTmpSD2, 'FILHO_SD2')
oView:AddGrid('VIEW_FILHO4', oStTmpSFT, 'FILHO_SFT')
oView:AddGrid('VIEW_FILHO5', oStTmpSF3, 'FILHO_SF3')
oView:AddGrid('VIEW_FILHO6', oStTmpSE1, 'FILHO_SE1')
oView:AddGrid('VIEW_FILHO7', oStTmpSE5, 'FILHO_SE5')
//oView:AddGrid('VIEW_FILHO8', oStTmpPai, 'FILHO_ZZ5')
//oView:AddGrid('VIEW_FILHO9', oStTmpPai, 'FILHO_ZZ5')
//Criando os vinculos onde serão mostrado os dados
oView:CreateHorizontalBox('ITENS_FILHO01', 100,,, 'PASTA_FILHOS', 'ABA_FILHO01' )
oView:CreateHorizontalBox('ITENS_FILHO02', 100,,, 'PASTA_FILHOS', 'ABA_FILHO02' )
oView:CreateHorizontalBox('ITENS_FILHO03', 100,,, 'PASTA_FILHOS', 'ABA_FILHO03' )
oView:CreateHorizontalBox('ITENS_FILHO04', 100,,, 'PASTA_FILHOS', 'ABA_FILHO04' )
oView:CreateHorizontalBox('ITENS_FILHO05', 100,,, 'PASTA_FILHOS', 'ABA_FILHO05' )
oView:CreateHorizontalBox('ITENS_FILHO06', 100,,, 'PASTA_FILHOS', 'ABA_FILHO06' )
oView:CreateHorizontalBox('ITENS_FILHO07', 100,,, 'PASTA_FILHOS', 'ABA_FILHO07' )
oView:CreateHorizontalBox('ITENS_FILHO08', 100,,, 'PASTA_FILHOS', 'ABA_FILHO08' )
oView:CreateHorizontalBox('ITENS_FILHO09', 100,,, 'PASTA_FILHOS', 'ABA_FILHO09')
//Amarrando a view com as box
oView:SetOwnerView('VIEW_SF2', 'SUPERIOR')
oView:SetOwnerView('VIEW_FILHO1', 'ITENS_FILHO01')
oView:SetOwnerView('VIEW_FILHO2', 'ITENS_FILHO02')
oView:SetOwnerView('VIEW_FILHO3', 'ITENS_FILHO03')
oView:SetOwnerView('VIEW_FILHO4', 'ITENS_FILHO04')
oView:SetOwnerView('VIEW_FILHO5', 'ITENS_FILHO05')
oView:SetOwnerView('VIEW_FILHO6', 'ITENS_FILHO06')
oView:SetOwnerView('VIEW_FILHO7', 'ITENS_FILHO07')
oView:AddUserButton( 'Modificar ZZ5', 'CLIPS', { || CP003() } )
//oView:SetOwnerView('VIEW_FILHO7', 'ITENS_FILHO07')
//oView:SetOwnerView('VIEW_FILHO8', 'ITENS_FILHO08')
oView:SetCloseOnOk({||.T.})
Return oView