Nesse vídeo demonstraremos a utilização da classe TNewProcess, que serve para abrir uma tela de processamento, inclusive com previsão de tempo de término.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
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 60 61 62 63 64 65 66 67 68 69 70 71 72 | //Bibliotecas #Include "TOTVS.ch" #Include "TopConn.ch" /*/{Protheus.doc} User Function zExe501 Monta uma tela de processamento com previsão de tempo e parametrizações na esquerda @type Function @author Atilio @since 27/03/2023 @see https://tdn.totvs.com/display/public/framework/tNewProcess @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe501() Local aArea := FWGetArea() Local bBlocoExec := {|oSelf| fExemplo(oSelf)} //Cria a tela de processamento TNewProcess():New( "zExe501" , "Teste de TNewProcess" , bBlocoExec, "Descrição teste" , /*cPerg*/ , /*aInfoCustom*/ , /*lPanelAux*/ , /*nSizePanelAux*/ , /*cDescriAux*/ ,.T.) FWRestArea(aArea) Return Static Function fExemplo(oSelf) Local aArea := FWGetArea() Local nAtual := 0 Local nTotal := 0 Local cQryAux := "" Local nAtu2 := 0 Local nTot2 := 90 //Executa a consulta cQryAux := " SELECT " + CRLF cQryAux += " BM_GRUPO, " + CRLF cQryAux += " BM_DESC " + CRLF cQryAux += " FROM " + CRLF cQryAux += " " + RetSQLName( "SBM" ) + " SBM " + CRLF cQryAux += " WHERE " + CRLF cQryAux += " BM_FILIAL = '" + FWxFilial('SBM ') + "' " + CRLF cQryAux += " AND SBM.D_E_L_E_T_ = ' ' " + CRLF TCQuery cQryAux New Alias "QRY_AUX" //Conta quantos registros existem, e seta no tamanho da regua Count To nTotal oSelf:SetRegua1(nTotal) //Percorre todos os registros da query QRY_AUX->(DbGoTop()) oSelf:SaveLog( "Iniciando" ) While ! QRY_AUX->(EoF()) //Incrementa a mensagem na regua nAtual++ cMensagem := "Analisando registro " + cValToChar(nAtual) + " de " + cValToChar(nTotal) + "..." oSelf:IncRegua1(cMensagem) oSelf:SaveLog(cMensagem) //Incrementando a regua 2 oSelf:SetRegua2(nTot2) For nAtu2 := 1 To nTot2 oSelf:IncRegua2( "Posicao " + cValToChar(nAtu2) + " de " + cValToChar(nTot2) + "..." ) Sleep(100) Next QRY_AUX->(DbSkip()) EndDo QRY_AUX->(DbCloseArea()) FWRestArea(aArea) Return |
Bom pessoal, por hoje é só.
Abraços e até próxima.