×
Linguagem de Programação ADVPL
Perguntas Criação tela ADVPL
- michelp
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 115
- Obrigados Recebidos: 0
10 anos 9 meses atrás #20805
por michelp
Criação tela ADVPL foi criado por michelp
Bom dia,
Estava precisando criar uma tela como o exemplo da figura que estou anexando, de preferencia com legenda.
Alguém tem algum exemplo para me enviar
Att. Michel
Estava precisando criar uma tela como o exemplo da figura que estou anexando, de preferencia com legenda.
Alguém tem algum exemplo para me enviar
Att. Michel
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
10 anos 9 meses atrás #20806
por kanaamlrr
Respondido por kanaamlrr no tópico Criação tela ADVPL
Segue um exemplo de rotina.
Abraço!
Abraço!
#include 'Protheus.ch'
#include 'Topconn.ch'
#define ENTER chr(13)+chr(10)
/*
Funcao : ManuCCBalc
Objetivos : Manutenção/Histórico da conta corrente de pontos das balconistas
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*-------------------------------------------------*
User Function ManuCCBalc()
*-------------------------------------------------*
Local cOldArea := SELECT()
Private cTitulo := "Conta Corrente Balconistas"
Private aRotina := { { "Pesquisar" ,"AxPesqui" ,0,1},;
{ "Visualizar" ,"U_ManutSZ9" ,0,2},;
{ "Incluir" ,"U_ManutSZ9" ,0,3},;
{ "Alterar" ,"U_ManutSZ9" ,0,4},;
{ "Relatório" ,"U_RelCCBalc" ,0,6}}
//abre a tela de manutenção
MBrowse(,,,,"SZ3",,,,,,)
//volta pra area inicial
dbSelectArea(cOldArea)
//
Return
/*
Funcao : ManutSZ9
Objetivos : Manutenção/Histórico da conta corrente de pontos das balconistas
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*-------------------------------------------------*
User Function ManutSZ9(cAlias,nReg,nOpc)
*-------------------------------------------------*
Local oDlg
Local bOk := {|| lOk:=.T., oDlg:End()}
Local bCancel := {|| lOk:=.F., oDlg:End()}
Local aCpos := {"NOUSER" ,"Z3_CODIGO" ,"Z3_CPF",;
"Z3_NOME","Z3_SALDO"}
Local aPos := {}
Local aButtons := {}
Local i := 1
Private oEnc
Private oGetDB
Private nTotRegs := 0
Private lOk := .F.
Private lRefresh := .T.
Private lDeletou := .F.
Private cFile := ""
Private aTela := {}
Private aGets := {}
Private aHeader := {}
Private aCols := {}
If (SZ3->(RecCount())==0)
MsgStop("Cadastre um balconista para realizar as movimentações.")
Return
EndIF
SZ9->(dbSetOrder(1))
If nOpc == 3 .AND. SZ9->(dbSeek(xFilial("SZ9")+SZ3->Z3_CODIGO))
MsgStop("Balconista já possui movimentações"+ENTER+;
"Selecione a opção ALTERAR.")
Return
ElseIf nOpc == 4 .AND. !SZ9->(dbSeek(xFilial("SZ9")+SZ3->Z3_CODIGO))
MsgStop("Balconista não possui movimentações"+ENTER+;
"Selecione a opção INCLUIR.")
Return
EndIf
//Tenta criar work, caso não consiga retorna mensagem
If !CriaWork()
MsgStop("Impossível criar work."+ENTER+;
"Entre em contato com o setor de TI.")
Return
Else
preencheWk()
aAdd(aButtons,{"HISTORIC" ,{|| U_Recalc()} ,"Recalcula" ,"Recalcula" })
EndIf
//Cria variáveis de memória
For i := 1 To SZ3->(FCount())
M->&(SZ3->(FieldName(i))) := FieldGet(i)
Next i
//Tela de manutenção
oMainWnd:ReadClientCoors()
Define MsDialog oDlg Title cTitulo FROM 0, 0 To oMainWnd:nBottom, oMainWnd:nRight Of oMainWnd Pixel
*
//Capa com dados da balconista
aPos := PosDlgUp(oDlg)
aPos[3] -= 90 //BOTTOM
oEnc := MsMget():New(cAlias,nil,2,,,,aCpos,aPos,,,,,,,,,,,,,,,,,)
oDlg:lMaximized:=.T.
*
//Detalhe com o histórico de movimentações
aPos := PosDlgDown(oDlg)
aPos[1] -= 90 //TOP
aPos[3] -= 20 //BOTTOM
aPos[4] -= 10 //RIGHT
oGetDB := MsGetDb():New(aPos[1],aPos[2],aPos[3],aPos[4],nOpc,"U_ValCpo('LIN')",;
,,.T.,,,,,"WKMOVS","U_ValCpo('CPO')",,.T.,oDlg,.T.,,"U_ValCpo('DEL')",)
*
Activate MsDialog oDlg On Init (EnchoiceBar(oDlg,bOk,bCancel,,aButtons),oEnc:oBox:Align := CONTROL_ALIGN_TOP,)
//Somente executa função pra salvar se clicar no OK
If lOk
If MsgYesNo("Deseja gravar as alterações?")
Processa({|| gravaMovs()}, "Gravando registros","Gravando registros")
EndIf
EndIf
//Fecha a work
If Select("WKMOVS") > 0
WKMOVS->(dbCloseArea())
EndIf
//
Return
/*
Funcao : CriaWork
Objetivos : Cria Work
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*-------------------------------------------------*
Static Function CriaWork()
*-------------------------------------------------*
Local aSemSx3 := {}
SX3->(dbSetOrder(1))
SX3->(dbSeek("SZ9"))
While !SX3->(Eof()) .AND. SX3->X3_ARQUIVO == "SZ9"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
aAdd(aHeader, {Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
""})
aAdd(aSemSx3, {SX3->X3_CAMPO,;
SX3->X3_TIPO,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
SX3->(dbSkip())
EndDo
aAdd(aSemSx3,{"FLAG" ,"L",1 ,0})
aAdd(aSemSx3,{"R_E_C_N_O_","N",15,0})
cFile := CriaTrab(aSemSx3,.T.)
If !Used()
Return .F.
EndIf
USE &cFile ALIAS "WKMOVS" NEW
IndRegua("WKMOVS",cFile+OrdBagExt(),"Z9_DTOPER")
//
Return .T.
/*
Funcao : preencheWk
Objetivos : Preenche a Work com as movimentações relativas a balconista selecionada
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*-------------------------------------------------*
Static Function preencheWk()
*-------------------------------------------------*
Local cQuery := ""
cQuery += "SELECT * FROM "
cQuery += RetSqlName("SZ9")+" SZ9 "
cQuery += "WHERE " + RetSqlCond("SZ9")
cQuery += " AND Z9_CODBALC='"+SZ3->Z3_CODIGO+"' "
cQuery += "ORDER BY Z9_DTOPER"
GerTCQuery(cQuery,"Q_QRY",.T.)
//verifica se teve algum retorno
If Q_QRY->(EOF()) .AND. Q_QRY->(BOF())
Return .F.
EndIf
//Copia dados resultantes da query para a work do msselect
While Q_QRY->(!EOF())
WKMOVS->(dbAppend())
WKMOVS->Z9_DTOPER := STOD(Q_QRY->Z9_DTOPER)
WKMOVS->Z9_TIPOPER := Q_QRY->Z9_TIPOPER
WKMOVS->Z9_QTDEPRE := Q_QRY->Z9_QTDEPRE
WKMOVS->Z9_PONTOS := Q_QRY->Z9_PONTOS
WKMOVS->Z9_LOJA := Q_QRY->Z9_LOJA
WKMOVS->Z9_CODPREM := Q_QRY->Z9_CODPREM
WKMOVS->Z9_SALDO := Q_QRY->Z9_SALDO
WKMOVS->Z9_OBS := Q_QRY->Z9_OBS
WKMOVS->Z9_USERLOG := Q_QRY->Z9_USERLOG
WKMOVS->R_E_C_N_O_ := Q_QRY->R_E_C_N_O_
Q_QRY->(dbSkip())
EndDo
WKMOVS->(dbGoTop())
nTotRegs := WKMOVS->(RecCount())
Q_QRY->(dbCloseArea())
//
Return .T.
/*
Funcao : ValCpo
Objetivos : Realiza a validação dos campos do msgetdb
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*--------------------------*
User Function ValCpo(cOp)
*--------------------------*
Local nSaldo := 0
If cOp == "DEL" .OR. cOp == "CPO"
If WKMOVS->(RecNo()) <= nTotRegs .AND. ReadVar() != "M->Z9_OBS"
MsgAlert("O registro não pode ser alterado."+ENTER+;
"Inclua um novo registro para o caso de acerto de saldo.")
Return .F.
EndIf
If cOp == "DEL"
lDeletou := .T.
EndIf
EndIf
If cOP == "LIN" .AND. lDeletou
U_Recalc(cOp)
lDeletou := .F.
EndIf
If ReadVar() == "M->Z9_PONTOS"
If Empty(WKMOVS->Z9_TIPOPER)
MsgAlert("Preencha o campo Tip. Operac. primeiro!")
Return .F.
EndIf
If WKMOVS->Z9_TIPOPER == "S"
WKMOVS->(dbSkip(-1))
nSaldo := WKMOVS->Z9_SALDO
WKMOVS->(dbSkip())
If(M->Z9_PONTOS>nSaldo)
MsgAlert("Saldo insuficiente para essa operação.")
Return .F.
EndIf
EndIf
U_Recalc(cOp)
ElseIf ReadVar() == "M->Z9_TIPOPER"
If !M->Z9_TIPOPER $ "ES"
MsgAlert("Opção inválida."+ENTER+;
"Selecione Entrada ou Saída!")
Return .F.
EndIf
ElseIf ReadVar() == "M->Z9_CODPREM"
SZD->(dbSetOrder(1))
SZD->(dbSeek(xFilial("SZD")+M->Z9_CODPREM))
WKMOVS->(dbSkip(-1))
nSaldo := WKMOVS->Z9_SALDO
WKMOVS->(dbSkip())
If(SZD->ZD_PONTOS>nSaldo)
MsgAlert("Saldo insuficiente para essa operação.")
Return .F.
EndIf
RecLock("WKMOVS",.F.)
WKMOVS->Z9_PONTOS := SZD->ZD_PONTOS
WKMOVS->Z9_QTDEPRE := 1
WKMOVS->(MsUnlock())
U_Recalc("LIN")
ElseIf ReadVar() == "M->Z9_QTDEPRE"
If Empty(WKMOVS->Z9_TIPOPER) .OR. Empty(WKMOVS->Z9_CODPREM)
MsgAlert("Preencha o campo Tip. Operac. e Cod. Prêmio")
Return .F.
EndIf
If WKMOVS->Z9_TIPOPER == "E"
M->Z9_QTDEPRE := 0
Else
If M->Z9_QTDEPRE < 1
M->Z9_QTDEPRE := 1
EndIf
SZD->(dbSetOrder(1))
SZD->(dbSeek(xFilial("SZD")+WKMOVS->Z9_CODPREM))
WKMOVS->(dbSkip(-1))
nSaldo := WKMOVS->Z9_SALDO
WKMOVS->(dbSkip())
RecLock("WKMOVS",.F.)
WKMOVS->Z9_QTDEPRE := M->Z9_QTDEPRE
WKMOVS->(MsUnlock())
If(SZD->ZD_PONTOS*M->Z9_QTDEPRE>nSaldo)
MsgAlert("Saldo insuficiente para essa operação.")
Return .F.
EndIf
U_Recalc("LIN")
EndIf
EndIf
//
Return .T.
/*
Funcao : Recalc
Objetivos : Recalcula o saldo da balconista selecionada
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*--------------------------*
User Function Recalc(cOp)
*--------------------------*
Local nRegAtu := WKMOVS->(RecNo())
Local nTotal := 0
WKMOVS->(dbGoTo(1))
nTotal := If(!WKMOVS->Z9_TIPOPER $ "ES",WKMOVS->Z9_PONTOS,0)
While WKMOVS->(!Eof())
If WKMOVS->FLAG
WKMOVS->(dbSkip())
Loop
EndIf
If cOp == "LIN"
If WKMOVS->Z9_TIPOPER $ "E"
nTotal += WKMOVS->Z9_PONTOS
ElseIf WKMOVS->Z9_TIPOPER $ "S"
nTotal -= WKMOVS->Z9_PONTOS*WKMOVS->Z9_QTDEPRE
EndIf
ElseIf cOp == "CPO"
If WKMOVS->Z9_TIPOPER $ "E"
nTotal += If(WKMOVS->(RecNo())==nRegAtu,M->Z9_PONTOS,WKMOVS->Z9_PONTOS)
ElseIf WKMOVS->Z9_TIPOPER $ "S"
nTotal -= If(WKMOVS->(RecNo())==nRegAtu,M->Z9_PONTOS*WKMOVS->Z9_QTDEPRE,WKMOVS->Z9_PONTOS*WKMOVS->Z9_QTDEPRE)
EndIf
EndIf
RecLock("WKMOVS",.F.)
WKMOVS->Z9_SALDO := nTotal
WKMOVS->(MsUnlock())
WKMOVS->(dbSkip())
EndDo
M->Z3_SALDO := nTotal
oGetDB:ForceRefresh()
//
Return .T.
/*
Funcao : gravaMovs
Objetivos : Grava movimentações na tabela SZ9
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*-------------------------------------------------*
Static Function gravaMovs()
*-------------------------------------------------*
WKMOVS->(dbGoTop())
While WKMOVS->(!Eof())
If !WKMOVS->FLAG
If WKMOVS->(RecNo())<=nTotRegs
SZ9->(dbGoTo(WKMOVS->R_E_C_N_O_))
RecLock("SZ9",.F.)
Else
RecLock("SZ9",.T.)
EndIf
SZ9->Z9_DTOPER := WKMOVS->Z9_DTOPER
SZ9->Z9_TIPOPER := WKMOVS->Z9_TIPOPER
SZ9->Z9_CODBALC := SZ3->Z3_CODIGO
SZ9->Z9_LOJA := WKMOVS->Z9_LOJA
SZ9->Z9_PONTOS := WKMOVS->Z9_PONTOS
SZ9->Z9_CODPREM := WKMOVS->Z9_CODPREM
SZ9->Z9_QTDEPRE := WKMOVS->Z9_QTDEPRE
SZ9->Z9_SALDO := WKMOVS->Z9_SALDO
SZ9->Z9_OBS := WKMOVS->Z9_OBS
SZ9->Z9_USERLOG := WKMOVS->Z9_USERLOG
SZ9->(MsUnlock())
EndIf
WKMOVS->(dbSkip())
EndDo
WKMOVS->(dbSkip(-1))
RecLock("SZ3",.F.)
SZ3->Z3_SALDO := WKMOVS->Z9_SALDO
SZ3->(MsUnlock())
Return
/*
Funcao : GerTCQuery
Objetivos : Executa a query passada
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 28/05/2012
*/
*-------------------------------------------------*
Static Function GerTCQuery(cQuery,cAlias,lEraseLog)
*-------------------------------------------------*
Local nCod
Default lEraseLog := .T.
If lEraseLog
nCod := FCreate("cQuery.TXT")
Else
nCod := FOpen("cQuery.TXT",2)
EndIf
If nCod # -1
FWRITE(nCod,cQuery)
Fclose(nCod)
EndIf
cQuery := ChangeQuery(cQuery)
If Select(cAlias) # 0
(cAlias)->(dbCloseArea())
EndIf
TcQuery cQuery ALIAS (cAlias) NEW
If !USED()
Return .F.
EndIf
Return .T.
Por favor Acessar ou Registrar para participar da conversa.
Tempo para a criação da página:0.100 segundos