Perguntas Colocar Browser no MODELO 3 ()

Mais
3 anos 7 meses atrás #33008 por aramissf1997
Bom dia, fiz esse código, porem isso e só o cadastro e não estou conseguindo colocar um browser nele, se alguém conseguir me ajudar.
#include "protheus.ch"
#include "rwmake.ch"    
 
User Function OCORRENCIAS()
Local cOpcao        as character
Local nOpcE         as numeric
Local nOpcG         as numeric
Local nUsado        as numeric
Local _ni           as numeric
 
Private aHeader     as array
Private aRotina     as array
Private aCols       as array
 
aRotina := {{ "Pesquisa","AxPesqui", 0 , 1}, { "Visual","AxVisual", 0 , 2}, { "Inclui","AxInclui", 0 , 3}, { "Altera","AxAltera", 0 , 4, 20 }, { "Exclui","AxDeleta", 0 , 5, 21 }}
 
cOpcao:= "INCLUIR"
 
Do Case
    Case cOpcao=="INCLUIR"; nOpcE:=3 ; nOpcG:=3
    Case cOpcao=="ALTERAR"; nOpcE:=3 ; nOpcG:=3
    Case cOpcao=="VISUALIZAR"; nOpcE:=2 ; nOpcG:=2
EndCase
 
DbSelectArea("ZZD")
DbSetOrder(1)
DbGotop()
 
RegToMemory("ZZE", (cOpcao=="INCLUIR"))

nUsado := 0
 
dbSelectArea("SX3")
DbSetOrder(1)
DbSeek("ZZD")
aHeader := {}
While !Eof() .And. (X3_ARQUIVO == "ZZD")   
    If Alltrim(X3_CAMPO) == "ZZD_ITEM"      
        dbSkip()       
        Loop   
    Endif  
    If X3USO(X3_USADO) .And. cNivel >= X3_NIVEL     
        nUsado := nUsado+1       
        Aadd(aHeader,{ TRIM(X3_TITULO),;
                        AllTrim(X3_CAMPO),;
                        X3_PICTURE,;
                        X3_TAMANHO,;
                        X3_DECIMAL,;
                        "AllwaysTrue()",;
                        X3_USADO,;
                        X3_TIPO,;
                        X3_ARQUIVO,;
                        X3_CONTEXT } ) 
    Endif
    dbSkip()
EndDo
 
If cOpcao == "INCLUIR" 
    aCols:={Array(nUsado+1)}   
    aCols[1, nUsado+1] := .F.  
 
    For _ni := 1 to nUsado     
        aCols[1, _ni] := CriaVar(aHeader[_ni, 2])  
    Next
Else   
    aCols := {}
    dbSelectArea("ZZD")
    dbSetOrder(1)  
    dbSeek(xFilial()+M->C5_COD) 
    While !eof() .and. ZZD->ZZD_FILIAL == M->ZZE_FILIAL     
        AADD(aCols, Array(nUsado+1))       
 
        For _ni := 1 to nUsado         
            aCols[Len(aCols), _ni] := FieldGet(FieldPos(aHeader[_ni, 2]))      
        Next       
 
        aCols[Len(aCols), nUsado+1] := .F.     
        dbSkip()   
    EndDo
Endif
     
If Len(aCols) > 0   

    cTitulo := "Cadastro de Ocorrencias"  
    cAliasEnchoice := "ZZE"
    cAliasGetD := "ZZD"
    cLinOk := "AllwaysTrue()"  
    cTudOk := "AllwaysTrue()"  
    cFieldOk := "AllwaysTrue()"
    _lRet:= Modelo3(cTitulo, cAliasEnchoice, cAliasGetD,, cLinOk, cTudOk, nOpcE, nOpcG, cFieldOk)  
   
    If _lRet       
        Aviso("OCORRENCIAS", "Ocorrencia salva com sucesso!", {"Ok"}) 
    Endif
Endif                
Return

Por favor Acessar ou Registrar para participar da conversa.

Mais
3 anos 7 meses atrás #33012 por admin
Respondido por admin no tópico Colocar Browser no MODELO 3 ()
Brother para este caso te aconselho a usar MVC, segue um exemplo e também um video para vc criar o fonte.

Menos dor de cabeça.

Abraços

terminaldeinformacao.com/2016/09/15/vd-advpl-020/

www.youtube.com/watch?v=Q7AU8YA0Gkc

segue um exemplo, o forum esta com problemas para anexar arquivos.
//Bibliotecas
#Include 'Protheus.ch'
#Include 'FWMVCDef.ch'
#Include "Topconn.ch"
#Include "TbiConn.ch"
#Include "TbiCode.ch"  

