Pular para o conteúdo principal

Barras de progresso


Segue um exemplo de como fazer barra de progresso, para ilustrar processos mais longos. Para isto, use  as funções Processa, Procregua e Incproc. O exemplo abaixo, funciona. É só testar:

# include "rwmake.ch"

user function fFuncao1()
   cRBSFQSQL := changequery("SELECT COUNT(A1_COD) AS NREGISTRO FROM SA1010 WHERE A1_NOME LIKE 'A%'")
   dbusearea(.t., 'TOPCONN', tcgenqry(,,cRBSFQSQL), 'TMPSA1', .f., .t.)
   if .not. TMPSA1->(eof())
      processa( {|| u_fFuncao2( TMPSA1->NREGISTRO ) }, "Titulo", "Processando aguarde...", .f.)
   endif
   dbclosearea("TMPSA1")
return nil


user function fFuncao2(nRegistros)
   local cRegistros := ""
   procregua(nRegistros)

   cRBSFQSQL := changequery("SELECT A1_COD, A1_NOME FROM SA1010 WHERE A1_NOME LIKE 'A%'")
   dbusearea(.t., 'TOPCONN', tcgenqry(,,cRBSFQSQL), 'TMPSA2', .f., .t.)

   if .not. TMPSA2->(eof())
      do while .not. TMPSA2->(eof())
         cRegistros := cRegistros + TMPSA2->A1_COD + " | " + alltrim(TMPSA2->A1_NOME) + chr(10)
         incproc("Concatenando...")
         TMPSA2->(dbskip())
      enddo

      @ 0, 0 to 300, 550 dialog oDial title "RESULTADO"
      oRBSFMemo := tMultiget():new(5,5,{|u|if(pcount()>0,cRegistros:=u,cRegistros)},oDial,260,100,,,,,,.t.,,,,,,.t.)
      @ 110, 240 bmpbutton type 1 action close(oDial)
      activate dialog oDial centered
   endif

   dbclosearea("TMPSA2")
return nil


• Veja também: Lendo arquivos XML





Comentários

Postagens mais visitadas deste blog

Status das tabelas: SPED050 e SPED052

STATUS DA TABELA SPED050: Status NFe (campo STATUS) :  1 = NFe Recebida.  2  =  NFe Assinada.  3  =  NFe com falha no schema XML.  4  =  NFe transmitida.  5  =  NFe com problemas.  6  =  NFe autorizada.  7  =  Cancelamento. Status Cancelamento/inutilização (campo STATUSCANC) :  1  =  NFe Recebida.  2  =  NFe Cancelada.  3  =  NFe com falha de cancelamento/inutilização. Status Mail (campo STATUSMAIL) :  1  =  A transmitir.  2  =  Transmitido.  3  =  Bloqueio de transmissão – cancelamento/inutilização. STATUS DO SPED052:  1  =  Lote transmitido.  2  =  Lote recebido com sucesso.  3  =  Lote com erro.

Protheus integrado ao Active Directory (Single SignOn)

Usando a integração do usuário do Protheus com o Active Directory (AD): 1) O ambiente deve estar atualizado (RPO, Update, LIB e Binário). 2) Entre no Configurador / Usuários / Senhas / Política. 3) Na primeira aba, em Parâmetros, defina no como "Habilitar single sign-on" se a integração será obrigatória ou opcional. 4) No combo "Modalidade de Single Sign-on", defina como "Active Directory". Clique em Confirmar. 5) Agora vá ao cadastro do usuário (Usuário / Senhas / Usuários), clique sobre o usuário e clique em Alterar. Na primeira aba (Usuário), selecione a aba Active Directory. 6) Clique duas vezes sobre o campo abaixo de "Domínio", e preencha o domínio da rede.  Clique duas vezes sobre o campo abaixo de "Usuário", e preencha o nome de usuário da rede que ficará vinculado a este usuário do Protheus. Clique em Confirmar. Ao entrar no Protheus, já irá aparecer por padrão o dom...

Impressão com imagens no Protheus

Muitas vezes é necessário incluir uma imagem num relatório (uma logomarca por exemplo). Uma das maneiras de se fazer isto, é usar a classe TMSPRINTER() . O programa exemplo abaixo, ilustra bem como fazer. Este usa também a classe TFONT() (o tamanho do fonte leva o sinal de menos) : # include "PROTHEUS.CH" # include "RWMAKE.CH" user function fImprimeG() local oFont08 := tfont():New( 'Courier new' ,, -8, .t.),,; oFont09 := tfont():New( 'Courier new' ,, -9, .t.),,; oFont10 := tfont():New( 'Courier new' ,,-10, .t.) oPrint:=tmsprinter():new( "Impressao Grafica" ) oPrint:setportrait() oPrint:SetpaperSize(9) // PAPEL A4 if .not. oPrint:Setup() // MOSTRA JANELA DE CONFIGURAÇÃO DE IMPRESSAO msgalert( "IMPRESSAO CANCELADA." ) return nil endif // ESTE BLOCO PODE FICAR EM LOOP (DO WHILE, FOR..., ETC.) oPrint:StartPage() // oPrint:sayBitmap(linha, coluna, "C:\SUAPASTA\SUAIMAGEM.BMP", largura, al...