#INCLUDE "TOTVS.CH"
#INCLUDE "RWMAKE.CH"
#INCLUDE "TOPCONN.CH"
#INCLUDE "FWMVCDEF.CH"
#INCLUDE "FWCOMMAND.CH"
//-------------------------------------------------------------------
/*/{Protheus.doc} Compac
Fonte MVC exemplo MVC para Navegação com FWBrowse
@Type Function Compac
@author FRAMEWORK
@since 21/11/2024
@Return Null
//-----------------------------------------------------------------*/
User Function Compac()
Local oBrowse as object
Private aRotina as Array
oBrowse := FWMBrowse():New()
aRotina := MenuDef()
oBrowse:SetAlias("ZC0")
oBrowse:SetDescription("Clientes X Pedidos X Itens Pedidos")
// Testes
oBrowse:AddLegend("ZC0_FILIAL=='01'", "RED", "Loja X")
// oBrowse:AddLegend("ZC3_FILIAL=='02'", "BLUE", "Loja Y")
oBrowse:DisableDetails()
oBrowse:SetUseFilter(.T.)
// oBrowse:SetFilterDefault("ZC0_FILIAL='" + xFilial("ZC0") + "'")
// Testes Fim
oBrowse:Activate()
Return
//-------------------------------------------------------------------
/*/{Protheus.doc} MenuDef
Define o menu com as opções disponíveis para navegação e operações
@Type Function MenuDef
@author FRAMEWORK
@since 21/11/2024
@Return Array com a estrutura do menu contendo título e ações
//-----------------------------------------------------------------*/
Static Function MenuDef()
Local aRotina as Array
aRotina := {}
ADD OPTION aRotina TITLE "Pesquisar" ACTION "PESQBRW" OPERATION 1 ACCESS 0
ADD OPTION aRotina TITLE "Visualizar" ACTION "VIEWDEF.compac" OPERATION 2 ACCESS 0
ADD OPTION aRotina TITLE "Incluir" ACTION "VIEWDEF.compac" OPERATION 3 ACCESS 0
ADD OPTION aRotina TITLE "Alterar" ACTION "VIEWDEF.compac" OPERATION 4 ACCESS 0
ADD OPTION aRotina TITLE "Excluir" ACTION "VIEWDEF.compac" OPERATION 5 ACCESS 0
ADD OPTION aRotina TITLE "Imprimir" ACTION "VIEWDEF.compac" OPERATION 8 ACCESS 0
ADD OPTION aRotina TITLE "Copiar" ACTION "VIEWDEF.compac" OPERATION 9 ACCESS 0
Return aRotina
//-------------------------------------------------------------------
/*/{Protheus.doc} ModelDef
Define a estrutura MVC incluindo os Grid relacionados
@Type Static Function
@author FRAMEWORK
@since 21/11/2024
@Return OModel Retorna o modelo configurado.
//-----------------------------------------------------------------*/
Static Function ModelDef()
Local oStruZC0 as object
Local oStruZC3 as object
Local oStruZC4 as object
Local oModel as object
oStruZC0 := FWFormStruct(1, "ZC0")
oStruZC3 := FWFormStruct(1, "ZC3")
oStruZC4 := FWFormStruct(1, "ZC4")
oModel := MPFormModel():New("Teste")
oModel:AddFields("ZC0MASTER", /*cOwner*/, oStruZC0)
oModel:AddGrid("ZC3DETAIL", "ZC0MASTER", oStruZC3)
oModel:AddGrid("ZC4DETAIL", "ZC0MASTER", oStruZC4)
oModel:AddGrid("ZC4DET2", "ZC0MASTER", oStruZC4)
oModel:SetPrimaryKey({"ZC0_FILIAL", "ZC0_COD", "ZC0_LOJA"})
oModel:SetRelation("ZC3DETAIL", {{"ZC3_FILIAL", "fwxFilial('ZC3')"}, {"ZC3_COD", "ZC0_COD"}, {"ZC3_LOJA", "ZC0_LOJA"}}, ZC3->(IndexKey(1)))
oModel:SetRelation("ZC4DETAIL", {{"ZC4_FILIAL", "fwxFilial('ZC4')"}, {"ZC4_COD", "ZC0_COD"}}, ZC4->(IndexKey(1)))
oModel:SetRelation("ZC4DET2", {{"ZC4_FILIAL", "fwxFilial('ZC4')"}, {"ZC4_COD", "ZC0_COD"}}, ZC4->(IndexKey(1)))
oModel:GetModel("ZC3DETAIL"):SetOptional(.T.)
oModel:GetModel("ZC4DET2"):SetOptional(.T.)
oModel:SetDescription("Clientes x Pedidos")
oModel:GetModel("ZC0MASTER"):SetDescription("Cliente")
oModel:GetModel("ZC3DETAIL"):SetDescription("Pedidos")
oModel:GetModel("ZC4DETAIL"):SetDescription("Títulos")
oModel:GetModel("ZC4DET2"):SetDescription("Títulos 2")
Return oModel
//-------------------------------------------------------------------
/*/{Protheus.doc} ViewDef
Define a interface gráfica do MVC
@Type Static Function
@author FRAMEWORK
@since 21/11/2024
@Return
//-----------------------------------------------------------------*/
Static Function ViewDef()
Local oStruZC0 as object
Local oStruZC3 as object
Local oStruZC4 as object
Local oModel as object
Local oView as object
oStruZC0 := FWFormStruct(2, "ZC0")
oStruZC3 := FWFormStruct(2, "ZC3")
oStruZC4 := FWFormStruct(2, "ZC4")
oModel := FWLoadModel("compac")
oView := FWFormView():New()
oView:SetModel(oModel)
oView:AddField("VIEW_ZC0", oStruZC0, "ZC0MASTER")
oView:AddGrid("VIEW_ZC3", oStruZC3, "ZC3DETAIL")
oView:AddGrid("VIEW_ZC4", oStruZC4, "ZC4DETAIL")
oView:AddGrid("VIEW_ZC4_2", oStruZC4, "ZC4DET2")
oView:AddUserButton('Comparar', '', { || fCompare() }, , , , .T.)
oView:CreateHorizontalBox("SUPERIOR", 50)
oView:CreateHorizontalBox("INFERIOR", 50)
oView:CreateVerticalBox("SUPL", 50, "SUPERIOR")
oView:CreateVerticalBox("SUPR", 50, "SUPERIOR")
oView:CreateVerticalBox("INFL", 50, "INFERIOR")
oView:CreateVerticalBox("INFR", 50, "INFERIOR")
oView:SetOwnerView("VIEW_ZC0", "SUPL")
oView:SetOwnerView("VIEW_ZC3", "SUPR")
oView:SetOwnerView("VIEW_ZC4", "INFL")
oView:SetOwnerView("VIEW_ZC4_2", "INFR")
oView:EnableTitleView("VIEW_ZC0")
oView:EnableTitleView("VIEW_ZC3")
oView:EnableTitleView("VIEW_ZC4")
oView:EnableTitleView("VIEW_ZC4_2")
Return oView
//-------------------------------------------------------------------
/*/{Protheus.doc} fCompare
Função compare usada para comparar dois objetos e exibe o resultado
@Type Static Function
@author FRAMEWORK
@since 21/11/2024
//-----------------------------------------------------------------*/
Static Function fCompare()
Local oModel as object
Local oGrid1 as object
Local oGrid2 as object
Local aCompare as Array
oModel := FWModelActive()
oGrid1 := oModel:GetModel("ZC4DETAIL")
oGrid2 := oModel:GetModel("ZC4DET2")
aCompare := {}
aCompare := oGrid1:Compare(aCompare, oGrid2)
Aviso('retorno', VarInfo('aCompare', aCompare, , .F.), {'ok'}, 4, , , , .T.)
Return |