//Variáveis Estáticas
Static cTitulo := "Cadastro Geometria"

/*/{Protheus.doc} VndMat
Função para cadastro de Grupo de Produtos (SBM) e Produtos (SB1), exemplo de Modelo 3 em MVC
@author AtilioMVCMd3
@since 17/08/2015
@version 1.0
	@return Nil, Função não tem retorno
	@example
	u_CadGeo()
	@obs Não se pode executar função MVC dentro do fórmulas
/*/
User Function CadGeo()
	Local aArea   := GetArea()
	Local oBrowse
	Private cDirDest	 := GetNewPar("MV_GEDEST",GetSrvProfString("Startpath", "")+'Geometrias\'+AlLTrim(M->ZQ_PARTNUM)+'_'+AllTrim(M->ZQ_VERSAO)+'_'+AllTrim(M->ZQ_OPERA))
		
	//Instânciando FWMBrowse - Somente com dicionário de dados
	oBrowse := FWMBrowse():New()
	
	//Setando a tabela de cadastro de Autor/Interprete
	oBrowse:SetAlias("SZQ")
	//Setando a descrição da rotina
	oBrowse:SetDescription(cTitulo)
	
	//Legendas
    oBrowse:AddLegend( "SZQ->ZQ_STATUS == 'L'", "GREEN"	,    "Geometria Liberada" )
    oBrowse:AddLegend( "SZQ->ZQ_STATUS == 'B'", "RED"	,    "Geometria Bloqueada" )
    
    //Ativa a Browse
	oBrowse:Activate()
	
	RestArea(aArea)
Return Nil
/*---------------------------------------------------------------------*
 | Func:  MenuDef                                                      |
 | Autor: Daniel Atilio                                                |
 | Data:  17/08/2015                                                   |
 | Desc:  Criação do menu MVC                                          |
 | Obs.:  /                                                            |
 *---------------------------------------------------------------------*/
Static Function MenuDef()
	Local aRot := {}
	
	//Adicionando opções
	ADD OPTION aRot TITLE 'Visualizar' ACTION 'VIEWDEF.CadGeo' 	OPERATION MODEL_OPERATION_VIEW   	ACCESS 0 //OPERATION 1
	ADD OPTION aRot TITLE 'Incluir'    ACTION 'VIEWDEF.CadGeo' 	OPERATION MODEL_OPERATION_INSERT 	ACCESS 0 //OPERATION 3
	ADD OPTION aRot TITLE 'Revisão'    ACTION 'VIEWDEF.CadGeo' 	OPERATION MODEL_OPERATION_UPDATE 	ACCESS 0 //OPERATION 4
//	ADD OPTION aRot TITLE 'Revisão'	   ACTION 'GeoCpy'   	  	OPERATION 9 						ACCESS 0 //'Copia'
	ADD OPTION aRot TITLE 'Excluir'    ACTION 'VIEWDEF.CadGeo' 	OPERATION MODEL_OPERATION_DELETE 	ACCESS 0 //OPERATION 5
    ADD OPTION aRot TITLE 'Legenda'    ACTION 'u_LegGeo'       	OPERATION 6                      	ACCESS 0 //OPERATION X
	ADD OPTION aRot TITLE 'Liberação'  ACTION "U_fPrcGeo()"  	OPERATION 4 						ACCESS 0          //"Agendas Mat"
	ADD OPTION aRot TITLE 'Relatorio'  ACTION "U_fRelGeo()"  	OPERATION 4 						ACCESS 0          //"Agendas Mat"

Return aRot
/*---------------------------------------------------------------------*
 | Func:  ModelDef                                                     |
 | Autor: Daniel Atilio                                                |
 | Data:  17/08/2015                                                   |
 | Desc:  Criação do modelo de dados MVC                               |
 | Obs.:  /                                                            |
 *---------------------------------------------------------------------*/
Static Function ModelDef()
	Local oModel 		:= Nil
	Local oStPai 		:= FWFormStruct(1, 'SZQ')
	Local oStFilho 		:= FWFormStruct(1, 'SZR')
	Local aSB1Rel		:= {}
	
	// Cria o objeto do Modelo de Dados
	oModel := MPFormModel():New( 'CadGeoM', /*bPreValidacao*/,{|oModel| fTrfFiles(oModel) } ,/*bCommit*/, /*bCancel*/ )
	
	oModel:AddFields('SZQMASTER',/*cOwner*/,oStPai)
	oModel:AddGrid('SZRDETAIL','SZQMASTER',oStFilho,/*bLinePre*/, /*bLinePost*/,/*bPre - Grid Inteiro*/,/*bPos - Grid Inteiro*/,/*bLoad - Carga do modelo manualmente*/)  //cOwner é para quem pertence
	
	//Definições dos campos
  	oStPai:SetProperty('ZQ_IDGEO',    MODEL_FIELD_WHEN,    FwBuildFeature(STRUCT_FEATURE_WHEN,    '.F.'))                                 //Modo de Edição
    oStPai:SetProperty('ZQ_IDGEO',    MODEL_FIELD_INIT,    FwBuildFeature(STRUCT_FEATURE_INIPAD,  'GetSXENum("SZQ", "ZQ_IDGEO")'))       //Ini Padrão

	//Fazendo o relacionamento entre o Pai e Filho
	aAdd(aSB1Rel, {'ZR_FILIAL',	'xFilial("SZR")'} )
	aAdd(aSB1Rel, {'ZR_IDGEO',	'ZQ_IDGEO'}) 
	
	oModel:SetRelation('SZRDETAIL', aSB1Rel, SZR->(IndexKey(1))) //IndexKey -> quero a ordenação e depois filtrado
	oModel:GetModel('SZRDETAIL'):SetUniqueLine({"ZR_CAMADA",'ZR_ARQUIVO','ZR_DESTINO','ZR_ORIGEM'})	//Não repetir informações ou combinações {"CAMPO1","CAMPO2","CAMPOX"}
	oModel:SetPrimaryKey({})
	
	//Setando as descrições
	oModel:SetDescription("Cadastro Geometria")
	oModel:GetModel('SZQMASTER'):SetDescription('Cadastro Geometria')
	oModel:GetModel('SZRDETAIL'):SetDescription('Arquivos Relacionados')
Return oModel
/*---------------------------------------------------------------------*
 | Func:  ViewDef                                                      |
 | Autor: Daniel Atilio                                                |
 | Data:  17/08/2015                                                   |
 | Desc:  Criação da visão MVC                                         |
 | Obs.:  /                                                            |
 *---------------------------------------------------------------------*/
Static Function ViewDef()
	Local oView		:= Nil
	Local oModel	:= FWLoadModel('CadGeo')
	Local oStPai	:= FWFormStruct(2, 'SZQ')
	Local oStFilho	:= FWFormStruct(2, 'SZR')
	Local nOperation 	:= oModel:GetOperation()
	
	//Criando a View
	oView := FWFormView():New()
	oView:SetModel(oModel)
	
	//Adicionando os campos do cabeçalho e o grid dos filhos
	oView:AddField('VIEW_SZQ',oStPai,'SZQMASTER')
	oView:AddGrid('VIEW_SZR',oStFilho,'SZRDETAIL')
	
	// Define campos que terao Auto Incremento
	oView:AddIncrementField( 'VIEW_SZR', 'ZR_CAMADA' 	)
	
	// Adiciona Opcoes no Acoes Relacionadas da Tela

//	If nOperation == MODEL_OPERATION_INSERT .Or. nOperation == MODEL_OPERATION_UPDATE
		oView:AddUserButton("Busca (DXF's) ","",{|oView| fSelDir(oView) })
//	Endif

	//Setando o dimensionamento de tamanho
	oView:CreateHorizontalBox('CABEC',30)
	oView:CreateHorizontalBox('GRID',70)
	
	//Amarrando a view com as box
	oView:SetOwnerView('VIEW_SZQ','CABEC')
	oView:SetOwnerView('VIEW_SZR','GRID')
	
	//Habilitando título
	oView:EnableTitleView('VIEW_SZQ','Cadastro Geometria')
	oView:EnableTitleView('VIEW_SZR','Arquivos Relacionados')

    //Remove os campos de Código do Artista e CD
    oStFilho:RemoveField('ZR_IDGEO')
Return oView

/*/{Protheus.doc} zMVC01Leg
Função para mostrar a legenda das rotinas MVC com grupo de produtos
@author Atilio
@since 17/08/2015
@version 1.0
	@example
	u_zMVC01Leg()
/*/

User Function LegGeo()
	Local aLegenda := {}
	
	//Monta as cores
	AADD(aLegenda,{"BR_VERDE",		"Geometria Liberada"  })
	AADD(aLegenda,{"BR_VERMELHO",	"Geometria Bloqueada"})
	
	BrwLegenda("Cadastro de Geometria", "Status", aLegenda)
Return



//+-----------------------------------------------------------------------------------//
//|Funcao....: fSelDir()
//|Autor.....: Luiz Alberto Vieira Alves - 3L Systems - lalberto@3lsystems.com.br
//|Data......: 22 de Novembro de 2019, 10:00
//|Descricao.: Janela de Selecao de Diretorio Para Busca de arquivos 
//|Observação: 
//+-----------------------------------------------------------------------------------//
*-----------------------------------------------------------*
Static Function fSelDir(oView)
*-----------------------------------------------------------*
If Empty(M->ZQ_VERSAO)
	MsgStop("Atenção, Para Busca dos Arquivos é Necessário que o Campo Versão Esteja Preenchido !")
	Return .F.
Endif

/*If Empty(M->ZQ_OPERA)
	MsgStop("Atenção, Para Busca dos Arquivos é Necessário que o Campo Operação Esteja Preenchido !")
	Return .F.
Endif
  */
cDirOri := cGetFile(,"Selecione o diretorio",,"",.T.,GETF_LOCALHARD+ GETF_RETDIRECTORY+GETF_NETWORKDRIVE)

If !Empty(cDirOri)
	Processa( {|| fAddArqs(oView,cDirOri)    },"Adicionando Lista de Arquivos do Diretório Selecionado..." )
EndIf

Return

//+-----------------------------------------------------------------------------------//
//|Funcao....: fAddArqs(cDirOri)
//|Autor.....: Luiz Alberto Vieira Alves - 3L Systems - lalberto@3lsystems.com.br
//|Data......: 22 de Novembro de 2019, 10:00
//|Descricao.: Adiciona Arquivos ao Grid
//|Observação: 
//+-----------------------------------------------------------------------------------//
*-----------------------------------------------------------*
Static Function fAddArqs(oView,cDirOri)
*-----------------------------------------------------------*
Local oModelSZR  := oView:GetModel('SZRDETAIL')

If !MsgYesNo("Confirma a Carga dos Arquivos do Diretório " + cDirOri + " ? ","Atenção")
	Return .f.
Endif

aArquivo := {}
aTamanho := {}
			
Adir(AllTrim(cDirOri) + "\*.dxf",aArquivo,aTamanho)

ProcRegua(Len(aArquivo))

For nArq :=1 To Len(aArquivo)
	IncProc("Processando Arquivo " + aArquivo[nArq])

	oModelSZR:LoadValue("ZR_CAMADA",StrZero(nArq,3))
	oModelSZR:LoadValue("ZR_ARQUIVO",aArquivo[nArq])
	oModelSZR:LoadValue("ZR_DESTINO",cDirDest)
	oModelSZR:LoadValue("ZR_ORIGEM",cDirOri)

	oModelSZR:AddLine()
Next
oModelSZR:SetLine(1)
oView:Refresh()

MsgInfo("Arquivos Importados com Sucesso.")

Return



//+-----------------------------------------------------------------------------------//
//|Funcao....: fTrfFiles(oModel)
//|Autor.....: Luiz Alberto Vieira Alves - 3L Systems - lalberto@3lsystems.com.br
//|Data......: 22 de Novembro de 2019, 10:00
//|Descricao.: Faz a Copia dos Arquivos da Pasta Origem para o Destino
//|Observação: 
//+-----------------------------------------------------------------------------------//
Static Function fTrfFiles()
Local oModel 	:= FWModelActive()
Local oModelSZR := oModel:GetModel('SZRDETAIL')
Local lOk		:= .T.

nLocal := Aviso("Você Está Usando o Servidor ou Estação de Trabalho ?","Selecione a Origem de Acesso",{"Servidor",'Estação'},3)

If nLocal == 1
	For nI := 1 To oModelSZR:Length()
		oModelSZR:GoLine( nI )
	
		If !ExistDir( AllTrim(oModelSZR:GetValue("ZR_DESTINO")) )
			MakeDir(AllTrim(oModelSZR:GetValue("ZR_DESTINO"))) 
	    Endif
	    
		cArqOri 	:=	AllTrim(oModelSZR:GetValue("ZR_ORIGEM"))+oModelSZR:GetValue("ZR_ARQUIVO")
		cArqDes		:=	AllTrim(oModelSZR:GetValue("ZR_DESTINO"))+'\'+oModelSZR:GetValue("ZR_ARQUIVO")
	
		lOk := __CopyFile(cArqOri, cArqDes,,,.F.)
		If !lOk
			MsgStop("Falha Na Copia dos Arquivos Para o Servidor, Verifique !!!")
		EndIf
	Next
Else
	For nI := 1 To oModelSZR:Length()
		oModelSZR:GoLine( nI )
	
		If !ExistDir( AllTrim(oModelSZR:GetValue("ZR_DESTINO")) )
			MakeDir(AllTrim(oModelSZR:GetValue("ZR_DESTINO"))) 
	    Endif
	    
		cArqOri 	:=	AllTrim(oModelSZR:GetValue("ZR_ORIGEM"))+oModelSZR:GetValue("ZR_ARQUIVO")
		cArqDes		:=	AllTrim(oModelSZR:GetValue("ZR_DESTINO"))
	
		CPYT2S(cArqOri,cArqDes,.T.)
	Next
Endif
//Realiza a gravação do Modelo
FWFormCommit( oModel )

Return .T.



//-------------------------------------------------------------------
/*/{Protheus.doc} GeoCpy
Gera Nova Revisão da Geometria Posicionada

@author Luiz Alberto
@since  22/11/2019
@version 12
/*/
//-------------------------------------------------------------------

Static Function GeoCpy(cAlias,nReg,nOpc)
Local cBase			:= SN1->N1_CBASE
Local cItem			:= SN1->N1_ITEM
Local lConfirma		:= .F.
Local lCancela		:= .F.
Local cTitulo			:= ""
Local cPrograma		:= ""
Local nOperation		:= 0
Local nX				:= 0
Local lRet				:= .T.
Local cChapa			:= ""
Local cItemOri		:= ""
Local oAux 			:= Nil
Local oStruct			:= Nil
Local aAux				:= {}		
Local nLin 			:= 1


SN1->(dbSetOrder(1)) //N1_FILIAL+N1_CBASE+N1_ITEM

If SN1->(MsSeek(xFilial("SN1") + cBase + cItem ))
	__lCopia		:= .T.
	__lIncluMan	:= .T.
	cTitulo      := 'Cópia'
	cPrograma    := 'ATFA012'
	nOperation   := MODEL_OPERATION_INSERT
	
	oModel       := FWLoadModel( cPrograma )
	oModel:SetOperation( nOperation ) // Inclusão
	oModel:Activate(.T.) // Ativa o modelo com os dados posicionados
	
	oAux		:= oModel:GetModel("SN3DETAIL")
	oStruct	:= oAux:GetStruct()
	aAux		:= oStruct:GetFields()
	
	oModel:LoadValue("SN1MASTER","N1_CBASE","")
	oModel:LoadValue("SN1MASTER","N1_ITEM","")
	oModel:LoadValue("SN1MASTER","N1_CHAPA","")
	
	pergunte("AFA012",.F.)
	AF012PerAut()
	If MV_PAR03 == 2
		For nLin := 1 to Len(oAux:aCols)
			oAux:SetLine(nLin)
			For nX := 1 to Len(aAux)
				If "N3_DINDEPR" $  aAux[nX,3]
					oAux:LoadValue( aAux[nX,3] , dDatabase )
				ElseIf "N3_VRDACM" $  aAux[nX,3] .Or. "N3_VRCACM" $  aAux[nX,3]
					oAux:LoadValue( aAux[nX,3] , 0 )
				EndIf
			Next nX
		Next nLin
		oAux:SetLine(1)
	EndIf
	
	lMostra		:= MV_PAR01 == 1
	lContab		:= MV_PAR05 == 1
	lAglut			:= MV_PAR06 == 1
	
	If lContab
		cLoteCTB	:= LoteCont("ATF")
		nTotCTB	:= 0
		cTrbCTB	:= ""
		nHandle	:= HeadProva(cLoteCTB,"ATFA012",Substr(cUsername,1,6),@cTrbCTB)
		__aCtb		:= Array(4)
		__aCtb[1]	:= nHandle
		__aCtb[2]	:= nTotCTB
		__aCtb[3]	:= cTrbCTB
		__aCtb[4]	:= cLoteCTB
	EndIf
	
	nRet := FWExecView( cTitulo , cPrograma, nOperation, /*oDlg*/, {|| .T. } ,/*bOk*/ , /*nPercReducao*/, /*aEnableButtons*/, /*bCancel*/ , /*cOperatId*/, /*cToolBar*/, oModel )
	oModel:DeActivate()
	__lCopia		:= .F.
	__lIncluMan	:= .F.
	
	If nRet == 0 // OK
		MsgRun( "Gerando fichas de ativos ..." ,, {|| AF012Multi() } ) //
		If __nHdlPrv > 0 .And. ( __nTotal > 0 )
			RodaProva(__nHdlPrv, __nTotal)
			cA100Incl(__cArqCtb,__nHdlPrv,3,__cLoteAtf,lMostra,lAglut)
		Endif
	EndIf
	
EndIf

__aCtb := {}
AF012Static()
Return

Os seguintes usuário(s) disseram Obrigado: aramissf1997

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.112 segundos
Joomla templates by a4joomla