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() ReturnColaboraçã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/