#INCLUDE "PROTHEUS.CH" #INCLUDE "TOPCONN.CH" #INCLUDE "FWBROWSE.CH" #INCLUDE "RWMAKE.CH" #INCLUDE "FWMVCDEF.CH" //Variáveis Estáticas Static cTitulo1 := "Centro de Custo X Imovel" Static cTitulo2 := "teste" User Function CATFA004() Local aCoors := FWGetDialogSize( oMainWnd ) Local oPanelUp, oFWLayer, oPanelLeft, oBrowseUp, oBrowseDown, oRelacZEE Private oDlgPrinc Define MsDialog oDlgPrinc Title 'Centro de Custo X Imovel' From aCoors[1], aCoors[2] To aCoors[3], aCoors[4] Pixel // Cria o conteiner onde serão colocados os browses oFWLayer := FWLayer():New() oFWLayer:Init( oDlgPrinc, .F., .T. ) // Define Painel Superior oFWLayer:AddLine( 'UP', 50, .F. ) // Cria uma "linha" com 50% da tela oFWLayer:AddCollumn( 'ALL', 100, .T., 'UP' ) // Na "linha" criada eu crio uma coluna com 100% da tamanho dela oPanelUp := oFWLayer:GetColPanel( 'ALL', 'UP' ) // Pego o objeto desse pedaço do container // Painel Inferior oFWLayer:AddLine( 'DOWN', 50, .F. ) oFWLayer:AddCollumn( 'LEFT' , 100, .T., 'DOWN' ) oPanelLeft := oFWLayer:GetColPanel( 'LEFT' , 'DOWN' ) // Pego o objeto do pedaço esquerdo // FWmBrowse Superior CTT - Centro de Custo oBrowseUp:= FWmBrowse():New() oBrowseUp:SetOwner( oPanelUp ) oBrowseUp:SetDescription( "Centro de Custo" ) oBrowseUp:SetAlias( 'CTT' ) oBrowseUP:SetFilterDefault( "CTT_CLASSE=='2' .AND. CTT_BLOQ =='2'" ) oBrowseUp:SetMenuDef( 'CATFA004' ) oBrowseUp:SetProfileID( '1' ) oBrowseUp:ForceQuitButton() oBrowseUp:Activate() //oBrowseDown:DisableDetails() // // FWmBrowse Inferior ZEE - CC X Imovel oBrowseDown:= FWMBrowse():New() oBrowseDown:SetOwner( oPanelLeft ) oBrowseDown:SetDescription( 'CC X Imovel' ) oBrowseDown:SetAlias( 'ZEE' ) oBrowseDown:SetMenuDef( '' ) oBrowseDown:SetProfileID( '2' ) oBrowseUp:ForceQuitButton() oBrowseDown:DisableDetails() oBrowseDown:Activate() // Relacionamento entre os Paineis oRelacZEE:= FWBrwRelation():New() oRelacZEE:AddRelation( oBrowseUp , oBrowseDown , { { 'ZEE_FILIAL', 'xFilial( "ZEE" )' }, {'ZEE_CCUSTO','CTT_CUSTO'} }) oRelacZEE:Activate() Activate MsDialog oDlgPrinc Centered Return NIL /*---------------------------------------------------------------------* | Func: MenuDef | | Autor: Daynillene Ribeiro | | Data: 09/12/2016 | | Desc: Criação do menu MVC | | Obs.: / | *---------------------------------------------------------------------*/ Static Function MenuDef() Local aRot := {} ADD OPTION aRot TITLE "Pesquisar" ACTION 'PesqBrw' OPERATION 1 ACCESS 0 ADD OPTION aRot TITLE "Visualizar" ACTION "VIEWDEF.CATFA004" OPERATION 2 ACCESS 0 // ADD OPTION aRot TITLE "Incluir" ACTION "VIEWDEF.CATFA004" OPERATION 3 ACCESS 0 ADD OPTION aRot TITLE "Alterar" ACTION "VIEWDEF.CATFA004" OPERATION 4 ACCESS 0 ADD OPTION aRot TITLE "Excluir" ACTION "VIEWDEF.CATFA004" OPERATION 5 ACCESS 0 ADD OPTION aRot TITLE "Imprimir" ACTION "VIEWDEF.CATFA004" OPERATION 8 ACCESS 0 // ADD OPTION aRot TITLE "Copiar" ACTION "VIEWDEF.CATFA004" OPERATION 9 ACCESS 0 Return aRot /*---------------------------------------------------------------------* | Func: ModelDef | | Autor: Daynillene Ribeiro | | Data: 09/12/2016 | | Desc: Criação do modelo de dados MVC | | Obs.: / | *---------------------------------------------------------------------*/ Static Function ModelDef() //Criação do objeto do modelo de dados Local oModel //Criação da estrutura de dados utilizada na interface Local oStPai := FWFormStruct(1, 'CTT') Local oStFilho := FWFormStruct(1, 'ZEE') Local aZEERel := {} Local aAux := CreateTrigger() // TRIGGER DE PREENCHIMENTO DO CENTRO DE CUSTO oStFilho:AddTrigger( ; aAux[1] , ; // [01] Id do campo de origem aAux[2] , ; // [02] Id do campo de destino aAux[3] , ; // [03] Bloco de codigo de validação da execução do gatilho aAux[4] ) // [04] Bloco de codigo de execução do gatilho //Criando o modelo e os relacionamentos oModel := MPFormModel():New('ATFA004M', /*Alteração*/, {|oModel|( oModel )}/* Validação */, /*bCommit*/, /*bCancel*/) // oModel := MPFormModel():New('ATFA004M') oModel:AddFields('CTTMASTER',/*cOwner*/,oStPai) oModel:AddGrid('ZEEDETAIL','CTTMASTER',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(aZEERel, {'ZEE_FILIAL', 'CTT_FILIAL'} ) aAdd(aZEERel, {'ZEE_CCUSTO', 'CTT_CUSTO'}) oModel:SetRelation('ZEEDETAIL', aZEERel, ZEE->(IndexKey(1))) //IndexKey -> quero a ordenação e depois filtrado //Setando a chave primária da rotina oModel:SetPrimaryKey({}) // oModel:GetModel('CTTMASTER'):SetNoInsertLine(.T.) // oModel:GetModel('CTTMASTER'):SetNoUpdateLine(.T.) //Setando as descrições oModel:GetModel('CTTMASTER'):SetDescription(cTitulo1) oModel:GetModel('ZEEDETAIL'):SetDescription(cTitulo2) Return oModel /*---------------------------------------------------------------------* | Func: ViewDef | | Autor: Daynillene Ribeiro | | Data: 09/12/2016 | | Desc: Criação da visão MVC | | Obs.: / | *---------------------------------------------------------------------*/ Static Function ViewDef() //Criação da estrutura de dados utilizada na interface do cadastro de Autor Local oStPai := FWFormStruct(2, 'CTT') //pode se usar um terceiro parâmetro para filtrar os campos exibidos { |cCampo| cCampo $ 'SBM_NOME|SBM_DTAFAL|'} Local oStFilho := FWFormStruct(2, 'ZEE') //Criação do objeto do modelo de dados da Interface do Cadastro de Autor/Interprete Local oModel := FWLoadModel("CATFA004") //Criando oView como nulo Local oView //Propiedade que Indica se o campo é editável. '*' indica que todos os campos. oStPai:SetProperty( '*' , MVC_VIEW_CANCHANGE,.F.) oStFilho:SetProperty( 'ZEE_CCUSTO' , MVC_VIEW_CANCHANGE,.F.) oStFilho:SetProperty( 'ZEE_DESCUS' , MVC_VIEW_CANCHANGE,.F.) oStFilho:SetProperty( 'ZEE_DESIMO' , MVC_VIEW_CANCHANGE,.F.) //Criando a view que será o retorno da função e setando o modelo da rotina oView := FWFormView():New() oView:SetModel(oModel) //Adicionando os campos do cabeçalho e o grid oView:AddField('VIEW_CTT',oStPai,'CTTMASTER') oView:AddGrid('VIEW_ZEE',oStFilho,'ZEEDETAIL') //Setando o dimensionamento de tamanho oView:CreateHorizontalBox('CABEC',50) oView:CreateHorizontalBox('GRID',50) //Amarrando a view com as box oView:SetOwnerView('VIEW_CTT','CABEC') oView:SetOwnerView('VIEW_ZEE','GRID') //Habilitando título oView:EnableTitleView('VIEW_CTT','CC') oView:EnableTitleView('VIEW_ZEE','IMOVEL') //Força o fechamento da janela na confirmação oView:SetCloseOnOk({||.T.}) Return oView //Função que cria o gatilho Static Function CreateTrigger() Local aAux := FwStruTrigger(; "ZEE_CODIMO" ,; // Campo Dominio "ZEE_CCUSTO" ,; // Campo de Contradominio 'Posicione("CTT",1,xFilial()+CTT->CTT_CUSTO,"CTT_CUSTO")',; // Regra de Preenchimento .F.)// ,; // Se posicionara ou nao antes da execucao do gatilhos // "" ,; // Alias da tabela a ser posicionada // 0 ,; // Ordem da tabela a ser posicionada // "" ,; // Chave de busca da tabela a ser posicionada // NIL ,; // Condicao para execucao do gatilho // "01" ) // Sequencia do gatilho (usado para identificacao no caso de erro) Return aAux