Trabalhando com MsNewGetDados e criação de tabelas diretas no SX2,SX3,SIX e SXB


Olá a todos, recebemos uma contribuição do amigo Junior Plácido mostrando de uma forma simples e prática o uso do componente MsNewGetDados e a criação de campos diretos nas tabelas SX2,SX3,SIX e SXB O programa irá trazer os dados no GRID, assim como exibi-los, após o cadastro. Esta função já vem com a implementação do código de criação das tabelas e campos automáticos, desta forma é só executar a função e começar à inserir os dados. O programa consiste em uma simulação de locadora de veículos ou controle de veículos por motorista, onde você pode atribuir os veículos ao motorista, e assim, saber com quem está cada veículo, se está livre ou quando estará livre. Estão finalizadas a parte de cadastro de veículos e motoristas, desta forma, a ABA3(locação/empréstimos) está em andamento. Vamos ao fonte:

//Bibliotecas
#Include 'Protheus.ch'
#include "TOTVS.ch" 
#include "jpeg.ch" 


//Constantes usadas na criação dos campos
#Define _X3_USADO         "€€€€€€€€€€€€€€ "
#Define _X3_USFILIAL     "€€€€€€€€€€€€€€€"
#Define _X3_RESERV         "þA"
#Define _X3_OBRIGA         "€"
#Define _X3_NAO_OBRIGA     ""

//////////
/*
FONTE CRIADO POR ADEILTON PLACID DOS SANTOS JUNIOR
CIENTISTA DA COMPUTAÇÃO ESPECIALISTA EM BANCO DE DADOS, COM EXPERTISE
EM DESENVOLVIMENTO DE SOFTWARE, IMPLANTAÇÃO, MANUTENÇÃO E ADMINISTRAÇÃO DO PROTHEUS.
ADMINISTRADOR DE BANCO DE DADOS, COM EXPERTISE EM SQL SERVER
email: juniorplacidojp@gmail.com 
Tel: 73 981766403
*/
//////////


/*/{Protheus.doc} RESP01
Funcao Padrão que abre uma janela com 3 abas CADASTRO DE VEÍCULOS, MOTORISTAS E EMPRÉSITMO DE VEÍCULOS (não finalizada)
@type function
@author Adeilton Plácido dos Santos Júnior TEL (73) 981766403
@since 20/07/2018
@version 1.0
@return ${return}, ${return_description}
@example
(examples)
@see (links_or_references)
/*/USER Function RUTI02()
//VARIÁVEIS DE INTERFACE
Local oDlg
Local oCodigo   
Local oNome  
Local oPlaca   
Local oStatus

//BOTOES
Local oBtnConf   
Local oBtnCanc

//VARIAVEIS DO MSNEWGETDADOS PRINCIPAL, CADASTRO DE VEICULOS
Local aBotoes	:= {}         //Variável onde será incluido o botão para a legenda
Private oLista                    //Declarando o objeto do browser
Private aCabecalho  := {}         //Variavel que montará o aHeader do grid
Private aColsVeic 	:= {}         //Variável que receberá os dados

//Declarando os objetos de cores para usar na coluna de status do grid
Private oVerde  	:= LoadBitmap( GetResources(), "BR_VERDE")
Private oVermelho	:= LoadBitmap( GetResources(), "BR_VERMELHO")
//Private oAmarelo	:= LoadBitmap( GetResources(), "BR_AMARELO") 

/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
VARIAVEIS REFERENTES AOS VEÍCULOS ABA1 DIALOGS[1]
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
//TGETS CADASTRO DE VEICULOS
Private oGetCodigo  
Private cGetCodigo := Space(6)


Private oGetNome
Private cGetNome := Space(25)

Private oGetPlaca    
Private cGetPlaca := Space(8) 

Private aVeiculos := {}

//RADIOBUTTON CADASTRO DE VEICULOS
Private nRadio
Private oRadio  
/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
FIM VARIAVEIS MOTORISTAS
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/

//ABAS
Private oTFolder

/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
VARIAVEIS REFERENTES AOS MOTORISTAS  ABA2 DIALOGS[2]
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
Private aMotoristas   
Private oLMot                    //Declarando o objeto do browser
Private aCabecMot  := {}         //Variavel que montará o aHeader do grid
Private aColsMot 	:= {}   

