Jump to content
Fivewin Brasil

Salvar exibição de campos do Xbrowse


marcioe

Recommended Posts

Abaixo uma imagem do que estou querendo

Quando clico na coluna com botão direito sobre a coluna ele abre a opção de esconder ou exibir colunas.  Porem quando fecho e reabro a tela,  ele volta no padrão, ou seja mostrando todas a colunas.

gostaria de se possível salvar essas configurações e ao abrir ele setar essas propriedades conforme salva.

Pois isso dará possibilidades do usuário salvar as colunas que ele quer exibir no browse de pesquisa.

Agradeço aos amigos que puderem colaborar

COLUNAS-PERSONALIZADAS.jpg

Espero que a imagem ilustre

 

 

Link to comment
Share on other sites

2 minutos atrás, marcioe disse:

desculpa não entendi a sua Dica

No fonte do xBrowse existe os métodos SaveState, RestoreState e OldRestoreState que você pode utilizar pra fazer o que está querendo.

 

 

//----------------------------------------------------------------------------//

METHOD SaveState( aAdditionalData ) CLASS TXBrowse

   local aData    := { "nCreationOrders", "nRowHeight", "nWidths", "lHides", "cGrpHdrs", "cHeaders" }
   local aState   := {}

   if ValType( aAdditionalData ) == 'A'
      AEval( aAdditionalData, { |c| AAdd( aData, c ) } )
   endif

   AEval( aData, { |c| AAdd( aState, { "_" + c, OSend( Self, c ) } ) } )

   //return "XSS:" + HB_StrToHex( ASave( aState ) ) // Upto FWH 11.07

return "XS1:" + FW_ValToExp( aState )            // From FWH 11.08

//----------------------------------------------------------------------------//

METHOD RestoreState( cState ) CLASS TXBrowse

   local aState

   if ! Empty( cState )
      if Left( cState, 2 ) == "XS"
         if Left( cState, 4 ) == 'XS1:'
            cState      := SubStr( cState, 5 )
            aState      := &( cState )
         elseif Left( cState, 4 ) == 'XSS:'
            aState      := ARead( HB_HexToStr( SubStr( cState, 5 ) ) )
         else
            return nil
         endif
         ::ReArrangeCols( aState[ 1, 2 ], .t. , .f. )
         AEval( aState, { |a| OSend( Self, a[ 1 ], a[ 2 ] ) }, 2 )
      else
         return ::OldRestoreState( cState )
      endif

      ::GetDisplayCols()
      ::Refresh()
   endif

return nil

//----------------------------------------------------------------------------//

METHOD OldRestoreState( cState ) CLASS TXBrowse

   local aCols       := {}
   local aNewOrder   := {}
   local nFor, nLen, nHeight, cCol, oCol, nOrder

   if Empty( cState )
      return nil
   endif

   nLen   := Len( ::aCols )
   nHeight := Val(StrToken( cState, 1, ";" ) )

   if Empty( ::nRowHeight )
      return nil
   endif

   for nFor := 1 to nLen
      cCol := StrToken( cState, nFor + 1, ";" )
      if Empty( cCol )
         return nil
      endif
      nOrder         := Val( StrToken( cCol, 1, ":" ) )
      if nOrder < 1 .or. nOrder > nLen
         return nil
      endif
      aadd( aNewOrder, nOrder )
   next

   ASort( ::aCols,,, { |x,y| x:nCreationOrder < y:nCreationOrder } )

   ::nRowHeight := nHeight

   for nFor := 1 to nLen
      cCol           := StrToken( cState, nFor + 1, ";" )
      nOrder         := Val( StrToken( cCol, 1, ":" ) )

      WITH OBJECT ::aCols[ nOrder ]
         :lHide      := ( AllTrim( StrToken( cCol, 4, ":" ) ) == "H" )
         :nWidth     := Val( StrToken( cCol, 2, ":" ) )
         :cHeader    := StrToken( cCol, 3, ":" )
         :cGrpHdr    := StrToken( cCol, 5, ":" )
         if Empty( :cGrpHdr )
            :cGrpHdr := nil
         endif
      END
   next

   AEval( aNewOrder, { |n| AAdd( aCols, ::aCols[ n ] ) } )
   ::aCols        := aCols

   ::GetDisplayCols()
   ::Super:Refresh()

return nil
 

Link to comment
Share on other sites

faço assim:

Salvo em arquivo de memória, então no inicio do fonte antes de Janelas, verifico se existe o arquivo salvo e restauro para uma variavel: cState

    IF File("StProduto.rli")
        Restore FROM ("StProduto.rli") ADDITIVE
    End

 

