Estou tentando criar um MVC das tabelas SC6 e SC5.
Consigo visualizar os registros no browse, mas quando chamo as funções para alterar ou visualizar algum pedido, recebo um errorlog com a seguinte mensagem: "invalid field name in Alias SC6->C6_CODINF"
Já usei o mesmo código, trocando apenas as tabelas (SF2 e SD2 por exemplo) e funcionou.
Tentei rodar o código em uma outra base e também recebi o mesmo errorlog.
Segue o código que estou utilizando.
#include 'protheus.ch'
#include 'FWMVCDEF.CH'
user function ZMVCSC5()
//Declarando o browse
Local oBrowse
//Setando o browe e apontando para SC5
oBrowse := FWMBrowse():New()
oBrowse:SetAlias('SC5')
//Ativando o browse
oBrowse:Activate()
return NIL
/*--------------------------------------------------------------------------------------*
| Func: MenuDef |
| Desc: |
*--------------------------------------------------------------------------------------*/
Static Function MenuDef()
Local aRotina := {}
aAdd( aRotina, { 'Visualizar' , 'VIEWDEF.ZMVCSC5', 0, 2, 0, NIL } )
aAdd( aRotina, { 'Alterar' , 'VIEWDEF.ZMVCSC5', 0, 4, 0, NIL } )
aAdd( aRotina, { 'Excluir' , 'VIEWDEF.ZMVCSC5', 0, 5, 0, NIL } )
aAdd( aRotina, { 'Imprimir' , 'VIEWDEF.ZMVCSC5', 0, 8, 0, NIL } )
aAdd( aRotina, { 'Copiar' , 'VIEWDEF.ZMVCSC5', 0, 9, 0, NIL } )
aAdd( aRotina, { 'Pesquisar' , 'VIEWDEF.ZMVCSC5', 0, 1, 0, NIL } )
aAdd( aRotina, { 'Legenda' , 'VIEWDEF.ZMVCSC5', 0, 10, 0, NIL } )
Return aRotina
/*--------------------------------------------------------------------------------------*
| Func: ModelDef |
| Desc: |
*--------------------------------------------------------------------------------------*/
Static Function ModelDef()
Local oModel := Nil
//Estutura da tabela pai a ser utilizada no model -> cabeçalho SC5
Local oStrSC5 := FWFormStruct(1,"SC5")
//Estrutura da tabela filha a ser utilizada no model -> linhas SC6
Local oStrSC6 := FWFormStruct(1,"SC6")
oModel := MPFormModel():New("MD_PVS")
oModel:addFields('SC5MASTER',,oStrSC5)
//Adiciona o grid
oModel:addGrid('SC6DETAIL','SC5MASTER',oStrSC6)
//Definindo o relacionamento das linhas com o cabeçalho
oModel:SetRelation( 'SC6DETAIL', {{'C6_FILIAL', 'xFilial( "SC6" )' }, {'C6_NUM', 'C5_NUM'}} , SC6->(IndexKey(16)))
//Definindo a chave primária do modelo
oModel:SetPrimaryKey( { "C5_FILIAL", "C5_NUM" } )
//Definindo a descrição do modelo de dados
oModel:SetDescription( "Pedidos de venda" )
//Definindo a descrição do componente SC5 -> cabeçalho
oModel:GetModel( "SC5MASTER" ):SetDescription( 'Cabeçalho PV' )
//Definindo a descrição do componente SC6 -> linhas
oModel:GetModel("SC6DETAIL"):SetDescription( "Linhas PV" )
//Não permite a inserção de uma nova linha no grid, nem a remoção de uma linha existente
oModel:GetModel("SC6DETAIL"):SetNoInsertLine(.T.)
//Não permite a inserção de uma nova linha no grid, nem a remoção de uma linha existente
oModel:GetModel("SC6DETAIL"):SetNoDeleteLine(.T.)
//Não permite a edição de itens no grid
oModel:GetModel("SC6DETAIL"):SetNoUpdateLine(.T.)
Return oModel
Static Function ViewDef()
Local oModel := ModelDef()
//Definindo a estrutura que será exibida na view para a tabela SC5
Local oStSC5 := FWFormStruct(2, "SC5",{|cCampo| Alltrim(cCampo)$'C5_NUM'})
//Definindo a estrutura que será exibida na view para a tabela SC6
Local oStrSC6 := FWFormStruct(2, "SC6",{|cCampo| Alltrim(cCampo)$'C6_PRODUTO'})
//Definindo a view
Local oView := Nil
oView := FWFormView():New()
//Setando o modelo que será utilizado na view
oView:SetModel(oModel)
//Vinculando o FwFormStruct a view
oView:AddField("VIEW_SC5", oStSC5, "SC5MASTER")
//Vinculando o FwFormStruct a view
oView:AddGrid('VIEW_SC6' , oStrSC6,'SC6DETAIL')
//Definindo caixa horizontal superior
oView:CreateHorizontalBox("SUPERIOR",40)
//Definindo caixa horizontal inferior
oView:CreateHorizontalBox("INFERIOR",60)
//Vinculando a view do cabeçalho a caixa superior
oView:SetOwnerView("VIEW_SC5","SUPERIOR")
//Vinculando a view com grid a parte inferior
oView:SetOwnerView("VIEW_SC6","INFERIOR")
//Definindo o título
oView:EnableTitleView('VIEW_SC5', 'Ajusta PV')
oView:SetCloseOnOk({||.T.})
Return oView
Thyago, por favor, coloca o error.log completo pra gente analisar.
— Daniel Mendes 10 de Aug de 2021Olá Daniel, editei o chamado e adicionei o errorlog como anexo.
— Thyago 10 de Aug de 2021