Private cGCodDriv := Space(6)
Private cGNomDriv := Space(25)
Private cGCnh := Space(8) 
Private cGCateg := Space(2)

Private oGCodDriv  
Private oGNomDriv
Private oGCnh    
Private oGCateg
                 

Private nRdDriv
Private oRdDriv  

/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
FIM VARIAVEIS MOTORISTAS
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/


/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
VARIAVEIS REFERENTES AO EMPRESTIMO DE VEICULOS ABA3 DIALOGS[3]
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/
Private oGCodMot1
Private cGCodMot1 := Space(6)

Private oGNomMot
Private cGNomMot

Private oGCNHMot 
Private cGCNHMot

Private oGCatMod
Private cGCatMod
Private oFArial10Neg	:= TFont():New( "Arial",0,-13,,.T.,0,,700,.F.,.F.,,,,,, ) // FONTE UTILIZADA


Private aVeicRent
Private oLRent                    //Declarando o objeto do browser
Private aCabRent  := {}         //Variavel que montará o aHeader do grid
Private aColsRent 	:= {}   
/*
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
FIM VARIAVEIS AO EMPRESTIMO DE VEICULOS
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
*/

//Define cor para TSAY porém não funcionou na V12
#define CLR_BLUE        8388608               // RGB(   0,   0, 128 )


//Cria as tabelas utilizadas caso elas não existam no sistema, lembrando que, deve-se ter atençaõ às nomenclaturas SZ1, SZ2, caso no seu banco já
//contenha estas tabelas, trocar toda estrutura do fonte.
If !TCCanOpen("SZ1"+FWCodEmp("SZ1")+"0")
	FillSZ1()
	
endif

If !TCCanOpen("SZ2"+FWCodEmp("SZ1")+"0")
	FillSZ2()
endif



//ODLGPARA TELA   
     oDlg              := MsDialog():New()
     oDlg:cCaption := "..:: CADASTRO DE VEICULOS ::.."
     oDlg:nWidth    := 1300
     oDlg:nHeight   := 600
     oDlg:lCentered := .F.                                           
     // imprime uma imagem na janela
   	//  @ 001,001 Jpeg File "nfp.jpg"          Size 100,430 Pixel Of oDlg                      
  	
  	// Cria a Folder
  	aTFolder := { 'Veículos', 'Motoristas', 'Empréstimo' }
  	oTFolder := TFolder():New( 30,0,aTFolder,,oDlg,,,,.T.,,1200,500)	