Monta a rotina... Janela.... Browse... etc

   oBrw:SetFocus()
   oBrw:RestoreState( cState )
   *
    ACTIVATE DIALOG odlg CENTER ON INIT (oBrw:RestoreState( cState ),oBrw:SetFocus()) VALID ( cState := oBrw:SaveState(), .T. )
    *

    *** Ao sair SALVO novamente no arquivo de memoria
        Save To ("StProduto.rli") ALL LIKE cState
    *
 

Link to comment
Share on other sites

  • 1 year later...

Olá a todos, a rotina está funcionado muito bem
Porem uma pergunta

Se tenho uma Footer com total, ao mover não fica na posição correta,

Vejam a imagem

Normal, o total está na certinho no rodapé

11111111111111111111111111111111111111.j

 

Modificada, as posiçoes ficam "Zoneadas"

2222222222222222222222222.jpg


Código abaixo
 

		*-------------------------------------------------------------------------
		oDB_OSERVICO_ITENS 							:= TXBrowse():New( oDlg_DIGITA_OS_VEICULO )
		oDB_OSERVICO_ITENS:cAlias    				:= "os_itens"
		*-------------------------------------------------------------------------
		oDB_OSERVICO_ITENS:lColDividerComplete := .F.
		oDB_OSERVICO_ITENS:lFooter             := .T.
		oDB_OSERVICO_ITENS:lRecordSelector     := .F.  
		oDB_OSERVICO_ITENS:lHScroll            := .T.  //-----> Barra Rolagem Horiz.
		oDB_OSERVICO_ITENS:nHeaderLines        := 1.0
		oDB_OSERVICO_ITENS:nDataLines          := 2.0
		oDB_OSERVICO_ITENS:nFooterLines        := 1.0
		oDB_OSERVICO_ITENS:bClrStd 				:= {|| { M->COR_LETRAS_GRID, IIF(((oDB_OSERVICO_ITENS:cAlias)->(ORDKEYNO()))%2==0, COR_1_bClrStd , COR_2_bClrStd  )}}
		oDB_OSERVICO_ITENS:bClrSelFocus 		  	:= {|| { M->COR_1_bClrSelFocus, M->COR_2_bClrSelFocus  } }         
		oDB_OSERVICO_ITENS:bClrRowFocus 		  	:= {|| { M->COR_1_bClrRowFocus, M->COR_2_bClrRowFocus   } }
		oDB_OSERVICO_ITENS:nColDividerStyle    := 4
		oDB_OSERVICO_ITENS:nRowDividerStyle    := 4
		oDB_OSERVICO_ITENS:nMarqueeStyle       := 4
		oDB_OSERVICO_ITENS:nFooterLines     	:= 1
		oDB_OSERVICO_ITENS:lAllowColSwapping   := .T.                                 //  Click no header (.f.)Trava
		oDB_OSERVICO_ITENS:lAllowRowSizing     := .T.                                 //  Nao move as Linhas (nao sei)	
		oDB_OSERVICO_ITENS:l2007 					:= M->ESTILO_l2007 
		oDB_OSERVICO_ITENS:lAllowRowSizing     := .T. 
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || STRZERO(os_itens->CODIGO_ITEN,06,0) }
		oCol:cHeader   								:= "Cód"
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:cToolTip      							:= {"Código do Item","Ajuda","", } 		 	
		oDB_OSERVICO_ITENS							:aCols[1]:nWidth := 070		
		oDB_OSERVICO_ITENS:aCols[01]:nEditType := EDIT_BUTTON
	   oDB_OSERVICO_ITENS:aCols[01]:bEditBlock:= {|nRow, nCol, oCol|  DELETA_ITENS_ORDEM_SERVICO_VEICULO(os_itens->ID)	     }
	   oDB_OSERVICO_ITENS:aCols[01]:addbmpfile( "#8017")
	   oDB_OSERVICO_ITENS:aCols[01]:nBtnBmp 	:= 1        
	   oDB_OSERVICO_ITENS:aCols[01]:AddResource( "#8529" )
	   oDB_OSERVICO_ITENS:aCols[01]:nFootBmpNo 					:= 2 // Footer BMP
		oDB_OSERVICO_ITENS:aCols[01]:bLClickFooter   			:= { |r,c,f,o| SALVAR_CAMPOS_EXIBICAO_GRID('Grid_os_Veiculos.grd','Os_Veiculos') }
		*-------------------------------------------------------------------------	  
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || alltrim(os_itens->NOMPRO) +ALLTRIM(os_itens->DESCRICAO_SEM_CADASTRO) + CRLF + substr(LOWER(os_itens->OBS_ITEN),01,LEN(os_itens->NOMPRO))  }
		oCol:cHeader   								:= "Descrição" +CRLF + '*'
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:cToolTip      							:= {"Nome do Item","Ajuda","", } 
		oDB_OSERVICO_ITENS							:aCols[2]:cFooter := TRANSFORM(G_NUMERO_ITENS,"@E 9999") + ' Itens' 		
		oDB_OSERVICO_ITENS							:aCols[2]:nFootStrAlign := AL_LEFT  
		oCol:oFooterFont   							:= O_F_BRW    
		oDB_OSERVICO_ITENS							:aCols[02]:nWidth := 400
		oDB_OSERVICO_ITENS:aCols[02]:nEditType := EDIT_BUTTON
	   oDB_OSERVICO_ITENS:aCols[02]:bEditBlock:= {|nRow, nCol, oCol|  iif(os_itens->QTDE_ITEN!=0, DIGITA_OBSERVACAO_ITEM_PEDIDO_OS(os_itens->ID, os_itens->OBS_ITEN,'os_itens')	 , MsgStop('Escolha Um Item !',SISTEMA)  )  }
	   oDB_OSERVICO_ITENS:aCols[02]:addbmpfile( "#8640" )
	   oDB_OSERVICO_ITENS:aCols[02]:nBtnBmp 	:= 1
 		oDB_OSERVICO_ITENS:aCols[02]:lBtnTransparent	:= .T.
		oDB_OSERVICO_ITENS:aCols[02]:lBmpStretch		:= .F.
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || os_itens->UNDPRO  }
		oCol:cHeader   								:= "Und "
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:cToolTip      							:= {"Unidade de Medida do Item","Ajuda","", }	
		oCol:nWidth 									:= 20	
		oCol:oDataFont     							:= O_F_90_GRAUS	
		oCol:oHeaderFont    							:= O_F_90_GRAUS	
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || TRANSFORM(os_itens->QTDE_ITEN,"@ZE 99,999.999") }
		oCol:cHeader   								:= "Qtde"
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_RIGHT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oDB_OSERVICO_ITENS							:aCols[4]:cFooter := TRANSFORM(G_QTD_QUANTIDADE,"@ZE 99,999.999")  
		oDB_OSERVICO_ITENS							:aCols[4]:nFootStrAlign := AL_RIGHT  
		oCol:oFooterFont   							:= O_F_GET   
		oCol:cToolTip      							:= {"Quantidade do Item","Ajuda","", }
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || TRANSFORM(os_itens->VR_UNITARIO,"@ZE 99,999.999") }
		oCol:cHeader   								:= "Vr.Unit"
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_RIGHT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:cToolTip      							:= {"Valor Unitário do Item","Ajuda","", }
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || TRANSFORM(os_itens->DESCONTO_UNITARIO,"@ZE 9999.99") }
		oCol:cHeader   								:= "Desc."
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_RIGHT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:cToolTip      							:= {"Desconto Unitário","Ajuda","", }
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || TRANSFORM((os_itens->QTDE_ITEN*os_itens->VR_UNITARIO)-os_itens->DESCONTO_UNITARIO ,"@ZE 9999,999.999") }
		oCol:cHeader   								:= "TOTAL"
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_RIGHT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:cToolTip      							:= {"Valor TOTAL do Item","Ajuda","", }
		oDB_OSERVICO_ITENS							:aCols[07]:bClrStd := {|| {CLR_PRETO,CLR_LYELLOW} }
		oDB_OSERVICO_ITENS							:aCols[07]:cFooter := TRANSFORM(G_TOTAL_PEDIDO,"@ZE 9999,999.99")  
		oDB_OSERVICO_ITENS							:aCols[07]:nFootStrAlign := AL_RIGHT  
		oCol:oFooterFont   							:= O_F_GET     
		oCol:bClrFooter   							:={|| {CLR_VERMELHO,CLR_LYELLOW} }  
		oCol:oDataFont     							:= O_F_DLG2	
		*-------------------------------------------------------------------------
	  	oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || PADR(ALLTRIM(DTOC(os_itens->DATA_LANCAMENTO)),11) +CRTLF+ PADR(ALLTRIM(os_itens->HORA_LANCAMENTO),11)  }
		oCol:cHeader   								:= "Data"+CRTLF+'Hora'
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_RIGHT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:oDataFont     							:= O_F_MINI	
		oDB_OSERVICO_ITENS							:aCols[08]:cFooter := if(G_SERVICOS!=0,'Serv.','')+CRTLF+alltrim(TRANSFORM(G_SERVICOS,"@ZE 99,999.99"))
		oDB_OSERVICO_ITENS							:aCols[08]:nFootStrAlign := AL_RIGHT   
		oCol:nWidth 									:= 70	
		*-------------------------------------------------------------------------
	   oCol												:=oDB_OSERVICO_ITENS:AddCol()
		oCol												:AddResource("#8381")
	   oCol												:AddResource("#8382")
	   oCol:bBmpData  								:= { || IF(os_itens->PRODUTO_EXTERNO_INTERNO='I',1,2) }
	   oCol:cHeader   								:= "Proc"
	   oCol:cFooter   								:= ""      
		oCol:cToolTip      							:= {"Procedência "+CRTLF+"E=Externa I=Interna","Ajuda","", }              		
		oCol:nDataStrAlign 							:= AL_LEFT
	   oCol:nHeadStrAlign 							:= AL_LEFT
		oDB_OSERVICO_ITENS:nWidth        		:= 010
	   oCol:bLClickHeader 							:= {|r,c,f,o| (  LEGENDA_ORDEM_SERVICO()     )}
		*-------------------------------------------------------------------------	
	   oCol												:=oDB_OSERVICO_ITENS:AddCol()
	   oCol												:AddResource("#8261")  	&&& Impressora Transparente
		oCol												:AddResource("#8260")	&&& Impressora on-Azul	
		oCol												:AddResource("#8029")   &&& Serviços
	   oCol:bBmpData  								:= { || IIf(os_itens->PRODUTO_MATERIA_PRIMA='09',3, IIf(os_itens->SL2PRO <= os_itens->QTDE_ITEN,1 ,  2)) }
	   oCol:cHeader   								:= "SD"+CRLF +'(F)'
	   oCol:cFooter   								:= " "      
		oCol:nDataStrAlign 							:= AL_LEFT
	   oCol:nHeadStrAlign 							:= AL_LEFT
	   oCol:bLClickHeader 							:= {|r,c,f,o| (  LEGENDA_ORDEM_SERVICO()     )}
 		*-------------------------------------------------------------------------
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || os_itens->C_BARRAS  }
		oCol:cHeader   								:= "C.Barras"
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		oCol:cToolTip      							:= {"Código de Barras "+CRTLF+"Codigo de Fabricante","Ajuda","", }              		
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || alltrim(os_itens->OBS_01) + (os_itens->OBS_02)  }
		oCol:cHeader   								:= "Aplicação"
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || os_itens->OBS_ITEN   }
		oCol:cHeader   								:= 'Observação/Colocação'
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || str(os_itens->CODIGO_VENDEDOR,06,0)   }
		oCol:cHeader   								:= 'Mec'
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || (os_itens->BALNOM)   }
		oCol:cHeader   								:= 'Nome Mecanico'
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || (os_itens->SERVICO)   }
		oCol:cHeader   								:= 'Servico'
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT
		*-------------------------------------------------------------------------	
		oCol 												:= oDB_OSERVICO_ITENS:AddCol()
		oCol:bStrData  								:= { || STR(os_itens->CODIGO_USUARIO,06,0)   }
		oCol:cHeader   								:= 'Usuario'
		oCol:cFooter   								:= " "
		oCol:nDataStrAlign 							:= AL_LEFT
		oCol:nHeadStrAlign 							:= AL_LEFT                            
		*-------------------------------------------------------------------------
		oDB_OSERVICO_ITENS							:CreateFromResource(4046)

        oDB_OSERVICO_ITENS                            :aCols[07]:bClrStd := {|| {CLR_PRETO,CLR_LYELLOW} }
        oDB_OSERVICO_ITENS                            :aCols[07]:cFooter := TRANSFORM(G_TOTAL_PEDIDO,"@ZE 9999,999.99")  
        oDB_OSERVICO_ITENS                            :aCols[07]:nFootStrAlign := AL_RIGHT  

 


 

Link to comment
Share on other sites

  • 2 weeks later...

Esta correto acontecer esta bagunça, ao liberar a troca de colunas, etc..., deve-se prever no código...

Para cada dúvida, crie um novo tópico, é outro tipo de bagunça. Depois me envie o link para ajudar.

Sobre este tópico, usem arquivos INI (é muito fácil) e não arquivos MEM, além do risco de efeitos colaterais.

Contatos profissionais:
Site | Facebook | YouTube
Super Kit Harbour/Xailer, DBF, SQL

Em 13/04/2023 at 11:54, marcioe disse:

Se tenho uma Footer com total, ao mover não fica na posição correta,

Vejam a imagem

Normal, o total está na certinho no rodapé

11111111111111111111111111111111111111.j

Modificada, as posiçoes ficam "Zoneadas"

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...