FWMBrowse x Tabela Temporária x SX5
Aqui desenharemos a tela que será exibida na inclusão, alteração, visualização e exclusão. Existem outras formas de criar a janela, mas optamos por essa para poder mostrar mais comandos ADVPL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
User Function AGPE001A(nOpc) Local cTabela := SPACE(TAMSX3("X5_TABELA")[1]) Local cChave := SPACE(TAMSX3("X5_CHAVE")[1]) Local cDescri := SPACE(TAMSX3("X5_DESCRI")[1]) Local cLocal := SPACE(3) Local cLocalN := SPACE(TAMSX3("X5_DESCENG")[1]) Local oChave Local oDescri Local oLocal Local oLocalN Local cTitulo := iif(nOpc==3,'Incluir',iif(nOpc==4,'Alterar','Excluir')) Local bOk := {|| oDlg:End(), iif(nOpc==2,Nil,fGrava(M->cTabela,M->cChave,M->cDescri,M->cLocal,M->cLocalN,nOpc)) } Local bCancela:= {|| oDlg:End() } Local aButtons:= {} Local oPainel Local oLayer Local oTela1 Static oDlg dbSelectArea("SX5") SX5->(dbSetOrder(1)) if nOpc==3 //incluir cTabela := "ZL" cChave := Ultimo() cDescri := SPACE(TAMSX3("X5_DESCRI")[1]) cLocal := SPACE(3) cLocalN := SPACE(TAMSX3("X5_DESCENG")[1]) Else SX5->(dbGoTop()) If SX5->(dbSeek(xFilial("SX5")+TRB->(X5_TABELA+X5_CHAVE))) cTabela := TRB->X5_TABELA cChave := Alltrim(TRB->X5_CHAVE) cDescri := TRB->X5_DESCRI cLocal := Substr(TRB->X5_DESCSPA,1,3) cLocalN := TRB->X5_DESCENG Else Alert("Registro não existe mais!!!!") Return .f. EndIf Endif DEFINE MSDIALOG oDlg TITLE cTitulo FROM 000, 000 TO 330, 600 COLORS CLR_BLACK, CLR_WHITE PIXEL oPainel:= tPanel():New(0,0,,oDlg,,,,,CLR_WHITE,100,030) oPainel:Align := CONTROL_ALIGN_ALLCLIENT oLayer := FWLayer():New() oLayer:Init( oPainel, .F. ) oLayer:AddLine( "LINE01", 95, .T. ) oLayer:AddCollumn("BOX" ,100,,"LINE01" ) oLayer:AddWindow( "BOX" , "PANEL01","Informe o nome do gestor",80, .F.,.F.,,"LINE01" ) oTela1 := oLayer:GetWinPanel("BOX" ,"PANEL01","LINE01") oTabela:= tGet():New(005,005,{|u| if(PCount()>0,cTabela:=u,cTabela)}, oTela1 ,030,15,PESQPICT("SX3","X5_TABELA") ,{ || },CLR_BLACK,CLR_WHITE,,,,.T.,,, {|| .F. } ,,,,.F.,,"",'cTabela',,,,.T.,,,"Tabela: ",1 ) oChave := tGet():New(005,040,{|u| if(PCount()>0,cChave :=u,cChave )}, oTela1 ,030,15,PESQPICT("SX3","X5_CHAVE") ,{ || ExistChav("SX5", "ZL"+M->cChave ,1)},CLR_BLACK,CLR_WHITE,,,,.T.,,, {|| .F. } ,,,,.F.,,"",'cChave',,,,.T.,,,"Codigo: ",1 ) oDescri:= tGet():New(035,005,{|u| if(PCount()>0,cDescri:=u,cDescri)}, oTela1 ,285,20,PESQPICT("SX3","X5_DESCRI") ,{ || },CLR_RED,CLR_WHITE,,,,.T.,,, {||IIF(nOpc==3.OR.nOpc==4,.T.,.F.) } ,,,,.F.,,"",'cDescri',,,,.T.,,,"Nome do Gestor: *",1 ) oLocal := tGet():New(070,005,{|u| if(PCount()>0,cLocal:=u,cLocal)} , oTela1 ,060,20,PESQPICT("SX3","X5_DESCSPA"),{ || cLocalN := POSICIONE("SYA",1,XFILIAL("SYA")+cLocal,"YA_DESCR"), oLocalN:Refresh() },CLR_BLACK,CLR_WHITE,,,,.T.,,, {||IIF(nOpc==3.OR.nOpc==4,.T.,.F.) } ,,,,.F.,,"SYA",'cLocal',,,,.T.,,,"Localidade: ",1 ) oLocalN:= tGet():New(070,070,{|u| if(PCount()>0,cLocalN:=u,cLocalN)}, oTela1 ,220,20,PESQPICT("SX3","X5_DESCENG"),{ || },CLR_BLACK,CLR_WHITE,,,,.T.,,, {|| .F. } ,,,,.F.,,"",'cLocalN',,,,.T.,,,"Desc.Local: ",1 ) ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,bOk,bCancela,,aButtons) CENTERED Return |
A função abaixo, usamos para gravar na tabela SX5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
Static Function fGrava(_cTabela,_cChave,_cDescri,_cLocal,_cLocalN,nOpc) Local lGrava := .F. Local cMsg := "" If Empty(_cChave) .OR. Empty(_cDescri) //.OR. Empty(_cLocal) MsgStop("Campos obrigatorio em branco!") Return Endif dbSelectArea("SX5") SX5->(dbSetOrder(1)) SX5->(dbGoTop()) if nOpc==3 .OR. nOpc==4 if nOpc==4 .AND. ExisteGestor(_cChave) if !MsgNoYes("O código do gesto já está em uso, tem certeza que deseja alterar o nome do Gestor?") Return() Endif Endif lGrava := !dbSeek(xFilial("SX5")+_cTabela+_cChave) RecLock("SX5",lGrava) SX5->X5_FILIAL := xFilial("SX5") SX5->X5_TABELA := _cTabela SX5->X5_CHAVE := _cChave SX5->X5_DESCRI := _cDescri SX5->X5_DESCSPA:= _cLocal SX5->X5_DESCENG:= _cLocalN SX5->(MsUnlock()) cMsg := "Registro salvo com sucesso!" Else IF ExisteGestor(_cChave) cMsg := "Problema: Não é possível excluir o gestor." + CRLF + CRLF +; "Motivo: O gesto " + _cChave + " está em uso." + CRLF + CRLF +; "Solução: Entre no cadastro de funcionários e filtre pelo campo 'Cod.Gestor' pesquisando com o código " + _cChave else If dbSeek(xFilial("SX5")+_cTabela+_cChave) Reclock("SX5",.F.) SX5->(dbDelete()) SX5->(MsUnlock()) cMsg := "Registro removido com sucesso!" ENDIF EndIf Endif MsgInfo(cMsg,"Aviso") AGPE001TRB() oBrowse:Refresh(.T.) Return |
Criamos uma função via SQL para buscar o último código
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Static Function Ultimo() Local cUltimo:= "000001" Local cTmpSX5 := GetNextAlias() IF SELECT(cTmpSX5) # 0 (cTmpSX5)->(dbCloseArea()) ENDIF BeginSql Alias cTmpSX5 SELECT MAX(X5_CHAVE) ULTIMO FROM %Table:SX5% SX5 WHERE SX5.D_E_L_E_T_ = ' ' AND X5_FILIAL = %xFilial:SX5% AND X5_TABELA = %Exp:"ZL"% EndSql dbSelectArea(cTmpSX5) If !(cTmpSX5)->(Eof()) cUltimo := SOMA1((cTmpSX5)->ULTIMO) EndIf Return cUltimo |
continua página 3