/*
TELA DE CADASTRO DE VEICULOS
*/       
     //CÓDIGO
     oCodigo            := TSay():New(,,,oTFolder:aDialogs[1])
     oCodigo:cCaption := "Codigo"
     oCodigo:nLeft      := 015
     oCodigo:nTop       := 20
     oCodigo:nWidth   := 100
     oCodigo:nHeight := 020    
              
     oGetCodigo           := TGet():New(,,,oTFolder:aDialogs[1])
     oGetCodigo:nLeft     := 015
     oGetCodigo:nTop      := 34
     oGetCodigo:nWidth    := 096
     oGetCodigo:nHeight   := 020
     oGetCodigo:cReadVar := "cGetCodigo"
     oGetCodigo:bSetGet   := {|u| if( PCount() > 0, cGetCodigo := u, cGetCodigo ) }               
    
     //NOME
     oNome            := TSay():New(,,,oTFolder:aDialogs[1])
     oNome:cCaption := "Descricao"
     oNome:nLeft       := 130
     oNome:nTop       := 20
     oNome:nWidth   := 100
     oNome:nHeight := 020    
              
     oGetNome           := TGet():New(,,,oTFolder:aDialogs[1])
     oGetNome:nLeft     := 130
     oGetNome:nTop      := 35
     oGetNome:nWidth    := 200
     oGetNome:nHeight   := 020
     oGetNome:cReadVar := "cGetNome"
     oGetNome:bSetGet   := {|u| if( PCount() > 0, cGetNome := u, cGetNome ) }      
      
     //PLACA
     oPlaca            := TSay():New(,,,oTFolder:aDialogs[1])
     oPlaca:cCaption := "Placa"
     oPlaca:nLeft       := 350
     oPlaca:nTop       := 20
     oPlaca:nWidth   := 100
     oPlaca:nHeight := 020    
              
     oGetPlaca           := TGet():New(,,,oTFolder:aDialogs[1])
     oGetPlaca:nLeft     := 350
     oGetPlaca:nTop      := 35
     oGetPlaca:nWidth    := 100
     oGetPlaca:nHeight   := 020
     oGetPlaca:cReadVar := "cGetPlaca"
     oGetPlaca:bSetGet   := {|u| if( PCount() > 0, cGetPlaca := u, cGetPlaca ) }      
          
     //STATUS
     oStatus            := TSay():New(,,,oTFolder:aDialogs[1])
     oStatus:cCaption := "Status"
     oStatus:nLeft       := 500
     oStatus:nTop       := 20
     oStatus:nWidth   := 100
     oStatus:nHeight := 020    

    
	nRadio := 1
	aItens := {'Ativo','Inativo'}
	oRadio 				:= TRadMenu():New(,,,,oTFolder:aDialogs[1])
	oRadio:aItems		:=  aItens
	oRadio:nLeft		:= 500
	oRadio:nTop			:= 35
	oRadio:nWidth    	:= 100
    oRadio:nHeight   	:= 020
	oRadio:bSetGet		:= {|u|Iif (PCount()==0,nRadio,nRadio:=u)}


       //chamar a função que cria a estrutura do aHeader
        CriaCabec()

        //Monta o browser com inclusão, remoção e atualização
		oLista := MsNewGetDados():New(50,005,280,300, /*5*/,/*6*/,/*7*/,/*8*/,/*9*/,1, 999, /*12*/, /*13*/, /*14*/, oTFolder:aDialogs[1], aCabecalho, aColsVeic,{|| FullField()},)

        //Carregar os itens que irão compor o conteudo do grid
        Carregar()

        //Alinho o grid para ocupar todo o meu formulário
        oLista:oBrowse:Align := CONTROL_ALIGN_NONE 

        //Ao abrir a janela o cursor está posicionado no meu objeto
        oLista:oBrowse:SetFocus()

        //Crio o menu que irá aparece no botão Ações relacionadas
        aadd(aBotoes,{"NG_ICO_LEGENDA", {||Legenda()},"Legenda","Legenda"})
	
        EnchoiceBar(oDlg, {|| oDlg:End() }, {|| oDlg:End() },,aBotoes)   
 
 	//Botão de confirmar, que chama a função de salvar os dados na tabela 
     oBtnConf          := TButton():New(,,,oTFolder:aDialogs[1])
     oBtnConf:cCaption := "Confirmar"
     oBtnConf:nLeft    := 620
     oBtnConf:nTop     := 100
     oBtnConf:nWidth   := 060
     oBtnConf:nHeight := 025
     oBtnConf:bAction := {|| fGravar(cGetCodigo, cGetNome, cGetPlaca,nRadio),Carregar(),oLista:ForceRefresh(),CargRent()}//,oLista:Refresh() } 

     oBtnConf          := TButton():New(,,,oTFolder:aDialogs[1])
     oBtnConf:cCaption := "Excluir"
     oBtnConf:nLeft    := 620
     oBtnConf:nTop     := 130
     oBtnConf:nWidth   := 060
     oBtnConf:nHeight := 025
     oBtnConf:bAction := {|| MsgInfo("EXCLUIR REGISTRO")}//,oLista:Refresh() }

	//Chama composição da tela de Motoristas, ABA2 DIALOGS[2]	
	 fDriver()
	 
	//Chama composição da tela de Emprestimo de carros, ABA3 DIALOGS[3]	 
	 fRentVei()
	 
     oDlg:Activate()          
     
Return
    Colaboração de:
Adeilton Placid dos Santos Junior Cientista da computação especialista em banco de dados, com expertise em desenvolvimento de software, implantação, manutenção e administração do Protheus. administrador de banco de dados, com expertise em sql server https://www.facebook.com/juniorplacidojp https://www.instagram.com/juniorplacido https://www.linkedin.com/in/juniorplacido/