P. 1
ADVPL_Completo

ADVPL_Completo

|Views: 2.724|Likes:
Publicado porChileno Mexicano

More info:

Published by: Chileno Mexicano on Nov 30, 2011
Direitos Autorais:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

06/15/2013

pdf

text

original

Sections

  • MÓDULO 01: Introdução à programação
  • 1. Lógica de Programação e Algoritmos
  • 1.1. Lógica de Programação
  • 1.2. Desenvolvendo algoritmos
  • 1.2.1. Estudando algoritmos
  • 1.2.2. Teste de mesa
  • 2. Estruturas de programação
  • 2.1. Diagrama de bloco
  • 2.2. Estruturas de decisão e repetição
  • 2.2.1. Estruturas de decisão
  • 2.2.2. Estruturas de repetição
  • MÓDULO 02: A linguagem ADVPL
  • 3. Estrutura de um Programa ADVPL
  • 3.1. Áreas de um Programa ADVPL
  • 4. Declaração e Atribuição de Variáveis
  • 4.1. Tipo de Dados
  • 4.2. Declaração de variáveis
  • 4.3. Escopo de variáveis
  • 4.4. Entendendo a influência do escopo das variáveis
  • 4.5. Operações com Variáveis
  • 4.5.1. Atribuição de variáveis
  • 4.5.2. Operadores da linguagem ADVPL
  • 4.5.3. Operação de Macro Substituição
  • 4.5.4. Funções de manipulação de variáveis
  • 5. Estruturas básicas de programação
  • 5.1. Estruturas de repetição
  • 5.1.1. Influenciando o fluxo de repetição
  • 5.2. Estruturas de decisão
  • 6. Arrays e Blocos de Código
  • 6.1. Arrays
  • 6.1.1. Inicializando arrays
  • 6.1.2. Funções de manipulação de arrays
  • 6.1.3. Cópia de arrays
  • 6.2. Listas de Expressões e Blocos de Código
  • 6.2.1. Premissas para utilização de Blocos de Código
  • 6.2.2. Lista de expressões
  • 6.2.3. Blocos de Código
  • 6.2.4. Funções para manipulação de blocos de código
  • 7. Funções
  • 7.1. Tipos e escopos de funções
  • 7.2. Passagem de parâmetros entre funções
  • 8. Diretivas de compilação
  • MÓDULO 03: Desenvolvendo pequenas customizações
  • 9. ADVPL e o ERP Microsiga Protheus
  • 9.1. O Ambiente Protheus
  • 9.2. Organização e configuração inicial do ambiente Protheus
  • 9.3. O Configurador do Protheus
  • 9.3.1. Funcionalidades Abordadas
  • 9.3.2. Estruturas básicas da aplicação ERP Protheus
  • 9.3.3. Acessando o módulo Configurador
  • 9.4. Funcionalidades do Configurador
  • 9.4.1. Dicionário de Dados da aplicação ERP
  • 9.4.2. Adição de tabelas ao Dicionário de Dados
  • 9.4.3. Adição de campos as tabelas do Dicionário de Dados
  • 9.4.4. Adição de índices para as tabelas do Dicionário de Dados
  • 9.4.5. Adição de gatilhos para os campos das tabelas do sistema
  • 9.4.6. Criação de Tabelas Genéricas
  • 9.4.7. Criação de Parâmetros
  • 10. TOTVS Development Studio
  • Desenvolvimento de pequenas customizações
  • 11. Acesso e manipulação de bases de dados em ADVPL
  • 11.1. Diferenças e compatibilizações entre bases de dados
  • 11.2. Funções de acesso e manipulação de dados
  • 11.3. Diferenciação entre variáveis e nomes de campos
  • 11.4. Controle de numeração seqüencial
  • 12. Customizações para a aplicação ERP
  • 12.1. Customização de campos – Dicionário de Dados
  • 12.1.1. Validações de campos e perguntas
  • 12.1.2. Pictures de formação disponíveis
  • 12.2. Customização de gatilhos – Configurador
  • 12.3. Customização de parâmetros – Configurador
  • 12.3.1. Funções para manipulação de parâmetros
  • 12.3.2. Cuidados na utilização de um parâmetro
  • 12.4. Pontos de Entrada – Conceitos, Premissas e Regras
  • 13. Interfaces visuais
  • 13.1. Sintaxe e componentes das interfaces visuais
  • 13.2. Interfaces padrões para atualizações de dados
  • 13.2.1. AxCadastro()
  • 13.2.3. AxFunctions()
  • APÊNDICES
  • BOAS PRÁTICAS DE PROGRAMAÇÃO
  • 14. Utilização de Identação
  • 15. Capitulação de Palavras-Chave
  • 15.1. Palavras em maiúsculo
  • 16. Utilização da Notação Húngara
  • 17. Palavras reservadas
  • LISTAS DE EXERCÍCIOS
  • Módulo 01: Introdução à programação
  • Módulo 02: A linguagem ADVPL
  • Módulo 03: Desenvolvendo pequenas customizações
  • MÓDULO 04: Desenvolvendo aplicações em ADVPL
  • 18. A linguagem ADVPL
  • 19. Estrutura de um Programa ADVPL
  • 19.1. Áreas de um Programa ADVPL
  • 20. Declaração e Atribuição de Variáveis
  • 20.1. Tipo de Dados
  • 20.2. Declaração de variáveis
  • 20.3. Escopo de variáveis
  • 20.4. Entendendo a influência do escopo das variáveis
  • 21. Regras adicionais da linguagem ADVPL
  • 21.1. Palavras reservadas
  • 21.2. Pictures de formatação disponíveis
  • 22. Programas de Atualização
  • 22.1. Modelo1() ou AxCadastro()
  • 22.2. Modelo2()
  • 22.2.1. Componentes de uma tela no formato Modelo 2
  • 22.2.2. Estrutura de um programa utilizando a Modelo2()
  • 22.2.3. Função Modelo2()
  • 22.3. Modelo3()
  • 22.3.1. Estrutura de um programa utilizando a Modelo3()
  • 22.3.2. Função Modelo3()
  • 22.4. Mbrowse()
  • 22.4.1. AxFunctions()
  • 22.4.2. FilBrowse()
  • 22.4.3. EndFilBrw()
  • 22.4.4. PesqBrw()
  • 22.4.5. BrwLegenda ()
  • 22.5. MarkBrowse()
  • 23. Arquivos e Índices Temporários
  • 23.1. Utilização de arquivos e índices temporários
  • 23.2. Funções para manipulação de arquivos e índices temporários
  • 23.2.1. CriaTrab()
  • 23.2.2. dbUseArea()
  • 23.2.3. IndRegua()
  • 24. Relatórios não gráficos
  • 24.1.1. Estrutura de relatórios baseados na SetPrint()
  • 25. Manipulação de arquivos I
  • 25.1. Geração e leitura de arquivos em formato texto
  • 1ª. Família de funções de gravação e leitura de arquivos texto
  • 2ª. Família de funções de gravação e leitura de arquivos texto
  • 26. Oficina de programação I
  • 26.1. Interfaces com sintaxe clássica
  • 26.2. Réguas de processamento
  • 26.2.1. RptStatus()
  • SETREGUA()
  • INCREGUA()
  • 26.2.2. Processa()
  • SETPROC()
  • INCPROC()
  • 26.2.3. MsNewProcess()
  • 26.2.4. MsAguarde()
  • 26.2.5. MsgRun()
  • 26.3. ListBox()
  • 26.3.1. ListBox simples
  • 26.3.2. ListBox múltiplas colunas
  • 26.4. ScrollBox()
  • 26.5. ParamBox()
  • MÓDULO 05: Introdução a orientação à objetos
  • 27. Conceitos de orientação à objetos
  • 27.1. Definições
  • 27.2. Conceitos Básicos
  • 27.3. O Modelo de Objetos (OMT)
  • 27.3.1. Objetos e Classes
  • 27.3.2. Atributos
  • 27.3.3. Operações e Métodos
  • 27.3.4. Sugestões de desenvolvimento
  • 28. Orientação a objetos em ADVPL
  • 28.1. Sintaxe e operadores para orientação a objetos
  • 28.2. Estrutura de uma classe de objetos em ADVPL
  • 28.3. Implementação dos métodos de uma classe em ADVPL
  • MÓDULO 06: ADVPL Orientado à objetos I
  • 29. Componentes da interface visual do ADVPL
  • 29.1. Particularidades dos componentes visuais
  • 29.1.1. Configurando as cores para os componentes
  • 30. Aplicações com a interface visual do ADVPL
  • 30.1. Captura de informações simples (Multi-Gets)
  • 30.1.1. Enchoice()
  • 30.1.2. MsMGet()
  • 30.2. Captura de múltiplas informações (Multi-Lines)
  • 30.2.1. MsGetDB()
  • 30.2.2. MsGetDados()
  • 30.2.3. MsNewGetDados()
  • 30.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados()
  • 30.3. Barras de botões
  • 30.3.1. EnchoiceBar()
  • 30.3.2. TBar()
  • 30.3.3. ButtonBar
  • 30.3.4. Imagens pré-definidas para as barras de botões
  • 31. Arredondamento
  • 32. Utilização de Identação
  • 33. Capitulação de Palavras-Chave
  • 33.1. Palavras em maiúsculo
  • 34. Utilização da Notação Húngara
  • 35. Técnicas de programação eficiente
  • Módulo 04.1.: Desenvolvendo aplicações em ADVPL
  • Módulo 04.2.: Oficina de Programação I
  • Módulo 05: Introdução a orientação à objetos
  • Módulo 06: ADVPL orientado à objetos I
  • Projeto: Avaliação prática do treinamento de ADVPL Intermediário
  • MÓDULO 07: ADVPL Orientado à objetos II
  • 36. Componentes da interface visual do ADVPL
  • TSRVOBJECT()
  • TFONT()
  • MSDIALOG()
  • TDIALOG()
  • TWINDOW()
  • TCONTROL()
  • BRGETDDB()
  • MSCALEND()
  • MSCALENDGRID()
  • MSSELBR()
  • MSWORKTIME()
  • SBUTTON()
  • TBAR()
  • TBITMAP()
  • TBROWSEBUTTON()
  • TBTNBMP()
  • TBTNBMP2()
  • TBUTTON()
  • TCBROWSE()
  • TCHECKBOX()
  • TCOLORTRIANGLE()
  • TCOMBOBOX()
  • TFOLDER()
  • TGET()
  • TGROUP()
  • THBUTTON()
  • TIBROWSER()
  • TLISTBOX()
  • TMENU()
  • TMENUBAR()
  • TMETER()
  • TMSGRAPHIC()
  • TMSGBAR()
  • TMSGITEM()
  • TMULTIBTN()
  • TMULTIGET()
  • TOLECONTAINER()
  • TPAGEVIEW()
  • TPANEL()
  • TRADMENU()
  • TSBROWSE()
  • TSAY()
  • TSCROLLBOX()
  • TSIMPLEEDITOR()
  • TSLIDER()
  • TSPLITTER()
  • TTABS()
  • TTOOLBOX()
  • TWBROWSE()
  • VCBROWSE()
  • 36.1. Particularidades dos componentes visuais
  • 36.1.1. Configurando as cores para os componentes
  • 37. Aplicações com a interface visual do ADVPL
  • 37.1. Captura de informações simples (Multi-Gets)
  • 37.1.1. Enchoice()
  • 37.1.2. MsMGet()
  • 37.2. Captura de múltiplas informações (Multi-Lines)
  • 37.2.1. MsGetDB()
  • 37.2.2. MsGetDados()
  • 37.2.3. MsNewGetDados()
  • 37.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados()
  • 37.3. Barras de botões
  • 37.3.1. EnchoiceBar()
  • 37.3.2. TBar()
  • 37.3.3. ButtonBar
  • 37.3.4. Imagens pré-definidas para as barras de botões
  • 38. Outras aplicações da interface visual do ADVPL
  • 38.1. MaWndBrowse()
  • 38.1.1. Enchoice para Arquivos Temporários
  • 38.2. DbTree()
  • 38.3. MsSelect()
  • 39. Introdução à relatórios gráficos
  • 39.1. TReport()
  • 39.1.1. Introdução
  • Finalidade
  • Descrição
  • Pré-Requisitos
  • 39.1.2. Impressão do relatório personalizável
  • 39.1.2.1. Parâmetros de impressão
  • Impressão
  • Arquivo
  • Spool
  • E-mail
  • Papel
  • Tamanho do papel
  • Formato da impressão
  • Configurações
  • Título
  • Ordem
  • Layout
  • Preview
  • Executar em segundo plano
  • 39.1.3. Personalização
  • 39.1.3.1. Editando o layout do relatório
  • Nova estrutura do relatório TReport:
  • 39.1.4. Definindo a Função ReportDef()
  • DEFINE REPORT
  • DEFINE SECTION
  • DEFINE CELL
  • MÓDULO 08: Aplicações ADVPL para o ERP
  • 40. Protheus e o TOPCONNECT / TOTVS DbAccess
  • 40.1. Características técnicas com o uso do TOTVS DbAccess
  • Comportamento de Queries – Colunas Calculadas
  • Comportamento diferenciado com Bandos de Dados PostGres
  • Conceito de Índices Permanentes e Diferenças das RDDs
  • Funcionamento Interno
  • Quebra de Compatibilidade com CodeBase/DBF
  • Lista dos códigos de erro do TOPConnect / DbAccess
  • 40.2. Funções ADVPL para TOPCONNECT / TOTVS DbAccess
  • Lista das funções de interação com a aplicação TopConnect / DbAccess:
  • Lista das funções acessórias utilizadas nos fontes como facilitadoras:
  • Funções de interação com o TopConnect / DbAccess
  • TCCANOPEN ()
  • TCCONTYPE()
  • TCDELFILE()
  • TCGENQRY()
  • TCGETDB()
  • TCLINK()
  • TCQUERY()
  • TCQUIT()
  • TCSETCONN()
  • TCSETFIELD()
  • TCSPEXEC()
  • TCSPEXIST()
  • TCSQLERROR()
  • TCSQLEXEC()
  • TCSRVTYPE()
  • TCUNLINK()
  • TCCHKOBJ()
  • TCEXEERROR()
  • TCPGMEXE()
  • TCSYSEXE()
  • Funções acessórias para uso em fontes com interação com o TOTVS DbAccess
  • CHANGEQUERY()
  • RETFULLNAME()
  • RETSQLCOND()
  • RETSQLNAME()
  • RETSQLTABLE()
  • SQLCOPY()
  • SQLORDER()
  • SQLTOTRB()
  • 40.3. Aplicações com controle de comunição com o Banco de Dados
  • MaWndBrowse com Alias Temporário gerado por Query
  • 40.3.1. MaWndBrowse com Alias Temporário gerado por Query
  • Exemplo: MaWndBrowse com Alias Temporário gerado por Query
  • 40.3.2. Banco de dados de interface
  • Considerações relevantes sobre as funções TCLink() e TCSetConn()
  • Considerações complementares sobre o conceito de Banco de Dados de Interface
  • 40.4. Embedded SQL – Facilitador de Query’s
  • Disponibilidade do Recurso
  • Características operacionais - Sintaxe
  • Limitação:
  • Erros de Compilação
  • Erros de Execução
  • Características operacionais - depuração
  • Função auxiliar - GETLastQuery()
  • 41. Funcionalidade MsExecAuto
  • Sobre a MsExecAuto e Rotinas Automáticas
  • Quando utilizar a funcionalidade MsExecAuto ?
  • Processos da aplicação ERP com tratamentos para execução por MsExecAuto
  • Quando não utilizar a funcionalidade MsExecAuto
  • 41.1. Desenvolvendo aplicações com MsExecAuto
  • Estrutura de uma rotina com execução de MsExecAuto
  • Variáveis de controle
  • Montagem dos arrays de parâmetros
  • Definição dos parâmetros específicos da rotina que será executada
  • Controle de transação
  • Tratamento de mensagens de erro
  • Aplicação completa de importação utilizando MsExecAuto: Carga de imobilizado
  • 42. Recursos de envio de e-mail
  • Funções para manipulação de e-mails
  • Detalhamento das funções de manipulação de e-mails
  • CALLPROC()
  • MAILSMTPON()
  • MAILPOPON()
  • MAILSMTPOFF()
  • MAILPOPOFF()
  • MAILRECEIVE()
  • MAILAUTH()
  • POPMSGCOUNT()
  • MAILSEND()
  • MAILGETERR()
  • Exemplos de utilização das funcionalidades de envio e recebimento de e-mail
  • Envio de mensagens utilizando sintaxe clássica
  • Envio de mensagens utilizando funções
  • Recebimento de mensagens utilizando funções
  • 43. Integração básica com MsOffice
  • 43.1. Exportação para EXCEL
  • DLGTOEXCEL()
  • Exemplo de exportação para o Microsoft Excel utilizando a função DlgToExcel()
  • Relação de imagens para aplicações visuais
  • Projeto: Avaliação prática do treinamento de ADVPL Avançado
  • REFERÊNCIAS BIBLIOGRÁFICAS

Educação Cor por at i v a

Pr ogr amação em ADVPL
Compl et o




Mat r iz – Av. Br az Leme, 1.717 – 02511- 000 – São Paulo – SP – Br asil.
Tel.: 55 ( 11) 3981- 7001

www.micr osiga.com.br



- 2 -

ADVPL Compl et o



ESTRUTURA DO TREI NAMENTO

MÓDULO 01: Introdução à programação ...................................................................................................................... 11
1. Lógica de Programação e Algoritmos .................................................................................................................... 11
1.1. Lógica de Programação ................................................................................................................ 11
1.2. Desenvolvendo algoritmos ............................................................................................................ 12
1.2.1. Estudando algoritmos ................................................................................................................................ 13
1.2.2. Teste de mesa ............................................................................................................................................ 15
2. Estruturas de programação .................................................................................................................................... 16
2.1. Diagrama de bloco ........................................................................................................................ 16
2.2. Estruturas de decisão e repetição ................................................................................................ 19
2.2.1. Estruturas de decisão ................................................................................................................................. 19
2.2.2. Estruturas de repetição .............................................................................................................................. 22
MÓDULO 02: A linguagem ADVPL ............................................................................................................................... 24
3. Estrutura de um Programa ADVPL ...................................................................................................................... 26
3.1. Áreas de um Programa ADVPL .................................................................................................. 28
4. Declaração e Atribuição de Variáveis .................................................................................................................... 31
4.1. Tipo de Dados ................................................................................................................................ 31
4.2. Declaração de variáveis ................................................................................................................ 32
4.3. Escopo de variáveis ....................................................................................................................... 33
4.4. Entendendo a influência do escopo das variáveis ...................................................................... 37
4.5. Operações com Variáveis ............................................................................................................. 38
4.5.1. Atribuição de variáveis .............................................................................................................................. 38
4.5.2. Operadores da linguagem ADVPL ............................................................................................................ 39
4.5.3. Operação de Macro Substituição ............................................................................................................... 44
4.5.4. Funções de manipulação de variáveis ....................................................................................................... 45
5. Estruturas básicas de programação ....................................................................................................................... 51
5.1. Estruturas de repetição ................................................................................................................ 51
5.1.1. Influenciando o fluxo de repetição ............................................................................................................ 54
5.2. Estruturas de decisão .................................................................................................................... 56
6. Arrays e Blocos de Código ...................................................................................................................................... 60
6.1. Arrays ............................................................................................................................................ 60
6.1.1. Inicializando arrays ................................................................................................................................... 62
6.1.2. Funções de manipulação de arrays ............................................................................................................ 63
6.1.3. Cópia de arrays .......................................................................................................................................... 65
6.2. Listas de Expressões e Blocos de Código .................................................................................... 67
6.2.1. Premissas para utilização de Blocos de Código ........................................................................................ 67
6.2.2. Lista de expressões .................................................................................................................................... 68
6.2.3. Blocos de Código ...................................................................................................................................... 70
6.2.4. Funções para manipulação de blocos de código ........................................................................................ 72
7. Funções ................................................................................................................................................................... 73
7.1. Tipos e escopos de funções ........................................................................................................... 74
7.2. Passagem de parâmetros entre funções ...................................................................................... 77

- 3 -

ADVPL Compl et o


8. Diretivas de compilação .......................................................................................................................................... 83
MÓDULO 03: Desenvolvendo pequenas customizações ................................................................................................ 88
9. ADVPL e o ERP Microsiga Protheus .................................................................................................................... 88
9.1. O Ambiente Protheus ................................................................................................................... 88
9.2. Organização e configuração inicial do ambiente Protheus ....................................................... 92
9.3. O Configurador do Protheus ....................................................................................................... 98
9.3.1. Funcionalidades Abordadas ...................................................................................................................... 98
9.3.2. Estruturas básicas da aplicação ERP Protheus .......................................................................................... 98
9.3.3. Acessando o módulo Configurador ......................................................................................................... 101
9.4. Funcionalidades do Configurador ............................................................................................. 104
9.4.1. Dicionário de Dados da aplicação ERP ................................................................................................... 105
9.4.2. Adição de tabelas ao Dicionário de Dados .............................................................................................. 105
9.4.3. Adição de campos as tabelas do Dicionário de Dados ............................................................................ 108
9.4.4. Adição de índices para as tabelas do Dicionário de Dados ..................................................................... 113
9.4.5. Adição de gatilhos para os campos das tabelas do sistema ..................................................................... 116
9.4.6. Criação de Tabelas Genéricas ................................................................................................................. 118
9.4.7. Criação de Parâmetros ............................................................................................................................. 119
10. TOTVS Development Studio ................................................................................................................................ 121
Desenvolvimento de pequenas customizações ....................................................................................... 124
11. Acesso e manipulação de bases de dados em ADVPL ......................................................................................... 124
11.1. Diferenças e compatibilizações entre bases de dados ............................................................... 125
11.2. Funções de acesso e manipulação de dados .............................................................................. 126
11.3. Diferenciação entre variáveis e nomes de campos ................................................................... 131
11.4. Controle de numeração seqüencial ............................................................................................ 132
12. Customizações para a aplicação ERP .................................................................................................................. 133
12.1. Customização de campos – Dicionário de Dados ..................................................................... 134
12.1.1. Validações de campos e perguntas ..................................................................................................... 134
12.1.2. Pictures de formação disponíveis ....................................................................................................... 136
12.2. Customização de gatilhos – Configurador ................................................................................ 138
12.3. Customização de parâmetros – Configurador ......................................................................... 139
12.3.1. Funções para manipulação de parâmetros .......................................................................................... 139
12.3.2. Cuidados na utilização de um parâmetro ............................................................................................ 140
12.4. Pontos de Entrada – Conceitos, Premissas e Regras ............................................................... 141
13. Interfaces visuais .................................................................................................................................................. 142
13.1. Sintaxe e componentes das interfaces visuais ........................................................................... 142
13.2. Interfaces padrões para atualizações de dados ........................................................................ 145
13.2.1. AxCadastro() ...................................................................................................................................... 145
13.2.2. MBrowse() .......................................................................................................................................... 146
13.2.3. AxFunctions() ..................................................................................................................................... 150
APÊNDICES .................................................................................................................................................................. 152
BOAS PRÁTICAS DE PROGRAMAÇÃO .................................................................................................................... 152
14. Utilização de Identação ........................................................................................................................................ 152
15. Capitulação de Palavras-Chave ........................................................................................................................... 153
15.1. Palavras em maiúsculo ............................................................................................................... 154

- 4 -

ADVPL Compl et o


16. Utilização da Notação Húngara ........................................................................................................................... 154
17. Palavras reservadas .............................................................................................................................................. 155
LISTAS DE EXERCÍCIOS ........................................................................................................................................... 156
Módulo 01: Introdução à programação ................................................................................................. 156
Módulo 02: A linguagem ADVPL ........................................................................................................... 157
Módulo 03: Desenvolvendo pequenas customizações ........................................................................... 160
MÓDULO 04: Desenvolvendo aplicações em ADVPL ................................................................................................. 162
18. A linguagem ADVPL ............................................................................................................................................ 162
19. Estrutura de um Programa ADVPL .................................................................................................................... 164
19.1. Áreas de um Programa ADVPL ................................................................................................ 166
20. Declaração e Atribuição de Variáveis .................................................................................................................. 169
20.1. Tipo de Dados .............................................................................................................................. 169
20.2. Declaração de variáveis .............................................................................................................. 170
20.3. Escopo de variáveis ..................................................................................................................... 171
20.4. Entendendo a influência do escopo das variáveis .................................................................... 175
21. Regras adicionais da linguagem ADVPL ............................................................................................................ 176
21.1. Palavras reservadas .................................................................................................................... 176
21.2. Pictures de formatação disponíveis ........................................................................................... 177
22. Programas de Atualização .................................................................................................................................... 178
22.1. Modelo1() ou AxCadastro() ....................................................................................................... 179
22.2. Modelo2() ..................................................................................................................................... 181
22.2.1. Componentes de uma tela no formato Modelo 2 ................................................................................ 181
22.2.2. Estrutura de um programa utilizando a Modelo2() ............................................................................. 189
22.2.3. Função Modelo2() .............................................................................................................................. 197
22.3. Modelo3() ..................................................................................................................................... 201
22.3.1. Estrutura de um programa utilizando a Modelo3() ............................................................................. 204
22.3.2. Função Modelo3() .............................................................................................................................. 213
22.4. Mbrowse() .................................................................................................................................... 217
22.4.1. AxFunctions() ..................................................................................................................................... 222
22.4.2. FilBrowse() ......................................................................................................................................... 224
22.4.3. EndFilBrw() ........................................................................................................................................ 224
22.4.4. PesqBrw() ........................................................................................................................................... 225
22.4.5. BrwLegenda () .................................................................................................................................... 225
22.5. MarkBrowse() ............................................................................................................................. 229
23. Arquivos e Índices Temporários ........................................................................................................................... 233
23.1. Utilização de arquivos e índices temporários ........................................................................... 233
23.2. Funções para manipulação de arquivos e índices temporários .............................................. 233
23.2.1. CriaTrab() ........................................................................................................................................... 233
23.2.2. dbUseArea() ....................................................................................................................................... 234
23.2.3. IndRegua() .......................................................................................................................................... 234
24. Relatórios não gráficos ......................................................................................................................................... 238
24.1.1. Estrutura de relatórios baseados na SetPrint() .................................................................................... 238
25. Manipulação de arquivos I ................................................................................................................................... 248

- 5 -

ADVPL Compl et o


25.1. Geração e leitura de arquivos em formato texto ...................................................................... 248
1ª. Família de funções de gravação e leitura de arquivos texto .................................................................... 249
2ª. Família de funções de gravação e leitura de arquivos texto .................................................................... 254
26. Oficina de programação I .................................................................................................................................... 256
26.1. Interfaces com sintaxe clássica ................................................................................................... 256
26.2. Réguas de processamento ........................................................................................................... 259
26.2.1. RptStatus() .......................................................................................................................................... 259
SETREGUA() .............................................................................................................................................. 261
INCREGUA() .............................................................................................................................................. 262
26.2.2. Processa() ........................................................................................................................................... 263
SETPROC() ................................................................................................................................................. 265
INCPROC() ................................................................................................................................................. 265
26.2.3. MsNewProcess(). ............................................................................................................................... 266
26.2.4. MsAguarde(). ..................................................................................................................................... 268
26.2.5. MsgRun(). ........................................................................................................................................... 270
26.3. ListBox() ...................................................................................................................................... 271
26.3.1. ListBox simples .................................................................................................................................. 271
26.3.2. ListBox múltiplas colunas .................................................................................................................. 274
26.4. ScrollBox() ................................................................................................................................... 276
26.5. ParamBox() .................................................................................................................................. 280
MÓDULO 05: Introdução a orientação à objetos ......................................................................................................... 285
27. Conceitos de orientação à objetos ........................................................................................................................ 285
27.1. Definições ..................................................................................................................................... 285
27.2. Conceitos Básicos ........................................................................................................................ 288
27.3. O Modelo de Objetos (OMT) ..................................................................................................... 289
27.3.1. Objetos e Classes ................................................................................................................................ 289
27.3.2. Atributos ............................................................................................................................................. 290
27.3.3. Operações e Métodos ......................................................................................................................... 291
27.3.4. Sugestões de desenvolvimento ........................................................................................................... 292
28. Orientação a objetos em ADVPL ......................................................................................................................... 293
28.1. Sintaxe e operadores para orientação a objetos ....................................................................... 293
28.2. Estrutura de uma classe de objetos em ADVPL ...................................................................... 295
28.3. Implementação dos métodos de uma classe em ADVPL ......................................................... 296
MÓDULO 06: ADVPL Orientado à objetos I ............................................................................................................... 300
29. Componentes da interface visual do ADVPL ...................................................................................................... 300
29.1. Particularidades dos componentes visuais ................................................................................ 307
29.1.1. Configurando as cores para os componentes ...................................................................................... 307
30. Aplicações com a interface visual do ADVPL ..................................................................................................... 309
30.1. Captura de informações simples (Multi-Gets) ......................................................................... 309
30.1.1. Enchoice() .......................................................................................................................................... 310
30.1.2. MsMGet() ........................................................................................................................................... 312
30.2. Captura de múltiplas informações (Multi-Lines) ..................................................................... 314
30.2.1. MsGetDB() ......................................................................................................................................... 315
30.2.2. MsGetDados() .................................................................................................................................... 319
30.2.3. MsNewGetDados() ............................................................................................................................. 323
30.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados() ............................................... 328

- 6 -

ADVPL Compl et o


30.3. Barras de botões .......................................................................................................................... 333
30.3.1. EnchoiceBar() ..................................................................................................................................... 333
30.3.2. TBar() ................................................................................................................................................. 335
30.3.3. ButtonBar ........................................................................................................................................... 336
30.3.4. Imagens pré-definidas para as barras de botões .................................................................................. 339
APÊNDICES .................................................................................................................................................................. 340
BOAS PRÁTICAS DE PROGRAMAÇÃO .................................................................................................................... 340
31. Arredondamento ................................................................................................................................................... 340
32. Utilização de Identação ........................................................................................................................................ 340
33. Capitulação de Palavras-Chave ........................................................................................................................... 342
33.1. Palavras em maiúsculo ............................................................................................................... 342
34. Utilização da Notação Húngara ........................................................................................................................... 343
35. Técnicas de programação eficiente ...................................................................................................................... 343
LISTAS DE EXERCÍCIOS ........................................................................................................................................... 353
Módulo 04.1.: Desenvolvendo aplicações em ADVPL ......................................................................... 353
Módulo 04.2.: Oficina de Programação I .............................................................................................. 358
Módulo 05: Introdução a orientação à objetos ..................................................................................... 360
Módulo 06: ADVPL orientado à objetos I ............................................................................................ 361
Projeto: Avaliação prática do treinamento de ADVPL Intermediário ............................................... 363
MÓDULO 07: ADVPL Orientado à objetos II .............................................................................................................. 364
36. Componentes da interface visual do ADVPL ...................................................................................................... 364
TSRVOBJECT() .......................................................................................................................................... 366
TFONT() ...................................................................................................................................................... 369
MSDIALOG() .............................................................................................................................................. 370
TDIALOG() ................................................................................................................................................. 371
TWINDOW() ............................................................................................................................................... 374
TCONTROL() .............................................................................................................................................. 377
BRGETDDB() ............................................................................................................................................. 378
MSCALEND() ............................................................................................................................................. 381
MSCALENDGRID() ................................................................................................................................... 383
MSSELBR() ................................................................................................................................................. 385
MSWORKTIME() ....................................................................................................................................... 388
SBUTTON() ................................................................................................................................................ 391
TBAR() ........................................................................................................................................................ 393
TBITMAP() ................................................................................................................................................. 395
TBROWSEBUTTON() ................................................................................................................................ 397
TBTNBMP() ................................................................................................................................................ 399
TBTNBMP2() .............................................................................................................................................. 401
TBUTTON() ................................................................................................................................................ 403
TCBROWSE() ............................................................................................................................................. 405
TCHECKBOX() .......................................................................................................................................... 409
TCOLORTRIANGLE() ............................................................................................................................... 411
TCOMBOBOX() ......................................................................................................................................... 413
TFOLDER() ................................................................................................................................................. 416
TGET() ......................................................................................................................................................... 418
TGROUP() ................................................................................................................................................... 420
THBUTTON() ............................................................................................................................................. 422
TIBROWSER() ............................................................................................................................................ 423
TLISTBOX() ................................................................................................................................................ 425
TMENU() ..................................................................................................................................................... 429

- 7 -

ADVPL Compl et o


TMENUBAR() ............................................................................................................................................ 430
TMETER() ................................................................................................................................................... 431
TMSGRAPHIC() ......................................................................................................................................... 434
TMSGBAR() ................................................................................................................................................ 440
TMSGITEM() .............................................................................................................................................. 442
TMULTIBTN() ............................................................................................................................................ 443
TMULTIGET() ............................................................................................................................................ 446
TOLECONTAINER() .................................................................................................................................. 448
TPAGEVIEW() ............................................................................................................................................ 450
TPANEL() ................................................................................................................................................... 452
TRADMENU() ............................................................................................................................................ 453
TSBROWSE() .............................................................................................................................................. 457
TSAY() ........................................................................................................................................................ 461
TSCROLLBOX() ......................................................................................................................................... 463
TSIMPLEEDITOR() .................................................................................................................................... 464
TSLIDER() .................................................................................................................................................. 469
TSPLITTER() .............................................................................................................................................. 472
TTABS() ...................................................................................................................................................... 476
TTOOLBOX() ............................................................................................................................................. 478
TWBROWSE() ............................................................................................................................................ 481
VCBROWSE() ............................................................................................................................................. 485
36.1. Particularidades dos componentes visuais ................................................................................ 491
36.1.1. Configurando as cores para os componentes ...................................................................................... 491
37. Aplicações com a interface visual do ADVPL ..................................................................................................... 493
37.1. Captura de informações simples (Multi-Gets) ......................................................................... 493
37.1.1. Enchoice() .......................................................................................................................................... 494
37.1.2. MsMGet() ........................................................................................................................................... 496
37.2. Captura de múltiplas informações (Multi-Lines) ..................................................................... 498
37.2.1. MsGetDB() ......................................................................................................................................... 499
37.2.2. MsGetDados() .................................................................................................................................... 503
37.2.3. MsNewGetDados() ............................................................................................................................. 507
37.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados() ............................................... 512
37.3. Barras de botões .......................................................................................................................... 517
37.3.1. EnchoiceBar() ..................................................................................................................................... 517
37.3.2. TBar() ................................................................................................................................................. 519
37.3.3. ButtonBar ........................................................................................................................................... 520
37.3.4. Imagens pré-definidas para as barras de botões .................................................................................. 523
38. Outras aplicações da interface visual do ADVPL ............................................................................................... 524
38.1. MaWndBrowse() ......................................................................................................................... 524
38.1.1. Enchoice para Arquivos Temporários ................................................................................................ 527
38.2. DbTree() ....................................................................................................................................... 537
38.3. MsSelect() ..................................................................................................................................... 542
39. Introdução à relatórios gráficos ........................................................................................................................... 545
39.1. TReport() ..................................................................................................................................... 545
39.1.1. Introdução ........................................................................................................................................... 545
Finalidade ..................................................................................................................................................... 545
Descrição ..................................................................................................................................................... 546
Pré-Requisitos .............................................................................................................................................. 546
39.1.2. Impressão do relatório personalizável ................................................................................................ 547
39.1.2.1. Parâmetros de impressão ............................................................................................................... 547
Impressão ..................................................................................................................................................... 547
Arquivo ........................................................................................................................................................ 547
Spool ............................................................................................................................................................ 548

- 8 -

ADVPL Compl et o


E-mail ........................................................................................................................................................... 548
Papel ............................................................................................................................................................. 549
Tamanho do papel ........................................................................................................................................ 549
Formato da impressão .................................................................................................................................. 549
Configurações .............................................................................................................................................. 549
Título ............................................................................................................................................................ 549
Ordem .......................................................................................................................................................... 549
Layout .......................................................................................................................................................... 549
Preview ........................................................................................................................................................ 549
Executar em segundo plano ......................................................................................................................... 550
39.1.3. Personalização .................................................................................................................................... 550
39.1.3.1. Editando o layout do relatório ....................................................................................................... 550
Nova estrutura do relatório TReport: ........................................................................................................... 551
39.1.4. Definindo a Função ReportDef() ........................................................................................................ 551
DEFINE REPORT ....................................................................................................................................... 552
DEFINE SECTION ..................................................................................................................................... 552
DEFINE CELL ............................................................................................................................................ 552
MÓDULO 08: Aplicações ADVPL para o ERP ............................................................................................................ 553
40. Protheus e o TOPCONNECT / TOTVS DbAccess .............................................................................................. 553
40.1. Características técnicas com o uso do TOTVS DbAccess ...................................................... 554
Comportamento de Queries – Colunas Calculadas ...................................................................................... 554
Comportamento diferenciado com Bandos de Dados PostGres ................................................................... 556
Conceito de Índices Permanentes e Diferenças das RDDs .......................................................................... 557
Funcionamento Interno ................................................................................................................................ 557
Quebra de Compatibilidade com CodeBase/DBF ........................................................................................ 558
Lista dos códigos de erro do TOPConnect / DbAccess ................................................................................ 559
40.2. Funções ADVPL para TOPCONNECT / TOTVS DbAccess .................................................. 560
Lista das funções de interação com a aplicação TopConnect / DbAccess: .................................................. 560
Lista das funções acessórias utilizadas nos fontes como facilitadoras: ........................................................ 560
Funções de interação com o TopConnect / DbAccess ................................................................................. 561
TCCANOPEN () .......................................................................................................................................... 561
TCCONTYPE() ........................................................................................................................................... 561
TCDELFILE() .............................................................................................................................................. 562
TCGENQRY() ............................................................................................................................................. 563
TCGETDB() ................................................................................................................................................ 563
TCLINK() .................................................................................................................................................... 564
TCQUERY() ................................................................................................................................................ 566
TCQUIT() .................................................................................................................................................... 567
TCSETCONN() ........................................................................................................................................... 567
TCSETFIELD() ........................................................................................................................................... 568
TCSPEXEC() ............................................................................................................................................... 570
TCSPEXIST() .............................................................................................................................................. 572
TCSQLERROR() ......................................................................................................................................... 572
TCSQLEXEC() ............................................................................................................................................ 573
TCSRVTYPE() ............................................................................................................................................ 573
TCUNLINK() .............................................................................................................................................. 574
TCCHKOBJ() .............................................................................................................................................. 575
TCEXEERROR() ......................................................................................................................................... 575
TCPGMEXE() ............................................................................................................................................. 576
TCSYSEXE() ............................................................................................................................................... 576
Funções acessórias para uso em fontes com interação com o TOTVS DbAccess ....................................... 577
CHANGEQUERY() .................................................................................................................................... 577
RETFULLNAME() ...................................................................................................................................... 578
RETSQLCOND() ........................................................................................................................................ 579
RETSQLNAME() ........................................................................................................................................ 579
RETSQLTABLE() ....................................................................................................................................... 580
SQLCOPY() ................................................................................................................................................. 580

- 9 -

ADVPL Compl et o


SQLORDER() .............................................................................................................................................. 581
SQLTOTRB() .............................................................................................................................................. 582
40.3. Aplicações com controle de comunição com o Banco de Dados .............................................. 583
40.3.1. MaWndBrowse com Alias Temporário gerado por Query ................................................................. 583
Exemplo: MaWndBrowse com Alias Temporário gerado por Query .......................................................... 584
40.3.2. Banco de dados de interface ............................................................................................................... 595
Considerações relevantes sobre as funções TCLink() e TCSetConn() ......................................................... 595
Considerações complementares sobre o conceito de Banco de Dados de Interface ..................................... 596
40.4. Embedded SQL – Facilitador de Query’s ................................................................................. 598
Disponibilidade do Recurso ......................................................................................................................... 598
Características operacionais - Sintaxe .......................................................................................................... 599
Limitação: .................................................................................................................................................... 599
Erros de Compilação .................................................................................................................................... 600
Erros de Execução ........................................................................................................................................ 600
Características operacionais - depuração ..................................................................................................... 601
Função auxiliar - GETLastQuery() .............................................................................................................. 601
41. Funcionalidade MsExecAuto ............................................................................................................................... 603
Sobre a MsExecAuto e Rotinas Automáticas .............................................................................................. 603
Quando utilizar a funcionalidade MsExecAuto ? ......................................................................................... 604
Processos da aplicação ERP com tratamentos para execução por MsExecAuto .......................................... 604
Quando não utilizar a funcionalidade MsExecAuto ..................................................................................... 605
41.1. Desenvolvendo aplicações com MsExecAuto ............................................................................ 606
Estrutura de uma rotina com execução de MsExecAuto .............................................................................. 606
Variáveis de controle ................................................................................................................................... 606
Montagem dos arrays de parâmetros ............................................................................................................ 606
Definição dos parâmetros específicos da rotina que será executada ............................................................ 610
Controle de transação ................................................................................................................................... 611
Tratamento de mensagens de erro ................................................................................................................ 613
Aplicação completa de importação utilizando MsExecAuto: Carga de imobilizado ................................... 616
42. Recursos de envio de e-mail ................................................................................................................................. 629
Funções para manipulação de e-mails .......................................................................................................... 629
Detalhamento das funções de manipulação de e-mails ................................................................................ 629
CALLPROC() .............................................................................................................................................. 629
MAILSMTPON() ........................................................................................................................................ 630
MAILPOPON() ............................................................................................................................................ 630
MAILSMTPOFF() ....................................................................................................................................... 631
MAILPOPOFF() .......................................................................................................................................... 631
MAILRECEIVE() ........................................................................................................................................ 632
MAILAUTH() .............................................................................................................................................. 633
POPMSGCOUNT() ..................................................................................................................................... 634
MAILSEND() .............................................................................................................................................. 634
MAILGETERR() ......................................................................................................................................... 635
Exemplos de utilização das funcionalidades de envio e recebimento de e-mail .......................................... 635
Envio de mensagens utilizando sintaxe clássica .......................................................................................... 635
Envio de mensagens utilizando funções ...................................................................................................... 638
Recebimento de mensagens utilizando funções ........................................................................................... 641
43. Integração básica com MsOffice .......................................................................................................................... 643
43.1. Exportação para EXCEL ........................................................................................................... 643
DLGTOEXCEL() ........................................................................................................................................ 643
Exemplo de exportação para o Microsoft Excel utilizando a função DlgToExcel() .................................... 644
APÊNDICES .................................................................................................................................................................. 646
Relação de imagens para aplicações visuais .......................................................................................... 646
LISTAS DE EXERCÍCIOS ........................................................................................................................................... 654

- 10 -

ADVPL Compl et o


Projeto: Avaliação prática do treinamento de ADVPL Avançado ...................................................... 659
REFERÊNCIAS BIBLIOGRÁFICAS .......................................................................................................................... 660


- 11 -

ADVPL Compl et o


MÓDULO 01: I nt r odução à pr ogr amação

1. Lógi ca de Pr ogr amação e Al gor i t mos

No aprendi zado de qual quer l i nguagem de pr ogramação é essenci al desenvol ver os concei t os
rel aci onados a l ógi ca e a t écni ca da escri t a de um programa.

Com foco nest a necessi dade, est e t ópi co i rá descr ever r esumi dament e os concei t os envol vi dos
no pr ocesso de desenvol vi ment o de um programa at ravés dos concei t os r el aci onados à:

E Lógi ca de programação
E Al gori t mos
E Di agramas de bl ocos

1.1. Lógi ca de Pr ogr amação

Lógi ca

A l ógi ca de programação é necessári a para pessoas que desej am t rabal har com
desenvol vi ment o de si st emas e pr ogramas, el a permi t e defi ni r a seqüênci a l ógi ca para o
desenvol vi ment o. Ent ão o que é l ógi ca?


Lógi ca de pr ogr amação é a t écni ca de encadear pen sament os par a at i ngi r
det er mi n ado obj et i v o.


Seqü ênci a Lógi ca

Est es pensament os, podem ser descri t os como uma seqüênci a de i nst ruções, que devem ser
segui das para se cumpri r uma det ermi nada t arefa.


Seqü ênci a Lógi ca são passos ex ecut ados at é at i n gi r u m obj et i v o ou sol ução de u m
pr obl ema.


I nst r uções

Na li nguagem comum, ent ende- se por i nst ruções “ um conj unt o de r egras ou normas defi ni das
para a reali zação ou emprego de al go” .

Em i nformát i ca, porém, i nst rução é a i nformação que i ndi ca a um comput ador uma ação
el ement ar a execut ar . Convém r essal t ar que uma ordem i sol ada não per mi t e real i zar o
processo compl et o, par a i sso é necessári o um conj unt o de i nst ruções col ocadas em ordem
seqüenci al l ógi ca.

Por exempl o, se qui ser mos fazer uma omel et e de bat at as, pr eci sar emos col ocar em prát i ca
uma séri e de i nst ruções: descascar as bat at as, bat er os ovos, fri t ar as bat at as, et c. É evi dent e
que essas i nst ruções t êm que ser execut adas em uma ordem adequada – não se pode
descascar as bat at as depoi s de fri t á- l as.

Dessa manei ra, uma inst rução t omada em separado não t em mui t o sent i do; para obt ermos o
resul t ado, preci samos col ocar em prát i ca o conj unt o de t odas as i nst ruções, na ordem cor ret a.

- 12 -

ADVPL Compl et o




I nst r uções são um conj unt o de r egr as ou nor mas def i n i das par a a r eal i zação ou
empr ego de al go. Em i nf or mát i ca, é o que i ndi ca a um comput ador uma ação
el ement ar a ex ecut ar .


Al gor i t mo

Um al gori t mo é for malment e uma seqüênci a fi nit a de passos que l evam a execução de uma
t arefa. Podemos pensar em al gori t mo como uma recei t a, uma seqüênci a de i nst ruções que dão
cabo de uma met a específi ca. Est as t arefas não podem ser r edundant es nem subj et i vas na sua
defi ni ção, devem ser cl aras e preci sas.

Como exempl os de al gori t mos podemos ci t ar os al gori t mos das oper ações bási cas ( adi ção,
mul t ipli cação, di vi são e subt ração) de númer os r eai s deci mai s. Out ros exempl os seri am os
manuai s de aparel hos el et rôni cos, como um vi deocasset e, que expl i cam passo- a- passo como,
por exempl o, gravar um event o.

At é mesmo as coi sas mai s si mpl es, podem ser descri t as por seqüênci as l ógi cas, t ai s como:

E “ Chupar uma bal a”
1. Pegar a bal a;
2. Ret i rar o papel ;
3. Chupar a bal a;
4. Jogar o papel no li xo.

E “ Somar doi s números quai squer”
1. Escr eva o pri mei ro númer o no r et ângul o A;
2. Escr eva o segundo númer o no r et ângul o B;
3. Some o número do r et ângul o A com número do r et ângul o B e col oque o
resul t ado no r et ângul o C.


1.2. Desenv ol v endo al gor i t mos

Pseu docódi go

Os al gori t mos são descri t os em uma linguagem chamada pseudocódi go. Est e nome é uma
al usão à post eri or i mplement ação em uma l inguagem de pr ogramação, ou sej a, quando for
ut ili zada a linguagem a de pr ogramação pr opri ament e di t a como, por exempl o, ADVPL.

Por i sso os al gori t mos são i ndependent es das li nguagens de pr ogr amação, sendo que ao
cont rári o de uma linguagem de pr ogramação não exi st e um formali smo rígi do de como deve
ser escri t o o al gori t mo.

O al gori t mo deve ser fáci l de i nt erpret ar e fáci l de codi fi car. Ou sej a, el e deve ser o
i nt ermedi ári o ent r e a li nguagem fal ada e a l i nguagem de pr ogramação.

- 13 -

ADVPL Compl et o



Regr as par a const r ução do Al gor i t mo

Para escr ever um al gori t mo preci samos descrever a seqüênci a de i nst ruções, de manei ra
si mpl es e obj et i va. Para i sso ut ili zaremos al gumas t écni cas:

1. Usar soment e um verbo por frase;
2. I magi nar que você est á desenvol vendo um al gori t mo para pessoas que não t rabal ham
com i nformát i ca;
3. Usar frases curt as e si mpl es;
4. Ser obj et i vo;
5. Procurar usar pal avras que não t enham sent i do dúbi o.

Fases

Para i mpl ement ar de um al gori t mo de si mpl es i nt erpr et ação e codi fi cação é necessári o
i ni ci al ment e di vi di r o pr obl ema apr esent ado em t rês fases fundament ais, as quai s são:

E ENTRADA: São os dados de ent rada do al gori t mo;
E PROCESSAMENTO: São os procedi ment os ut ilizados para chegar ao r esul t ado fi nal ;
E SAÍ DA: São os dados j á processados.


1.2.1. Est udando al gor i t mos

Nest e t ópi co serão demonst rados al guns algori t mos do cot i di ano, os quai s foram
i mpl ement ados ut ili zando os pri ncípi os descri t os nos t ópi cos ant eri or es.

± Mascar um ch i cl et e
± Ut i l i zar um t el ef on e públ i co – car t ão
± Fr i t ar um ov o
± Tr ocar l âmpadas
± Descascar bat at as
± Jogar o j ogo da f or ca
± Cal cul ar a médi a de n ot as
± Jogar o j ogo da v el ha – cont r a o al gor i t mo

Mascar um ch i cl et e

1. Pegar o chi cl et e
2. Ret i rar o papel
3. Mast i gar
4. Jogar o papel no li xo

Ut i l i zar um t el ef on e públ i co - car t ão

1. Ret i rar o t el efone do gancho
2. Esperar o si nal
3. Col ocar o cart ão
4. Di scar o númer o
5. Fal ar no t el efone
6. Col ocar o t el efone no ganho

- 14 -

ADVPL Compl et o



Fr i t ar um ov o

1. Pegar fri gi dei ra, ovo, óleo e sal
2. Col ocar ól eo na fri gi dei ra
3. Ascender o fogo
4. Col ocar a fri gi dei ra no fogo
5. Esperar o ól eo esquent ar
6. Quebr ar o ovo na fri gi dei ra
7. Jogar a casca no l i xo
8. Ret i rar a fri gi dei ra do fogo quando o ovo est i ver no pont o
9. Desl i gar o fogo
10. Col ocar sal a gost o

Tr ocar l âmpadas

1. Se a l âmpada est i ver fora do al cance, pegar uma escada
2. Pegar a l âmpada nova
3. Se a l âmpada quei mada est i ver quent e, pegar um pano
4. Ti rar l âmpada quei mada
5. Col ocar l âmpada nova

Descascar bat at as

1. Pegar faca, baci a e bat at as
2. Col ocar água na baci a
3. Enquant o houver bat at as, descascar as bat at as
3.1. Col ocar as bat at as descascadas na baci a

Jogar o j ogo da f or ca

1. Escol her a pal avra
2. Mont ar o di agrama do j ogo
3. Enquant o houver l acunas vazi as e o corpo est i ver i ncompl et o:
3.1. Se acert ar a l et ra: escr ever na l acuna corr espondent e
3.2. Se er rar a l et ra: desenhar uma part e do corpo na forca

Cal cul ar a médi a de n ot as

1. Enquant o houver not as a ser em recebi das:
1.1. Receber a not a;

2. Some t odas as not as r ecebi das;
3. Di vi da o t ot al obt i do pela quant idade de not as r ecebi das;
4. Exi ba a médi a das not as.


Jogar o j ogo da v el ha – cont r a o al gor i t mo

1. Enquant o exi st i r um quadrado l i vre e ni nguém ganhou ou perdeu o j ogo:
1.1. Esper e a j ogada do adver sári o, cont i nue depoi s
1.2. Se cent r o est i ver li vre: j ogue no cent r o
1.3. Senão, se o adversári o possui r 2 quadrados em li nha com um quadr ado li vre,
j ogue nest e quadrado
1.4. Senão, se há al gum cant o li vre, j ogue nest e cant o

- 15 -

ADVPL Compl et o



1.2.2. Test e de mesa

Após desenvol ver um al gori t mo el e deverá sempr e ser t est ado. Est e t est e é chamado de
TESTE DE MESA, que si gni fi ca segui r as i nst ruções do al gori t mo de manei ra pr eci sa para
veri fi car se o procedi ment o ut ilizado est á cor ret o ou não.

Para aval i ar a apli cação do t est e de mesa, ut ilizaremos o al gori t mo de cal cul ar a médi a de
not as:

Al gor i t mo: Cal cul ar a médi a de not as

1. Enquant o houver not as a serem r ecebi das:
a. Receber a not a;

2. Some t odas as not as recebi das;
3. Di vi da o t ot al obt i do pel a quant i dade de not as r ecebi das;
4. Exi ba a médi a das not as.


Test e de mesa:

1. Par a cada not a i nfor mada, r eceber e r egi st rar na t abel a abai xo:

I D Not a


2. Ao t érmi no das not as, a t abel a deverá cont er t odas as not as i nformadas, como abai xo:

I D Not a
1 8.0
2 7.0
3 8.0
4 8.0
5 7.0
6 7.0

3. Somar t odas as not as: 45
4. Di vi di r a soma das not as, pel o t ot al de not as informado: 45/ 6 ¬ 7.5
5. Exi bi r a médi a obt i da: Mensagem( Médi a: 7.5)






- 16 -

ADVPL Compl et o



2. Est r ut ur as de pr ogr amação

2.1. Di agr ama de bl oco

O di agrama de bl ocos é uma forma padr oni zada e efi caz para r epr esent ar os passos l ógi cos de
um det ermi nado processament o.

Com o di agrama podemos defi ni r uma seqüênci a de símbol os, com si gni fi cado bem defi ni do,
port ant o, sua pri nci pal função é a de faci lit ar a vi suali zação dos passos de um pr ocessament o.

Si mbol ogi a

Exi st em di ver sos símbolos em um di agrama de bl oco. No quadr o abai xo est ão represent ados
al guns dos símbol os mai s ut ili zados:

Símbol o Função

Ter mi nador
I ndi ca o i níci o e o fi m de um processament o.

Pr ocessament o
Processament o em geral .

Ent r ada
Manu al
I ndi ca a ent rada de dados at ravés do t ecl ado.

Deci são
I ndi ca um pont o no qual deverá ser efet uada
uma escol ha ent r e duas si t uações possívei s.

Ex i bi ção
Most ra os r esul t ados obt i dos com um
processament o.

Document o
I ndi ca um document o ut ili zado pel o
processament o, sej a para ent rada de
i nformações ou para exi bi ção dos dados
di sponívei s após um processament o.



Cada símbol o i rá cont er uma descri ção pert i nent e a forma com o qual o
mesmo foi ut ilizado no fl uxo, i ndi cando o processament o ou a i nformação
que o mesmo r epr esent a.


- 17 -

ADVPL Compl et o



Repr esent ação de al gor i t mos at r av és de di agr amas de bl oco

Al gor i t mo 01: Fr i t ar u m ov o

1. Pegar fri gi dei ra, ovo, ól eo e sal
2. Col ocar ól eo na fri gi dei ra
3. Ascender o fogo
4. Col ocar a fri gi dei ra no fogo
5. Esperar o ól eo esquent ar
6. Quebrar o ovo na fri gi dei ra
7. Jogar a casca no li xo
8. Ret i rar a fri gi dei ra do fogo quando o ovo est i ver no pont o
9. Desl i gar o fogo
10. Col ocar sal a gost o




- 18 -

ADVPL Compl et o



Al gor i t mo 02: Cal cul ar a médi a de not as

1. Enquant o houver not as a serem r ecebi das:
a. Receber a not a;

2. Some t odas as not as recebi das;
3. Di vi da o t ot al obt i do pel a quant i dade de not as r ecebi das;
4. Exi ba a médi a das not as.



- 19 -

ADVPL Compl et o



2.2. Est r ut ur as de deci são e r epet i ção

A ut ilização de est rut ur as de deci são e r epet i ção em um al gori t mo per mi t e a real i zação de
ações r el aci onadas a si t uações que i nfluenci am na execução e sol ução do pr obl ema.

Como foco na ut ili zação da li nguagem ADVPL serão i l ust radas as segui nt es est rut uras:

E Est r ut u r as de deci são
o I F. .. ELSE
o DO CASE ... CASE

E Est r ut u r as de r epet i ção
o WHI LE... END
o FOR... NEXT


2.2.1. Est r ut ur as de deci são

Os comandos de deci são são ut ili zados em al gori t mos cuj a sol ução não é obt i da at ravés da
ut ili zação de ações merament e seqüenci ais, permi t indo que est e aval i e as condi ções
necessári as para opt ar por uma ou out ra manei ra de cont i nuar seu fl uxo.

As est rut uras de deci são que serão anal i sadas são:

E I F...ELSE
E DO CASE ... CASE

I F...ELSE

A est rut ura I F... ELSE ( Se/ Senão) permi t e a análi se de uma condi ção e a part i r da qual ser
execut ada uma de duas ações possívei s: se a análi se da condi ção r esul t ar em um valor
verdadei ro ou se a análise da condi ção r esul t ar em um val or fal so.

Repr esent ação 01 : I F...ELSE com ações par a ambas as si t uações

Ação vinculada ao
resultado
verdadeiro
Análise da
condição
Verdadeiro Falso
Ações anteriores
...
Continuação do
fluxo após a
tomada da
decisão
Ação vinculada ao
resultado falso


- 20 -

ADVPL Compl et o


Est a est rut ura permi t e ai nda que sej a execut ada apenas uma ação, na si t uação em que a a
análi se da condi ção result ar em um val or verdadei ro.

Repr esent ação 02 : I F...ELSE soment e com ação par a si t u ação v er dadei r a

Ação vinculada ao
resultado
verdadeiro
Análise da
condição
Verdadeiro
Falso
Ações anteriores
...
Continuação do
fluxo após a
tomada da
decisão




Apesar das l i nguagens de pr ogramação possuírem vari ações para a est rut ura
I F. .. ELSE, concei t ual ment e t odas as r epr esent ações podem ser descri t as com
base no model o apr esent ado.



A li nguagem ADVPL possui uma vari ação para a est rut ura I F... ELSE, descri t a
como I F. .. ELSEI F.. .ELSE.

Com est a est rut ura é possível real i zar a análi se de di versas condi ções em
seqüênci a, para as quai s será aval i ada soment e a ação da pri mei ra expressão
cuj o análi se r esul t ar em um val or verdadei ro.






- 21 -

ADVPL Compl et o



DO CASE...CASE

A est rut ura DO CASE... ENDCASE ( Caso) permi t e a análi se de di versas condi ções consecut i vas,
para as quai s soment e a condi ção a pri mei ra condi ção verdadei ra será sua ação vi ncul ada
execut ada.

O r ecurso de anál i se de múl t i pl as condi ções é necessári o para sol ução de probl emas mai s
compl exos, nos quai s as possi bili dades de sol ução superam a mer a análi se de um úni co
resul t ado verdadei ro ou fal so.

Análise da
condição 1
Verdadeiro
Falso
Ações anteriores
...
Continuação do
fluxo após a
tomada da
decisão
Ação vinculada a
condição 1
Análise da
condição 2
Verdadeiro
Ação vinculada a
condição 2
Análise da
condição N
Verdadeiro
Ação vinculada a
condição N
Falso
Falso
Falso



Apesar das li nguagens de programação possuírem vari ações para a est rut ura
DO CASE.. . CASE, concei t ual ment e t odas as repr esent ações podem ser
descri t as com base no model o apresent ado.

- 22 -

ADVPL Compl et o



2.2.2. Est r ut ur as de r epet i ção

Os comandos de r epet ição são ut i lizados em al gori t mos nas si t uações em que é necessári o
real i zar uma det ermi nada ação ou um conj unt o de ações para um número defi ni do ou
i ndefi ni do de vezes, ou ai nda enquant o uma det ermi nada condi ção for verdadei ra.

As est rut uras de deci são que serão anal i sadas são:

E WHI LE...END
E FOR...TO...NEXT

WHI LE...END

Nest a est rut ura, o conj unt o de ações será execut ado enquant o a análi se de uma condi ção de
referênci a resul t ar em um val or verdadei ro. É i mport ant e veri fi car que o bl oco soment e ser á
execut ado, i nclusi ve se na pri mei ra análi se a condi ção resul t ar em um val or verdadei ro.

Repr esent ação: WHI LE...END

Ação vinculada ao
resultado
verdadeiro
Análise da
condição
Verdadeiro
Falso
Ações anteriores
...
Continuação do
fluxo
...
Loop






Exi st em di ver sas vari ações para a est rut ura WHI LE... END, na qual há a
possi bili dade da pri mei ra execução ser r eal i zada sem a análi se da condi ção, a
qual val erá apenas a part i r da segunda execução.

A li nguagem ADVPL acei t a a si nt axe DO WHI LE.. .ENDDO, que em out ras
linguagens represent a a si t uação descri t a ant eri orment e ( análi se da condi ção
soment e a part i r da segunda execução) , mas em ADVPL est a si nt axe t em o
mesmo efei t o do WHI LE... END.


- 23 -

ADVPL Compl et o


FOR...TO...NEXT

Nest a est rut ura, o conj unt o de ações será execut ado uma quant i dade de vezes defi ni da,
normal ment e referenci ada como “ passo” .

Para cada “ passo” real izado pel a est rut ura FOR...TO.. .NEXT, será avali ada uma condi ção que
veri fi cará se foi at i ngido o número de execuções previ ament e defi ni do. Dest a forma a
est rut ura compreende um cont rol e de número de “ passos” execut ados, o qual é increment ado
na análi se da expressão NEXT.

Semel hant e a est rut ura WHI LE. .. END, a pri mei ra ação soment e será real i zada medi ant e um
resul t ado verdadei ro na análi se da condi ção.

Repr esent ação: FOR.. .TO...NEXT

Ação vinculada ao
resultado
verdadeiro
Análise da
condição
Verdadeiro
Falso
Ações anteriores
...
Continuação do
fluxo
...
Incrementa o
contador de
“passos”





A est rut ura FOR... TO. . .NEXT, dependendo da linguagem de programação,
permi t e a r eali zação de um i ncrement o si mpl es a cada execução da i nst rução
NEXT, ou a adi ção de out ro val or ao cont ador, o qual deverá especi fi cado de
acordo com a si nt axe da li nguagem.

Em ADVPL pode ser ut ili zada a i nst rução “ STEPS” para al t erar o val or a ser
adi ci onado no cont ador de passos a cada execução da i nst rução NEXT, sendo
que est e val or poder á ser at é negat i vo, vi abili zando uma cont agem
decrescent e.


- 24 -

ADVPL Compl et o



MÓDULO 02: A l i nguagem ADVPL

A Li nguagem ADVPL t eve seu i níci o em 1994, sendo na verdade uma evol ução na ut i lização de
linguagens no padrão xBase pel a Mi crosi ga Soft ware S.A. ( Cl i pper, Vi sual Obj ect s e depoi s
Fi veWi n) . Com a cri ação da t ecnol ogi a Prot heus, era necessári o criar uma linguagem que
suport asse o padrão xBase para a manut enção de t odo o códi go exi st ent e do si st ema de ERP
Si ga Advanced. Foi ent ão cri ada a li nguagem chamada Advanced Pr ot heus Language.

O ADVPL é uma ext ensão do padrão xBase de comandos e funções, operador es, est rut uras de
cont r ol e de fl uxo e pal avras reservadas, cont ando t ambém com funções e comandos
di sponi bili zados pel a Mi crosi ga que a t orna uma linguagem complet a para a cri ação de
apli cações ERP pront as para a I nt ernet . Também é uma l i nguagem ori ent ada a obj et os e
event os, permi t indo ao programador desenvol ver apli cações vi suais e cri ar suas própri as
cl asses de obj et os.

Quando compi l ados, t odos os arqui vos de códi go t ornam- se uni dades de i nt eli gênci a bási cas,
chamados APO´ s ( de Advanced Prot heus Obj ect s) . Tai s APO´ s são mant i dos em um
reposi t óri o e car regados di nami cament e pel o PROTHEUS Ser ver para a execução. Como não
exi st e a li nkedi ção, ou uni ão físi ca do código compi l ado a um det ermi nado módul o ou
apli cação, funções cri adas em ADVPL podem ser execut adas em qual quer pont o do ambi ent e
Advanced Pr ot heus.

O compil ador e o i nt erpret ador da li nguagem ADVPL é o própr i o ser vi dor PROTHEUS
( PROTHEUS Ser ver) , e exi st e um ambi ent e vi sual para desenvol vi ment o i nt egrado
( PROTHEUSI DE) onde o códi go pode ser cri ado, compi l ado e depurado.

Os programas em ADVPL podem cont er comandos ou funções de i nt er face com o usuári o. De
acordo com t al caract eríst i ca, t ai s programas são subdi vi di dos nas seguint es cat egori as:

Pr ogr amação Com I n t er f ace Pr ópr i a com o Usu ár i o

Nest a cat egori a ent ram os pr ogramas desenvol vi dos para serem execut ados at ravés do
t ermi nal remot o do Prot heus, o Pr ot heus Remot e. O Pr ot heus Remot e é a apli cação
encar r egada da i nt erface e da i nt eração com o usuári o, sendo que t odo o pr ocessament o do
códi go em ADVPL, o acesso ao banco de dados e o gerenci ament o de conexões é efet uado no
Prot heus Ser ver. O Pr ot heus Remot e é o pri nci pal mei o de acesso a execução de r ot i nas
escri t as em ADVPL no Prot heus Server, e por i sso permi t e execut ar qual quer t i po de códi go,
t enha el e i nt erface com o usuári o ou não. Por ém nest a cat egori a são consi derados apenas os
programas que real i zem al gum t i po de i nt erface r emot a ut i lizando o prot ocol o de comuni cação
do Prot heus.

Podem- se cri ar r ot i nas para a cust omi zação do si st ema ERP Mi cr osi ga Prot heus, desde
processos adi ci onai s at é mesmo rel at óri os. A grande vant agem é apr ovei t ar t odo o ambi ent e
mont ado pel os módul os do ERP Mi crosi ga Prot heus. Por ém, com o ADVPL é possível at é
mesmo cri ar t oda uma apli cação, ou módul o, do começo.

Todo o códi go do si st ema ERP Mi crosi ga Prot heus é escri t o em ADVPL.


Pr ogr amação Sem I nt er f ace Pr ópr i a com o Usu ár i o

As rot i nas cri adas sem i nt erface são consi deradas nest a cat egori a porque geral ment e t êm uma
ut ili zação mai s específi ca do que um processo adi ci onal ou um rel at óri o novo. Tai s rot i nas não
t êm i nt erface com o usuári o at ravés do Pr ot heus Remot e, e qual quer t ent at i va nesse sent i do

- 25 -

ADVPL Compl et o


( como a cri ação de uma j anel a padrão) ocasi onará uma exceção em t empo de execução. Est as
rot i nas são apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Al gumas vezes, a
i nt erface dest as rot i nas fi ca a cargo de apli cações ext ernas, desenvol vi das em out ras
linguagens, que são responsávei s por i ni ci ar os pr ocessos no ser vi dor Pr ot heus at ravés dos
mei os di sponívei s de i nt egração e conect i vi dade no Prot heus.

De acordo com a ut ilização e com o mei o de conect i vi dade ut ili zado, est as rot i nas são
subcat egori zadas assi m:

E Pr ogr amação por Pr ocessos

Rot i nas escri t as em ADVPL podem ser i ni ci adas como pr ocessos i ndi viduai s ( sem i nt erface) no
Prot heus Server at ravés de duas manei ras: I ni ci adas por out ra r ot i na ADVPL at ravés da
chamada de funções como St art Job( ) ou Call Proc( ) ou i ni ci adas aut omat i cament e na
i ni ci alização do Pr ot heus Server ( quando pr opri ament e confi gurado) .

E Pr ogr amação de RPC

At ravés de uma bi bli ot eca de funções di sponível no Prot heus ( uma API de comuni cação) ,
podem- se execut ar r ot inas escri t as em ADVPL di ret ament e no Prot heus Server, at r avés de
apli cações ext ernas escri t as em out ras l inguagens. I st o é o que se chama de RPC ( de Remot e
Procedure Call, ou Chamada de Pr ocediment os Remot a) .

O servi dor Prot heus t ambém pode execut ar r ot i nas em ADVPL em out ros servi dores Pr ot heus
at ravés de conexão TCP/ I P di r et a ut ilizando o concei t o de RPC. Do mesmo modo, apl i cações
ext ernas podem r equi si t ar a execução de r ot i nas escri t as em ADVPL at ravés de conexão
TCP/ I P di ret a.
Programação Web

O Pr ot heus Ser ver pode t ambém ser execut ado como um servi dor Web, r espondendo a
requi si ções HTTP. No moment o dest as r equi si ções, pode execut ar r ot inas escri t as em ADVPL
como pr ocessos i ndi vi duai s, envi ando o resul t ado das funções como ret orno das requi si ções
para o cli ent e HTTP ( como por exempl o, um Br owser de I nt ernet ) . Qual quer rot i na escri t a em
ADVPL que não cont enha comandos de i nt erface pode ser execut ada at ravés de r equi si ções
HTTP. O Pr ot heus permi t e a compil ação de arqui vos HTML cont endo códi go ADVPL embut i do.
São os chamados arqui vos ADVPL ASP, para a cri ação de pági nas di nâmi cas.

E Pr ogr amação Tel Net

Tel Net é part e da gama de pr ot ocol os TCP/ I P que permi t e a conexão a um comput ador remot o
at ravés de uma apl i cação cl i ent e dest e pr ot ocol o. O PROTHEUS Ser ver pode emul ar um
t ermi nal Tel Net , at ravés da execução de r ot i nas escri t as em ADVPL. Ou sej a, pode- se escrever
rot i nas ADVPL cuj a i nt erface fi nal será um t ermi nal Tel Net ou um col et or de dados móvel .





- 26 -

ADVPL Compl et o



3. Est r ut ur a de um Pr ogr ama ADVPL

Um programa de comput ador nada mai s é do que um grupo de comandos l ogi cament e
di spost os com o obj et i vo de execut ar det ermi nada t arefa. Esses comandos são gravados em
um arqui vo t ext o que é t ransformado em uma li nguagem execut ável por um comput ador
at ravés de um pr ocesso chamado compilação. A compi l ação subst i t ui os comandos de al t o
nível ( que os humanos compr eendem) por inst ruções de bai xo nível ( compreendi da pelo
si st ema operaci onal em execução no comput ador) . No caso do ADVPL, não é o si st ema
operaci onal de um comput ador que i rá execut ar o códi go compil ado, mas si m o Prot heus
Ser ver.

Dent r o de um programa, os comandos e funções ut i lizados devem segui r regras de si nt axe da
linguagem ut ili zada, poi s caso cont rári o o pr ograma será i nt errompi do por er ros. Os er ros
podem ser de compi l ação ou de execução.

Er ros de compi l ação são aquel es encont rados na si nt axe que não per mi t em que o arqui vo de
códi go do programa sej a compi l ado. Podem ser comandos especi fi cados de forma err ônea,
ut ili zação i nváli da de operador es, et c.

Er ros de execução são aquel es que acont ecem depoi s da compil ação, quando o programa est á
sendo execut ado. Podem ocor rer por i númeras razões, mas geral ment e se refer em as funções
não exi st ent es, ou vari ávei s não cri adas ou i ni ciali zadas, et c.


Li nh as de Pr ogr ama

As li nhas exi st ent es dent ro de um arqui vo t ext o de códi go de programa podem ser li nhas de
comando, l inhas de coment ári o ou l i nhas mi st as.

E Li nh as de Comando

Li nhas de comando possuem os comandos ou i nst ruções que serão execut adas. Por exempl o:

Local nCnt
Local nSoma : = 0
For nCnt : = 1 To 10
nSoma + = nCnt
Next nCnt

E Li nh as de Coment ár i o

Li nhas de coment ári o possuem um t ext o qual quer, mas não são execut adas. Servem apenas
para document ação e para t ornar mai s fáci l o ent endi ment o do pr ograma. Exi st em t r ês formas
de se coment ar l i nhas de t ext o. A pri mei ra del as é ut ili zar o si nal de * ( ast eri sco) no começo
da li nha:

* Pr ograma para cál cul o do t ot al
* Aut or: Mi cr osi ga Soft ware S.A.
* Dat a: 2 de out ubr o de 2001

- 27 -

ADVPL Compl et o



Todas as l inhas i ni ci adas com um si nal de ast eri sco são consi deradas como coment ári o. Pode-
se ut ilizar a pal avra NOTE ou doi s símbol os da l et ra "e" comer ci al ( &&) para r eal izar a função
do si nal de ast eri sco. Por ém t odas est as for mas de coment ári o de li nhas são obsol et as e
exi st em apenas para compat i bili zação com o padrão xBase. A mel hor manei ra de coment ar
linhas em ADVPL é ut ili zar duas barr as t ransver sai s:

/ / Programa para cál culo do t ot al
/ / Aut or: Mi cr osi ga Soft ware S.A.
/ / Dat a: 2 de out ubro de 2001

Out ra forma de document ar t ext os é ut i lizar as barras t ransversai s j unt ament e com o
ast eri sco, podendo- se coment ar t odo um bl oco de t ext o sem pr eci sar coment ar l inha a linha:

/ *
Programa para cál cul o do t ot al
Aut or: Mi cr osi ga Soft ware S.A.
Dat a: 2 de out ubro de 2001
* /

Todo o t ext o encont rado ent r e a abert ura ( i ndi cada pel os caract er es / * ) e o fechament o
( indi cada pel os caract er es * / ) é consi derado como coment ári o.

E Li nh as Mi st as

O ADVPL t ambém per mi t e que exi st am l inhas de comando com coment ári o. I st o é possível
adi ci onando- se as duas barras t ransver sai s ( / / ) ao fi nal da linha de comando e adi ci onando- se
o t ext o do coment ári o:

Local nCnt
Local nSoma : = 0 / / I ni ci ali za a vari ável com zer o para a soma
For nCnt : = 1 To 10
nSoma + = nCnt
Next nCnt

E Tamanho da Li n ha

Assi m como a li nha física, del i mit ada pel a quant i dade de caract er es que pode ser di gi t ado no
edi t or de t ext os ut ili zado, exi st e uma l inha consi derada li nha l ógi ca. A li nha l ógi ca, é aquel a
consi derada para a compil ação como uma úni ca li nha de comando.

A pri ncípi o, cada li nha di gi t ada no arqui vo t ext o é di ferenci ada após o pressi onament o da t ecl a
< Ent er> . Ou sej a, a l inha l ógi ca, é a li nha físi ca no arqui vo. Por ém al gumas vezes, por
li mi t ação físi ca do edi t or de t ext o ou por est ét i ca, pode- se "quebrar" a linha l ógi ca em mai s de
uma li nha físi ca no arqui vo t ext o. I st o é efet uado ut ili zando- se o si nal de pont o- e- vírgul a ( ; ) .

I f ! Empt y( cNome) .And. ! Empt y( cEnd) .And. ; < ent er >
! Empt y( cTel ) .And. ! Empt y( cFax) .And. ; < ent er>
! Empt y( cEmail )

GravaDados( cNome,cEnd,cTel ,cFax,cEmai l )

Endi f


- 28 -

ADVPL Compl et o


Nest e exempl o exi st e uma linha de comando para a checagem das var i ávei s ut ilizadas. Como a
linha t orna- se mui t o grande, pode- se di vi di- l a em mai s de uma li nha físi ca ut ilizando o si nal de
pont o- e- vírgul a. Se um si nal de pont o- e- vír gul a for esqueci do nas duas pri mei ras li nhas,
durant e a execução do programa ocor rerá um err o, poi s a segunda li nha físi ca será
consi derada como uma segunda li nha de comando na compil ação. E durant e a execução est a
linha não t erá sent i do.

3.1. Ár eas de um Pr ogr ama ADVPL

Apesar de não ser uma li nguagem de padr ões rígi dos com rel ação à est rut ura do programa, é
i mport ant e i dent i fi car al gumas de suas part es. Consi der e o pr ograma de exempl o abai xo:

# i ncl ude prot heus. ch

/ *
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| Pr ograma: Cál cul o do Fat ori al |
| Aut or : Mi cr osi ga Soft ware S.A. |
| Dat a : 02 de out ubr o de 2001 |
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
* /

User Funct i on Cal cFat or ( )

Local nCnt
Local nResul t ado : = 1 / / Resul t ado do fat ori al
Local nFat or : = 5 / / Númer o para o cál cul o

/ / Cál cul o do fat ori al
For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

/ / Exi be o r esul t ado na t el a, at ravés da função al ert
Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ;
" é " + cVal ToChar( nResul t ado) )

/ / Termi na o pr ograma
Ret urn

A est rut ura de um pr ogr ama ADVPL é compost a pel as segui nt es áreas:

E Área de I dent i fi cação
- Decl aração dos i ncl udes
- Decl aração da função
- I dent i fi cação do pr ogr ama

E Área de Aj ust es I ni ci ai s
- Decl aração das vari ávei s

E Corpo do Programa
- Preparação para o processament o
- Processament o

E Área de Encer rament o

- 29 -

ADVPL Compl et o



Ár ea de I dent i f i cação

Est a é uma área que não é obri gat óri a e é dedi cada a document ação do programa. Quando
exi st ent e, cont ém apenas coment ári os expl i cando a sua finali dade, dat a de cri ação, aut or , et c. ,
e aparece no começo do programa, ant es de qual quer li nha de comando.

O format o para est a área não é defi ni do. Pode- se col ocar qual quer t i po de i nformação
desej ada e escol her a format ação apr opri ada.

# i ncl ude “ prot heus.ch”

/ *
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
| Pr ograma: Cál cul o do Fat ori al |
| Aut or : Mi cr osi ga Soft ware S.A. |
| Dat a : 02 de out ubr o de 2001 |
+ = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = +
* /

User Funct i on Cal cFat or ( )


Opci onal ment e podem- se i nclui r defi ni ções de const ant es ut ili zadas no programa ou i nclusão
de arqui vos de cabeçal ho nest a ár ea.

Ár ea de Aj u st es I ni ci ai s

Nest a área geral ment e se fazem os aj ust es i ni ci ai s, i mport ant es para o cor ret o funci onament o
do programa. Ent re os aj ust es se encont ram decl arações de vari ávei s, i ni ci ali zações, abert ura
de arqui vos, et c. Apesar do ADVPL não ser uma li nguagem rígi da e as vari ávei s poderem ser
decl aradas em qual quer l ugar do programa, é aconsel hável fazê- l o nest a área vi sando t ornar o
códi go mai s l egível e facili t ar a i dent i fi cação de vari ávei s não ut ili zadas.

Local nCnt
Local nResul t ado : = 0 / / Resul t ado do fat ori al
Local nFat or : = 10 / / Número para o cál cul o

Cor po do Pr ogr ama

É nest a ár ea que se encont ram as l inhas de códi go do pr ograma. É onde se real i za a t arefa
necessári a at ravés da organi zação l ógi ca dest as li nhas de comando. Espera- se que as l i nhas de
comando est ej am organizadas de t al modo que no fi nal dest a área o resul t ado esperado sej a
obt i do, sej a el e armazenado em um arqui vo ou em vari ávei s de memóri a, pront o par a ser
exi bi do ao usuári o at ravés de um r el at óri o ou na t el a.

/ / Cál cul o do fat ori al
For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

- 30 -

ADVPL Compl et o



A preparação para o pr ocessament o é formada pel o conj unt o de vali dações e processament os
necessári os ant es da r eali zação do pr ocessament o em si .

Avali ando o processament o do cál cul o do fat orial descri t o ant eri orment e, pode- se defi ni r que a
vali dação i ni ci al a ser r eali zada é o cont eúdo da vari ável nFat or, poi s a mesma det ermi nará a
corr et a execução do códi go.


/ / Cál cul o do fat ori al
nFat or : = Get Fat or( )
/ / Get Fat or – função il ust rat i va na qual a vari ável recebe a i nformação do usuári o.

I f nFat or < = 0
Al ert ( “ I nformação i nválida” )
Ret urn
Endi f

For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt


Ár ea de Encer r ament o

É nest a área onde as fi nalizações são efet uadas. É onde os arqui vos abert os são fechados, e o
resul t ado da execução do pr ogr ama é ut ili zado. Pode- se exi bi r o r esult ado armazenado em
uma vari ável ou em um arqui vo ou si mpl esment e fi nali zar, caso a t arefa j á t enha si do t oda
compl et ada no corpo do programa. É nest a área que se encont r a o encerrament o do
programa. Todo programa em ADVPL deve sempre t ermi nar com a pal avra chave r et urn.

/ / Exi be o r esul t ado na t el a, at ravés da função al ert
Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ;
" é " + cVal ToChar( nResul t ado) )

/ / Termi na o pr ograma
Ret urn










- 31 -

ADVPL Compl et o



4. Decl ar ação e At r i bui ção de Var i áv ei s

4.1. Ti po de Dados

O ADVPL não é uma li nguagem de t i pos rígidos ( st rongl y t yped) , o que si gni fi ca que vari ávei s
de memóri a podem r eceber di fer ent es t i pos de dados durant e a execução do programa.

As vari ávei s podem t ambém cont er obj et os, mas os t i pos pri mári os da l i nguagem são:

Numér i co

O ADVPL não di fer enci a val ores i nt ei ros de val ores com pont o fl ut uant e, port ant o podem- se
cri ar vari ávei s numéri cas com qual quer val or dent ro do i nt erval o permi t i do. Os segui nt es
el ement os são do t i po de dado numéri co:

2
43.53
0.5
0.00001
1000000

Uma vari ável do t i po de dado numéri co pode cont er um númer o de dezoi t o dígi t os i ncl uindo o
pont o fl ut uant e, no i nt erval o de 2.2250738585072014 E–308 at é 1.7976931348623158
E+ 308.

Lógi co

Val ores l ógi cos em ADVPL são i dent i fi cados at r avés de .T. ou .Y. para verdadei ro e .F. ou .N.
para fal so ( i ndependent ement e se os caract er es est i ver em em mai úscul o ou mi núscul o) .

Car act er e

St ri ngs ou cadei as de caract er es são i dent i fi cadas em ADVPL por bl ocos de t ext o ent r e aspas
dupl as ( ") ou aspas si mpl es ( ' ) :

"Ol á mundo! "
' Est a é uma st ri ng'
"Est a é ' out ra' st ri ng"

Uma vari ável do t i po caract er e pode cont er st ri ngs com no máxi mo 1 MB, ou sej a, 1048576
caract eres.

Dat a

O ADVPL t em um t i po de dados específi co para dat as. I nt ernament e as vari ávei s dest e t i po de
dado são armazenadas como um número cor respondent e a dat a Jul i ana.

Vari ávei s do t i po de dados Dat a não podem ser decl aradas di ret ament e, e si m at ravés da
ut ili zação de funções específi cas como por exempl o CTOD( ) que convert e uma st ri ng para
dat a.

- 32 -

ADVPL Compl et o



Ar r ay

O Ar ray é um t i po de dado especi al . É a di sposi ção de out r os el ement os em col unas e li nhas. O
ADVPL suport a ar rays uni di mensi onai s ( vet or es) ou mul t i di mensi onai s ( mat ri zes) . Os
el ement os de um arr ay são acessados at r avés de índi ces numéri cos i ni ci ados em 1,
i dent i fi cando a li nha e col una para quant as di mensões exi st i rem.

Arrays devem ser ut ilizadas com caut el a, poi s se forem mui t o grandes podem exauri r a
memóri a do servi dor.

Bl oco de Códi go

O bl oco de códi go é um t i po de dado especi al . É ut ilizado para armazenar i nst ruções escri t as
em ADVPL que poderão ser execut adas post eri orment e.


4.2. Decl ar ação de v ar i ávei s

Vari ávei s de memóri a são um dos r ecursos mai s i mport ant es de uma linguagem. São ár eas de
memóri a cri adas para armazenar i nformações ut ili zadas por um progr ama para a execução de
t arefas. Por exempl o, quando o usuári o di gi t a uma i nformação qual quer , como o nome de um
produt o, em uma t el a de um programa est a informação é armazenada em uma vari ável de
memóri a para post eri or ment e ser gravada ou i mpressa.

A part i r do moment o que uma vari ável é cri ada, não é necessári o mai s se r efer enci ar ao seu
cont eúdo, e si m ao seu nome.

O nome de uma vari ável é um i dent i fi cador úni co o qual deve r espei t ar um máx i mo de 1 0
car act er es. O ADVPL não i mpede a cri ação de uma vari ável de memór i a cuj o nome cont enha
mai s de 10 caract er es, por ém apen as os 10 pr i mei r os ser ão consi der ados para a
l ocalização do cont eúdo armazenado.

Port ant o se forem cri adas duas vari ávei s cuj os 10 pri mei ros car act er es for em i guai s, como
nTot al Geral Anual e nTot al Geral Mensal , as refer ênci as a qual quer uma del as no pr ograma
resul t arão o mesmo, ou sej a, serão a mesma vari ável :

nTot al Geral Mensal : = 100
nTot al Geral Anual : = 300
Al ert ( "Val or mensal : " + cVal ToChar( nTot al Geral Mensal ) )

Quando o cont eúdo da vari ável nTot al Geral Mensal é exi bi do, o seu val or será de 300. I sso
acont ece porque no moment o que esse val or foi at ri buído à vari ável nTot al Geral Anual , o
ADVPL consi der ou apenas os 10 pri mei ros caract er es ( assi m como o faz quando deve exi bi r o
val or da vari ável nTot alGeral Mensal ) , ou sej a, consi der ou- as como a mesma vari ável . Assi m o
val or ori ginal de 100 foi subst i t uído pel o de 300.


- 33 -

ADVPL Compl et o



4.3. Escopo de var i áv ei s

O ADVPL não é uma linguagem de t i pos rígidos para vari ávei s, ou sej a, não é necessári o
i nformar o t i po de dados que det ermi nada variável i rá cont er no moment o de sua decl aração,
e o seu val or pode mudar durant e a execução do pr ograma.

Também não há necessi dade de decl arar vari ávei s em uma seção específi ca do seu códi go
font e, embora sej a aconsel hável decl arar t odas as vari ávei s necessári as no começo, t ornando
a manut enção mai s fáci l e evi t ando a decl aração de vari ávei s desnecessári as.

Para decl arar uma vari ável deve- se ut ili zar um ident ificador de escopo. Um i dent i fi cador de
escopo é uma pal avra chave que i ndi ca a que cont ext o do pr ograma a vari ável decl arada
pert ence. O cont ext o de vari ávei s pode ser l ocal ( vi suali zadas apenas dent r o do pr ograma
at ual) , público ( vi sualizadas por qual quer out ro programa) , ent r e out r os.

O Cont ex t o de Var i áv ei s dent r o de um Pr ogr ama

As vari ávei s decl aradas em um programa ou função, são vi sívei s de acordo com o escopo onde
são defi nidas. Como t ambém do escopo depende o t empo de exi st ênci a das vari ávei s. A
defi ni ção do escopo de uma vari ável é efet uada no moment o de sua decl aração.

Local nNumero : = 10

Est a li nha de códi go decl ara uma vari ável chamada nNumero i ndi cando que pert ence seu
escopo é l ocal .

Os i dent i fi cador es de escopo são:

E Local
E St at i c
E Pri vat e
E Publi c

O ADVPL não é rígi do em rel ação à decl aração de vari ávei s no começo do programa. A i nclusão
de um i dent i fi cador de escopo não é necessári o para a decl aração de uma vari ável , cont ant o
que um val or l he sej a at ri buído.

nNumer o2 : = 15

Quando um val or é at r i buído à uma vari ável em um programa ou função, o ADVPL cri ará a
vari ável caso el a não t enha si do decl arada ant eri orment e. A vari ável ent ão é cri ada como se
t i vesse si do decl arada como Pri vat e.

Devi do a essa caract eríst i ca, quando se pret ende fazer uma at ri bui ção a uma vari ável
decl arada pr evi ament e mas escr eve- se o nome da vari ável de forma i ncorr et a, o ADVPL não
gerará nenhum err o de compil ação ou de execução. Poi s compr eenderá o nome da vari ável
escri t o de forma i ncorr et a como se fosse a cri ação de uma nova vari ável . I st o al t erará a l ógi ca
do pr ograma, e é um er ro mui t as vezes di fícil de i dent i fi car.



- 34 -

ADVPL Compl et o



Var i áv ei s de escopo l ocal

Vari ávei s de escopo l ocal são pert encent es apenas ao escopo da função onde foram decl aradas
e devem ser expli ci t ament e decl aradas com o i dent i fi cador LOCAL, como no exempl o:


Funct i on Pai ( )
Local nVar : = 10, aMat r i z : = { 0,1,2,3}
.
< comandos>
.
Filha( )
.
< mai s comandos>
.
Ret urn( .T.)


Nest e exempl o, a vari ável nVar foi decl arada como l ocal e at ri buída com o val or 10. Quando a
função Fil ha é execut ada, nVar ainda exi st e mas não pode ser acessada. Quando a execução
da função Pai t ermi nar, a vari ável nVar é dest r uída. Qual quer vari ável com o mesmo nome no
programa que chamou a função Pai não é afet ada.

Vari ávei s de escopo l ocal são cri adas aut omat i cament e cada vez que a função onde for em
decl aradas for at i vada. El as cont i nuam a exi st i r e mant êm seu val or at é o fi m da at i vação da
função ( ou sej a, at é que a função r et orne o cont rol e para o códi go que a execut ou) . Se uma
função é chamada r ecursi vament e ( por exempl o, chama a si mesma) , cada chamada em
recursão cri a um novo conj unt o de vari ávei s l ocai s.

A vi si bilidade de vari ávei s de escopo l ocai s é i dênt i ca ao escopo de sua decl aração, ou sej a, a
vari ável é vi sível em qual quer l ugar do códi go font e em que foi decl arada. Se uma função é
chamada r ecursi vament e, apenas as vari ávei s de escopo l ocal cri adas na mai s r ecent e at i vação
são vi sívei s.

Var i áv ei s de escopo st at i c

Vari ávei s de escopo st at i c funci onam basi cament e como as vari ávei s de escopo l ocal , mas
mant êm seu val or at ravés da execução e devem ser decl aradas expl i ci t ament e no códi go com
o i dent i fi cador STATI C.

O escopo das vari ávei s st at i c depende de onde são decl aradas. Se for em decl aradas dent r o do
corpo de uma função ou procedi ment o, seu escopo será l i mit ado àquel a rot i na. Se forem
decl aradas for a do corpo de qual quer rot i na, seu escopo afet a a t odas as funções decl aradas
no font e.

- 35 -

ADVPL Compl et o



Nest e exempl o, a vari ável nVar é decl arada como st at i c e i ni ci ali zada com o val or 10:

Funct i on Pai ( )
St at i c nVar : = 10
.
< comandos>
.
Filha( )
.
< mai s comandos>
.
Ret ur n( .T.)

Quando a função Fil ha é execut ada, nVar ai nda exi st e mas não pode ser acessada. Di fer ent e
de vari ávei s decl aradas como LOCAL ou PRI VATE, nVar cont i nua a exist i r e mant êm seu val or
at ual quando a execução da função Pai t ermina. Ent ret ant o, soment e pode ser acessada por
execuções subseqüent es da função Pai .

Var i áv ei s de escopo pr i v at e

A decl aração é opci onal para vari ávei s pri vadas. Mas podem ser decl aradas expl i ci t ament e com
o i dent i fi cador PRI VATE.

Adi ci onal ment e, a at ri bui ção de val or a uma vari ável não cri ada ant eri orment e
aut omat i cament e cri a a vari ável como pri vada. Uma vez cri ada, uma vari ável pri vada cont i nua
a exi st i r e mant ém seu val or at é que o programa ou função onde foi cri ada t ermi ne ( ou sej a,
at é que a função onde foi cri ada ret orne para o códi go que a execut ou) . Nest e moment o, é
aut omat i cament e dest r uída.

É possível cri ar uma nova vari ável pri vada com o mesmo nome de uma vari ável j á exi st ent e.
Ent ret ant o, a nova ( dupli cada) vari ável pode apenas ser cri ada em um nível de at i vação
i nferi or ao nível onde a vari ável foi decl arada pel a pri mei ra vez ( ou sej a, apenas em uma
função chamada pel a função onde a vari ável j á havi a si do cri ada) . A nova vari ável pri vada i rá
esconder qual quer out r a vari ável pri vada ou públi ca ( vej a a document ação sobr e vari ávei s
públi cas) com o mesmo nome enquant o exi st i r.

Uma vez cri ada, uma vari ável pri vada é visível em t odo o pr ogr ama enquant o não for
dest ruída aut omat i cament e quando a rot i na que a cri ou t ermi nar ou uma out ra vari ável
pri vada com o mesmo nome for cri ada em uma subfunção chamada ( nest e caso, a vari ável
exi st ent e t orna- se i nacessível at é que a nova vari ável pri vada sej a dest r uída) .
Em t ermos mai s si mpl es, uma vari ável pri vada é vi sível dent ro da função de cri ação e t odas as
funções chamadas por est a, a menos que uma função chamada cri e sua pr ópri a vari ável
pri vada com o mesmo nome.


- 36 -

ADVPL Compl et o



Por ex empl o:


Funct i on Pai ( )
Pri vat e nVar : = 10
< comandos>
.
Filha( )
< mai s comandos>
.
Ret ur n( .T.)


Nest e exempl o, a vari ável nVar é cri ada com escopo pri vat e e i ni ci ali zada com o val or 10.
Quando a função Fi lha é execut ada, nVar ai nda exi st e e, di ferent e de uma vari ável de escopo
l ocal , pode ser acessada pel a função Fil ha. Quando a função Pai t erminar, nVar será dest ruída
e qual quer decl aração de nVar ant eri or se t ornará acessível novament e.


No ambi ent e ERP Pr ot heus, exi st e uma convenção adi ci onal a qual deve ser
respei t ada que vari ávei s em uso pel a apli cação não sej am i ncorr et ament e
mani pul adas. Por est a convenção deve ser adi ci onado o caract er “ _” ant es
do nome de vari ávei s PRI VATE e PUBLI C. Mai ores i nformações avali ar o
t ópi co: Boas Prát i cas de Pr ogramação.

Ex empl o: Pri vat e _dDat a


Var i áv ei s de escopo publ i c

Podem- se cri ar vari ávei s de escopo publi c di nami cament e no códi go com o i dent i fi cador
PUBLI C. As vari ávei s dest e escopo cont i nuam a exi st i r e mant êm seu val or at é o fi m da
execução da t hread ( conexão) .

É possível cri ar uma vari ável de escopo pri vat e com o mesmo nome de uma vari ável de escopo
publi c exi st ent e, ent r et ant o, não é permi t ido cri ar uma vari ável de escopo publi c com o mesmo
nome de uma vari ável de escopo pri vat e exi st ent e.

Uma vez cri ada, uma vari ável de escopo publi c é vi sível em t odo o programa onde foi
decl arada at é que sej a escondida por uma vari ável de escopo pri vat e cri ada com o mesmo
nome. A nova vari ável de escopo pri vat e cri ada esconde a vari ável de escopo publi c exi st ent e,
e est a se t ornará i nacessível at é que a nova var i ável pri vat e sej a dest ruída. Por exempl o:


Funct i on Pai ( )
Publi c nVar : = 10
< comandos>
.
Filha( )
< mai s comandos>
.
Ret ur n( .T.)



- 37 -

ADVPL Compl et o


Nest e exempl o, nVar é cri ada como publi c e i nici ali zada com o val or 10. Quando a função Fi l ha
é execut ada, nVar ai nda exi st e e pode ser acessada. Di fer ent e de vari ávei s l ocai s ou pri vat es,
nVar ai nda exi st e após o t érmi no da a execução da função Pai .

Di ferent ement e dos out ros i dent i fi cadores de escopo, quando uma var i ável é decl arada como
públi ca sem ser i ni ci ali zada, o val or assumi do é fal so ( .F.) e não nul o ( nil) .


No ambi ent e ERP Pr ot heus, exi st e uma convenção adi ci onal a qual deve ser
respei t ada que vari ávei s em uso pel a apli cação não sej am i ncorr et ament e
mani pul adas. Por est a convenção deve ser adi ci onado o caract er “ _” ant es
do nome de vari ávei s PRI VATE e PUBLI C. Mai ores i nformações avali ar o
t ópi co: Boas Prát i cas de Pr ogramação.

Ex empl o: Publ i c _cRot ina


4.4. Ent endendo a i nf l uênci a do escopo das var i áv ei s

Consi der e as li nhas de códi go de exempl o:


nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )


Se est a l inha for execut ada em um programa ADVPL, ocorr erá um err o de execução com a
mensagem "vari abl e does not exi st : nPercent ual ", poi s est a vari ável est á sendo ut ili zada em
uma expr essão de cál cul o sem t er si do decl arada. Para sol uci onar est e er ro, deve- se decl arar a
vari ável previ ament e:


Local nPercent ual , nResult ado
nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )


Nest e exempl o, as vari ávei s são decl aradas pr evi ament e ut ilizando o i dent i fi cador de escopo
local. Quando a li nha de cál cul o for execut ada, o er ro de vari ável não exi st ent e, não mai s
ocor rerá. Por ém vari ávei s não i ni ci alizadas t êm sempr e o val or default nul o ( Nil ) e est e val or
não pode ser ut ili zado em um cál cul o poi s t ambém gerará err os de execução ( nul o não pode
ser di vi dido por 100) . A resol ução dest e pr obl ema é efet uada i nici ali zando- se a vari ável
at ravés de uma das for mas:


Local nPercent ual , nResult ado
nPer cent ual : = 10
nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )

ou

Local nPercent ual : = 10, nResul t ado
nResul t ado : = 250 * ( 1 + ( nPercent ual / 100) )

A di ferença ent re o úl t i mo exempl o e os doi s ant eri or es é que a vari ável é i ni ci ali zada no
moment o da decl aração. Em ambos os exempl os, a vari ável é pri mei ro decl arada e ent ão
i ni ci alizada em uma out ra l inha de códi go.


- 38 -

ADVPL Compl et o


É aconsel hável opt ar pel o operador de at ri bui ção compost o de doi s pont os e si nal de i gual , poi s
o operador de at ri bui ção ut ilizando soment e o si nal de igual pode ser faci l ment e confundi do
com o operador r el aci onal ( para comparação) durant e a cri ação do programa.

4.5. Oper ações com Var i ávei s


4.5.1. At r i bui ção de var i ávei s

Uma vez que um val or l he sej a at ri buído, o t ipo de dado de uma vari ável é i gual ao t i po de
dado do val or at ri buído. Ou sej a, uma vari ável passa a ser numéri ca se um númer o l he é
at ri buído, passa a ser caract ere se uma st ri ng de t ext o l he for at ri buída, et c. Por ém mesmo
que uma vari ável sej a de det ermi nado t i po de dado, pode- se mudar o t i po da vari ável
at ri bui ndo out ro t i po a el a:

01 Local xVari avel / / Decl ara a vari ável i ni ci al ment e com val or nul o
02
03 xVari avel : = "Agora a vari ável é caract er e.. . "
04 Al ert ( "Val or do Text o: " + xVari avel )
05
06 xVari avel : = 22 / / Agora a vari ável é numér i ca
07 Al ert ( cVal ToChar( xVari avel ) )
08
09 xVari avel : = .T. / / Agora a vari ável é l ógi ca
10 I f xVari avel
11 Al ert ( "A vari ável t em val or verdadei ro.. .")
12 El se
13 Al ert ( "A vari ável t em val or fal so. ..")
14 Endi f
15
16 xVari avel : = Dat e( ) / / Agora a vari ável é dat a
17 Al ert ( "Hoj e é: " + Dt oC( xVari avel ) )
18
19 xVari avel : = nil / / Nul o novament e
20 Al ert ( "Val or nul o: " + xVari avel )
21
22 Ret urn

No programa de exempl o ant eri or, a vari ável xVari avel é ut i lizada para armazenar di ver sos
t i pos de dados. A l et ra "x" em mi núscul o no começo do nome é ut ili zada para indi car uma
vari ável que pode cont er di versos t i pos de dados, segundo a Not ação Húngara ( consul t e
document ação específi ca para det al hes) . Est e programa t r oca os val ores da vari ável e exi be
seu cont eúdo para o usuári o at ravés da função ALERT( ) . Essa função r ecebe um parâmet r o
que deve ser do t i po st ri ng de caract ere, por i sso dependendo do t i po de dado da vari ável
xVari avel é necessári o fazer uma conversão ant es.

Apesar dessa fl exi bili dade de ut i lização de vari ávei s, devem- se t omar cui dados na passagem
de parâmet r os para funções ou comandos, e na concat enação ( ou soma) de val or es. Not e a
linha 20 do programa de exempl o. Quando est a li nha é execut ada, a vari ável xVari avel cont ém
o val or nul o. A t ent at i va de soma de t i pos de dados di fer ent es ger a er r o de execução do
programa. Nest a l inha do exempl o, ocorr er á um err o com a mensagem "t ype mi smat ch on + " .

Excet uando- se o caso do val or nul o, para os demai s devem ser ut i lizadas funções de
conver são quando é necessári o concat enar t i pos de dados di fer ent es ( por exempl o, nas li nhas
07 e 17.

- 39 -

ADVPL Compl et o



Not e t ambém que quando uma vari ável é do t i po de dado l ógi co, el a pode ser ut ilizada
di ret ament e para checagem ( l inha 10) :

I f xVari avel
é o mesmo que
I f xVari avel = .T.


4.5.2. Oper ador es da l i nguagem ADVPL

Oper ador es comuns

Na document ação sobr e vari ávei s há uma breve demonst ração de como at ri bui r val ores a uma
vari ável da forma mai s si mpl es. O ADVPL ampli a si gni fi cat i vament e a ut ili zação de vari ávei s
at ravés do uso de expr essões e funções.

Uma expressão é um conj unt o de operadores e oper andos cuj o r esul t ado pode ser at ri buído a
uma vari ável ou ent ão anali sado para a t omada de deci sões. Por exempl o:

Local nSal ari o : = 1000, nDescont o : = 0.10
Local nAument o, nSal Liquido
nAument o : = nSal ari o * 1.20
nSal Li quido : = nAument o * ( 1- nDescont o)


Nest e exempl o são ut ili zadas al gumas expr essões para cal cul ar o sal ári o líquido após um
aument o. Os operandos de uma expr essão podem ser uma vari ável , uma const ant e, um
campo de arqui vo ou uma função.


Oper ador es Mat emát i cos

Os operador es ut ilizados em ADVPL para cál culos mat emát i cos são:

+ Adi ção
- Subt ração
* Mul t ipli cação
/ Di vi são
* * ou ^ Exponenci ação
% Módul o ( Rest o da Di vi são)


Oper ador es de St r i n g

Os operador es ut ilizados em ADVPL para t rat ament o de caract eres são:

+ Concat enação de st ri ngs ( uni ão)
- Concat enação de st ri ngs com el i minação dos brancos fi nai s das st ri ngs
i nt ermedi ári as
$ Comparação de Subst ri ngs ( cont i do em)


- 40 -

ADVPL Compl et o



Oper ador es Rel aci on ai s

Os operador es ut ilizados em ADVPL para operações e avali ações r el acionai s são:

< Comparação Menor
> Comparação Mai or
= Comparação I gual
= = Comparação Exat ament e I gual ( para caract er es)
< = Comparação Menor ou I gual
> = Comparação Mai or ou I gual
< > ou #
ou ! =
Comparação Di fer ent e


Oper ador es Lógi cos

Os operador es ut ilizados em ADVPL para operações e avali ações l ógi cas são:

.And. E l ógi co
.Or . OU l ógi co
.Not . ou ! NÃO l ógi co


Oper ador es de At r i bu i ção

Os operador es ut ilizados em ADVPL para at ri buição de val ores a vari ávei s de memóri a são:

: = At ri bui ção Si mpl es
+ = Adi ção e At ri bui ção em Li nha
- = Subt ração e At ri bui ção em Li nha
* = Mul t ipli cação e At ri bui ção em Li nha
/ = Di vi são e At ri bui ção em Li nha
* * = ou
^ =
Exponenci ação e At ri buição em Li nha
% = Módul o ( rest o da di vi são) e At ri bui ção em Li nha


E At r i bu i ção Si mpl es

O si nal de i gualdade é ut ilizado para at ri bui r valor a uma vari ável de memóri a.
nVari avel : = 10


E At r i bu i ção em Li nh a

O operador de at ri bui ção em li nha é caract eri zado por doi s pont os e o si nal de i gual dade. Tem
a mesma função do si nal de i gualdade sozi nho, por ém apl i ca a at ri bui ção às vari ávei s. Com el e
pode- se at ri bui r mai s de uma vari ável ao mesmo t empo.

nVar1 : = nVar2 : = nVar 3 : = 0


- 41 -

ADVPL Compl et o


Quando di versas vari ávei s são i ni ci ali zadas em uma mesma li nha, a at ri bui ção começa da
di rei t a para a esquerda, ou sej a, nVar3 recebe o val or zer o i ni ci alment e, nVar2 r ecebe o
cont eúdo de nVar3 e nVar1 r ecebe o cont eúdo de nVar2 por fi nal .

Com o operador de at ri bui ção em l i nha, pode- se subst i t ui r as i ni ci alizações i ndi vi duai s de cada
vari ável por uma i ni ci alização apenas:

Local nVar1 : = 0, nVar2 : = 0, nVar3 : = 0
por
Local nVar1 : = nVar2 : = nVar3 : = 0

O operador de at ri bui ção em li nha t ambém pode ser ut ili zado para subst i t ui r val ores de
campos em um banco de dados.

E At r i bu i ção Compost a

Os operador es de at r i bui ção compost a são uma facilidade da linguagem ADVPL para
expr essões de cál cul o e at ri bui ção. Com el es pode- se economi zar di gi t ação:

Oper ador Ex empl o Equi v al ent e a
+ = X + = Y X = X + Y
- = X - = Y X = X - Y
* = X * = Y X = X * Y
/ = X / = Y X = X / Y
* * = ou ^ = X * * = Y X = X * * Y
%= X %= Y X = X % Y

Oper ador es de I ncr ement o/ Decr ement o

A li nguagem ADVPL possui operador es para r eali zar i ncrement o ou decrement o de vari ávei s.
Ent ende- se por i ncrement o aument ar o val or de uma vari ável numéri ca em 1 e ent ende- se por
decrement o di mi nui r o val or da vari ável em 1. Os operador es são:

+ + I ncrement o Pós ou Pré- fi xado
- - Decrement o Pós ou Pré- fi xado

Os operador es de decr ement o/ i ncrement o podem ser col ocados t ant o ant es ( pr é- fi xado) como
depoi s ( pós- fi xado) do nome da vari ável . Dent ro de uma expressão, a ordem do operador é
mui t o i mport ant e, podendo al t erar o r esul t ado da expr essão. Os oper ador es i ncrement ai s são
execut ados da esquerda para a di rei t a dent ro de uma expressão.

Local nA : = 10
Local nB : = nA+ + + nA

O val or da vari ável nB r esul t a em 21, poi s a pri mei ra r efer ênci a a nA ( ant es do + + ) cont i nha o
val or 10 que foi consi derado e i medi at ament e aument ado em 1. Na segunda refer ênci a a nA,
est e j á possuía o val or 11. O que foi efet uado foi a soma de 10 mai s 11, i gual a 21. O
resul t ado fi nal após a execução dest as duas l i nhas é a vari ável nB cont endo 21 e a vari ável nA
cont endo 11.

No ent ant o:

Local nA : = 10
Local nB : = + + nA + nA


- 42 -

ADVPL Compl et o


Resul t a em 22, poi s o operador i ncrement al aument ou o val or da primei ra nA ant es que seu
val or fosse consi derado.

Oper ador es Especi ai s

Al ém dos operador es comuns, o ADVPL possui al guns out ros operador es ou i dent i fi cadores.
Est as são suas fi nali dades:


( ) Agrupament o ou Função
[ ] El ement o de Mat ri z
{ } Defi ni ção de Mat ri z, Const ant e ou Bl oco de Códi go
- > I dent i fi cador de Apeli do
& Macr o subst i t ui ção
@ Passagem de parâmet ro por r efer ênci a
| | Passagem de parâmet ro por val or

- Os parênt eses são ut ilizados para agrupar el ement os em uma expr essão mudando a
ordem de precedênci a da avali ação da expressão ( segundo as r egras mat emát i cas por
exempl o) . Também ser vem para envol ver os argument os de uma função.

- Os col chet es são ut ilizados para especi fi car um el ement o específi co de uma mat ri z. Por
exempl o, A[ 3,2] , refer e- se ao el ement o da mat ri z A na linha 3, col una 2.

- As chaves são ut ili zadas para a especi fi cação de mat ri zes li t erai s ou bl ocos de códi go.
Por exempl o, A: = { 10,20,30} cri a uma mat ri z chamada A com t r ês el ement os.

- O símbol o - > i dent i fi ca um campo de um arquivo di fer enci ando- o de uma vari ável . Por
exempl o, FUNC- > nome refere- se ao campo nome do arqui vo FUNC. Mesmo que exi st a uma
vari ável chamada nome, é o campo nome que será acessado.

- O símbol o & i dent i fi ca uma aval i ação de expressão at ravés de macro e é vi st o em
det al hes na document ação sobr e macr o subst i t ui ção

.
- O símbol o @ é ut ili zado para i ndi car que durant e a passagem de uma vari ável para uma
função ou pr ocedi ment o el a sej a t omada como uma refer ênci a e não como val or .

- O símbol o | | é ut i lizado para i ndi car que durant e a passagem de uma vari ável para
uma função ou pr ocedi ment o el a sej a t omada como um e val or não como referênci a.

- 43 -

ADVPL Compl et o



Or dem de Pr ecedênci a dos Oper ador es

Dependendo do t i po de operador , exi st e uma ordem de pr ecedênci a para a avali ação dos
operandos. Em pri ncípio, t odas as operações com os operador es, são r eali zadas da esquer da
para a di rei t a se el es t i ver em o mesmo nível de pri ori dade.

A ordem de precedênci a, ou nível de pri ori dade de execução, dos operador es em ADVPL é:

1. Operador es de I ncr ement o/ Decrement o pr é- fi xado
2. Operador es de St ri ng
3. Operador es Mat emát i cos
4. Operador es Rel aci onai s
5. Operador es Lógi cos
6. Operador es de At ri bui ção
7. Operador es de I ncr ement o/ Decrement o pós- fi xado

Em expr essões compl exas com di ferent es t i pos de operador es, a avali ação segui rá essa
seqüênci a. Caso exi st a mai s de um operador do mesmo t i po ( ou sej a, de mesmo nível ) , a
avali ação se dá da esquerda para di rei t a. Para os operador es mat emát i cos ent r et ant o, há uma
precedênci a a segui r:

1. Exponenci ação
2. Mul t ipli cação e Di vi são
3. Adi ção e Subt ração

Consi der e o exempl o:

Local nResul t ado : = 2+ 10/ 2+ 5* 3+ 2^ 3

O r esul t ado dest a expr essão é 30, poi s pri mei rament e é cal cul ada a exponenci ação 2^ 3( = 8) ,
ent ão são cal cul adas as mul t i pli cações e di vi sões 10/ 2( = 5) e 5* 3( = 15) , e fi nal ment e as
adi ções resul t ando em 2+ 5+ 15+ 8( = 30) .

E Al t er ação da Pr ecedênci a

A ut ilização de parênt eses dent r o de uma expressão al t era a ordem de pr ecedênci a dos
operadores. Operandos ent re par ênt eses são anali sados ant es dos que se encont ram fora dos
parênt eses. Se exi st i rem mai s de um conj unt o de parênt eses não- ani nhados, o grupo mai s a
esquerda será avali ado pri mei ro e assi m sucessi vament e.

Local nResul t ado : = ( 2+ 10) / ( 2+ 5) * 3+ 2^ 3

No exempl o aci ma pri mei ro será cal cul ada a exponenci ação 2^ 3( = 8) . Em segui da 2+ 10( = 12)
será cal cul ado, 2+ 5( = 7) cal cul ado, e fi nal ment e a di vi são e a mul t i pli cação serão efet uadas, o
que r esul t a em 12/ 7* 3+ 8( = 13.14) .

Se exi st i rem vári os par ênt eses ani nhados, ou sej a, col ocados um dent ro do out r o, a aval i ação
ocor rerá do parênt eses mai s int ero em di reção ao mai s ext erno.







- 44 -

ADVPL Compl et o



4.5.3. Oper ação de Macr o Subst i t ui ção

O operador de macr o subst i t ui ção, si mbolizado pel o "e" comer ci al ( &) , é ut ili zado para a
avali ação de expressões em t empo de execução. Funci ona como se uma expressão
armazenada fosse compil ada em t empo de execução, ant es de ser de fat o execut ada.

Consi der e o exempl o:

01 X : = 10
02 Y : = " X + 1"
03 B : = &Y / / O cont eúdo de B será 11

A vari ável X é at ri buída com o val or 10, enquant o a vari ável Y é at ri buída com a st ri ng de
caract eres cont endo "X + 1".

A t er cei ra li nha ut iliza o operador de macro. Est a li nha faz com que o númer o 11 sej a at ri buído
à vari ável B. Pode- se per ceber que esse é o val or r esul t ant e da expressão em format o de
caract ere cont i da na vari ável Y.

Ut ilizando- se uma t écnica mat emát i ca el ement ar, a subst i t ui ção, t emos que na segunda li nha,
Y é defi ni do como "X + 1", ent ão pode- se subst i t ui r Y na t ercei ra li nha:

03 B : = &"X + 1"
O operador de macr o cancel a as aspas:
03 B : = X + 1

Pode- se per ceber que o operador de macro r emove as aspas, o que dei xa um pedaço de
códi go para ser execut ado. Deve- se t er em ment e que t udo i sso acont ece em t empo de
execução, o que t orna t udo mui t o dinâmi co. Uma ut ilização i nt eressant e é cri ar um t i po de
cal cul adora, ou aval i ador de fórmul as, que det ermi na o r esul t ado de al go que o usuári o di gi t a.

O operador de macro t em uma li mit ação: vari ávei s refer enci adas dent ro da st ri ng de
caract eres ( X nos exempl os ant eri or es) não podem ser l ocai s.













- 45 -

ADVPL Compl et o



4.5.4. Funções de mani pul ação de v ar i ávei s

Al ém de at ri bui r, cont r ol ar o escopo e macro execut ar o cont eúdo das vari ávei s é necessári o
mani pul ar seu cont eúdo at ravés de funções específi cas da li nguagem para cada si t uação.

As operações de mani pul ação de cont eúdo mai s comuns em pr ogramação são:

E Conversões ent r e t i pos de vari ávei s
E Mani pulação de st ri ngs
E Mani pulação de vari áveis numéri cas
E Veri fi cação de t i pos de vari ávei s
E Mani pulação de ar rays
E Execução de bl ocos de códi go

Nest e t ópi co serão abordadas as conversões ent re t i pos de variávei s e as funções de
mani pul ação de st ri ngs e vari ávei s numéri cas.


Conv er sões ent r e t i pos de v ar i áv ei s

As funções mai s ut ili zadas nas operações ent r e conver são ent r e t i pos de vari ávei s são:

´ CTOD( )
´ CVALTOCHAR( )
´ DTOC( )
´ DTOS( )
´ STOD( )
´ STR( )
´ STRZERO( )
´ VAL( )

CTOD( )


Si nt ax e CTOD( cDat a)
Descr i ção
Reali za a conver são de uma i nformação do t i po caract er no format o
“ DD/ MM/ AAAA” para uma vari ável do t i po dat a.



CVALTOCHAR( )


Si nt ax e CVALTOCHAR( n Val or )
Descr i ção
Reali za a conver são de uma i nformação do t i po numéri co em uma st ri ng,
sem a adi ção de espaços a i nformação.


- 46 -

ADVPL Compl et o




DTOC( )


Si nt ax e DTOC( dDat a)
Descr i ção
Reali za a conver são de uma i nformação do t i po dat a para em caract er, sendo
o r esul t ado no format o “ DD/ MM/ AAAA” .



DTOS( )


Si nt ax e DTOS( dDat a)
Descr i ção
Reali za a conver são de uma i nformação do t i po dat a em um caract er, sendo
o r esul t ado no format o “ AAAAMMDD” .



STOD( )


Si nt ax e STOD( sDat a)
Descr i ção
Reali za a conver são de uma i nformação do t i po caract er com cont eúdo no
for mat o “ AAAAMMDD” em dat a.


STR( )


Si nt ax e STR( n Val or )
Descr i ção
Reali za a conver são de uma i nformação do t i po numéri co em uma st ri ng,
adi ci onando espaços à di rei t a.


STRZERO( )


Si nt ax e STRZERO( nVal or , nTaman ho)
Descr i ção
Reali za a conver são de uma i nformação do t i po numéri co em uma st ri ng,
adi ci onando zer os à esquerda do número convert i do, de forma que a st ri ng
gerada t enha o t amanho especi fi cado no parâmet r o.


VAL( )


Si nt ax e VAL( cVal or )
Descr i ção Reali za a conver são de uma i nformação do t i po caract er em numéri ca.

- 47 -

ADVPL Compl et o




Man i pu l ação de st r i n gs

As funções mai s ut ili zadas nas operações de mani pul ação do cont eúdo de st ri ngs são:

´ ALLTRI M( )
´ ASC( )
´ AT( )
´ CHR( )
´ CSTUFF( )
´ LEN( )
´ RAT( )
´ SUBSTR( )

ALLTRI M( )


Si nt ax e ALLTRI M( cSt r i ng)
Descr i ção
Ret orna uma st ri ng sem os espaços à di rei t a e à esquerda, r eferent e ao
cont eúdo i nformado como par âmet ro.

A função ALLTRI M( ) i mpl ement a as ações das funções RTRI M ( “ ri ght t rim” ) e
LTRI M ( “ l eft t ri m” ) .


ASC( )


Si nt ax e ASC( cCar act er e)
Descr i ção
Convert e uma i nformação caract er e em seu val or de acordo com a t abel a
ASCI I .


AT( )


Si nt ax e AT( cCar act er e, cSt r i n g )
Descr i ção
Ret orna a pri mei ra posi ção de um caract er ou st ri ng dent ro de out ra st r i ng
especi fi cada.



- 48 -

ADVPL Compl et o



CHR( )


Si nt ax e CHR( n ASCI I )
Descr i ção
Convert e um val or númer o referent e a uma i nformação da t abel a ASCI I no
caract ere que est a i nfor mação r epr esent a.



LEN( )


Si nt ax e LEN( cSt r i n g)
Descr i ção Ret orna o t amanho da st ri ng especi fi cada no parâmet ro.


LOWER( )


Si nt ax e LOWER( cSt r i ng)
Descr i ção
Ret orna uma st ri ng com t odos os caract eres mi núscul os, t endo como base a
st ri ng passada como parâmet ro.


RAT( )


Si nt ax e RAT( cCar act er e, cSt r i ng)
Descr i ção
Ret orna a úl t i ma posi ção de um caract er ou st ri ng dent ro de out ra st ri ng
especi fi cada.


STUFF( )


Si nt ax e STUFF( cSt r i ng, nPosI ni ci al , nEx cl u i r , cAdi cao)
Descr i ção
Per mi t e subst i t ui r um cont eúdo caract er e em uma st ri ng j á exi st ent e,
especi fi cando a posi ção i ni ci al para est a adi ção e o número de caract er es que
serão subst i t uídos.


SUBSTR( )


Si nt ax e SUBSTR( cSt r i n g, nPosI n i ci al , n Car act er es)
Descr i ção
Ret orna part e do cont eúdo de uma st ri ng especifi cada, de acordo com a
posi ção i ni ci al dest e cont eúdo na st ri ng e a quant i dade de caract eres que
deverá ser r et ornada a part i r daquel e pont o ( i ncl usi ve) .


- 49 -

ADVPL Compl et o


UPPER( )


Si nt ax e UPPER( cSt r i ng)
Descr i ção
Ret orna uma st ri ng com t odos os caract eres mai úscul os, t endo como base a
st ri ng passada como parâmet ro.


Man i pu l ação de v ar i áv ei s n umér i cas

As funções mai s ut ili zadas nas operações de mani pul ação do cont eúdo de st ri ngs são:

´ ABS( )
´ I NT( )
´ NOROUND( )
´ ROUND( )

ABS( )

Si nt ax e ABS( n Val or )
Descr i ção
Ret orna um val or absol ut o ( i ndependent e do si nal ) com base no val or
especi fi cado no parâmet ro.



I NT( )

Si nt ax e I NT( nVal or )
Descr i ção Ret orna a part e i nt ei ra de um val or especi fi cado no parâmet r o.


NOROUND( )

Si nt ax e NOROUND( nVal or , nCasas)
Descr i ção
Ret orna um val or, t runcando a part e deci mal do val or especi fi cado no
parâmet ro de acordo com a quant i dade de casas deci mai s soli ci t adas.



ROUND( )

Si nt ax e ROUND( n Val or , nCasas)
Descr i ção
Ret orna um val or, ar r edondando a part e deci mal do val or especi fi cado no
parâmet ro de acordo com a quant i dades de casas deci mai s soli ci t adas,
ut ili zando o cri t éri o mat emát i co.



- 50 -

ADVPL Compl et o



Ver i f i cação de t i pos de v ar i áv ei s

As funções de veri fi cação permi t em a consul t a ao t i po do cont eúdo da vari ável durant e a
execução do pr ogr ama.

´ TYPE( )
´ VALTYPE( )

TYPE( )

Si nt ax e TYPE( “ cVar i av el ” )
Descr i ção
Det ermi na o t i po do cont eúdo de uma vari ável , a qual não foi defi ni da na
função em execução.


VALTYPE( )

Si nt ax e VALTYPE( cVar i áv el )
Descr i ção
Det ermi na o t i po do cont eúdo de uma vari ável , a qual foi defi ni da na função
em execução.






















- 51 -

ADVPL Compl et o



5. Est r ut ur as bási cas de pr ogr amação

O ADVPL suport a vári as est rut uras de cont r ol e que permi t em mudar a seqüênci a de fl uxo de
execução de um pr ogr ama. Est as est rut uras permi t em a execução de códi go baseado em
condi ções l ógi ca e a repet i ção da execução de pedaços de códi go qual quer númer o de vezes.

Em ADVPL, t odas as est rut uras de cont r ol e podem ser "ani nhadas" dent ro de t odas as demai s
est rut uras cont ant o que est ej am ani nhadas propri ament e. Est rut ur as de cont rol e t êm um
i dent i fi cador de i níci o e um de fi m, e qual quer est rut ura ani nhada deve se encont r ar ent r e
est es i dent i fi cador es.

Também exi st em est rut uras de cont rol e para det ermi nar que el ement os, comandos, et c. em
um programa serão compil ados. Est as são as di ret i vas do pré- pr ocessador # i fdef.. .# endi f e
# i fndef...# endi f. Consul t e a document ação sobr e o pr é- pr ocessador par a mai ores det al hes.

As est rut uras de cont rol e em ADVPL est ão di vi didas em:

E Est rut uras de repet i ção
E Est rut uras de deci são

5.1. Est r ut ur as de r epet i ção

Est rut uras de r epet i ção são desi gnadas para execut ar uma seção de códi go mai s de uma vez.
Por exempl o, i magi nando- se a exi st ênci a de uma função para i mpri mi r um rel at óri o, pode- se
desej ar i mpri mi - l o quat ro vezes. Cl aro, pode- se si mpl esment e chamar a função de i mpressão
quat ro vezes em seqüênci a, mas i st o se t ornari a pouco profi ssi onal e não resol veri a o
probl ema se o númer o de r el at óri os fosse vari ável .

Em ADVPL exi st em doi s comandos para a r epet i ção de seções de códi go, que são os comandos
FOR...NEXT e o comando WHI LE.. .ENDDO
E Si nt ax e
.

O Comando FOR. ..NEXT

A est rut ura de cont r ol e FOR... NEXT, ou si mpl esment e o l oop FOR, r epet e uma seção de códi go
em um número det ermi nado de vezes.


FOR Variavel : = nValorI nicial TO nVal orFinal [ STEP nI ncr ement o]
Comandos...
[ EXI T]
[ LOOP]
NEXT

- 52 -

ADVPL Compl et o



E Par âmet r os

Var i áv el Especi fi ca uma vari ável ou um el ement o de uma mat ri z para
at uar como um cont ador. A vari ável ou o el ement o da mat ri z
não pr eci sa t er si do decl arado ant es da execução do comando
FOR... NEXT. Se a vari ável não exi st i r, será cri ada como uma
v ar i áv el pr i v ada.
nVal or I ni ci al
TO nVal or Fi n al
nVal orI ni ci al é o val or i ni ci al para o cont ador; nVal orFinal é o
val or fi nal para o cont ador. Pode- se ut ili zar val ores numéri cos
li t erai s, vari ávei s ou expressões, cont ant o que o resul t ado sej a
do t i po de dado numéri co.
STEP
nI ncr ement o
nI ncrement o é a quant idade que será increment ada ou
decrement ada no cont ador após cada execução da seção de
comandos. Se o val or de nI ncr ement o for negat i vo, o cont ador
será decrement ado. Se a cl áusul a STEP for omi t i da, o cont ador
será i ncrement ado em 1. Pode- se ut ilizar val ores numéri cos
li t erai s, vari ávei s ou expressões, cont ant o que o resul t ado sej a
do t i po de dado numéri co.
Comandos Especi fi ca um ou mai s inst ruções de comando ADVPL que serão
execut adas.
EXI T Transfere o cont r ol e de dent ro do comando FOR... NEXT para o
comando i medi at ament e segui nt e ao NEXT, ou sej a, fi nali za a
repet i ção da seção de comandos i medi at ament e. Pode- se
col ocar o comando EXI T em qual quer l ugar ent re o FOR e o
NEXT.
LOOP Ret orna o cont rol e di ret ament e para a cl áusul a FOR sem
execut ar o r est ant e dos comandos ent re o LOOP e o NEXT. O
cont ador é i ncrement ado ou decr ement ado nor mal ment e, como
se o NEXT t i vesse si do al cançado. Pode- se col ocar o comando
LOOP em qual quer l ugar ent re o FOR e o NEXT.




Uma vari ável ou um el ement o de uma mat ri z é ut ili zado como um
cont ador para especi fi car quant as vezes os comandos ADVPL dent r o da
est rut ura FOR. ..NEXT são execut ados.

Os comandos ADVPL depoi s do FOR são execut ados at é que o NEXT
sej a al cançado. O cont ador ( Vari avel ) é ent ão i ncrement ado ou
decrement ado com o val or em nI ncr ement o ( se a cl áusul a STEP for
omi t i da, o cont ador é i ncrement ado em 1) . Ent ão, o cont ador é
comparado com o val or em nVal orFi nal . Se for menor ou i gual ao val or
em nVal orFi nal , os comandos segui nt es ao FOR são execut ados
novament e.

Se o val or f or mai or que o cont i do em nVal orFi nal , a est rut ura
FOR... NEXT é t ermi nada e o pr ogr ama cont i nua a execução no
pri mei ro comando após o NEXT.

Os val ores de nVal or I ni ci al , nVal orFi nal e nI ncr ement o são apenas
consi derados i ni ci al ment e. Ent r et ant o, mudar o val or da vari ável
ut ili zada como cont ador dent r o da est rut ura afet ará o númer o de
vezes que a repet i ção será execut ada. Se o val or de nI ncr ement o é
negat i vo e o val or de nVal orI ni ci al é mai or que o de nVal orFi nal , o
cont ador será decrement ado a cada r epet i ção.

- 53 -

ADVPL Compl et o


Ex empl o:

Local nCnt
Local nSomaPar : = 0
For nCnt : = 0 To 100 St ep 2
nSomaPar + = nCnt
Next
Al ert ( "A soma dos 100 pri mei ros números par es é: " + ;
cVal ToChar( nSomaPar) )
Ret urn

Est e exempl o i mpri me a soma dos 100 pri mei ros númer os par es. A soma é obt i da at ravés da
repet i ção do cál cul o ut ilizando a própri a vari ável de cont ador . Como a cl áusul a STEP est á
sendo ut ilizada, a vari ável nCnt será sempr e i ncrement ada em 2. E como o cont ador começa
com 0, seu val or sempr e será um número par .


O Comando WHI LE... ENDDO

A est rut ura de cont r ol e WHI LE... ENDDO, ou si mpl esment e o l oop WHI LE, repet e uma seção de
códi go enquant o uma det ermi nada expr essão r esul t ar em verdadei ro ( . T. ) .

E Si nt ax e

WHI LE l Expr essao
Comandos...
[ EXI T]
[ LOOP]
ENDDO

E Par âmet r os

l Ex pr essao Especi fi ca uma expressão l ógi ca cuj o val or det ermi na quando os
comandos ent re o WHI LE e o ENDDO são execut ados. Enquant o o
resul t ado de l Expr essao for aval i ado como verdadei ro ( .T. ) , o
conj unt o de comandos são execut ados.
Comandos Especi fi ca um ou mai s i nst ruções de comando ADVPL que serão
execut adas enquant o l Expressao for aval i ado como verdadei ro ( . T. ) .
EXI T Transfere o cont r ol e de dent r o do comando WHI LE... ENDDO par a o
comando i medi at ament e segui nt e ao ENDDO, ou sej a, fi nali za a
repet i ção da seção de comandos i medi at ament e. Pode- se col ocar o
comando EXI T em qual quer l ugar ent r e o WHI LE e o ENDO.
LOOP Ret orna o cont r ol e di ret ament e para a cl áusul a WHI LE sem execut ar
o r est ant e dos comandos ent re o LOOP e o ENDDO. A expr essão em
l Expressao é r eaval i ada para a deci são se os comandos cont i nuarão
sendo execut ados.



Os comandos ent r e o WHI LE e o ENDDO são execut ados enquant o o
resul t ado da avali ação da expr essão em l Expressao permanecer
verdadei ro ( .T.) . Cada pal avra chave WHI LE deve t er uma pal avra
chave ENDDO cor r espondent e.




- 54 -

ADVPL Compl et o


Ex empl o :

Local nNumber : = nAux : = 350
nAux : = I nt ( nAux / 2)
Whil e nAux > 0
nSomaPar + = nCnt
Next
Al ert ( "A soma dos 100 pri mei ros números par es é: " + ;
cVal ToChar( nSomaPar) )
Ret urn


5.1.1. I nf l uenci ando o f l ux o de r epet i ção

A linguagem ADVPL permi t e a ut ili zação de comandos que i nfluem di ret ament e em um
processo de r epet i ção, sendo el es:

E LOOP
E EXI T

LOOP

A i nst rução LOOP é ut i lizada para for çar um desvi o no fl uxo do programa de vol t a a análi se da
condi ção de repet i ção. Dest a forma, t odas as operações que seri am real i zadas dent ro da
est rut ura de r epet i ção após o LOOP serão desconsi deradas.

Ex empl o:

aI t ens: = Li st aProdut os( ) / / função i l ust rat i va que r et orna um array com dados dos pr odut os
nQuant idade : = Len( aI t ens)
nI t ens : = 0

Whil e nI t ens < nQuant i dade

nI t ens+ +
I F BLOQUEADO( aI t ens [ nI t ens] ) / / função il ust rat i va que veri fi ca se o produt o est á
LOOP / / bl oqueado.
ENDI F

I MPRI ME( ) / / função il ust rat i va que r eal i za a i mpressão de um i t em li berado par a uso

End

/ / Caso o pr odut o est ej a bl oqueado, o mesmo n ão ser á i mpr esso, poi s a ex ecução da
/ / i n st r u ção LOOP f ar á o f l ux o do pr ogr ama r et or n ar a par t i r da an ál i se da condi ção.




- 55 -

ADVPL Compl et o


EXI T

A i nst rução EXI T é ut i lizada para for çar o t érmi no de uma est rut ura de repet i ção. Dest a forma,
t odas as operações que seri am real i zadas dent ro da est rut ura de r epet i ção após o EXI T serão
desconsi deradas, e o programa i rá cont i nuar a execução a part i r da próxi ma inst rução
post eri or ao t érmi no da est rut ura ( END ou NEXT) .

Ex empl o:

Whil e .T.

I F MSGYESNO( “ Desej a j ogar o j ogo da for ca?” )
JFORCA( ) / / Função i l ust rat i va que i mpl ement a o al gori t mo do j ogo da for ca.
ELSE
EXI T
ENDI F
End

MSGI NFO( “ Fi nal de Jogo” )

/ / Enqu ant o n ão f or r espondi do “ Não” par a a per gunt a: “ Desej a j ogar o j ogo da
/ / f or ca” , ser á ex ecu t ada a f unção do j ogo da f or ca.
/ / Caso sej a sel eci onada a opção “ Não” , ser á ex ecut ada a i n st r ução EXI T qu e
pr ov ocar á o t ér mi no do LOOP, per mi t i ndo a ex ecução da mensagem de “ Fi n al de
Jogo” .





















- 56 -

ADVPL Compl et o



5.2. Est r ut ur as de deci são

Est rut uras de desvi o são desi gnadas para execut ar uma seção de códi go se det ermi nada
condi ção l ógi ca resul t ar em verdadei ro ( .T.) .

Em ADVPL exi st em doi s comandos para execução de seções de códi go de acordo com
avali ações l ógi cas, que são os comandos I F...ELSE.. .ENDI F e o comando DO
CASE...ENDCASE
E Si nt ax e
.

O Comando I F...ELSE. ..ENDI F

Execut a um conj unt o de comandos baseado no val or de uma expr essão l ógi ca.


I F l Expressao
Comandos
[ ELSE
Comandos.. . ]
ENDI F

E Par âmet r os

LEx pr essao Especi fi ca uma expressão l ógi ca que é aval i ada. Se l Expr essao
resul t ar em verdadei ro ( .T.) , qual quer comando segui nt e ao I F e
ant ecedent e ao ELSE ou ENDI F ( o que ocorr er pri mei ro) será
execut ado.
Se l Expr essao resul t ar em fal so ( .F.) e a cl áusul a ELSE for defi ni da,
qual quer comando após essa cl áusul a e ant eri or ao ENDI F será
execut ada. Se a cl áusula ELSE não for defi ni da, t odos os comandos
ent re o I F e o ENDI F são i gnorados. Nest e caso, a execução do
programa cont i nua com o pri mei ro comando seguint e ao ENDI F.
Comandos Conj unt o de comandos ADVPL que serão execut ados dependendo da
avali ação da expr essão l ógi ca em l Expr essao.



Pode- se ani nhar um bloco de comando I F.. . ELSE. .. ENDI F dent ro de
out ro bl oco de comando I F.. . ELSE... ENDI F. Por ém, para a avali ação de
mai s de uma expr essão l ógi ca, deve- se ut ilizar o comando DO
CASE.. .ENDCASE ou a versão est endi da da expressão
I F. .. ELSE.. .ENDI F denomi nada I F... ELSEI F.. .ELSE.. .ENDI F.


Ex empl o:
Local dVenct o : = CTOD( "31/ 12/ 01")
I f Dat e( ) > dVenct o
Al ert ( "Venci ment o ul t rapassado! ")
Endi f
Ret urn

- 57 -

ADVPL Compl et o



O Comando I F...ELSEI F...ELSE.. .ENDI F

Execut a o pri mei ro conj unt o de comandos cuj a expr essão condi ci onal resul t a em verdadei ro
( .T.) .

E Si nt ax e

I F l Expressao1
Comandos
[ ELSEI F lExpr essaoX
Comandos]
[ ELSE
Comandos.. .]
ENDI F

E Par âmet r os

l Ex pr essao1 Especi fi ca uma expressão l ógi ca que é avaliada. Se l Expressao
resul t ar em verdadei ro ( .T.) , execut ar á os comandos
compreendi dos ent r e o I F e a próxi ma expr essão da est rut ura
( ELSEI F ou I F)
Se l Expressao r esul t ar em fal so ( .F.) , será avali ada a próxi ma
expr essão l ógi ca vi nculada ao comando ELSEI F, ou se o mesmo
não exi st i r será execut ada a ação defi ni da no comando ELSE.
l Ex pr essaoX Especi fi ca uma expressão l ógi ca que será avali ada para cada
comando ELSEI F. Est a expressão soment e será aval i ada se a
expr essão l ógi ca especi fi cada no comando I F r esul t ar em fal so
( .F.) .
Caso a l Expr essaoX avali ada resul t e em fal so ( .F.) será aval i ada a
próxi ma expressão l ExpressaoX vi ncul ada ao próxi mo comando
ELSEI F, ou caso o mesmo não exi st a ser á execut ada a ação
defi ni da parao comando ELSE.
Comandos Conj unt o de comandos ADVPL que serão execut ados dependendo
da avali ação da expressão l ógi ca em l Expr essao.



O campo I F... ELSE. .. ELSEI F.. .ENDI F possui a mesma est rut uração de
deci são que pode ser obt i da com a ut i lização do comando DO
CASE.. .ENDCASE.


- 58 -

ADVPL Compl et o



Ex empl o:
Local dVenct o : = CTOD( "31/ 12/ 01")
I f Dat e( ) > dVenct o
Al ert ( "Venci ment o ul t rapassado! ")
El seI f Dat e( ) = = dVenct o
Al ert ( "Venci ment o na dat a! ")
El se
Al ert ( "Venci ment o dent r o do prazo! ")
Endi f
Ret urn


O Comando DO CASE. ..ENDCASE

Execut a o pri mei ro conj unt o de comandos cuj a expr essão condi ci onal resul t a em verdadei ro
( .T.) .

E Si nt ax e

DO CASE
CASE lExpr essao1
Comandos
[ CASE lExpr essao2
Comandos
. ..
CASE lExpr essaoN
Comandos]
[ OTHERWI SE
Comandos]
ENDCASE

E Par âmet r os

CASE
l Ex pr essao1
Comandos...
Quando a pri mei ra expressão CASE resul t ant e em verdadei ro ( . T.)
for encont rada, o conj unt o de comandos seguint e é execut ado. A
execução do conj unt o de comandos cont i nua at é que a próxi ma
cl áusul a CASE, OTHERWI SE ou ENDCASE sej a encont rada. Ao
t ermi nar de execut ar esse conj unt o de comandos, a execução
cont i nua com o pri mei ro comando segui nt e ao ENDCASE.
Se uma expr essão CASE r esul t ar em fal so ( .F.) , o conj unt o de
comandos segui nt e a est a at é a próxi ma cl áusula é i gnorado.
Apenas um conj unt o de comandos é execut ado. Est es são os
pri mei ros comandos cuj a expressão CASE é aval i ada como
verdadei ro ( .T.) . Após a execução, qual quer out ra expressão CASE
post eri or é i gnorada ( mesmo que sua aval i ação resul t asse em
verdadei ro) .
OTHERWI SE
Comandos
Se t odas as expr essões CASE for em avali adas como fal so ( .F.) , a
cl áusul a OTHERWI SE det ermi na se um conj unt o adi ci onal de
comandos deve ser execut ado. Se essa cl áusul a for i ncl uída, os
comandos segui nt es serão execut ados e ent ão o programa
cont i nuará com o pri mei ro comando segui nt e ao ENDCASE. Se a
cl áusul a OTHERWI SE for omi t i da, a execução cont i nuará
normal ment e após a cl áusul a ENDCASE.


- 59 -

ADVPL Compl et o




O Comando DO CASE. ..ENDCASE é ut ili zado no l ugar do comando
I F...ENDI F quando um número mai or do que uma expressão deve ser
avali ada, subst i t ui ndo a necessi dade de mai s de um comando
I F. .. ENDI F ani nhados.


Ex empl o:

Local nMes : = Mont h( Dat e( ) )
Local cPeri odo : = " "

DO CASE
CASE nMes < = 3
cPeri odo : = "Pri mei ro Tr i mest re"
CASE nMes > = 4 .And. nMes < = 6
cPeri odo : = "Segundo Tri mest r e"
CASE nMes > = 7 .And. nMes < = 9
cPeri odo : = "Ter cei ro Tr i mest re"
OTHERWI SE
cPeri odo : = "Quart o Tri mest re"
ENDCASE

Ret urn





















- 60 -

ADVPL Compl et o



6. Ar r ays e Bl ocos de Códi go

6.1. Ar r ay s

Arrays ou mat ri zes, são col eções de val ores, semel hant es a uma l i st a. Uma mat ri z pode ser
cri ada at ravés de di ferent es manei ras.

Cada i t em em um arr ay é r eferenci ado pel a i ndi cação de sua posi ção numéri ca na l i st a,
i ni ci ando pel o númer o 1.

O exempl o a segui r decl ara uma vari ável , at ribui um array de t rês el ement os a el a, e ent ão
exi be um dos el ement os e o t amanho do arr ay:

Local aLet ras / / Decl aração da vari ável
aLet r as : = { "A", "B" , "C"} / / At ri bui ção do ar ray a vari ável
Al ert ( aLet ras[ 2] ) / / Exi be o segundo el ement o do array
Al ert ( cVal ToChar( Len( aLet ras) ) ) / / Exi be o t amanho do arr ay

O ADVPL permi t e a mani pul ação de arrays facil ment e. Enquant o que em out ras l inguagens
como C ou Pascal é necessári o al ocar memóri a para cada el ement o de um ar ray ( o que
t ornari a a ut ilização de "pont ei ros" necessári a) , o ADVPL se encar rega de gerenci ar a memóri a
e t orna si mpl es adi ci onar el ement os a um array, ut ilizando a função AADD( ) :

AADD( aLet ras, "D") / / Adi ci ona o quart o el ement o ao fi nal do ar ray
Al ert ( aLet ras[ 4] ) / / Exi be o quart o el ement o
Al ert ( aLet ras[ 5] ) / / Er r o! Não há um qui nt o el ement o no ar ray


Ar r ay s como Est r ut ur as

Uma caract eríst i ca i nt eressant e do ADVPL é que um array pode cont er qual quer t i po de dado:
números, dat as, l ógi cos, caract er es, obj et os, et c. , e ao mesmo t empo. Em out r as pal avras, os
el ement os de um array não pr eci sam ser necessari ament e do mesmo t i po de dado, em
cont rast e com out r as l i nguagens como C e Pascal .

aFunct 1 : = { "Pedro",32,.T.}

Est e ar ray cont em uma st ri ng, um número e um val or l ógi co. Em out r as li nguagens como C ou
Pascal , est e "pacot e" de informações pode ser chamado como um "st ruct " ( est rut ura em C, por
exempl o) ou um "r ecor d" ( regi st r o em Pascal , por exempl o) . Como se fosse na verdade um
regi st ro de um banco de dados, um pacot e de i nformações const ruído com di versos campos.
Cada campo t endo um pedaço di fer ent e de dado.

Suponha que no exempl o ant eri or, o ar ray aFunct 1 cont enha i nfor mações sobre o nome de
uma pessoa, sua i dade e sua si t uação mat ri moni al . Os segui nt es # defi nes podem ser cri ados
para i ndi car cada posi ção dos val or es dent ro de um array:

# defi ne FUNCT_NOME 1
# defi ne FUNCT_I DADE 2
# defi ne FUNCT_CASADO 3

- 61 -

ADVPL Compl et o



E consi der e mai s al guns arr ays para r epr esent ar mai s pessoas:

aFunct 2 : = { "Mari a" , 22, .T.}
aFunct 3 : = { "Ant ôni o", 42, .F.}

Os nomes podem ser i mpressos assi m:

Al ert ( aFunct 1[ FUNCT_NOME] )
Al ert ( aFunct 2[ FUNCT_NOME] )
Al ert ( aFunct 3[ FUNCT_NOME] )

Agora, ao i nvés de t rabal har com vari ávei s i ndivi duai s, pode- se agrupá- l as em um out ro array,
do mesmo modo que muit os r egi st ros são agrupados em uma t abel a de banco de dados:

aFunct s : = { aFunct 1, aFunct 2, aFunct 3}

Que é equi val ent e a i sso:

aFunct s : = { { "Pedr o" , 32, .T.} , ;
{ "Mari a" , 22, .T.} , ;
{ "Ant ôni o", 42, .F.} }

aFunct s é um array com 3 li nhas por 3 col unas. Uma vez que as vari ávei s separadas foram
combi nadas em um ar ray, os nomes podem ser exi bi dos assi m:

Local nCount
For nCount : = 1 To Len( aFunct s)
Al ert ( aFunct s[ nCount , FUNCT_NOME] )
/ / O acesso a el ement os de um arr ay mul t idi mensi onal
/ / pode ser r eali zado t ambém dest a forma:
/ / aFunct s[ nCount ] [ FUNCT_NOME]
Next nCount

A vari ável nCount sel eci ona que funci onári o ( ou que li nha) é de i nt er esse. Ent ão a const ant e
FUNCT_NOME sel eci ona a pri mei ra col una daquel a linha.

Cui dados com Ar r ay s

Arrays são l i st as de el ement os, port ant o memóri a é necessári a para armazenar est as
i nformações. Como est es arrays podem ser mult i di mensi onai s, a memóri a necessári a será a
mul t ipli cação do númer o de i t ens em cada di mensão do array, consi derando- se o t amanho do
cont eúdo de cada el ement o cont i do nest a. Port ant o o t amanho de um array pode vari ar mui t o.

A faci lidade da ut ilização de ar rays, mesmo que para armazenar i nfor mações em pacot es como
descri t o ant eri orment e, não é compensada pel a ut ilização em memóri a quando o númer o de
i t ens em um array for mui t o grande. Quando o número de el ement os for mui t o grande deve- se
procurar out ras sol uções, como a ut i lização de um arqui vo de banco de dados t emporári o.

- 62 -

ADVPL Compl et o




6.1.1. I ni ci al i zando ar r ay s

Al gumas vezes o t amanho da mat ri z é conheci do previ ament e. Out r as vezes o t amanho do
array soment e será conheci do em t empo de execução.

Se o t amanho do ar r ay é con heci do

Se o t amanho do ar ray é conheci do no moment o que o programa é escri t o, há di versas
manei ras de i mpl ement ar o códi go:

01 Local nCnt
02 Local aX[ 10]
03 Local aY : = Ar ray( 10)
04 Local aZ : = { 0,0,0,0,0,0,0,0,0,0}
05
06 For nCnt : = 1 To 10
07 aX[ nCnt ] : = nCnt * nCnt
08 Next nCnt

Est e códi go preenche o array com uma t abel a de quadrados. Os val ores serão 1, 4, 9, 16 ...
81, 100. Not e que a l i nha 07 se refere à vari ável aX, mas poderi a t ambém t r abal har com aY ou
aZ.

O obj et i vo dest e exempl o é demonst rar t rês modos de cri ar um array de t amanho conheci do
no moment o da cri ação do códi go.

1. Na l inha 02 o array é cri ada usando aX[ 10] . I st o i ndi ca ao ADVPL para al ocar espaço
para 10 el ement os no array. Os col chet es [ e ] são ut i lizados para i ndi car o t amanho
necessári o.

2. Na li nha 03 é ut ilizada a função ar ray com o parâmet r o 10 para cri ar o ar ray, e o
ret orno dest a função é at ri buído à vari ável aY. Na li nha 03 é efet uado o que se chama
"desenhar a i magen do array". Como se pode not ar, exi st em dez 0´ s na li st a encerr ada ent re
chaves ( { } ) . Cl arament e, est e mét odo não é o ut ili zado para cri ar uma mat ri z de 1000
el ement os.

3. O t ercei ro mét odo di fer e dos ant eri or es por que i ni ci ali za a mat ri z com os val ores
defi ni t i vos. Nos doi s pri mei ros mét odos, cada posi ção da mat ri z cont ém um val or nul o ( Nil ) e
deve ser i ni ci alizado post eri orment e.

4. A li nha 07 demonst ra como um val or pode ser at ri buído para uma posi ção exi st ent e em
uma mat ri z especi fi cando o índi ce ent r e col chet es.

- 63 -

ADVPL Compl et o



Se o t amanho do ar r ay n ão é conh eci do

Se o t amanho do ar ray não é conheci do at é o moment o da execução do pr ograma, há al gumas
manei ras de cri ar um array e adi ci onar el ement os a el e. O exempl o a segui r ilust ra a i déi a de
cri ação de um array vazi o ( sem nenhum el ement o) e adi ção de el ement os di nami cament e.

01 Local nCnt
02 Local aX[ 0]
03 Local aY : = Ar ray( 0)
04 Local aZ : = { }
05
06 For nCnt : = 1 To nSi ze
07 AADD( aX, nCnt * nCnt )
08 Next nCnt

1. A linha 02 ut ili za os col chet es para cri ar um array vazi o. Apesar de não t er nenhum
el ement o, seu t i po de dado é ar ray.

2. Na li nha 03 a chamada da função ar ray cri a uma mat ri z sem nenhum el ement o.

3. Na li nha 04 est á decl arada a r epr esent ação de um array vazi o em ADVPL. Mai s uma
vez, est ão sendo ut ili zadas as chaves para i ndi car que o t i po de dados da vari ável é array.
Not e que { } é um array vazi o ( t em o t amanho 0) , enquant o { Ni l } é um array com um úni co
el ement o nul o ( t em t amanho 1) .

Porque cada uma dest es arrays não cont ém el ement os, a li nha 07 ut ili za a função AADD( ) para
adi ci onar el ement os sucessi vament e at é o t amanho necessári o ( especi fi cado por exempl o na
vari ável nSize) .


6.1.2. Funções de mani pul ação de ar r ays

A li nguagem ADVPL possui di versas funções que auxi li am na mani pul ação de ar rays, dent r e as
quai s podemos ci t ar as mai s ut ili zadas:

´ ARRAY( )
´ AADD( )
´ ACLONE( )
´ ADEL( )
´ ASI ZE( )
´ AI NS( )
´ ASORT( )
´ ASCAN( )


- 64 -

ADVPL Compl et o



ARRAY( )

Si nt ax e ARRAY( nLi nh as, n Col unas)
Descr i ção
A função Array( ) é ut ilizada na defini ção de vari ávei s de t i po array, como
uma opção a si nt axe ut ili zando chaves ( “ { } ” ) .

AADD( )

Si nt ax e AADD( aAr r ay , x I t em)
Descr i ção
A função AADD( ) per mit e a i nserção de um i t em em um array j á exi st ent e,
sendo que est e i t em podem ser um el ement o si mpl es, um obj et o ou out ro
array.

ACLONE( )

Si nt ax e AADD( aAr r ay )
Descr i ção
A função ACLONE( ) r eali za a cópi a dos el ement os de um array par a out r o
array i nt egral ment e.

ADEL( )

Si nt ax e ADEL( aAr r ay , nPosi ção)
Descr i ção
A função ADEL( ) permi t e a excl usão de um el ement o do array. Ao efet uar a
excl usão de um el ement o, t odos os demai s são reorgani zados de for ma que
a ul t i ma posi ção do array passará a ser nul a.

ASI ZE( )

Si nt ax e ASI ZE( aAr r ay , nTamanho)
Descr i ção
A função ASI ZE permi t e a redefi ni ção da est rut ura de um arr ay pr é-
exi st ent e, adi ci onando ou removendo i t ens do mesmo.


ASORT( )

Si nt ax e ASORT( aAr r ay , n I n i ci o, n I t en s, bOr dem)
Descr i ção
A função ASORT( ) per mi t e que os i t ens de um array sej am ordenados a
part i r de um cri t éri o pr é- est abel eci do.


- 65 -

ADVPL Compl et o



ASCAN( )

Si nt ax e ASCAN( aAr r ay , bSeek )
Descr i ção
A função ASCAN( ) per mi t e que sej a i dent i fi cada a posi ção do array que
cont ém uma det ermi nada i nformação, at ravés da análi se de uma expr essão
descri t a em um bl oco de códi go.

AI NS( )

Si nt ax e AI NS( aAr r ay , nPosi cao)
Descr i ção
A função AI NS( ) permi t e a i nserção de um el ement o no ar ray especi fi cado
em qual quer pont o da est rut ura do mesmo, diferi ndo dest a forma da função
AADD( ) a qual sempr e i nsere um novo el ement o ao fi nal da est rut ura j á
exi st ent e.



6.1.3. Cópi a de ar r ays

Conforme coment ado ant eri orment e, um array é uma área na memóri a, o qual possui uma
est rut ura permi t e que as i nformações sej am armazenadas e organi zadas das mai s di versas
for mas.

Com base nesse concei t o, o ar ray pode ser consi derado apenas como um “ mapa” ou um “ gui a”
de como as i nformações est ão organi zadas e de como el as podem ser armazenadas ou
consul t adas. Para se copi ar um array deve- se l evar est e concei t o em consi deração, poi s caso
cont rári o o r esul t ado esperado não será o obt i do na execução da “ cópi a” .

Para “ copi ar” o cont eúdo de uma vari ável , ut iliza- se o operador de at r i bui ção “ : = ” , conforme
abai xo:


nPessoas : = 10
nAlunos : = nPessoas


Ao execut ar a at ri bui ção de nAl unos com o cont eúdo de nPessoas, o cont eúdo de nPessoas é
at ri buído a vari ável nAlunos, causando o efei t o de cópi a do cont eúdo de uma vari ável para
out ra.

I st o porque o comando de at ri bui ção copi a o cont eúdo da ár ea de memóri a represent ada pel o
nome “ nPessoas” para a área de memóri a represent ada pel o nome “ nAlunos” . Mas ao ut ilizar o
operador de at ri bui ção “ : = ” da mesma forma que ut ilizado em vari ávei s si mpl es para se copi ar
um array o efei t o é di ferent e:


aPessoas : = { “ Ri cardo” , “ Cri st i ane” , “ Andr é” , “ Camil a” }
aAl unos : = aPessoas



- 66 -

ADVPL Compl et o


A vari ável aPessoas r epresent e uma área de memóri a que cont ém a est rut ura de um ar ray
( “ mapa” ) , não as i nformações do ar ray, poi s cada i nformação est á em sua própri a área de
memóri a.



Dest a forma ao at ri bui r o cont eúdo r epresent ado pel a vari ável aPessoas a vari ável aAl unos não
est á se “ copi ando” as i nfor mações e si m o “ mapa” das áreas de memóri a onde as i nformações
est ão r eal ment e armazenadas.



Como foi copi ado o “ mapa” e não as informações, qual quer ação ut ilizando o rót ul o aAlunos i rá
afet ar as i nformações do r ót ul o aPessoas. Com i sso ao i nvés de se obt er doi s arrays di st i nt os,
t em- se o mesmo ar ray com duas formas de acesso ( rót ul os) di fer ent es.

Por est a razão deve ser ut ilizado o comando ACLONE( ) quando desej a- se obt er um ar ray com
a mesma est rut ura e i nformações que compõe out ro ar ray j á exi st ent e.


- 67 -

ADVPL Compl et o




6.2. Li st as de Ex pr essões e Bl ocos de Códi go

Bl ocos de códi go são um concei t o exi st ent e há mui t o t empo em li nguagens xBase. Não como
al go que apareceu da noi t e para o di a, e si m uma evol ução progressi va ut ili zando a
combi nação de mui t os concei t os da li nguagem para a sua i mpl ement ação.

6.2.1. Pr emi ssas par a ut i l i zação de Bl ocos de Códi go

Pr i mei r a pr emi ssa

O ADVPL é uma l inguagem baseada em funções. Funções t êm um val or de ret orno. Assim
como o operador de at ri bui ção : = .

Assi m, ao i nv és de escr ev er :

x : = 10 / / At ri bui o val or 10 à vari ável chamada X
Al ert ( "Val or de x: " + cVal ToChar( x) )

Pode- se escr ev er :

/ / At ri bui e ent ão exi be o val or da vari ável X
Al ert ( "Val or de x: " + cVal t oChar( X : = 10) )

A expr essão x: = 10 é avali ada pri mei ro, e ent ão seu r esul t ado ( o val or de X, que agora é 10) é
passada para a função cval t ochar para a conversão para caract er e, e em segui da para a
função al ert para a exi bi ção. Por causa dest a regra de pr ecedênci a é possível at ri bui r um val or
a mai s de uma vari ável ao mesmo t empo:

Z : = Y : = X : = 0

Por causa dessa r egra, essa expr essão é aval i ada como se fosse escri t a assi m:

Z : = ( Y : = ( X : = 0) )

Apesar de o ADVPL avali ar expr essões da esquerda para a di rei t a, no caso de at ri bui ções i sso
acont ece ao cont rári o, da di rei t a para a esquerda. O val or é at ri buído à vari ável X, que r et orna

- 68 -

ADVPL Compl et o


o val or para ser at ri buído à vari ável Y e assi m sucessi vament e. Pode- se di zer que o zer o foi
"propagado at ravés da expr essão".

Segu nda pr emi ssa

Em ADVPL pode- se j unt ar di versas l inhas de códi go em uma úni ca li nha físi ca de comando. Por
exempl o, o códi go:

I f l Achou
Al ert ( "Cli ent e encont rado! ")
Endi f
pode ser escri t o assi m:
I f l Achou ; Al ert ( "Cli ent e encont r ado! ") ;
Endi f

O pont o- e- vírgul a i ndi ca ao ADVPL que a nova li nha de códi go est á para começar. Pode- se
ent ão col ocar di ver sas linhas l ógi cas de códi go na mesma l inha físi ca at ravés do edi t or de t ext o
ut ili zado.

Apesar da possi bilidade de se escr ever t odo o programa assi m, em uma úni ca li nha físi ca, i st o
não é r ecomendado poi s di fi cul t a a l egi bili dade do pr ograma e, conseqüent ement e, a
manut enção.

6.2.2. Li st a de ex pr essões

A evol ução dos bl ocos de códi go começa com as l i st as de expr essões. Nos exempl os a segui r,
o símbol o = = > i ndi cará o ret orno da expr essão após sua aval i ação ( sej a para at ri bui r em uma
vari ável , exi bi r para o usuári o ou i mpri mi r em um r el at óri o) , que será i mpresso em um
rel at óri o por exempl o.

Duas Li nh as de Códi go

@00,00 PSAY x : = 10 = = > 10
@00,00 PSAY y : = 20 = = > 20

Cada uma das l i nhas t erá a expr essão aval i ada, e o val or da vari ável ser á ent ão i mpresso.

Duas l i n h a de códi go em u ma , ut i l i zando pont o- e- v ír gul a

Est e é o mesmo códi go que o ant eri or , apenas escri t o em uma úni ca linha:

Al ert ( cVal ToChar( x : = 10 ; y : = 20 ) ) = = > 10

Apesar desse códi go se encont rar em uma úni ca linha físi ca, exi st em duas li nhas l ógi cas
separadas pel o pont o e vírgul a. Ou sej a, esse códi go é equi val ent e a:

Al ert ( cVal ToChar( x : = 10 ) )
y : = 20

Port ant o apenas o val or 10 da vari ável x será passado par a as funções cval t ochar e al ert para
ser exi bido. E o val or 20 apenas será at ri buído à vari ável y.




- 69 -

ADVPL Compl et o


Conv er t endo par a u ma l i st a de ex pr essões

Quando par ênt eses são col ocados ao r edor do códi go e o si nal de pont o- e- vírgul a subst it uído
por uma vírgul a apenas, o códi go t orna- se uma li st a de expressões:

Al ert ( cVal ToChar ( ( X : = 10 , Y : = 20 ) ) ) = = > 20

O val or de r et orno r esult ant e de uma li st a de expressões é o val or resul t ant e da últ i ma
expr essão ou el ement o da li st a. Funci ona como se fosse um pequeno programa ou função, que
ret orna o resul t ado de sua úl t ima avali ação ( efet uadas da esquerda par a a di rei t a) .

Nest e exempl o, a expr essão x : = 10 é aval iada, e ent ão a expr essão y : = 20, cuj o val or
resul t ant e é passado para a função al ert e cval t ochar, e ent ão exi bi do. Depoi s que essa l inha
de códi go é execut ada, o val or de X é i gual a 10 e o de y i gual a 20, e 20 será exi bi do.

Teori cament e, não há l imi t ação para o número de expressões que podem ser combi nadas em
uma li st a de expressões. Na prát i ca, o númer o máxi mo é por vol t a de 500 símbol os.
Debugar l i st as de expr essões é di fícil porque as expr essões não est ão di vi didas em l i nhas de
códi go font e, o que t or na t odas as expressões associ adas a uma mesma li nha de códi go. I st o
pode t ornar mui t o di fícil det ermi nar onde um er ro ocorr eu.

Onde pode- se ut i l i zar uma l i st a de ex pr essões?

O propósi t o pri ncipal de uma li st a de expr essões é agrupá- l as em uma úni ca unidade. Em
qual quer l ugar do códi go ADVPL que uma expressão si mpl es pode ser ut ili zada, pode- se
ut ili zar uma li st a de expressões. E ai nda, pode- se fazer com que vári as coi sas acont eçam onde
normal ment e apenas uma acont eceri a.

X : = 10 ; Y : = 20
I f X > Y
Al ert ( "X")
Z : = 1
El se
Al ert ( "Y")
Z : = - 1
Endi f

Aqui t emos o mesmo concei t o, escri t o ut ilizando li st as de expr essões na função I I F( ) :

X : = 10 ; Y : = 20
ii f( X > Y , ;
( Al ert ( "X") , Z : = 1 ) , ;
( Al ert ( "Y") , Z : = - 1 ) )

De l i st as de ex pr essões par a bl ocos de códi go

Consi der e a segui nt e li st a de expressões:

Al ert ( cVal ToChar( ( x : = 10, y : = 20 ) ) ) = = > 20

O ADVPL per mi t e cri ar funções, que são pequenos pedaços de código, como se fosse um
pequeno pr ograma, ut ili zados para di minui r part es de t ar efas mai s compl exas e r eapr ovei t ar
códi go em mai s de um l ugar num programa. Para mai ores det al hes consul t e a document ação
sobr e a cri ação de funções em ADVPL. Por ém, a i déi a nest e moment o é que a l i st a de
expr essões ut ili zada na linha ant eri or pode ser cri ada como uma função:

- 70 -

ADVPL Compl et o



Funct i on Li st a( )
X : = 10
Y : = 20
Ret urn Y

E a li nha de exempl o com a l i st a de expr essões pode ser subst i t uída, t endo o mesmo
resul t ado, por:

Al ert ( cVal ToChar( Li st a( ) ) ) = = > 20

Como menci onado ant eri orment e, uma li st a de expr essões é como um pequeno pr ograma ou
função. Com poucas mudanças, uma l i st a de expressões pode se t ornar um bl oco de códi go:

( X : = 10 , Y : = 20 ) / / Li st a de Expr essões
{ | | X : = 10 , Y : = 20 } / / Bl oco de Códi go

Not e as chaves { } ut ilizadas no bl oco de código. Ou sej a, um bl oco de códi go é uma mat ri z.
Por ém na verdade, não é uma li st a de dados, e si m uma li st a de comandos, uma li st a de
códi go.

/ / I st o é uma mat ri z de dados
A : = { 10, 20, 30}
/ / I st o é um bl oco de códi go, por ém funci ona como
/ / se fosse uma mat ri z de comandos
B : = { | | x : = 10, y : = 20}

6.2.3. Bl ocos de Códi go

Di ferent ement e de uma mat ri z, não se pode acessar el ement os de um bl oco de códi go at ravés
de um índi ce numéri co. Por ém bl ocos de códi go são semel hant es a uma li st a de expr essões, e
a uma pequena função.

Ou sej a, podem ser execut ados. Para a execução, ou aval i ação, de um bl oco de códi go, deve-
se ut i lizar a função Eval ( ) :

nRes : = Eval ( B) = = > 20

Essa função recebe como parâmet r o um bl oco de códi go e avali as t odas as expressões
cont i das nest e bl oco de códi go, r et ornando o r esul t ado da últ i ma expr essão aval i ada.

Passando Par âmet r os

Já que bl ocos de códi go são como pequenas funções, t ambém é possível a passagem de
parâmet ros para um bloco de códi go. Os parâmet r os devem ser i nfor mados ent re as bar ras
vert i cai s ( | | ) separados por vírgul as, assi m como em uma função.

B : = { | N | X : = 10, Y : = 20 + N}

Por ém deve- se not ar que j á que o bl oco de códi go recebe um parâmet r o, um val or deve ser
passado quando o bl oco de códi go for aval i ado.

C : = Eval ( B, 1) = = > 21


- 71 -

ADVPL Compl et o


Ut i l i zando Bl ocos de Códi go

Bl ocos de códi go podem ser ut ili zados em di ver sas si t uações. Geral ment e são ut i lizados par a
execut ar t ar efas quando event os de obj et os são aci onados ou para modi fi car o comport ament o
padrão de al gumas funções.

Por exempl o, consi dere a mat ri z abai xo:

A : = { "GARY HALL", "FRED SMI TH", "TI M JONES"}

Est a mat ri z pode ser ordenada pel o pri mei ro nome, ut ili zando- se a chamada da função
asort ( A) , r esul t ado na mat ri z com os el ement os ordenados dessa forma:

{ "FRED SMI TH", "GARY HALL", " TI M JONES"}

A ordem padrão para a função asort é ascendent e. Est e comport ament o pode ser modi fi cado
at ravés da i nformação de um bl oco de códi go que ordena a mat ri z de forma descendent e:

B : = { | X, Y| X > Y }
aSort ( A, B)

O bl oco de códi go ( de acordo com a document ação da função asort ) deve ser escri t o para
acei t ar doi s parâmet r os que são os doi s el ement os da mat ri z para comparação. Not e que o
bl oco de códi go não conhece que el ement os est á comparando - a função asort sel eci ona os
el ement os ( t al vez ut ili zando o al gori t mo QuickSort ) e passa- os para o bl oco de códi go. O bl oco
de códi go compara- os e ret orna verdadei ro ( .T. ) se encont ram na ordem corr et a, ou fal so ( .F. )
se não. Se o val or de r et orno for fal so, a função asort i rá ent ão t rocar os val ores de l ugar e
segui r comparando o pr óxi mo par de val ores.
Ent ão, no bl oco de código ant eri or, a comparação X > Y é verdadei ra se os el ement os est ão
em ordem descendent e, o que si gni fi ca que o pr i mei ro val or é mai or que o segundo.

Para ordenar a mesma mat ri z pel o úl t i mo nome, t ambém em ordem descendent e, pode- se
ut ili zar o segui nt e bl oco de códi go:

B : = { | X, Y| SUBSTR( X, At ( " ",X) + 1) > SUBSTR( Y, At ( " ", Y) + 1) }

Not e que est e bl oco de códi go pr ocura e compara as part es dos caract er es i medi at ament e
segui nt e a um espaço em branco. Depoi s de ut ili zar esse bl oco de código para a função asort ,
a mat ri z cont erá:

{ "GARY HALL", "TI M JONES" , "FRED SMI TH"}

Fi nalment e, para ordenar um sub- el ement o ( col una) de uma mat ri z por exempl o, pode- se
ut ili zar o segui nt e bl oco de códi go:

B : = { | X, Y| X[ 1] > Y[ 1] }

- 72 -

ADVPL Compl et o



6.2.4. Funções par a mani pul ação de bl ocos de códi go

A li nguagem ADVPL possui di versas funções que auxili am na mani pul ação de bl ocos de códi go,
dent re as quai s podemos ci t ar as mai s ut ilizadas:

´ EVAL( )
´ DBEVAL( )
´ AEVAL( )

EVAL( )

Si nt ax e EVAL( bBl oco, x Par am1, x Par am2, x Par amZ)
Descr i ção
A função EVAL( ) é ut ilizada para avali ação di ret a de um bl oco de códi go,
ut ili zando as i nformações di sponívei s no mesmo de sua execução. Est a
função permi t e a defi nição e passagem de di ver sos parâmet ros que serão
consi derados na i nt erpr et ação do bl oco de códi go.

DBEVAL( )

Si nt ax e Ar r ay ( bBl oco, bFor , bWhi l e)
Descr i ção
A função DBEval ( ) permi t e que t odos os r egi st ro de uma det ermi nada t abel a
sej am anal i sados e para cada r egi st ro será execut ado o bl oco de códi go
defi ni do.

AEVAL( )

Si nt ax e AEVAL( aAr r ay , bBl oco, n I n i ci o, nFi m)
Descr i ção
A função AEVAL( ) per mit e que t odos os el ement os de um det ermi nada array
sej am anal i sados e par a cada el ement o será execut ado o bl oco de códi go
defi ni do.













- 73 -

ADVPL Compl et o


20

7. Funções

A mai or part e das rot i nas que quer emos escrever em programas são compost as de um
conj unt o de comandos, rot i nas est as que se r epet em ao l ongo de t odo o
desenvol vi ment o. Uma função nada mai s é do que um conj unt o de comandos que para ser
ut ili zada bast a chamá- la pel o seu nome.

Para t ornar uma função mai s fl exível , ao chamá- l a pode- se passar parâmet r os, o quai s cont ém
os dados e i nformações que defi nem o pr ocessament o da função.

Os parâmet r os das funções descri t as ut ilizando a linguagem ADVPL são posi ci onai s, ou sej a, na
sua passagem não i mport a o nome da vari ável e si m a sua posição dent r o da li st a de
parâmet ros, o que permi t e execut ar uma função escr evendo:

Cal cul a( parA, parB, par C) / / Chamada da função em uma rot i na

E a f u nção est ar escr i t a:

User Funct i on Cal cul a( x, y, z)

... Comandos da Função

Ret urn .. .


Nest e caso, x assume o val or de parA, y de par B e z de parC.

A função t ambém t em a facul dade de r et ornar uma vari ável , podendo i ncl usi ve ser um Ar ray.
Para t al encer ra- se a função com:

Ret ur n( campo)

Assi m A : = Cal cul a( parA,parB,parC) at ri bui à A o cont eúdo do r et orno da função
Cal cul a.

No ADVPL exi st em milhares de funções escri t as pel a equipe de Tecnol ogi a Mi crosi ga,
pel os anali st as de supor t e e pel os pr ópri os usuári os.



Exi st e um di t ado que di z que:

“ Vale mais um pr ogramador que conhece t odas as funções disponívei s em
uma linguagem do que aquele que, mesmo sendo gênio, reinvent a a roda a
cada novo programa” .

No DEM ( Document ação El et r ôni ca Mi crosi ga) mai s de 500 est ão document adas, e est e
número t ende a aument ar exponenci al ment e com os novos pr ocessos de document ação que
est ão em i mpl ant ação na Tecnol ogi a e I nt el i gênci a Prot heus.

O obj et i vo do cur so é apresent ar, demonst r ar e fi xar a ut ilização das pri nci pai s funções,
si nt axes e est rut uras ut ili zadas em ADVPL.

No ADVPL, at é os pr ogramas chamados do menu são funções, sendo que em um reposi t óri o
não podem haver funções com o mesmo nome, e para permi t i r que os usuári os e anal i st as

- 74 -

ADVPL Compl et o


possam desenvol ver suas própri as funções sem que as mesmas confli t em com as j á
di sponívei s no ambi ent e ERP, foi i mpl ement ada pel a Tecnol ogi a Mi crosi ga um t i po especi al de
função denomi nado “ User Funct i on” .

Nos t ópi cos a segui r serão det al hados os t i pos de funções di sponívei s na li nguagem ADVPL,
suas formas de ut ili zação e r espect i vas di ferenças.


7.1. Ti pos e escopos de f unções

Em ADVPL podem ser ut ilizados os segui nt es t ipos de funções:

E Funct i on( )
E User Funct i on ( )
E St at i c Fu nct i on( )
E Mai n Funct i on( )

Funct i on( )

Funções ADVPL convenci onai s, rest ri t as ao desenvol vi ment o da área de I nt eli gênci a Prot heus
da Mi crosi ga.

O i nt erpr et ador ADVPL di st i ngue nomes de funções do t i po Funct i on( ) com at é dez caract eres.
A part i r do déci mo car act er, apesar do compi l ador não i ndi car quai squer t i pos de er ros, o
i nt erpr et ador i gnorará os demai s caract eres.

Ex empl o:

/ / Font e MATA100I NCL. PRW
# I NCLUDE "pr ot heus. ch"

Funct i on MATA100I NCL01( )

ALERT( "01")
Ret urn

Funct i on MATA100I NCL02( )

ALERT( "02")
Ret urn

Ao execut ar a função MATA100I NCL01( ) será exi bi da a mensagem “ 01” , mas ao execut ar a
função MATA100I NCL02( ) t ambém será exi bi da a mensagem “ 01” , poi s o i nt erpret ador
consi dera o nome da função como “ MATA100I NC” .



1. Funções do t i po Funct ion( ) soment e podem ser execut adas at ravés
dos módul os do ERP.

2. Soment e poder ão ser compil adas funções do t i po Funct i on( ) se o MP-
I DE possui r uma aut ori zação especi al forneci da pel a Mi crosi ga.

3. Funções do t i po Funct i on( ) são acessívei s por quai squer out r as
funções em uso pel a apli cação.


- 75 -

ADVPL Compl et o



User Funct i on ( )

As “ User Defi ned Funct ions” ou funções defi ni das pel os usuári os, são t i pos especi ai s de funções
i mpl ement ados pel o ADVPL para garant i r que desenvol vi ment os específi cos não r eal i zados pel a
I nt el i gênci a Prot heus da Mi crosi ga sobr eponham as funções padrões desenvol vi das para o ERP.

O i nt erpr et ador ADVPL consi dera que o nome de uma User Funct i on é compost o pel o nome
defi ni do para a função precedi do dos caract er es “ U_” . Dest a forma a User Funct i on XMAT100I
será t rat ada pel o i nt erpret ador como “ U_XMAT100I ” .



1. Como ocorr e o acr ésci mo dos caract er es “ U_” no nome da função e o
i nt erpr et ador consi dera apenas os dez pri mei ros caract er es da função
para sua di fer enci ação, é r ecomendado que os nomes das User
Funct i ons t enham apenas oi t o caract er es para evi t ar r esul t ados
i ndesej ados durant e a execução da apli cação.

2. Funções do t i po User Funct i on são acessívei s por quai squer out ras
funções em uso pel a apli cação, desde que em sua chamada sej am
ut ili zados os caract er es “ U_” em conj unt o com o nome da função.



As User Funct i ons podem ser execut adas a par t i r da t el a ini ci al do cli ent do
ERP ( Mi crosi ga Prot heus Remot e) , mas as apli cações que pret endem
di sponi bili zar est a opção devem possui r um pr eparo adi ci onal de ambi ent e.

Para mai or es i nformações consul t e no DEM o t ópi co sobr e pr eparação de
ambi ent e e a document ação sobr e a função RpcSet Env( ) .


St at i c Fu nct i on( )

Funções ADVPL t radi cionai s, cuj a vi sibili dade est á rest ri t a as funções descri t as no mesmo
arqui vo de códi go font e no qual est ão defi ni das.

Ex empl o:

/ / Font e FI NA010.PRW

Funct i on FI NA010( )

Cri aSx1( “ FI N010” )
Ret urn

St at i c Funct i on CRI ASX1( )
/ / Font e FI NA020.PRW

Funct i on FI NA020( )

Cri aSx1( “ FI N020” )
Ret urn

St at i c Funct i on CRI ASX1( )


- 76 -

ADVPL Compl et o



No exempl o aci ma, exi st em duas funções denomi nadas CRI ASX1( ) defi ni das em arqui vos de
códi go font e di st i nt os: FI NA010.PRW e FI NA020.PRW.

A função FI NA010( ) t erá vi si bilidade apenas da função CRI ASX1( ) defi ni da no arqui vo de
códi go font e FI NA010.PRW, sendo que o mesmo ocor re com a função FI NA020( ) .

Est e r ecur so permi t e i sol ar funções de uso excl usi vo de um arqui vo de códi go font e, evi t ando a
sobr eposi ção ou dupli cação de funções na apli cação.

Nest e cont ext o as St at i c Funct i ons( ) são ut ili zadas para:

1. Padroni zar o nome de uma det ermi nada função, que possui a mesma fi nali dade, mas
que sua i mpl ement ação pode vari ar de acordo com a necessi dade de função pri nci pal /
apli cação.

2. Redefi ni r uma função padrão da apli cação, adequando- a as necessi dades específi cas de
uma função pri nci pal / apli cação.

3. Prot eger funções de uso específi co de um arqui vo de códi go font e / função pri nci pal .



O ambi ent e de desenvol vi ment o ut ili zado na apli cação ERP ( MP- I DE) vali da
se exi st em Funct i ons( ) , Mai n Funct i ons( ) ou User Funct i ons( ) com o mesmo
nome mas em arqui vos de códi go font es di st int os, evi t ando a dupli ci dade ou
sobr eposi ção de funções.


Mai n Funct i on( )

Mai n Funct i on( ) é out ro t i po de função especi al do ADVPL i ncorporado para permi t ir
t rat ament os di fer enci ados na apl i cação ERP.

Uma Mai n Funct i on( ) t em a car act eríst i ca de poder ser execut ada at ravés da t el a i ni ci al de
parâmet ros do cli ent do ERP ( Mi cr osi ga Pr ot heus Remot e) , da mesma forma que uma User
Funct i on, com a di ferença que as Mai n Funct i ons soment e podem ser desenvol vi das com o uso
da aut ori zação de compil ação, t ornando sua ut ilização r est ri t a a I nt el i gênci a Prot heus da
Mi crosi ga.

Na apli cação ERP é comum o uso das Mai n Funct i ons( ) nas segui nt es si t uações:

1. Defi ni ção dos módul os da apli cação ERP: Mai n Funct i on Si gaadv( )

2. Defi ni ção de at uali zações e updat es: AP710TOMP811( )

3. At uali zações específi cas de módul os da apl i cação ERP: Updat eATF( )

- 77 -

ADVPL Compl et o



7.2. Passagem de par âmet r os ent r e f unções

Como menci onado ant eri orment e os parâmet r os das funções descri t as ut ilizando a li nguagem
ADVPL são posi ci onai s, ou sej a, na sua passagem não i mport a o nome da vari ável e si m a
sua posi ção dent r o da li st a de parâmet ros.

Compl ement ando est a defi ni ção, podem ser ut ilizadas duas formas di st i nt as de passagens de
parâmet ros para funções descri t as na li nguagem ADVPL:

E Passagem de parâmet ros por cont eúdo
E Passagem de parâmet ros por referênci a

Passagem de par âmet r os por cont eú do

A passagem de parâmet ros por cont eúdo é a forma convenci onal de defi ni ção dos parâmet ros
recebi dos pel a função chamada, na qual a função recebe os cont eúdos passados pel a função
chamadora, na ordem com os quai s são i nformados.


User Funct i on Cal cFat or ( nFat or)

Local nCnt
Local nResul t ado : = 0

For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

Al ert ( "O fat ori al de " + cVal ToChar( nFat or) + ;
" é " + cVal ToChar( nResul t ado) )

Ret urn



Avali ando a função Cal cFat or( ) descri t a ant eri orment e podemos veri fi car que a mesma r ecebe
como par âmet ro para sua execução a vari ável nFat or.

Com base nest a função podemos descr ever duas forma de passagem de parâmet r os por
cont eúdo:

E Passagem de cont eúdos di r et os
E Passagem de v ar i áv ei s como cont eú dos

Ex empl o 01 – Passagem de cont eú dos di r et os

User Funct i on Di rFat or( )

Local nResul t ado : = 0

nResul t ado : = Cal cFat or ( 5)



- 78 -

ADVPL Compl et o


A passagem de cont eúdos di ret os i mpli ca na defi ni ção explícit a do val or do parâmet ro na
execução da chamada da função. Nest e caso foi i nformado o cont eúdo 5 ( numéri co) como
cont eúdo para o pri mei ro parâmet ro da função Cal cFat or.

Como a l i nguagem ADVPL t r at a os parâmet r os de for ma posi ci onal , o cont eúdo 5 será at ri buído
di ret ament e a vari ável defi ni da como pri mei ro parâmet ro da função chamado, no nosso caso
nFat or.

Por ser uma at ri bui ção de par âmet ros por cont eúdo, o i nt erpret ador da li nguagem basi cament e
execut a uma operação de at ri bui ção normal , ou sej a, nFat or : = 5.



Duas caract eríst i cas da linguagem ADVPL t or nam necessári a uma at enção
especi al na chamada de funções:

1. A li nguagem ADVPL não é uma linguagem t i pada, de for ma que as
vari ávei s não t em um t ipo previ ament e defi ni do, acei t ando o cont eúdo
que l hes for i mpost o at r avés de uma at ri bui ção.

2. Os parâmet ros de uma função são at ri buídos de acordo com a ordem
com os quai s são defi ni dos na chamada da mesma. Não é real i zada
nenhum t i po de consi st ênci a em rel ação aos t i pos dos cont eúdos e
obri gat ori edade de parâmet r os nest a ação.





Os par âmet ros de uma função são caract eri zados como vari ávei s de escopo
LOCAL para efei t o de execução.

Dest a forma os mesmos não devem ser defi ni dos novament e como LOCAL na
área de defi ni ção e i ni ci alização de vari ávei s, poi s caso i st o ocor ra haverá a
perda dos val or es r ecebi dos pel a redefi ni ção das vari ávei s na função.

Caso sej a necessári o garant i r um cont eúdo padrão para um det er mi nado
parâmet ro deverá ser ut ili zado o i dent i fi cador DEFAULT conforme det al hado
no t ópi co “ Trat ament o de val or es padr ões para parâmet ros de funções” .


Ex empl o 02 – Passagem de v ar i áv ei s como cont eúdos

User Funct i on Di rFat or( )

Local nResul t ado : = 0
Local nFat orUser : = 0

nFat orUser : = Get Fat or ( ) / / Função il ust rat i va na qual o usuári o i nforma o fat or a ser ut i lizado.

nResul t ado : = Cal cFat or ( nFat or User )


A passagem de cont eúdos como vari ávei s i mpli ca na ut ili zação de vari ávei s de apoi o par a
execut ar a chamada de uma função. Nest e caso foi i nformada a vari ável nFat orUser, a qual
será defi ni da pel o usuári o at ravés da função il ust rat i va Get Fat or( ) . O uso de vari ávei s de apoi o
fl exi biliza a chamada de out ras funções, poi s el as serão paramet ri zadas de acordo com as
necessi dades daquel e processament o específi co no qual se encont ra a função chamadora.

- 79 -

ADVPL Compl et o



Como a l i nguagem ADVPL t rat a os parâmet r os de forma posi ci onal , o cont eúdo da vari ável
nFat orUser será at ri buído di ret ament e a vari ável defi ni da como pri mei ro parâmet r o da função
chamado, no nosso caso nFat or.

Por ser uma at ri bui ção de par âmet ros por cont eúdo, o i nt erpret ador da li nguagem basi cament e
execut a uma operação de at ri bui ção normal , ou sej a, nFat or : = nFat or User.



A passagem de parâmet r os não necessi t a que as vari ávei s i nformadas na
função chamadora t enham os mesmos nomes das vari ávei s ut ilizadas na
defi ni ção de parâmet r os da função chamada.

Dest a forma podemos t er:

User Funct i on Di rFat or( )

Local nFat orUser : = Get Fat or( )

nResul t ado : = Cal cFat or ( nFat or User )

...


Funct i on Cal cFat or( nFat or )
...


As vari ávei s nFat orUser e nFat or podem t er nomes di fer ent es poi s o
i nt erpr et ador fará a at ri bui ção de cont eúdo com base na ordem dos
parâmet ros e não pel o nome das vari ávei s.


Passagem de par âmet r os por r ef er ênci a

A passagem de par âmet r os por referênci a é uma t écni ca mui t o comum nas linguagens de
programação a qual per mi t e que vari ávei s de escopo LOCAL t enham seu cont eúdo mani pul ado
por funções específi cas, mant endo o cont r ol e dest as vari ávei s rest ri t o a função que as defi ni u e
as funções desej adas pel a apli cação.

A passagem de parâmet ros por referênci a ut iliza o concei t o de que uma vari ável é uma área
de memóri a e port ant o passar um parâmet ro por referênci a nada mai s é do que ao i nvés de
passar o cont eúdo par a a função chamada, passar qual a área de memóri a ut ilizada pela
vari ável passada.


- 80 -

ADVPL Compl et o




Passagem de par âmet r os t r adi ci onal – Duas var i ávei s x Duas ár eas de memór i a



Passagem de par âmet r os por r ef er ênci a – Duas var i ávei s x uma úni ca ár ea de memór i a






- 81 -

ADVPL Compl et o


Dest a forma a função chamada t em acesso não apenas ao cont eúdo, mas a vari ável em si ,
poi s a área de memóri a é a vari ável , e qual quer alt eração nest a será vi sível a função
chamadora quando t i ver o r et orno da função chamadora.




Tr at ament o de cont eúdos padr ões par a par âmet r os de f unções

O t rat ament o de cont eúdos padrões para parâmet r os de funções é muit o ut ilizado nas funções
padrões da apl i cação ERP, de for ma a garant i r a corr et a execução dest as funções por qual quer
função chamadora, evi t ando si t uações de ocor rênci as de err os pel a fal t a da defi ni ção de
parâmet ros necessári os a cor ret a ut ili zação da função.


A li nguagem ADVPL não obri ga a passagem de t odos os parâmet r os descri t os
na defi ni ção da função, sendo que os parâmet r os não i nformados serão
consi derados com cont eúdo nul o.

Dest a forma o uso do i dent i fi cador DEFAULT permi t e ao desenvol vedor garant i r que na
ut ili zação da função det ermi nados parâmet ros t erão o val or com um t i po adequado a função.

Ex empl o:

User Funct i on Cal cFat or ( nFat or)

Local nCnt
Local nResul t ado : = 0
Defaul t nFat or : = 1

For nCnt : = nFat or To 1 St ep - 1
nResul t ado * = nCnt
Next nCnt

Ret urn nResul t ado


No exempl o descri t o, caso o parâmet r o nFat or não sej a i nformado na função chamadora, o
mesmo t erá seu cont eúdo defi ni do como 1.


- 82 -

ADVPL Compl et o


Se est e t r at ament o não fosse reali zado e com i sso o parâmet r o nFat or não fosse i nformado,
ocor reri a o segui nt e event o de err o:

Ex empl o:

User Funct i on Cal cFat or ( nFat or)

Local nCnt
Local nResul t ado : = 0

For nCnt : = nFat or To 1 St ep - 1 / / nFat or est á como Nul o, port ando nCnt é nul o
nResul t ado * = nCnt
Next nCnt / / Ao efet uar o Next , o i nt erpret ador real i za a ação nCnt + = 1.

Ret urn nResul t ado


Como o i nt erpret ador real i zará a ação nCnt + = 1, e o cont eúdo da vari ável nCnt é nul o
ocor rerá o er ro de “ t ype mi smat h on + = , expect ed N ¬ U” poi s os t i pos das vari ávei s
envol vi dos na operação são di ferent es: nCnt ¬ nul o ( U) e 1 ¬ numéri co ( N) .


Caso o parâmet r o que possui a opção DEFAULT descri t a no font e sej a
i nformado, a li nha de DEFAULT não será execut ada, mant endo dest a forma o
cont eúdo passado pel a função chamadora.




















- 83 -

ADVPL Compl et o



8. Di r et i vas de compi l ação

O compi l ador ADVPL possui uma funci onali dade denomi nada pré- pr ocessador, o qual nada
mai s é do que um programa que exami na o programa font e escri t o em ADVPL e execut a cert as
modi fi cações nel e, baseadas nas Di r et i vas de Compil ação.

As di ret i vas de compil ação são comandos que não são compi l ados, sendo di ri gidos ao pr é-
processador, o qual é execut ado pel o compil ador ant es da execução do processo de
compi l ação propri ament e di t o.

Port ant o, o pr é- pr ocessador modi fi ca o programa font e, ent regando para o compi l ador um
programa modi fi cado de acordo com as di ret i vas de compi l ação, as são i ni ci adas pel o caract er e
“ # ” .

As di ret i vas podem ser col ocadas em qual quer part e do programa, sendo que as
i mpl ement adas pel a li nguagem ADVPL são:

E # I NCLUDE
E # DEFI NE
E # I FDEF
E # I FNDEF
E # ELSE
E # ENDI F
E # COMMAND


Lembr e- se

As di ret i vas de compil ação t ambém são conheci das como UDC – User Defi ned
Commands.


Di r et i v a: # I NCLUDE

A di ret i va # I NCLUDE indi ca em que arqui vo de ext ensão “ CH” ( padrão ADVPL) est ão os UDCs
a ser em ut ili zados pel o pré- pr ocessador.

A apli cação ERP possui di versos i ncl udes, os quai s devem ser ut i lizados segundo a apl i cação
que será desenvol vi da, o que permi t i rá a ut ilização de r ecursos adi cionai s defi ni dos para a
linguagem, i mpl ement ados pel a área de Tecnol ogi a da Mi crosi ga.

Os i ncl udes mai s ut ili zados nas apli cações ADVPL desenvol vi das par a o ERP são:

E PROTHEUS.CH: di ret ivas de compi l ação padrões par a a linguagem. Cont ém a
especi fi cação da mai or i a das sint axes ut ili zadas nos font es, i ncl usive permi t i ndo a
compat i bilidade da si nt axe t radi ci onal do Cli pper para os novos r ecur sos i mpl ement ados
no ADVPL.

- 84 -

ADVPL Compl et o



O i ncl ude PROTHEUS.CH ai nda cont ém a r eferênci a a out ros i ncl udes ut ili zadas pel a
linguagem ADVPL que compl ement am est a funci onali dade de compat i bilidade com a
si nt axe Cli pper, t ai s como:

o DI ALOG.CH
o FONT.CH
o I NI .CH
o PTMENU.CH
o PRI NT. CH



Fi que at ent o

A ut ilização do i ncl ude “ prot heus.ch” nos font es desenvol vi dos para a
apli cação ERP Pr ot heus é obri gat óri a e necessári a ao cor ret o
funci onament o das apl i cações.


E AP5MAI L. CH: Permi t e a ut ili zação da si nt axe t radi ci onal na defini ção das segui nt es
funções de envi o e r ecebi ment o de e- mai l :

o CONNECT SMTP SERVER
o CONNECT POP SERVER
o DI SCONNECT SMTP SERVER
o DI SCONNECT POP SERVER
o POP MESSAGE COUNT
o SEND MAI L FROM
o GET MAI L ERROR
o RECEI VE MAI L MESSAGE

E TOPCONN.CH: Permi t e a ut ili zação da si nt axe t radi ci onal na defi ni ção das segui nt es
funções de i nt egração com a ferrament a TOPCONNECT ( MP10 – DbAcess) :

o TCQUERY

E TBI CONN.CH: Permi t e a ut ili zação da si nt axe t radi ci onal na defi ni ção de conexões com
a apli cação Server do ambi ent e ERP, at ravés da segui nt es si nt axes:

o CREATE RPCCONN
o CLOSE RPCCONN
o PREPARE ENVI RONMENT
o RESET ENVI RONMENT
o OPEN REMOTE TRANSACTI ON
o CLOSE REMOTE TRANSACTI ON
o CALLPROC I N
o OPEN REMOTE TABLES

E XMLXFUN.CH: Permi t e a ut ili zação da si nt axe t radi ci onal na mani pul ação de arqui vos e
st ri ngs no padrão XML, at ravés das segui nt es si nt axes:

o CREATE XMLSTRI NG
o CREATE XMLFI LE
o SAVE XMLSTRI NG
o SAVE XMLFI LE

- 85 -

ADVPL Compl et o


o ADDI TEM TAG
o ADDNODE NODE
o DELETENODE


Os recursos de t rat ament os de e- mail s, int egração com a ferr ament a
TOPCONNECT ( DbAcess) , pr eparação de ambi ent es e mani pul ação de
arqui vos e st ri ngs do padrão XML serão abordados no curso de ADVPL
Avançado.



O di ret óri o de i ncludes deve ser especi fi cado no ambi ent e de
desenvol vi ment o do ERP Prot heus ( MP- I DE) para cada confi guração de
compi l ação di sponível .

Caso o di ret óri o de i ncl udes não est ej a i nformado, ou est ej a i nfor mado
i ncorret ament e será exi bi da uma mensagem de err o i nformando:

“ Não f oi possív el cr i ar o ar qu i v o < cami nho\ nome> .ERX”




As funções desenvol vi das para a apl i cação ERP cost umam ut ili zar i ncl udes
para defi ni r o cont eúdo de st ri ngs e vari ávei s di versas ut ili zadas pel a
apli cação em di ferent es i di omas. Dest a forma é normal veri fi car que um
font e possui um arqui vo “ .CH” com o mesmo nome, o que caract eri za est e
t i po de i ncl ude.


Di r et i v a: # DEFI NE

A di ret i va # DEFI NE per mi t e que o desenvol vedor cri e novos t ermos para ser em ut ilizadas no
códi go font e. Est e t er mo t em o efei t o de uma vari ável de escopo PUBLI C, mas que afet a
soment e o font e na qual o # DEFI NE est á defi ni do, com a caract er íst i ca de não permi t i r a
al t eração de seu cont eúdo.

Dest a forma um t er mo defi ni do at ravés da di ret i va # DEFI NE pode ser consi derado como uma
const ant e.



Os arqui vos de i nclude defi ni dos para os font es da apli cação ERP cont ém
di ret i vas # DEFI NE para as st ri ngs de t ext os de mensagens exi bi das para os
usuári os nos t r ês i di omas com os quai s a apli cação é di st ri buída: Port uguês,
I ngl ês e Espanhol .

Por est a razão a apli cação ERP possui t rês reposi t óri os di st i nt os para cada
uma das bases de dados homol ogadas pel a Mi crosi ga, poi s cada compi l ação
ut ili za uma di ret i va referent e ao seu i di oma.





- 86 -

ADVPL Compl et o



Di r et i v as: # I FDEF, I FNDEF, # ELSE e # ENDI F

As di ret i vas # I FDEF, # I FNDEF, # ELSE e # ENDI F permi t em ao desenvol vedor cri ar font es
fl exívei s e sensívei s a det ermi nadas confi gurações da apl i cação ERP.

At ravés dest as di ret i vas, podem ser veri fi cados parâmet r os do si st ema, t ai s como o i di oma
com o qual est á paramet ri zado e a base de dados ut ili zada para armazenar e ger enci ar as
i nformações do ERP.

Dest a forma, ao i nvés de escr ever doi s ou mai s códi gos font es que r eal i zam a mesma função,
mas ut ilizando recursos di st i nt os para cada base de dados ou exi bi ndo mensagem para cada
um dos i di omas t rat ados pel a apl i cação, o desenvol vedor pode pr eparar seu códi go font e para
ser aval i ado pel o pré- processador, o qual i rá gerar um códi go compi l ado de acordo com a
análi se dos parâmet ros de ambi ent e.

Est as di ret i vas de compil ação est ão normal ment e associ adas as seguint es veri fi cações de
ambi ent e:

E I di oma: veri fi ca as vari ávei s SPANI SH e ENGLI SH, di sponi bilizadas pel a apli cação. O
i di oma port uguês é det ermi nado pel a exceção:


# I FDEF SPANI SH
# DEFI NE STR0001 “ Hol a ! ! ! ”
# ELSE

# I FDEF ENGLI SH
# DEFI NE STR0001 “ Hel lo ! ! ! ”
# ELSE
# DEFI NE STR0001 “ Ol á ! ! ! ”
# ENDI F

# ENDI F




Apesar da est rut ura semel hant e ao I F- ELSE- ELSEI F- ENDI F, não exi st e
a di ret i va de compil ação # ELSEI F, o que t or na necessári o o uso de
di versos # I FDEFs par a a mont agem de uma est rut ura que seria
faci l ment e sol uci onada com I F- ELSE- ELSEI F- ENDI F.



A apli cação ERP di sponi biliza a vari ável de escopo PUBLI C -
__LANGUAGE, a qual cont ém uma st ri ng que i dent i fi ca o i di oma em
uso pel o si st ema, cuj o os cont eúdos possívei s são:

E “ PORTUGUESE”
E “ SPANI SH”
E “ ENGLI SH”




- 87 -

ADVPL Compl et o


E Banco de Dados: veri fi ca as vari ávei s AXS e TOP para det ermi nar se o banco de dados
em uso pel a apli cação est á no formado I SAM ( DBF, ADS, CTREE, et c.) ou se est á
ut ili zando a fer rament a TOPCONNECT ( DbAcess) .


# I FDEF TOP

cQuery : = “ SELECT * FROM ” + RETSQLNAME( “ SA1” )
dbUseAr ea( . T., "TOPCONN", TcGenQr y( ,, cQuer y) , “ SA1QRY” , .T. ,.T.)

# ELSE
DbSel ect Ar ea( “ SA1” )
# ENDI F



Os bancos de dados padrão AS400 não permi t em a execução de quer i es
no format o SQLANSI at r avés da ferrament a TOPCONNECT ( DbAcess) .

Dest a forma é necessári o r eal izar uma veri fi cação adi ci onal ao # I FDEF
TOP ant es de execut ar uma query, que no caso é r eal i zada at ravés do
uso da função TcSrvType( ) , a qual ret orna a st r i ng “ AS/ 400” quando est e
for o banco em uso.

Para est es bancos deve ser ut ili zada a si nt axe ADVPL t radi ci onal .


Di r et i v a: # COMMAND

A di ret i va # COMMAND é ut ili zada pri nci pal ment e nos i ncludes da li nguagem ADVPL para
efet uar a t radução de comandos em si nt axe CLI PPER para as funções i mpl ement adas pel a
Tecnol ogi a Mi crosi ga.

Est a di ret i va permi t e que o desenvol vedor defi na para o compi l ador como uma expressão
deverá ser i nt erpret ada.

Tr echo do ar qu i v o PROTHEUS.CH

# xcommand @ < nRow> , < nCol > SAY [ < oSay> < l abel : PROMPT,VAR > ] < cText > ;
[ PI CTURE < cPi ct > ] ; [ < dl g: OF,WI NDOW, DI ALOG > < oWnd> ] ;
[ FONT < oFont > ] ; [ < l Cent er: CENTERED, CENTER > ] ;
[ < l Right : RI GHT > ] ; [ < l Border: BORDER > ] ;
[ < l Pi xel : PI XEL, PI XELS > ] ; [ < col or: COLOR,COLORS > < nCl rText > [ ,< nCl rBack> ] ] ;
[ SI ZE < nWi dt h> , < nHei ght > ] ; [ < desi gn: DESI GN > ] ;
[ < updat e: UPDATE > ] ; [ < l Shaded: SHADED, SHADOW > ] ;
[ < l Box: BOX > ] ; [ < l Rai sed: RAI SED > ] ;
= > ;
[ < oSay> : = ] TSay ( ) : New ( < nRow> , < nCol > , < { cText } > ,;
[ < oWnd> ] , [ < cPi ct > ] , < oFont > , < .l Cent er. > , < .l Ri ght .> , < .l Border.> ,;
< .l Pi xel .> , < nCl rText > , < nCl rBack> , < nWi dt h> , < nHei ght > ,;
< .desi gn.> , < .updat e.> , < .l Shaded.> , < .l Box.> , < .l Rai sed.> )


At ravés da di ret i va # COMMAND, o desenvol vedor det ermi nou as regras para que a si nt axe
t radi ci onal da linguagem CLI PPER para o comando SAY fosse conver t i da na especi fi cação de
um obj et o TSAY( ) do ADVPL.

- 88 -

ADVPL Compl et o



MÓDULO 03: Desenvol vendo pequenas cust omi zações

9. ADVPL e o ERP Mi cr osi ga Pr ot heus

O ADVPL ( Advanced Pr ot heus Language) é uma linguagem de programação desenvol vi da pela
Mi crosi ga e que cont ém t odas as inst ruções e funções necessári as ao desenvol vi ment o de
um si st ema, i ndependent e de sua compl exi dade.

O PROTHEUS, por out r o l ado, é uma pl at afor ma t ecnol ógi ca que engl oba um Servi dor de
Apli cação, um Di ci onário de Dados e as I nt erfaces para conexão com o usuári o. É o Prot heus
que execut a o códi go ADVPL e o devi do acesso à base da dados.

O Pr ot heus é compost o pel o ERP ( que engl oba, al ém das funcionali dades descri t as nos
capít ul os ant eri ores, mai s de t ri nt a vert i cai s apli cadas a áreas específi cas de negóci os) e
pel o Confi gurador ( programa que permi t e cust omi zar o si st ema às necessi dades do usuári o
de forma fácil ) .

9.1. O Ambi ent e Pr ot heus

O Pr ot heus é const i t uído de um conj unt o de Soft war es que compõem as camadas de
funci onali dades bási cas aos servi ços de apl icação, i nt erface, banco de dados e reposi t óri o,
conforme o di agrama da fi gura abai xo:




O obj et i vo do TOTVS DevSt udi o é faci li t ar a t arefa de escr ever programas: at ravés de cor es,
i ndi ca se a pal avra escri t a é uma i nst rução, uma vari ável ou um coment ári o; organi za a
bi bli ot eca de programas em pr oj et os e admi nist ra o reposi t óri o de obj et os; apont a er ros de
Fi gu r a: Camadas bási cas do ambi ent e Pr ot heu s


Para execut ar um progr ama desenvol vi do em ADVPL, é pr eci so ant es de mai s nada escr evê- l o
e compi l á- l o. Est e procedi ment o é fei t o at ravés da ferrament a TOTVS DevSt udi o do
Prot heus ( Tot vs Devel opment St udi o) .


- 89 -

ADVPL Compl et o


si nt axe; permi t e o debug ( execução passo a passo do pr ograma, veri fi cando o cont eúdo das
vari ávei s) e fornece assi st ent es ( model os) de pr ogramas.


E Prot eger o pr ograma font e, evi t ando que sej a al t erado i ndevi dament e, poi s soment e os
obj et os são di st ri buídos com uma execução mai s rápi da em função da compi l ação no
DEV- St udi o;
Fi gu r a: Man ut enção n o r eposi t ór i o de obj et os


Após compil ar o programa, o resul t ado é um obj et o, o qual é carregado na memóri a fi cando
di sponível para sua execução at ravés da apl i cação PROTHEUS.

O obj et o não é um execut ável , ou sej a, não est á convert i do para a linguagem nat i va do
equi pament o. Quem faz esse t rabal ho é o Prot heus Server em t empo de execução. Por i sso, o
Prot heus Ser ver est á sempre pr esent e na memóri a em t empo de execução, permi t i ndo:


E Fl exi bilização à pl at afor ma de t rabal ho. Assi m, um mesmo programa pode rodar em
ambi ent es Wi ndows, Li nux ou mesmo em um Hand Hel d, fi cando a t arefa de adequação
para o Servi dor Pr ot heus;

E Que o si st ema cresça de forma i limi t ada, poi s os obj et os fi cam fora do execut ável ;

E O uso de macr o subst i t ui ções, ou sej a, o uso de r ot i nas ext eri ores ao si st ema
armazenadas em arqui vos e que podem faci l ment e al t eradas pel o usuár i o, poi s o Ser ver
t ambém i nt erpr et a o códi go font e em t empo de execução.


- 90 -

ADVPL Compl et o




Fi gu r a: Di agr ama esquemát i co de obj et os Pr ot heus

O Reposi t óri o de Obj et os é a bi bli ot eca de obj et os de t odo o ambi ent e Pr ot heus, i ncl uindo
t ant o os obj et os i mpl ement ados par a as funcionali dades bási cas do ERP como aquel es gerados
pel os usuári os. A fi gura abai xo demonst ra a est rut ura e a i nt erconexão ent re as vári as
camadas.



Fi gu r a: Est r ut ur a de i nt er conex ão do Pr ot h eus


- 91 -

ADVPL Compl et o


El a demonst ra t ambém que os dados a ser em processados podem est ar armazenados em
bases I SAM ou em Bancos de Dados padrão SQL. No pri mei ro caso o server comuni ca- se
di ret ament e com os dados. Em Bancos SQL é a i nt erface TOPCONNECT / DBACCESS que
convert e os comandos de ent rada e saída, adequando- os ao SQL ut ili zado ( SQl Server
Mi crosoft , Oracl e, DB2, et c.) .

Uma vez t ermi nado o processament o do obj et o chamado, o el e é descart ado da memóri a, ou
sej a, o Prot heus é um si st ema que pode cr escer de forma i limi t ada poi s os obj et os,
armazenados em um reposi t óri o prat i cament e não ocupam espaço no HD ( Hard Di sk) .

O Pr ot heus é uma pl at afor ma mul t i camada. Ent re as di versas camadas, t emos a i nt erface de
apresent ação ao usuári o ( Remot e) , o t rat ament o dado para as r egras de negóci o
i mpl ement adas ( Server) , o acesso aos obj et os do reposi t óri o ( Ser ver) , o acesso aos
dados di sponívei s no Banco de Dados ( Ser ver ou TOPCONNECT / DBACCESS ) e ao
ger enci ament o de ser vi ços WEB ( Ser ver) . Nest e processo, o Prot heus possui , basi cament e,
quat ro apl i cat i vos ut ilizados com di fer ent es fi nali dades:

E Pr ot heus Ser v er / TOTVS AppSer v er : Responsável pel a comuni cação ent re o cl i ent e,
o banco de dados e o RPO. O nome do execut ável depende da ver são do si st ema
( TOTVSAPPSERVER. EXE) sendo que as pl at aformas I SAM suport adas pel o Pr ot heus
Ser ver são DBF e CTREE.

E Pr ot heus Remot e / TOTVS Smar t Cl i ent : I nst al ado no Server ou na est ação. O
nome t ambém depende da ver são do si st ema ( TOTVSSMARTCLI ENT. EXE) .

E TopCon nect / DbAccess: Responsável pel a conversão dos comandos de banco de
dados, adequando- os ao SQL ut ili zado.

E Pr ot heus Moni t or / TOTVS Moni t or : Progr ama de análi se que veri fi ca quem est á
usando o si st ema e possi bilit a o envi o de mensagens ou mesmo derrubar conexões
( TOTVSMONI TOR.EXE) .

Al guns nomes r efer em- se a um conj unt o de pr ogramas para facili t ar a sua i dent i fi cação:

E RPO: É o arqui vo bi nário do APO ( Advanced Prot heus Obj ect s) , ou sej a, os obj et os.

E Bui l d: Execut ávei s, DLLs e o RPO compl et o.

E Pat ch : At uali zações pont uai s do RPO, apl i cadas por mei o do I DE.

E Updat e: Pacot e de at ualização para o r eposi t óri o ( RPO) li berado peri odi cament e
cont endo t odas as adequações e mel hori as di sponi bili zadas para o si st ema em um
det ermi nado período, sendo não cumul at i vo, apli cadas por mei o do DEV- St udi o.

A i nt erface de apr esent ação é r eali zada pel o Smart Cli ent que pr ocessa a part e da est ação,
basi cament e, t el a e t ecl ado. Pode est ar gravado no Server e ser car regado vi a rede para a
memóri a da est ação. Ou, de pr eferênci a, deve fi car ar mazenado no HD da est ação. Pode
t ambém ser carr egado pel o I nt ernet Expl orer, rodando dent r o do própri o browser com o
Smart Cli ent Act i veX e permi t i ndo o acesso ao Prot heus Server pel a I nt ernet , com as mesmas
funci onali dades do Smart Cli ent , sendo que o browser preci sa supor t ar o uso da t ecnol ogi a
Act i veX.

Caso exi st a al gum Fi rewall ou Proxy ent r e o WEB Server e o Br owser que vai acessar o
Smart Cli ent Act i veX, el es deverão ser confi gurados para permi t i r o seu downl oad.

- 92 -

ADVPL Compl et o



9.2. Or gani zação e conf i gur ação i ni ci al do ambi ent e Pr ot heus

O Prot heus ocupa uma past a que t em a segui nt e est rut ura:



. APO: Cont ém o arqui vo RPO, r eposi t óri o de obj et os do Pr ot heus.
Fi gu r a: Est r ut ur a bási ca das past as do Pr ot heu s

. SMARTCLI ENT: Reúne um conj unt o de arqui vos execut ávei s, dl l ´ s e arqui vos de
confi guração do si st ema, para possi bilit ar o acesso ao servi dor.
. APPSERVER: Reúne um conj unt o de execut ávei s, dll ´ s e arqui vos de confi guração do
si st ema que compõem o servi dor.
. I NCLUDE: Cont ém as bi bli ot ecas necessári as para a compi l ação de programas
Prot heus.
. DATA: Cont ém a base de dados no caso de ver são I SAM.
. SAMPLES: Ofer ece um conj unt o de pr ogramas exempl o e arqui vos ADVPL padr ões da
Mi crosi ga.
. SPOOL: Nest a past a são gravados os rel at óri os gerados em di sco pel o si st ema
Prot heus.
. SYSTEM: Cont ém os arqui vos de menus, os arqui vos de confi gurações e os arqui vos
de cust omi zações ( SXs) do si st ema Prot heus.




- 93 -

ADVPL Compl et o


. SYSTEMLOAD: Cont ém o di ci onári o de dados em format o TXT. É nest e arqui vo que
est ão t odos os padrões e format os para a ger ação dos arqui vos de confi gurações e de
cust omi zações ( SXs) , conforme a l ocal ização de país defi ni da pel o usuári o na ent rada
do si st ema.
. MY PROJECTS: Suger e- se a cri ação dest a past a para armazenar pr oj et os e font es das
cust omi zações real i zadas pel o usuári o.
. UPDATES: Suger e- se est a past a para o ar mazenament o das at uali zações a ser em
apli cadas no si st ema Pr ot heus.

Apesar da est rut ura il ust rada ant eri orment e i ndi car que as past as est ão subordi nadas à past a
PROTHEUS, é possível que al gumas del as possam est ar em máqui nas di ferent es ou at é mesmo
em ambi ent es comput aci onai s di ferent es.


Fi gu r a: For mas de i nst al ação e u so do Pr ot heu s

- 94 -

ADVPL Compl et o



Para i sso, é necessári o confi gurar, ou sej a, i nfor mar ao Prot heus onde est á cada uma del as.
Esse t i po de i nformação const a nos arqui vos de parâmet r os de confi guração do si st ema
( TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI ) exi st ent es nas respect i vas past as
APPSERVER e SMARTCLI ENT.

Os parâmet r os do TOTVSAPPSERVER. I NI são l i dos pel o programa TOTVSAPPSERVER. EXE l ogo
no i níci o de sua execução. O mesmo pr ocediment o ocorr e em r el ação aos parâmet r os do
TOTVSSMARTCLI ENT. I NI pel o pr ograma TOTVSSMARTCLI ENT. EXE. A execução desses doi s
programas é fei t a por mei o de ação do usuári o, facili t ada pel os at al hos TOTVS APPSERVER e
TOTVS SMARTCLI ENT.






Fi gu r a: Li nk s dos par âmet r os de con f i gur ação

Para que o TOTVS AppServer e o TOTVS Smart Cl i ent sej am execut ados, os arqui vos
TOTVSAPPSERVER. I NI e TOTVSSMARTCLI ENT. I NI devem est ar di sponívei s nas respect i vas
past as APPSERVER e SMARTCLI ENT poi s são el es que i ndi cam o endereço das demai s past as
conforme a il ust ração da fi gura ant eri or.

O det al he de pr eenchiment o das pr opri edades dos r espect i vos at al hos TOTVS AppServer e o
TOTVS Smart Cl i ent é demonst rado a segui r. No at alho do TOTV SAppSer ver, é necessári o que
sej a i nformado o parâmet r o “ - debug” ou “ - consol e” .


- 95 -

ADVPL Compl et o



Pr opr i edades dos at al hos


=
Dest i no:
c: \ prot heus\ bi n\ appserver\ t ot vsappserver .exe
- consol e
I ni ci ar em: c: \ prot heus\ bi n\ appserver

E - Consol e ou - Debug

Execut ado como uma Janel aConsol e, as i nfor mações r ecebi das das conexões com o TOTVS
Appli cat i on Server conect ados são exi bidas di ret ament e na t el a do consol e do TOTVS
Appli cat i on Server, bem como i nformações de Não Conformi dades.

E - I nst al l

Se o TOTVS Appli cat ion Server, não for i nst al ado como um Ser vi ço do NT, durant e a
I nst al ação, i st o pode ser r eal i zado, execut ando- o com a opção de Li nha de Comando.

E - Remov e
Para r emovê- l o da Li st a de Servi ços do NT, pode- se execut á- l o com a opção de Li nha de
Comando.


=
Dest i no:
c: \ prot heus\ bi n\ smart cli ent \ t ot vssmart cl i ent e.exe
–M
I ni ci ar em: c: \ prot heus\ bi n\ smart cli ent

E - Q ( Qui et )

I ndi ca que o TOTVS Smart Cli ent , não deverá most r ar o Spl ash ( I magem de Apresent ação) e a
t el a de i dent i fi cação de Parâmet r os I ni ci ai s, necessi t a ser acompanhada da ( Cl áusul a –P) .

E - P ( Mai n Pr ogr am)

I dent i fi ca o Programa ( APO) I ni ci al .

E - E ( Env i r onment )

Nome da Seção de Envi ronment , no ( I ni do Ser ver) , que será ut ili zada, para defi ni ções gerai s.

E - C ( Conn ect i on)

Nome da Seção de Conexão, que ser á ut ili zada, para a conexão ao TOTVS Appli cat i on Server.

E - M ( Al l ow Mul t i Sessi on)

Per mi t e múlt i pl as i nst ânci as ( Cópi as) do TOTVS Smart Cli ent , na mesma máquina, o que por
Defaul t não é permi t i do.


- 96 -

ADVPL Compl et o


Os parâmet ros que confi guram o l ocal do RPO, o Banco de Dados ( I SAM ou SQL) , os arqui vos
de menus, confi gurações e cust omi zações do si st ema no arqui vo I NI são:

E Sour cePat h: I ndi ca o l ocal de ori gem dos obj et os. É o ender eço do Reposi t óri o de
Obj et os ( Exempl o: SourcePat h= C: \ PROTHEUS\ APO)

E Root Pat h: Apont a para a past a rai z ( i ni ci al ) , a part i r da qual ser ão l ocali zados os dados
( no caso de I SAM) , bem como o própri o Di ci onári o de Dados ( Exempl o:
Root Pat h= C: \ PROTHEUS\ PROTHEUS_DATA)

E St ar t Pat h: I ndi ca qual é a past a dent ro da past a rai z ( informada no parâmet ro
Root Pat h) que cont ém os arqui vos de menus, os arqui vos de confi gurações e os
arqui vos de cust omi zações ( SXs) do si st ema Prot heus ( Exempl o:
St art Pat h= \ SYSTEM\ ) .

Não há necessi dade de que os parâmet r os est ej am em ordem nos ar qui vos de confi guração
( .i ni) . Al ém dos parâmet r os j á det al hados, exi st em out ros que podem i ndi car a versão do
si st ema, o t i po de banco de dados, à l inguagem do país em que est á sendo ut i lizado e as
máscaras de edi ção e format ação.



[ ENVI RONMENT]
SOURCEPATHC: \ PROTHEUS\ APO
ROOTPATH= C: \ MP811\ PROTHEUS_DATA
STARTPATH= \ PROTHEUS\
RPODB= TOP
RPOLANGUAGE= PORTUGUESE
RPOVERSI ON= 101
LOCALFI LES= ADS
TRACE= 0
LOCALDBEXTENSI ON= . DBF
PI CTFORMAT= DEFAULT
DATEFORMAT= DEFAULT

[ DRI VERS]
ACTI VE= TCP

[ TCP]
TYPE= TCPI P
PORT= 1234


Fi gu r a: Ex empl o de u m ambi ent e em um ar qu i v o de par âmet r os

No exempl o da fi gura ant eri or, o r ót ul o [ environment ] descreve um conj unt o de parâmet r os
que serão i ni ci alizados no si st ema. Os rót ul os [ Dri ver s] e [ TCP] i dent i ficam a comuni cação que
pode ser est abel eci da ent re o Pr ot heus Server e o Pr ot heus Remot e. Out ros ambi ent es podem
ser confi gurados no mesmo arqui vo ( TOTVSAPPSERVER. I NI ) .

Já o arqui vo de parâmet ros do Prot heus Remot e ( TOTVSSMARTCLI ENT.I NI ) cont ém apenas as
confi gurações l ocai s, basi cament e as i nfor mações necessári as para a i ni ci alização e a
comuni cação com o Pr ot heus Server , conforme o exempl o da fi gura a segui r.


- 97 -

ADVPL Compl et o



[ CONFI G]
LASTMAI NPROG= SI GACFG
LANGUAGE= 1

[ DRI VERS]
ACTI VE= TCP

[ TCP]
SERVER= 172.16.72.41
PORT= 1234

E Act i v e: I ndi ca qual é a for ma de comuni cação.
Fi gu r a: Ex empl o de u m ar qu i v o de con f i gu r ação do r emot e


E Por t : I ndi ca o número da port a a ser ut ili zada para a comuni cação ent re o Prot heus
Ser ver e o Prot heus Remot e. É necessári o que a port a ut ili zada na comuni cação sej a a
mesma em ambos ( no TOTVSAPPSERVER. I NI e no TOTVSSMARTCLI ENT. I NI ) . Val e
ressal t ar que a port a 80 é r eservada para a I nt ernet e pode causar confli t os caso sej a
ut ili zada na comuni cação do Prot heus.

E Ser v er : Apont a para o ender eço do servi dor que pode ser a própri a máquina
( l ocalhost ) ou o nome da máqui na ( Server= Ser vi dor_01) ou mesmo um ender eço I P
( exempl o Ser ver= 172.16.72.41) .

Ex empl o:

O parâmet ro Server= 172.16.72.41 no arqui vo TOTVSSMARTCLI ENT. I NI i ndi ca ao Prot heus
Remot e o ender eço da máquina na qual est á funci onando o Prot heus Ser ver.



- 98 -

ADVPL Compl et o



9.3. O Conf i gur ador do Pr ot heus

9.3.1. Funci onal i dades Abor dadas

O obj et i vo dest e t ópi co não é abranger t odo a est rut ura e recursos do módul o Confi gurador da
apli cação ERP, mas permi t i r a realização de t arefas de confi guração si mpl es que serão
necessári as no desenvol vi ment o de pequenas cust omi zações.

Com foco nest e obj et i vo serão det al hadas as seguint es operações

E Confi guração e cri ação de novas t abel as no Di cionári o de Dados
E At uali zação das est rut ur as do Di ci onári o de Dados
o Tabel as do si st ema
o Vali dações de campos
o Í ndi ces de t abel as
o Gat il hos de campos

Para cont ext uali zar a est rut ura da apli cação ERP, no t ópi co a segui r é det al hada a forma como
as t abel as de dados do si st ema est ão di vi didas ent re os di versos módul os que compõe o
PROTHEUS.

9.3.2. Est r ut ur as bási cas da apl i cação ERP Pr ot heus

Ar qui v os de conf i gur ação do si st ema

Ar qui v o Descr i ção
SI GAMAT Cadast r o de empr esas e fili ai s do si st ema
SI GAPSS Arqui vo de usuári os, gr upos e senhas do si st ema
SI X Í ndi ces dos arqui vos
SX1 Pergunt as e r espost as
SX2 Mapeament o de t abel as
SX3 Di ci onári o de Dados
SX4 Agenda do Schedul e de processos
SX5 Tabel as
SX6 Parâmet r os
SX7 Gat il hos de I nt erface
SX8 Fora de uso
SX9 Rel aci onament os ent re t abel as
SXA Past as cadast rai s apont adas no SX3
SXB Consul t a por mei o da t ecl a F3 ( Consul t a Padrão)
SXD Cont rol e do Schedul e de pr ocessos
SXE Seqüênci a de document os ( + 1)
SXF Seqüênci a de document os ( Pr óxi mo)
SXG Tamanho padrão para campos apont ado pel o SX3
SXK Respost a de Pergunt as ( SX1) por usuári os
SXO Cont rol e de LOGs por t abel a
SXP Hi st óri co de Logs cadast rados no SXO

SXQ
Cadast r o de fi l t ros i nt eligent es da mbr owse ( cont ém as
i nformações necessári as para a cri ação do fi lt ro) .
SXR
Cadast r o de r el aci onament o ent r e pr ograma x fil t ro
( ut ili zada i nt ernament e pel o Pr ot heus para veri fi car em
quai s programas os fi l t ros poderão ser ut ili zados) .

- 99 -

ADVPL Compl et o


SXS
Cadast r o de pr ogramas ( ut ili zado na vali dação para
most r ar/ i ni bi r os fil t ros na execução da mbr owse) .
SXT
Tabel a de usuári os ( cont ém as i nformações dos
usuári os que poderão ut ilizar os fi lt ros da mbr owse) .
SXOffi ce
Cadast r o de r el aci onament o ent r e as ent i dades
( t abel as) e as consul t as TOI I .

Ambi ent es e t abel as

Na apli cação PROTHEUS as t abel as de dados podem t er uma est rut ura mai s si mpl es e
econômi ca, com t abel as em DBF/ ADS, do fabri cant e Ext ended Syst em ou CTREE do fabri cant e
FAI RCOM ou uma est rut ura mai s robust a e compl exa, em bases SQL ( SQLSERVER da
Mi crosoft , ORACLE, DB I I da I BM, SYBASE, MYSQL, POSTGREE, et c. ) .

No caso do SQL, o acesso é fei t o at ravés do TOPCONNECT / DBACESS, que convert e os
comandos do ADVPL para est e ambi ent e.

Para permi t i r uma ut ilização adequada das t abel as de dados do si st ema por cada um dos
ambi ent es da apli cação ERP, as t abel as foram di vi didas em grupos denomi nados “ famíli as” .
Cada módul o pode ut i lizar uma ou mai s famíli as de t abel as especi fi cas para suas at i vi dades, e
ai nda compart i lhar informações com out r os módul os at ravés de famíli as comuns a t odas as
operações real i zadas no si st ema.

A t abel a a segui r demonst ra al guns dos módul os que compõe a apl i cação ERP PROTHEUS
at ual ment e:

Ambi ent e I dent i f i cação
SI GAATF ATI VO FI XO
SI GACOM COMPRAS
SI GACON CONTABI LI DADE
SI GAEST ESTOQUE E CUSTOS
SI GAFAT FATURAMENTO
SI GAFI N FI NANCEI RO
SI GAFI S LI VROS FI SCAI S
SI GAPCP PLANEJAMENTO E CONTROLE DA PRODUÇÃO
SI GAGPE GESTÃO DE PESSOAL
SI GAFAS FATURAMENTO DE SERVI ÇOS
SI GAVEI VEÍ CULOS
SI GALOJ

CONTROLE DE LOJAS/ AUTOMAÇÃO COMERCI AL
SI GATMK CALL CENTER
SI GAOFI OFI CI NAS
SI GAPON PONTO ELETRÔNI CO
SI GAEI C EASY I MPORT CONTROL
SI GATCF TERMI NAL
SI GAMNT MANUTENÇÃO DE ATI VOS
SI GARSP RECRUTAMENTO E SELEÇÃO DE PESSOAL
SI GAQI E I NSPEÇÃO DE ENTRADA – QUALI DADE
SI GAQMT METODOLOGI A – QUALI DADE

O nome de cada t abel a no Pr ot heus é const i t uído de sei s dígi t os, os quai s são ut ilizados para
for mar a segui nt e represent ação:

F X X E E 0


- 100 -

ADVPL Compl et o


Onde:

F SF X Pri mei ro dígi t o represent a a famíli a, o segundo dígi t o
pode ser ut ilizado para det al har ai nda mai s a famíli a
especi fi cada no pri mei ro nível ( subfamília) , e o t er cei ro
dígit o é a numeração seqüenci al das t abel as da famíli a
i ni ci ando em “ 0” e fi nalizando em “ Z” .
E E 0 Os doi s pri mei ros dígi t os i dent i fi cam a que empresa as
t abel as est ão vi ncul adas, l embrando que a i nformação
de fi li al est á cont i da nos dados da t abel a.
O úl t i mo dígi t o é fi xo em “ 0” .

A t abel a a segui r demonst ra al gumas das pri nci pai s famíli as de t abel as ut ili zadas pela
apli cação ERP Prot heus:

Famíl i a Descr i ção
S - Tabel as pert encent es ao si st ema bási co, t ambém chamado Cl assi c
S A
Cadast r os de ent i dades compart il hadas ent re os ambi ent es
( Cli ent es, Fornecedor es, Bancos ent re out r os) .
S B
Cadast r os dos ambi ent es de Mat eri ai s ( Produt os, Sal dos ent re
out ros) .
S C
Arqui vos de movi ment ações di versas ut ili zados pel os ambi ent es de
Mat eri ai s ( Soli ci t ação ao Al moxari fado, Soli cit ação de Compras,
Pedi do de Compras, Pedi do de Vendas, Ordens de Produção ent r e
out ros) .
S D
Arqui vos de movi ment ações de est oque ( I t ens de not as fi scai s de
ent rada e saída, movi ment os i nt ernos de est oque ent r e out r os) .
S E Cadast r os e movi ment ações do ambi ent e Fi nancei ro.
S F
Cadast r os e movi ment ações Fi scai s ( Cabeçal hos das not as fi scai s
de ent rada e saída, cadast ro de t i pos de ent rada e saída, li vros
fi scai s, ent re out r os) .
S G Cadast r os do ambi ent e de Pl anej ament o e Cont rol e de Produção
S H Movi ment os do ambi ent e de Pl anej ament o e Cont rol e de Pr odução
S I Cadast r os e movi ment os do ambi ent e Cont ábi l ( descont i nuado)
S N Cadast r os e movi ment os do ambi ent e At i vo Fi xo
S R Cadast r os e movi ment os do ambi ent e Gest ão de Pessoal
S X Tabel as de confi guração do si st ema
S Z Tabel as li vres para ut ilização e proj et os específicos em cl i ent es.
A - Gest ão de Pr oj et os
C - Cont abili dade Gerenci al
C T Cont abili dade Gerenci al
C V Cont abili dade Gerenci al
C W Cont abili dade Gerenci al
D - Transport adoras e deri vados
E - Comérci o ext eri or e deri vados
G - Gest ão Hospi t al ar
J - Gest ão Educaci onal
N - Ser vi ços Públ i cos
P - Reser vado para proj et os da fábri ca de soft war e
Q - Quali dade e deri vados
R - Recur sos Humanos e deri vados
T - Pl ano de Saúde
W - Workfl ow
Z - Tabel as li vres para ut ilização e proj et os específi cos em cl i ent es em
adi ção a famíli a SZ.

- 101 -

ADVPL Compl et o



Í ndi ces

Cada t abel a do si st ema possui seus índi ces defi ni dos no arqui vo de confi guração SI X, o qual
pode ser at ual i zado at ravés do módul o Confi gurador.

Os arqui vos de índi ces das t abel as de si st ema serão cri ados de acordo com o banco de dados
ut ili zado ( I SAM ou conexão vi a TOPCONNECT) .

Para bancos de dados I SAM, será gerados arqui vos com a mesma nomencl at ura da t abel a de
dados, mas com uma ext ensão di fer enci ada ( at ual ment e .CDX) . No caso da ut i lização de um
banco de dados, cada índi ce será uma numer ação seqüenci al em função do nome da t abel a
ori gi nal .

As especi fi cações das chaves de índi ces de cada um das t abel as est á di sponível no arqui vo de
si st ema SI X, e a chave úni ca da t abel a ut ili zada para banco de dados est á descri t a na t abela
SX2.

Menu s

Cada módul o da apli cação ERP possui um menu padrão com t odas as funci onali dades
di sponívei s para o ambi ent e, menu est e defi ni do at ravés de si nt axe XML ( arqui vos .XNU) .

Os menus possuem uma est rut ura padrão que permi t e ao usuári o l ocali zar e i dent i fi car
faci l ment e cada uma das funci onali dades ofer eci das pel o ambi ent e.

9.3.3. Acessando o módul o Conf i gur ador

Para execut ar o módul o Confi gurador é necessári o que a apli cação Pr ot heus Server est ej a em
execução e at ravés da apli cação Prot heus Remot e deverá ser i nformada como programa i ni ci al
a opção SI GACFG.



Fi gu r a: Par âmet r os de i ni ci al i zação do si st ema



- 102 -

ADVPL Compl et o




Após a confi rmação, a vali dação do acesso é fei t a conforme t el a il ust rada a segui r:


Fi gu r a: Val i dação de acesso



Fi gu r a: Con f i r mação do acesso ao módul o Conf i gu r ador




- 103 -

ADVPL Compl et o



Logo após a sua confi rmação do usuári o e senha com di rei t o de admi ni st rador , ser á
apresent ada a t el a i ni cial do confi gurador , conforme most ra a fi gura a segui r:



Fi gu r a: I nt er f ace pr i n ci pal do módu l o Conf i gur ador














- 104 -

ADVPL Compl et o



9.4. Funci onal i dades do Conf i gur ador

A cust omi zação de um si st ema como o Pr ot heus consi st e em adapt ar o si st ema de forma a
mel hor at ender as necessi dades do cl i ent e.

A fl exi bilidade de um si st ema, ou sej a, sua capaci dade de adapt ar- se ( pol i morfi smo, aquel e
que assume vári as formas) é uma das mai s i mport ant es caract eríst i cas de uma sol ução ERP.

As funci onalidades t rat adas pel o Confi gurador defi nem a fl exi bilidade do ERP Pr ot heus.
Fl exi bilizar sem despadroni zar, ou sej a, t udo que foi cust omi zado permanece vál i do, mesmo
com o desenvol vi ment o de novas versões.




Fi gu r a: Pr i nci pai s f u n ci on al i dades do módu l o Conf i gu r ador


O Confi gurador é o programa bási co para o pr ocesso de cust omi zação do Prot heus at ravés da
al t eração das t abel as da famíli a SX. Nel es, o usuári o ou o anali st a de suport e r esponsável pel a
i mpl ant ação confi gura as i nformações que ser ão ut ili zadas pel os demai s ambi ent es do si st ema.

Essas i nformações vão de si mpl es parâmet ros at é compl exas expr essões e comandos que são
i nt erpr et adas em t empo de execução.

Nos pr óxi mos t ópi cos serão abordadas as funci onali dades de cust omi zação di sponívei s no
ambi ent e Confi gurador, rel evant es ao obj et i vo de desenvol vi ment o de pequenas
cust omi zações para a apli cação ERP.







- 105 -

ADVPL Compl et o


9.4.1. Di ci onár i o de Dados da apl i cação ERP

A i déi a do Di ci onári o de Dados é permi t i r que o usuári o possa i nclui r ou ini bi r campos, ou
mesmo al t erar as pr opri edades dos campos exi st ent es. Pode, ai nda, cri ar novas t abel as. Ou
sej a, os pr ogramas ao invés de t erem os campos defi ni dos em seu códi go ori ginal , l êem o
Di ci onári o em t empo de execução, mont ando ar rays com as pr opri edades de cada um. A part i r
daí, sua ut ilização é normal , at ravés do uso de funções do ADVPL que t ornam o t rabal ho do
desenvol vedor t ranspar ent e a est a arqui t et ura.

O obj et i vo do Di ci onári o de Dados é permi t i r que o pr ópri o usuári o cri e novas t abel as ou al t ere
os campos nas t abel as exi st ent es quant o ao seu uso, sua ordem de apresent ação, l egenda
( nos t r ês i di omas) , val i dação, hel p, obri gat ori edade de pr eenchi ment o, i ni ci alização et c.



9.4.2. Adi ção de t abel as ao Di ci onár i o de Dados
Fi gu r a: Con j u nt o de pacot es que compõe o Di ci onár i o de Dados




Pr ocedi ment o

1. Para adi ci onar uma t abel a ao di ci onári o de dados de uma empr esa, sel eci one a opção
Di ci onári o de Dados abai xo da empresa que ser á at ualizada. ( árvor e de opções da part e
esquerda da i nt erface vi sual do Ger enci ador de Bases de Dados) .

2. Após a sel eção da opção Di ci onári o de Dados serão exi bi das as t abel as j á cadast r adas
no arqui vo de si st ema SX2.





- 106 -

ADVPL Compl et o





3. Após a vi suali zação das t abel as j á cadast radas no SX2 da empresa sel eci onada, ut ili ze o
bot ão I ncl ui r (
Fi gu r a: Con j u nt o de t abel as j á cadast r adas no SX2

) . Ao ut ilizar est a opção será exi bi da a t el a para defi ni ção dos dados
referent es à nova t abel a que será cri ada:









- 107 -

ADVPL Compl et o




4. Reali ze o preenchi ment o das i nformações sol i ci t adas de acordo com as ori ent ações a
segui r, e ao t érmi no confi rme o cadast rament o da nova t abel a com o bot ão Confi rmar
(
Fi gu r a: Cadast r o de u ma nov a t abel a


) .


Or i ent ações par a o cadast r ament o de u ma nov a t abel a

E O domíni o SZ1 at é SZZ ( consi derando t odos os númer o e t odas as l et ras no úl t i mo
byt e) é r eser vado par a dados excl usi vos do usuári o poi s esse i nt er val o não será
ut ili zado pel o si st ema. Caso sej a necessári o o domíni o Z00 a ZZZ t ambém pode ser
empr egado para desenvol vi ment os específi cos do cl i ent e.


Não devem ser cri adas t abel as específi cas de cl i ent es com
quai squer out ras nomencl at uras, o que pode afet ar di ret ament e
um processo de at uali zação fut uro.

E O nome da t abel a é pr eenchi do aut omat i cament e, adi ci onando 990. Esse dado r efer e-
se à empr esa 99 ( Test e Mat ri z) a qual est á sendo adi ci onado à t abel a.

E O Pat h refer e- se à past a que cont erá efet i vament e os dados das t abel as, quando I SAM,
nas versões com banco de dados r el aci onal não são ut ili zadas. Essa past a será cri ada
dent ro da past a i ndi cada na confi guração do si st ema como ROOTTPATH.

E O modo de acesso compart il hado indi ca que o si st ema possi bilit ará o uso si mul t âneo da
t abel a por duas ou mai s fi liai s. Se for compart i l hado o campo Fi li al fi ca em branco. Se
for excl usi vo, grava- se o códi go da fi li al at i va e soment e el a t em acesso ao r egi st ro.

E Após a confi rmação, a t abel a cri ada passa a fazer part e do cadast r o do Di ci onári o de
Dados, cont endo soment e o campo FI LI AL, o qual é cri ado como padrão pel a

- 108 -

ADVPL Compl et o


funci onali dade do módul o.

9.4.3. Adi ção de campos as t abel as do Di ci onár i o de Dados

Pr ocedi ment o

1. Para adi ci onar um campo a uma t abel a do di ci onári o de dados de uma empresa,
sel eci one a opção Di ci onári o de Dados abai xo da empr esa que será at ualizada. ( árvore
de opções da part e esquerda da i nt erface vi sual do Gerenci ador de Bases de Dados) .

2. Após a sel eção da opção Di ci onári o de Dados serão exi bi das as t abel as j á cadast r adas
no arqui vo de si st ema SX2.



3. Após a vi suali zação das t abel as j á cadast radas no SX2 da empresa sel eci onada, l ocal ize
e sel eci one a t abel a que será at ual izada, e ut ili ze o bot ão Edi t ar (
Fi gu r a: Con j u nt o de t abel as j á cadast r adas no SX2

) . Ao ut ili zar est a
opção ser á exi bi da a t ela de manut enção de campos da t abel a sel eci onada:


- 109 -

ADVPL Compl et o




4. Sel eci one a opção Campos (
Fi gu r a: Est r ut ur a de uma t abel a j á cadast r ada n o si st ema

) , para que sej am exi bi dos os campos
di sponívei s para a t abela no arqui vo de si st ema SX3.


Fi gu r a: Est r ut ur a de campos de uma t abel a j á cadast r ada no si st ema

- 110 -

ADVPL Compl et o


5. Após a vi suali zação dos campos j á cadast rados no SX3 da t abel a sel eci onada, ut ili ze a
opção I ncl ui r ( ) . Ao ut ilizar est a opção será exi bi da a t el a para defini ção dos dados
referent es ao novo campo que será cri ado:


5. Reali ze o preenchi ment o das i nformações sol i ci t adas de acordo com as ori ent ações a
segui r, e ao t érmi no confi rme o cadast rament o do novo campo par a a t abel a com o
bot ão Confi rmar (
Fi gu r a: Dados par a par amet r i zação de u m nov o campo no si st ema

) .
6. Confi rme as at uali zações para a t abel a sel eci onada com o bot ão Confi rmar ( ) .
7. At uali ze as confi gurações do si st ema com o bot ão At uali zar ( ) .


Fi gu r a: At u al i zação dos dados do si st ema

- 111 -

ADVPL Compl et o


20


Or i ent ações par a o cadast r ament o de u m n ov o campo

1. As pr opri edades defi ni das no Di ci onári o de Dados ( SX3) são as segui nt es:

E Nome do campo: Todos os campos t êm como prefi xo o pr ópri o nome da t abel a, sendo
que para t abel as da famíli a “ S” , o pr efi xo do campo é compost o apenas pel os pr óxi mos
doi s dígi t os. No caso das demai s t abel as, o prefi xo do campo serão os t rês dígi t os
i dent i fi cadores da t abel a.

E Ti po do campo: I ndi ca se é caract er e, numéri co, l ógi co, dat a ou memo. É cl aro que a
mudança do t i po de campo deve ser fei t a com mui t o cui dado, poi s, se t i vermos um
campo numéri co usado em cál cul os e el e for al t erado para caract er e, cert ament e
t er emos um er r o.

E Tamanho do campo: Também aqui é necessári o cert o cui dado ao al t erá- l o, poi s
poderemos t er t runcament os em rel at óri os e consul t as em que há espaço para
cont eúdos mai or es que o ori ginal .

E For mat o de edi ção: Defi ne como o campo aparece nas t el as e nos rel at óri os.

E Cont ex t o: Pode ser r eal ou vi rt ual . O cont ext o vi rt ual cri a o campo soment e na
memóri a e não na t abel a armazenada no di sco. I sso é necessári o porque os
programas de cadast rament o e de consul t a genéri ca apresent am soment e uma t abel a
de cada vez. Assi m, se qui sermos apresent ar um campo de uma out ra t abel a, ou
mesmo o resul t ado de um cál cul o, sem que t al i nformação ocupe espaço físi co no HD,
ut ili zamos o cont ext o vi rt ual . Campos vi rt uai s normal ment e são ali ment ados por
gat ilhos.

E Pr opr i edade: I ndi ca se um campo pode ou não ser al t erado pel o usuári o. Exempl o:
sal dos nor mal ment e não podem, poi s quem cuida dessa t ar efa são os programas.

2. Demai s caract eríst i cas que devem ser observadas na confi guração do campo:


E O campo Deci mal será soli cit ado soment e para os campos de t i po numéri co.
Gui a: Campo


E O format o “ ! ” i ndi ca que o caract ere será sempre mai úscul o, i ndependent e da ação
do usuári o. O format o “ @! ” i ndi ca que essa caract eríst i ca est ende- se por t odo o
campo.

E O cont ext o r eal indi ca que o campo exi st i rá efet i vament e no banco de dados e o
cont ext o vi rt ual si gni fi ca que o campo exi st i rá apenas no di ci onári o de dados e não
fi si cament e.

E A propri edade al t erar i ndi ca que o campo pode ser al t erado.

E Nest a j anel a, os dados est ão cl assi fi cados em sei s past as com obj et i vos de
preenchi ment o bem específi cos:




- 112 -

ADVPL Compl et o


E Cont ém as i nformações a r espei t o dos t ít ul os.
Gui a: I nf or mações


E Tít ul o: É a l egenda que apar ece nas t el as/ rel at óri os. Há i ncl usi ve t r ês campos para
est a fi nali dade: em port uguês, espanhol e i ngl ês. Est a pr opri edade pode ser al t erada à
vont ade, poi s não i nt erfer e em nenhum processament o.

E Descr i ção e Hel p: São propri edades que obj et i vam document ar o campo.


E Cont ém os dados que facili t am a di gi t ação.
Gui a: Opções


E Repr esent am as r egras de val i dação do campo.
Gui a: Val i dações


E Val i dações: Nest a propri edade, escr eve- se uma função de val i dação do campo que
est á sendo di gi t ado. Exi st e um conj unt o de funções di sponívei s no ADVPL apropri adas
para esse caso.

E Todas as val i dações i nformadas serão execut adas no moment o do pr eenchi ment o do
própri o campo. Uma vali dação pode ser uma expressão l ógi ca ou uma função de
usuári o que r et orna um val or l ógi co Verdadei ro ou Fal so. O si st ema só permi t i rá o
avanço para o pr óxi mo campo quando o respect i vo preenchi ment o r esul t ar Verdadei ro
sej a na expressão ou no r et orno da função.

E Descr eve a forma de ut i li zação do campo.
Gui a: Uso


E Rel aci ona t odos os módul os em que o campo será ut ili zado.
Gui a: Módul os













- 113 -

ADVPL Compl et o



9.4.4. Adi ção de índi ces par a as t abel as do Di ci onár i o de Dados

Conforme menci onado ant eri orment e, no ambi ent e Prot heus uma t abel a pode t er vári os
índi ces, os quai s serão gerados de acordo com o banco de dados confi gurado para o si st ema.

Os índi ces do si st ema auxili am na sel eção e obt enção de i nformações da base de dados al ém
de det er mi nar a ordem de apr esent ação dos r egi st ros de uma t abel a em consul t as e r el at óri os.

Pr ocedi ment o

1. Para adi ci onar um índice a uma t abel a do di ci onári o de dados de uma empr esa,
sel eci one a opção Di ci onári o de Dados abai xo da empr esa que será at ualizada. ( árvore
de opções da part e esquerda da i nt erface vi sual do Gerenci ador de Bases de Dados) .

2. Após a sel eção da opção Di ci onári o de Dados serão exi bi das as t abel as j á cadast r adas
no arqui vo de si st ema SX2.


3. Após a vi suali zação das t abel as j á cadast radas no SX2 da empresa sel eci onada, l ocal ize
e sel eci one a t abel a que será at ual izada, e ut ili ze o bot ão Edi t ar (
Fi gu r a: Con j u nt o de t abel as j á cadast r adas no SX2

) . Ao ut ili zar est a
opção ser á exi bi da a t ela de manut enção de campos da t abel a sel eci onada:

- 114 -

ADVPL Compl et o




4. Sel eci one a opção índi ces (
Fi gu r a: Est r ut ur a de uma t abel a j á cadast r ada n o si st ema


) , para que sej am exi bi dos os índices
di sponívei s para a t abela no arqui vo de si st ema SI X.




5. Após a vi suali zação dos índi ces j á cadast rados no SI X para a t abel a sel eci onada, ut ili ze
a opção I ncl ui r (
Fi gu r a: Í n di ces di sponív ei s par a a t abel a n o ar qu i v o de si st ema SI X


) . Ao ut ili zar est a opção será exi bida a t el a para defi ni ção dos
dados refer ent es ao novo índi ce que será cri ado:




- 115 -

ADVPL Compl et o






6. Reali ze o preenchi ment o das informações soli ci t adas de acordo com as ori ent ações a
segui r, e ao t érmi no confi rme o cadast rament o do novo índi ce para a t abel a com o bot ão
Confi rmar (
Fi gu r a: Adi ção de um índi ce par a u ma t abel a


) .
7. Confi rme as at uali zações para a t abel a sel eci onada com o bot ão Confi rmar ( ) .
8. At uali ze as confi gurações do si st ema com o bot ão At uali zar ( ) .



Fi gu r a: At u al i zação dos dados do si st ema

- 116 -

ADVPL Compl et o



Or i ent ações par a o cadast r ament o de u m n ov o índi ce

E O Ni ck name é uma i dent i fi cação compl ement ar do índi ce o qual pode ser ut ilizada para
auxili ar o desenvol vedor na ut ili zação dest a or dem em uma apl i cação, a qual pode ser
padrão do si st ema ou específi ca de um cli ent e.

E Para sel eci onar os campos j á cadast rados na t abel a, pode ser ut ili zado o bot ão Campos
( ) . Est a faci li dade preenche, aut omat i cament e, os campos de descri ção.

E O campo r el at i vo à fili al sempre faz part e dos índi ces, com exceção do SM2, para que
os r egi st ros nas t abel as est ej am agrupados por fi li ai s, i ndependent e dest a t abel a ser
compart il hada ent re as fili ai s.

E Uma t abel a poderá t er vári os índi ces cadast rados no Di ci onári o de Dados. Em
det ermi nado moment o, por ém, apenas um del es ofer ecerá acesso ao regi st ro. Essa
ordem pode ser al t erada em t empo de execução pel os pr ogramas da apli cação, at ravés
do comando DBSet Order( ) , ou at ravés da defi ni ção de uma ordem específi ca na
ut ili zação de queri es para acesso as dados di ret ament e em bancos de dados de
ambi ent es TOPCONNECT ( DbAcess) .


9.4.5. Adi ção de gat i l hos par a os campos das t abel as do si st ema

Pr ocedi ment o

1. Para adi ci onar um gat ilho a um campo de uma t abel a do di ci onári o de dados de uma
empr esa, sel eci one a opção Gat il ho abai xo da empr esa que será at ual i zada. ( árvor e de
opções da part e esquer da da i nt erface vi sual do Gerenci ador de Bases de Dados) .

2. Após a sel eção da opção Gat il hos serão exi bi dos os i t ens j á cadast radas no arqui vo de
si st ema SX7.



Fi gu r a: Con j u nt o de gat i l hos j á cadast r os n o SX7

- 117 -

ADVPL Compl et o



3. Após a vi suali zação dos gat ilhos j á cadast rados no SX7 da empresa sel eci onada, ut ili ze
o bot ão I ncl ui r ( ) para r eali zar o cadast r o de um novo gat il ho no si st ema:



4. Reali ze o preenchi ment o das i nformações sol i ci t adas de acordo com as ori ent ações a
segui r, e ao t érmi no confi rme o cadast rament o do novo gat i lho de si t ema com o bot ão
Confi rmar (
Fi gu r a: Dados par a o cadast r o de um nov o gat i l ho n o si st ema


) .

Or i ent ações par a o cadast r ament o de u m n ov o gat i l h o


E Pode haver vári os gat i lhos para o mesmo campo. A ordem de execução é det ermi nada
pel o campo Seqüênci a.

E Os t i pos do Gat i lho Primári o, Est rangei ro e de Posi ci onament o defi nem se o Cont ra
Domíni o é um campo da mesma t abel a, de out ra t abel a ou se o gat ilho deve real i zar
um posi ci onament o, respect i vament e.

E A regra pode ser uma expr essão que r esul t a em um val or a ser preenchi do no Cont ra
Domíni o.

E O posi ci onament o i gual a Si m indi ca que será execut ado um comando de busca do
regi st ro de acordo com a chave i ndi cada.

E O Ali as, a Ordem e a Chave descr evem a t abel a envol vi da no gat ilho, seu índi ce e a
chave para que a funci onalidade se posi ci one no r egi st ro adequado.

- 118 -

ADVPL Compl et o



9.4.6. Cr i ação de Tabel as Genér i cas

Pr ocedi ment o

1. Para adi ci onar uma t abel a genéri ca, sel eci one os menus Ambi ent e, Cadast ros, Tabel as.

2. Após a sel eção da opção Tabel as serão exi bi dos os i t ens j á cadast r adas no arqui vo de
si st ema SX5.


3. Após a vi suali zação das t abel as j á cadast rados no SX5 da empresa sel eci onada, ut ilize o
bot ão I ncl ui r (
Fi gu r a: Con j u nt o de Tabel as j á cadast r as n o SX5

) para r eali zar o cadast ro de uma nova t abel a no si st ema:


Fi gu r a: Dados par a o cadast r o de uma n ov a t abel a n o si st ema

- 119 -

ADVPL Compl et o



4. Reali ze o preenchi ment o das i nformações sol i ci t adas de acordo com as ori ent ações a
segui r, e ao t érmi no confi rme o cadast rament o da nova t abel a do si st ema com o bot ão
Confi rmar ( ) .


9.4.7. Cr i ação de Par âmet r os

Pr ocedi ment o

1. Para adi ci onar um Parâmet r o, sel eci one os menus Ambi ent e, Cadast ros, Parâmet r os.

2. Após a sel eção da opção Tabel as serão exi bi dos os i t ens j á cadast r adas no arqui vo de
si st ema SX6.




3. Após a vi sualização dos Parâmet r os j á cadast rados no SX6 da empr esa sel eci onada,
ut ili ze o bot ão I ncl ui r (
Fi gu r a: Con j u nt o de Par âmet r os j á cadast r as no SX6

) para r eal i zar o cadast ro de uma nova t abel a no si st ema:


- 120 -

ADVPL Compl et o




4. Reali ze o preenchi ment o das i nformações sol i ci t adas de acordo com as ori ent ações a
segui r, e ao t érmi no confi rme o cadast rament o do novo Parâmet ro do si st ema com o
bot ão Confi rmar (
Fi gu r a: Dados par a o cadast r o de um nov o par âmet r o no si st ema

) .

- 121 -

ADVPL Compl et o




10. TOTVS Dev el opment St udi o

A fer rament a TOTVS Devel opment St udi o é um programa que faz part e do Prot heus e permi t e
o t rabal ho de edi ção, compil ação e depuração de pr ogramas escri t os em ADVPL.

Pr oj et o

Um programa para ser compi l ado deve ser vi ncul ado a um proj et o. Normal ment e, pr ogr amas
que fazem part e de um det ermi nado módul o ou ambi ent e est ão em um mesmo proj et o.

A vi ncul ação dos progr amas a um pr oj et o é fei t a por mei o dos arqui vos do t i po PRW. Na
verdade, um proj et o pode ser const i t uído de um ou mai s arqui vos dest e t i po, que por sua vez,
podem t er uma ou mai s funções, conforme i lust ra o di agrama a segui r:



Fi gu r a: Repr esent ação da est r ut ur a de um pr oj et o no DEV- St udi o


- 122 -

ADVPL Compl et o


Compi l ação

Uma vez adi ci onado a um proj et o e compil ado sem i nci dênci as de err os de códi go, o obj et o
resul t ant e será cadast rado no RPO ( Reposi t óri o de Obj et os) e poderá ser ut ilizado pel a
apli cação ERP.

A compi l ação dos i t ens de um pr oj et o pode ser real i zada i ndi vi dual ment e, por grupo de font es
( past as) ou ai nda sel eci onando- o i nt ei rament e. Cada uma dos font es será pr ocessado e
compi l ado separadament e, permi t i ndo a vi sualização do pr ogr esso da operação e das
mensagens de avi so ( warni ngs) ou er ros ( cri t i cal err or s) na gui a Mensagens.

Ex ecução

Para que os obj et os compil ados e di sponívei s n RPO sej am ut ili zados, devem ser obser vadas as
segui nt es r egras:

E Se o pr ograma não mani pul a arqui vos, pode- se chamá- l o di ret ament e do DEV- St udi o
( nome no l ado di rei t o da barr a de fer rament as) ;

E Se o pr ograma mani pula t abel as exi st em duas opções:

. Adi ci onar o programa no menu de um dos ambi ent es e execut a- lo at ravés do
Remot e.

. Reali zar a pr eparação do ambi ent e na própri a r ot i na, permi t i ndo sua execução
di ret ament e pel o DEV- St udi o.

E Não se pode compil ar um programa com o Remot e e o Moni t or abert os, t enha est e
fi nalizado ou não por er ro.

An ál i se e depur ação de er r os

Para i dent i fi car as causas de err os, a ferrament a DEV- St udi o possui di versos r ecursos que
auxili am o DEBUG.

A ação de DEBUG necessi t a que o programa sej a execut ado a part ir do DEV- St udi o, sendo
necessári o observar as segui nt es r egras:

E Defi ni r e mar car os pont os de parada mai s adequados a anál i se do font e;

E Execut ar a r ot i na at ravés do DEV- St udi o, sel eci onando seu nome di r et ament e, ou o
módul o que cont ém a opção ou a ação que i rá execut á- l a;

E A part i r do moment o em que o DEV- St udi o pausar o processament o em um dos pont os
de parada especi fi cados previ ament e podem ser ut ilizadas as j anel as de vi sualização
di sponívei s no DEV- St udi o, que são:

. Vari ávei s Locai s
. Vari ávei s Pri vat es
. Vari ávei s Publi c’s
. Vari ávei s St at i c’s
. Janel a da Wat ch’s
. Janel a de Tabel as e Campos
. Pil ha de Chamadas

E At ravés da Janel a de Wat ch’s é possível det ermi nar quai s vari ávei s devem ser exi bidas;

- 123 -

ADVPL Compl et o


E Na pil ha de chamadas, veri fi ca- se a seqüênci a de chamadas das funções;
E Na past a de Comandos, pode- se, enquant o o pr ograma est i ver pausado, escr ever
qual quer comando e ao dar Ent er , el e é execut ado, permi t indo pesqui sar pal avras e
expr essões no pr ópri o font e ou em qual quer font e armazenado no HD;

E Ao parar pode- se ou cont i nuar o programa at é o próxi mo pont o de parada, caso haj a
um out ro defi ni do, ou execut ar l inha a linha da rot i na.

I nt er f ace da apl i cação

Por ser um ambi ent e int egrado de desenvol viment o, o DEV- St udi o propor ci ona t odas essas
faci lidades, por mei o de i nt erface úni ca como ilust ra a fi gura a segui r:



E O DEV- St udi o apresent a, no t opo da t el a, um conj unt o de opções de menu e uma séri e
de bot ões que facili t am a sua mani pul ação.
Fi gu r a: I nt er f ace pr i n ci pal do TOTVS Dev el opment St u di o


E Na t el a cent r al , é apr esent ado o códi go das funções em ADVPL. Na part e i nferi or são
exi bi das al gumas past as que faci lit am a execução de comandos, exi bição de cont eúdos
de vari ávei s e mensagens, bem como dados sobre o proj et o.


- 124 -

ADVPL Compl et o



Desenvol v i ment o de pequenas cust omi zações


11. Acesso e mani pul ação de bases de dados em ADVPL

Como a l inguagem ADVPL é ut ili zada no desenvol vi ment o de apli cação para o si st ema ERP
Prot heus, el a deve possui r recursos que per mit am o acesso e a manipul ação de i nformações
i ndependent ement e da base de dados para o qual o si st ema foi confi gurado.

Dest a forma a l inguagem possui doi s grupos de funções di st i nt os para at uar com os bancos de
dados:

E Funções de mani pul ação de dados genéri cas
E Funções de mani pul ação de dados específi cas para ambi ent es TOPCONNECT /
DBACCESS

Funções de mani pul ação de dados genér i cas

As funções de mani pul ação de dados di t as como genéri cas per mi t em que uma apli cação ADVPL
sej a escri t a da mesma for ma, i ndependent e se a base de dados confi gurada para o si st ema
ERP for do t i po I SAM ou padrão SQL.

Mui t as dest as funções foram i ni ci al ment e herdadas da l i nguagem CLI PPER, e medi ant e novas
i mpl ement ações da ár ea de Tecnol ogi a da Mi crosi ga foram mel horadas e adequadas às
necessi dades do ERP. Por est a razão é possível encont rar em document ações da l i nguagem
CLI PPER i nformações sobre funções de mani pulação de dados ut i lizadas na fer rament a ERP.

Dent r e as mel hori as i mpl ement adas pel a área de Tecnol ogi a da Mi crosi ga, podemos menci onar
o desenvol vi ment o de novas funções como por exempl o a função MsSeek( ) - versão da
Mi crosi ga para a função DbSeek( ) , e a i nt egração ent re a si nt axe ADVPL convenci onal e a
ferrament a de acesso a bancos de dados no padrão SQL – TOPCONNECT ( DbAcess) .

A i nt egração ent r e a apli cação ERP e a ferrament a TOPCONNECT permi t e que as funções de
acesso e mani pul ação de dados escri t as em ADVPL sej am i nt erpret adas e convert i das par a
uma si nt axe compat ível com o padrão SQL ANSI e dest a forma apl i cadas aos SGDBs ( Si st emas
Gerenci adores de Bancos de Dados) com sua si nt axe nat i va.

Funções de mani pul ação de dados par a ambi ent es TOPCONNECT / DBACCESS

Para i mpl ement ar um acesso mai s ot i mi zado e di sponi bili zar no ambi ent e ERP funci onali dades
que ut ili zem de forma mai s adequada os recursos dos SGDBs homol ogados para o si st ema,
foram i mpl ement adas funções de acesso e mani pul ação de dados específi cas para ambi ent es
TOPCONNECT/ DBACCESS.

Est as funções permi t em que o desenvol vedor ADVPL execut e comandos em si nt axe SQL
di ret ament e de um códi go font e da apli cação, di sponi bili zando recursos como execução de
queri es de consul t a, chamadas de pr ocedur es e comuni cação com out ros bancos de dados
at ravés de ODBCs.


As funções específi cas para ambi ent es TOPCONNECT serão abordas no
mat eri al de ADVPL Avançado.

- 125 -

ADVPL Compl et o



11.1. Di f er enças e compat i bi l i zações ent r e bases de dados

Como a apli cação ERP pode ser confi gurada para ut ili zar di ferent es t i pos de bases de dados é
i mport ant e menci onar as pri nci pai s di ferenças ent re est es r ecursos, o que pode det ermi nar a
for ma como o desenvol vedor i rá opt ar por escr ever sua apl i cação.

Acesso a dados e índi ces

No acesso a i nformações em bases de dados do padrão I SAM são sempre l i dos os regi st r os
i nt ei ros, enquant o no SQL pode- se l er apenas os campos necessári os naquel e processament o.

O acesso di ret o é fei t o at ravés de índi ces que são t abel as paral el as às t abel as de dados e que
cont êm a chave e o ender eço do r egi st ro, de forma anál oga ao índi ce de um li vro. Para cada
chave, é cri ado um índice própri o.

Nas bases de dados padrão I SAM os índi ces são armazenados em um úni co arqui vo do t i po
CDX, j á nos bancos de dados padrão SQL cada índi ce é cri ado com uma numeração seqüenci al
t endo como base o nome da t abel a ao qual el e est á rel aci onado.

A cada i ncl usão ou al t eração de um r egi st r o t odos os índi ces são at uali zados, t ornando
necessári o pl anej ar adequadament e quai s e quant os índi ces serão defi ni dos para uma t abel a,
poi s uma quant i dade excessi va pode compr omet er o desempenho dest as operações.

Deve ser consi derada a possi bilidade de ut ilização de índi ces t emporári os para pr ocessos
específi cos, os quai s serão cri ados em t empo de execução da rot i na. Est e fat or deve l evar em
consi deração o “ esforço” do ambi ent e a cada execução da rot i na e a peri odi ci dade com a qual
é execut ada.

Est r ut u r a dos r egi st r os ( i nf or mações)

Nas bases de dados padrão I SAM, cada r egi st ro possui um ident i fi cador nat i vo ou I D
seqüenci al e ascendent e que funci ona como o endereço base daquel a informação.

Est e I D, mas conheci do como RECNO ou RECNUMBER é ger ado no moment o de i ncl usão do
regi st ro na t abel a e soment e será al t erado caso a est rut ura dos dados dest a t abel a sofr a
al guma manut enção. Dent re as manut enções que uma t abel a de dados I SAM pode sofr er
pode- se ci t ar a ut ili zação do comando PACK, o qual i rá apagar fi si cament e os regi st ros
del et ados da t abel a forçando uma r enumeração dos i dent i fi cadores de t odos os regi st r os. Est a
si t uação t ambém t orna necessári a a r ecri ação de t odos os índi ces vi nculados àquel a t abel a.

I st o ocorr e nas bases de dados I SAM devi do ao concei t o de excl usão l ógi ca de regi st ros que as
mesmas possuem. Já os bancos de dados padr ão SQL nat i vament e ut ili zam apenas o concei t o
de excl usão físi ca de r egi st ros, o que para out ras apl i cações seri a t ransparent e, mas não é o
caso do ERP Prot heus.

Para mant er a compat i bilidade das apli cações desenvol vi das para bases de dados padrão
I SAM, a área de Tecnol ogi a e Banco de Dados da Mi crosi ga i mpl ement ou nos bancos de dados
padrão SQL o concei t o de excl usão l ógi ca de regi st ros exi st ent e nas bases de dados I SAM
at ravés da cri ação de campos de cont r ole específi cos: R_E_C_N_O_, D_E_L_E_T_ e
R_E_C_D_E_L.

Est es campos permi t em que a apli cação ERP ger enci e as i nformações do banco de dados da
mesma forma que as i nformações em bases de dados I SAM.


- 126 -

ADVPL Compl et o


Com i sso o campo R_E_C_N_O_ ser á um i dent i fi cador úni co do regi st ro dent r o da t abel a,
funci onando como o I D ou RECNUMBER de uma t abel a I SAM, mas ut ili zando um recurso
adi ci onal di sponível nos bancos de dados r el aci onai s conheci do com Ch av e Pr i már i a
11.2. Funções de acesso e mani pul ação de dados
.

Para a apli cação ERP Prot heus o campo de cont r ol e R_E_C_N_O_ é defi ni do em t odas as
t abel as como sendo sua chave pri mári a, o que t ransfere o cont r ol e de sua numeração
seqüenci al ao banco de dados.

O campo D_E_L_E_T_ é t rat ado i nt ernament e pel a apli cação ERP como um “ fl ag” ou marca de
excl usão. Dest a forma os r egi st ros que est i ver em com est e campo marcado serão
consi derados como excl uídos l ogi cament e. A execução do comando PACK em uma t abel a de
um banco de dados padrão SQL vi sa excl ui r fi sicament e os regi st r os com o campo D_E_L_E_T_
marcado, mas não causará o efei t o de r enumeração de RECNO ( no caso R_E_C_N_O_) que
ocor re nas t abel a de bases de dados I SAM.


As funções de acesso e mani pul ação de dados descri t as nest e t ópi co são as cl assi fi cadas
ant eri orment e como funções genéri cas da li nguagem ADVPL, permi t indo que as mesmas sej am
ut ili zadas independent ement e da base de dados para a qual a apli cação ERP est á confi gurada.

As funções de acesso e mani pul ação de dados defi nem basi cament e:

E Tabel a que est á sendo t rat ada;
E Campos que deverão ser l i dos ou at uali zados;
E Mét odo de acesso di ret o as i nformações ( r egi st ros e campos) .

Dent r e as funções ADVPL di sponívei s para acesso e mani pul ação de i nformações, est e mat eri al
i rá det al har as segui nt es opções:

´ SELECT( )
´ DBSELECTAREA( )
´ DBSETORDER( )
´ DBSEEK( ) E MSSEEK( )
´ DBSKI P( )
´ DBGOTO( )
´ DBGOTOP( )
´ DBGOBOTTON( )
´ DBSETFI LTER( )
´ RECLOCK( )
´ SOFTLOCK( )
´ MSUNLOCK( )
´ DBDELETE( )
´ DBUSEAREA( )
´ DBCLOSEAREA( )

- 127 -

ADVPL Compl et o


DBRLOCK( )

Si nt ax e DBRLOCK( x I dent i f i cador )
Descr i ção
Função de base de dados, que efet ua o l ock ( t ravament o) do r egi st ro
i dent i fi cado pel o parâmet r o xI dent i fi cador. Est e parâmet r o pode ser o
Recno( ) para t abel as em formado I SAM, ou a chave pri mári a para bancos de
dados rel aci onai s.

Se o parâmet ro xI dent i fi cador não for especi fi cado, t odos os l ocks da ár ea de
t rabal ho serão li berados, e o regi st r o posi ci onado será t ravado e adi ci onado
em uma l i st a de r egi st ros bl oqueados.

DBCLOSEAREA( )

Si nt ax e DbCl oseAr ea( )
Descr i ção
Per mi t e que um ali as present e na conexão sej a fechado, o que vi abiliza seu
reuso em out r o operação. Est e comando t em efei t o apenas no al i as at ivo na
conexão, sendo necessári a sua ut ili zação em conj unt o com o comando
DbSel ect Ar ea( ) .

DBCOMMI T( )

Si nt ax e DBCOMMI T( )
Descr i ção Efet ua t odas as at uali zações pendent es na ár ea de t rabal ho at i va.

DBCOMMI TALL( )

Si nt ax e DBCOMMI TALL( )
Descr i ção
Efet ua t odas as at uali zações pendent es em t odas as ár ea de t rabal ho em uso
pel a t hread ( conexão) at i va.

DBDELETE( )

Si nt ax e DbDel et e( )
Descr i ção
Efet ua a excl usão l ógi ca do regi st ro posi ci onado na ár ea de t rabal ho at i va,
sendo necessári a sua ut ili zação em conj unt o com as funções RecLock( ) e
MsUnLock( ) .

DBGOTO( )

Si nt ax e DbGot o( nRecno)
Descr i ção
Move o cursor da ár ea de t rabal ho at i va para o record number ( r ecno)
especi fi cado, r eali zando um posi ci onament o di ret o, sem a necessi dade uma
busca ( seek) pr évi o.


- 128 -

ADVPL Compl et o



DBGOTOP( )

Si nt ax e DbGoTop( )
Descr i ção Move o cursor da ár ea de t rabal ho at i va para o pri mei ro r egi st ro l ógi co.

DBGOBOTTON( )

Si nt ax e DbGoBot t on ( )
Descr i ção Move o cursor da ár ea de t rabal ho at i va para o últ i mo regi st r o l ógi co.

DBRLOCKLI ST( )

Si nt ax e DBRLOCKLI ST( )
Descr i ção
Ret orna um ar ray cont endo o r ecord number ( r ecno) de t odos os r egi st ros
t ravados da ár ea de t rabal ho at i va.

DBSEEK( ) E MSSEEK( )

Si nt ax e DbSeek ( cCh av e, l Sof t Seek , l Last )
Descr i ção
DbSeek : Permi t e posi cionar o cursor da área de t rabal ho at i vo no r egist ro
com as i nformações especi fi cadas na chave de busca, fornecendo um r et orno
l ógi co i ndi cando se o posi ci onament o foi efet uado com sucesso, ou sej a, se a
i nformação especi fi cada na chave de busca foi l ocal i zada na área de
t rabal ho.

MsSeek ( ) : Função desenvol vi da pel a área de Tecnol ogi a da Mi crosi ga, a
qual possui as mesmas funci onali dades bási cas da função DbSeek( ) , com a
vant agem de não necessi t ar acessar novament e a base de dados para
l ocalizar uma i nformação j á ut ili zada pel a t hread ( conexão) at i va.

DBSKI P( )

Si nt ax e DbSk i p( nRegi st r os)
Descr i ção
Move o cursor do r egi st ro posi ci onado para o pr óxi mo ( ou ant eri or
dependendo do parâmet r o) , em função da ordem at i va para a área de
t rabal ho.

DBSELECTAREA( )

Si nt ax e DbSel ect Ar ea( nAr ea | cAr ea)
Descr i ção
Defi ne a ár ea de t rabal ho especi fi cada com sendo a ár ea at i va. Todas as
operações subseqüent es que fi zer em r eferênci a a uma área de t rabal ho a
ut ili zação, a menos que a ár ea desej ada sej a i nformada expli ci t ament e.


- 129 -

ADVPL Compl et o



DBSETFI LTER( )

Si nt ax e DbSet Fi l t er ( bCon di cao, cCondi cao)
Descr i ção
Defi ne um fi l t ro para a ár ea de t rabal ho at i va, o qual pode ser descr i t o na
for ma de um bl oco de códi go ou at ravés de uma expressão si mpl es.

DBSETORDER( )

Si nt ax e DbSet Or der ( nOr dem)
Descr i ção
Defi ne qual índi ce será ut ilizada pel a área de t rabal ho at i va, ou sej a, pel a
área pr evi ament e sel eci onada at ravés do comando DbSel ect Ar ea( ) . As
ordens di sponívei s no ambi ent e Prot heus são aquel as defini das no SI NDEX
/ SI X, ou as ordens di sponi bili zadas por mei o de índi ces t emporári os.

DBORDERNI CKNAME( )

Si nt ax e DbOr der Ni ck Name( Ni ck Name)
Descr i ção
Defi ne qual índi ce cri ado pel o usuári o sej a ut ili zado. O usuári o pode i nclui r os
seus própri os índi ces e no moment o da i ncl usão deve cri ar o NI CKNAME par a
o mesmo.

DBUNLOCK( )

Si nt ax e DBUNLOCK( )
Descr i ção
Mesma funci onali dade da função UNLOCK( ) , só que r ecomendada para
ambi ent es de r ede nos quai s os arqui vos são compart i l hados.

Li bera o t ravament o do regi st ro posi ci onado na área de t rabal ho at i va e
confi rma as at uali zações efet uadas naquel e r egi st ro.

DBUNLOCKALL( )

Si nt ax e DBUNLOCKALL( )
Descr i ção
Li bera o t ravament o de t odos os regi st ros de t odas as ár eas de t rabal ho
di sponívei s na t hread ( conexão) at i va.

DBUSEAREA( )

Si nt ax e
DbUseAr ea( l Nov o, cDr i v er , cAr qui v o, cAl i as, l Compar i l h ado, ;
l SoLei t u r a)
Descr i ção
Defi ne um arqui vo de base de dados como uma área de t rabal ho di sponível
na apli cação.

MSUNLOCK( )

Si nt ax e MsUn Lock ( )
Descr i ção
Li bera o t ravament o ( l ock) do regi st r o posi ci onado confi rmando as
at ualizações efet uadas nest e r egi st ro.


- 130 -

ADVPL Compl et o


RECLOCK( )

Si nt ax e RecLock ( cAl i as, l I ncl u i )
Descr i ção
Efet ua o t ravament o do r egi st ro posi ci onado na ár ea de t rabal ho at i va,
permi t i ndo a i nclusão ou al t eração das i nformações do mesmo.

RLOCK( )

Si nt ax e RLOCK( ) ¬ l Sucesso
Descr i ção Efet ua o t ravament o do regi st ro posi ci onado na área de t rabal ho at i va.

SELECT( )

Si nt ax e Sel ect ( cAr ea)
Descr i ção
Det ermi na o númer o de referênci a de um det ermi nado ali as em um
ambi ent e de t r abal ho. Caso o al i as especi ficado não est ej a em uso no
ambi ent e, será r et ornado o val or 0 ( zero) .


SOFTLOCK( )

Si nt ax e Sof t Lock ( cAl i as)
Descr i ção
Per mi t e a reserva do r egi st ro posi ci onado na área de t rabal ho at i va de for ma
que out ras operações, com exceção da at ual , não possam at uali zar est e
regi st ro. Di fer e da função RecLock( ) poi s não gera uma obri gação de
at ualização, e pode ser sucedi do por el e.

Na apli cação ERP Pr ot heus, o Soft Lock( ) é ut ili zado nos browses, ant es da
confi rmação da operação de al t eração e excl usão, poi s nest e moment o a
mesma ai nda não foi efet i vada, mas out ras conexões não podem acessar
aquel e regi st ro poi s o mesmo est á em manut enção, o que i mpl ement a da
i nt egri dade da i nformação.

UNLOCK( )

Si nt ax e UNLOCK( )
Descr i ção
Li bera o t ravament o do regi st ro posi ci onado na área de t rabal ho at i va e
confi rma as at uali zações efet uadas naquel e r egi st ro.



- 131 -

ADVPL Compl et o



11.3. Di f er enci ação ent r e var i ávei s e nomes de campos

Mui t as vezes uma vari ável pode t er o mesmo nome que um campo de um arqui vo ou de uma
t abel a abert a no moment o. Nest e caso, o ADVPL pri vil egi ará o campo, de forma que uma
referênci a a um nome que i dent i fi que t ant o uma vari ável como um campo, r esul t ará no
cont eúdo do campo.

Para especi fi car qual deve ser o el ement o referenci ado, deve- se ut ili zar o operador de
i dent i fi cação de apel i do ( - > ) e um dos doi s i dent i fi cadores de r efer ênci a, MEMVAR ou FI ELD.

cRes : = MEMVAR- > NOME

Est a l i nha de comando i dent i fi ca que o val or at ri buído à vari ável cRes deve ser o val or da
vari ável de memóri a chamada NOME.

cRes : = FI ELD- > NOME

Nest e caso, o val or at ri buído à vari ável cRes será o val or do campo NOME exi st ent e no arqui vo
ou t abel a abert o na ár ea at ual .

O i dent i fi cador FI ELD pode ser subst i t uído pelo apeli do de um arqui vo ou t abel a abert o, par a
evi t ar a necessi dade de sel eci onar a ár ea ant es de acessar o cont eúdo de t ermi nado campo.

cRes : = CLI ENTES- > NOME

As t abel as de dados ut ilizadas pel a apli cação ERP recebem aut omat i cament e do si st ema o
apeli do ou ALI AS especi fi cado para as mesmas no arqui vo de si st ema SX2. Assi m se o campo
NOME pert ence a uma t abel a da apli cação PROTHEUS, o mesmo poder á ser r efer enci ado com a
i ndi cação do ALI AS pr é- defi ni do dest a t abel a.

cRes : = SA1- > NOME / / SA1 – Cadast ro de Cl i ent es



Para mai ores det al hes sobr e abert ura de arqui vos com at ri bui ção de apeli dos,
consul t e a document ação sobre acesso a banco de dados ou a document ação
da função dbUseAr ea( ) .

Os al i as das t abel as da apli cação ERP são padroni zados em t r ês l et ras, que
corr espondem as i ni ci ais da t abel a. As confi gurações de cada ALI AS ut ilizado
pel o si st ema podem ser vi sualizadas at ravés do módul o Confi gurador - >
Bases de Dados - > Di cionári os - > Bases de Dados.



- 132 -

ADVPL Compl et o



11.4. Cont r ol e de numer ação seqüenci al

Al guns campos de numeração do Pr ot heus são forneci dos pel o si st ema em ordem ascendent e.
É o caso, por exempl o, do número do pedi do de venda e out ros que servem como i dent i fi cador
das i nformações das t abel as. É pr eci so t er um cont r ol e do forneci ment o desses númer os, em
especi al quando vári os usuári os est ão t rabal hando si mult aneament e.



Os campos que r ecebem o t rat ament o de numeração seqüenci al pel a
apli cação ERP não devem ser consi derados como chave pri mári a das t abel as
aos quai s est ão vi ncul ados.

No caso específi co da apli cação ERP Pr ot heus a chave pri mári a em ambi ent es
TOPCONNECT será o campo R_E_C_N_O_, e para bases de dados padrão
I SAM o concei t o de chave pri mári a é i mpl ement ado pel a regra de negóci o do
si st ema, poi s est e padrão de dados não possui o concei t o de uni ci dade de
dados.


Semáf or os

Para defi ni r o concei t o do que é um semáforo de numeração deve- se aval i ar a segui nt e
seqüênci a de event os no si st ema:

E Ao ser forneci do um númer o, el e permanece reservado at é a concl usão da operação
que o sol i cit ou;

E Se est a operação for confi rmada, o númer o é i ndi sponi bilizado, mas se a operação for
cancel ada, o númer o vol t ará a ser di sponível mesmo que naquel e moment o números
mai ores j á t enham si do ofer eci dos e ut i lizados.

Com i sso, mesmo que t enhamos vári os pr ocessos sol i ci t ando numerações seqüenci ai s para
uma mesma t abel a, como por exempl o i ncl usões si mul t âneas de pedi dos de vendas, t er emos
para cada pedi do um númer o excl usi vos e sem o i nt erval os e numerações não ut ili zadas.

Funções de cont r ol e de semáf or os e numer ação seqüenci al

A linguagem ADVPL per mi t e a ut ilização das seguint es funções para o cont r ol e das numerações
seqüenci ai s ut ili zadas nas t abel as da apl i cação ERP:

´ GETSXENUM( )
´ CONFI RMSXE( )
´ ROLLBACKSXE( )

GETSXENUM( )

Si nt ax e GETSXENUM( cAl i as, cCampo, cAl i asSXE, nOr dem)
Descr i ção
Obt ém o número seqüênci a do ali as especi fi cado no parâmet ro, at ravés da
referênci a aos arqui vos de si st ema SXE/ SXF ou ao ser vi dor de numeração,
quando est a confi guração est á habi lit ada no ambi ent e Prot heus.


- 133 -

ADVPL Compl et o


CONFI RMSXE( )

Si nt ax e CONFI RMSXE( l Ver i f i ca)
Descr i ção Confi rma o númer o al ocado at ravés do úl t i mo comando GETSXENUM( ) .


ROLLBACKSXE( )

Si nt ax e ROLLBACKSXE( )
Descr i ção
Descart a o númer o forneci do pel o úl t i mo comando GETSXENUM( ) ,
ret ornando a numeração di sponível para out ras conexões.


12. Cust omi zações par a a apl i cação ERP

Nest e t ópi co serão abordas as for mas pel as quai s a apli cação ERP Pr ot heus pode ser
cust omi zada com a ut ilização da l i nguagem ADVPL.

Pel os recursos de confi guração da apl i cação ERP di sponívei s no módul o Confi gurador é possível
i mpl ement ar as segui nt es cust omi zações:

E Vali dações de campos e pergunt as do si st ema e de usuári os
E I ncl usão de gat i lhos em campos de si st emas e de usuári os
E I ncl usão de regras em parâmet ros de si st emas e de usuári os
E Desenvol vi ment o de pont os de ent rada para i nt eragi r com funções padr ões do si st ema





- 134 -

ADVPL Compl et o



12.1. Cust omi zação de campos – Di ci onár i o de Dados


12.1.1. Val i dações de campos e per gunt as

As funções de val idação t êm como caract eríst i ca fundament al um ret orno do t i po l ógi co, ou
sej a, um cont eúdo .T. – Verdadei ro ou .F. – Fal so.

Com base nest a pr emi ssa, a ut i lização de val i dações no Di ci onári o de Dados ( SX3) ou nas
Pergunt as de Pr ocessos e Rel at óri os ( SX1) deverá focar sempre na ut ili zação de funções ou
expr essões que r esul t em em um r et orno l ógi co.

At ravés do módul o Confi gurador é possível al t erar as propri edades de um campo ou de uma
pergunt a de forma a i ncl ui r regras de val i dação para as segui nt es si t uações:

E SX3 – Val i dação de u suár i o ( X3 _VLDUSER)
E SX1 – Val i dação da per gu nt a ( X1_ VALI D)

Dent r e as funções que a li nguagem ADVPL em conj unt o com os r ecur sos desenvol vi dos pela
apli cação ERP para val i dação de campos e pergunt as serão det al hadas:

´ VAZI O( )
´ NAOVAZI O( )
´ EXI STCPO( )
´ EXI STCHAV( )
´ PERTENCE( )
´ POSI TI VO( )
´ NEGATI VO( )
´ TEXTO( )

EXI STCHAV( )

Si nt ax e Ex i st Ch av ( cAl i as, cCont eudo, nI n di ce)
Descr i ção
Ret orna .T. ou .F. se o cont eúdo especi fi cado exi st e no ali as especi fi cado.
Caso exi st a será exi bi do um hel p de si st ema com um avi so i nfor mando da
ocor rênci a.

Função ut ili zada normal ment e para veri fi car se um det ermi nado códi go de
cadast r o j á exi st e na t abel a na qual a i nformação será i nseri da, como por
exempl o o CNPJ no cadast ro de cl i ent es ou fornecedores.


- 135 -

ADVPL Compl et o



EXI STCPO( )

Si nt ax e Ex i st Cpo( cAl i as, cCon t eudo, n I ndi ce)
Descr i ção
Ret orna .T. ou .F. se o cont eúdo especi fi cado não exi st e no ali as
especi fi cado. Caso não exi st a será exi bi do um hel p de si st ema com um avi so
i nformando da ocor rência.

Função ut ili zada normal ment e para veri fi car se a i nformação di gi t ada em um
campo, a qual depende de out ra t abel a, real ment e exi st e nest a out ra t abel a,
como por exempl o o códi go de um cl i ent e em um pedi do de venda.

NAOVAZI O( )

Si nt ax e NaoVazi o( )
Descr i ção
Ret orna .T. ou .F. se o cont eúdo do campo posi ci onado no moment o não
est á vazi o.

NEGATI VO( )

Si nt ax e Negat i v o( )
Descr i ção Ret orna .T. ou .F. se o cont eúdo di gi t ado para o campo é negat i vo.

PERTENCE( )

Si nt ax e Per t ence( cSt r i ng)
Descr i ção
Ret orna .T. ou .F. se o cont eúdo di gi t ado para o campo est á cont i do na
st ri ng defi ni da como parâmet ro da função. Nor mal ment e ut ilizada em
campos com a opção de combo, poi s caso cont rári o seri a ut ili zada a função
Exi st Cpo( ) .

POSI TI VO( )

Si nt ax e Posi t i v o( )
Descr i ção Ret orna .T. ou .F. se o cont eúdo di gi t ado para o campo é posi t i vo.

TEXTO( )

Si nt ax e Tex t o( )
Descr i ção
Ret orna .T. ou .F. se o cont eúdo di gi t ado para o campo cont ém apenas
números ou al fanuméri cos.

VAZI O( )

Si nt ax e Vazi o( )
Descr i ção
Ret orna .T. ou .F. se o cont eúdo do campo posi ci onado no moment o est á
vazi o.


- 136 -

ADVPL Compl et o



12.1.2. Pi ct ur es de f or mação di sponívei s

Com base na document ação di sponível no DEM – Document ação El et r ôni ca Mi crosi ga, a
linguagem ADVPL e a apli cação ERP Prot heus admi t em as segui nt es pi ct ures:

Di ci onár i o de Dados ( SX3) e GET

Funções
Cont eúdo Funci on al i dade
A Per mi t e apenas caract er es al fabét i cos.
C Exi be CR depoi s de númer os posi t i vos.
E Exi be numéri co com o pont o e vírgul a i nvert i dos ( format o Eur opeu) .
R I nser e caract eres di ferent es dos caract er es de t empl at e na exi bi ção, mas não os
i nsere na vari ável do GET.
S< n> Per mi t e rol ament o hori zont al do t ext o dent ro do GET, < n> é um númer o i nt ei ro
que i dent i fi ca o t amanho da regi ão.
X Exi be DB depoi s de númer os negat i vos.
Z Exi be zeros como br ancos.
( Exi be números negat i vos ent re par ênt eses com os espaços em branco i ni ci ai s.
) Exi be números negat i vos ent re par ênt eses sem os espaços em branco i ni ci ai s.
! Convert e caract er es al fabét i cos para mai úscul o.

Templ at es
Cont eúdo Funci on al i dade
X Per mi t e qual quer caract er e.
9 Per mi t e apenas dígit os para qual quer t i po de dado, i nclui ndo o si nal para
numéri cos.
# Per mi t e dígi t os, si nai s e espaços em branco par a qual quer t i po de dado.
! Convert e caract er es al fabét i cos para mai úscul o.
* Exi be um ast eri sco no lugar dos espaços em br anco i ni ci ai s em númer os.
. Exi be o pont o deci mal .
, Exi be a posi ção do mi l har.

Ex empl o 01 – Pi ct u r e campo numér i co

CT2_VALOR – Numéri co – 17,2
Pi ct ure: @E 99,999,999,999,999.99


Ex empl o 02 – Pi ct u r e campo t ex t o, com di gi t ação apen as em cai x a al t a

A1_NOME – Caract er - 40
Pi ct ure: @!


- 137 -

ADVPL Compl et o



SAY e PSAY

Funções
Cont eúdo Funci on al i dade
C Exi be CR depoi s de númer os posi t i vos
E Exi be numéri co com o pont o e a vírgul a i nvert i dos ( format o Eur opeu)
R I nser e caract er es di ferent es dos caract eres de t empl at e
X Exi be DB depoi s de númer os negat i vos
Z Exi be zeros como br ancos
( Envol ve númer os negat i vos ent r e par ênt eses
! Convert e t odos os caract er es al fabét i cos para mai úscul o

Templ at es
Cont eúdo Funci on al i dade
X Exi be dígi t os para qual quer t i po de dado
9 Exi be dígi t os para qual quer t i po de dado
# Exi be dígi t os para qual quer t i po de dado
! Convert e caract er es al fabét i cos para mai úscul o
* Exi be ast eri sco no l ugar de espaços em branco ini ci as em númer os
. Exi be a posi ção do pont o deci mal
, Exi be a posi ção do mi l har

Ex empl o 01 – Pi ct u r e campo numér i co

CT2_VALOR – Numéri co – 17,2
Pi ct ure: @E 99,999,999,999,999.99



















- 138 -

ADVPL Compl et o



12.2. Cust omi zação de gat i l hos – Conf i gur ador

A apli cação ERP ut iliza o r ecur so de gat il hos em campo com a fi nali dade de auxi liar o usuário
no pr eenchi ment o de i nfor mações durant e a di gi t ação de i nformações. As funções que podem
ser ut ili zadas no gat ilho est ão di ret ament e r el aci onadas a defi ni ção da expr essão de ret orno
que será execut ada na avali ação do gat i l ho do campo.

As regras que devem ser obser vadas na mont agem de um gat il ho e confi guração de seu
ret orno são:

E Na defi ni ção da chave de busca do gat il ho deve ser avali ada qual fili al deverá ser
ut ili zada como part e da chave: a fi li al da t abel a de ori gem do gat il ho ou a fili al da
t abel a que será consul t ada. O que normal ment e det ermi na a fili al que será ut ili zada
como part e da chave é j ust ament e a i nformação que será consul t ada, aonde:

o Consul t as de i nformações ent r e t abel as com est rut ura de cabeçal ho e i t ens
devem ut ilizar a fili al da t abel a de ori gem, poi s ambas as t abel as devem possui r
o mesmo t rat ament o de fili al ( compart il hado ou excl usi vo) .

Ex empl os:

Pedi do de vendas - > SC5 x SC6
Not a fi scal de ent rada - > SF1 x SD1
Fi cha de i mobili zado - > SN1 x SN3
Or çament o cont ábil - > CV1 x CV2

o Consul t a de i nformações de t abel as de cadast r os devem ut ili zar a fili al da t abel a
a ser consul t ada, pois o compart il hament o dos cadast r os normal ment e é
i ndependent e em r el ação às movi ment ações e out ros cadast ros do si st ema.

Ex empl os:

Cadast r o de cl i ent es - > SA1 ( compart il hado)
Cadast r o de fornecedor es - > SA2 ( compart i l hado)
Cadast r o de vendedor es - > SA3 ( excl usi vo)
Cadast r o de t ransport adoras - > SA4 ( excl usi vo)

o Consul t a a i nformações de t abel as de movi ment os devem ut ili zar a fi li al da
t abel a a ser consul t ada, poi s apesar das movi ment ações de um módul o
segui rem um det ermi nado padrão, a consul t a pode ser real i zada ent re t abel as
de módul os di st i nt os, o que poderi a gerar um ret orno i ncor ret o baseado nas
di ferent es paramet ri zações dest es ambi ent es.

Ex empl os:

Cont as a pagar - > SE2 ( compart i l hado)
Movi ment os cont ábei s - > CT2 ( excl usi vo)
Pedi dos de compras - > SC7 ( compart il hado)
I t ens da not a fi scal de ent rada - > SD1 ( excl usi vo)

E Na defi ni ção da regra de r et orno deve ser consi derado o t i po do campo que será
at ualizado, poi s é est e campo que det ermi na qual t i po do r et orno será consi derado
váli do para o gat il ho.


- 139 -

ADVPL Compl et o



12.3. Cust omi zação de par âmet r os – Conf i gur ador

Os parâmet r os de si st ema ut ilizados pel a apli cação ERP e defi ni dos at ravés do módul o
confi gurador possuem as segui nt es caract eríst i cas fundament ai s:

E Ti po do parâmet r o: de forma si mil ar a uma vari ável , um parâmet ro t erá um t i po de
cont eúdo pr é- defi ni do em seu cadast ro.
Est a i nformação é ut ili zada pel as funções da apli cação ERP na i nt erpr et ação do
cont eúdo do parâmet r o e ret orno dest a i nformação a r ot i na que o consult ou.

E I nt erpr et ação do cont eúdo do parâmet r o: di ver sos parâmet r os do si st ema t êm seu
cont eúdo macr o execut ado durant e a execução de uma r ot i na do ERP. Est es
parâmet ros macr o execut ávei s t em como única caract eríst i ca em comum seu t i po:
caract ere, mas não exi st e nenhum i dent i fi cador expl i ci t o que permi t e a fáci l
vi suali zação de quai s parâmet ros possuem um ret orno si mpl es e de quai s parâmet ros
t erão seu cont eúdo macro execut ado par a det er mi nar o r et orno “ r eal ” .

A úni ca forma efi caz de aval i ar como um parâmet ro é t rat ado ( simpl es ret orno ou
macr o execução) é at r avés do códi go font e da rot i na, no qual deverá ser aval i ado como
é t rat ado o ret orno de uma dest as funções:

o GETMV( )
o SUPERGETMV( )
o GETNEWPAR( )

Um r et orno macr o execut ado é det ermi nado at ravés do uso do operador “ &” ou de uma
das funções de execução de bl ocos de códi go em conj unt o com uma das funções ci t adas
ant eri orment e.

12.3.1. Funções par a mani pul ação de par âmet r os

A apli cação ERP di sponibiliza as segui nt es funções par a consul t a e at uali zação de parâmet ros:

´ GETMV( )
´ SUPERGETMV( )
´ GETNEWPAR( )
´ PUTMV( )

GETMV( )

Si nt ax e GETMV( cPar amet r o)
Descr i ção
Ret orna o cont eúdo do parâmet ro especi fi cado no arqui vo SX6, consi derando
a fili al paramet ri zada na conexão. Caso o parâmet r o não exi st a será exi bi do
um hel p do si st ema i nformando a ocorr ênci a.


- 140 -

ADVPL Compl et o



GETNEWPAR( )

Si nt ax e GETNEWPAR( cPar amet r o, cPadr ao, cFi l i al )
Descr i ção
Ret orna o cont eúdo do parâmet ro especi fi cado no arqui vo SX6, consi derando
a fili al paramet ri zada na conexão. Caso o parâmet r o não exi st a será exi bi do
um hel p do si st ema i nformando a ocorr ênci a.

Di fere do Super Get MV( ) poi s consi dera que o parâmet ro pode não exi st i r na
versão at ual do si st ema, e por conseqüênci a não será exi bi da a mensagem
de hel p.

PUTMV( )

Si nt ax e PUTMV( cPar amet r o, cCont eudo)
Descr i ção
At uali za o cont eúdo do parâmet ro especi fi cado no arqui vo SX6, de acordo
com as paramet ri zações i nformadas.


SUPERGETMV( )

Si nt ax e SUPERGETMV( cPar amet r o , l Hel p , cPadr ao , cFi l i al )
Descr i ção
Ret orna o cont eúdo do parâmet ro especi fi cado no arqui vo SX6, consi derando
a fili al paramet ri zada na conexão. Caso o parâmet r o não exi st a será exi bi do
um hel p do si st ema i nformando a ocorr ênci a.

Di fere do Get Mv( ) poi s os parâmet ros consul t ados são adi ci onados em uma
área de memóri a, que permi t e que em uma nova consul t a não sej a
necessári o acessar e pesqui sar o parâmet ro na base de dados.


12.3.2. Cui dados na ut i l i zação de um par âmet r o

Um parâmet ro de si st ema t em a fi nali dade de pr opi ci ar um ret orno váli do a um cont eúdo
previ ament e defi ni do na confi guração do módul o para uma rot i na, processo ou quai squer
out ros t i pos de funci onali dades di sponívei s na apli cação.

Apesar de haver par âmet r os que permi t am a confi guração de expr essões, e por conseqüênci a
a ut ili zação de funções para defi ni r o ret orno que será obt i do com a consul t a dest e parâmet ro,
é ex pr essament e pr oi bi do o uso de f unções em par âmet r os par a man i pul ar
i nf or mações da base de dados do si st ema.

Caso haj a a necessi dade de ser i mpl ement ado um t rat ament o adi ci onal a um processo padrão
do si st ema, o mesmo deverá ut ili zar o r ecur so de pont o de ent r ada.

A razão dest a r est ri ção é si mpl es:

E As r ot i nas da apli cação ERP não prot egem a consul t a de cont eúdos de parâmet r os
quant o a gravações r eal i zadas dent ro ou fora de uma t ransação.

E Dest a forma, quai squer al t eração na base r eal izada por uma r ot i na confi gurada em um
parâmet ro pode ocasi onar a perda da i nt egri dade das i nformações do si st ema.

- 141 -

ADVPL Compl et o



12.4. Pont os de Ent r ada – Concei t os, Pr emi ssas e Regr as

Concei t os

Um pont o de ent rada é uma User Funct i on desenvol vi da com a fi nalidade de i nt eragi r com uma
rot i na padrão da apli cação ERP.

A User Funct i on deverá t er um nome pr é- est abel eci do no desenvol vi ment o da rot i na padrão do
ERP, e de acordo est a pré- di sposi ção e o moment o no qual o pont o de ent rada é execut ado
durant e um pr ocessament o, el e poderá:

E Compl ement ar uma val idação r eali zada pel a apli cação;

E Compl ement ar as at ual i zações real i zadas pel o processament o em t abel as padrões do
ERP;

E I mpl ement ar a at uali zação de t abel as especi ficas durant e o pr ocessament o de uma
rot i na padrão do ERP;

E Execut ar uma ação sem processos de at ualizações, mas que necessi t e ut ilizar as
i nformações at uai s do ambi ent e durant e o processament o da rot i na padrão para
det ermi nar as caract eríst i cas do pr ocesso;

E Subst i t ui r um processament o padrão do si st ema por uma regra específi ca do cl i ent e no
qual o mesmo ser á i mplement ado.


Pr emi ssas e Regr as

E Um pont o de ent rada não deve ser ut ili zado para out ras fi nali dades senão para as quai s
o mesmo foi pré- defi nido, sob pena de causar a perda da i nt egri dade das i nformações
da base de dados ou pr ovocar event os de er r o durant e a execução da r ot i na padrão.

E Um pont o de ent rada deve ser t ranspar ent e para o pr ocesso padrão, de forma que
t odas as t abel as acessadas pel o pont o de ent rada e que sej am ut ili zadas pel a rot i na
padrão, deverão t er sua si t uação i medi at ament e ant eri or à execução do pont o
rest aurada ao t érmi no do mesmo, e para i st o r ecomenda- se o uso das funções
GETAREA( ) e RESTAREA( ) .

E Como um pont o de ent rada não é execut ado da forma t radi ci onal , ou sej a, el e não é
chamado como uma função, el e não recebe parâmet ros. A apli cação ERP di sponi biliza
uma vari ável de si st ema denomi nada PARAMI XB, a qual recebe os parâmet r os da
função chamadora e os di sponi bili za para serem ut ilizados pel a rot i na cust omi zada.

E A vari ável PARAMI XB não possui um padrão de defi ni ção nos códi gos font es da
apli cação ERP, dest a for ma seu t i po pode vari ar dest e um cont eúdo si mpl es ( caract er e,
numéri co, l ógi co e et c.) a um t i po compl exo como um ar ray ou um obj et o. Dest a forma
é necessári o sempr e avali ar a document ação sobre o pont o bem como prot eger a
função cust omi zada de t i pos de PARAMI XB não t rat ados por el a.


- 142 -

ADVPL Compl et o



13. I nt er f aces v i suai s

A linguagem ADVPL possui duas for mas di st i nt as para defi ni ção de i nt erfaces vi suai s no
ambi ent e ERP: si nt axe convenci onal , nos padr ões da l i nguagem CLI PPER e a si nt axe ori ent ada
a obj et os.

Al ém das di ferent es si nt axes di sponívei s para defi ni ção das i nt erfaces vi suai s o ERP Prot heus
possui funci onali dades pré- defi ni das, as quai s j á cont êm t odos os t rat ament os necessári os a
at ender as necessi dades bási cas de acesso e manut enção das i nformações do si st ema.

Nest e t ópi co serão abordadas as si nt axes convenci onai s para defi ni ção das i nt erfaces vi suais
da li nguagem ADVPL e as i nt erfaces de manut enção di sponívei s no ambi ent e ERP Pr ot heus.


13.1. Si nt ax e e component es das i nt er f aces v i suai s

A si nt axe convenci onal para defi ni ção de component es vi suai s da linguagem ADVPL depende
di ret ament e no i ncl ude especi fi cado no cabeçal ho do font e. Os doi s i ncl udes di sponívei s para o
ambi ent e ADVPL Pr ot heus são:

E RWMAKE. CH: permi t e a ut ili zação da si nt axe CLI PPER na defi ni ção dos component es
vi suai s.

E PROTHEUS.CH: permi t e a ut ili zação da si nt axe ADVPL convenci onal , a qual é um
apri morament o da si nt axe CLI PPER, com a inclusão de novos at ri but os para os
component es vi suai s di sponi bilizados no ERP Pr ot heus.

Para il ust rar a di ferença na ut ilização dest es doi s i ncl udes, segue abai xo as di ferent es
defi ni ções para o component es Di al og e MsDi al og:

Ex empl o 01 – I ncl ude Rw mak e.ch

# i ncl ude “ rwmake. ch”

@ 0,0 TO 400,600 DI ALOG oDl g TI TLE "Janel a em si nt axe Cl i pper"
ACTI VATE DI ALOG oDl g CENTERED


Ex empl o 02 – I ncl ude Pr ot heu s.ch

# i ncl ude “ prot heus.ch”

DEFI NE MSDI ALOG oDl g TI TLE "Janel a em si nt axe ADVPL "FROM 000,000 TO 400,600 PI XEL
ACTI VATE MSDI ALOG oDl g CENTERED



Ambas as si nt axes produzi rão o mesmo efei t o quando compi ladas e
execut adas no ambi ent e Pr ot heus, mas deve ser ut ili zada sempr e a si nt axe
ADVPL at ravés do uso do i ncl ude PROTHEUS.CH




- 143 -

ADVPL Compl et o


Os component es da i nt erface vi sual que ser ão t rat ados nest e t ópico, ut ili zando a si nt axe
ADVPL são:

´ MSDI ALOG( )
´ MSGET( )
´ SAY( )
´ BUTTON( )
´ SBUTTON( )

BUTTON( )

Si nt ax e
@ nLi n ha, nCol un a BUTTON cTex t o SI ZE nLar gur a,n Al t ur a UNI DADE
OF oObj et oRef ACTI ON AÇÃO
Descr i ção
Defi ne o component e vi sual But t on, o qual per mi t e a i ncl usão de bot ões de
operação na t el a da i nt erface, os quai s serão vi sualizados soment e com um
t ext o si mpl es para sua i dent i fi cação.

MSDI ALOG( )

Si nt ax e
DEFI NE MSDI ALOG oObj et oDLG TI TLE cTi t ul o FROM nLi nI n i ,n Col I n i
TO nLi Fi m,n Col Fi m OF oObj et oRef UNI DADE
Descr i ção
Defi ne o component e MSDI ALOG( ) , o qual é ut ili zado como base para os
demai s component es da i nt erface vi sual , poi s um component e MSDI ALOG( )
é uma j anel a da apli cação.

MSGET( )

Si nt ax e
@ nLi nh a, nCol u na MSGET VARI AVEL SI ZE nLar gu r a,n Al t ur a
UNI DADE OF oObj et oRef F3 cF3 VALI D VALI D WHEN WHEN PI CTURE
cPi ct ur e
Descr i ção
Defi ne o component e vi sual MSGET, o qual é ut ilizado para capt ura de
i nformações di gi t ávei s na t el a da i nt erface.

SAY( )

Si nt ax e
@ nLi n ha, nCol un a SAY cTex t o SI ZE nLar gur a,n Al t u r a UNI DADE OF
oObj et oRef
Descr i ção
Defi ne o component e vi sual SAY, o qual é ut ili zado para exi bi ção de t ext os
em uma t el a de i nt erface.

SBUTTON( )

Si nt ax e
DEFI NE SBUTTON FROM nLi nh a, nCol u na TYPE N ACTI ON AÇÃO
STATUS OF oObj et oRet
Descr i ção
Defi ne o component e vi sual SBut t on, o qual per mi t e a i ncl usão de bot ões de
operação na t el a da i nt erface, os quai s serão vi sualizados dependendo da
i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es para sua
i dent i fi cação, ou com uma i magem ( Bi t Map) pré- defi ni do.




- 144 -

ADVPL Compl et o


I nt er f ace v i sual compl et a

Abai xo segue um códi go compl et o de i nt erface, ut ili zado t odos os el ement os da i nt erface vi sual
descri t os ant eri orment e:


DEFI NE MSDI ALOG oDl g TI TLE cTi t ul o FROM 000,000 TO 080,300 PI XEL

@ 001,001 TO 040, 150 OF oDl g PI XEL

@ 010,010 SAY cText o SI ZE 55, 07 OF oDl g PI XEL

@ 010,050 MSGET cCGC SI ZE 55, 11 OF oDl g PI XEL PI CTURE " @R 99.999.999/ 9999- 99";
VALI D ! Vazi o( )

DEFI NE SBUTTON FROM 010, 120 TYPE 1 ACTI ON ( nOpca : = 1, oDl g: End( ) ) ;
ENABLE OF oDl g

DEFI NE SBUTTON FROM 020, 120 TYPE 2 ACTI ON ( nOpca : = 2, oDl g: End( ) ) ;
ENABLE OF oDl g

ACTI VATE MSDI ALOG oDl g CENTERED




O códi go demonst rado ant eri orment e é ut ilizados nos exer cíci os de fi xação
dest e mat eri al e deverá produzi r a segui nt e i nt er face:







- 145 -

ADVPL Compl et o



13.2. I nt er f aces padr ões par a at ual i zações de dados

Os pr ogramas de at ualização de cadast ros e digi t ação de movi ment os seguem um padrão que
se apói a no Di ci onári o de Dados.

Basi cament e são duas as i nt erfaces quer permi t em a vi suali zação das i nformações e a
mani pul ação dos dados do si st ema.

E Ax Cadast r o
E Mbr ow se

Ambos os model os ut ilizam como pr emi ssa que a est rut ura da t abel a a ser ut ilizada est ej a
defi ni da no di ci onári o de dados do si st ema ( SX3) .

13.2.1. Ax Cadast r o( )

O AxCadast r o( ) é uma funci onali dade de cadast ro si mpl es, com poucas opções de
cust omi zação, a qual é compost a de:

× Browse padrão para vi sualização das i nformações da base de dados, de acordo com as
confi gurações do SX3 – Di ci onári o de Dados ( campo br owse) .

× Funções de pesqui sa, vi sualização, i ncl usão, al t eração e excl usão padr ões para
vi suali zação de regi st r os si mpl es, sem a opção de cabeçal ho e i t ens.

E Si nt ax e: Ax Cadast r o( cAl i as, cTi t u l o, cVl dEx c, cVl dAl t )

E Par âmet r os

cAl i as
Ali as padrão do si st ema para ut i lização, o qual deve est ar defi ni do no
di ci onári o de dados – SX3.
cTi t ul o Tít ul o da Janel a
cVl dEx c Vali dação para Excl usão
cVl dAl t Vali dação para Al t eração

Ex empl o:

# i ncl ude "prot heus.ch"

User Funct i on XCadSA2( )

Local cAl i as : = "SA2"
Local cTi t ul o : = "Cadast ro de Fornecedores"
Local cVl dExc : = " .T. "
Local cVl dAlt : = ".T."

dbSel ect Area( cAli as)
dbSet Order( 1)
AxCadast r o( cAl i as,cTi t ulo,cVl dExc,cVl dAl t )
Ret urn



- 146 -

ADVPL Compl et o














13.2.2. MBr ow se( )

A Mbrowse( ) é uma funci onali dade de cadast ro que permi t e a ut ilização de r ecursos mai s
apri morados na vi suali zação e mani pul ação das i nformações do si st ema, possui ndo os
segui nt es component es:

× Browse padrão para vi sualização das i nformações da base de dados, de acordo com as
confi gurações do SX3 – Di ci onári o de Dados ( campo br owse) .

× Paramet ri zação para funções específi cas para as ações de vi sualização, i nclusão,
al t eração e excl usão de i nformações, o que vi abiliza a manut enção de i nformações com
est rut ura de cabeçal hos e i t ens.

× Recur sos adi ci onai s como i dent i fi cador es de st at us de regi st ros, l egendas e fil t ros para
as i nformações.

E Si nt ax e si mpl i f i cada: MBr ow se( nLi n1 , n Col 1, nLi n2 , n Col 2, cAl i as)

E Par âmet r os

nLi n 1, nCol 1,
nLi n 2, nCol 2
Coordenadas dos cant os aonde o browse será exi bi do. Para segui r o
padrão da AXCADASTRO( ) use 6,1,22,75 .
cAl i as
Ali as padrão do si st ema para ut i lização, o qual deve est ar defi ni do no
di ci onári o de dados – SX3.


- 147 -

ADVPL Compl et o



E Var i áv ei s pr i v at e adi ci on ai s

aRot i n a

Array cont endo as funções que serão execut adas pel a Mbr owse.
Est e array pode ser par amet ri zados com as funções bási cas da
AxCadast r o conforme abai xo:

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui " ,0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )


cCadast r o Tít ul o do browse que será exi bido.

Ex empl o:

# i ncl ude "prot heus.ch"

User Funct i on MBrwSA2( )

Local cAl i as : = "SA2"
Pri vat e cCadast r o : = "Cadast ro de Fornecedor es"
Pri vat e aRot i na : = { }

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui ",0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )

dbSel ect Area( cAli as)
dbSet Order( 1)
mBrowse( 6,1,22,75,cAl ias)
Ret urn



- 148 -

ADVPL Compl et o













1. Ut ilizando a paramet ri zação exempli fi cada, o efei t o obt i do com o uso
da Mbr owse( ) ser á o mesmo obt i do com o uso da AxCadast ro( ) .

2. A posi ção das funções no array aRot i na define o cont eúdo de uma
vari ável de cont rol e que será r epassada para as funções chamadas a
part i r da Mbrowse, convenci onada como nOpc. Dest a forma, para
mant er o padr ão da apli cação ERP a ordem a ser segui da na defi ni ção
do aRot i na é;

1 – Pesqui sar
2 – Vi suali zar
3 – I ncl ui r
4 – Al t erar
5 – Excl ui r
6 – Li vre



Ao defi ni r as funções no array aRot i na, se o nome da função não for
especi fi cado com “ ( ) ” , a Mbrowse passará como parâmet ros as seguint es
vari ávei s de cont r ol e:

× cAl i as: Al i as at i vo defi ni do para a Mbrowse
× nRecn o: Record number ( recno) do regi st r o posi ci onado no ali as
at i vo.
× nOpc: Posi ção da opção ut ili zada na Mbrowse de acordo com a ordem
da função no array a Rot ina.




- 149 -

ADVPL Compl et o



Ex empl o: Função BI n cl ui ( ) su bst i t ui ndo a f unção Ax I n cl u i ( )

# i ncl ude "prot heus.ch"

User Funct i on MBrwSA2( )

Local cAl i as : = "SA2"

Pri vat e cCadast r o : = "Cadast ro de Fornecedor es"
Pri vat e aRot i na : = { }

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui " ,0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual " ,0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"U_BI ncl ui " ,0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era" ,0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a" ,0,5} )

dbSel ect Area( cAli as)
dbSet Order( 1)
mBrowse( 6,1,22,75,cAl ias)
Ret urn

USER FUNCTI ON BI ncl ui( cAli as, nReg, nOpc)

Local cTudoOk : = "( Al er t ( ' OK' ) ,. T.) "
AxI ncl ui ( cAli as,nReg,nOpc,,, ,cTudoOk)

RETURN

















- 150 -

ADVPL Compl et o



13.2.3. Ax Funct i ons( )

Conforme menci onado nos t ópi cos sobre as i nt erfaces padrões AxCadast ro( ) e Mbr owse( ) ,
exi st em funções padr ões da apli cação ERP que permi t em a vi suali zação, i ncl usão, al t eração e
excl usão de dados em format o si mpl es.

Est as funções são padrões na defi ni ção da i nt erface AxCadast ro( ) e podem ser ut i lizadas
t ambém da const rução no array aRot i na ut ilizado pel a Mbr owse( ) , as quai s est ão l i st adas a
segui r:

´ AXPESQUI ( )
´ AXVI SUAL( )
´ AXI NCLUI ( )
´ AXALTERA( )
´ AXDELETA( )

AXALTERA( )

Si nt ax e
Ax Al t er a( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i ção
Função de al t eração padrão das i nformações de um regi st ro, no format o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .

AXDELETA( )

Si nt ax e
AXDELETA( cAl i as, nReg, nOpc, cTr ansact , aCpos, aBut t ons, aPar am, ;
aAut o, l Max i mi zed)
Descr i ção
Função de excl usão padrão das i nformações de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .

AXI NCLUI ( )

Si nt ax e
Ax I ncl u i ( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i ção
Função de i ncl usão padr ão das i nformações de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .

AXPESQUI ( )

Si nt ax e AXPESQUI ( )
Descr i ção
Função de pesqui sa padrão em r egi st ros exi bi dos pel os br owses do si st ema,
a qual posi ci ona o br owse no regi st ro pesqui sado. Exi be uma t el a que
permi t e a sel eção do índi ce a ser ut i lizado na pesqui sa e a di gi t ação das
i nformações que compõe a chave de busca.


- 151 -

ADVPL Compl et o



AXVI SUAL( )

Si nt ax e
AXVI SUAL( cAl i as, n Reg, nOpc, aAch o, nCol Men s, cMensagem, cFunc, ;
aBut t ons, l Max i mi zed )
Descr i ção
Função de vi suali zação padrão das i nformações de um regi st r o, no for mat o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .


- 152 -

ADVPL Compl et o



APÊNDI CES

BOAS PRÁTI CAS DE PROGRAMAÇÃO

14. Ut i l i zação de I dent ação

É obri gat óri a a ut ilização da i dent ação, poi s t orna o códi go mui t o mai s l egível . Vej a os
exempl os abai xo:


A ut ili zação da i dent ação segui ndo as est rut uras de cont rol e de fl uxo ( whil e, i f, caso et c) t orna
a compr eensão do códi go mui t o mai s fácil :



Para i dent ar o códi go ut ili ze a t ecl a < TAB> e na ferrament a DEV- St udi o, a qual pode ser
confi gurada at ravés da opção “ Pr efer ênci as” :


- 153 -

ADVPL Compl et o




15. Capi t ul ação de Pal av r as- Chave

Uma convenção ampl ament e ut i lizada é a de capi t ul ar as pal avras chaves, funções, vari ávei s e
campos ut ili zando uma combi nação de caract er es em mai úscul o e mi núscul o, vi sando facili t ar
a l ei t ura do códi go font e. O códi go a segui r:

l ocal ncnt w hi l e ( ncn t + + < 10 ) nt ot al + = ncnt * 2 en ddo

Fi cari a melhor com as pal avras chaves e vari ávei s capi t ul adas:

Local n Cnt Whi l e ( nCnt + + < 1 0 ) nTot al + = nCnt * 2 EndDo



Para funções de mani pul ação de dados que comecem por “ db” , a capi t ulação
só será efet uada após o “ db” :

E dbSeek ( )
E dbSel ect Ar ea( )








- 154 -

ADVPL Compl et o



15.1. Pal av r as em mai úscul o

A regra é ut i lizar caract er es em mai úscul o para:

E Const ant es:
# defi ne NUMLI NES 60 # defi ne NUMPAGES 1000

E Var i áv ei s de memór i a:
M- > CT2_CRCONV M- > CT2_MCONVER : = Cri aVar( "CT2_CONVER")

E Campos:
SC6- > C6_NUMPED

E Quer y s:
SELECT * FROM.. .


16. Ut i l i zação da Not ação Húngar a

A not ação húngara consi st e em adi ci onar os prefi xos aos nomes de vari ávei s, de modo a
faci l ment e se i dent i fi car seu t i po. I st o facili t a na cri ação de códi gos- font e ext ensos, poi s
usando a Not ação Húngara, você não pr eci sa fi car o t empo t odo vol t ando à defi ni ção de uma
vari ável para se l embrar qual é o t i po de dados que deve ser col ocado nel a. Vari ávei s devem
t er um pr efi xo de Not ação Húngara em mi núscul as, segui do de um nome que i dent i fi que a
função da vari ável , sendo que a i ni ci al de cada pal avra deve ser mai úscul a.
É obri gat óri a a ut ilização dest a not ação para nomear vari ávei s.
Not ação Ti po de dado Ex empl o
a Array aVal ores
b Bl oco de códi go bSeek
c Caract er cNome
d Dat a dDat aBase
l Lógi co l Cont i nua
n Numéri co nVal or
o Obj et o oMai nWindow
x I ndefi ni do xCont eudo







- 155 -

ADVPL Compl et o



17. Pal av r as r eser v adas

AADD DTOS I NKEY REPLI CATE VAL
ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR EOF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MI N SQRT
CTOD FI ELDNAME MONTH STR DATE
FI LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DTOC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal avras reservadas não podem ser ut i lizadas para vari ávei s,
procedi ment os ou funções;

E Funções r eservadas são pert encent es ao compi l ador e não podem ser
redefi nidas por uma aplicação;

E Todos os i dent i fi cadores que começarem com doi s ou mai s caract eres
“ _” são ut ili zados como i dent i fi cadores i nt ernos e são r eservados.

E I dent i fi cadores de escopo PRI VATE ou PUBLI C ut ili zados em apli cações
específi cas desenvol vida por ou para client es devem t er sua
i dent i fi cação i ni ci ada por um caract ere “ _” .




- 156 -

ADVPL Compl et o



LI STAS DE EXERCÍ CI OS

Módul o 01: I nt r odução à pr ogr amação





01
Apri morar os segui nt es al gori t mos descri t os na apost i l a:

E Usar t el efone públi co – cart ão
E Fri t ar um ovo
E Mascar um chi cl et e
E Tr ocar l âmpadas
E Descascar bat at as
E Jogar o “ Jogo da Forca”





02
Mont ar os di agramas de bl ocos para os al gori t mos desenvol vi dos no exercíci o
ant eri or:

E Usar t el efone públi co – cart ão
E Fri t ar um ovo
E Mascar um chi cl et e
E Tr ocar l âmpadas
E Descascar bat at as
E Jogar o “ Jogo da Forca”




- 157 -

ADVPL Compl et o



Módul o 02: A l i nguagem ADVPL



01

Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as,
ut ili zando a est rut ura de r epet i ção Whi l e, demonst rando quant as bat at as
foram descascadas:



02

Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as,
ut ili zando a est rut ura de repet i ção FOR, demonst rando quant as bat at as foram
descascadas:



03

Desenvol ver um pr ograma que i mpl ement e o al gori t mo de descascar bat at as,
ut ili zando a est rut ura de r epet i ção FOR, demonst rando quant as bat at as fal t am
para serem descascadas:


- 158 -

ADVPL Compl et o



04 Desenvol ver um programa que i mpl ement e o algori t mo do Jogo da For ca:



05 Desenvol ver um programa que i mpl ement e o algori t mo do Jogo da Vel ha:



06
Desenvol ver um pr ogr ama que permi t a ao usuári o pesqui sar um cl i ent e
i nformando seu CNPJ e caso o mesmo exi st a na base, exi bi r suas pr i nci pai s
i nformações.


07
Ut ilizando a int erface vi sual desenvol vi da para o exer cíci o ant eri or,
desenvol ver a função genéri ca Get Text o( ) , par a ser ut ili zada nas apli cações do
Jogo da Vel ha e Jogo da For ca.


- 159 -

ADVPL Compl et o



08
Ut ilizando a função AVI SO( ) desenvol ver um pr ograma que permi t a ao usuári o
sel eci onar a opção de busca de CNPJ por cli ent e ou fornecedor, e caso
encont re exi ba seus dados pri nci pai s.

09
Desenvol ver uma r ot i na que capt ure vári os CNPJs de cl i ent es i nformados pel o
usuári o, e veri fi que para cada um del es se o mesmo exi st e ou não na base de
dados. Ao fi nal i nformar quai s CNPJs for am i nfor mados, e de acordo com a
sel eção do usuári o, exi bi r os dados pri nci pai s de um dest es cl i ent es.

10
Ut ilizando a função FORMBATCH( ) desenvol ver uma rot i na que veri fique se
para cada i t em de um not a fi scal de ent rada exi st e o r espect i vo cabeçal ho, e
caso sej a encont rado al gum i t em i nconsi st ent e, comuni que est a ocor rênci a ao
usuári o que est á real i zando o processament o.

11
Desenvol ver uma rot i na que, at ravés do uso de um bl oco de códi go, convert a
a est rut ura da t abel a SA1 obt i da com a função DBSTRUCT( ) em uma st ri ng
denomi nada cCampo.


- 160 -

ADVPL Compl et o



Módul o 03: Desenvol vendo pequenas cust omi zações



01
Desenvol ver uma val i dação para um campo específi co do t i po caract ere, cuj o
cont eúdo est ej a rel aci onado a out ra t abel a, e que exi ba uma mensagem de
avi so caso o códi go i nformado não exi st a nest a t abel a rel aci onada.


02
Desenvol ver uma vali dação para um campo car act ere exi st ent e na base, para
que sej a aval i ado se aquel e códi go j á exi st e cadast rado, e caso posi t i vo exi ba
uma mensagem de avi so al ert ando dest a ocorr ênci a.



03
Desenvol ver um gat il ho que r et orne uma descri ção compl ement ar para um
campo vi ncul ado ao campo códi go ut ilizado nos exercíci os ant eri ores.




- 161 -

ADVPL Compl et o



04
Cust omi zar o parâmet r o que defi ne o pr efi xo do t ít ul o de cont as a pagar
gerado pel a int egração COMPRAS - > FI NANCEI RO at ravés da i nclusão de uma
not a fi scal de ent rada, de forma que o pr efi xo do t ít ul o sej a gerado com o
códi go da fi li al corr ent e.


05
Prot eger a r ot i na desenvol vi da no exer cíci o ant eri or , de forma a garant i r que
na ut ili zação da fi li al como pr efi xo do t ít ul o não i rá ocorr er dupli cidade de
dados no cont as a pagar do fi nancei ro.




06
I mpl ement ar uma val idação adi ci onal no cadast ro de cl i ent es, at r avés do
pont o de ent rada adequado, de forma que o campo CNPJ ( A1_CGC) sej a
obri gat óri o para t odos os t i pos de cl i ent e, excet o os defi nidos como Ext eri or .














- 162 -

ADVPL Compl et o


MÓDULO 04: Desenv ol vendo apl i cações em ADVPL

18. A l i nguagem ADVPL

A Li nguagem ADVPL t eve seu i níci o em 1994, sendo na verdade uma evol ução na ut i lização de
linguagens no padrão xBase pel a Mi crosi ga Soft ware S.A. ( Cl i pper, Vi sual Obj ect s e depoi s
Fi veWi n) . Com a cri ação da t ecnol ogi a Prot heus, era necessári o criar uma linguagem que
suport asse o padrão xBase para a manut enção de t odo o códi go exi st ent e do si st ema de ERP
Si ga Advanced. Foi ent ão cri ada a li nguagem chamada Advanced Pr ot heus Language.

O ADVPL é uma ext ensão do padrão xBase de comandos e funções, operador es, est rut uras de
cont r ol e de fl uxo e pal avras reservadas, cont ando t ambém com funções e comandos
di sponi bili zados pel a Mi crosi ga que a t orna uma linguagem complet a para a cri ação de
apli cações ERP pront as para a I nt ernet . Também é uma l i nguagem ori ent ada a obj et os e
event os, permi t indo ao programador desenvol ver apli cações vi suais e cri ar suas própri as
cl asses de obj et os.

Quando compi l ados, t odos os arqui vos de códi go t ornam- se uni dades de i nt eli gênci a bási cas,
chamados APO´ s ( de Advanced Prot heus Obj ect s) . Tai s APO´ s são mant i dos em um
reposi t óri o e car regados di nami cament e pel o PROTHEUS Ser ver para a execução. Como não
exi st e a li nkedi ção, ou uni ão físi ca do código compi l ado a um det ermi nado módul o ou
apli cação, funções cri adas em ADVPL podem ser execut adas em qual quer pont o do ambi ent e
Advanced Pr ot heus.

O compil ador e o i nt erpret ador da li nguagem ADVPL é o própr i o ser vi dor PROTHEUS
( PROTHEUS Ser ver) , e exi st e um ambi ent e vi sual para desenvol vi ment o i nt egrado
( PROTHEUSI DE) onde o códi go pode ser cri ado, compi l ado e depurado.

Os programas em ADVPL podem cont er comandos ou funções de i nt er face com o usuári o. De
acordo com t al caract eríst i ca, t ai s programas são subdi vi di dos nas seguint es cat egori as:

Pr ogr amação Com I n t er f ace Pr ópr i a com o Usu ár i o

Nest a cat egori a ent ram os pr ogramas desenvol vi dos para serem execut ados at ravés do
t ermi nal remot o do Prot heus, o Pr ot heus Remot e. O Pr ot heus Remot e é a apli cação
encar r egada da i nt erface e da i nt eração com o usuári o, sendo que t odo o pr ocessament o do
códi go em ADVPL, o acesso ao banco de dados e o gerenci ament o de conexões é efet uado no
Prot heus Ser ver. O Pr ot heus Remot e é o pri nci pal mei o de acesso a execução de r ot i nas
escri t as em ADVPL no Prot heus Server, e por i sso permi t e execut ar qual quer t i po de códi go,
t enha el e i nt erface com o usuári o ou não. Por ém nest a cat egori a são consi derados apenas os
programas que real i zem al gum t i po de i nt erface r emot a ut i lizando o prot ocol o de comuni cação
do Prot heus.

Podem- se cri ar r ot i nas para a cust omi zação do si st ema ERP Mi cr osi ga Prot heus, desde
processos adi ci onai s at é mesmo rel at óri os. A grande vant agem é apr ovei t ar t odo o ambi ent e
mont ado pel os módul os do ERP Mi crosi ga Prot heus. Por ém, com o ADVPL é possível at é
mesmo cri ar t oda uma apli cação, ou módul o, do começo.

Todo o códi go do si st ema ERP Mi crosi ga Prot heus é escri t o em ADVPL.


- 163 -

ADVPL Compl et o



Pr ogr amação Sem I nt er f ace Pr ópr i a com o Usu ár i o

As rot i nas cri adas sem i nt erface são consi deradas nest a cat egori a porque geral ment e t êm uma
ut ili zação mai s específi ca do que um processo adi ci onal ou um rel at óri o novo. Tai s rot i nas não
t êm i nt erface com o usuári o at ravés do Pr ot heus Remot e, e qual quer t ent at i va nesse sent i do
( como a cri ação de uma j anel a padrão) ocasi onará uma exceção em t empo de execução. Est as
rot i nas são apenas processos, ou Jobs, execut ados no Pr ot heus Ser ver. Al gumas vezes, a
i nt erface dest as rot i nas fi ca a cargo de apli cações ext ernas, desenvol vi das em out ras
linguagens, que são responsávei s por i ni ci ar os pr ocessos no ser vi dor Pr ot heus at ravés dos
mei os di sponívei s de i nt egração e conect i vi dade no Prot heus.

De acordo com a ut ilização e com o mei o de conect i vi dade ut ili zado, est as rot i nas são
subcat egori zadas assi m:

E Pr ogr amação por Pr ocessos

Rot i nas escri t as em ADVPL podem ser i ni ci adas como pr ocessos i ndi viduai s ( sem i nt erface) no
Prot heus Server at ravés de duas manei ras: I ni ci adas por out ra r ot i na ADVPL at ravés da
chamada de funções como St art Job( ) ou Call Proc( ) ou i ni ci adas aut omat i cament e na
i ni ci alização do Pr ot heus Server ( quando pr opri ament e confi gurado) .

E Pr ogr amação de RPC

At ravés de uma bi bli ot eca de funções di sponível no Prot heus ( uma API de comuni cação) ,
podem- se execut ar r ot inas escri t as em ADVPL di ret ament e no Prot heus Server, at r avés de
apli cações ext ernas escri t as em out ras l inguagens. I st o é o que se chama de RPC ( de Remot e
Procedure Call, ou Chamada de Pr ocediment os Remot a) .

O servi dor Prot heus t ambém pode execut ar r ot i nas em ADVPL em out ros servi dores Pr ot heus
at ravés de conexão TCP/ I P di r et a ut ilizando o concei t o de RPC. Do mesmo modo, apl i cações
ext ernas podem r equi si t ar a execução de r ot i nas escri t as em ADVPL at ravés de conexão
TCP/ I P di ret a.
Programação Web

O Pr ot heus Ser ver pode t ambém ser execut ado como um servi dor Web, r espondendo a
requi si ções HTTP. No moment o dest as r equi si ções, pode execut ar r ot inas escri t as em ADVPL
como pr ocessos i ndi vi duai s, envi ando o resul t ado das funções como ret orno das requi si ções
para o cli ent e HTTP ( como por exempl o, um Br owser de I nt ernet ) . Qual quer rot i na escri t a em
ADVPL que não cont enha comandos de i nt erface pode ser execut ada at ravés de r equi si ções
HTTP. O Pr ot heus permi t e a compil ação de arqui vos HTML cont endo códi go ADVPL embut i do.
São os chamados arqui vos ADVPL ASP, para a cri ação de pági nas di nâmi cas.

E Pr ogr amação Tel Net

Tel Net é part e da gama de pr ot ocol os TCP/ I P que permi t e a conexão a um comput ador remot o
at ravés de uma apl i cação cl i ent e dest e pr ot ocol o. O PROTHEUS Ser ver pode emul ar um
t ermi nal Tel Net , at ravés da execução de r ot i nas escri t as em ADVPL. Ou sej a, pode- se escrever
rot i nas ADVPL cuj a i nt erface fi nal será um t ermi nal Tel Net ou um col et or de dados móvel .





- 164 -

ADVPL Compl et o



19. Est r ut ur a de um Pr ogr ama ADVPL

Um programa de comput ador nada mai s é do que um grupo de comandos l ogi cament e
di spost os com o obj et i vo de execut ar det ermi nada t arefa. Esses comandos são gravados em
um arqui vo t ext o que é t ransformado em uma li nguagem execut ável por um comput ador
at ravés de um pr ocesso chamado compilação. A compi l ação subst i t ui os comandos de al t o
nível ( que os humanos compr eendem) por inst ruções de bai xo nível ( compreendi da pelo
si st ema operaci onal em execução no comput ador) . No caso do ADVPL, não é o si st ema
operaci onal de um comput ador que i rá execut ar o códi go compil ado, mas si m o Prot heus
Ser ver.

Dent r o de um programa, os comandos e funções ut i lizados devem segui r regras de si nt axe da
linguagem ut ili zada, poi s caso cont rári o o pr ograma será i nt errompi do por er ros. Os er ros
podem ser de compi l ação ou de execução.

Er ros de compi l ação são aquel es encont rados na si nt axe que não per mi t em que o arqui vo de
códi go do programa sej a compi l ado. Podem ser comandos especi fi cados de forma err ônea,
ut ili zação i nváli da de operador es, et c.

Er ros de execução são aquel es que acont ecem depoi s da compil ação, quando o programa est á
sendo execut ado. Podem ocor rer por i númeras razões, mas geral ment e se refer em as funções
não exi st ent es, ou vari ávei s não cri adas ou i ni ciali zadas, et c.


Li nh as de Pr ogr ama

As li nhas exi st ent es dent ro de um arqui vo t ext o de códi go de programa podem ser li nhas de
comando, l inhas de coment ári o ou l i nhas mi st as.

E Li nh as de Comando

Li nhas de comando possuem os comandos ou i nst ruções que serão execut adas. Por exempl o:

Local nCnt
Local nSoma := 0
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

E Li nh as de Coment ár i o

Li nhas de coment ári o possuem um t ext o qual quer, mas não são execut adas. Servem apenas
para document ação e para t ornar mai s fáci l o ent endi ment o do pr ograma. Exi st em t r ês formas
de se coment ar l i nhas de t ext o. A pri mei ra del as é ut ili zar o si nal de * ( ast eri sco) no começo
da li nha:

* Programa para cálculo do total
* Autor: Microsiga Software S.A.
* Data: 2 de outubro de 2001

- 165 -

ADVPL Compl et o



Todas as l inhas i ni ci adas com um si nal de ast eri sco são consi deradas como coment ári o. Pode-
se ut ilizar a pal avra NOTE ou doi s símbol os da l et ra "e" comer ci al ( &&) para r eal izar a função
do si nal de ast eri sco. Por ém t odas est as for mas de coment ári o de li nhas são obsol et as e
exi st em apenas para compat i bili zação com o padrão xBase. A mel hor manei ra de coment ar
linhas em ADVPL é ut ili zar duas barr as t ransver sai s:

// Programa para cálculo do total
// Autor: Microsiga Software S.A.
// Data: 2 de outubro de 2001

Out ra forma de document ar t ext os é ut i lizar as barras t ransversai s j unt ament e com o
ast eri sco, podendo- se coment ar t odo um bl oco de t ext o sem pr eci sar coment ar l inha a linha:

/*
Programa para cálculo do total
Autor: Microsiga Software S.A.
Data: 2 de outubro de 2001
*/

Todo o t ext o encont rado ent r e a abert ura ( i ndi cada pel os caract er es / * ) e o fechament o
( indi cada pel os caract er es * / ) é consi derado como coment ári o.

E Li nh as Mi st as

O ADVPL t ambém per mi t e que exi st am l inhas de comando com coment ári o. I st o é possível
adi ci onando- se as duas barras t ransver sai s ( / / ) ao fi nal da linha de comando e adi ci onando- se
o t ext o do coment ári o:

Local nCnt
Local nSoma := 0 // Inicializa a variável com zero para a soma
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

E Tamanho da Li n ha

Assi m como a li nha física, del i mit ada pel a quant i dade de caract er es que pode ser di gi t ado no
edi t or de t ext os ut ili zado, exi st e uma l inha consi derada li nha l ógi ca. A li nha l ógi ca, é aquel a
consi derada para a compil ação como uma úni ca li nha de comando.

A pri ncípi o, cada li nha di gi t ada no arqui vo t ext o é di ferenci ada após o pressi onament o da t ecl a
< Ent er> . Ou sej a, a l inha l ógi ca, é a li nha físi ca no arqui vo. Por ém al gumas vezes, por
li mi t ação físi ca do edi t or de t ext o ou por est ét i ca, pode- se "quebrar" a linha l ógi ca em mai s de
uma li nha físi ca no arqui vo t ext o. I st o é efet uado ut ili zando- se o si nal de pont o- e- vírgul a ( ; ) .

If !Empty(cNome) .And. !Empty(cEnd) .And. ; <enter>
!Empty(cTel) .And. !Empty(cFax) .And. ; <enter>
!Empty(cEmail)

GravaDados(cNome,cEnd,cTel,cFax,cEmail)

Endif

Nest e exempl o exi st e uma linha de comando para a checagem das var i ávei s ut ilizadas. Como a
linha t orna- se mui t o grande, pode- se di vi di- l a em mai s de uma li nha físi ca ut ilizando o si nal de

- 166 -

ADVPL Compl et o


pont o- e- vírgul a. Se um si nal de pont o- e- vír gul a for esqueci do nas duas pri mei ras li nhas,
durant e a execução do programa ocor rerá um err o, poi s a segunda li nha físi ca será
consi derada como uma segunda li nha de comando na compil ação. E durant e a execução est a
linha não t erá sent i do.

19.1. Ár eas de um Pr ogr ama ADVPL

Apesar de não ser uma li nguagem de padr ões rígi dos com rel ação à est rut ura do programa, é
i mport ant e i dent i fi car al gumas de suas part es. Consi der e o pr ograma de exempl o abai xo:

#include protheus.ch

/*
+===========================================+
| Programa: Cálculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+===========================================+
*/

User Function CalcFator()

Local nCnt
Local nResultado := 1 // Resultado do fatorial
Local nFator := 5 // Número para o cálculo

// Cálculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

// Exibe o resultado na tela, através da função alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" é " + cValToChar(nResultado))

// Termina o programa
Return

A est rut ura de um pr ogr ama ADVPL é compost a pel as segui nt es áreas:

E Área de I dent i fi cação
- Decl aração dos i ncl udes
- Decl aração da função
- I dent i fi cação do pr ogr ama

E Área de Aj ust es I ni ci ai s
- Decl aração das vari ávei s

E Corpo do Programa
- Preparação para o processament o
- Processament o

E Área de Encer rament o

- 167 -

ADVPL Compl et o



Ár ea de I dent i f i cação

Est a é uma área que não é obri gat óri a e é dedi cada a document ação do programa. Quando
exi st ent e, cont ém apenas coment ári os expl i cando a sua finali dade, dat a de cri ação, aut or , et c. ,
e aparece no começo do programa, ant es de qual quer li nha de comando.

O format o para est a área não é defi ni do. Pode- se col ocar qual quer t i po de i nformação
desej ada e escol her a format ação apr opri ada.

#include “protheus.ch”

/*
+==========================================+
| Programa: Cálculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+==========================================+
*/

User Function CalcFator()


Opci onal ment e podem- se i nclui r defi ni ções de const ant es ut ili zadas no programa ou i nclusão
de arqui vos de cabeçal ho nest a ár ea.

Ár ea de Aj u st es I ni ci ai s

Nest a área geral ment e se fazem os aj ust es i ni ci ai s, i mport ant es para o cor ret o funci onament o
do programa. Ent re os aj ust es se encont ram decl arações de vari ávei s, i ni ci ali zações, abert ura
de arqui vos, et c. Apesar do ADVPL não ser uma li nguagem rígi da e as vari ávei s poderem ser
decl aradas em qual quer l ugar do programa, é aconsel hável fazê- l o nest a área vi sando t ornar o
códi go mai s l egível e facili t ar a i dent i fi cação de vari ávei s não ut ili zadas.

Local nCnt
Local nResultado := 0 // Resultado do fatorial
Local nFator := 10 // Número para o cálculo

Cor po do Pr ogr ama

É nest a ár ea que se encont ram as l inhas de códi go do pr ograma. É onde se real i za a t arefa
necessári a at ravés da organi zação l ógi ca dest as li nhas de comando. Espera- se que as l i nhas de
comando est ej am organizadas de t al modo que no fi nal dest a área o resul t ado esperado sej a
obt i do, sej a el e armazenado em um arqui vo ou em vari ávei s de memóri a, pront o par a ser
exi bi do ao usuári o at ravés de um r el at óri o ou na t el a.

// Cálculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

- 168 -

ADVPL Compl et o



A preparação para o pr ocessament o é formada pel o conj unt o de vali dações e processament os
necessári os ant es da r eali zação do pr ocessament o em si .

Avali ando o processament o do cál cul o do fat orial descri t o ant eri orment e, pode- se defi ni r que a
vali dação i ni ci al a ser r eali zada é o cont eúdo da vari ável nFat or, poi s a mesma det ermi nará a
corr et a execução do códi go.


// Cálculo do fatorial
nFator := GetFator()
// GetFator – função ilustrativa na qual a variável recebe a informação do
usuário.

If nFator <= 0
Alert(“Informação inválida”)
Return
Endif

For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt


Ár ea de Encer r ament o

É nest a área onde as fi nalizações são efet uadas. É onde os arqui vos abert os são fechados, e o
resul t ado da execução do pr ogr ama é ut ili zado. Pode- se exi bi r o r esult ado armazenado em
uma vari ável ou em um arqui vo ou si mpl esment e fi nali zar, caso a t arefa j á t enha si do t oda
compl et ada no corpo do programa. É nest a área que se encont r a o encerrament o do
programa. Todo programa em ADVPL deve sempre t ermi nar com a pal avra chave r et urn.

// Exibe o resultado na tela, através da função alert
Alert("O fatorial de " + cValToChar(nFator) + ;
" é " + cValToChar(nResultado))

// Termina o programa
Return


- 169 -

ADVPL Compl et o



20. Decl ar ação e At r i bui ção de Var i ávei s

20.1. Ti po de Dados

O ADVPL não é uma li nguagem de t i pos rígidos ( st rongl y t yped) , o que si gni fi ca que vari ávei s
de memóri a podem r eceber di fer ent es t i pos de dados durant e a execução do programa.

As vari ávei s podem t ambém cont er obj et os, mas os t i pos pri mári os da l i nguagem são:

Numér i co

O ADVPL não di fer enci a val ores i nt ei ros de val ores com pont o fl ut uant e, port ant o podem- se
cri ar vari ávei s numéri cas com qual quer val or dent ro do i nt erval o permi t i do. Os segui nt es
el ement os são do t i po de dado numéri co:

2
43.53
0.5
0.00001
1000000

Uma vari ável do t i po de dado numéri co pode cont er um númer o de dezoi t o dígi t os i ncl uindo o
pont o fl ut uant e, no i nt erval o de 2.2250738585072014 E–308 at é 1.7976931348623158
E+ 308.

Lógi co

Val ores l ógi cos em ADVPL são i dent i fi cados at r avés de .T. ou .Y. para verdadei ro e .F. ou .N.
para fal so ( i ndependent ement e se os caract er es est i ver em em mai úscul o ou mi núscul o) .

Car act er e

St ri ngs ou cadei as de caract er es são i dent i fi cadas em ADVPL por bl ocos de t ext o ent r e aspas
dupl as ( ") ou aspas si mpl es ( ' ) :

"Olá mundo!"
'Esta é uma string'
"Esta é 'outra' string"

Uma vari ável do t i po caract er e pode cont er st ri ngs com no máxi mo 1 MB, ou sej a, 1048576
caract eres.

Dat a

O ADVPL t em um t i po de dados específi co para dat as. I nt ernament e as vari ávei s dest e t i po de
dado são armazenadas como um número cor respondent e a dat a Jul i ana.

Vari ávei s do t i po de dados Dat a não podem ser decl aradas di ret ament e, e si m at ravés da
ut ili zação de funções específi cas como por exempl o CTOD( ) que convert e uma st ri ng para
dat a.

- 170 -

ADVPL Compl et o



Ar r ay

O Ar ray é um t i po de dado especi al . É a di sposi ção de out r os el ement os em col unas e li nhas. O
ADVPL suport a ar rays uni di mensi onai s ( vet or es) ou mul t i di mensi onai s ( mat ri zes) . Os
el ement os de um arr ay são acessados at r avés de índi ces numéri cos i ni ci ados em 1,
i dent i fi cando a li nha e col una para quant as di mensões exi st i rem.

Arrays devem ser ut ilizadas com caut el a, poi s se forem mui t o grandes podem exauri r a
memóri a do servi dor.

Bl oco de Códi go

O bl oco de códi go é um t i po de dado especi al . É ut ilizado para armazenar i nst ruções escri t as
em ADVPL que poderão ser execut adas post eri orment e.

20.2. Decl ar ação de v ar i ávei s

Vari ávei s de memóri a são um dos r ecursos mai s i mport ant es de uma linguagem. São ár eas de
memóri a cri adas para armazenar i nformações ut ili zadas por um progr ama para a execução de
t arefas. Por exempl o, quando o usuári o di gi t a uma i nformação qual quer , como o nome de um
produt o, em uma t el a de um programa est a informação é armazenada em uma vari ável de
memóri a para post eri or ment e ser gravada ou i mpressa.

A part i r do moment o que uma vari ável é cri ada, não é necessári o mai s se r efer enci ar ao seu
cont eúdo, e si m ao seu nome.

O nome de uma vari ável é um i dent i fi cador úni co o qual deve r espei t ar um máx i mo de 1 0
car act er es. O ADVPL não i mpede a cri ação de uma vari ável de memór i a cuj o nome cont enha
mai s de 10 caract er es, por ém apen as os 10 pr i mei r os ser ão consi der ados para a
l ocalização do cont eúdo armazenado.

Port ant o se forem cri adas duas vari ávei s cuj os 10 pri mei ros car act er es for em i guai s, como
nTot al Geral Anual e nTot al Geral Mensal , as refer ênci as a qual quer uma del as no pr ograma
resul t arão o mesmo, ou sej a, serão a mesma vari ável :

nTotalGeralMensal := 100
nTotalGeralAnual := 300
Alert("Valor mensal: " + cValToChar(nTotalGeralMensal))

Quando o cont eúdo da vari ável nTot al Geral Mensal é exi bi do, o seu val or será de 300. I sso
acont ece porque no moment o que esse val or foi at ri buído à vari ável nTot al Geral Anual , o
ADVPL consi der ou apenas os 10 pri mei ros caract er es ( assi m como o faz quando deve exi bi r o
val or da vari ável nTot alGeral Mensal ) , ou sej a, consi der ou- as como a mesma vari ável . Assi m o
val or ori ginal de 100 foi subst i t uído pel o de 300.


- 171 -

ADVPL Compl et o



20.3. Escopo de var i áv ei s

O ADVPL não é uma linguagem de t i pos rígidos para vari ávei s, ou sej a, não é necessári o
i nformar o t i po de dados que det ermi nada variável i rá cont er no moment o de sua decl aração,
e o seu val or pode mudar durant e a execução do pr ograma.

Também não há necessi dade de decl arar vari ávei s em uma seção específi ca do seu códi go
font e, embora sej a aconsel hável decl arar t odas as vari ávei s necessári as no começo, t ornando
a manut enção mai s fáci l e evi t ando a decl aração de vari ávei s desnecessári as.

Para decl arar uma vari ável deve- se ut ili zar um ident ificador de escopo. Um i dent i fi cador de
escopo é uma pal avra chave que i ndi ca a que cont ext o do pr ograma a vari ável decl arada
pert ence. O cont ext o de vari ávei s pode ser l ocal ( vi suali zadas apenas dent r o do pr ograma
at ual) , público ( vi sualizadas por qual quer out ro programa) , ent r e out r os.

O Cont ex t o de Var i áv ei s dent r o de um Pr ogr ama

As vari ávei s decl aradas em um programa ou função, são vi sívei s de acordo com o escopo onde
são defi nidas. Como t ambém do escopo depende o t empo de exi st ênci a das vari ávei s. A
defi ni ção do escopo de uma vari ável é efet uada no moment o de sua decl aração.

Local nNumero : = 10

Est a li nha de códi go decl ara uma vari ável chamada nNumero i ndi cando que pert ence seu
escopo é l ocal .

Os i dent i fi cador es de escopo são:

E Local
E St at i c
E Pri vat e
E Publi c

O ADVPL não é rígi do em rel ação à decl aração de vari ávei s no começo do programa. A i nclusão
de um i dent i fi cador de escopo não é necessári o para a decl aração de uma vari ável , cont ant o
que um val or l he sej a at ri buído.

nNumero2 := 15

Quando um val or é at r i buído à uma vari ável em um programa ou função, o ADVPL cri ará a
vari ável caso el a não t enha si do decl arada ant eri orment e. A vari ável ent ão é cri ada como se
t i vesse si do decl arada como Pri vat e.

Devi do a essa caract eríst i ca, quando se pret ende fazer uma at ri bui ção a uma vari ável
decl arada pr evi ament e mas escr eve- se o nome da vari ável de forma i ncorr et a, o ADVPL não
gerará nenhum err o de compil ação ou de execução. Poi s compr eenderá o nome da vari ável
escri t o de forma i ncorr et a como se fosse a cri ação de uma nova vari ável . I st o al t erará a l ógi ca
do pr ograma, e é um er ro mui t as vezes di fícil de i dent i fi car.

- 172 -

ADVPL Compl et o



Var i áv ei s de escopo l ocal

Vari ávei s de escopo l ocal são pert encent es apenas ao escopo da função onde foram decl aradas
e devem ser expli ci t ament e decl aradas com o i dent i fi cador LOCAL, como no exempl o:


Function Pai()
Local nVar := 10, aMatriz := {0,1,2,3}
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


Nest e exempl o, a vari ável nVar foi decl arada como l ocal e at ri buída com o val or 10. Quando a
função Fil ha é execut ada, nVar ainda exi st e mas não pode ser acessada. Quando a execução
da função Pai t ermi nar, a vari ável nVar é dest r uída. Qual quer vari ável com o mesmo nome no
programa que chamou a função Pai não é afet ada.

Vari ávei s de escopo l ocal são cri adas aut omat i cament e cada vez que a função onde for em
decl aradas for at i vada. El as cont i nuam a exi st i r e mant êm seu val or at é o fi m da at i vação da
função ( ou sej a, at é que a função r et orne o cont rol e para o códi go que a execut ou) . Se uma
função é chamada r ecursi vament e ( por exempl o, chama a si mesma) , cada chamada em
recursão cri a um novo conj unt o de vari ávei s l ocai s.

A vi si bilidade de vari ávei s de escopo l ocai s é i dênt i ca ao escopo de sua decl aração, ou sej a, a
vari ável é vi sível em qual quer l ugar do códi go font e em que foi decl arada. Se uma função é
chamada r ecursi vament e, apenas as vari ávei s de escopo l ocal cri adas na mai s r ecent e at i vação
são vi sívei s.

Var i áv ei s de escopo st at i c

Vari ávei s de escopo st at i c funci onam basi cament e como as vari ávei s de escopo l ocal , mas
mant êm seu val or at ravés da execução e devem ser decl aradas expl i ci t ament e no códi go com
o i dent i fi cador STATI C.

O escopo das vari ávei s st at i c depende de onde são decl aradas. Se for em decl aradas dent r o do
corpo de uma função ou procedi ment o, seu escopo será l i mit ado àquel a rot i na. Se forem
decl aradas for a do corpo de qual quer rot i na, seu escopo afet a a t odas as funções decl aradas
no font e. Nest e exempl o, a vari ável nVar é decl arada como st at i c e i ni ciali zada com o val or 10:

Function Pai()
Static nVar := 10
.
<comandos>
.
Filha()
.
<mais comandos>
.
Return(.T.)


- 173 -

ADVPL Compl et o


Quando a função Fil ha é execut ada, nVar ai nda exi st e mas não pode ser acessada. Di fer ent e
de vari ávei s decl aradas como LOCAL ou PRI VATE, nVar cont i nua a exist i r e mant êm seu val or
at ual quando a execução da função Pai t ermina. Ent ret ant o, soment e pode ser acessada por
execuções subseqüent es da função Pai .

Var i áv ei s de escopo pr i v at e

A decl aração é opci onal para vari ávei s pri vadas. Mas podem ser decl aradas expl i ci t ament e com
o i dent i fi cador PRI VATE.

Adi ci onal ment e, a at ri bui ção de val or a uma vari ável não cri ada ant eri orment e
aut omat i cament e cri a a vari ável como pri vada. Uma vez cri ada, uma vari ável pri vada cont i nua
a exi st i r e mant ém seu val or at é que o programa ou função onde foi cri ada t ermi ne ( ou sej a,
at é que a função onde foi cri ada ret orne para o códi go que a execut ou) . Nest e moment o, é
aut omat i cament e dest r uída.

É possível cri ar uma nova vari ável pri vada com o mesmo nome de uma vari ável j á exi st ent e.
Ent ret ant o, a nova ( dupli cada) vari ável pode apenas ser cri ada em um nível de at i vação
i nferi or ao nível onde a vari ável foi decl arada pel a pri mei ra vez ( ou sej a, apenas em uma
função chamada pel a função onde a vari ável j á havi a si do cri ada) . A nova vari ável pri vada i rá
esconder qual quer out r a vari ável pri vada ou públi ca ( vej a a document ação sobr e vari ávei s
públi cas) com o mesmo nome enquant o exi st i r.

Uma vez cri ada, uma vari ável pri vada é visível em t odo o pr ogr ama enquant o não for
dest ruída aut omat i cament e quando a rot i na que a cri ou t ermi nar ou uma out ra vari ável
pri vada com o mesmo nome for cri ada em uma subfunção chamada ( nest e caso, a vari ável
exi st ent e t orna- se i nacessível at é que a nova vari ável pri vada sej a dest r uída) .
Em t ermos mai s si mpl es, uma vari ável pri vada é vi sível dent ro da função de cri ação e t odas as
funções chamadas por est a, a menos que uma função chamada cri e sua pr ópri a vari ável
pri vada com o mesmo nome.

Por ex empl o:


Function Pai()
Private nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e exempl o, a vari ável nVar é cri ada com escopo pri vat e e i ni ci ali zada com o val or 10.
Quando a função Fi lha é execut ada, nVar ai nda exi st e e, di ferent e de uma vari ável de escopo
l ocal , pode ser acessada pel a função Fil ha. Quando a função Pai t erminar, nVar será dest ruída
e qual quer decl aração de nVar ant eri or se t ornará acessível novament e.


No ambi ent e ERP Pr ot heus, exi st e uma convenção adi ci onal a qual deve ser
respei t ada que vari ávei s em uso pel a apli cação não sej am i ncorr et ament e
mani pul adas. Por est a convenção deve ser adi ci onado o caract er “ _” ant es
do nome de vari ávei s PRI VATE e PUBLI C. Mai ores i nformações avali ar o
t ópi co: Boas Prát i cas de Pr ogramação.

Ex empl o: Pri vat e _dDat a

- 174 -

ADVPL Compl et o




Var i áv ei s de escopo publ i c

Podem- se cri ar vari ávei s de escopo publi c di nami cament e no códi go com o i dent i fi cador
PUBLI C. As vari ávei s dest e escopo cont i nuam a exi st i r e mant êm seu val or at é o fi m da
execução da t hread ( conexão) .

É possível cri ar uma vari ável de escopo pri vat e com o mesmo nome de uma vari ável de escopo
publi c exi st ent e, ent r et ant o, não é permi t ido cri ar uma vari ável de escopo publi c com o mesmo
nome de uma vari ável de escopo pri vat e exi st ent e.

Uma vez cri ada, uma vari ável de escopo publi c é vi sível em t odo o programa onde foi
decl arada at é que sej a escondida por uma vari ável de escopo pri vat e cri ada com o mesmo
nome. A nova vari ável de escopo pri vat e cri ada esconde a vari ável de escopo publi c exi st ent e,
e est a se t ornará i nacessível at é que a nova var i ável pri vat e sej a dest ruída. Por exempl o:


Function Pai()
Public nVar := 10
<comandos>
.
Filha()
<mais comandos>
.
Return(.T.)


Nest e exempl o, nVar é cri ada como publi c e i nici ali zada com o val or 10. Quando a função Fi l ha
é execut ada, nVar ai nda exi st e e pode ser acessada. Di fer ent e de vari ávei s l ocai s ou pri vat es,
nVar ai nda exi st e após o t érmi no da a execução da função Pai .

Di ferent ement e dos out ros i dent i fi cadores de escopo, quando uma var i ável é decl arada como
públi ca sem ser i ni ci ali zada, o val or assumi do é fal so ( .F.) e não nul o ( nil) .


No ambi ent e ERP Pr ot heus, exi st e uma convenção adi ci onal a qual deve ser
respei t ada que vari ávei s em uso pel a apli cação não sej am i ncorr et ament e
mani pul adas. Por est a convenção deve ser adi ci onado o caract er “ _” ant es
do nome de vari ávei s PRI VATE e PUBLI C. Mai ores i nformações avali ar o
t ópi co: Boas Prát i cas de Pr ogramação.

Ex empl o: Publ i c _cRot ina






- 175 -

ADVPL Compl et o



20.4. Ent endendo a i nf l uênci a do escopo das var i áv ei s

Consi der e as li nhas de códi go de exempl o:


nResultado := 250 * (1 + (nPercentual / 100))


Se est a l inha for execut ada em um programa ADVPL, ocorr erá um err o de execução com a
mensagem "vari abl e does not exi st : nPercent ual ", poi s est a vari ável est á sendo ut ili zada em
uma expr essão de cál cul o sem t er si do decl arada. Para sol uci onar est e er ro, deve- se decl arar a
vari ável previ ament e:


Local nPercentual, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


Nest e exempl o, as vari ávei s são decl aradas pr evi ament e ut ilizando o i dent i fi cador de escopo
local. Quando a li nha de cál cul o for execut ada, o er ro de vari ável não exi st ent e, não mai s
ocor rerá. Por ém vari ávei s não i ni ci alizadas t êm sempr e o val or default nul o ( Nil ) e est e val or
não pode ser ut ili zado em um cál cul o poi s t ambém gerará err os de execução ( nul o não pode
ser di vi dido por 100) . A resol ução dest e pr obl ema é efet uada i nici ali zando- se a vari ável
at ravés de uma das for mas:


Local nPercentual, nResultado
nPercentual := 10
nResultado := 250 * (1 + (nPercentual / 100))

ou

Local nPercentual := 10, nResultado
nResultado := 250 * (1 + (nPercentual / 100))


A di ferença ent re o úl t i mo exempl o e os doi s ant eri or es é que a vari ável é i ni ci ali zada no
moment o da decl aração. Em ambos os exempl os, a vari ável é pri mei ro decl arada e ent ão
i ni ci alizada em uma out ra l inha de códi go.

É aconsel hável opt ar pel o operador de at ri bui ção compost o de doi s pont os e si nal de i gual , poi s
o operador de at ri bui ção ut ilizando soment e o si nal de igual pode ser faci l ment e confundi do
com o operador r el aci onal ( para comparação) durant e a cri ação do programa.


- 176 -

ADVPL Compl et o



21. Regr as adi ci onai s da l i nguagem ADVPL

21.1. Pal av r as r eser v adas

AADD DTOS I NKEY REPLI CATE VAL
ABS ELSE I NT RLOCK VALTYPE
ASC ELSEI F LASTREC ROUND WHI LE
AT EMPTY LEN ROW WORD
BOF ENDCASE LOCK RTRI M YEAR
BREAK ENDDO LOG SECONDS CDOW
ENDI F LOWER SELECT CHR EOF
LTRI M SETPOS CMONTH EXP MAX
SPACE COL FCOUNT MI N SQRT
CTOD FI ELDNAME MONTH STR DATE
FI LE PCOL SUBSTR DAY FLOCK
PCOUNT TI ME DELETED FOUND PROCEDURE
TRANSFORM DEVPOS FUNCTI ON PROW TRI M
DOW I F RECCOUNT TYPE DTOC
I I F RECNO UPPER TRY AS
CATCH THROW




E Pal avras reservadas não podem ser ut i lizadas para vari ávei s,
procedi ment os ou funções;

E Funções r eservadas são pert encent es ao compi l ador e não podem ser
redefi nidas por uma aplicação;

E Todos os i dent i fi cadores que começarem com doi s ou mai s caract eres
“ _” são ut ili zados como i dent i fi cadores i nt ernos e são r eservados.

E I dent i fi cadores de escopo PRI VATE ou PUBLI C ut ili zados em apli cações
específi cas desenvol vida por ou para client es devem t er sua
i dent i fi cação i ni ci ada por um caract ere “ _” .




- 177 -

ADVPL Compl et o



21.2. Pi ct ur es de f or mat ação di sponív ei s

Com base na document ação di sponível no DEM – Document ação El et r ôni ca Mi crosi ga, a
linguagem ADVPL e a apli cação ERP Prot heus admi t em as segui nt es pi ct ures:

Di ci onár i o de Dados ( SX3) e GET

Funções
Cont eúdo Funci on al i dade
A Per mi t e apenas caract er es al fabét i cos.
C Exi be CR depoi s de númer os posi t i vos.
E Exi be numéri co com o pont o e vírgul a i nvert i dos ( format o Eur opeu) .
R I nser e caract eres di ferent es dos caract er es de t empl at e na exi bi ção, mas não os
i nsere na vari ável do GET.
S< n> Per mi t e rol ament o hori zont al do t ext o dent ro do GET, < n> é um númer o i nt ei ro
que i dent i fi ca o t amanho da regi ão.
X Exi be DB depoi s de númer os negat i vos.
Z Exi be zeros como br ancos.
( Exi be números negat i vos ent re par ênt eses com os espaços em branco i ni ci ai s.
) Exi be números negat i vos ent re par ênt eses sem os espaços em branco i ni ci ai s.
! Convert e caract er es al fabét i cos para mai úscul o.

Templ at es
Cont eúdo Funci on al i dade
X Per mi t e qual quer caract er e.
9 Per mi t e apenas dígit os para qual quer t i po de dado, i nclui ndo o si nal para
numéri cos.
# Per mi t e dígi t os, si nai s e espaços em branco par a qual quer t i po de dado.
! Convert e caract er es al fabét i cos para mai úscul o.
* Exi be um ast eri sco no lugar dos espaços em br anco i ni ci ai s em númer os.
. Exi be o pont o deci mal .
, Exi be a posi ção do mi l har.

Exemplo 01 – Picture campo numérico

CT2_VALOR – Numérico – 17,2
Picture: @E 99,999,999,999,999.99


Exemplo 02 – Picture campo texto, com digitação apenas em caixa alta

A1_NOME – Caracter - 40
Picture: @!



- 178 -

ADVPL Compl et o



22. Pr ogr amas de At ual i zação

Os pr ogramas de at ualização de cadast ros e digi t ação de movi ment os seguem um padrão que
se apói a no Di ci onári o de Dados.

Basi cament e são t r ês os model os mai s ut ilizados:

E Model o 1 ou Ax Cadast r o: Para cadast rament os em t el a chei a.
Exempl o: Cadast r o de Cli ent e.

E Model o 2 : Cadast rament os envol vendo apenas uma
t abel a, mas com um cabeçal ho e,
opci onal ment e, um r odapé e um corpo com
quant i dade ili mi t ada de li nhas. I deal para
casos em que há dados que se r epet em
por vári os i t ens e que, por i sso, são
col ocados no cabeçal ho. Exempl o: Pedi do de
Compra.

E Model o 3 : Cadast rament os envol vendo duas t abel as,
um com dados de cabeçal ho e out ro di gi t ado
em l i nhas com os i t ens. Exempl o: Pedi do de
Vendas, Orçament o et c.

Todos os model os são genéri cos, ou sej a, o programa i ndepende da t abel a a ser t rat ada,
bast ando prat i cament e que se i nforme apenas o seu Ali as. O rest o é obt i do do
Di ci onári o de Dados ( SX3) .



- 179 -

ADVPL Compl et o



22.1. Model o1( ) ou Ax Cadast r o( )

O AxCadast r o( ) é uma funci onali dade de cadast ro si mpl es, com poucas opções de
cust omi zação, a qual é compost a de:

× Browse padrão para vi sualização das i nformações da base de dados, de acordo com as
confi gurações do SX3 – Di ci onári o de Dados ( campo br owse) .

× Funções de pesqui sa, vi sualização, i ncl usão, al t eração e excl usão padr ões para
vi suali zação de regi st r os si mpl es, sem a opção de cabeçal ho e i t ens.

E Si nt ax e: Ax Cadast r o( cAl i as, cTi t u l o, cVl dEx c, cVl dAl t )

E Par âmet r os:

cAl i as
Ali as padrão do si st ema para ut i lização, o qual deve est ar defi ni do no
di ci onári o de dados – SX3.
cTi t ul o Tít ul o da Janel a
cVl dEx c Vali dação para Excl usão
cVl dAl t Vali dação para Al t eração


Ex empl o: Função Ax Cadast r o( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | XCADSA2 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo de utilização da função AXCADASTRO() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/

User Function XCadSA2()

Local cAlias := "SA2"
Local cTitulo := "Cadastro de Fornecedores"
Local cVldExc := ".T."
Local cVldAlt := ".T."

dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)

Return Nil


- 180 -

ADVPL Compl et o


Ex empl o: Função de v al i dação da al t er ação



/*/
+------------------------------------------------------------------------------
| Função | VLDALT | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrição | Função de validação de alteração para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldAlt(cAlias,nReg,nOpc)

Local lRet := .T.
Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(“Ateração concluída com sucesso!”)
Endif

RestArea(aArea)

Return lRet


Ex empl o: Função de v al i dação da ex cl u são


/*/
+------------------------------------------------------------------------------
| Função | VLDEXC | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrição | Função de validação de exclusão para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/

User Function VldExc(cAlias,nReg,nOpc)

Local lRet := .T.
Local aArea := GetArea()
Local nOpcao := 0

nOpcao := AxExclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo(“Exclusão concluída com sucesso!”)
Endif

RestArea(aArea)
Return lRet


- 181 -

ADVPL Compl et o



22.2. Model o2( )

O nome Model o 2 foi concei t uado pel a Mi crosi ga por se t r at ar de um prot ót i po de t el a para
ent rada de dados. I ni ci al ment e vamos desmi st i ficar doi s pont os:

O Função Model o2( ) – Trat a- se de uma função pront a que cont empl a o prot ót i po
Model o 2, porém, est e é um assunt o que não i remos t rat ar aqui , vi st o que é
uma funci onali dade simpl es que quando necessári o i nt ervi r em al go na rot i na
não há mui t o recur so para t al .

O Pr ot ót i po Model o 2 – Trat a- se de uma t el a, como a fi gura abai xo, onde seu
obj et i vo é efet uar a manut enção em vári os regi st ros de uma só vez. Por
exempl o: efet uar o movi ment o i nt erno de vár i os produt os do est oque em um
úni co l ot e.



22.2.1. Component es de uma t el a no f or mat o Model o 2

Obj et o MsDi al og( )

Deve ser ut i lizada como j anel a padrão para ent rada de dados, é um t i po de obj et o modal , ou
sej a, não permi t e que out ra j anel a at i va receba dados enquant o est a est i ver at i va.



- 182 -

ADVPL Compl et o


Toda vez que ut ili zar est e comando o ADVPL exi ge que sej a decl arado a di ret i va I ncl ude no
cabeçal ho do programa o arqui vo “ Pr ot heus. ch” , i st o porque o compil ador preci sará porque
est e comando t rat a- se de um pseudo códi go e sua t radução será fei t a na compil ação. Val e
l embrar t ambém que est e só será aci onado depoi s que i nst anci ado e at i vado por out r o
comando.


DEFINE MSDIALOG oDlg TITLE "Protótipo Modelo 2" FROM 0,0 TO 280,552 OF;
oMainWnd PIXEL

ACTIVATE MSDIALOG oDlg CENTER


Repar em que o comando DEFI NE MSDI ALOG i nst anci ou e o comando ACTI VATE MSDI ALOG
at i va t odos os obj et os, ou sej a, t odo ou qual quer out ro obj et o que preci sar col ocar nest a
j anel a será preci so i nfor mar em qual obj et o, para est e caso sempr e ser á ut ilizada a vari ável de
obj et o export ável oDl g.


Função Enchoi ceBar ( )

Função que cri a uma barra de bot ões padrão de Ok e Cancel ar, per mi t indo a i mpl ement ação
de bot ões adi ci onai s.



E Si nt ax e: ENCHOI CEBAR( oDl g, bOk , bCancel ar , [ l Men sApag ] , [ aBot oes ] )

E Par âmet r os:

oDl g Obj et o Janel a onde a barra ser á cri ada.
bOk Obj et o Bl oco de códi go execut ado quando cl i cado bot ão Ok.
bCancel ar Obj et o Bl oco de códi go execut ado quando cl i cado.
l Men sApag Lógi co
I ndi ca se ao cl i car no bot ão Ok aparecerá uma t el a de
confi rmação de excl usão. Val or padrão fal so.
aBot ões Vet or
Vet or com i nformações para cri ação de bot ões
adi ci onai s na barra. Seu format o é { bi t map, bl oco de
códi go, mensagem} .

















- 183 -

ADVPL Compl et o




Fi gu r a: Pr ot ót i po Model o2 – Enchoi ce

Obj et o TPanel ( )

Repar e que para faci lit ar o desenvol vi ment o foi ut ilizado o obj et o TPanel para aj udar o
ali nhament o dos obj et os TSay e TGet , ou sej a, a ut ili zação dest e recur so per mi t e que o
programador não se pr eocupe com coordenadas compl exas para dei xar a uni ão dos obj et os
si mét ri cos.

Ut ilize o obj et o TPanel quando desej ar cri ar um pai nel est át i co, onde podem ser cri ados out r os
cont r ol es com o obj et i vo de organi zar ou agrupar component es vi suai s.

E Si nt ax e: TPanel ( ) : New ( [ anRow ] , [ anCol ] , [ acTex t ] , [ aoWnd] , [ aoFont ] ,
[ al Cent er ed] , [ l Par 6] , [ anCl r Tex t ] , [ anCl r Back ] , [ anWi dt h] ,
[ anHei ght ] , [ al Low er ed] , [ al Rai sed] )

E Par âmet r os:

nRow Numéri co vert i cal em pixel .
nCol Numéri co hori zont al em pi xel .
cTex t Text o a ser exi bi do ao fundo.
oWnd Obj et o da j anel a ou cont rol e onde será cri ado o obj et o.
oFont Caract eríst i cas da font e do t ext o que aparecerá ao fundo.
l Cent er ed Exi be o t ext o do t ít ul o cent ral izado.
l Par 6 Reser vado.
nCl r Tex t Cor do t ext o de cont r ol e.
nCl r Back Cor do fundo de cont r ole.
nWi dt h Largura do cont rol e em pi xel .
nHei ght Al t ura do cont r ol e em pixel .
l Low er ed Exi be o pai nel rebai xado em r el ação ao cont r ol e de fundo.
l Rai sed
Exi be a borda do cont r ol e rebai xado em rel ação ao cont r ol e de
fundo.


- 184 -

ADVPL Compl et o



Comando SAY - Obj et o: TSay ( )

O comando SAY ou obj et o TSay exi be o cont eúdo de t ext o est át i co sobr e uma j anel a.

E Si nt ax e SAY:


@ 4,6 SAY " Códi go: " SI ZE 70, 7 PI XEL OF oTPanel 1


E Si nt ax e TSay ( ) : TSay ( ) : New ( [ anRow ] , [ an Col ] , [ abTex t ] , [ aoWnd] ,
[ acPi ct ur e] , [ aoFont ] , [ l Par 7] , [ l Par 8] , [ l Par 9] , [ al Pi x el s] ,
[ an Cl r Tex t ] , [ anCl r Back ] , [ anWi dt h ] , [ an Hei ght ] , [ l Par 15] , [ l Par 1 6] ,
[ l Par 17 ] , [ l Par 18] , [ l Par 1 9] )

E Par âmet r os:

anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abTex t
Code- Bl ock, opci onal . Quando execut ado deve r et ornar uma
cadei a de caract eres a ser exi bi da.
aoWn d Obj et o, opci onal . Janel a ou di ál ogo onde o cont r ol e será cri ado.
acPi ct ur e
Caract er e, opci onal . Pi ct ure de format ação do cont eúdo a ser
exi bi do.
aoFont
Obj et o, opci onal . Obj et o t i po t Font para confi guração do t i po de
font e que será ut ili zado para exi bi r o cont eúdo.
l Par 7 Reser vado.
l Par 8 Reser vado.
l Par 9 Reser vado.
al Pi x el s
Lógi co, opci onal . Se . T. consi dera coordenadas passadas em
pi xel s se .F. , padrão, consi dera as coordenadas passadas em
caract eres.
anCl r Tex t Numéri co, opci onal . Cor do cont eúdo do cont rol e.
anCl r Back Numéri co, opci onal . Cor do fundo do cont rol e.
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
l Par 15 Reser vado.
l Par 16 Reser vado.
l Par 17 Reser vado.
l Par 18 Reser vado.
l Par 19 Reser vado.


- 185 -

ADVPL Compl et o



Comando MSGET - Obj et o: TGet ( )

O comando MsGet ou o obj et o TGet é ut i lizado para cri ar um cont rol e que armazene ou al t ere
o cont eúdo de uma vari ável at ravés de di gi t ação. O cont eúdo da vari ável só é modi fi cado
quando o cont r ol e perde o foco de edi ção para out ro cont rol e.

E Si nt ax e MSGET:


@ 3,1 92 MSGET dDat a PI CTURE " 9 9/ 9 9/ 9 9" SI ZE 40 ,7 PI XEL OF oTPanel 1



E Si nt ax e TGet ( ) : New ( [ anRow ] , [ anCol ] , [ abSet Get ] , [ aoWnd] , [ anWi dt h] ,
[ anHei ght ] , [ acPi ct ] , [ abVal i d] , [ an Cl r For e] , [ an Cl r Back ] , [ aoFont ] ,
[ l Par 12 ] , [ oPar 1 3] , [ al Pi x el ] , [ cPar 15 ] , [ l Par 1 6] , [ abWh en] , [ l Par 1 8] ,
[ l Par 19 ] , [ abCh an ge] , [ al ReadOn l y ] , [ al Passw or d] , [ cPar 2 3] ,
[ acReadVar ] , [ cPar 25 ] , [ l Par 26 ] , [ nPar 2 7] , [ l Par 28] )

E Par âmet r os:

anRow Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abSet Get Bl oco de códi go, opci onal . Bl oco de códi go no format o { | u| I F(
Pcount ( ) > 0, < var> : = u, < var > ) } que o cont rol e ut ili za para
at ualizar a vari ável < var> . < var> deve ser t i po caract er,
numéri co ou dat a.
aoWn d Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e será
cri ado.
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
acPi ct Caract er e, opci onal . Máscar a de format ação do cont eúdo a ser
exi bi do.
abVal i d Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo for
váli do e .F. quando o cont eúdo for i nváli do.
anCl r For e Numéri co, opci onal . Cor de fundo do cont rol e.
anCl r Back Numéri co, opci onal . Cor do t ext o do cont rol e.
aoFont Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as
caract eríst i cas da font e ut ili zada para exi bi r o cont eúdo do
cont r ol e.
l Par 12 Reser vado.
oPar 13 Reser vado.
al Pi x el Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
cPar 1 5 Reser vado.
l Par 16 Reser vado.
abWh en Bl oco de códi go, opci onal . Execut ado quando mudança de foco
de ent rada de dados est á sendo efet uada na j anel a onde o
cont r ol e foi cri ado. O bloco deve r et ornar .T. se o cont r ol e deve
permanecer habili t ado ou .F. se não.
l Par 18 Reser vado.

- 186 -

ADVPL Compl et o


l Par 19 Reser vado.
abChange Bl oco de códi go, opci onal . Execut ado quando o cont r ol e
modi fi ca o val or da vari ável associ ada.
al ReadOnl y Lógi co, opci onal . Se . T. o cont r ol e não poderá ser edi t ado.
al Passw or d Lógi co, opci onal . Se . T. o cont r ol e exi bi rá ast eri scos “ * ” no
l ugar dos caract er es exibi dos pel o cont r ol e para si mul ar
ent rada de senha.
cPar 2 3 Reser vado.
acReadVar Caract er e, opci onal . Nome da vari ável que o cont rol e deverá
mani pul ar, deverá ser a mesma vari ável informada no
parâmet ro abSet Get , e será o r et orno da função ReadVar( ) .
cPar 2 5 Reser vado.
l Par 26 Reser vado.
nPar 27 Reser vado.
l Par 18 Reser vado.


Obj et o MsGet Dados( )

Obj et o t i po li st a com uma ou mai s col unas para cadast rament o de dados baseado em um
vet or. Sua ut ili zação exi ge que sej a ut ilizado t rês vari ávei s com seu escopo Pri vat e, são el as:
aRot i na, aHeader e aCOLS.

E Obser v ações i mpor t ant es:

O O vet or aHeader deve ser const ruído com base no di ci onári o de dados.
O O vet or aCOLS deve ser const ruído com base no vet or aHeader, por ém deve-
se cri ar uma col una adi ci onal para o cont r ole de excl usão do r egi st ro, ou
sej a, quando o usuári o t ecl ar a t ecl a < DELETE> a linha fi cará na cor ci nza e
est a col una est ar á com o seu val or i gual a verdadei ro ( .T.) .
O Quando i nst anci ado est e obj et o é possível saber em que li nha o usuári o est á
porque o obj et o t r abal ha com uma vari ável de escopo Publi c denominada “ n” ,
seu val or é numéri co e t erá sempr e no cont eúdo a linha em que o usuári o
encont ra- se com o cursor.








- 187 -

ADVPL Compl et o


E Si nt ax e: MSGETDADOS( ) : NEW( nSuper i or , nEsquer da, nI nf er i or , nDi r ei t a,
nOpc, [ cLi nh aOk ] , [ cTudoOk ] , [ cI n i Cpos ] , [ l Apagar ] , [ aAl t er ] , ,
[ uPar 1 ] , [ l Vazi o ] , [ nMax ] , [ cCampoOk ] , [ cSuper Apagar ] ,
[ uPar 2 ] , [ cApagaOk ] , [ oWnd ] )

E Par âmet r os:

nSuper i or
Di st anci a ent re a MsGet Dados e o ext remi dade superi or do
obj et o que a cont ém.
nEsqu er da
Di st anci a ent re a MsGet Dados e o ext remi dade esquerda do
obj et o que a cont ém.
nI nf er i or
Di st anci a ent re a MsGet Dados e o ext remi dade i nferi or do
obj et o que a cont ém.
nDi r ei t a
Di st anci a ent re a MsGet Dados e o ext remi dade di rei t a do
obj et o que a cont ém.
nOpc
Posi ção do el ement o do vet or aRot i na que a MsGet Dados
usará como referenci a.
cLi nh aOk
Função execut ada para vali dar o cont ext o da l i nha at ual do
aCol s.
cTudoOk
Função execut ada para vali dar o cont ext o geral da
MsGet Dados ( t odo aCol s) .
cI ni Cpos
Nome dos campos do t ipo caract er que ut i lizarão i ncrement o
aut omát i co. Est e parâmet r o deve ser no format o “ + < nome
do pri mei ro campo> + < nome do segundo campo> + . ..” .
l Apagar Habili t a del et ar li nhas do aCol s. Val or padrão fal so.
aAl t er Vet or com os campos que poderão ser al t erados.
uPar 1 Parâmet r o r eservado.
l Vazi o
Habili t a validação da primei ra col una do aCol s para est a não
poder est ar vazi a. Val or padrão fal so.
nMax Númer o máxi mo de l i nhas permi t idas. Val or padrão 99.
cCampoOk Função execut ada na vali dação do campo.
cSuper Apagar
Função execut ada quando pr essi onada as t ecl as
< Ct rl > + < Del et e> .
uPar 2 Parâmet r o r eservado.
cApagaOk
Função execut ada para vali dar a excl usão de uma li nha do
aCol s.
oWnd Obj et o no qual a MsGet Dados será cri ada.


Var i áv el Pr i v at e aRot i na

Array com as rot i nas que serão execut adas na MBr owse e que defi ni rá o t i po de operação que
est á sendo execut ada, por exempl o: Pesqui sar, Vi suali zar, I ncl ui r, Al t erar, Excl ui r e out ros.

Est e vet or preci sa ser const ruído no format o:

El ement o Cont eúdo
1 Tít ul o da opção.
2 Nome da rot i na ( Funct i on) .
3 Reser vado.
4 Operação ( 1- Pesqui sar; 2- Vi sualizar; 3- I ncl ui r; 4- Al t erar; 5- Excl usão) .
5
Acesso r el aci onado a r ot i na, se est á opção não for i nformada nenhum
acesso ser á val i dado.


- 188 -

ADVPL Compl et o


Var i áv el Pr i v at e aHeader

Array com i nformações das col unas, ou sej a, com as caract eríst i cas dos campos que est ão
cont i das no di ci onári o de dados ( SX3) , est e vet or pr eci sa est ar no format o abai xo:

El ement o Cont eúdo
1 Tít ul o do campo
2 Nome do campo
3 Máscara do campo
4 Tamanho do campo
5 Deci mal do campo
6 Vali dação de usuári o do campo
7 Uso do campo
8 Ti po do campo ( caract er e, numéri co, dat a e et c. )
9 Prefi xo da t abel a
10 Cont ext o do campo ( real ou vi rt ual )

Var i áv el Pr i v at e aCol s

Vet or com as l inhas a serem edi t adas. As col unas devem ser const r uídas com base no vet or
aHeader e mai s uma últ i ma coluna com o val or l ógi co que det ermi na se a l i nha foi excl uída,
i ni ci al ment e est a dever á t er o seu cont eúdo i gual a fal so ( .F.) .
























- 189 -

ADVPL Compl et o



22.2.2. Est r ut ur a de um pr ogr ama ut i l i zando a Model o2( )

O exempl o abai xo demonst ra a mont agem de um programa para a ut ili zação do prot ót i po
Model o 2. Ant es de i ni ciarmos o exempl o vamos est rut urar o pr ograma.

Est r ut u r a do pr ogr ama

Li nhas Pr ogr ama
1 Função pr i nci pal ;
2 Declar ação e at r ibuição de variáveis;
3 Acesso a t abela pr incipal e sua or dem;
4 Chamada da função MBrowse;
5 Fi m da f unção pr i nci pal .
6
7 Função de vi sual i zação, al t er ação e ex cl usão;
8 Declar ação e at r ibuição de variáveis;
9 Acesso ao pr imeiro r egist r o da chave em que est á posicionado na MBrowse;
10 Mont agem das var iáveis est át icas em t ela;
11 Mont agem do vet or aHeader por meio do dicionár io de dados;
12
Mont agem do vet or aCOLS de t odos os regist ros r efer ent e a chave pr incipal em que est á
posicionado na MBr owse;
13 I nst ância da MsDialog;
14 I nst ância dos obj et os TSay e TGet ;
15 I nst ância do obj et o MsGet Dados;
16 At ivar o obj et o pr incipal que é o obj et o da j anela;
17 Se for oper ação difer ent e de visualização e clicou no bot ão OK;
18 A oper ação e de Alt er ação?
19 Chamar a função par a alt er ar os dados;
20 Caso cont r ár io
21 Chamar a função par a excluir os dados;
22 Fi m da f unção de v i sual i zação, al t er ação e ex cl usão.
23
24 Função de i ncl usão;
25 Declar ação e at r ibuição de variáveis;
26 Mont agem das var iáveis est át icas em t ela;
27 Mont agem do vet or aHeader por meio do dicionár io de dados;
28
Mont agem do vet or aCOLS com o seu cont eúdo confor me o inicializador padr ão do campo ou
vazio, pois t r at a- se de uma inclusão;
29 I nst ância da MsDialog;
30 I nst ância dos obj et os TSay e TGet ;
31 I nst ância do obj et o MsGet Dados;
32 At ivar o obj et o pr incipal que é o obj et o da j anela;
33 Se clicou no bot ão OK;
34 Chamar a função par a incluir os dados;
35 Fi m da f unção de i ncl usão.


- 190 -

ADVPL Compl et o



Rot i n a pr i nci pal


#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | xModelo2 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Função exemplo do protótipo Modelo2. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function xModelo2()
Private cCadastro := "Protótipo Modelo 2"
Private aRotina := {}

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod2Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod2Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod2Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod2Mnt',0,5})

dbSelectArea("ZA3")
dbSetOrder(1)
dbGoTop()

MBrowse(,,,,"ZA3")
Return


Rot i n a de i ncl u são


//+--------------------------------------------------------------------+
//| Rotina | Mod2Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod2Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := ZA3->ZA3_CODIGO
Local cNome := ZA3->ZA3_NOME
Local dData := dDataBase

Private aHeader := {}
Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)


- 191 -

ADVPL Compl et o


Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPanel1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)

oTPanel1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Código:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo F3 "SA3" PICTURE "@!" VALID;
Mod2Vend(cCodigo, @cNome);
SIZE 030,7 PIXEL OF oTPanel1

@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1
@ 3, 192 MSGET dData PICTURE "99/99/99" SIZE 40,7 PIXEL OF
oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;
EnchoiceBar(oDlg,{|| IIF(U_Mod2TOk(), Mod2GrvI(),;
( oDlg:End(), NIL ) )},{|| oDlg:End() })

Return


Rot i n a de Vi su al i zação, Al t er ação e Ex cl u são


//+--------------------------------------------------------------------+
//| Rotina | Mod2Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod2Mnt( cAlias, nReg, nOpc )

Local oDlg
Local oGet
Local oTPanel1
Local oTPAnel2

Local cCodigo := Space(Len(Space(ZA3->ZA3_CODIGO)))
Local cNome := Space(Len(Space(ZA3->ZA3_NOME)))
Local dData := Ctod(Space(8))

Private aHeader := {}

- 192 -

ADVPL Compl et o


Private aCOLS := {}
Private aREG := {}

dbSelectArea( cAlias )
dbGoTo( nReg )

cCodigo := ZA3->ZA3_CODIGO
cNome := ZA3->ZA3_NOME
cData := ZA3->ZA3_DATA

Mod2aHeader( cAlias )
Mod2aCOLS( cAlias, nReg, nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro From 8,0 To 28,80 OF oMainWnd

oTPane1 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPane1:Align := CONTROL_ALIGN_TOP

@ 4, 006 SAY "Código:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 062 SAY "Nome:" SIZE 70,7 PIXEL OF oTPanel1
@ 4, 166 SAY "Emissao:" SIZE 70,7 PIXEL OF oTPanel1

@ 3, 026 MSGET cCodigo When .F. SIZE 30,7 PIXEL OF oTPanel1
@ 3, 080 MSGET cNome When .F. SIZE 78,7 PIXEL OF oTPanel1
@ 3, 192 MSGET dData When .F. SIZE 40,7 PIXEL OF oTPanel1

oTPanel2 := TPanel():New(0,0,"",oDlg,NIL,.T.,;
.F.,NIL,NIL,0,16,.T.,.F.)
oTPanel2:Align := CONTROL_ALIGN_BOTTOM

If nOpc == 4
oGet := MSGetDados():New(0,0,0,0,nOpc,"U_Mod2LOk()",;
".T.","+ZA3_ITEM",.T.)
Else
oGet := MSGetDados():New(0,0,0,0,nOpc)
Endif
oGet:oBrowse:Align := CONTROL_ALIGN_ALLCLIENT

ACTIVATE MSDIALOG oDlg CENTER ON INIT ;
EnchoiceBar(oDlg,{|| ( IIF( nOpc==4, Mod2GrvA(), ;
IIF( nOpc==5, Mod2GrvE(), oDlg:End() ) ), oDlg:End() ) },;
{|| oDlg:End() })
Return



- 193 -

ADVPL Compl et o



Mont agem do ar r ay aHeader


//+--------------------------------------------------------------------+
//| Rotina | Mod2aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

Static Function Mod2aHeader( cAlias )
Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek( cAlias )
While !EOF() .And. X3_ARQUIVO == cAlias
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return


Mont agem do ar r ay aCol s


//+--------------------------------------------------------------------+
//| Rotina | Mod2aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2aCOLS( cAlias, nReg, nOpc )
Local aArea := GetArea()
Local cChave := ZA3->ZA3_CODIGO
Local nI := 0

If nOpc <> 3
dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )
While !EOF() .And. ;
ZA3->( ZA3_FILIAL + ZA3_CODIGO ) == xFilial( cAlias ) + cChave
AADD( aREG, ZA3->( RecNo() ) )

- 194 -

ADVPL Compl et o


AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA3_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return

Ef et i v ação da i ncl u são


//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvI | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na inclusão. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvI()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
dbSetOrder(1)
For nI := 1 To Len( aCOLS )
If ! aCOLS[nI,Len(aHeader)+1]
RecLock("ZA3",.T.)
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
MsUnLock()
Endif
Next nI

RestArea(aArea)
Return



- 195 -

ADVPL Compl et o



Ef et i v ação da al t er ação


//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvA | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para gravar os dados na alteração. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvA()
Local aArea := GetArea()
Local nI := 0
Local nX := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aREG )
If nI <= Len( aREG )
dbGoTo( aREG[nI] )
RecLock("ZA3",.F.)
If aCOLS[nI, Len(aHeader)+1]
dbDelete()
Endif
Else
RecLock("ZA3",.T.)
Endif

If !aCOLS[nI, Len(aHeader)+1]
ZA3->ZA3_FILIAL := xFilial("ZA3")
ZA3->ZA3_CODIGO := cCodigo
ZA3->ZA3_DATA := dData
For nX := 1 To Len( aHeader )
FieldPut( FieldPos( aHeader[nX, 2] ), aCOLS[nI, nX] )
Next nX
Endif
MsUnLock()
Next nI
RestArea( aArea )
Return



- 196 -

ADVPL Compl et o



Ef et i v ação da ex cl usão

//+--------------------------------------------------------------------+
//| Rotina | Mod2GrvE | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para excluir os registros. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2GrvE()
Local nI := 0

dbSelectArea("ZA3")
For nI := 1 To Len( aCOLS )
dbGoTo(aREG[nI])
RecLock("ZA3",.F.)
dbDelete()
MsUnLock()
Next nI
Return

Função aux i l i ar : Val i dação do códi go do v endedor

//+--------------------------------------------------------------------+
//| Rotina | Mod2Vend | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar o código do vendedor. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod2Vend( cCodigo, cNome )
If ExistCpo("SA3",cCodigo) .And. ExistChav("ZA3",cCodigo)
cNome := Posicione("SA3",1,xFilial("SA3")+cCodigo,"A3_NOME")
Endif
Return(!Empty(cNome))


Função aux i l i ar : Val i dação do códi go do cent r o de cust o n a mudança de l i nh a

//+--------------------------------------------------------------------+
//| Rotina | Mod2LOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar a linha de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod2LOk()
Local lRet := .T.
Local cMensagem := "Não será permitido linhas sem o centro de custo."
If !aCOLS[n, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Endif
Endif
Return( lRet )



- 197 -

ADVPL Compl et o


Função aux i l i ar : Val i dação do códi go do cent r o de cust o par a t odas as l i nh as


//+--------------------------------------------------------------------+
//| Rotina | Mod2TOk | Autor | Robson Luiz (rleg) | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar toda as linhas de dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod2TOk()
Local lRet := .T.
Local nI := 0
Local cMensagem := "Não será permitido linhas sem o centro de custo."

For nI := 1 To Len( aCOLS )
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If !aCOLS[nI, Len(aHeader)+1]
If Empty(aCOLS[n,GdFieldPos("ZA3_CCUSTO")])
MsgAlert(cMensagem,cCadastro)
lRet := .F.
Exit
Endif
Endif
Next nI
Return( lRet )


22.2.3. Função Model o2( )

A função Model o2( ) é uma int erface pr é- defi ni da pel a Mi crosi ga que i mpl ement a de forma
padroni zada os compont es necessári os a mani pul ação de est rut uras de dados nas quai s o
cabeçal ho e os i t ens da i nformação compart i lham o mesmo r egi st ro físico.

Seu obj et i vo é at uar como um faci li t ador de codi fi cação, per mi t i ndo a ut ili zação dos r ecursos
bási cos dos segui nt es component es vi suai s:

O MsDi al og( )
O TGet ( )
O TSay ( )
O MsNew Get Dados( )
O Enchoi ceBar ( )



O A função Model o2( ) não i mpl ement a as regras de vi suali zação,
i ncl usão, al t eração e excl usão, como uma AxCadast ro( ) ou
AxFunct i on( ) .

O A i ni ci ali zação das vari ávei s Pri vat e ut i lizada nos cabeçal hos e rodapés,
bem como a i ni ci ali zação e gravação do aCol s devem ser r eal i zadas
pel a rot i na que “ suport a” a execução da Model o2( ) .

O Da mesma forma, o Browse deve ser t rat ado por est a rot i na, sendo
comum a Model o2( ) est ar vi ncul ada ao uso de uma MBr owse( ) .

- 198 -

ADVPL Compl et o



E Si nt ax e: Model o2( [ cTi t ul o] , [ aCab] , [ aRoda] , [ aGr i d] , [ nOpc] , [ cLi n haOk ] ,
[ cTudoOk ] )

E Par âmet r os:

cTi t ul o Tít ul o da j anel a
aCab Array cont endo as i nformações que serão exi bidas no cabeçal ho na for ma de
Enchoi ce( )
aCab[ n] [ 1] ( Caract er e) : = Nome da vari ável pri vat e que será vi nculada ao
campo da Enchoi ce( ) .
aCab[ n] [ 2] ( Array) : = Array com as coordenadas do campo na t el a { Li nha,
Col una}
aCab[ n] [ 3] ( Caract ere) : = Tít ul o do campo na t el a
aCab[ n] [ 4] ( Caract ere) : = Pi ct ure de format ação do get ( ) do campo.
aCab[ n] [ 5] ( Caract ere) : = Função de val i dação do get ( ) do campo.
aCab[ n] [ 6] ( Caract ere) : = Nome da consul t a padrão que será execut ada
para o campo vi a t ecl a F3
aCab[ n] [ 7] ( Lógi co) : = Se o campo est ará l i vre para di gi t ação.

aRoda Array cont endo as i nformações que serão exi bidas no cabeçal ho na for ma de
Enchoi ce( ) , no mesmo format o que o aCab.
aGr i d Array cont endo as coordenadas da Get Dados( ) na t el a. Padrão : =
{ 44,5,118,315}
nOpc Opção sel eci onada na MBr owse, ou que desej e ser passada para cont rol e da
Model o2, aonde:
2 – Vi suali zar
3 - I ncl ui r
4 - Al t erar
5 - Excl ui r
cLi nh aOk Função para val i dação da li nha na Get Dados( )
cTudoOk Função para val i dação na confi rmação da t el a de i nt erface da Model o2( ) .

E Ret or no:

Lógi co I ndi ca se a t el a da i nt er face Model o2( ) foi confi rmada ou cancel ada pel o
usuári o.










- 199 -

ADVPL Compl et o



Ex empl o: Ut i l i zação da Model o2( ) par a v i sual i zação do Cadast r o de Tabel as ( SX5 )


#include "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRW2SX5| Autor | ARNALDO RAYMUNDO JR. | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | UTILIZACAO DA MODELO2() PARA VISUALIZAÇÃO DO SX5. |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

USER FUNCTION MBrw2Sx5()

Local cAlias := "SX5"

Private cCadastro := "Arquivo de Tabelas"
Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"U_SX52Vis" ,0,2})
AADD(aRotina,{"Incluir" ,"U_SX52Inc" ,0,3})
AADD(aRotina,{"Alterar" ,"U_SX52Alt" ,0,4})
AADD(aRotina,{"Excluir" ,"U_SX52Exc" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

USER FUNCTION SX52INC(cAlias,nReg,nOpc)

//Local nUsado := 0
Local cTitulo := "Inclusao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo
2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no
modelo2 - Padrao: {44,5,118,315}
// Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts
Colunas : {080,005,050,300}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da
Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
Local lRetMod2 := .F. // Retorno da função Modelo2 - .T. Confirmou / .F.
Cancelou
Local nColuna := 0

// Variaveis para GetDados()
Private aCols := {}
Private aHeader := {}

- 200 -

ADVPL Compl et o



Exemplo (continuação):

// Variaveis para campos da Enchoice()
Private cX5Filial := xFilial("SX5")
Private cX5Tabela := SPACE(5)

// Montagem do array de cabeçalho
// AADD(aCab,{"Variável" ,{L,C} ,"Título","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})

// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()",;
"","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()",;
"","C","","R"})

// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)

// Inicialização do aCols
For nColuna := 1 to Len(aHeader)

If aHeader[nColuna][8] == "C"
aCols[1][nColuna] := SPACE(aHeader[nColuna][4])
ElseIf aHeader[nColuna][8] == "N"
aCols[1][nColuna] := 0
ElseIf aHeader[nColuna][8] == "D"
aCols[1][nColuna] := CTOD("")
ElseIf aHeader[nColuna][8] == "L"
aCols[1][nColuna] := .F.
ElseIf aHeader[nColuna][8] == "M"
aCols[1][nColuna] := ""
Endif

Next nColuna

aCols[1][Len(aHeader)+1] := .F. // Linha não deletada
lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)

IF lRetMod2
//MsgInfo("Você confirmou a operação","MBRW2SX5")
For nLinha := 1 to len(aCols)
// Campos de Cabeçalho
Reclock("SX5",.T.)
SX5->X5_FILIAL := cX5Filial
SX5->X5_TABELA := cX5Tabela
// Campos do aCols
//SX5->X5_CHAVE := aCols[nLinha][1]
//SX5->X5_DESCRI := aCols[nLinha][2]
For nColuna := 1 to Len(aHeader)
SX5->&(aHeader[nColuna][2]) := aCols[nLinha][nColuna]
Next nColuna
MsUnLock()
Next nLinha
ELSE
MsgAlert("Você cancelou a operação","MBRW2SX5")
ENDIF
Return

- 201 -

ADVPL Compl et o



22.3. Model o3( )

O nome Model o 3, assi m como a Model o 2 foi concei t uado pel a Mi crosi ga por se t rat ar de um
prot ót i po de t el a para ent rada de dados. I ni ci alment e vamos desmi st i fica doi s pont os:

O Função Model o3( ) – Trat a- se de uma função pront a que cont empl a o prot ót i po
Model o 3, porém, est e é um assunt o que não i remos t rat ar aqui , vi st o que é
uma funci onali dade simpl es que quando necessári o i nt ervi r em al go na rot i na
não há mui t o recur so para t al .

O Pr ot ót i po Model o 3 – Trat a- se de uma t el a, como a fi gura abai xo, onde seu
obj et i vo é efet uar a manut enção em vári os regi st ros de uma só vez r el aci onada
a out r o regi st r o de out ra t abel a, ou sej a, aqui t eremos o rel aci onament o de
regi st ros “ pai e fi lho” , ent ão é pr eci so se pr eocupar com est e r el acionament o.
Por exempl o: efet uar a manut enção em um pedi do de vendas, onde t erá um
regi st ro em uma t abela referent e à cabeça do pedi do e out ra t abela com os
regi st ros refer ent es aos i t ens dest e pedi do de vendas.

Para ganharmos t empo não ser á apr esent ado aqui t oda a expl i cação e mont agens para a
função Enchoi ceBar , comando MsDi al og, Say e MsGet e para os vet ores aHeader e
aCOLS, ent r et ant o t odos est es est arão na codi fi cação do códi go font e. A fi gura abai xo most ra
exat ament e o que é a t el a prot ót i po Model o 3:



Fi gu r a: Pr ot ót i po Model o 3

- 202 -

ADVPL Compl et o



Est e pr ot ót i po é const i t uído de MsDi al og, Enchoi ceBar , Enchoi ce, MsGet Dados, Say e Get .

Di ant e dos expost os at é o moment o houve um novo nome para nós, é el e a função Enchoi ce, o
que é?

Função Enchoi ce( ) – Obj et o MsMGet ( )

A função Enchoi ce ou o obj et o MsMGet são r ecur sos baseados no di ci onári o de dados para
veri fi car campos obrigatórios, vali dações, gat i l hos, consul t a padrão e et c. Assi m t ambém par a
cri ar past as de cadast r os. Est es podem ser usados t ant o com vari ávei s de memóri as com o
escopo Pri vat e como di ret ament e os campos da t abel a que se r efer e. A diferença entre a função
Enchoi ce e o obj et o MsMGet é que a função não ret orna o nome da vari ável de obj et o
export ável cri ado.

A est rut ura par a mont ar um pr ograma com o prot ót i po model o 3 é semel hant e ao pr ot ót i po
model o 2, porém a di ferença real é a ut ili zação da função Enchoi ce ou o obj et o MsMGet , para
est e document o i remos t rabal har com a função.

E Si nt ax e: Ench oi ce( cAl i as, nReg, nOpc, aAc, cOpc, cTex t Ex cl u i , aAcho, aPos,
aCpos, nNum, nCol Mens, cMen sagem, cTudOk , oObj , l Vi r t u al )

E Par âmet r os:

cAl i as Ali as do dados a ser em cadast rados.
nReg Númer o do regi st ro da t abel a a ser edi t ado.
uPar 1 Parâmet r o r eservado.
uPar 2 Parâmet r o r eservado.
uPar 3 Parâmet r o r eservado.
aAcho Vet or com os campos que serão apresent ados pel a MsMGet .
aPos Vet or com as coordenadas onde a MsMGet será cri ada no
for mat o { coord. superi or, coord. esquerda, coor d. di rei t a,
coord. i nferi or} .Função execut ada par a val i dar o cont ext o da
linha at ual do aCol s.
aCpos Vet or com os campos que poderão ser al t erados.
uPar 4 Parâmet r o r eservado. Nome dos campos do t i po caract er que
ut ili zarão i ncrement o aut omát i co. Est e parâmet r o deve ser no
for mat o “ + < nome do pr i mei ro campo> + < nome do segundo
campo> + ... ” .
uPar 5 Parâmet r o r eservado.
uPar 6 Parâmet r o r eservado.
uPar 7 Parâmet r o r eservado.
oWnd Obj et o no qual a MsMGet será cri ada.
uPar 8 Parâmet r o r eservado.
l Memor i a I ndi ca se será usado vari ávei s de memóri a ou os campos da
t abel a para cadast rament o dos dados. Val or padrão fal so.
l Col un a I ndi ca se a MsMGet ser á apr esent ada com um obj et o por l inha
( uma col una) . Val or padrão fal so. Parâmet r o reser vado.
uPar 9 Parâmet r o r eservado.
l SemPast as I ndi ca se não será usado as Past as de Cadast ro na MsMGet .
Função execut ada para vali dar a excl usão de uma li nha do
aCol s.



- 203 -

ADVPL Compl et o


Val e l embrar que nós programador es reapr ovei t amos mui t o o que j á exi st e, i st o é para
si mpl esment e ganharmos t empo, e no caso da ut ili zação da função Enchoi ce é preci so cri ar as
vari ávei s de memóri as que l evam o mesmo nome dos campos da t abel a em quest ão. Por
exempl o o campo A2_NOME da t abel a SA2 ( cadast r o de fornecedores) quando quer emos
referenci ar o campo usa- se o prefi xo da t abel a e o campo em quest ão, dest a forma:


SA2->A2_NOME


Agora quando queremos r efer enci ar a uma vari ável que est á com o cont eúdo do mesmo
campo cri amos out r o recurso, dest a forma:


M->A2_NOME


E para cri ar vari ávei s com o nome do campo ut ili zamos um códi go de bl oco ( code- bl ock) e
mai s um l aço de l eit ura para at ri bui r val ores ini ci ai s a cada uma del a. Ent ão fi ca assi m o
procedi ment o:


Private bCampo := { |nField| Field(nField) }


E em out ro moment o aprovei t amos est á vari ável bCampo para faci li t ar a at ri bui ção, vej a o
exempl o abai xo :


For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := Atribuição inicial ou atribuição de valor
Next nX


Ou sej a, fazer para t odos os campos, e a cada campo cri ar a vari ável com a at ri bui ção ini cial
ou at ri bui ção de val or.












- 204 -

ADVPL Compl et o



22.3.1. Est r ut ur a de um pr ogr ama ut i l i zando a Model o3( )

O exempl o abai xo demonst ra a mont agem de um programa para a ut ili zação do prot ót i po
Model o 3. Ant es de i ni ciarmos o exempl o vamos est rut urar o pr ograma.

Est r ut u r a do pr ogr ama

Li nhas Pr ogr ama
1 Função pr i nci pal ;
2 Declar ação e at r ibuição de variáveis;
3 Acesso a t abela pr incipal e sua or dem;
4 Chamada da função MBrowse;
5 Fi m da f unção pr i nci pal .
6
7 Função de vi sual i zação, al t er ação e ex cl usão;
8 Declar ação e at r ibuição de variáveis;
9 Acesso ao pr imeiro r egist r o da chave em que est á posicionado na MBrowse;
10 Const r ução das var iáveis de memór ia M- > ???;
11 Mont agem do vet or aHeader por meio do dicionár io de dados;
12
Mont agem do vet or aCOLS de t odos os r egist r os refer ent e a chave pr incipal em que est á
posicionado na MBr owse;
13 I nst ância da MsDialog;
14 Execução da função Enchoice;
15 I nst ância do obj et o MsGet Dados;
16 At ivar o obj et o pr incipal que é o obj et o da j anela;
17 Se for oper ação difer ent e de visualização e clicou no bot ão OK;
18 A oper ação e de Alt er ação?
19 Chamar a função par a alt er ar os dados;
20 Caso cont r ár io
21 Chamar a função par a excluir os dados;
22 Fi m da f unção de v i sual i zação, al t er ação e ex cl usão.
23
24 Função de i ncl usão;
25 Declar ação e at r ibuição de variáveis;
26 Const r ução das var iáveis de memór ia M- > ???;
27 Mont agem do vet or aHeader por meio do dicionár io de dados;
28
Mont agem do vet or aCOLS com o seu cont eúdo confor me o inicializador padr ão do campo ou
vazio, pois t r at a- se de uma inclusão;
29 I nst ância da MsDialog;
30 I nst ância dos obj et os TSay e TGet ;
31 I nst ância do obj et o MsGet Dados;
32 At ivar o obj et o pr incipal que é o obj et o da j anela;
33 Se clicou no bot ão OK;
34 Chamar a função par a incluir os dados;
35 Fi m da f unção de i ncl usão.









- 205 -

ADVPL Compl et o


Rot i n a pr i nci pal


//+--------------------------------------------------------------------+
//| Rotina | xModelo3 | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Função exemplo do protótipo Modelo3. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
#Include "Protheus.ch"

User Function xModelo3()
Private cCadastro := "Protótipo Modelo 3"
Private aRotina := {}
Private oCliente
Private oTotal
Private cCliente := ""
Private nTotal := 0

Private bCampo := {|nField| FieldName(nField) }

Private aSize := {}
Private aInfo := {}
Private aObj := {}
Private aPObj := {}
Private aPGet := {}

// Retorna a área útil das janelas Protheus
aSize := MsAdvSize()

// Será utilizado três áreas na janela
// 1ª - Enchoice, sendo 80 pontos pixel
// 2ª - MsGetDados, o que sobrar em pontos pixel é para este objeto
// 3ª - Rodapé que é a própria janela, sendo 15 pontos pixel
AADD( aObj, { 100, 080, .T., .F. })
AADD( aObj, { 100, 100, .T., .T. })
AADD( aObj, { 100, 015, .T., .F. })

// Cálculo automático da dimensões dos objetos (altura/largura) em pixel
aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 }
aPObj := MsObjSize( aInfo, aObj )

// Cálculo automático de dimensões dos objetos MSGET
aPGet := MsObjGetPos( (aSize[3] - aSize[1]), 315, { {004, 024, 240, 270} } )

AADD( aRotina, {"Pesquisar" ,"AxPesqui" ,0,1})
AADD( aRotina, {"Visualizar" ,'U_Mod3Mnt',0,2})
AADD( aRotina, {"Incluir" ,'U_Mod3Inc',0,3})
AADD( aRotina, {"Alterar" ,'U_Mod3Mnt',0,4})
AADD( aRotina, {"Excluir" ,'U_Mod3Mnt',0,5})

dbSelectArea("ZA1")
dbSetOrder(1)
dbGoTop()
MBrowse(,,,,"ZA1")
Return

- 206 -

ADVPL Compl et o


Função de I ncl u são


//+--------------------------------------------------------------------+
//| Rotina | Mod3Inc | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para incluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod3Inc( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0

Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := CriaVar( FieldName( nX ), .T. )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )

DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;
aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualização do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualização do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal ;
PICT "@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;
{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL) },;
{|| oDlg:End() })

If nOpcA == 1 .And. nOpc == 3
Mod3Grv( nOpc )
ConfirmSXE()
Endif
Return


- 207 -

ADVPL Compl et o



Função de Vi su al i zação, Al t er ação e Ex cl u são


//+--------------------------------------------------------------------+
//| Rotina | Mod3Mnt | Autor | Robson Luiz (rleg) | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para Visualizar, Alterar e Excluir dados. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod3Mnt( cAlias, nReg, nOpc )
Local oDlg
Local oGet
Local nX := 0
Local nOpcA := 0
Private aHeader := {}
Private aCOLS := {}
Private aGets := {}
Private aTela := {}
Private aREG := {}

dbSelectArea( cAlias )
dbSetOrder(1)

For nX := 1 To FCount()
M->&( Eval( bCampo, nX ) ) := FieldGet( nX )
Next nX

Mod3aHeader()
Mod3aCOLS( nOpc )
DEFINE MSDIALOG oDlg TITLE cCadastro FROM ;
aSize[7],aSize[1] TO aSize[6],aSize[5] OF oMainWnd PIXEL
EnChoice( cAlias, nReg, nOpc, , , , , aPObj[1])

// Atualização do nome do cliente
@ aPObj[3,1],aPGet[1,1] SAY "Cliente: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,2] SAY oCliente VAR cCliente SIZE 98,7 OF oDlg PIXEL

// Atualização do total
@ aPObj[3,1],aPGet[1,3] SAY "Valor Total: " SIZE 70,7 OF oDlg PIXEL
@ aPObj[3,1],aPGet[1,4] SAY oTotal VAR nTotal PICTURE ;
"@E 9,999,999,999.99" SIZE 70,7 OF oDlg PIXEL

U_Mod3Cli()

oGet := MSGetDados():New(aPObj[2,1],aPObj[2,2],aPObj[2,3],aPObj[2,4],;
nOpc,"U_Mod3LOk()",".T.","+ZA2_ITEM",.T.)

ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;
{|| IIF( Mod3TOk().And.Obrigatorio( aGets, aTela ), ( nOpcA := 1, oDlg:End() ),
NIL ) },;
{|| oDlg:End() })

If nOpcA == 1 .And. ( nOpc == 4 .Or. nOpc == 5 )
Mod3Grv( nOpc, aREG )
Endif
Return


- 208 -

ADVPL Compl et o





Função par a mont ar o v et or aHeader


//+--------------------------------------------------------------------+
//| Rotina | Mod3aHeader | Autor | Robson Luiz (rleg) |Data|01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aHeader. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3aHeader()
Local aArea := GetArea()

dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("ZA2")
While !EOF() .And. X3_ARQUIVO == "ZA2"
If X3Uso(X3_USADO) .And. cNivel >= X3_NIVEL
AADD( aHeader, { Trim( X3Titulo() ),;
X3_CAMPO,;
X3_PICTURE,;
X3_TAMANHO,;
X3_DECIMAL,;
X3_VALID,;
X3_USADO,;
X3_TIPO,;
X3_ARQUIVO,;
X3_CONTEXT})
Endif
dbSkip()
End
RestArea(aArea)
Return

Função par a mont ar o v et or aCol s


//+--------------------------------------------------------------------+
//| Rotina | Mod3aCOLS | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para montar o vetor aCOLS. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3aCOLS( nOpc )
Local aArea := GetArea()
Local cChave := ""
Local cAlias := "ZA2"
Local nI := 0

If nOpc <> 3
cChave := ZA1->ZA1_NUM

dbSelectArea( cAlias )
dbSetOrder(1)
dbSeek( xFilial( cAlias ) + cChave )

- 209 -

ADVPL Compl et o






Continuação:

While !EOF() .And. ZA2->( ZA2_FILIAL + ZA2_NUM ) == xFilial( cAlias ) +
cChave
AADD( aREG, ZA2->( RecNo() ) )
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
If aHeader[nI,10] == "V"
aCOLS[Len(aCOLS),nI] := CriaVar(aHeader[nI,2],.T.)
Else
aCOLS[Len(aCOLS),nI] :=
FieldGet(FieldPos(aHeader[nI,2]))
Endif
Next nI
aCOLS[Len(aCOLS),Len(aHeader)+1] := .F.
dbSkip()
End
Else
AADD( aCOLS, Array( Len( aHeader ) + 1 ) )
For nI := 1 To Len( aHeader )
aCOLS[1, nI] := CriaVar( aHeader[nI, 2], .T. )
Next nI
aCOLS[1, GdFieldPos("ZA2_ITEM")] := "01"
aCOLS[1, Len( aHeader )+1 ] := .F.
Endif
Restarea( aArea )
Return


Função par a at r i bu i r o nome do cl i ent e a v ar i áv el


//+--------------------------------------------------------------------+
//| Rotina | Mod3Cli | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a variável com o nome do cliente. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+

User Function Mod3Cli()
cCliente := Posicione( "SA1", 1, xFilial("SA1") + M->(ZA1_CLIENT + ZA1_LOJA),
"A1_NREDUZ" )
oCliente:Refresh()
Return(.T.)



- 210 -

ADVPL Compl et o



Função par a v al i dar a mudança de l i nh a n a MsGet Dados( )

//+--------------------------------------------------------------------+
//| Rotina | Mod3LOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para atualizar a variável com o total dos itens. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
User Function Mod3LOk()
Local nI := 0
nTotal := 0
For nI := 1 To Len( aCOLS )
If aCOLS[nI,Len(aHeader)+1]
Loop
Endif
nTotal+=Round(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]*;
aCOLS[nI,GdFieldPos("ZA2_PRCVEN")],2)
Next nI
oTotal:Refresh()
Return(.T.)

Função par a v al i dar se t odas as l i nh as est ão pr eenchi das

//+--------------------------------------------------------------------+
//| Rotina | Mod3TOk | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para validar os itens se foram preenchidos. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3TOk()
Local nI := 0
Local lRet := .T.

For nI := 1 To Len(aCOLS)
If aCOLS[nI, Len(aHeader)+1]
Loop
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRODUT")]) .And. lRet
MsgAlert("Campo PRODUTO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_QTDVEN")]) .And. lRet
MsgAlert("Campo QUANTIDADE preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif
If Empty(aCOLS[nI,GdFieldPos("ZA2_PRCVEN")]) .And. lRet
MsgAlert("Campo PRECO UNITARIO preenchimento obrigatorio",cCadastro)
lRet := .F.
Endif

If !lRet
Exit
Endif
Next i
Return( lRet )


- 211 -

ADVPL Compl et o


Função par a ef et u ar a gr av ação dos dados em ZA1 e ZA2 na i ncl u são, al t er ação e
ex cl usão.


//+--------------------------------------------------------------------+
//| Rotina | Mod3Grv | Autor | Robson Luiz (rleg) |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Rotina para efetuar a gravação nas tabelas. |
//+--------------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+--------------------------------------------------------------------+
Static Function Mod3Grv( nOpc, aAltera )
Local nX := 0
Local nI := 0

// Se for inclusão
If nOpc == 3
// Grava os itens
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If !aCOLS[ nX, Len( aCOLS ) + 1 ]
RecLock( "ZA2", .T. )
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[nI, 2] ) ),
aCOLS[nX,nI] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
MsUnLock()
Endif
Next nX

// Grava o Cabeçalho
dbSelectArea( "ZA1" )
RecLock( "ZA1", .T. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial( "ZA1" ) )
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next nX
MsUnLock()
Endif

// Se for alteração
If nOpc == 4
// Grava os itens conforme as alterações
dbSelectArea("ZA2")
dbSetOrder(1)
For nX := 1 To Len( aCOLS )
If nX <= Len( aREG )
dbGoto( aREG[nX] )
RecLock("ZA2",.F.)
If aCOLS[ nX, Len( aHeader ) + 1 ]
dbDelete()
Endif
Else


- 212 -

ADVPL Compl et o


Continuação:

If !aCOLS[ nX, Len( aHeader ) + 1 ]
RecLock( "ZA2", .T. )
Endif
Endif

If !aCOLS[ nX, Len(aHeader)+1 ]
For nI := 1 To Len( aHeader )
FieldPut( FieldPos( Trim( aHeader[ nI, 2] ) ),;
aCOLS[ nX, nI ] )
Next nI
ZA2->ZA2_FILIAL := xFilial("ZA2")
ZA2->ZA2_NUM := M->ZA1_NUM
Endif
MsUnLock()
Next nX

// Grava o Cabeçalho
dbSelectArea("ZA1")
RecLock( "ZA1", .F. )
For nX := 1 To FCount()
If "FILIAL" $ FieldName( nX )
FieldPut( nX, xFilial("ZA1"))
Else
FieldPut( nX, M->&( Eval( bCampo, nX ) ) )
Endif
Next
MsUnLock()
Endif

// Se for exclusão
If nOpc == 5
// Deleta os Itens
dbSelectArea("ZA2")
dbSetOrder(1)
dbSeek(xFilial("ZA2") + M->ZA1_NUM)
While !EOF() .And. ZA2->(ZA2_FILIAL + ZA2_NUM) == xFilial("ZA2") +;
M->ZA1_NUM
RecLock("ZA2")
dbDelete()
MsUnLock()
dbSkip()
End

// Deleta o Cabeçalho
dbSelectArea("ZA1")
RecLock("ZA1",.F.)
dbDelete()
MsUnLock()
Endif
Return



- 213 -

ADVPL Compl et o



22.3.2. Função Model o3( )

A função Model o3) é uma i nt erface pré- defi ni da pel a Mi crosi ga que i mpl ement a de forma
padroni zada os compont es necessári os a mani pul ação de est rut uras de dados nas quai s o
cabeçal ho e os i t ens da i nformação est ão em t abel as separadas.

Seu obj et i vo é at uar como um faci li t ador de codi fi cação, per mi t i ndo a ut ili zação dos r ecursos
bási cos dos segui nt es component es vi suai s:

O MsDi al og( )
O Enchoi ce( )
O Enchoi ceBar ( )
O MsNew Get Dados( )




O A função Model o3( ) não i mpl ement a as regras de vi suali zação,
i ncl usão, al t eração e excl usão, como uma AxCadast ro( ) ou
AxFunct i on( ) .

O A i ni ci ali zação dos campos ut i lizados na Enchoi ce( ) deve ser r eali zadas
pel a rot i na que “ suport a” a execução da Model o3( ) , normal ment e
at ravés do uso da função RegToMemor y( ) .

O Da mesma forma, o Browse deve ser t rat ado por est a rot i na, sendo
comum a Model o3( ) est ar vi ncul ada ao uso de uma MBr owse( ) .


E Si nt ax e: Model o3 ( [ cTi t ul o] , [ cAl i asE] , [ cAl i asGet D] , [ aCposE] , [ cLi nOk ] ,
[ cTudOk ] , [ nOpcE] , [ nOpcG] , [ cFi el dOk ] )

E Par âmet r os:

cTi t ul o Tít ul o da j anel a
cAl i asE Ali as da t abel a que será ut ilizada na Enchoi ce
cAl i asGet D Ali as da t abel a que será ut ilizada na Get Dados
aCposE
Nome dos campos, pert encent es ao Al i as especi fi cado o parâmet r o cAl i asE,
que deverão ser exi bi dos na Enchoi ce:
AADD( aCposE,{ “ nome_campo” } )
cLi nh aOk Função para val i dação da li nha na Get Dados( )
cTudoOk Função para val i dação na confi rmação da t el a de i nt erface da Model o2( ) .
nOpcE
Opção sel eci onada na MBrowse, ou que desej e ser passada para cont r ol e da
Enchoi ce da Model o3, aonde:
2 – Vi suali zar
3 - I ncl ui r
4 - Al t erar
5 - Excl ui r
nOpcG
Opção sel eci onada na MBrowse, ou que desej e ser passada para cont r ol e da
Get Dados da Model o3, aonde:
2 – Vi suali zar
3 - I ncl ui r
4 - Al t erar
5 - Excl ui r
cFi el dOk Vali dação dos campos da Enchoi ce( )

- 214 -

ADVPL Compl et o



E Ret or no:

Lógi co I ndi ca se a t el a da i nt er face Model o2( ) foi confi rmada ou cancel ada pel o
usuári o.

Ex empl o: Ut i l i zação da Model o3( ) par a Pedi dos de Ven das ( SC5, SC6)


#INCLUDE "protheus.ch"

//+--------------------------------------------------------------------+
//| Rotina | MBRWMOD3| Autor | ARNALDO RAYMUNDO JR. |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | EXEMPLO DE UTILIZACAO DA MODELO3(). |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+

User Function MbrwMod3()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock
Private cAlias := "SC5"

AADD(aRotina,{ "Pesquisa","AxPesqui" ,0,1})
AADD(aRotina,{ "Visual" ,"U_Mod3All" ,0,2})
AADD(aRotina,{ "Inclui" ,"U_Mod3All" ,0,3})
AADD(aRotina,{ "Altera" ,"U_Mod3All" ,0,4})
AADD(aRotina,{ "Exclui" ,"U_Mod3All" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)

Return

User Function Mod3All(cAlias,nReg,nOpcx)

Local cTitulo := "Cadastro de Pedidos de Venda"
Local cAliasE := "SC5"
Local cAliasG := "SC6"
Local cLinOk := "AllwaysTrue()"
Local cTudOk := "AllwaysTrue()"
Local cFieldOk:= "AllwaysTrue()"
Local aCposE := {}
Local nUsado, nX := 0


- 215 -

ADVPL Compl et o



Exemplo (continuação):

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Opcoes de acesso para a Modelo 3 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Do Case
Case nOpcx==3; nOpcE:=3 ; nOpcG:=3 // 3 - "INCLUIR"
Case nOpcx==4; nOpcE:=3 ; nOpcG:=3 // 4 - "ALTERAR"
Case nOpcx==2; nOpcE:=2 ; nOpcG:=2 // 2 - "VISUALIZAR"
Case nOpcx==5; nOpcE:=2 ; nOpcG:=2 // 5 - "EXCLUIR"
EndCase

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Cria variaveis M->????? da Enchoice ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
RegToMemory("SC5",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou alteracao
permite alterar o conteudo das variaveis de memoria

//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Cria aHeader e aCols da GetDados ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If Alltrim(x3_campo)=="C6_ITEM"
dbSkip()
Loop
Endif
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpcx==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
aCols[1,nX]:=CriaVar(aHeader[nX,2])
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

- 216 -

ADVPL Compl et o



Exemplo (continuação):

If Len(aCols)>0
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Executa a Modelo 3 ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
aCposE := {"C5_CLIENTE"}

lRetMod3 := Modelo3(cTitulo, cAliasE, cAliasG, aCposE, cLinOk, cTudOk,;
nOpcE, nOpcG,cFieldOk)
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Executar processamento ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If lRetMod3
Aviso("Modelo3()","Confirmada operacao!",{"Ok"})
Endif
Endif

Return





























- 217 -

ADVPL Compl et o



22.4. Mbr ow se( )

A Mbrowse( ) é uma funci onali dade de cadast ro que permi t e a ut ilização de r ecursos mai s
apri morados na vi suali zação e mani pul ação das i nformações do si st ema, possui ndo os
segui nt es component es:

× Browse padrão para vi sualização das i nformações da base de dados, de acordo com as
confi gurações do SX3 – Di ci onári o de Dados ( campo br owse) .

× Paramet ri zação para funções específi cas para as ações de vi sualização, i nclusão,
al t eração e excl usão de i nformações, o que vi abiliza a manut enção de i nformações com
est rut ura de cabeçal hos e i t ens.

× Recur sos adi ci onai s como i dent i fi cador es de st at us de regi st ros, l egendas e fil t ros para
as i nformações.

E Si nt ax e: MBr ow se( n Li n1, nCol 1, nLi n2 , nCol 2, cAl i as, aFi x e, cCpo, nPar 08,
cFun, nCl i ck Def , aCol or s, cTopFun, cBot Fun, nPar 14, bI n i t Bl oc,
l NoMnuFi l t er , l SeeAl l , l ChgAl l )

E Par âmet r os:

nLi n 1 Númer o da Li nha I ni ci al
nCol 1 Númer o da Col una I ni cial
nLi n 2 Númer o da Li nha Fi nal
nCol 2 Númer o da Col una Final
cAl i as
Ali as do arqui vo que ser á vi sualizado no br owse.
Para ut i lizar a função MBrowse com arqui vos de t rabal ho, o al i as do
arqui vo de t rabal ho deve ser obri gat ori ament e ' TRB' e o par âmet ro
aFi xe t orna- se obri gat ór i o.
aFi x e
Array bi - di mensi onal cont endo os nomes dos campos fi xos pré-
defi ni dos, obri gando a exi bi ção de uma ou mai s col unas ou a defi ni ção
das col unas quando a função é ut ili zada com ar qui vos de t rabal ho.
A est rut ura do ar ray é di ferent e para arqui vos que fazem part e do
di ci onári o de dados e para arqui vos de t rabal ho.

Arqui vos que fazem par t e do di ci onári os de dados

[ n] [ 1] = > Descri ção do campo
[ n] [ 2] = > Nome do campo

Arqui vos de t rabal ho

[ n] [ 1] = > Descri ção do campo
[ n] [ 2] = > Nome do campo
[ n] [ 3] = > Ti po
[ n] [ 4] = > Tamanho
[ n] [ 5] = > Deci mal
[ n] [ 6] = > Pi ct ure




- 218 -

ADVPL Compl et o


E Par âmet r os:

cCpo
Campo a ser val idado se est á vazi o ou não par a exi bi ção do bi t map de
st at us. Quando esse par âmet r o é ut ili zado, a pri mei ra col una do br owse
será um bi t map i ndi cando o st at us do regi st r o, conforme as condi ções
confi guradas nos par âmet r os cCpo, cFu n e aCol or s.
nPar 08 Parâmet r o r eservado.
cFun
Função que r et ornará um val or l ógi co para exi bi ção do bi t map de
st at us.
Quando esse parâmet r o é ut i lizado, o parâmet r o cCpo é
aut omat i cament e desconsi derado.
nCl i ck Def
Númer o da opção do aRot i na que será execut ada quando for efet uado
um dupl o cli que em um regi st ro do br owse. O defaul t é execut ar a
rot i na de vi suali zação.
aCol or s
Array bi - di mensi onal para possi bili t ar o uso de di ferent es bi t maps de
st at us.
[ n] [ 1] = > Função que r et ornará um val or l ógi co para a exi bi ção do
bi t map
[ n] [ 2] = > Nome do bi t map que será exi bi do quando a função ret ornar
.T. ( True) .
O nome do bi t map deve ser um r esource do reposi t óri o e quando esse
parâmet ro é ut ili zado os parâmet r os cCpo e cFun são
aut omat i cament e desconsi derados.
cTopFun
Função que r et orna o limi t e superi or do fi l t ro baseado na chave de
índi ce sel eci onada.
Esse parâmet r o deve ser ut ili zado em conj unt o com o parâmet r o
cBot Fu n.
cBot Fu n
Função que r et orna o limi t e inferi or do fi l t ro baseado na chave de índi ce
sel eci onada.
Esse parâmet r o deve ser ut ili zado em conj unt o com o parâmet r o
cTopFun.
nPar 14 Parâmet r o r eservado.
bI n i t Bl oc
Bl oco de códi go que ser á execut ado no ON I NI T da j anel a do br owse. O
bl oco de códi go receber á como parâmet r o o obj et o da j anel a do
browse.
l NoMnuFi l t er
Val or l ógi co que defi ne se a opção de fil t ro será exi bi da no menu da
MBr owse.
.T. = > Não exi be a opção no menu
.F. = > ( defaul t ) Exi be a opção no menu.
A opção de fi l t ro na MBr owse est á di sponível apenas para TopConnect .
l SeeAl l
I dent i fi ca se o Br owse deverá most rar t odas as fili ai s.
O val or defaul t é .F. ( Fal se ) , não most ra t odas as fi liai s. Caso os
parâmet ros cTopFun ou cBot Fu n sej am i nfor mados esse parâmet r o
será confi gurado aut omat i cament e para .F. ( Fal se )
Parâmet r o vál i do à part ir da v er são 8.1 1.
A função Set Br w SeeAl l muda o val or defaul t desse parâmet r o.
l ChgAl l
I dent i fi ca se o regi st r o de out ra fi li al est á aut or i zado para al t erações.
O val or defaul t é .F. ( Fal se ) , não permi t e al t erar r egi st ros de out ras
fili ai s. Quando esse par âmet r o est á confi gurado para .T. ( True ) , o
parâmet ro l SeeAl l é confi gurado aut omat i cament e para . T. ( True ) .
Caso os parâmet ros cTopFun ou cBot Fun sej am i nformados esse
parâmet ro será confi gurado aut omat i cament e para .F. ( Fal se ) .
Parâmet r o vál i do à part ir da v er são 8.1 1.
A função Set Br w ChgAl l muda o val or defaul t desse parâmet r o.

- 219 -

ADVPL Compl et o



E Var i áv ei s pr i v at e adi ci on ai s

aRot i n a
Array cont endo as funções que serão execut adas pel a Mbrowse, nel e
será defi ni do o t i po de operação a ser execut ada ( incl usão, al t eração,
excl usão, vi suali zação, pesqui sa, et c. ) , e sua est rut ura é compost a de
5 ( ci nco) di mensões:

[ n] [ 1] - Tít ul o;
[ n] [ 2] – Rot i na;
[ n] [ 3] – Reservado;
[ n] [ 4] – Operação ( 1 - pesqui sa; 2 - vi suali zação; 3 - i ncl usão; 4 -
al t eração; 5 - excl usão) ;

El e ai nda pode ser paramet ri zado com as funções bási cas da
AxCadast r o conforme abai xo:

AADD( aRot i na,{ "Pesqui sar" ,"AxPesqui ",0,1} )
AADD( aRot i na,{ "Vi sualizar" ,"AxVi sual ",0,2} )
AADD( aRot i na,{ "I ncl ui r" ,"AxI ncl ui ",0,3} )
AADD( aRot i na,{ "Alt erar " ,"AxAl t era",0,4} )
AADD( aRot i na,{ "Excl ui r" ,"AxDel et a",0,5} )
cCadast r o Tít ul o do browse que será exi bido.

E I nf or mações passadas par a f unções do aRot i n a:

Ao defi ni r as funções no ar ray aRot i na, se o nome da função não for especi fi cado com “ ( ) ” , a
Mbrowse passará como parâmet ros as segui nt es vari ávei s de cont r ol e:

cAl i as Nome da área de t rabal ho defi ni da para a Mbr owse
nReg Recno do r egi st ro posi cionado no Br owse
nOpc
Posi ção da opção ut ili zada na Mbr owse de acor do com a ordem da
função no ar ray a Rot i na.



A posi ção das funções no array aRot i na defi ne o cont eúdo de uma vari ável de
cont r ol e que será repassada para as funções chamadas a part i r da Mbrowse,
convenci onada como nOpc. Dest a forma, para mant er o padrão da apli cação
ERP a ordem a ser segui da na defi ni ção do aRot i na é:


1. Pesqui sar
2. Vi suali zar
3. I ncl ui r
4. Al t erar
5. Excl ui r
6. Li vre


- 220 -

ADVPL Compl et o



Ex empl o: Função Mbr ow se( )

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo de utilização da função MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"
Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil


Ex empl o: Função I ncl ui ( ) subst i t u i ndo a f u nção Ax I ncl ui ( ) – Ch amada da Mbr ow se( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo de utilização da função MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA1()

Local cAlias := "SA1"
Private cCadastro := "Cadastro de Clientes"
Private aRotina := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_Inclui" ,0,3})


- 221 -

ADVPL Compl et o



Exemplo (continuação):

AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})

dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)

Return Nil


Ex empl o: Função I ncl ui ( ) subst i t u i ndo a f u nção Ax I ncl ui ( ) – Fun ção I ncl u i ( )


/*/
+-----------------------------------------------------------------------------
| Função | INCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de inclusão específica chamando a AXINCLUI() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Inclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"
Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)

If nOpcao == 1
MsgInfo(“Inclusão concluída com sucesso!”)
ElseIf == 2
MsgInfo(“Inclusão cancelada!”)
Endif

Return Nil









- 222 -

ADVPL Compl et o



Ex empl o: Det er mi n an do a opção do aRot i n a pel a i nf or mação r ecebi da em nOpc

#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | EXCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de exclusão especifica chamando a AxDeleta |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function Exclui(cAlias, nReg, nOpc)

Local cTudoOk := "(Alert('OK'),.T.)"
Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,aRotina[nOpc,4])
// Identifica corretamente a opção definida para o função em aRotinas com mais
// do que os 5 elementos padrões.

If nOpcao == 1
MsgInfo(“Exclusão realizada com sucesso!”)
ElseIf == 2
MsgInfo(“Exclusão cancelada!”)
Endif

Return Nil


22.4.1. Ax Funct i ons( )

Conforme menci onado nos t ópi cos sobre as i nt erfaces padrões AxCadast ro( ) e Mbr owse( ) ,
exi st em funções padr ões da apli cação ERP que permi t em a vi suali zação, i ncl usão, al t eração e
excl usão de dados em format o si mpl es.

Est as funções são padrões na defi ni ção da i nt erface AxCadast ro( ) e podem ser ut i lizadas
t ambém da const rução no array aRot i na ut ilizado pel a Mbr owse( ) , as quai s est ão l i st adas a
segui r:

´ AXPESQUI ( )
´ AXVI SUAL( )
´ AXI NCLUI ( )
´ AXALTERA( )
´ AXDELETA( )

- 223 -

ADVPL Compl et o



AXPESQUI ( )

Si nt ax e AXPESQUI ( )
Descr i ção
Função de pesqui sa padrão em r egi st ros exi bi dos pel os br owses do si st ema,
a qual posi ci ona o br owse no regi st ro pesqui sado. Exi be uma t el a que
permi t e a sel eção do índi ce a ser ut i lizado na pesqui sa e a di gi t ação das
i nformações que compõe a chave de busca.

AXVI SUAL( )

Si nt ax e
AXVI SUAL( cAl i as, n Reg, nOpc, aAch o, nCol Men s, cMensagem, cFunc, ;
aBut t ons, l Max i mi zed )
Descr i ção
Função de vi suali zação padrão das i nformações de um regi st r o, no for mat o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .

AXI NCLUI ( )

Si nt ax e
Ax I ncl u i ( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i ção
Função de i ncl usão padr ão das i nformações de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .

AXALTERA( )

Si nt ax e
Ax Al t er a( cAl i as, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk , l F3, ;
cTr an sact , aBut t on s, aPar am, aAut o, l Vi r t u al , l Max i mi zed)
Descr i ção
Função de al t eração padrão das i nformações de um regi st ro, no format o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .


AXDELETA( )

Si nt ax e
AXDELETA( cAl i as, nReg, nOpc, cTr ansact , aCpos, aBut t ons, aPar am, ;
aAut o, l Max i mi zed)
Descr i ção
Função de excl usão padrão das i nformações de um regi st r o, no format o
Enchoi ce, conforme demonst rado no t ópi co sobre a i nt erface AxCadast ro( ) .









- 224 -

ADVPL Compl et o



22.4.2. Fi l Br ow se( )

A Fil Browse( ) é uma funci onalidade que permi t e a ut ili zação de fi l t ros na MBr owse( ) .

E Si nt ax e: Fi l Br ow se( cAl i as, aQu er y , cFi l t r o, l Show Pr oc)

E Par âmet r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
aQuer y
Est e parâmet ro deverá ser i ni ci alizado sempre vazi o e sua passagem
obri gat ori ament e por r eferênci a, poi s, seu r et or no será envi ado para a
função EndFil Brw( ) .

[ 1] = > Nome do Arqui vo Físi co
[ 2] = > Ordem corr espondent e ao Si ndex
cFi l t r o Condi ção de fi lt ro para a MBr owse( )
l Show Pr oc

Habili t a ( .T.) ou desabi li t a ( .F.) a apresent ação da mensagem
“ Sel eci onando r egi st ros ...” , no pr ocessament o.



22.4.3. EndFi l Br w ( )

A EndFil Brw( ) é uma funci onali dade que per mi t e eli minar o fil t ro e o arqui vo t emporári o
cri ados pel a Fil Browse( ) .

E Si nt ax e: EndFi l Br w ( cAl i as, aQu er y )

E Par âmet r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
aQuer y
Array de r et orno passado por refer ênci a para a Fil Browse( ) .

[ 1] = > Nome do Arqui vo Físi co
[ 2] = > Ordem corr espondent e ao Si ndex








- 225 -

ADVPL Compl et o



22.4.4. PesqBr w ( )

A PesqBrw( ) é uma funci onalidade que permi t e a pesqui sa dent r o da MBr owse( ) . Est a função
deverá obri gat ori ament e subst i t ui r a função AxPesqui , no array do aRot i na, sempr e que for
ut ili zada a função Fil Browse( ) .

E Si nt ax e: PesqBr w ( cAl i as , nReg, bBr w Fi l t er )

E Par âmet r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
nReg Númer o do regi st ro
bBr w Fi l t er
Bl oco de Códi go que cont ém a Fi l Browse( )

Ex: bBrwFi lt er : = { | | Fil Browse( cAli as, aQuery, cFil t ro, l ShowPr oc) }



22.4.5. Br w Legenda ( )

A BrwLegenda( ) é uma funci onali dade que per mi t e a i ncl usão de l egendas na MBrowse( ) .

E Si nt ax e: Br w Legenda( cCadast r o , cTi t u l o, aLegenda)

E Par âmet r os:

cCadast r o
Mesma vari ável ut ili zada para a MBrowse, que ident i fi ca o cadast r o que
est á em uso no moment o
cTi t ul o Tít ul o ( i dent i fi cação) da Legenda
aLegenda

Array cont endo de defi ni ção da cor e do t ext o, expli cat i vo sobr e o que
el a represent a na MBr owse

Ex: { { “ Cor” ,” Text o” } }




Li st a de cor es di spon ív ei s n o Pr ot heus

O BR_AMARELO
O BR_AZUL
O BR_BRANCO
O BR_CI NZA
O BR_LARANJA
O BR_MARRON
O BR_VERDE
O BR_VERMELHO
O BR_PI NK
O BR_PRETO




- 226 -

ADVPL Compl et o



Ex empl o: Mbr ow se( ) ut i l i zando as f unções acessór i as


#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | MBrwSA2 | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Exemplo da MBrowse utilizando a tabela de Cadastro de |
| | Fornecedores |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MBrwSA2()

Local cAlias := "SA2"
Local aCores := {}
Local cFiltra := "A2_FILIAL == '"+xFilial('SA2')+"' .And. A2_EST == 'SP'"

Private cCadastro := "Cadastro de Fornecedores"
Private aRotina := {}
Private aIndexSA2 := {}
Private bFiltraBrw:= { || FilBrowse(cAlias,@aIndexSA2,@cFiltra) }

AADD(aRotina,{"Pesquisar" ,"PesqBrw" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_BInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"U_BAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"U_BDeleta" ,0,5})
AADD(aRotina,{"Legenda" ,"U_BLegenda" ,0,3})

/*
-- CORES DISPONIVEIS PARA LEGENDA --
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARRON
BR_VERDE
BR_VERMELHO
BR_PINK
BR_PRETO
*/

AADD(aCores,{"A2_TIPO == 'F'" ,"BR_VERDE" })
AADD(aCores,{"A2_TIPO == 'J'" ,"BR_AMARELO" })
AADD(aCores,{"A2_TIPO == 'X'" ,"BR_LARANJA" })
AADD(aCores,{"A2_TIPO == 'R'" ,"BR_MARRON" })
AADD(aCores,{"Empty(A2_TIPO)" ,"BR_PRETO" })

dbSelectArea(cAlias)
dbSetOrder(1)


- 227 -

ADVPL Compl et o



Exemplo (continuação):

//+------------------------------------------------------------
//| Cria o filtro na MBrowse utilizando a função FilBrowse
//+------------------------------------------------------------
Eval(bFiltraBrw)

dbSelectArea(cAlias)
dbGoTop()
mBrowse(6,1,22,75,cAlias,,,,,,aCores)

//+------------------------------------------------
//| Deleta o filtro utilizado na função FilBrowse
//+------------------------------------------------
EndFilBrw(cAlias,aIndexSA2)

Return Nil

//+---------------------------------------
//|Função: BInclui - Rotina de Inclusão
//+---------------------------------------
User Function BInclui(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxInclui(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Inclusão efetuada com sucesso!")
Else
MsgInfo("Inclusão cancelada!")
Endif

Return Nil

//+-----------------------------------------
//|Função: BAltera - Rotina de Alteração
//+-----------------------------------------
User Function BAltera(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxAltera(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Alteração efetuada com sucesso!")
Else
MsgInfo("Alteração cancelada!")
Endif

Return Nil


- 228 -

ADVPL Compl et o



Exemplo (continuação):

//+-----------------------------------------
//|Função: BDeleta - Rotina de Exclusão
//+-----------------------------------------
User Function BDeleta(cAlias,nReg,nOpc)

Local nOpcao := 0

nOpcao := AxDeleta(cAlias,nReg,nOpc)

If nOpcao == 1
MsgInfo("Exclusão efetuada com sucesso!")
Else
MsgInfo("Exclusão cancelada!")
Endif

Return Nil

//+-------------------------------------------
//|Função: BLegenda - Rotina de Legenda
//+-------------------------------------------
User Function BLegenda()

Local aLegenda := {}

AADD(aLegenda,{"BR_VERDE" ,"Pessoa Física" })
AADD(aLegenda,{"BR_AMARELO" ,"Pessoa Jurídica" })
AADD(aLegenda,{"BR_LARANJA" ,"Exportação" })
AADD(aLegenda,{"BR_MARRON" ,"Fornecedor Rural" })
AADD(aLegenda,{"BR_PRETO" ,"Não Classificado" })

BrwLegenda(cCadastro, "Legenda", aLegenda)

Return Nil














- 229 -

ADVPL Compl et o



22.5. Mar k Br ow se( )

A função MarkBrow( ) permi t e que os el ement os de um br owse, sej am mar cados ou
desmarcados. Para ut ilização da MarkBrow( ) é necessári o decl arar as vari ávei s cCadast ro e
aRot i na como Pri vat e, ant es da chamada da função.

E Si nt ax e: Mar k Br ow ( cAl i as, cCampo, cCpo, aCampos, l I nv er t , cMar ca, cCt r l M,
uPar 8, cEx pI n i , cEx pFi m, cAv al , bPar Bl oco)

E Par âmet r os:

cAl i as Ali as at i vo defi ni do para a Mbr owse( )
cCampo Campo do arqui vo onde será fei t o o cont rol e ( gravação) da mar ca.
cCpo
Campo onde será fei t a a vali dação para mar cação e exi bi ção do bi t map
de st at us.
aCampos
Vet or de col unas a ser em exi bi das no browse, deve cont er as segui nt es
di mensões:

[ n] [ 1] – nome do campo;
[ n] [ 2] - Nul o ( Nil ) ;
[ n] [ 3] - Tít ul o do campo;
[ n] [ 4] - Máscara ( pi ct ure) .
l I n v er t I nvert e a mar cação.
cMar ca St ri ng a ser gravada no campo especi fi cado par a marcação.
cCt r l M Função a ser execut ada caso desej e marcar t odos el ement os.
uPar 8 Parâmet r o r eservado.
cEx pI ni
Função que r et orna o cont eúdo i ni ci al do filt ro baseada na chave de
índi ce sel eci onada.
cEx pFi m
Função que r et orna o cont eúdo fi nal do fil t ro baseada na chave de
índi ce sel eci onada.
cAv al Função a ser execut ada no dupl o cli que em um el ement o no br owse.
bPar Bl oco Bl oco de códi go a ser execut ado na i ni ci ali zação da j anel a


E I nf or mações passadas par a f unções do aRot i n a:

Ao defi ni r as funções no ar ray aRot i na, se o nome da função não for especi fi cado com “ ( ) ” , a
MarkBrowse passar á como par âmet ros as seguint es vari ávei s de cont r ol e:

cAl i as Nome da área de t rabal ho defi ni da para a Mbr owse
nReg Recno do r egi st ro posi cionado no Br owse
nOpc
Posi ção da opção ut ili zada na Mbr owse de acor do com a ordem da
função no ar ray a Rot i na.
cMar ca Marca em uso pel a Mar kBrw( )
l I n v er t e I ndi ca se foi ut ili zada a inver são da sel eção dos i t ens no br owse.


- 230 -

ADVPL Compl et o



Ex empl o: Função Mar k Br ow ( ) e acessór i as


#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Programa | MkBrwSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | MarkBrowse Genérico |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION MkBrwSA1()

Local aCpos := {}
Local aCampos := {}
Local nI := 0
Local cAlias := "SA1"

Private aRotina := {}
Private cCadastro := "Cadastro de Clientes"
Private aRecSel := {}

AADD(aRotina,{"Pesquisar" ,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"AxInclui" ,0,3})
AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})
AADD(aRotina,{"Visualizar Lote" ,"U_VisLote" ,0,5})

AADD(aCpos, "A1_OK" )
AADD(aCpos, "A1_FILIAL" )
AADD(aCpos, "A1_COD" )
AADD(aCpos, "A1_LOJA" )
AADD(aCpos, "A1_NOME" )
AADD(aCpos, "A1_TIPO" )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len(aCpos)
IF dbSeek(aCpos[nI])
AADD(aCampos,{X3_CAMPO,"",IIF(nI==1,"",Trim(X3_TITULO)),;
Trim(X3_PICTURE)})
ENDIF
Next

DbSelectArea(cAlias)
DbSetOrder(1)

MarkBrow(cAlias,aCpos[1],"A1_TIPO == ' '",aCampos,.F.,GetMark(,"SA1","A1_OK"))

Return Nil

- 231 -

ADVPL Compl et o


Ex empl o: Função Vi sLot e( ) – ut i l i zação das f unções acessór i as da Mar k Br ow ( )


/*/
+-----------------------------------------------------------------------------
| Programa | VisLote() | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Função utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
USER FUNCTION VisLote()
Local cMarca := ThisMark()
Local nX := 0
Local lInvert := ThisInv()
Local cTexto := ""
Local cEOL := CHR(10)+CHR(13)
Local oDlg
Local oMemo

DbSelectArea("SA1")
DbGoTop()
While SA1->(!EOF())

// IsMark("A1_OK", cMarca, lInverte)
IF SA1->A1_OK == cMarca .AND. !lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD, SA1->A1_LOJA, SA1->A1_NREDUZ})
ELSEIF SA1->A1_OK != cMarca .AND. lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD,SA1->A1_LOJA, SA1->A1_NREDUZ})
ENDIF

SA1->(dbSkip())
Enddo

IF Len(aRecSel) > 0
cTexto := "Código | Loja | Nome Reduzido "+cEol
// "1234567890123456789012345678901234567890
// "CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol

For nX := 1 to Len(aRecSel)

cTexto += aRecSel[nX][2]+Space(1)+ "|"+Space(2) +
aRecSel[nX][3]+Space(3)+"|"
cTexto += Space(1)+SUBSTRING(aRecSel[nX][4],1,20)+Space(1)
cTexto += cEOL

Next nX

DEFINE MSDIALOG oDlg TITLE "Clientes Selecionados" From 000,000 TO 350,400
PIXEL
@ 005,005 GET oMemo VAR cTexto MEMO SIZE 150,150 OF oDlg PIXEL
oMemo:bRClicked := {||AllwaysTrue()}
DEFINE SBUTTON FROM 005,165 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg PIXEL
ACTIVATE MSDIALOG oDlg CENTER
LimpaMarca()
ENDIF

RETURN

- 232 -

ADVPL Compl et o


Ex empl o: Função Li mpaMar ca( ) – ut i l i zação das f u nções acessór i as da Mar k Br ow ( )


/*/
+-----------------------------------------------------------------------------
| Programa | LimpaMarca | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Função utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LimpaMarca()

Local nX := 0

For nX := 1 to Len(aRecSel)
SA1->(DbGoto(aRecSel[nX][1]))
RecLock("SA1",.F.)
SA1->A1_OK := SPACE(2)
MsUnLock()
Next nX

RETURN

























- 233 -

ADVPL Compl et o



23. Ar qui v os e Í ndi ces Tempor ár i os

23.1. Ut i l i zação de ar qui vos e índi ces t empor ár i os

Os arqui vos e índi ces t emporári os ou de t rabal ho, são geral ment e ut ilizados em ambi ent e
CodeBase, poi s, nest e ambi ent e não há os recursos de “ Joi n” e “ Order By” , como exi st e nos
bancos de dados rel aci onai s. Por est e mot ivo quando necessi t ar gerar uma i nformação
ordenada e consol i dada, ou sej a, de vári as t abel as, dever emos recorr er ao uso dos arqui vos e
dos índi ces t emporári os.


23.2. Funções par a mani pul ação de ar qui vos e índi ces t empor ár i os


23.2.1. Cr i aTr ab( )

A Cri aTrab( ) é uma funci onali dade que permi t e cri ar um arqui vo físi co ou ger ar um nome
al eat óri o.

E Si nt ax e: Cr i aTr ab( aCampo, l Cr i ar , cEx t )

E Par âmet r os

aCampo
Array com o nome, t i po, t amanho e deci mal do campo a ser cri ado no
arqui vo
l Cr i ar
Se verdadei ro ( . T.) cri ar o arqui vo, ou fal so ( .F. ) soment e r et orna um
nome al eat óri o
cEx t Qual ext ensão deverá ser cri ado o arqui vo de t r abal ho



Os arqui vos cri ados com a função CRI ATRAB( ) serão gerados no di ret óri o
especi fi cado como “ St ar t Pat h” , de acordo com o “ Root Pat h” confi gurado no .ini
da apli cação.









- 234 -

ADVPL Compl et o



23.2.2. dbUseAr ea( )

A dbUseAr ea( ) é uma funci onali dade que permi t e defi ni r um arqui vo de base de dados, com
uma área de t rabal ho disponível na apli cação.

E Si nt ax e: dbUseAr ea( l New Ar ea, cDr i v er , cName, cAl i as, l Sh ar ed, l ReadOn l y )

E Par âmet r os

l New Ar ea I ndi ca se e um novo al ias no conj unt o de al i as abert o
cDr i v er Dri ve ( RddName( ) ) do arqui vo - > DBFCDX / TOPCONN / DBFNTX
cName Nome físi co da t abel a que será usado
cAl i as Ali as que será usado enquant o est i ve abert o
l Sh ar ed A t abel a t erá acesso excl usi vo ou compart i l hado
l ReadOn l y Se verdadei ro a t abel a será soment e l ei t ura


23.2.3. I ndRegua( )

A I ndRegua( ) é uma funci onali dade que per mi t e cri ar índi ces t emporári os para o al i as
especi fi cado, podendo ou não t er um fi l t ro.

E Si nt ax e: I ndRegua( cAl i as, cNI ndex , cEx pr ess, x Or dem, cFor , cMens, l Show )

E Par âmet r os

cAl i as Ali as da t abel a onde ser á efet uada o índi ce/ fil t ro t empor ári o
cNI n dex Nome do arqui vo de t rabal ho ret ornado pel a função Cri aTrab( )
cEx pr ess Expressão utilizada na chave do novo índice
x Or dem Parâmet r o nul o
cFor Expressão utilizada para filtro
cMens Parâmet r o nul o
l Show Apresent ar a t el a de pr ogresso do índi ce/ fil t ro t emporári o




- 235 -

ADVPL Compl et o



Ex empl o 01 : Ger ação de ar qui v o e índi ce t empor ár i os


#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTrab | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilização de arquivos e índices temporários |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTrab()

Local aStru := {}
Local aArqTRB := {}
Local nI := 0
Local cIndTRB := ""
Local cNomArq := ""

AADD( aStru, { "PRODUTO" ,"B1_COD" } )
AADD( aStru, { "DESCRICAO" ,"B1_DESC" } )
AADD( aStru, { "GRUPO" ,"BM_GRUPO" } )
AADD( aStru, { "DESCGRUPO" ,"BM_DESC" } )
AADD( aStru, { "TIPO" ,"B1_TIPO" } )
AADD( aStru, { "DESCTIPO" ,"B1_DESC" } )
AADD( aStru, { "CC" ,"CTT_CC" } )
AADD( aStru, { "DESC_CC" ,"CTT_DESC" } )
AADD( aStru, { "SERIE" ,"D2_SERIE" } )
AADD( aStru, { "DOCTO" ,"D2_COD" } )
AADD( aStru, { "TIPONOTA" ,"D2_TP" } )
AADD( aStru, { "EMISSAO" ,"D2_EMISSAO" } )
AADD( aStru, { "CLIENTE" ,"D2_CLIENTE" } )
AADD( aStru, { "LOJA" ,"D2_LOJA" } )
AADD( aStru, { "NOME" ,"A1_NOME" } )
AADD( aStru, { "QTDE" ,"D2_QUANT" } )
AADD( aStru, { "UNIT" ,"D2_PRCVEN" } )
AADD( aStru, { "TOTAL" ,"D2_TOTAL" } )
AADD( aStru, { "ALIQICMS" ,"D2_PICM" } )
AADD( aStru, { "VALICMS" ,"D2_VALICM" } )
AADD( aStru, { "ALIQIPI" ,"D2_IPI" } )
AADD( aStru, { "VALIPI" ,"D2_VALIPI" } )
AADD( aStru, { "VALMERC" ,"D2_TOTAL" } )
AADD( aStru, { "TOTSEMICMS" ,"D2_TOTAL" } )
AADD( aStru, { "VALPIS" ,"D2_TOTAL" } )
AADD( aStru, { "LIQUIDO" ,"D2_TOTAL" } )
AADD( aStru, { "CUSTO" ,"D2_TOTAL" } )

dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len( aStru )
dbSeek( aStru[nI,2] )
AADD( aArqTRB, { aStru[nI,1], X3_TIPO, X3_TAMANHO, X3_DECIMAL } )
Next nI


- 236 -

ADVPL Compl et o


Exemplo (continuação):

// Índice que será criado
cIndTRB := "PRODUTO+DTOS(EMISSAO)"

cNomArq := CriaTrab( aArqTRB, .T. )

dbUseArea( .T., "DBFCDX", cNomArq, "TRB", .T. ,.T. )

IndRegua( "TRB", cNomArq, cIndTRB )
dbSetOrder(1)

// ( ... ) fazer o processamento necessário

dbSelectArea("TRB")
dbCloseArea()

If MsgYesNo("Apagar o arquivo gerado \system\"+cNomArq+".dbf ?",FunName())
Ferase(cNomArq+".dbf")
Ferase(cNomArq+OrdBagExt())
Endif

Return Nil


• Quando cri amos um arqui vo ou um índi ce t empor ári o ( t rabal ho) ,
ut ili zando a função I ndr egua, é obri gat óri o apagá- l os no fi nal do r ot i na.

• A ut ili zação de arqui vo ou índi ce t emporári o, deverá ser bem anali sada
a fi m de evi t ar l ent i dão no pr ocessament os da r ot i na.


• O arr ay aSt r u foi cri ado com base nos campos exi st ent es no si st ema,
ao i nvés de cri armos novas est rut uras dos campos, ut i lizamos as j á
exi st ent es no di ci onári os de dados ( SX3) .














- 237 -

ADVPL Compl et o


Ex empl o 02 : Ut i l i zando doi s ín di ces t empor ár i os com RDD DBFCDX


/*/
+-----------------------------------------------------------------------------
| Programa | IndTwoReg | Autor | MICHEL DANTAS | Data | |
+-----------------------------------------------------------------------------
| Desc. | Utilização de dois índices temporários com DBFCDX |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function IndTwoReg()

LOCAL nOrder := 0
LOCAL cArq1 := CriaTrab(NIL,.F.)
LOCAL cChave1 := "A1_FILIAL+A1_EST"
LOCAL cArq2 := CriaTrab(NIL,.F.)
LOCAL cChave2 := "A1_FILIAL+A1_NOME"

dbSelectArea("SA1")
IndRegua("SA1",cArq1,cChave1,,,"Selecionando Regs...")
IndRegua("SA1",cArq2,cChave2,,,"Selecionando Regs...")

nOrder := RetIndex("SA1")

dbSetIndex(cArq1+OrdBagExt())
dbSetIndex(cArq2+OrdBagExt())

Alert("Agora vai por estado")

dbsetOrder(nOrder+1)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

Alert("Agora vai por nome")

dbSetOrder(nOrder+2)
dbGoTop()
While !Eof()
Alert("Estado : " + SA1->A1_EST +" "+" Nome : " + SA1->A1_NOME)
dbSkip()
End

RetIndex("SA1")
Ferase(cArq1+OrdBagext())
Ferase(cArq2+OrdBagext())

Return



- 238 -

ADVPL Compl et o



24. Rel at ór i os não gr áf i cos

Os rel at óri os desenvol vi dos em ADVPL possuem um padrão de desenvol vi ment o que mai s
depende de l ayout e t i pos de parâmet r os do que qual quer out ro t i po de i nformação, vi st o que
at é o moment o percebemos que a li nguagem padrão da Mi crosi ga é muit o mai s compost a de
funções genéri cas do que de comandos.

Est e t i po de r el at óri o é caract eri zado por um format o de i mpressão t i po Post Scri pt ® , e permi t e
a geração de um arqui vo em format o t ext o ( .t xt ) , com uma ext ensão própri a da apli cação ERP
( .# # R) .

A est rut ura de um r el at óri o não gráfi co é baseada no uso da f unção Set Pri nt ( ) , compl ement ada
pel o uso de out r as funções acessóri as, as quai s est ão det al hadas no Gui a de Refer ênci a Rápi da
que acompanha est e mat eri al .

24.1.1. Est r ut ur a de r el at ór i os baseados na Set Pr i nt ( )

Nest e t ópi co ser á demonst rada a const rução de r el at óri o não gráfi co baseado no uso da função
Set Pri nt ( ) o qual at ende os format os de base de dados I SAM e Topconnect , por ém não
cont empl ando a t ecnol ogi a Prot heus Embedded SQL.

Est r ut u r a do pr ogr ama

Li nhas Pr ogr ama
1 Função pr i nci pal ;
2 Declar ação e at r ibuição de variáveis;
3 At ualização do ar quivo de pergunt as at r avés da função específica Cr iaSX1( ) ;
4 Definição as pergunt as at r avés da função Per gunt e( ) ;
5 Definição das ordens disponíveis par a impr essão do r elat ór io;
6 Chamada da função Set Pr int ;
7 At ualização das configur ações de impr essão com a função Set Default ( ) ;
8 Execução da r ot ina de impr essão at r avés da função Rpt St at us( )
9 Fi m da f unção pr i nci pal .

10 Função de pr ocessament o e i mpr essão do r el at ór i o
11 Declar ação e at r ibuição de variáveis;
12 Definição dos filt ros de impr essão, avaliando o bando de dados em uso pela aplicação;
13 At ualização da r égua de processament o com a quant idade de regist ros que ser á processada;
14 Est r ut ur a pr incipal de r epet ição par a impressão dos dados do r elat ór io;
15 Cont role da impr essão do cabeçalho ut ilizando a função Cabec( ) ;
16 I mpr essão dos t ot ais do relat ór io;
17 I mpr essão do rodapé da últ ima página do r elat ór io ut ilizando a função Roda( ) ;
18 Limpeza dos arquivos e índices t empor ár ios cr iados par a o processament o( ) ;
19 Tr at ament o da visualização do r elat ór io ( impr essão em disco) at r avés da função Our Spool( )
20 Tr at ament os adicionais ao r elat ór io, de acor do com necessidades específicas;
21 Liber ação do buffer de impr essão, sej a par a impr essor a, sej a par a limpeza do cont eúdo
visualizado em t ela, ut ilizando a função MS_FLUSH( )

22 Fi m da f unção de pr ocessament o e i mpr essão do r el at ór i o

23 Função de at ual i zação do ar qui v o de per gunt as
24 Declar ação e at r ibuição de variáveis;
25 Opção 01: Adição individual de cada pergunt a no SX1 ut ilizando a função PUTSX1( )

Cr iação de um ar r ay individual no for mat o ut ilizado pela PUTSX1( ) cont endo apenas
as infor mações da pergunt a que ser á adicionada no SX1.
25 Opção 02: Adição de um gr upo de per gunt as no SX1 ut ilizando a função AJUSTASX1( )

Cr iação de um arr ay no format o ut ilizado pela AJUSTASX1( ) cont endo t odas as
pergunt as que ser ão at ualizadas.

26 Fi m da f unção de at ual i zação do ar qui v o de per gunt as



- 239 -

ADVPL Compl et o


Função Pr i nci pal


//+-----------------------------------------------------------------+
//| Rotina | Inform | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para gerar relatório utilizando as funções |
//| | SetPrint() e SetDefault(). |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+-----------------------------------------------------------------+

User Function INFORM()
//+-------------------------
//| Declarações de variáveis
//+-------------------------

Local cDesc1 := "Este relatório irá imprimir informações do contas a pagar
conforme"
Local cDesc2 := "parâmetros informado. Será gerado um arquivo no diretório "
Local cDesc3 := "Spool - INFORM_????.XLS, onde ???? e o nome do usuário."

Private cString := "SE2"
Private Tamanho := "M"
Private aReturn := { "Zebrado",2,"Administração",2,2,1,"",1 }
Private wnrel := "INFORM"
Private NomeProg := "INFORM"
Private nLastKey := 0
Private Limite := 132
Private Titulo := "Título a Pagar - Ordem de "
Private cPerg := "INFORM"
Private nTipo := 0
Private cbCont := 0
Private cbTxt := "registro(s) lido(s)"
Private Li := 80
Private m_pag := 1
Private aOrd := {}
Private Cabec1 := "PREFIXO TITULO PARCELA TIP EMISSAO VENCTO VENCTO"
Private Cabec1 += "REAL VLR. ORIGINAL PAGO SALDO "
Private Cabec2 := ""
/*
+----------------------
| Parâmetros do aReturn
+----------------------
aReturn - Preenchido pelo SetPrint()
aReturn[1] - Reservado para formulário
aReturn[2] - Reservado para numero de vias
aReturn[3] - Destinatário
aReturn[4] - Formato 1=Paisagem 2=Retrato
aReturn[5] - Mídia 1-Disco 2=Impressora
aReturn[6] – Porta ou arquivo 1-Lpt1... 4-Com1...
aReturn[7] - Expressão do filtro
aReturn[8] - Ordem a ser selecionada
aReturn[9] [10] [n] - Campos a processar se houver
*/




Continuação:

- 240 -

ADVPL Compl et o



AADD( aOrd, "Fornecedor" )
AADD( aOrd, "Titulo" )
AADD( aOrd, "Emissão" )
AADD( aOrd, "Vencimento" )
AADD( aOrd, "Vencto. Real" )

//Parâmetros de perguntas para o relatório
//+-------------------------------------------------------------+
//| mv_par01 - Fornecedor de ? 999999 |
//| mv_par02 - Fornecedor ate ? 999999 |
//| mv_par03 - Tipo de ? XXX |
//| mv_par04 - Tipo ate ? XXX |
//| mv_par05 - Vencimento de ? 99/99/99 |
//| mv_par06 - Vencimento ate ? 99/99/99 |
//| mv_par07 - Aglut.Fornecedor ? Sim/Não |
//+-------------------------------------------------------------+
CriaSx1()

//+-------------------------------------------------
//| Disponibiliza para usuário digitar os parâmetros
//+-------------------------------------------------
Pergunte(cPerg,.F.)
//cPerg -> Nome do grupo de perguntas, .T. mostra a tela,;
// .F. somente carrega as variáveis

//+---------------------------------------------------
//| Solicita ao usuário a parametrização do relatório.
//+---------------------------------------------------
wnrel :=
SetPrint(cString,wnrel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,.F., ;
Tamanho,.F.,.F.)
//SetPrint(cAlias,cNome,cPerg,cDesc,cCnt1,cCnt2,cCnt3,lDic,aOrd,lCompres,;
//cSize,aFilter,lFiltro,lCrystal,cNameDrv,lNoAsk,lServer,cPortToPrint)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

//+------------------------------------------------------------------
//| Estabelece os padrões para impressão, conforme escolha do usuário
//+------------------------------------------------------------------
SetDefault(aReturn,cString)

//+-------------------------------------
//| Verificar se será reduzido ou normal
//+-------------------------------------
nTipo := IIF(aReturn[4] == 1, 15, 18)

//+--------------------
//| Se teclar ESC, sair
//+--------------------
If nLastKey == 27
Return
Endif

Continuação:

- 241 -

ADVPL Compl et o



//+-----------------------------------
//| Chama função que processa os dados
//+-----------------------------------
RptStatus({|lEnd| ImpRel(@lEnd) }, Titulo, "Processando e imprimindo dados,;
aguarde...", .T. )

Return

Função de pr ocessament o e i mpr essão


//+-----------------------------------------------------------------+
//| Rotina | ImpRel | Autor | Robson Luiz (rleg) | Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina de processamento e impressão. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+-----------------------------------------------------------------+

Static Function ImpRel(lEnd)

Local nIndice := 0
Local cArq := ""
Local cIndice := ""
Local cFiltro := ""
Local aCol := {}
Local cFornec := ""
Local nValor := 0
Local nPago := 0
Local nSaldo := 0
Local nT_Valor := 0
Local nT_Pago := 0
Local nT_Saldo := 0
Local cArqExcel := ""
Local cAliasImp
Local oExcelApp

Titulo += aOrd[aReturn[8]]

#IFNDEF TOP
cAliasImp := "SE2"

cFiltro := "E2_FILIAL == '"+xFilial("SE2")+"' "
cFiltro += ".And. E2_FORNECE >= '"+mv_par01+"' "
cFiltro += ".And. E2_FORNECE <= '"+mv_par02+"' "
cFiltro += ".And. E2_TIPO >= '"+mv_par03+"' "
cFiltro += ".And. E2_TIPO <= '"+mv_par04+"' "
cFiltro += ".And. Dtos(E2_VENCTO) >= '"+Dtos(mv_par05)+"' "
cFiltro += ".And. Dtos(E2_VENCTO) <= '"+Dtos(mv_par06)+"' "

If aReturn[8] == 1 //Fornecedor
cIndice := "E2_FORNECE+E2_LOJA+E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cIndice := "E2_NUM+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 3 //Emissao

Continuação:


- 242 -

ADVPL Compl et o


cIndice := "Dtos(E2_EMISSAO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cIndice := "Dtos(E2_VENCTO)+E2_FORNECE+E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cIndice := "Dtos(E2_VENCREA)+E2_FORNECE+E2_LOJA"
Endif

cArq := CriaTrab(NIL,.F.)
dbSelectArea(cAliasImp)
IndRegua(cAliasImp,cArq,cIndice,,cFiltro)
nIndice := RetIndex()
nIndice := nIndice + 1
dbSetIndex(cArq+OrdBagExt())
dbSetOrder(nIndice)
#ELSE
cAliasImp := GetNextAlias()

cQuery := "SELECT "
cQuery += "E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE, E2_LOJA,
E2_NOMFOR, "
cQuery += "E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR, E2_SALDO "
cQuery += "FROM "+RetSqlName("SE2")+" "
cQuery += "WHERE E2_FILIAL = '"+xFilial("SE2")+"' "
cQuery += "AND E2_FORNECE >= '"+mv_par01+"' "
cQuery += "AND E2_FORNECE <= '"+mv_par02+"' "
cQuery += "AND E2_TIPO >= '"+mv_par03+"' "
cQuery += "AND E2_TIPO <= '"+mv_par04+"' "
cQuery += "AND E2_VENCTO >= '"+Dtos(mv_par05)+"' "
cQuery += "AND E2_VENCTO <= '"+Dtos(mv_par06)+"' "
cQuery += "AND D_E_L_E_T_ <> '*' "
cQuery += "ORDER BY "

If aReturn[8] == 1 //Fornecedor
cQuery += "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cQuery += "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cQuery += "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cQuery += "E2_VENCTO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 5 //Vencimento Real
cQuery += "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

dbUseArea( .T., "TOPCONN", TcGenQry(,,cQuery), cAliasImp, .T., .F. )
dbSelectArea(cAliasImp)

/* Instrução SQL Embedded
----------------------
If aReturn[8] == 1 //Fornecedor
cOrder := "E2_FORNECE,E2_LOJA,E2_NUM"
Elseif aReturn[8] == 2 //Titulo
cOrder := "E2_NUM,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 3 //Emissao
cOrder := "E2_EMISSAO,E2_FORNECE,E2_LOJA"
Elseif aReturn[8] == 4 //Vencimento
cOrder := "E2_VENCTO,E2_FORNECE,E2_LOJA"


Continuação:

- 243 -

ADVPL Compl et o



Elseif aReturn[8] == 5 //Vencimento Real
cOrder := "E2_VENCREA,E2_FORNECE,E2_LOJA"
Endif

BeginSQL Alias cAliasImp
Column E2_EMISSAO As Date
Column E2_VENCTO As Date
Column E2_VENCREA As Date
Column E2_VALOR As Numeric(12)
Column E2_SALDO As Numeric(12)
%NoParser%

SELECT E2_PREFIXO, E2_NUM, E2_PARCELA, E2_TIPO, E2_FORNECE,
E2_LOJA, E2_NOMFOR, E2_EMISSAO, E2_VENCTO, E2_VENCREA, E2_VALOR,
E2_SALDO
FROM %Table:SE2
WHERE
E2_FILIAL = %xFilial% AND
E2_FORNECE BETWEEN %Exp:mv_par01% AND %Exp:mv_par02% AND
E2_TIPO BETWEEN%Exp:mv_par03% AND %Exp:mv_par04% AND
E2_VENCTO BETWEEN %Exp:mv_par05% AND %Exp:mv_par06% AND
%NotDel%
ORDER BY %Order:cOrder%
EndSQL
*/
#ENDIF

dbGoTop()
SetRegua(0)

//+--------------------
//| Coluna de impressão
//+--------------------
AADD( aCol, 004 ) //Prefixo
AADD( aCol, 012 ) //Titulo
AADD( aCol, 024 ) //Parcela
AADD( aCol, 031 ) //Tipo
AADD( aCol, 036 ) //Emissao
AADD( aCol, 046 ) //Vencimento
AADD( aCol, 058 ) //Vencimento Real
AADD( aCol, 070 ) //Valor Original
AADD( aCol, 090 ) //Pago
AADD( aCol, 110 ) //Saldo

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA

While !Eof() .And. !lEnd

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif







Continuação:

- 244 -

ADVPL Compl et o



@ Li, aCol[1] PSay "Cod/Loj/Nome: "+(cAliasImp)->E2_FORNECE+;
"-"+(cAliasImp)->E2_LOJA+" "+(cAliasImp)->E2_NOMFOR
Li ++

While !Eof() .And. !lEnd .And.;
(cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA == cFornec

IncRegua()

If Li > 55
Cabec(Titulo,Cabec1,Cabec2,NomeProg,Tamanho,nTipo)
Endif

If mv_par07 == 2
@ Li, aCol[1] PSay (cAliasImp)->E2_PREFIXO
@ Li, aCol[2] PSay (cAliasImp)->E2_NUM
@ Li, aCol[3] PSay (cAliasImp)->E2_PARCELA
@ Li, aCol[4] PSay (cAliasImp)->E2_TIPO
@ Li, aCol[5] PSay (cAliasImp)->E2_EMISSAO
@ Li, aCol[6] PSay (cAliasImp)->E2_VENCTO
@ Li, aCol[7] PSay (cAliasImp)->E2_VENCREA
@ Li, aCol[8] PSay (cAliasImp)->E2_VALOR ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay (cAliasImp)->E2_VALOR -;
(cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay (cAliasImp)->E2_SALDO ;
PICTURE "@E 99,999,999,999.99"
Li ++
Endif

nValor += (cAliasImp)->E2_VALOR
nPago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nSaldo += (cAliasImp)->E2_SALDO

nT_Valor += (cAliasImp)->E2_VALOR
nT_Pago += ((cAliasImp)->E2_VALOR-(cAliasImp)->E2_SALDO)
nT_Saldo += (cAliasImp)->E2_SALDO

dbSkip()
End

@ Li, 000 PSay Replicate("-",Limite)
Li ++
@ Li, aCol[1] PSay "TOTAL....."
@ Li, aCol[8] PSay nValor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nPago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nSaldo PICTURE "@E 99,999,999,999.99"
Li +=2

cFornec := (cAliasImp)->E2_FORNECE+(cAliasImp)->E2_LOJA
nValor := 0
nPago := 0
nSaldo := 0

End


Continuação:

- 245 -

ADVPL Compl et o



If lEnd
@ Li, aCol[1] PSay cCancel
Return
Endif

@ Li, 000 PSay Replicate("=",Limite)
Li ++
@ Li, aCol[1] PSay "TOTAL GERAL....."
@ Li, aCol[8] PSay nT_Valor PICTURE "@E 99,999,999,999.99"
@ Li, aCol[9] PSay nT_Pago PICTURE "@E 99,999,999,999.99"
@ Li, aCol[10] PSay nT_Saldo PICTURE "@E 99,999,999,999.99"

If Li <> 80
Roda(cbCont,cbTxt,Tamanho)
Endif

//+----------------------------------------------------------------------
//| Gera arquivo do tipo .DBF com extensão .XLS p/ usuário abrir no Excel
//+----------------------------------------------------------------------
cArqExcel := __RELDIR+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS"
Copy To &cArqExcel

#IFNDEF TOP
dbSelectArea(cAliasImp)
RetIndex(cAliasImp)
Set Filter To
#ELSE
dbSelectArea(cAliasImp)
dbCloseArea()
#ENDIF
dbSetOrder(1)
dbGoTop()

If aReturn[5] == 1
Set Printer TO
dbCommitAll()
OurSpool(wnrel)
EndIf

//+------------------------
//| Abrir planilha MS-Excel
//+------------------------
If mv_par08 == 1
__CopyFile(cArqExcel,"c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS")
If ! ApOleClient("MsExcel")
MsgAlert("MsExcel não instalado")
Return
Endif
oExcelApp := MsExcel():New()
oExcelApp:WorkBooks:Open( "c:\"+NomeProg+"_"+Substr(cUsuario,7,4)+".XLS" )
oExcelApp:SetVisible(.T.)
Endif

Ms_Flush()

Return

- 246 -

ADVPL Compl et o



Função par a ger ar o gr upo de par âmet r os no SX1


//+-----------------------------------------------------------------+
//| Rotina | CriaSX1 | Autor | Robson Luiz (rleg)| Data | 01.01.07 |
//+-----------------------------------------------------------------+
//| Descr. | Rotina para criar o grupo de parâmetros. |
//+-----------------------------------------------------------------+
//| Uso | Para treinamento e capacitação. |
//+-----------------------------------------------------------------+
Static Function CriaSx1()
Local aP := {}
Local i := 0
Local cSeq
Local cMvCh
Local cMvPar
Local aHelp := {}

/******
Parâmetros da função padrão
---------------------------
PutSX1(cGrupo,;cOrdem,;
cPergunt,cPerSpa,cPerEng,;
cVar,;
cTipo,;
nTamanho,;
nDecimal,;
nPresel,;
cGSC,;
cValid,;
cF3,;
cGrpSxg,;
cPyme,;
cVar01,;
cDef01,cDefSpa1,cDefEng1,;
cCnt01,;
cDef02,cDefSpa2,cDefEng2,;
cDef03,cDefSpa3,cDefEng3,;
cDef04,cDefSpa4,cDefEng4,;
cDef05,cDefSpa5,cDefEng5,;
aHelpPor,aHelpEng,aHelpSpa,;
cHelp)

Característica do vetor p/ utilização da função SX1
---------------------------------------------------
[n,1] --> texto da pergunta
[n,2] --> tipo do dado
[n,3] --> tamanho
[n,4] --> decimal
[n,5] --> objeto G=get ou C=choice
[n,6] --> validação
[n,7] --> F3
[n,8] --> definição 1
[n,9] --> definição 2
[n,10] -> definição 3
[n,11] -> definição 4
[n,12] -> definição 5
***/


- 247 -

ADVPL Compl et o


Continuação:

AADD(aP,{"Fornecedor de","C",6,0,"G","","SA2","" ,"" ,"","",""})
AADD(aP,{"Fornecedor ate","C",6,0,"G","(mv_par02>=mv_par01)","SA2",;
"" ,"" ,"","",""})
AADD(aP,{"Tipo de","C",3,0,"G","","05" ,"" ,"" ,"","",""})
AADD(aP,{"Tipo ate","C",3,0,"G","(mv_par04>=mv_par03)","05" ,"" ,;
"" ,"","",""})
AADD(aP,{"Vencimento de","D",8,0,"G","","" ,"" ,"" ,"","",""})
AADD(aP,{"Vencimento ate","D",8,0,"G","(mv_par06>=mv_par05)","" ,;
"" ,"" ,"","",""})
AADD(aP,{"Aglutinar pagto.de fornec.","N",1,0,"C","","",;
"Sim","Não","","",""})
AADD(aP,{"Abrir planilha MS-Excel" ,"N",1,0,"C","","",;
"Sim","Não","","",""})

AADD(aHelp,{"Informe o código do fornecedor.","inicial."})
AADD(aHelp,{"Informe o código do fornecedor.","final."})
AADD(aHelp,{"Tipo de título inicial."})
AADD(aHelp,{"Tipo de título final."})
AADD(aHelp,{"Digite a data do vencimento inicial."})
AADD(aHelp,{"Digite a data do vencimento final."})
AADD(aHelp,{"Aglutinar os títulos do mesmo forne-",;
"cedor totalizando seus valores."})
AADD(aHelp,{"Será gerada uma planilha para ",;
"MS-Excel, abrir esta planilha?"})

For i:=1 To Len(aP)
cSeq := StrZero(i,2,0)
cMvPar := "mv_par"+cSeq
cMvCh := "mv_ch"+IIF(i<=9,Chr(i+48),Chr(i+87))

PutSx1(cPerg,;
cSeq,;
aP[i,1],aP[i,1],aP[i,1],;
cMvCh,;
aP[i,2],;
aP[i,3],;
aP[i,4],;
0,;
aP[i,5],;
aP[i,6],;
aP[i,7],;
"",;
"",;
cMvPar,;
aP[i,8],aP[i,8],aP[i,8],;
"",;
aP[i,9],aP[i,9],aP[i,9],;
aP[i,10],aP[i,10],aP[i,10],;
aP[i,11],aP[i,11],aP[i,11],;
aP[i,12],aP[i,12],aP[i,12],;
aHelp[i],;
{},;
{},;
"")
Next i

Return


- 248 -

ADVPL Compl et o


25. Mani pul ação de ar qui vos I


25.1. Ger ação e l ei t ur a de ar qui vos em f or mat o t ex t o

Arqui vos do t i po t ext o ( t ambém conheci dos como padrão TXT) são ar qui vos com regi st ros de
t amanho vari ável . A indi cação do fi nal de cada regi st ro é repr esent ada por doi s byt es, “ 0D
0A” em hexadeci mal ou “ 13 10” em deci mal ou, ai nda, “ CR LF” para padrão ASCI I .

Apesar do t amanho dos regi st ros ser vari ável , a mai ori a dos si st emas gera est e t i po de arqui vo
com r egi st ros de t amanho fi xo, de acordo com um l ayout específi co que i ndi ca quai s
são os dados gravados.

Para i l ust rar est es procedi ment os, serão ger ados arqui vos t ext os, com duas famíli as de
funções:

1ª ) Famíl i a: nest a famíli a serão ut i lizadas as funções: FCr eat e( ) , FWri t e( ) , FCl ose( ) ,
FSeek( ) , FOpen( ) e FRead( ) .


2ª ) Famíl i a: nest a famíli a serão ut ili zadas as funções: FT_FUse( ) , FT_FGoTop( ) ,
FT_FLast Rec( ) , FT_FEof( ) , FT_FReadLn( ) , FT_FSki p( ) , FT_FGot o( ) , FT_FRecno( ) .




A di ferença ent re as duas famíli as, est á na l ei t ura do arqui vo t ext o.
Quando se t rat ar de arqui vo t ext o com t amanho fi xo das linhas, poder ão
ser ut ilizadas as duas famíli as para l ei t ura do arqui vo, por ém, quando se
t rat ar de arqui vo t ext o com t amanho vari ável das li nhas, soment e
poderá ser ut ili za a segunda famíli a, repr esent ada pel as funções:
FT_FUse( ) , FT_FGoTo( ) , FT_FRecno( ) , FT_FGoTop( ) , FT_FLast Rec( ) ,
FT_FEof( ) , FT_FReadLn( ) e FT_FSki p( ) .














- 249 -

ADVPL Compl et o



1ª . Famíl i a de f unções de gr av ação e l ei t u r a de ar qui v os t ex t o

Ex empl o: Ger ação de ar qui v o TXT, ut i l i zan do a pr i mei r a f amíl i a de f unções


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | GeraTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Gera o arquivo TXT, a partir do Cadastro de Clientes |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GeraTXT()

//+--------------------------------+
//| Declaração de Variáveis |
//+--------------------------------+
Local oGeraTxt
Private cPerg := "EXPSA1"
Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)
dbSelectArea(cAlias)
dbSetOrder(1)

//+-----------------------------------+
//| Montagem da tela de processamento.|
//+-----------------------------------+

DEFINE MSDIALOG oGeraTxt TITLE OemToAnsi("Geração de Arquivo Texto") ;
FROM 000,000 TO 200,400 PIXEL

@ 005,005 TO 095,195 OF oGeraTxt PIXEL
@ 010,020 Say " Este programa ira gerar um arquivo texto, conforme os parame- ";
OF oGeraTxt PIXEL
@ 018,020 Say " tros definidos pelo usuário, com os registros do arquivo de ";
OF oGeraTxt PIXEL
@ 026,020 Say " SA1 " OF oGeraTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;
ACTION (OkGeraTxt(),oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;
ACTION (oGeraTxt:End()) ENABLE OF oGeraTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;
ACTION (Pergunte(cPerg,.T.)) ENABLE OF oGeraTxt

ACTIVATE DIALOG oGeraTxt CENTERED

Return Nil


- 250 -

ADVPL Compl et o


Exemplo (continuação):

/*/
+-----------------------------------------------------------------------------
| Função | OKGERATXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função chamada pelo botão OK na tela inicial de processamento. |
| | Executa a geração do arquivo texto. |
+-----------------------------------------------------------------------------
/*/

Static Function OkGeraTxt

//+-----------------------------------------------------------------------------
//| Cria o arquivo texto
//+-----------------------------------------------------------------------------
Private cArqTxt := "\SYSTEM\EXPSA1.TXT"
Private nHdl := fCreate(cArqTxt)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" não pode ser executado! Verifique os
parâmetros.","Atenção!")
Return
Endif


// Inicializa a régua de processamento
Processa({|| RunCont() },"Processando...")

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função auxiliar chamada pela PROCESSA. A função PROCESSA |
| | monta a janela com a régua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local cLin

dbSelectArea(cAlias)
dbGoTop()
ProcRegua(RecCount()) // Numero de registros a processar

While (cAlias)->(!EOF())
//Incrementa a régua
IncProc()

cLin := (cAlias)->A1_FILIAL
cLin += (cAlias)->A1_COD
cLin += (cAlias)->A1_LOJA
cLin += (cAlias)->A1_NREDUZ
cLin += STRZERO((cAlias)->A1_MCOMPRA*100,16) // 14,2
cLin += DTOS((cAlias)->A1_ULTCOM)//AAAAMMDD
cLin += CRLF


- 251 -

ADVPL Compl et o



Exemplo (continuação):

//+-------------------------------------------------------------------+
//| Gravação no arquivo texto. Testa por erros durante a gravação da |
//| linha montada. |
//+-------------------------------------------------------------------+

If fWrite(nHdl,cLin,Len(cLin)) != Len(cLin)
If !MsgAlert("Ocorreu um erro na gravação do arquivo."+;
"Continua?","Atenção!")
Exit
Endif
Endif

(cAlias)->(dbSkip())
EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na função
anterior
fClose(nHdl)

Return Nil


Not e que para a geração do arqui vo TXT foram ut ili zadas, basi cament e, as funções
FCreat e, FWri t e e FCl ose que, respect i vament e, gera o arqui vo, adi ci ona dados e fecha
o arqui vo. No exempl o, o format o é est abel eci do pel a concat enação dos dados na
vari ável cLi n a qual é ut ili zada na gravação dos dados. Para a l ei t ura de dados TXT serão
ut ili zada as funções FOpen e FRead.

Ex empl o: Lei t u r a de ar qu i v o TXT, ut i l i zando a pr i mei r a f amíl i a de f u nções


#Include "protheus.ch"

/*/
+-----------------------------------------------------------------------
| Programa | LeTXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------
| Descrição | Leitura de arquivo TXT |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
User Function LeTXT()

//+-------------------------------------------------------------------+
//| Declaração de Variáveis |
//+-------------------------------------------------------------------+

Local cPerg := "IMPSA1"
Local oLeTxt

Private cAlias := "SA1"

//CriaSx1(cPerg)
//Pergunte(cPerg,.F.)


- 252 -

ADVPL Compl et o



Exemplo (continuação):

dbSelectArea(cAlias)
dbSetOrder(1)

//+-------------------------------------------------------------------+
// Montagem da tela de processamento |
//+-------------------------------------------------------------------+

DEFINE MSDIALOG oLeTxt TITLE OemToAnsi("Leitura de Arquivo Texto");
FROM 000,000 TO 200,400 PIXEL
@ 005,005 TO 095,195 OF oLeTxt PIXEL
@ 10,020 Say " Este programa ira ler o conteúdo de um arquivo texto, conforme";
OF oLeTxt PIXEL
@ 18,020 Say " os parâmetros definidos pelo usuário, com os registros do
arquivo";
OF oLeTxt PIXEL
@ 26,020 Say " SA1" OF oLeTxt PIXEL

DEFINE SBUTTON FROM 070, 030 TYPE 1 ;
ACTION (OkLeTxt(),oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 070 TYPE 2 ;
ACTION (oLeTxt:End()) ENABLE OF oLeTxt

DEFINE SBUTTON FROM 070, 110 TYPE 5 ;
ACTION (Pergunte(cPerg,.T.)) ENABLE OF oLeTxt
ACTIVATE DIALOG oLeTxt CENTERED

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | OKLETXT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função chamada pelo botão OK na tela inicial de processamento |
| | Executa a leitura do arquivo texto |
+-----------------------------------------------------------------------------
/*/

Static Function OkLeTxt()

//+-------------------------------------------------------------------+
//| Abertura do arquivo texto |
//+-------------------------------------------------------------------+

Private cArqTxt := "\SYSTEM\EXPSA1.TXT"
Private nHdl := fOpen(cArqTxt,68)

If nHdl == -1
MsgAlert("O arquivo de nome "+cArqTxt+" não pode ser aberto! Verifique os
parâmetros.","Atenção!")
Return
Endif

// Inicializa a régua de processamento
Processa({|| RunCont() },"Processando...")
Return Nil


- 253 -

ADVPL Compl et o


Exemplo (continuação):

/*/
+-----------------------------------------------------------------------------
| Função | RUNCONT | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função auxiliar chamada pela PROCESSA. A função PROCESSA |
| | monta a janela com a régua de processamento. |
+-----------------------------------------------------------------------------
/*/

Static Function RunCont

Local nTamFile := 0
Local nTamLin := 56
Local cBuffer := ""
Local nBtLidos := 0
Local cFilSA1 := ""
Local cCodSA1 := ""
Local cLojaSA1 := ""

//1234567890123456789012345678901234567890123456789012345678901234567890
//00000000010000000002000000000300000000040000000005000000000600000000070
//FFCCCCCCLLNNNNNNNNNNNNNNNNNNNNVVVVVVVVVVVVVVVVDDDDDDDD
//A1_FILIAL - 01, 02 - TAM: 02
//A1_COD - 03, 08 - TAM: 06
//A1_LOJA - 09, 10 - TAM: 02
//A1_NREDUZ - 11, 30 - TAM: 20
//A1_MCOMPRA - 31, 46 - TAM: 14,2
//A1_ULTCOM - 47, 54 - TAM: 08

nTamFile := fSeek(nHdl,0,2)
fSeek(nHdl,0,0)
cBuffer := Space(nTamLin) // Variável para criação da linha do registro para
leitura

ProcRegua(nTamFile) // Numero de registros a processar
While nBtLidos < nTamFile

//Incrementa a régua
IncProc()

// Leitura da primeira linha do arquivo texto
nBtLidos += fRead(nHdl,@cBuffer,nTamLin)

cFilSA1 := Substr(cBuffer,01,02) //- 01, 02 - TAM: 02
cCodSA1 := Substr(cBuffer,03,06) //- 03, 08 - TAM: 06
cLojaSA1 := Substr(cBuffer,09,02) //- 09, 10 - TAM: 02

While .T.
IF dbSeek(cFilSA1+cCodSA1+cLojaSA1)
cCodSA1 := SOMA1(cCodSA1)
Loop
Else
Exit
Endif
Enddo


- 254 -

ADVPL Compl et o


Exemplo (continuação):

dbSelectArea(cAlias)
RecLock(cAlias,.T.)
(cAlias)->A1_FILIAL := cFilSA1 //- 01, 02 - TAM: 02
(cAlias)->A1_COD := cCodSA1 //- 03, 08 - TAM: 06
(cAlias)->A1_LOJA := cLojaSA1 //- 09, 10 - TAM: 02
(cAlias)->A1_NREDUZ := Substr(cBuffer,11,20)
//- 11, 30 - TAM: 20
(cAlias)->A1_MCOMPRA := Val(Substr(cBuffer,31,16))/100
//- 31, 46 - TAM: 14,2
(cAlias)->A1_ULTCOM := STOD(Substr(cBuffer,47,08))
//- 47, 54 - TAM: 08
MSUnLock()

EndDo

// O arquivo texto deve ser fechado, bem como o dialogo criado na função
anterior.
fClose(nHdl)

Return Nil


2ª . Famíl i a de f unções de gr av ação e l ei t u r a de ar qui v os t ex t o


Ex empl o: Lei t u r a de ar qu i v o TXT, ut i l i zando a segu nda f amíl i a de f u nções


#Include "Protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Programa | LeArqTXT | Autor | Robson Luiz | Data | |
+-----------------------------------------------------------------------------
| Descrição | Leitura de arquivo TXT |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function LeArqTxt()

Private nOpc := 0
Private cCadastro := "Ler arquivo texto"
Private aSay := {}
Private aButton := {}

AADD( aSay, "O objetivo desta rotina e efetuar a leitura em um arquivo texto" )

AADD( aButton, { 1,.T.,{|| nOpc := 1,FechaBatch()}})
AADD( aButton, { 2,.T.,{|| FechaBatch() }} )

FormBatch( cCadastro, aSay, aButton )

If nOpc == 1
Processa( {|| Import() }, "Processando..." )
Endif
Return Nil

- 255 -

ADVPL Compl et o


Exemplo (continuação):

//+-------------------------------------------
//| Função - Import()
//+-------------------------------------------
Static Function Import()

Local cBuffer := ""
Local cFileOpen := ""
Local cTitulo1 := "Selecione o arquivo"
Local cExtens := "Arquivo TXT | *.txt"

/***
* _________________________________________________________
* cGetFile(<ExpC1>,<ExpC2>,<ExpN1>,<ExpC3>,<ExpL1>,<ExpN2>)
* ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
* <ExpC1> - Expressão de filtro
* <ExpC2> - Titulo da janela
* <ExpN1> - Numero de mascara default 1 para *.Exe
* <ExpC3> - Diretório inicial se necessário
* <ExpL1> - .F. botão salvar - .T. botão abrir
* <ExpN2> - Mascara de bits para escolher as opções de visualização do objeto
* (prconst.ch)
*/
cFileOpen := cGetFile(cExtens,cTitulo1,,cMainPath,.T.)

If !File(cFileOpen)
MsgAlert("Arquivo texto: "+cFileOpen+" não localizado",cCadastro)
Return
Endif

FT_FUSE(cFileOpen) //ABRIR
FT_FGOTOP() //PONTO NO TOPO
ProcRegua(FT_FLASTREC()) //QTOS REGISTROS LER

While !FT_FEOF() //FACA ENQUANTO NAO FOR FIM DE ARQUIVO
IncProc()

// Capturar dados
cBuffer := FT_FREADLN() //LENDO LINHA

cMsg := "Filial: " +SubStr(cBuffer,01,02) + Chr(13)+Chr(10)
cMsg += "Código: " +SubStr(cBuffer,03,06) + Chr(13)+Chr(10)
cMsg += "Loja: " +SubStr(cBuffer,09,02) + Chr(13)+Chr(10)
cMsg += "Nome fantasia: " +SubStr(cBuffer,11,15) + Chr(13)+Chr(10)
cMsg += "Valor: " +SubStr(cBuffer,26,14) + Chr(13)+Chr(10)
cMsg += "Data: " +SubStr(cBuffer,40,08) + Chr(13)+Chr(10)

MsgInfo(cMsg)

FT_FSKIP() //próximo registro no arquivo txt
EndDo

FT_FUSE() //fecha o arquivo txt
MsgInfo("Processo finalizada")
Return Nil


- 256 -

ADVPL Compl et o



26. Of i ci na de pr ogr amação I

26.1. I nt er f aces com si nt ax e cl ássi ca

A si nt axe convenci onal para defi ni ção de component es vi suai s da linguagem ADVPL depende
di ret ament e no i ncl ude especi fi cado no cabeçal ho do font e. Os doi s i ncl udes di sponívei s para o
ambi ent e ADVPL Pr ot heus são:

E RWMAKE. CH: permi t e a ut ili zação da si nt axe CLI PPER na defi ni ção dos component es
vi suai s.

E PROTHEUS.CH: permi t e a ut ili zação da si nt axe ADVPL convenci onal , a qual é um
apri morament o da si nt axe CLI PPER, com a inclusão de novos at ri but os para os
component es vi suai s di sponi bilizados no ERP Pr ot heus.

Para il ust rar a di ferença na ut ilização dest es doi s i ncl udes, segue abai xo as di ferent es
defi ni ções para o component es Di al og e MsDi al og:

Exemplo 01 – Include Rwmake.ch

#include “rwmake.ch”

@ 0,0 TO 400,600 DIALOG oDlg TITLE "Janela em sintaxe Clipper"
ACTIVATE DIALOG oDlg CENTERED


Exemplo 02 – Include Protheus.ch

#include “protheus.ch”

DEFINE MSDIALOG oDlg TITLE "Janela em sintaxe ADVPL "FROM 000,000 TO 400,600
PIXEL
ACTIVATE MSDIALOG oDlg CENTERED



Ambas as si nt axes produzi rão o mesmo efei t o quando compi ladas e
execut adas no ambi ent e Pr ot heus, mas deve ser ut ili zada sempr e a si nt axe
ADVPL at ravés do uso do i ncl ude PROTHEUS.CH

Os component es da i nt erface vi sual que ser ão t rat ados nest e t ópico, ut ili zando a si nt axe
cl ássi ca da li nguagem ADVPL são:

´ BUTTON( )
´ CHECKBOX( )
´ COMBOBOX( )
´ FOLDER( )
´ MSDI ALOG( )
´ MSGET( )

- 257 -

ADVPL Compl et o


´ RADI O( )
´ SAY( )
´ SBUTTON( )

BUTTON( )

Si nt ax e
@ nLi n ha, nCol un a BUTTON cTex t o SI ZE nLar gur a,n Al t ur a UNI DADE
OF oObj et oRef ACTI ON AÇÃO
Descr i ção
Defi ne o component e vi sual But t on, o qual permi t e a i ncl usão de bot ões de
operação na t el a da int er face, os quai s ser ão vi suali zados soment e com um
t ext o si mpl es para sua i dent i fi cação.

CHECKBOX( )

Si nt ax e
@ nLi n ha, nCol un a CHECKBOX oCheck Box VAR VARI AVEL PROMPT
cTex t o WHEN WHEN UNI DADE OF oObj et oRef SI ZE nLar gu r a, nAl t ur a
MESSAGE cMensagem
Descr i ção
Defi ne o component e vi sual CheckBox, o qual permi t e a ut ili zação da uma
marca para habi li t ar ou não uma opção escol hi da, sendo est a marca
acompanhada de um t ext o expl i cat i vo. Di fere do Radi oMenu poi s cada
el ement o do check é úni co, mas o Radi o per mi t e a ut ili zação de uma li st a
j unt o com um cont r ol e de sel eção.

COMBOBOX( )

Si nt ax e
@ nLi n ha, nCol una COMBOBOX VARI AVEL I TEMS AI TENS SI ZE
nLar gu r a, nAl t u r a UNI DADE OF oObj et oRef
Descr i ção
Defi ne o component e vi sual ComboBox, o qual permi t e sel eção de um i t em
dent ro de uma li st a de opções de t ext os si mpl es no format o de um vet or.

FOLDER( )

Si nt ax e
@ nLi n ha, nCol un a FOLDER oFol der OF oObj et oRef PROMPT
&cTex t o1,…,&cTex t oX PI XEL SI ZE nLar gur a,n Al t ur a
Descr i ção
Defi ne o component e vi sual Folder, o qual permi t e a i ncl usão de di ver sos
Di al ogs dent ro de uma mesma i nt erface vi sual . Um Fol der pode ser
ent endi do como um array de Di al ogs, aonde cada pai nel recebe seus
component es e t em seus at ri but os defi ni dos i ndependent ement e dos demai s.

MSDI ALOG( )

Si nt ax e
DEFI NE MSDI ALOG oObj et oDLG TI TLE cTi t ul o FROM nLi nI n i ,n Col I n i
TO nLi Fi m,n Col Fi m OF oObj et oRef UNI DADE
Descr i ção
Defi ne o component e MSDI ALOG( ) , o qual é ut ilizado como base para os
demai s component es da i nt erface vi sual , poi s um component e MSDI ALOG( )
é uma j anel a da apli cação.


- 258 -

ADVPL Compl et o



MSGET( )

Si nt ax e
@ nLi nh a, nCol u na MSGET VARI AVEL SI ZE nLar gu r a,n Al t ur a
UNI DADE OF oObj et oRef F3 cF3 VALI D VALI D WHEN WHEN PI CTURE
cPi ct ur e
Descr i ção
Defi ne o component e vi sual MSGET, o qual é ut ili zado para capt ura de
i nformações di gi t ávei s na t el a da i nt erface.


RADI O( )

Si nt ax e
@ nLi n ha, nCol un a RADI O oRadi o VAR nRadi o 3D SI ZE
nLar gu r a, nAl t u r a < I TEMS PROMPT> cI t em1,cI t em2,...,cI t emX OF
oObj et oRef UNI DADE ON CHANGE CHANGE ON CLI CK CLI CK
Descr i ção
Defi ne o component e vi sual Radi o, t ambém conheci do como Radi oMenu, o
qual é sel eção de uma opção ou de múl t i pl as opções at ravés de uma mar ca
para os i t ens exi bi dos de uma li st a. Di fere do component e CheckBox, poi s
cada el ement o de check é sempr e úni co, e o Radi o pode cont er um ou mai s
el ement os.

SAY( )

Si nt ax e
@ nLi n ha, nCol un a SAY cTex t o SI ZE nLar gur a,n Al t u r a UNI DADE OF
oObj et oRef
Descr i ção
Defi ne o component e vi sual SAY, o qual é ut ilizado para exi bi ção de t ext os
em uma t el a de i nt erface.

SBUTTON( )

Si nt ax e
DEFI NE SBUTTON FROM nLi nh a, nCol u na TYPE N ACTI ON AÇÃO
STATUS OF oObj et oRef
Descr i ção
Defi ne o component e vi sual SBut t on, o qual permi t e a i ncl usão de bot ões de
operação na t el a da i nt erface, os quai s serão vi suali zados dependendo da
i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es para sua
i dent i fi cação, ou com uma i magem ( Bi t Map) pré- defi ni do.


- 259 -

ADVPL Compl et o



26.2. Réguas de pr ocessament o

Os i ndi cadores de progr esso ou r éguas de processament o di sponívei s na li nguagem ADVPL que
serão abordados nest e mat eri al são:

´ RPTSTATUS( )
´ PROCESSA( )
´ MSNEWPROCESS( )
´ MSAGUARDE( )
´ MSGRUN( )

26.2.1. Rpt St at us( )

Régua de pr ocessament o si mpl es, com apenas um i ndi cador de progresso, ut i lizada no
processament o de rel at óri os do padrão Set Pri nt ( ) .

E Si nt ax e: Rpt St at u s( bAcao, cMensagem)

E Ret or no: Ni l

E Par âmet r os:

bAcao
Bl oco de códi go que especi fi ca a ação que será execut ada com
o acompanhament o da régua de processament o.
cMensagem
Mensagem que será exibi da na régua de processament o
durant e a execução.
Apar ênci a







- 260 -

ADVPL Compl et o



Ex empl o: Função RPTSt at u s( ) e acessór i as


/*/
+---------------------------------------------------------------------------
| Função | GRPTSTATUS | Autor | ROBSON LUIZ | Data | |
+---------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções RPTSTATUS() |
| | SETREGUA() E INCREGUA() |
+---------------------------------------------------------------------------
| Uso | Curso ADVPL |
+---------------------------------------------------------------------------
/*/

User Function GRptStatus()
Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funções"
Local cDesc1 := "Este programa exemplifica a utilização da função Processa() em
conjunto"
Local cDesc2 := "com as funções de incremento ProcRegua() e IncProc()"

Private cPerg := "RPTSTA"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )
AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

RptStatus( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil


- 261 -

ADVPL Compl et o


Ex empl o: Funções acessór i as da RPTSt at u s( )


/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento executada através da RPTSTATUS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/


Static Function RunProc(lEnd)
Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
nCnt++
dbSkip()
End

dbSeek(xFilial("SX5")+mv_par01,.T.)

SetRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncRegua()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
dbSkip()
End
Return .T.


SETREGUA( )

A função Set Regua( ) é ut ili zada para defi ni r o val or máxi mo da régua de progr essão cri ada
at ravés da função Rpt St at us( ) .

E Si nt ax e: Set Regua( n Max Pr oc)

E Par âmet r os:

nMax Pr oc Vari ável que i ndi ca o val or máxi mo de pr ocessament o ( passos) que serão
i ndi cados pel a régua.

E Ret or no:

Nen hum .



- 262 -

ADVPL Compl et o


Ex empl o:

...

dbSel ect Area( "SA1")
dbGoTop( )
Set Regua( Last Rec( ) )
Whil e ! Eof( )
I ncRegua( )
I f Li > 60
...


I NCREGUA( )

A função I ncRegua( ) é ut ili zada para i ncrement ar val or na régua de progressão cri ada at ravés
da função Rpt St at us( )

E Si nt ax e: I ncRegu a( cMensagem)

E Par âmet r os:

cMensagem Mensagem que será exi bi da e at uali zada na régua de processament o a cada
execução da função I ncRegua( ) , sendo que a t axa de at uali zação da
i nt erface é cont r ol ada pel o Bi nári o.

E Ret or no:

Nen hum .

Ex empl o:

...

dbSel ect Area( "SA1")
dbGoTop( )
Set Regua( Last Rec( ) )
Whil e ! Eof( )
I ncRegua( “ Aval i ando cli ent e: ” + SA1- > A1_COD)
I f Li > 60
...




- 263 -

ADVPL Compl et o



26.2.2. Pr ocessa( )

Régua de pr ocessament o si mpl es, com apenas um i ndi cador de progresso, ut i lizada no
processament o de rot i nas.

E Si nt ax e: Pr ocessa( bAcao, cMen sagem)

E Ret or no: Ni l

E Par âmet r os:

bAcao
Bl oco de códi go que especi fi ca a ação que será execut ada com
o acompanhament o da régua de processament o.
cMensagem
Mensagem que será exibi da na régua de processament o
durant e a execução.
Apar ênci a




Ex empl o: Função PROCESSA( ) e acessór i as


/*/
+-----------------------------------------------------------------------------
| Função | GPROCES1 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções PROCESSA() |
| | PROCREGUA() E INCPROC() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces1()
Local aSay := {}
Local aButton := {}
Local nOpc := 0
Local cTitulo := "Exemplo de Funções"
Local cDesc1 := "Este programa exemplifica a utilização da função Processa()"
Local cDesc2 := " em conjunto com as funções de incremento ProcRegua() e"
Local cDesc3 := " IncProc()"



- 264 -

ADVPL Compl et o



Exemplo (continuação):

Private cPerg := "PROCES"

CriaSX1()
Pergunte(cPerg,.F.)

AADD( aSay, cDesc1 )
AADD( aSay, cDesc2 )

AADD( aButton, { 5, .T., {|| Pergunte(cPerg,.T. ) }} )
AADD( aButton, { 1, .T., {|| nOpc := 1, FechaBatch() }} )
AADD( aButton, { 2, .T., {|| FechaBatch() }} )

FormBatch( cTitulo, aSay, aButton )

If nOpc <> 1
Return Nil
Endif

Processa( {|lEnd| RunProc(@lEnd)}, "Aguarde...","Executando rotina.", .T. )

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento executada através da PROCRSSA() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd)
Local nCnt := 0

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5")+mv_par01,.T.)

dbEval( {|x| nCnt++ },,{||X5_FILIAL==xFilial("SX5").And.X5_TABELA<=mv_par02})

dbSeek(xFilial("SX5")+mv_par01,.T.)

ProcRegua(nCnt)
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA <= mv_par02
IncProc("Processando tabela: "+SX5->X5_CHAVE)
If lEnd
MsgInfo(cCancela,"Fim")
Exit
Endif
dbSkip()
End
Return .T.



- 265 -

ADVPL Compl et o



SETPROC( )

A função Set Pr oc( ) é ut ili zada para defi ni r o val or máxi mo da régua de progr essão cri ada
at ravés da função Pr ocessa( ) .

E Si nt ax e: Pr ocessa( nMax Pr oc)

E Par âmet r os:

nMax Pr oc Vari ável que i ndi ca o val or máxi mo de pr ocessament o ( passos) que serão
i ndi cados pel a régua.

E Ret or no:

Nen hum .

Ex empl o:
...
dbSel ect Area( "SA1")
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof( )
I ncPr oc( )
I f Li > 60
...

I NCPROC( )

A função I ncProc( ) é ut ili zada para i ncrement ar val or na régua de progr essão cri ada at ravés da
função Pr ocessa( )

E Si nt ax e: I ncPr oc( cMensagem)

E Par âmet r os:

cMensagem Mensagem que será exi bi da e at uali zada na régua de processament o a cada
execução da função I ncProc( ) , sendo que a t axa de at ual ização da i nt erface é
cont r ol ada pel o Bi nári o.

E Ret or no:

Nen hum .

Ex empl o:
...
dbSel ect Area( "SA1")
dbGoTop( )
Set Pr oc( Last Rec( ) )
Whil e ! Eof( )
I ncPr oc( “ Avali ando cli ent e: ” + SA1- > A1_COD)
I f Li > 60
...


- 266 -

ADVPL Compl et o




26.2.3. MsNew Pr ocess( ) .

Régua de pr ocessament o dupl a, possui ndo doi s i ndi cadores de pr ogr esso i ndependent es,
ut ili zada no processament o de rot i nas.

E Si nt ax e: MsNew Pr ocess( ) : New ( bAcao, cMensagem)

E Ret or no: oPr ocess ¬ obj et o do t i po MsNew Pr ocess( )

E Par âmet r os:

bAcao
Bl oco de códi go que especi fi ca a ação que será execut ada com
o acompanhament o da régua de processament o.
cMensagem
Mensagem que será exibi da na régua de processament o
durant e a execução.
Apar ênci a




E Mét odos:

Act i v at e( ) I ni ci a a execução do obj et o MsNewPr ocess i nst anci ado.
Set Regua1( ) Defi ne a quant i dade de i nformações que serão demonst radas
pel o i ndi cador de pr ogr esso superi or.
Par âmet r o: nMaxPr oc
I ncRegu a1( ) I ncrement a em uma uni dade o i ndi cador de pr ogresso
superi or , o qual i rá demonst rar a evol ução do processament o
de acordo com a quant idade defi ni da pel o mét odo
Set Regua1( ) .
Par âmet r o: cMensagem
Set Regua2( ) Defi ne a quant i dade de i nformações que serão demonst radas
pel o i ndi cador de pr ogr esso i nferi or.
Par âmet r o: nMaxPr oc
I ncRegu a2( ) I ncrement a em uma uni dade o i ndi cador de pr ogresso i nferi or,
o qual i rá demonst rar a evol ução do processament o de acordo
com a quant i dade defi nida pel o mét odo Set Regua2( ) .
Par âmet r o: cMensagem


- 267 -

ADVPL Compl et o



Ex empl o: Obj et o MsNew Pr ocess( ) e mét odos acessór i os


/*/
+-----------------------------------------------------------------------------
| Função | GPROCES2 | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsNewProcess() |
| | e seus métodos IncReguaX() e SetReguaX() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GProces2()
Private oProcess := NIL

oProcess := MsNewProcess():New({|lEnd| RunProc(lEnd,oProcess)};
"Processando","Lendo...",.T.)
oProcess:Activate()

Return Nil

/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento executada através da MsNewProcess() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

Static Function RunProc(lEnd,oObj)
Local i := 0
Local aTabela := {}
Local nCnt := 0

aTabela := {{"00",0},{"13",0},{"35",0},{"T3",0}}

dbSelectArea("SX5")
cFilialSX5 := xFilial("SX5")
dbSetOrder(1)
For i:=1 To Len(aTabela)
dbSeek(cFilialSX5+aTabela[i,1])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
If lEnd
Exit
Endif
nCnt++
dbSkip()
End
aTabela[i,2] := nCnt
nCnt := 0
Next i

- 268 -

ADVPL Compl et o



Exemplo (continuação):

oObj:SetRegua1(Len(aTabela))
For i:=1 To Len(aTabela)
If lEnd
Exit
Endif
oObj:IncRegua1("Lendo Tabela: "+aTabela[i,1])
dbSelectArea("SX5")
dbSeek(cFilialSX5+aTabela[i,1])
oObj:SetRegua2(aTabela[i,2])
While !Eof() .And. X5_FILIAL+X5_TABELA == cFilialSX5+aTabela[i,1]
oObj:IncRegua2("Lendo chave: "+X5_CHAVE)
If lEnd
Exit
Endif
dbSkip()
End
Next i
Return



26.2.4. MsAguar de( ) .

I ndi cador de processament o sem i ncrement o.

E Si nt ax e: Pr ocessa( bAcao, cMen sagem, cTi t ul o)

E Ret or no: Ni l

E Par âmet r os:

bAcao
Bl oco de códi go que especi fi ca a ação que será execut ada com
o acompanhament o da régua de processament o.
cMensagem
Mensagem que será exibi da na régua de processament o
durant e a execução.
cTi t ul o Tít ul o da j anel a da régua de processament o.
Apar ênci a





- 269 -

ADVPL Compl et o



Ex empl o: MSAguar de( )


/*/
+-----------------------------------------------------------------------------
| Função | GMSAGUARDE | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções MSAGUARDE() |
| | e MSPROCTXT() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsAguarde()
PRIVATE lEnd := .F.

MsAguarde({|lEnd| RunProc(@lEnd)},"Aguarde...","Processando Clientes",.T.)

RETURN

/*/
+-----------------------------------------------------------------------------
| Função | RUNPROC | Autor | ROBSON LUIZ | Data | |
+-----------------------------------------------------------------------------
| Descrição | Função de processamento |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION RunProc(lEnd)

dbSelectArea("SX5")
dbSetOrder(1)
dbGoTop()

While !Eof()
If lEnd
MsgInfo(cCancel,"Fim")
Exit
Endif
MsProcTxt("Tabela: "+SX5->X5_TABELA+" Chave: "+SX5->X5_CHAVE)
dbSkip()
End

RETURN



- 270 -

ADVPL Compl et o



26.2.5. MsgRun( ) .

I ndi cador de processament o sem i ncrement o.

E Si nt ax e: Pr ocessa( cMensagem, cTi t ul o, bAcao)

E Ret or no: Ni l

E Par âmet r os:

cMensagem
Mensagem que será exibi da na régua de processament o
durant e a execução.
cTi t ul o Tít ul o da j anel a da régua de processament o.
bAcao
Bl oco de códi go que especi fi ca a ação que será execut ada com
o acompanhament o da régua de processament o.
Apar ênci a




Ex empl o: MSGRun( )


/*/
+-----------------------------------------------------------------------------
| Função | GMSGRUN | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização das funções MSGRUN() |
| | e DBEVAL() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

USER FUNCTION GMsgRun()
LOCAL nCnt := 0

dbSelectArea("SX1")
dbGoTop()

MsgRun("Lendo arquivo, aguarde...","Título opcional",{|| dbEval({|x| nCnt++}) })

MsgInfo("Ufa!!!, li "+AllTrim(Str(nCnt))+" registros",FunName())

RETURN



- 271 -

ADVPL Compl et o



26.3. Li st Box ( )

A si nt axe cl ássi ca da linguagem ADVPL permi t e que o component e vi sual Li st Box i mpl ement e
doi s t i pos di st i nt os de obj et os:

E Li st a si mpl es: l i st a de apenas uma col una no format o de um vet or, a qual não
necessi t a da especi fi cação de um cabeçal ho.

E Li st a com col un as: l ist a com di ver sas col unas que necessi t a de um cabeçal ho no
for mat o de um aHeader ( array de cabeçal ho) .

26.3.1. Li st Box si mpl es

E Si nt ax e:


@ nLi nh a,n Col un a LI STBOX oLi st box VAR nLi st a I TEMS aLi st a SI ZE nLar gur a,n Al t ur a
OF oObj et oRef UNI DADE ON CHANGE CHANGE


E Par âmet r os:

nLi n ha, nCol u na Posi ção do obj et o Li st Box em função da j anel a em que el e
será defi ni do.
oLi st Box Obj et o Li st Box que será cri ado.
nLi st a Vari ável numéri ca que cont ém o número do i t em
sel eci onado no Li st Box.
aLi st a Vet or si mpl es cont endo as st ri ngs que serão exi bi das no
Li st Box.
nLar gu r a, nAl t u r a Di mensões do obj et o Li st Box.
oObj et oRef Obj et o di al og no qual o component e será defi nido.
UNI DADE Uni dade de medi da das di mensões: PI XEL.
CHANGE Função ou l i st a de expr essões que será execut ada na
sel eção de um i t em do Li st Box.

E Apar ênci a:





- 272 -

ADVPL Compl et o



Ex empl o: LI STBOX como l i st a si mpl es


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do LISTBOX() como lista |
| | simples. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
User Function ListBoxIte()

Local aVetor := {}
Local oDlg := Nil
Local oLbx := Nil
Local cTitulo := "Consulta Tabela"
Local nChave := 0
Local cChave := ""

dbSelectArea("SX5")
dbSetOrder(1)
dbSeek(xFilial("SX5"))

CursorWait()

//+-----------------------------------------+
//| Carrega o vetor conforme a condição |
//+-----------------------------------------+
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And. X5_TABELA=="00"
AADD( aVetor, Trim(X5_CHAVE)+" - "+Capital(Trim(X5_DESCRI)) )
dbSkip()
End

CursorArrow()

If Len( aVetor ) == 0
Aviso( cTitulo, "Não existe dados a consultar", {"Ok"} )
Return
Endif

//+-----------------------------------------------+
//| Monta a tela para usuário visualizar consulta |
//+-----------------------------------------------+
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL
@ 10,10 LISTBOX oLbx VAR nChave ITEMS aVetor SIZE 230,95 OF oDlg PIXEL
oLbx:bChange := {|| cChave := SubStr(aVetor[nChave],1,2) }
DEFINE SBUTTON FROM 107,183 TYPE 14 ACTION LoadTable(cChave) ENABLE OF oDlg
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg

ACTIVATE MSDIALOG oDlg CENTER

Return


- 273 -

ADVPL Compl et o


Ex empl o: LI STBOX como l i st a si mpl es – f u nções acessór i as


/*/
+-----------------------------------------------------------------------------
| Função | LISTBOXITE | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Função que carrega os dados da tabela selecionada em um |
| | listbox. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

STATIC FUNCTION LoadTable(cTabela)

LOCAL aTabela := {}
LOCAL oDlg := NIL
LOCAL oLbx := NIL

dbSelectArea("SX5")
dbSeek(xFilial("SX5")+cTabela)

//+-------------------------------------------------------------
//| O vetor pode receber carga de duas maneiras, acompanhe... |
//+-------------------------------------------------------------
//| Utilizando While/End |
//+-------------------------------------------------------------

dbEval({|| AADD(aTabela,{X5_CHAVE,Capital(X5_DESCRI)})},,{||
X5_TABELA==cTabela})

If Len(aTabela)==0
Aviso( "FIM", "Necessário selecionar um item", {"Ok"} )
Return
Endif

DEFINE MSDIALOG oDlg TITLE "Dados da tabela selecionada" FROM 300,400 TO 540,900
PIXEL
@ 10,10 LISTBOX oLbx FIELDS HEADER "Tabela", "Descrição" SIZE 230,095 OF oDlg
PIXEL
oLbx:SetArray( aTabela )
oLbx:bLine := {|| {aTabela[oLbx:nAt,1],aTabela[oLbx:nAt,2]} }
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg

RETURN




- 274 -

ADVPL Compl et o



26.3.2. Li st Box múl t i pl as col unas

E Si nt ax e:


@ nLi nh a,nCol u n a LI STBOX oLi st box FI ELDS HEADER “ Header 1” , …, “ Header X” SI ZE
nLar gu r a, nAl t u r a OF oObj et oRef UNI DADE


E Par âmet r os:

nLi n ha, nCol u na Posi ção do obj et o Li st Box em função da
j anel a em que el e será defi ni do.
oLi st Box Obj et o Li st Box que será cri ado.
nLi st a Vari ável numéri ca que cont ém o número do
i t em sel eci onado no Li st Box.
“ Header 1” ,... ,“ Header X” St ri ngs i dent i fi cando os t ít ul os das col unas do
Gri d.
nLar gu r a, nAl t u r a Di mensões do obj et o Li st Box.
oObj et oRef Obj et o di al og no qual o component e será
defi ni do.
UNI DADE Uni dade de medi da das di mensões: PI XEL.
CHANGE Função ou l i st a de expr essões que será
execut ada na sel eção de um i t em do Li st Box.

E Mét odos:

Set Ar r ay ( ) Mét odo o obj et o Li st Box que defi ne qual o
array cont ém os dados que serão exi bi dos no
gri d.

E At r i but os:

bLi n e At ri but o do obj et o Li st Box que vi ncul a cada
linha,col una do array, com cada cabeçal ho do
gri d.

E Apar ênci a:



- 275 -

ADVPL Compl et o



Ex empl o: LI STBOX com gr i d


#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | LIST_BOX | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização de um LISTBOX() com |
| | grid. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function List_Box()

Local aVetor := {}
Local oDlg
Local oLbx
Local cTitulo := "Cadastro de Bancos"
Local cFilSA6

dbSelectArea("SA6")
dbSetOrder(1)
cFilSA6 := xFilial("SA6")
dbSeek(cFilSA6)

// Carrega o vetor conforme a condição.
While !Eof() .And. A6_FILIAL == cFilSA6
AADD( aVetor, { A6_COD, A6_AGENCIA, A6_NUMCON, A6_NOME, A6_NREDUZ, A6_BAIRRO,
A6_MUN } )
dbSkip()
End

// Se não houver dados no vetor, avisar usuário e abandonar rotina.
If Len( aVetor ) == 0
Aviso( cTitulo, "Não existe dados a consultar", {"Ok"} )
Return
Endif

// Monta a tela para usuário visualizar consulta.
DEFINE MSDIALOG oDlg TITLE cTitulo FROM 0,0 TO 240,500 PIXEL

// Primeira opção para montar o listbox.
@ 10,10 LISTBOX oLbx FIELDS HEADER ;
"Banco", "Agencia", "C/C", "Nome Banco", "Fantasia", "Bairro", "Município" ;
SIZE 230,95 OF oDlg PIXEL

oLbx:SetArray( aVetor )
oLbx:bLine := {|| {aVetor[oLbx:nAt,1],;
aVetor[oLbx:nAt,2],;
aVetor[oLbx:nAt,3],;
aVetor[oLbx:nAt,4],;
aVetor[oLbx:nAt,5],;
aVetor[oLbx:nAt,6],;
aVetor[oLbx:nAt,7]}}


- 276 -

ADVPL Compl et o


Exemplo (continuação):

// Segunda opção para monta o listbox
/*
oLbx :=
TWBrowse():New(10,10,230,95,,aCabecalho,,oDlg,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
oLbx:SetArray( aVetor )
oLbx:bLine := {|| aEval(aVetor[oLbx:nAt],{|z,w| aVetor[oLbx:nAt,w] } ) }
*/

DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTER

Return


26.4. Scr ol l Box ( )

O Scr ol l Box é o obj et o ut ili zado para permi t i r a um Di al og exi bi r barras de r ol agem vert i cai s e
Hori zont ai s. Al gumas apli cações com obj et os defi nem aut omat i cament e o Scr oll Box, t ai s como:

E Enchoi ce( ) ou MsMGet ( )
E NewGet Dados( )
E Li st Box( )

Quando é defi ni do um obj et o Scrol l Box, os demai s component es da j anel a deverão refer enci ar
est e obj et o e não mai s o obj et o Di al og.

Dest a forma o Scr oll Box é at ri buído a um obj et o Di al og, e os component es ao Scr ol l Box.

O MsDi al og( ) ÷ Scr oll Box( )
O Scr oll Box( ) ÷ Component es Vi suai s

E Si nt ax e:


@ nLi n ha, nCol u na SCROLLBOX oScr ol l Box HORI ZONTAL VERTI CAL SI ZE
nLar gu r a, nAl t u r a OF oObj et oRef BORDER


E Par âmet r os:

nLi n ha, nCol u na Posi ção do obj et o Scrol lBox em função da
j anel a em que el e será defi ni do.
oScr ol l Box Obj et o Scrol l Box que será cri ado.
HORI ZONTAL Parâmet r o que quando defi ni do habilit a a
régua de rol agem hori zont al .
VERTI CAL Parâmet r o que quando defi ni do habilit a a
régua de rol agem vert i cal .
nLar gu r a, nAl t u r a Di mensões do obj et o Scrol l Box.
oObj et oRef Obj et o di al og no qual o component e será
defi ni do.
BORDER

Parâmet r o que quando defi ni do habilit a a
exi bi ção de uma borda de del i mi t ação do
Scr oll Box em r el ação a out ros obj et os.


- 277 -

ADVPL Compl et o


E Apar ênci a:





Ex empl o: Ut i l i zação de mú l t i pl os Scr ol l Box es


#INCLUDE "PROTHEUS.CH"

/*/
+------------------------------------------------------------------------
| Função | SCROLL() | Autor | ROBSON LUIZ |Data | |
+------------------------------------------------------------------------
| Descrição | Programa que demonstra como montar uma enchoice apenas |
| | com variáveis, incluindo o recurso de rolagem. |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

USER FUNCTION Scroll()

LOCAL oDlg := NIL
LOCAL oScroll := NIL
LOCAL oLbx1 := NIL
LOCAL oLbx2 := NIL
LOCAL bGet := NIL
LOCAL oGet := NIL
LOCAL aAIIPM := {}
LOCAL aTitulo := {}
LOCAL nTop := 5
LOCAL nWidth := 0
LOCAL cGet := ""
LOCAL cPict := ""
LOCAL cVar := ""
LOCAL n := 0


- 278 -

ADVPL Compl et o


Exemplo (continuação):

PRIVATE cTitulo := "Consulta Parcelamento"
PRIVATE aSay := {}
PRIVATE cProcesso,cPrefixo,cTipo,cCliente,cLoja,cNome,cCGC
PRIVATE dData,nTotal,nUFESP,cStatus,cCond

cProcesso := "P00001"
cPrefixo := "UNI"
cTipo := "MAN"
cCliente := "000001"
cLoja := "01"
cNome := "JOSE DA SILVA SANTOS SOARES"
cCGC := "00.000.000/0001-91"
dData := "26/03/03"
nTotal := 5922.00
nUFESP := 1000.00
cStatus := "Z"
cCond := "001"

// Vetor para os campos no Scrooll Box
//+-------------------------------------+
//| aSay[n][1] - Titulo |
//| aSay[n][2] - Tipo |
//| aSay[n][3] - Tamanho |
//| aSay[n][4] - Decimal |
//| aSay[n][5] - Conteúdo/Variável |
//| aSay[n][6] - Formato |
//+-------------------------------------+
AADD(aSay,{"Processo" ,"C",06,0,"cProcesso" ,"@!"})
AADD(aSay,{"Prefixo" ,"C",03,0,"cPrefixo" ,"@!"})
AADD(aSay,{"Tipo" ,"C",03,0,"cTipo" ,"@!"})
AADD(aSay,{"Cliente" ,"C",06,0,"cCliente" ,"@!"})
AADD(aSay,{"Loja" ,"C",02,0,"cLoja" ,"@!"})
AADD(aSay,{"Nome" ,"C",30,0,"cNome" ,"@!"})
AADD(aSay,{"CNPJ/CPF" ,"C",14,0,"cCGC" ,"@!"})
AADD(aSay,{"Dt.Processo" ,"D",08,0,"dData" ,"@!"})
AADD(aSay,{"Total R$" ,"N",17,2,"nTotal" ,"@!"})
AADD(aSay,{"Total UFESP" ,"N",17,2,"nUFESP" ,"@!"})
AADD(aSay,{"Status" ,"C",01,0,"cStatus" ,"@!"})
AADD(aSay,{"Cond.Pagto" ,"C",03,0,"cCond" ,"@!"})

// Vetor para List Box
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})
AADD(aAIIPM,{"1234","DCD9815","26/03/03"})

// Vetor para List Box
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})
AADD(aTitulo,{"A","26/03/03","26/03/03","1.974,00","100,00"})

DEFINE MSDIALOG oDlg TITLE cTitulo FROM 122,0 TO 432,600 OF oDlg PIXEL
@ 013,002 TO 154,192 LABEL "Parcelamento" OF oDlg PIXEL
@ 013,195 TO 082,298 LABEL "Títulos" OF oDlg PIXEL
@ 083,195 TO 154,298 LABEL "AIIPM" OF oDlg PIXEL

//scrollbox
@ 019,006 SCROLLBOX oScroll HORIZONTAL VERTICAL SIZE 131,182 OF oDlg BORDER
For n:=1 TO Len(aSay)

- 279 -

ADVPL Compl et o


Exemplo (continuação):

bGet := &("{|| '"+aSay[n][1]+"'}")
cVar := aSay[n][5]
cGet := "{|u| IIF(PCount()>0,"+cVar+":=u,"+cVar+")}"
cPict := aSay[n][6]

TSay():New(nTop,5,bGet,oScroll,,,.F.,.F.,.F.,.T.,,,;
GetTextWidth(0,Trim(aSay[n][1])),15,;
.F.,.F.,.F.,.F.,.F.)
oGet:=TGet():New(nTop-2,40,&cGet,oScroll,,7,cPict,,,,,.F.,,.T.,;
,.F.,,.F.,.F.,,.T.,.F.,,(cVar),,,,.T.)
nTop+=11
Next n

//listbox títulos
@ 019,199 LISTBOX oLbx1 FIELDS HEADER ;
"Parcela","Vencto","Vencto.Real","Valor R$","Qtd.UFESP";
COLSIZES 21,24,33,63,100;
SIZE 095,059 OF oDlg PIXEL
oLbx1:SetArray( aTitulo )
oLbx1:bLine := {||{aTitulo[oLbx1:nAt,1],aTitulo[oLbx1:nAt,2],;
aTitulo[oLbx1:nAt,3],aTitulo[oLbx1:nAt,4],aTitulo[oLbx1:nAt,5]}}

//listbox aiipm
@ 089,199 LISTBOX oLbx2 FIELDS HEADER "AIIPM","Placa","Data Multa" ;
COLSIZES 24,21,30 SIZE 095,061 OF oDlg PIXEL
oLbx2:SetArray( aAIIPM )
oLbx2:bLine :=
{||{aAIIPM[oLbx2:nAt,1],aAIIPM[oLbx2:nAt,2],aAIIPM[oLbx2:nAt,3]}}

ACTIVATE MSDIALOG oDlg CENTER ON INIT
EnchoiceBar(oDlg,{||oDlg:End()},{||oDlg:End()})

RETURN














- 280 -

ADVPL Compl et o



26.5. Par amBox ( )

I mpl ement a uma t el a de parâmet r os, que não necessi t a da cri ação de um grupo de pergunt as
no SX1, e com funci onalidades que a Pergunt e( ) não di sponi biliza, t ai s como CheckBox e
Radi oBut t ons.

Cada component e da ParamBox será associ ado a um parâmet r o Pri vat e denomi nado
MV_PARxx, de acordo com a ordem do component e na t el a. Os par âmet r os da ParamBox
podem ser ut ili zados de forma i ndependent e em uma r ot i na específica, ou compl ement ando
opções de uma r ot i na padrão.

Cui dados

× A PARAMBOX defi ne os parâmet ros segui ndo o pri ncípi o das vari ávei s MV_PARxx. Caso
el a sej a ut ilizada em uma rot i na em conj unt o com parâmet ros padrões ( SX1 +
Pergunt e( ) ) é necessário sal var os parâmet r os padrões, chamar a Parambox( ) , sal var o
ret orno da Parambox( ) em vari ávei s Pri vat e específi cas ( MVPARBOXxx) e depoi s
rest aurar os parâmet ros padrões, conforme o exempl o dest a document ação.

× O obj et o COMBO( ) da PARAMBOX( ) possui um probl ema em seu r et orno: Caso o combo
não sej a sel eci onado, el e mant erá seu cont eúdo como numéri co, caso sej a el e receberá
o t ext o da opção e não o número da opção. O exempl o dest a document ação i lust ra o
t rat ament o de códi go necessári o par a pr ot eger a apli cação.

× Ao ut ilizar a ParamBox em uma função que t ambém ut ili ze parâmet ros defi ni dos pel a
função Pergunt e( ) deve- se:

E Sal var e rest aurar os MV_PARs da Pergunt e( )
E Defi ni r vari ávei s Pri vat e própri as para a Par amBox, as quai s i rão armazenar o
cont eúdo das MV_PARs que est a r et orna.

E Si nt ax e: Par amBox ( aPar amBox , cTi t ul o, aRet , bOk , aBut t ons, l Cent er ed, ;
nPosx , nPosy , oMai n Dl g, cLoad, l CanSav e, l User Sav e)

E Ret or no: l OK ¬ i ndi ca se a t el a de par âmet r os f oi cancel ada ou conf i r mada

E Par âmet r os:

aPar amBox Array de parâmet r os de acordo com a r egra da ParamBox
cTi t ul o Ti t ul o da j anel a de parâmet r os
aRet
Array que será passado por r efer enci a e ret ornado com o
cont eúdo de cada parâmet r o
bOk Bl oco de códi go para vali dação do OK da t el a de parâmet r os
aBut t ons
Array cont endo a r egra para adi ção de novos bot ões ( al ém do
OK e Cancel ar) / / AADD( aBut t ons,{ nType,bAct i on,cText o} )
l Cent er ed
Se a t el a será exi bi da cent ral izada, quando a mesma não
est i ver vi ncul ada a out ra j anel a
nPosx Posi ção i ni ci al - > linha ( Li nha fi nal : nPosX+ 274)
nPosy Posi ção i ni ci al - > col una ( Col una fi nal: nPosY+ 445)
oMai nDl g Caso o ParamBox deva ser vi ncul ado a uma out ra t el a
cLoad
Nome do arqui vo aonde as respost as do usuári o serão sal vas /
li das
l CanSav e Se as r espost as para as pergunt as podem ser sal vas
l User Sav e Se o usuári o pode sal var sua própri a confi guração.

- 281 -

ADVPL Compl et o


E Apar ênci a:





E Regr as do ar r ay aPar amBox :

[ 1] Ti po do par âmet r o: Para cada t i po de parâmet r o as demai s posi ções do array vari am de
cont eúdo conforme abai xo:

1 - MsGet
[ 2] : Descri ção
[ 3] : St ri ng cont endo o i ni ci alizador do campo
[ 4] : St ri ng cont endo a Pi ct ure do campo
[ 5] : St ri ng cont endo a vali dação
[ 6] : Consul t a F3
[ 7] : St ri ng cont endo a vali dação When
[ 8] : Tamanho do MsGet
[ 9] : Fl ag .T./ .F. Parâmet r o Obri gat óri o ?

2 - Combo
[ 2] : Descri ção
[ 3] : Numéri co cont endo a opção i ni ci al do combo
[ 4] : Array cont endo as opções do Combo
[ 5] : Tamanho do Combo
[ 6] : Vali dação
[ 7] : Fl ag .T./ .F. Parâmet r o Obri gat óri o ?

- 282 -

ADVPL Compl et o



3 - Radi o
[ 2] : Descri ção
[ 3] : Numéri co cont endo a opção i ni ci al do Radio
[ 4] : Array cont endo as opções do Radi o
[ 5] : Tamanho do Radi o
[ 6] : Vali dação
[ 7] : Fl ag .T./ .F. Parâmet r o Obri gat óri o ?

4 - Check Box ( Com Say )
[ 2] : Descri ção
[ 3] : I ndi cador Lógi co cont endo o i ni ci al do Check
[ 4] : Text o do CheckBox
[ 5] : Tamanho do Radi o
[ 6] : Vali dação
[ 7] : Fl ag .T./ .F. Parâmet r o Obri gat óri o ?

5 - Check Box ( l i n ha i nt ei r a )
[ 2] : Descri ção
[ 3] : I ndi cador Lógi co cont endo o i ni ci al do Check
[ 4] : Tamanho do Radi o
[ 5] : Vali dação
[ 6] : Fl ag .T./ .F. Parâmet r o Obri gat óri o ?

6 - Fi l e
[ 2] : Descri ção
[ 3] : St ri ng cont endo o i ni ci alizador do campo
[ 4] : St ri ng cont endo a Pi ct ure do campo
[ 5] : St ri ng cont endo a vali dação
[ 6] : St ri ng cont endo a vali dação When
[ 7] : Tamanho do MsGet
[ 8] : Fl ag . T./ .F. Parâmet r o Obri gat óri o ?
[ 9] : Text o cont endo os t i pos de arqui vo
Ex.: "Arqui vos .CSV | * . CSV"
[ 10] : Di ret óri o i ni ci al do CGETFI LE( )
[ 11] : Parâmet ros do CGETFI LE( )

7 - Mont agem de ex pr essão de f i l t r o
[ 2] : Descri ção
[ 3] : Ali as da t abel a
[ 4] : Fil t ro i ni ci al
[ 5] : Opci onal - Cl ausula When Bot ão Edi t ar Fi lt ro

8 - MsGet Passw or d
[ 2] : Descri ção
[ 3] : St ri ng cont endo o i ni ci alizador do campo
[ 4] : St ri ng cont endo a Pi ct ure do campo
[ 5] : St ri ng cont endo a vali dação
[ 6] : Consul t a F3
[ 7] : St ri ng cont endo a vali dação When
[ 8] : Tamanho do MsGet
[ 9] : Fl ag .T./ .F. Parâmet r o Obri gat óri o ?

- 283 -

ADVPL Compl et o



9 - MsGet Say
[ 2] : St ri ng Cont endo o Text o a ser apr esent ado
[ 3] : Tamanho da St ri ng
[ 4] : Al t ura da St ri ng
[ 5] : Negri t o ( l ógi co)

Ex empl o: Ut i l i zação da Par amBox ( )


#include “protheus.ch”

/*/
+-----------------------------------------------------------------------
| Função | xParamBox | Autor | ROBSON LUIZ |Data | |
+-----------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da PARAMBOX como |
| | forma alternativa de disponibilizar parâmetros em um |
| | processamento. |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function xParamBox()

Local aRet := {}
Local aParamBox := {}
Local aCombo :=
{"Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro
","Outubro","Novembro","Dezembro"}
Local i := 0
Private cCadastro := "xParambox"

AADD(aParamBox,{1,"Produto",Space(15),"","","SB1","",0,.F.})
AADD(aParamBox,{2,"Tipo de cliente",1,aCombo,50,"",.F.})

AADD(aParamBox,{3,"Mostra
deletados",IIF(Set(_SET_DELETED),1,2),{"Sim","Não"},50,"",.F.})

AADD(aParamBox,{4,"Marca todos ?",.F.,"Marque todos se necessário
for.",50,"",.F.})

AADD(aParamBox,{5,"Marca todos ?",.F.,50,"",.F.})

AADD(aParamBox,{6,"Qual arquivo",Space(50),"","","",50,.F.,;
"Arquivo .DBF |*.DBF"})

AADD(aParamBox,{7,"Monte o filtro","SX5","X5_FILIAL==xFilial('SX5')"})
AADD(aParamBox,{8,"Digite a senha",Space(15),"","","","",80,.F.})

If ParamBox(aParamBox,"Teste Parâmetros...",@aRet)
For i:=1 To Len(aRet)
MsgInfo(aRet[i],"Opção escolhida")
Next
Endif

Return


- 284 -

ADVPL Compl et o


Ex empl o: Pr ot egendo os par âmet r os MV_PARs da Per gunt e( ) em uso.


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | XPARBOX() | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrição | Função utilizando a PARAMBOX() e protegendo os MV_PARs |
| | ativos do programa principal. |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
Static Function XPARBOX(cPerg)

Local aParamBox := {}
Local cTitulo := "Transferência para Operação"
Local bOk := {|| .T.}
Local aButtons := {}; Local aRet := {}
Local nPosx; Local nPosy; Local nX := 0
Local cLoad := ""
Local lCentered := .T.; Local lCanSave := .F.; Local lUserSave := .F.
Local aParamAtu := Array(4)

// Salva as perguntas padrões antes da chamada da ParamBox
For nX := 1 to Len(aParamAtu)
aParamAtu [nX] := &("Mv_Par"+StrZero(nX,2))
Next nX

AADD(aParamBox,{2,"Atualiza taxa de depreciação?", 2, {"Sim","Não"}, 100,;
"AllwaysTrue()",.T.})

ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx, nPosy,
/*oMainDlg*/ ,;
cLoad, lCanSave, lUserSave)

IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox)
For nX := 1 to Len(aParamBox)
If aParamBox[nX][1] == 1
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C"
&("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],;
{|x| Alltrim(x) == aRet[nX]})
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N"
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
Endif
Next nX
ENDIF

// Restaura as perguntas padrões apos a chamada da ParamBox
For nX := 1 to Len(aParamAtu)
&("Mv_Par"+StrZero(nX,2)) := aParamAtu[nX]
Next nX

Return


- 285 -

ADVPL Compl et o



MÓDULO 05: I nt r odução a or i ent ação à obj et os


27. Concei t os de or i ent ação à obj et os

O t ermo ori ent ação a obj et os pressupõe uma organi zação de soft war e em t ermos de col eção
de obj et os di scret os i ncorporando est rut ura e comport ament o própri os. Est a abordagem de
organi zação é essenci al ment e di ferent e do desenvol vi ment o t radi ci onal de soft war e, onde
est rut uras de dados e r ot i nas são desenvol vi das de forma apenas fracament e acopl adas.

Nest e t ópi co serão os concei t os de programação ori ent ada a obj et os l i st ados abai xo. Est a
breve vi são geral do paradi gma permi t i rá ent ender mel hor os concei t os associ ados à
programação ori ent ada a obj et os e, em part i cul ar, às const ruções i mpl ement adas at ravés da
linguagem ADVPL.

E Obj et os
E Her ança
E At r i but os
E Mét odos
E Cl asses
E Abst r ação
E Gen er al i zação
E Encapsu l ament o
E Pol i mor f i smo

27.1. Def i ni ções

Obj et o

Um obj et o é uma ent i dade do mundo real que t em uma i dent idade. Obj et os podem
represent ar ent i dades concr et as ( um arqui vo no meu comput ador, uma bi ci cl et a) ou ent i dades
concei t uai s ( uma est r at égi a de j ogo, uma polít i ca de escal onament o em um si st ema
operaci onal ) . Cada obj et o t er sua i dent i dade si gni fi ca que doi s obj et os são di st int os mesmo
que el es apr esent em exat ament e as mesmas caract eríst i cas.

Embora obj et os t enham exi st ênci a própri a no mundo r eal , em t ermos de l i nguagem de
programação um obj et o necessi t a um mecani smo de i dent i fi cação. Est a i dent i fi cação de obj et o
deve ser úni ca, uni forme e i ndependent e do cont eúdo do obj et o. Est e é um dos mecani smos
que permi t e a cri ação de col eções de obj et os, as quai s são t ambém obj et os em si .

A est rut ura de um obj et o é r epr esent ada em t er mos de at ri but os. O comport ament o de um
obj et o é r epr esent ado pel o conj unt o de operações que podem ser execut adas sobr e o obj et o.


- 286 -

ADVPL Compl et o



Cl asse

Obj et os com a mesma est rut ura e o mesmo comport ament o são agr upados em cl asses. Uma
cl asse é uma abst ração que descreve pr opri edades i mport ant es para uma apl i cação e
si mpl esment e i gnora o r est o.

Cada cl asse descr eve um conj unt o ( possi vel ment e i nfi nit o) de obj et os i ndi vi duai s. Cada obj et o
é di t o ser uma i nst ânci a de uma cl asse. Assi m, cada i nst ânci a de uma cl asse t em seus própri os
val ores para cada at ri but o, mas di vi dem os nomes dos at ri but os e mét odos com as out ras
i nst ânci as da cl asse. I mpli ci t ament e, cada obj et o cont ém uma r efer ênci a para sua pr ópri a
cl asse, em out ras pal avras, el e sabe o que el e é.



Fi gu r a: Represent ação de uma cl asse de obj et os




Fi gu r a: Represent ação de um obj et o i nst anci ado de uma cl asse

- 287 -

ADVPL Compl et o




Pol i mor f i smo

Pol i morfi smo si gni fi ca que a mesma operação pode se comport ar de forma di fer ent e em
cl asses di fer ent es. Por exempl o, a oper ação move quando apl i cada a uma j anel a de um
si st ema de i nt erfaces t em um comport ament o di st i nt o do que quando apli cada a uma peça de
um j ogo de xadr ez. Um mét odo é uma i mpl ement ação específi ca de uma oper ação para uma
cert a cl asse.

Pol i morfi smo t ambém i mpli ca que uma operação de uma mesma cl asse pode ser
i mpl ement ada por mai s de um mét odo. O usuári o não pr eci sa saber quant as i mpl ement ações
exi st em para uma operação, ou expli ci t ar qual mét odo deve ser ut ili zado: a li nguagem de
programação deve ser capaz de sel eci onar o mét odo corr et o a part i r do nome da operação,
cl asse do obj et o e ar gument os para a oper ação. Dest a for ma, novas cl asses podem ser
adi ci onadas sem necessi dade de modi fi cação de códi go j á exi st ent e, poi s cada cl asse apenas
defi ne os seus mét odos e at ri but os.

No mundo r eal , al guns obj et os e cl asses podem ser descri t os como casos especi ai s, ou
especi ali zações, de out r os obj et os e cl asses. Por exempl o, a cl asse de comput adores pessoai s
com pr ocessador da linha 80x86 é uma especi ali zação de comput ador es pessoai s, que por sua
vez é uma especi ali zação de comput adores. Não é desej ável que t udo que j á foi descri t o para
comput adores t enha de ser repet i do para comput ador es pessoai s ou para comput ador es
pessoai s com pr ocessador da li nha 80x86.

Her ança

Herança é o mecani smo do paradi gma de ori ent ação a obj et os que permi t e compart i lhar
at ri but os e operações ent re cl asses baseada em um r el aci onament o hi erárqui co. Uma cl asse
pode ser defi ni da de forma genéri ca e depoi s refi nada sucessi vament e em t ermos de
subcl asses ou cl asses deri vadas. Cada subcl asse i ncorpora, or herda, t odas as pr opri edades de
sua super cl asse ( ou cl asse base) e adi ci ona suas propri edades úni cas e part i cul ares. As
propri edades da cl asse base não pr eci sam ser r epet i das em cada cl asse deri vada. Est a
capaci dade de fat orar as propri edades comuns de di versas cl asses em uma supercl asse pode
reduzi r dramat i cament e a r epet i ção de códi go em um proj et o ou pr ograma, sendo uma das
pri nci pai s vant agens da abordagem de ori ent ação a obj et os.


- 288 -

ADVPL Compl et o



27.2. Concei t os Bási cos

A abordagem de ori ent ação a obj et os favor ece a apl i cação de di versos concei t os consi der ados
fundament ai s para o desenvol vi ment o de bons programas, t ai s como abst ração e
encapsul ament o.

Tai s concei t os não são excl usi vos dest a abordagem, mas são suport ados de forma mel hor no
desenvol vi ment o ori ent ado a obj et os do que em out ras met odol ogi as.

Abst r ação

Abst ração consi st e de focal i zar nos aspect os essenci ai s i nerent es a uma ent i dade e i gnorar
propri edades “ aci dent ai s” . Em t ermos de desenvol vi ment o de si st emas, i st o si gni fi ca
concent rar- se no que um obj et o é e faz ant es de se deci di r como el e será i mpl ement ado. O
uso de abst ração pr eserva a li berdade par a t omar deci sões de desenvol vi ment o ou de
i mpl ement ação apenas quando há um mel hor ent endi ment o do pr obl ema a ser r esol vi do.

Mui t as linguagens de programação modernas suport am o concei t o de abst ração de dados;
por ém, o uso de abst r ação j unt ament e com poli morfi smo e herança, como suport ado em
ori ent ação a obj et os, é um mecani smo mui t o mai s poder oso.

O uso apr opri ado de abst ração permi t e que um mesmo model o concei t ual ( ori ent ação a
obj et os) sej a ut ilizado para t odas as fases de desenvol vi ment o de um si st ema, desde sua
análi se at é sua document ação.

Encapsu l ament o

Encapsul ament o, t ambém r eferi do como esconder i nformação, consi st e em separar os
aspect os ext ernos de um obj et o, os quai s são acessívei s a out ros obj et os, dos det al hes
i nt ernos de i mpl ement ação do obj et o, os quai s permanecem escondi dos dos out r os obj et os. O
uso de encapsul ament o evi t a que um pr ogr ama t orne- se t ão i nt erdependent e que uma
pequena mudança t enha grandes efei t os col at erai s.

O uso de encapsul ament o permi t e que a i mplement ação de um obj et o possa ser modi fi cada
sem afet ar as apl i cações que usam est e obj et o. Mot i vos para modi ficar a i mpl ement ação de
um obj et o podem ser , por exempl o, mel hori a de desempenho, corr eção de er ros e mudança de
pl at aforma de execução.

Assi m como abst ração, o concei t o de Encapsul ament o não é excl usi vo da abordagem de
ori ent ação a obj et os. Ent ret ant o, a habili dade de se combi nar est rut ura de dados e
comport ament o em uma úni ca ent i dade t or na a Encapsul ament o mai s el egant e e mai s
poderosa do que em linguagens convenci onai s que separam est rut uras de dados e
comport ament o.

Compar t i l h ament o

Técni cas de ori ent ação a obj et os pr omovem compart il hament o em di versos nívei s di st i nt os.
Herança de est rut ura de dados e comport ament o permi t e que est rut uras comuns sej am
compart il hadas ent re di versas cl asses deri vadas si mil ares sem r edundânci a. O
compart il hament o de códi go usando herança é uma das grandes vant agens da ori ent ação a
obj et os. Ai nda mai s i mport ant e que a economi a de códi go é a cl areza concei t ual de reconhecer
que operações di fer ent es são na verdade a mesma coi sa, o que reduz o número de casos
di st i nt os que devem ser ent endi dos e anali sados.


- 289 -

ADVPL Compl et o


O desenvol vi ment o ori ent ado a obj et os não apenas permi t e que a i nformação dent r o de um
proj et o sej a compart il hada como t ambém ofer ece a possi bili dade de reaprovei t ar pr oj et os e
códi go em proj et os fut uros. As ferrament as para al cançar est e compart il hament o, t ai s como
abst ração, Encapsul ament o e herança, est ão present es na met odol ogi a; uma est rat égi a de
reuso ent re pr oj et os é a defi ni ção de bi bli ot ecas de el ement os reusávei s. Ent r et ant o,
ori ent ação a obj et os não é uma fórmul a mági ca para al cançar reusabilidade; para t ant o, é
preci so pl anej ament o e di sci pli na para pensar em t ermos genéri cos, não vol t ados
si mpl esment e para a apli cação cor rent e.

27.3. O Model o de Obj et os ( OMT)

Um model o de obj et os busca capt urar a est r ut ura est át i ca de um si st ema most rando os
obj et os exi st ent es, seus r el aci onament os, e at ri but os e operações que caract eri zam cada
cl asse de obj et os. É at ravés do uso dest e model o que se enfat i za o desenvol vi ment o em
t ermos de obj et os ao i nvés de mecani smos t radi ci onai s de desenvol vi ment o baseado em
funci onali dades, permi t indo uma r epr esent ação mai s próxi ma do mundo r eal .

Uma vez que as pri nci pai s defi ni ções e concei t os da abordagem de ori ent ação a obj et os est ão
defi ni dos, é possível i nt roduzi r o model o de obj et os que será adot ado ao l ongo dest e t ext o. O
model o apr esent ado é um subconj unt o do model o OMT ( Obj ect Model i ng Technique) , propost o
por Rumbaugh ent r e out ros. Est e model o t ambém i nt roduz uma repr esent ação di agramát i ca
para est e model o, a qual será t ambém apresent ada aqui .

27.3.1. Obj et os e Cl asses

Obj et o é defi ni do nest e model o como um concei t o, abst ração ou coi sa com li mi t es e
si gni fi cados bem defi ni dos para a apli cação em quest ão. Obj et os t êm doi s propósi t os:
promover o ent endi ment o do mundo r eal e suport ar uma base prát i ca para uma
i mpl ement ação comput aci onal . Não exi st e uma manei ra “ corr et a” de decompor um probl ema
em obj et os; est a decomposi ção depende do j ul gament o do proj et i st a e da nat ureza do
probl ema. Todos os obj et os t êm i dent idade própri a e são di st i nguívei s.

Uma cl asse de obj et os descr eve um grupo de obj et os com propri edades ( at ri but os) si mil ares,
comport ament os ( oper ações) si mil ares, rel acionament os comuns com out ros obj et os e uma
semânt i ca comum. Por exempl o, Pessoa e Companhi a são cl asses de obj et os. Cada pessoa
t em um nome e uma i dade; est es seri am os at ri but os comuns da cl asse. Companhi as t ambém
podem t er os mesmos at ri but os nome e i dade defi ni dos. Ent ret ant o, devi do à di st i nção
semânt i ca el as provavel ment e est ari am agrupados em out ra cl asse que não Pessoa. Como se
pode obser var , o agrupament o em cl asses não l eva em cont a apenas o compart i l hament o de
propri edades.

Todo obj et o sabe a que cl asse el e pert ence, ou sej a, a cl asse de um obj et o é um at ri but o
i mplíci t o do obj et o. Est e concei t o é suport ado na mai or part e das l inguagens de programação
ori ent ada a obj et os, i nclusi ve em ADVPL.

OMT defi ne doi s t i pos de di agramas de obj et os, di agramas de cl asses e di agramas de
i nst ânci as. Um di agrama de cl asse é um esquema, ou sej a, um padrão ou gabari t o que
descr eve as mui t as possívei s inst ânci as de dados. Um di agrama de i nst ânci as descr eve como
um conj unt o part i cul ar de obj et os est á r el acionado. Di agramas de i nst ânci as são út ei s para
apresent ar exempl os e document ar casos de t est es; di agramas de cl asses t êm uso mai s
ampl os. A Fi gura abai xo apresent a a not ação adot ada para est es di agramas.

- 290 -

ADVPL Compl et o





Fi gu r a: Represent ação di agramát i ca de OMT para cl asses e obj et os


O agrupament o de obj et os em cl asses é um poder oso mecani smo de abst ração. Dest a forma,
é possível general i zar defi ni ções comuns para uma cl asse de obj et os, ao i nvés de repet í- l as
para cada obj et o em part i cul ar. Est a é uma das formas de r eut ili zação e economi a que a
abordagem de ori ent ação a obj et os suport a.

27.3.2. At r i but os

Um at ri but o é um val or de dado assumi do pelos obj et os de uma cl asse. Nome, i dade e peso
são exempl os de at ri but os de obj et os Pessoa. Cor , peso e model o são possívei s at ri but os de
obj et os Car ro. Cada at ri but o t em um val or para cada i nst ânci a de obj et o. Por exempl o, o
at ri but o i dade t em val or ` ` 29' ' no obj et o Pedro Y. Em out ras pal avras, Pedr o Y t em 29 anos de
i dade. Di ferent es i nst ânci as de obj et os podem t er o mesmo val or para um dado at ri but o.
Cada nome de at ri but o é úni co para uma dada cl asse, mas não necessari ament e úni co ent r e
t odas as cl asses. Por exempl o, ambos Pessoa e Companhi a podem t er um at ri but o chamado
endereço.

No di agrama de cl asses, at ri but os são li st ados no segundo segment o da cai xa que r epr esent a
a cl asse. O nome do at ri but o pode ser segui do por det al hes opci onais, t ai s como o t i po de
dado assumi do e val or defaul t . A Fi gura abai xo most ra est a r epr esent ação.



Fi gu r a: Represent ação di agramát i ca de OMT para cl asses e obj et os com at ri but os

Não se deve confundi r i dent i fi cadores i nt ernos de obj et os com at ri but os do mundo r eal .
I dent i fi cadores de obj et os são uma conveni ênci a de i mpl ement ação, e não t êm nenhum
si gni fi cado para o domíni o da apli cação. Por exempl o, CI C e RG não são i dent i fi cador es de
obj et os, mas si m verdadei ros at ri but os do mundo r eal .


- 291 -

ADVPL Compl et o


27.3.3. Oper ações e Mét odos

Uma operação é uma função ou t ransformação que pode ser apli cada a ou por obj et os em uma
cl asse. Por exempl o, abri r, sal var e i mpri mi r são operações que podem ser apl i cadas a obj et os
da cl asse Arqui vo. Todos os obj et os em uma cl asse compart i l ham as mesmas operações.

Toda operação t em um obj et o- al vo como um argument o i mplíci t o. O comport ament o de uma
operação depende da cl asse de seu al vo. Como um obj et o “ sabe” qual sua cl asse, é possível
escol her a i mpl ement ação corr et a da operação. Al ém di st o, out ros ar gument os ( parâmet ros)
podem ser necessári os para uma operação.

Uma mesma operação pode se apl i car a di ver sas cl asses di fer ent es. Uma operação como est a
é di t a ser pol i mórfi ca, ou sej a, el a pode assumir di st i nt as formas em cl asses di ferent es.

Um mét odo é a i mpl ement ação de uma operação para uma cl asse. Por exempl o, a operação
i mpri mi r pode ser i mplement ada de forma di st int a, dependendo se o arqui vo a ser i mpresso
cont ém apenas t ext o ASCI I , é um arqui vo de um processador de t ext o ou bi nári o. Todos est es
mét odos execut am a mesma operação: i mpri mi r o arqui vo; por ém, cada mét odo será
i mpl ement ado por um di ferent e códi go.

A assi nat ura de um mét odo é dada pel o númer o e t i pos de argument os do mét odo, assi m
como por seu val or de ret orno. Uma est rat égi a de desenvol vi ment o recomendável é mant er
assi nat uras coerent es para mét odos i mpl ement ando uma dada operação, assi m como um
comport ament o consi st ent e ent r e as i mpl ement ações.

Em t ermos de di agramas OMT, operações são li st adas na t er cei ra part e da cai xa de uma
cl asse. Cada nome de operação pode ser segui da por det al hes opci onai s, t ai s como l i st a de
argument os e t i po de r et orno. A l i st a de argument os é apr esent ada ent re par ênt eses após o
nome da operação. Uma li st a de argument os vazi a i ndi ca que a operação não t em
argument os; da ausênci a da li st a de argument os não se pode concl ui r nada. O t i po de
resul t ado vem após a li st a de argument os, sendo precedi do por doi s pont os ( : ) . Caso a
operação r et orne r esul t ado, est e não deve ser omi t i do, poi s est a é a for ma de di st i ngui - l a de
operações que não ret ornam r esul t ado. Exempl os de r epr esent ação de operações em OMT são
apresent ados na Fi gura abai xo:



Fi gu r a: Represent ação di agramát i ca de OMT para cl asses com at ri but os e operações

- 292 -

ADVPL Compl et o



27.3.4. Sugest ões de desenvol v i ment o

Na const rução de um model o para uma apli cação, as segui nt es sugest ões devem ser
observadas a fi m de se obt er r esul t ados cl aros e consi st ent es:

E Não comece a const r ui r um model o de obj et os si mpl esment e defi ni ndo cl asses,
associ ações e heranças. A pri mei ra coi sa a se fazer é ent ender o probl ema a ser
resol vi do.
E Tent e mant er seu model o si mpl es. Evi t e compl icações desnecessári as.
E Escol ha nomes cui dadosament e. Nomes são i mport ant es e carr egam conot ações
poderosas. Nomes devem ser descri t i vos, cl aros e não dei xar ambi güidades. A escol ha
de bons nomes é um dos aspect os mai s di fícei s da model agem.
E Não “ ent er re” apont ador es ou out ras r efer ênci as a obj et os dent ro de obj et os como
at ri but os. Ao i nvés di st o, model e est as refer ênci as como associ ações. I st o t orna o
model o mai s cl aro e i ndependent e da i mpl ement ação.
E Tent e evi t ar associ ações que envol vam t rês ou mai s cl asses de obj et os. Mui t as vezes,
est es t i pos de associ ações podem ser decompost os em t ermos de associ ações bi nári as,
t ornando o model o mai s cl aro.
E Não t ransfi ra os at ri but os de l i gação para dent r o de uma das cl asses.
E Tent e evi t ar hi erarqui as de generali zação mui t o profundas.
E Não se surpr eenda se o seu model o necessi t ar vári as revi sões; i st o é o normal .
E Sempr e document e seus model os de obj et os. O di agrama pode especi fi car a est rut ur a
do model o, mas nem sempre é sufi ci ent e para descr ever as razões por t rás da defi ni ção
do model o. Uma expl icação escri t a pode cl ari fi car pont os t ai s como si gni fi cado de
nomes e expli car a razão para cada cl asse e r el aci onament o.
E Nem sempr e t odas as const ruções OMT são necessári as para descrever uma apli cação.
Use apenas aquel as que forem adequadas para o pr obl ema anali sado.


- 293 -

ADVPL Compl et o



28. Or i ent ação a obj et os em ADVPL

Nest e t ópi co será det al hada a forma com a qual a li nguagem ADVPL impl ement a os concei t os
de ori ent ação a obj et os e a si nt axe ut ilizada no desenvol vi ment o de apl icações.


28.1. Si nt ax e e oper ador es par a or i ent ação a obj et os

Pal av r as r eser v adas

´ CLASS
´ CONSTRUCTOR
´ DATA
´ ENDCLASS
´ FROM
´ METHOD
´ SELF

CLASS

Descr i ção
Ut ilizada na decl aração de uma cl asse de obj et os, e para i dent i fi car a qual
cl asse um det ermi nado mét odo est á rel aci onado.
Si nt ax e 1 CLASS < nome_da_cl asse>
Si nt ax e 2 METHOD < nome_do_mét odo> CLASS < nome_da_cl asse>

CONSTRUCTOR

Descr i ção
Ut ilizada na especi fi cação de um mét odo especi al , defi ni do como const r ut or,
o qual t em a função de ret ornar um novo obj et o com os at ri but os e mét odos
defi ni dos na cl asse.
Si nt ax e METHOD < nome_do_mét odo( ) > CONSTRUCTOR

DATA

Descr i ção Ut ilizada na decl aração de um at ri but o da cl asse de obj et os.
Si nt ax e DATA < nome_do_at ri but o>

ENDCLASS

Descr i ção Ut ilizada na fi nalização da decl aração da cl asse.
Si nt ax e ENDCLASS



- 294 -

ADVPL Compl et o


FROM

Descr i ção
Ut ilizada na decl aração de uma cl asse, a qual será uma i nst ânci a de uma
super cl asse, r ecebendo os at ri but os e mét odos nel a defi ni dos,
i mpl ement ando a herança ent re cl asses.
Si nt ax e CLASS < nome_da_cl asse> FROM < nome_da_supercl asse>


METHOD

Descr i ção
Ut ilizada na decl aração do pr ot ót i po do mét odo de uma cl asse de obj et os, e
na decl aração do mét odo efet i vament e desenvol vi do.
Si nt ax e 1 METHOD < nome_do_mét odo( ) >
Si nt ax e 2 METHOD < nome_do_mét odo( < parâmet r os> ) > CLASS < nome_da_cl asse>

SELF

Descr i ção
Ut ilizada pri nci pal ment e pel o mét odo const rut or para ret ornar o obj et o
cri ado para a apl i cação.
Si nt ax e Ret urn SELF


Oper ador es específ i cos


:
Ut ilizado para referenci ar um mét odo ou um at ri but o de um obj et o j á
i nst anci ado.
Ex empl o 1 cNome : = oAl uno: sNome
Ex empl o 2 cNot a : = oAl uno: Get Not a( cCur so)


: :
Ut ilizado pel os mét odos de uma cl asse para r efer enci ar os at ri but os
di sponívei s para o obj et o.
Ex empl o

METHOD Get Not a( cCurso) CLASS ALUNO

Local nPosCur so : = 0
Local nNot a : = 0

nPosCur so : = aScan( : : aCur sos,{ | aCurso| aCur so[ 1] = = cCurso} )

I F nPosCurso > 0

nNot a : = : : aCur sos[ nPosCur so] [ 2]

ENDI F

Ret urn nNot a




- 295 -

ADVPL Compl et o



28.2. Est r ut ur a de uma cl asse de obj et os em ADVPL

Decl ar ação da cl asse

A decl aração de uma cl asse da li nguagem ADVPL é real i zada de forma si mil ar a decl aração de
uma função, com a diferença de que uma cl asse não possui di fer enci ação quant o a sua
procedênci a, como uma Funct i on( ) e uma User Funct i on( ) , e não possui vi si bili dade li mi t ada
como uma St at i c Funct ion( ) .

Exemplo:

#include “protheus.ch”
CLASS Pessoa()



Def i ni ção dos at r i but os

Segui ndo o mesmo pri ncípi o de vari ávei s não t ipadas, os at ri but os das cl asses em ADVPL não
preci sam t er seu t i po especi fi cado, sendo necessári o apenas det ermi nar seus nomes.

Dest a forma é recomendado o uso da not ação Húngara t ambém para a defi ni ção dos at ri but os
de forma a faci lit ar a análi se, i nt erpret ação e ut i li zação da cl asse e seus obj et os i nst anci ados.

Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade



Pr ot ot i pação dos mét odos

A prot ot i pação dos mét odos é uma r egra ut ili zada pel as li nguagens ori ent adas a obj et os,
at ravés da qual são especi fi cadas as operações que podem ser real i zadas pel o obj et o,
di ferenci ando os mét odos de out ras funções i nt ernas de uso da cl asse, e para especi fi car quai s
são os mét odos const rut or es.

Em li nguagens t i padas, na prot ot i pação dos mét odos é necessário defi ni r quai s são os
parâmet ros r ecebi dos e seus r espect i vos t i pos, al ém de defi ni r o t ipo do ret orno que ser á
forneci do. Em ADVPL é necessári o apenas descrever a chamada do mét odo e caso necessári o
se o mesmo é um const rut or .

- 296 -

ADVPL Compl et o



Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS


28.3. I mpl ement ação dos mét odos de uma cl asse em ADVPL

Mét odo Con st r ut or

O mét odo const rut or possui a caract eríst i ca de ret ornar um obj et o com o t i po da cl asse da qual
o mesmo foi i nst anci ado. Por est a razão di z- se que o t i po do obj et o i nst anci ado é a cl asse
daquel e obj et o.

Para produzi r est e efei t o, o mét odo const rut or ut ili za a pal avra r eservada “ SELF” , a qual é
ut ili zada pel a li nguagem ADVPL para r efer ênci a a própri a cl asse daquel e obj et o.

Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF



- 297 -

ADVPL Compl et o



Man i pu l ação de at r i but os

Os at ri but os defi ni dos para uma cl asse com a ut ili zação da pal avra r eservada “ DATA” em sua
decl aração podem ser mani pul ados por seus mét odos ut i lizando o operador “ : : ” .

A ut ilização dest e operador permi t e ao i nt erpret ador ADVPL di ferenci ar vari ávei s comuns
cri adas pel as funções e mét odos que ut ili zam est e obj et o dos at ri but os propri ament e di t os.

Exemplo:

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()
ENDCLASS

METHOD Create(cNome, nIdade) CLASS Pessoa

::cNome := cNome
::nIdade := nIdade

Return SELF


Ut i l i zação de f unções em u ma cl asse de obj et os

Conforme menci onado ant eri orment e, a ut i lização da pal avra reservada “ METHOD” permi t e ao
i nt erpr et ador ADVPL di fer enci ar os mét odos que podem ser ut ili zados at ravés da referênci a do
obj et o de funções i nt ernas descri t as i nt ernament e na cl asse.

I st o permi t e a ut ili zação de funções t radi cionai s da li nguagem ADVPL, como as St at i c
Funct i ons( ) as quai s serão vi sívei s apenas a cl asse, e não poderão ser r efer enci adas
di ret ament e pel o obj et o.

Exemplo – parte 01: Função CadPessoa (usuária da classe Pessoa)

#include “protheus.ch”

USER FUNCTION CadPessoa()

Local oPessoa
Local cNome := “”
Local dNascimento:= CTOD(“”)
Local aDados := {}

aDados := GetDados()
oPessoa := Pessoa():Create(cNome,dNascimento)

Return

- 298 -

ADVPL Compl et o



Exemplo – parte 02: Classe Pessoa

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS

METHOD Create(cNome, dNascimento) CLASS Pessoa
::cNome := cNome
::dNascimento := dNascimento
::nIdade := CalcIdade(dNascimento)
Return SELF

STATIC FUNCTION CalcIdade(dNascimento)
Local nIdade
nIdade := dDataBase - dNascimento
RETURN nIdade


Her ança ent r e cl asses

Segui ndo o principi o da ori ent ação a obj et os, a li nguagem ADVPL permi t e que uma cl asse
receba por herança os mét odos e at ri but os defi ni dos em uma out ra cl asse, a qual t ornasse a
super cl asse dest a i nst ânci a.

Para ut ili zar est e r ecur so deve ser ut ili zada a pal avra reservada “ FROM” na decl aração da
cl asse, especi fi cando a super cl asse que será refer enci ada.

Em ADVPL o exempl o prát i co dest a si t uação é a supercl asse TSr vObj ect , a qual é ut ilizada pela
mai ori a das cl asses e component es da i nt erface vi sual , como demonst rado no módul o 06.


Exemplo – parte 01: Declaração da classe Pessoa

#include “protheus.ch”
CLASS Pessoa()

DATA cNome
DATA nIdade
DATA dNascimento

METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()

ENDCLASS


- 299 -

ADVPL Compl et o



Exemplo – parte 02: Declaração da classe Aluno

#include “protheus.ch”
CLASS Aluno() FROM Pessoa

DATA nID
DATA aCursos

METHOD Create() CONSTRUCTOR
METHOD Inscrever()
METHOD Avaliar()
METHOD GetNota()
METHOD GetStatus()

ENDCLASS

// Os objetos da classe Aluno, possuem todos os métodos e atributos da classe
Pessoa, além
// dos métodos e atributos declarados na própria classe.


Const r ut or par a cl asses com her ança

Quant o é ut ili zado o r ecurso de herança ent re cl asses, o const rut or da cl asse i nst anci ada deve
receber um t rat ament o adi ci onal , para que o obj et o i nst anci ado sej a cri ado com os at ri but os e
mét odos defi ni dos na super cl asse.

Nest es casos, l ogo após a defi ni ção do mét odo const rut or da cl asse, deverá ser execut ado o
mét odo const rut or da supercl asse.

Exemplo – parte 03: Método Construtor da classe Aluno

METHOD Create(cNome,dNascimento,nID)
:Create(cNome,dNascimento) // Chamada do método construtor da classe Pessoa.

::nID := ID

Return SELF




- 300 -

ADVPL Compl et o



MÓDULO 06: ADVPL Or i ent ado à obj et os I

Nest e módul o serão t r at ados os component es e obj et os da i nt erface vi sual da li nguagem
ADVPL, permi t i ndo o desenvol vi ment o de apli cações com i nt erfaces gráfi cas com si nt axe
ori ent ada a obj et os.

29. Component es da i nt er f ace vi sual do ADVPL

A linguagem ADVPL possui di versos component es vi suai s e auxiliares, os quai s podem ser
represent ados ut i lizando a est rut ura abai xo:

. Cl asses da I nt er f ace Vi sual




Tsr vobj ect
. Cl asses Aux i l i ar es


Tfont

. Cl asses de Janel as


Msdialog
Tdialog
Twindow

. Cl asses de Component es


Tcont r ol


.
Cl asses de Component es
Vi suai s
Br get ddb
Mscalend
Mscalendgr id
Msselbr
Msworkt ime
Sbut t on
Tbar
Tbit map
Tbr owsebut t on
Tbt nbmp
Tbt nbmp2
Tbut t on
Tcbr owse
Tcheckbox
Tcolor t r iangle
Tcombobox
Tfolder
Tfont
Tget
Tgr oup
Thbut t on
Tibrowser
Tlist box
Tmenu
Tmenubar
Tmet er
Tmsgr aphic
Tmsgbar
Tmult ibt n
Tmult iget
Tolecont ainer
Tpageview
Tpanel
Tr admenu
Tsbr owse
Tsay
Tscr ollbox
Tsimpleedit or
Tslider

- 301 -

ADVPL Compl et o






.
Cl asses de Component es
Vi suai s
Tsplit t er
Tt abs
Tt oolbox
Twbrowse
Vcbrowse

Cl asses da i nt er f ace v i su al

TSRVOBJECT( )

Descr i ção
Cl asse abst rat a i ni ci al de t odas as cl asses de i nt erface do ADVPL. Não deve
ser i nst anci ada di ret ament e.


Cl asses aux i l i ar es

TFONT( )

Descr i ção
Cl asse de obj et os que defi ne a font e do t ext o ut ilizado nos cont r ol es
vi suai s.


Cl asses de j an el as

MSDI ALOG( )

Descr i ção
Cl asse de obj et os que deve ser ut ili zada como padrão de j anel a para
ent rada de dados. MSDi al og é um t i po de j anel a di ál ogo modal , i st o é,
não permi t e que out ra j anel a at i va receba dados enquant o est a est i ver
at i va.

TDI ALOG( )

Descr i ção
Cl asse de obj et os do t i po di ál ogo de ent rada de dados, sendo seu uso
reservado. Recomenda- se ut i lizar a cl asse MSDi al og que é herdada dest a
cl asse.

TWI NDOW( )

Descr i ção
Cl asse de obj et os do t i po di ál ogo pri nci pal de pr ograma. Deverá exi st i r
apenas uma i nst ânci a dest e obj et o na execução do programa.


Cl asses de componen t es

TCONTROL( )

Descr i ção
Cl asse abst rat a comum ent re t odos os component es vi suai s edi t ávei s.
Não deve ser i nst anci ada di ret ament e.


- 302 -

ADVPL Compl et o



Cl asses de componen t es v i suai s

BRGETDDB( )

Descr i ção Cl asse de obj et os vi suais do t i po Gri d.

MSCALEND( )

Descr i ção Cl asse de obj et os vi suais do t i po Cal endári o.


MSCALENDGRI D( )

Descr i ção Cl asse de obj et os vi suais do t i po Grade de Períodos.

MSSELBR( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Gri d

MSWORKTI ME( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Bar r a de Período.

SBUTTON( )

Descr i ção
Cl asse de obj et os vi suais do t i po bot ão, o qual pode possui r i magens
padrões associ adas ao seu t i po.

TBAR( )

Descr i ção Cl asse de obj et os vi suais do t i po Barra Superi or .

TBI TMAP( )

Descr i ção Cl asse de obj et os vi suais que per mi t e a exi bi ção de uma i magem.

TBROWSEBUTTON( )

Descr i ção
Cl asse de obj et os vi suais do t i po bot ão no format o padrão ut ili zado
em br owses da apl i cação.

TBTNBMP( )

Descr i ção
Cl asse de obj et os vi suais do t i po bot ão, o qual permi t e que sej a
vi ncul ada uma i magem ao cont r ol e.


- 303 -

ADVPL Compl et o



TBTNBMP2 ( )

Descr i ção
Cl asse de obj et os vi suais do t i po bot ão, o qual permi t e a exi bi ção de
uma i magem ou de um popup.

TBUTTON( )

Descr i ção
Cl asse de obj et os vi suais do t i po bot ão, o qual permi t e a ut i lização de
t ext o para sua i dent i fi cação.

TCBROWSE( )

Descr i ção Cl asse de obj et os vi suais do t i po Gri d.

TCHECKBOX( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - CheckBox.

TCOLORTRI ANGLE( )

Descr i ção Cl asse de obj et os vi suais do t i po Pal et a de Cor es.

TCOMBOBOX( )

Descr i ção
Cl asse de obj et os vi suais do t i po t ComboBox, a qual cri a uma ent rada
de dados com múl t ipla escol ha com i t em defi ni do em uma l i st a
vert i cal , aci onada por F4 ou pel o bot ão esquer do l ocali zado na part e
di rei t a do cont rol e. A vari ável associ ada ao cont rol e t erá o val or de
um dos i t ens sel eci onados ou no caso de uma li st a i ndexada, o val or
de seu índi ce.

TFOLDER( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Fol der .

TGET( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Get , a qual cri a um
cont r ol e que armazena ou al t era o cont eúdo de uma vari ável at ravés
de di gi t ação. O cont eúdo da vari ável só é modi fi cado quando o
cont r ol e perde o foco de edi ção para out ro cont r ol e.

TGROUP( )

Descr i ção
Cl asse de obj et os vi suais do t i po pai nel – t Group, a qual cri a um
pai nel onde cont rol es vi suai s podem ser agrupados ou cl assi fi cados.
Nest e pai nel é cri ada uma borda com t ít ul o em vol t a dos cont rol es
agrupados.


- 304 -

ADVPL Compl et o



THBUTTON( )

Descr i ção Cl asse de obj et os vi suais do t i po bot ão com hi perl i nk.

TI BROWSER( )

Descr i ção
Cl asse de obj et os vi suais do t i po Pági na de I nt ernet , sendo necessári o
i ncl ui r a cl ausul a Browser Enabl ed= 1 no Confi g do Remot e. I NI

TLI STBOX( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Li st box, a qual cri a uma
j anel a com i t ens sel eci onávei s e barra de r ol agem. Ao sel eci onar um
i t em, uma vari ável é at ualizada com o cont eúdo do i t em sel eci onado.

TMENU( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Menu.

TMENUBAR( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Bar r a de Menu.

TMETER( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Met er, a qual exi be uma
régua ( gauge) de processament o, descr evendo o andament o de um
processo at ravés da exi bi ção de uma barra horizont al .

TMSGRAPHI C( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Gráfi co.

TMSGBAR( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Rodapé.

TMULTI BTN( )

Descr i ção Cl asse de obj et os vi suais do t i po cont r ol e - Múl t i pl os bot ões.

TMULTI GET( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e - edi ção de t ext o de
múl t ipl as linhas.


- 305 -

ADVPL Compl et o



TOLECONTAI NER( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e, a qual permi t e a cri ação de
um bot ão vi ncul ado a um obj et o OLE.

TPAGEVI EW( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e, que permi t e a vi suali zação
de arqui vos no format o gerado pel o spool de i mpressão do Prot heus.

TPANEL( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Panel , a qual permi t e
cri ar um pai nel est át i co, onde podem ser cri ados out r os cont rol es com
o obj et i vo de organi zar ou agrupar component es vi suai s.

TRADMENU( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – TRadMenu, a qual permi t e
cri ar um cont r ol e vi sual no format o Radi o But t on.

TSBROWSE( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – TSBrowse, a qual permi t e
cri ar um cont r ol e vi sual do t i po Gri d.

TSAY( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Say, a qual exi be o
cont eúdo de t ext o est át i co sobre uma j anel a ou cont r ol e pr evi ament e
defi ni dos.

TSCROLLBOX( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Scr oll box, a qual permi t e
cri ar um pai nel com scr oll desli zant es nas l at er ai s ( hori zont ai s e
vert i cai s) do cont r ol e.

TSI MPLEEDI TOR( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Si mpl eEdi t or, a qual
permi t e cri ar um cont rol e vi sual para edi ção de t ext os com r ecur sos
si mpl es, como o Not ePad®

TSLI DER( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Slider, a qual permi t e
cri ar um cont r ol e vi sual do t i po bot ão desli zant e.

TSPLI TTER( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Spli t t er, a qual permi t e
cri ar um cont r ol e vi sual do t i po di vi sor.

- 306 -

ADVPL Compl et o



TTABS( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – TTabs, a qual permi t e
cri ar um cont r ol e vi sual do t i po past a.

TTOOLBOX( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – t Tool box, a qual permi t e
cri ar um cont r ol e vi sual para agrupar di fer ent es obj et os.

TWBROWSE( )

Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – TWBrowse, a qual permi t e
cri ar um cont r ol e vi sual do t i po Gri d.

VCBROWSE( )
Descr i ção
Cl asse de obj et os vi suais do t i po cont r ol e – VCBrowse, a qual permi t e
cri ar um cont r ol e vi sual do t i po Gri d.


Document ação dos component es da i nt er f ace v i su al

Os component es da i nt er face vi sual da linguagem ADVPL ut ili zados nest e t r ei nament o est ão
document ados na seção Gui a de Referênci a, ao fi nal dest e mat eri al .

Para vi sualizar a document ação compl et a de t odos os component es menci onados nest e
capít ul o deve ser acesso o si t e DEM – Document ação El et r ôni ca Mi crosi ga
( dem.mi crosi ga.com.br) confor me abai xo:









- 307 -

ADVPL Compl et o



29.1. Par t i cul ar i dades dos component es v i suai s


29.1.1. Conf i gur ando as cor es par a os component es

Os component es vi suai s da li nguagem ADVPL ut ilizam o padrão de cores RGB.

As cor es dest e padrão são defi ni das pel a seguint e fór mul a, a qual deve ser aval i ada t endo
como base a pal et a de cor es no format o RGB:


nCor : = n Ver mel ho + ( nVer de * 25 6) + ( n Azul * 65 536)





Fi gu r a: Pal et a de cor es no f or mat o RGB

Com base nest a pal et a, podemos defi ni r os val ores das segui nt es cores bási cas:

Cor R G B Val or
Pret o 0 0 0 0
Azul 0 0 255 16711680
Verde 0 255 0 65280
Ci ano 0 255 255 16776960
Vermel ho 255 0 0 255
Rosa 255 0 255 16711935
Amarel o 255 255 0 65535
Branco 255 255 255 16777215



- 308 -

ADVPL Compl et o



Para at ri bui r as cor es aos obj et os vi suai s devem ser obser vados os at r i but os ut ili zados para
est es fi ns em cada obj et o, como por exempl o:

MSDI ALOG( )

nCl r Pane Cor de fundo do pai nel
nCl r Tex t Cor da font e das l et ras do pai nel


TSAY( )

nCl r Pane Cor de fundo do pai nel
nCl r Tex t Cor da font e das l et ras do pai nel


Função RGB( )

A li nguagem ADVPL possui a função RGB( ) a qual ret orna o val or da cor a ser defi ni do, de
acordo com a paramet ri zação de cada um dos el ement os da pal et a RGB.


RGB( nRed, nGr een, n Bl u e)

nRed Val or de 0- 255 para o el ement o vermel ho da pal et a RGB
nGr een Val or de 0- 255 para o el ement o verde da pal et a RGB
nBl ue Val or de 0- 255 para o el ement o azul da pal et a RGB
Ret or no Val or a ser defi ni do para o at ri but o cor do component e


- 309 -

ADVPL Compl et o



30. Apl i cações com a i nt er f ace vi sual do ADVPL

A li nguagem ADVPL possui int erfaces vi suai s pré- defi ni das que auxiliam no desenvol vi ment o
de apl i cações mai s compl et as, combi nando est as i nt erfaces com os component es vi suais
demonst rados ant eri or ment e.

Di dat i cament e as i nt erfaces vi suai s pré- defi ni das da li nguagem ADVPL podem ser di vidi das em
t rês grupos:

E Capt ur a de i nf or mações si mpl es ou Mul t i - Get s;
E Capt ur a de múl t i pl as i nf or mações ou Mu l t i - Li nes;
E Bar r as de bot ões

30.1. Capt ur a de i nf or mações si mpl es ( Mul t i - Get s)

Em ADVPL, as t el as de capt ura de i nformações compost as por múl t i pl os campos di gi t ávei s
acompanhados de seus r espect i vos t ext os expl i cat i vos são comument e chamados de
Enchoi ces.

Um Enchoi ce pode ser facil ment e ent endi da como di versos conj unt os de obj et os TSay e TGet
ali nhados de forma a vi suali zar ou capt urar i nformações, nor mal ment e vi ncul adas a arqui vos
de cadast r os ou movi ment ações si mpl es.

Abai xo t emos a vi sualização de uma Enchoi ce para o arqui vo padr ão do ERP Pr ot heus de
Cadast r o de Cl i ent es ( “ SA1” ) :



Fi gu r a: Enchoi ce do Cadast r o de Cl i ent es do ERP Pr ot h eu s


- 310 -

ADVPL Compl et o



A li nguagem ADVPL per mi t e a i mpl ement ação da Enchoi ce de duas for mas si mil ares:

E Função Enchoi ce: Si nt axe t radi ci onal ment e ut ili zada em ADVPL, a qual não ret orna
um obj et o para a apl i cação chamadora;

E Cl asse MsMGet : Cl asse do obj et o Enchoi ce, a qual permit e a i nst anci ação di ret a de um
obj et o, t ornando- o di sponível na apli cação chamadora.

A ut ili zação de um ou out ro obj et o depende unicament e da escol ha do desenvol vedor j á que os
parâmet ros para a função Enchoi ce e para o mét odo New( ) da cl asse MsMGet são os mesmos,
l embrando que para mant er a coerênci a com uma apli cação escri t a em ori ent ação a obj et os
deverá ser ut i lizada a classe MsMGet ( ) .

30.1.1. Enchoi ce( )

E Si nt ax e: Enchoi ce( cAl i as, n Reg, nOpc, aCRA, cLet r a, cTex t o, aAcho, aPos,
aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWnd, l F3,
l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )

E Ret or no: Ni l
E Par âmet r os:

cAl i as Tabel a cadast r ada no Di ci onári o de Tabel as ( SX2) que será
edi t ada
nReg Parâmet r o não ut ili zado
nOpc Númer o da li nha do aRot ina que defi ni rá o t i po de edi ção
( I ncl usão, Al t eração, Excl usão, Vi sualização)
aCRA Parâmet r o não ut ili zado
cLet r a Parâmet r o não ut ili zado
cTex t o Parâmet r o não ut ili zado
aAcho Vet or com nome dos campos que serão exi bi dos. Os campos
de usuári o sempre serão exi bidos se não exi st i r no par âmet ro
um el ement o com a expressão " NOUSER"
aPos Vet or com coordenadas para cri ação da enchoi ce no format o
{ < t op> , < l eft > , < bot t om> , < ri ght > }
aCpos Vet or com nome dos campos que poderão ser edi t ados
nModel o Se for di fer ent e de 1 desabili t a execução de gat ilhos
est r angei ros
nCol Men s Parâmet r o não ut ili zado
cMensagem Parâmet r o não ut ili zado
cTudoOk Expressão par a val i dação da Enchoi ce
oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser á cri ada.
l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3
para ut ili zar vari ávei s de memóri a
l Memor i a I ndi ca se a enchoi ce ut i li zará vari ávei s de memóri a ou os
campos da t abel a na edi ção
l Col umn I ndi ca se a apresent ação dos campos ser á em forma de
col una
caTel a Nome da vari ável t i po "pri vat e" que a enchoi ce ut ili zará no
l ugar da propri edade aTel a
l NoFol der I ndi ca se a enchoi ce não i rá ut ili zar as Past as de Cadast r o
( SXA)
l Pr oper t y I ndi ca se a enchoi ce não ut ili zará as vari ávei s aTel a e aGet s,
soment e suas propri edades com os mesmos nomes

- 311 -

ADVPL Compl et o




Ex empl o: Ut i l i zação da f unção Enchoi ce( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da função Enchoice() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwEnch()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)

Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)



- 312 -

ADVPL Compl et o



Exemplo (continuação):

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL
RegToMemory("SA1", If(nOpc==3,.T.,.F.))

Enchoice(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/, /*cTexto*/, ;
aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/,/*cTudoOk*/, oDlg, lF3, lMemoria, lColumn,;
caTela, lNoFolder, lProperty)

ACTIVATE MSDIALOG oDlg CENTERED

Return


30.1.2. MsMGet ( )

E Si nt ax e: MsMGet ( ) : New ( cAl i as, nReg, nOpc, aCRA, cLet r a, cTex t o, aAcho,
aPos, aCpos, nModel o, n Col Mens, cMen sagem, cTudoOk , oWnd, l F3,
l Memor i a, l Col umn, caTel a, l NoFol der , l Pr oper t y )

E Ret or no: oMsMGet ¬ obj et o do t i po MsMGet ( )
E Par âmet r os:

cAl i as Tabel a cadast r ada no Di ci onári o de Tabel as ( SX2) que será
edi t ada
nReg Parâmet r o não ut ili zado
nOpc Númer o da li nha do aRot ina que defi ni rá o t i po de edi ção
( I ncl usão, Al t eração, Excl usão, Vi sualização)
aCRA Parâmet r o não ut ili zado
cLet r a Parâmet r o não ut ili zado
cTex t o Parâmet r o não ut ili zado
aAcho Vet or com nome dos campos que serão exi bi dos. Os campos
de usuári o sempre serão exi bidos se não exi st i r no par âmet ro
um el ement o com a expressão " NOUSER"
aPos Vet or com coordenadas para cri ação da enchoi ce no format o
{ < t op> , < l eft > , < bot t om> , < ri ght > }
aCpos Vet or com nome dos campos que poderão ser edi t ados
nModel o Se for di fer ent e de 1 desabili t a execução de gat ilhos
est r angei ros
nCol Men s Parâmet r o não ut ili zado
cMensagem Parâmet r o não ut ili zado
cTudoOk Expressão par a val i dação da Enchoi ce
oWnd Obj et o ( j anel a, pai nel , et c.) onde a enchoi ce ser á cri ada.
l F3 I ndi ca se a enchoi ce est a sendo cri ada em uma consul t a F3
para ut ili zar vari ávei s de memóri a

- 313 -

ADVPL Compl et o


l Memor i a I ndi ca se a enchoi ce ut i li zará vari ávei s de memóri a ou os
campos da t abel a na edi ção
l Col umn I ndi ca se a apresent ação dos campos ser á em forma de
col una
caTel a Nome da vari ável t i po "pri vat e" que a enchoi ce ut ili zará no
l ugar da propri edade aTel a
l NoFol der I ndi ca se a enchoi ce não i rá ut ili zar as Past as de Cadast r o
( SXA)
l Pr oper t y I ndi ca se a enchoi ce não ut ili zará as vari ávei s aTel a e aGet s,
soment e suas propri edades com os mesmos nomes

Ex empl o: Ut i l i zação do obj et o MsMGet ( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsMget() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwMsGet()

Private cCadastro := " Cadastro de Clientes"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModEnc" , 0, 2}}

DbSelectArea("SA1")
DbSetOrder(1)

MBrowse(6,1,22,75,"SA1")

Return

User Function ModEnc(cAlias,nReg,nOpc)
Local aCpoEnch := {}
Local aAlter := {}

Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,400,600}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

- 314 -

ADVPL Compl et o


Exemplo (continuação):

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)

RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,;
/*cTexto*/, aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/, /*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,;
lNoFolder, lProperty)

oDlg:lCentered := .T.
oDlg:Activate()

Return


30.2. Capt ur a de múl t i pl as i nf or mações ( Mul t i - Li nes)

A li nguagem ADVPL permi t e a ut ili zação de basi cament e doi s t i pos de obj et os do t i po gri d, ou
como t ambém são conheci dos: mul t i - li ne:

E Gr i ds di gi t áv ei s: per mi t em a vi sualização e capt ura de i nformações, comument e
ut ili zados em i nt erfaces de cadast r o e manut enção, t ai s como:

´ MSGETDB( )
´ MSGETDADOS( )
´ MSNEWGETDADOS( )

E Gr i ds n ão di gi t áv ei s: permi t em soment e a vi suali zação de i nformações, comument e
ut ili zados como browses do ERP Pr ot heus, t ai s como:

´ TWBROWSE( )
´ MAWNDBROWSE( )
´ MBROWSE( )

Nest e t ópi co serão t rat adas as gri ds di gi t ávei s di sponívei s na li nguagem ADVPL para o
desenvol vi ment o de i nt er faces de cadast r os e manut enção de i nformações.

- 315 -

ADVPL Compl et o



30.2.1. MsGet DB( )

A cl asse de obj et os vi suai s MsGet DB( ) permi t e a cri ação de um gri d di gi t ável com uma ou mai s
col unas, baseado em uma t abel a t emporári a.

E Si nt ax e: MsGet DB( ) : New ( nTop, nLef t , n Bot t om, nRi ght , nOpc, cLi nh aOk ,
cTudoOk , cI n i Cpos, l Del et e, aAl t er , nFr eeze, l Empt y , u Par 1, cTRB,
cFi el dOk , l Condi ci on al , l Append, oWnd, l Di spar os, uPar 2, cDel Ok ,
cSuper Del )

E Ret or no: oMsGet DB¬ obj et o do t i po MsGet DB( )

E Par âmet r os:

nTop Di st anci a ent re a MsGet DB e o ext r emi dade superi or do
obj et o que a cont ém.
nLef t Di st anci a ent re a MsGet DB e o ext r emi dade esquerda do
obj et o que a cont ém.
nBot t om Di st anci a ent re a MsGet DB e o ext r emi dade inferi or do obj et o
que a cont ém.
nRi ght

Di st anci a ent re a MsGet DB e o ext r emi dade di rei t a do obj et o
que a cont ém.
nOpc Posi ção do el ement o do vet or aRot i na que a MsGet DB usará
como referênci a.
cLi nh aOk Função execut ada para vali dar o cont ext o da linha at ual do
aCol s.
cTudoOk Função execut ada para vali dar o cont ext o ger al da MsGet DB
( t odo aCol s) .
cI ni Cpos Nome dos campos do t ipo caract er que ut ili zarão i ncrement o
aut omát i co. Est e parâmet r o deve ser no for mat o “ + < nome
do pri mei ro campo> + < nome do segundo campo> + . ..” .
l Del et e Habili t a a opção de excl ui r li nhas do aCol s. Val or padrão
fal so.
aAl t er Vet or com os campos que poderão ser al t erados.
nFr eeze I ndi ca qual col una não fi cara congel ada na exi bição.
l Empt y Habili t a validação da pr i mei ra col una do aCol s para est a não
poder est ar vazi a. Val or padrão fal so.
uPar 1 Parâmet r o r eservado.
cFi el dOk Função execut ada na vali dação do campo.
cTRB Ali as da t abel a t emporári a.
l Con di ci on al Reser vado
l Appen d I ndi ca se a MsGet DB i ra cri ar uma linha em branco
aut omat i cament e quando for i nclusão.
cDel Ok Função execut ada para vali dar a excl usão de uma li nha do
aCol s.
l Di spar os I ndi ca se será ut ili zado o Di ci onári o de Dados para consul t a
padrão, i ni ci ali zação padrão e gat i l hos.
uPar 2 Parâmet r o r eservado.
cSuper Del - Função execut ada quando pressi onada as t ecl as
< Ct rl > + < Del et e> .
oWnd Obj et o no qual a MsGet DB será cri ada.




- 316 -

ADVPL Compl et o


E Apar ênci a:





E Var i áv ei s pr i v at e:

aRot i n a Vet or com as r ot i nas que ser ão execut adas na MBrowse e
que defi ni ra o t i po de operação que est a sendo execut ada
( inclusão, al t eração, excl usão, vi suali zação, pesqui sa, ...) no
for mat o:
{ cTi t ul o, cRot i na, nOpção, nAcesso} , aonde:
nOpção segue o padrão do ERP Prot heus para:
1- Pesqui sar
2- Vi suali zar
3- I ncl ui r
4- Al t erar
5- Excl ui r
aHeader Vet or com i nformações das col unas no format o:

{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,;
cVali dação, cReservado, cTi po, xReservado1, xReser vado2}

A t abel a t emporári a ut ili zada pel a MsGet DB deverá ser cri ada
com base no aHeader mai s um úl t i mo campo t i po l ógi co que
det ermi na se a l i nha foi excl uída.


l Ref r esh Vari ável t i po l ógi ca para uso r eser vado.


- 317 -

ADVPL Compl et o



E Var i áv ei s pú bl i cas:

nBr Li n I ndi ca qual a li nha posi ci onada do aCol s.

E Funções de v al i dação:

cLi nh aOk Função de val i dação na mudança das li nhas da gri d. Não
pode ser defi ni da como St at i c Funct i on.
cTudoOk Função de val idação da confi rmação da operação com o gri d.
Não pode ser defi ni da como St at i c Funct i on.

E Mét odos adi ci on ai s:

For ceRef r esh( ) At uali za a MsGet DB com a t abel a e posi ci ona na pri mei ra
linha.

Ex empl o: Ut i l i zação do obj et o MsGet DB( )


#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | GETDBSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MsGetDB() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDbSA1()

Local nI
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}

Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 318 -

ADVPL Compl et o


Exemplo (continuação):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End

AADD(aStruct,{"FLAG","L",1,0})

cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)

oDlg := MSDIALOG():New(000,000,300,400, “MsGetDB – SA1”,,,,,,,,,.T.)

oGetDB := MsGetDB():New(05,05,145,195,3,"U_LINHAOK", "U_TUDOOK", "+A1_COD", ;
.T.,{"A1_NOME"},1,.F.,,cCriaTrab,"U_FIELDOK",,.T.,oDlg, .T., ,"U_DELOK",;
"U_SUPERDEL")

oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 319 -

ADVPL Compl et o



30.2.2. MsGet Dados( )

A cl asse de obj et os vi suai s MsGet Dados( ) per mi t e a cri ação de um gri d di git ável com uma ou
mai s col unas, baseado em um array.

E Si nt ax e: MsGet Dados( ) : New ( nTop, nLef t , nBot t om, nRi ght , n Opc, cLi nh aOk ,
cTudoOk , cI ni Cpos, l Del et e, aAl t er , uPar 1, l Empt y , nMax , cFi el dOk ,
cSuper Del , uPar 2, cDel Ok , oWnd)

E Ret or no: oMsGet Dados ¬ obj et o do t i po MsGet Dados( )

E Par âmet r os:

nTop Di st anci a ent re a MsGet Dados e o ext r emi dade superi or do
obj et o que a cont ém.
nLef t Di st anci a ent re a MsGet Dados e o ext r emi dade esquerda do
obj et o que a cont ém.
nBot t om Di st anci a ent re a MsGet Dados e o ext r emi dade i nferi or do
obj et o que a cont ém.
nRi ght

Di st anci a ent re a MsGet Dados e o ext remi dade di rei t a do
obj et o que a cont ém.
nOpc Posi ção do el ement o do vet or aRot i na que a MsGet Dados
usará como referenci a.
cLi nh aOk Função execut ada par a vali dar o cont ext o da linha at ual do
aCol s.
cTudoOk Função execut ada para val i dar o cont ext o geral da
MsGet Dados ( t odo aCol s) .
cI ni Cpos Nome dos campos do t i po caract er que ut ili zarão i ncrement o
aut omát i co. Est e parâmet r o deve ser no for mat o “ + < nome
do pri mei ro campo> + < nome do segundo campo> + . ..” .
l Del et e Habili t a excl ui r li nhas do aCol s. Val or padrão fal so.
aAl t er Vet or com os campos que poderão ser al t erados.
uPar 1 Parâmet r o r eservado.
l Empt y Habili t a validação da pr i mei ra col una do aCol s para est a não
poder est ar vazi a. Val or padrão fal so.
nMax Númer o máxi mo de l i nhas permi t idas. Val or padrão 99.
cFi el dOk Função execut ada na vali dação do campo.
cSuper Del Função execut ada quando pressi onada as t ecl as
< Ct rl > + < Del et e> .
uPar 2 Parâmet r o r eservado.
cDel Ok Função execut ada para vali dar a excl usão de uma li nha do
aCol s.
oWnd Obj et o no qual a MsGet Dados será cri ada.


- 320 -

ADVPL Compl et o


E Apar ênci a:





E Var i áv ei s pr i v at e:

aRot i n a Vet or com as r ot i nas que ser ão execut adas na MBrowse e
que defi ni ra o t i po de operação que est a sendo execut ada
( inclusão, al t eração, excl usão, vi suali zação, pesqui sa, ...) no
for mat o:
{ cTi t ul o, cRot i na, nOpção, nAcesso} , aonde:
nOpção segue o padrão do ERP Prot heus para:
6- Pesqui sar
7- Vi suali zar
8- I ncl ui r
9- Al t erar
10- Excl ui r
aHeader Vet or com i nformações das col unas no format o:

{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,;
cVali dação, cReservado, cTi po, xReservado1, xReser vado2}

A t abel a t emporári a ut ili zada pel a MsGet DB deverá ser cri ada
com base no aHeader mai s um úl t i mo campo t i po l ógi co que
det ermi na se a l i nha foi excl uída.


l Ref r esh Vari ável t i po l ógi ca para uso r eser vado.


- 321 -

ADVPL Compl et o



E Var i áv ei s pú bl i cas:

N I ndi ca qual a li nha posi ci onada do aCol s.

E Funções de v al i dação:

cLi nh aOk Função de val i dação na mudança das li nhas da gri d. Não
pode ser defi ni da como St at i c Funct i on.
cTudoOk Função de val idação da confi rmação da operação com o gri d.
Não pode ser defi ni da como St at i c Funct i on.

E Mét odos adi ci on ai s:

For ceRef r esh( ) At uali za a MsGet Dados com a t abel a e posi ci ona na pri mei ra
linha.
Hi de( ) Ocul t a a MsGet Dados.
Show ( ) Most ra a MsGet Dados.


Ex empl o: Ut i l i zação do obj et o MsGet Dados( )


#include “protheus.ch”

/*/
+-----------------------------------------------------------------------------
| Função | GETDADOSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto MSGETADOS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function GetDadoSA1()

Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}

Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")


- 322 -

ADVPL Compl et o



Exemplo (continuação):

While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End

AADD(aCols,Array(nUsado+1))

For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next

aCols[1][nUsado+1] := .F.

oDlg := MSDIALOG():New(000,000,300,400, “MsGetDados – SA1”,,,,,,,,,.T.)

oGetDados := MsGetDados():New(05, 05, 145, 195, 4, "U_LINHAOK", "U_TUDOOK",;
"+A1_COD", .T., {"A1_NOME"}, , .F., 200, "U_FIELDOK", "U_SUPERDEL",,;
"U_DELOK", oDlg)

oDlg:lCentered := .T.
oDlg:Activate()

Return

User Function LINHAOK()
ApMsgStop("LINHAOK")
Return .T.

User Function TUDOOK()
ApMsgStop("LINHAOK")
Return .T.

User Function DELOK()
ApMsgStop("DELOK")
Return .T.

User Function SUPERDEL()
ApMsgStop("SUPERDEL")
Return .T.

User Function FIELDOK()
ApMsgStop("FIELDOK")
Return .T.



- 323 -

ADVPL Compl et o



30.2.3. MsNew Get Dados( )

A cl asse de obj et os vi suai s MsNewGet Dados( ) permi t e a cri ação de um gri d di git ável com uma
ou mai s col unas, baseado em um array.

E Si nt ax e: MsNew Get Dados( ) : New ( nSuper i or , nEsqu er da ,n I n f er i or , nDi r ei t a,
nOpc, cLi nOk , cTu doOk , cI ni Cpos, aAl t er GDa, nFr eeze, nMax ,
cFi el dOk , cSuper Del , cDel Ok , oDLG, aHeader , aCol s)

E Ret or no: oMsGet Dados ¬ obj et o do t i po MsNew Get Dados( )

E Par âmet r os:

nSuper i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade superi or
do obj et o que a cont em
nEsqu er da Di st anci a ent re a MsNewGet Dados e o ext r emi dade esquerda
do obj et o que a cont em
nI nf er i or Di st anci a ent re a MsNewGet Dados e o ext r emi dade i nferi or do
obj et o que a cont em
nDi r ei t a Di st anci a ent re a MsNewGet Dados e o ext r emi dade di rei t a do
obj et o que a cont em
nOpc Operação em execução: 2- Vi suali zar, 3- I ncl ui r, 4- Al t erar , 5-
Excl ui r
cLi nOk Função execut ada para vali dar o cont ext o da l i nha at ual do
aCol s
cTudoOk Função execut ada para vali dar o cont ext o geral da
MsNewGet Dados ( t odo aCol s)
cI ni Cpos Nome dos campos do t ipo caract er que ut i lizarão i ncrement o
aut omát i co.
aAl t er GDa Campos al t erávei s da Get Dados
nFr eeze Campos est át i cos na Get Dados, part i ndo sempr e da posi ção
i ni ci al da get dados aonde:
1- Pri mei ro campo congel ado
2- Pri mei ro e segundo campos congel ados...
nMax Númer o máxi mo de l i nhas permi t idas. Val or padrão 99
cFi el dOk Função execut ada na vali dação do campo
cSuper Del Função execut ada quando pr essi onada as t ecl as
< Ct rl > + < Del et e>
cDel Ok Função execut ada para vali dar a excl usão de uma li nha do
aCol s
oDLG Obj et o no qual a MsNewGet Dados será cri ada
aHeader Array a ser t r at ado i nt er nament e na MsNewGet Dados como
aHeader
aCol s Array a ser t r at ado i nt er nament e na MsNewGet Dados como
aCol s


- 324 -

ADVPL Compl et o


E Apar ênci a:





E Var i áv ei s pr i v at e:

aRot i n a Vet or com as r ot i nas que ser ão execut adas na MBrowse e
que defi ni ra o t i po de operação que est a sendo execut ada
( inclusão, al t eração, excl usão, vi suali zação, pesqui sa, ...) no
for mat o:
{ cTi t ul o, cRot i na, nOpção, nAcesso} , aonde:

nOpção segue o padrão do ERP Prot heus para:
1- Pesqui sar
2- Vi suali zar
3- I ncl ui r
4- Al t erar
5- Excl ui r
aHeader Vet or com i nformações das col unas no format o:

{ cTi t ul o, cCampo, cPi ct ure, nTamanho, nDeci mai s,;
cVali dação, cReservado, cTi po, xReservado1, xReser vado2}

A t abel a t emporári a ut ili zada pel a MsGet DB deverá ser cri ada
com base no aHeader mai s um úl t i mo campo t i po l ógi co que
det ermi na se a l i nha foi excl uída.

l Ref r esh Vari ável t i po l ógi ca para uso r eser vado.

- 325 -

ADVPL Compl et o



E Var i áv ei s pú bl i cas:

N I ndi ca qual a li nha posi ci onada do aCol s.

E Funções de v al i dação:

cLi nh aOk Função de val i dação na mudança das li nhas da gri d. Não
pode ser defi ni da como St at i c Funct i on.
cTudoOk Função de val idação da confi rmação da operação com o gri d.
Não pode ser defi ni da como St at i c Funct i on.

E Mét odos adi ci on ai s:

For ceRef r esh( ) At uali za a MsNewGet Dados com a t abel a e posi ci ona na
pri mei ra linha.
Hi de( ) Ocul t a a MsNewGet Dados.
Show ( ) Most ra a MsNewGet Dados.

Ex empl o: Ut i l i zação dos obj et os MsNew Get Dados( ) e MsMGet ( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização dos objetos |
| | MsNewGetDados() e MsMGet() combinados |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGetD()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}


- 326 -

ADVPL Compl et o



Exemplo (continuação):

Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.;
cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

- 327 -

ADVPL Compl et o



Exemplo (continuação):

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,;
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)

oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;
nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return

- 328 -

ADVPL Compl et o



30.2.3. 1. Def i ni n do cor es per sonal i zadas par a o obj et o MsNew Get Dados( )

Conforme vi st o no t ópico sobr e defi ni ção das propri edades de cor es para os component es
vi suai s, cada obj et o possui caract eríst i cas que devem ser respei t adas para corr et a ut i lização
dest e r ecurso.

E At r i but os adi ci on ai s:

l UseDef aul t Col or s At ri but o que deverá ser defi ni do como .F. par a que as
al t erações nas cor es sej am permi t i das.


E Mét odos adi ci on ai s:

Set Bl k Back Col or Mét odo que defi ne a cor que será ut ili zada para cada li nha do
gri d. Não é necessári o ut ilizar o mét odo Refr esh( ) após a
defi ni ção da cor por est e mét odo.

E Apar ênci a:






- 329 -

ADVPL Compl et o



Ex empl o: Def i ni ndo cor es per son al i zadas par a o obj et o MsNew Get Dados( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização dos objetos |
| | MsNewGetDados() e MsMGet() combinados e tratamento de cores |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function MrbwGtCl()

Private cCadastro := "Pedidos de Venda"
Private aRotina := {{"Pesquisar" , "axPesqui" , 0, 1},;
{"Visualizar" , "U_ModGtd" , 0, 2},;
{"Incluir" , "U_ModGtd" , 0, 3}}

DbSelectArea("SC5")
DbSetOrder(1)

MBrowse(6,1,22,75,"SC5")

Return

User Function ModGtd(cAlias,nReg,nOpc)

Local nX := 0
Local nUsado := 0

Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999


- 330 -

ADVPL Compl et o


Exemplo (continuação):

Local cFieldOk := "AllwaysTrue"
Local cSuperDel := ""
Local cDelOk := "AllwaysFalse"
Local aHeader := {}
Local aCols := {}
Local aAlterGDa := {}

Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]

DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterEnch := aClone(aCpoEnch)

DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)

While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If !(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3-
>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End

aAlterGDa := aClone(aCpoGDa)

nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End


- 331 -

ADVPL Compl et o



Exemplo (continuação):

If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado

IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF

Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif

oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)

RegToMemory("SC5", If(nOpc==3,.T.,.F.))

oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;
aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)

oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;
cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
cDelOk, oDLG, aHeader, aCols)

// Tratamento para definição de cores específicas,
// logo após a declaração da MsNewGetDados

oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})

oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()

Return


- 332 -

ADVPL Compl et o



Exemplo (continuação):

// Função para tratamento das regras de cores para a grid da MsNewGetDados

Static Function GETDCLR(aLinha,nLinha,aHeader)

Local nCor2 := 16776960 // Ciano - RGB(0,255,255)
Local nCor3 := 16777215 // Branco - RGB(255,255,255)
Local nPosProd := aScan(aHeader,{|x| Alltrim(x[2]) == "C6_PRODUTO"})
Local nUsado := Len(aHeader)+1
Local nRet := nCor3

If !Empty(aLinha[nLinha][nPosProd]) .AND. aLinha[nLinha][nUsado]
nRet := nCor2
ElseIf !Empty(aLinha[nLinha][nPosProd]) .AND. !aLinha[nLinha][nUsado]
nRet := nCor3
Endif

Return nRet





























- 333 -

ADVPL Compl et o



30.3. Bar r as de bot ões

A linguagem ADVPL permi t e a i mpl ement ação de bar ras de bot ões ut ili zando funções pré-
defi ni das desenvol vi das com o obj et i vo de facili t ar sua ut ilização, ou at ravés da ut ili zação
di ret a dos component es vi suai s di sponívei s. Dent re os r ecur sos da li nguagem que podem ser
ut ili zados com est a fi nali dade serão abordados:

E Função Ench oi ceBar : Sint axe t radi ci onal ment e ut ili zada em ADVPL, a qual não
ret orna um obj et o par a a apli cação chamadora;

E Cl asse TBar : Cl asse do obj et o TBar( ) , a qual permi t e a i nst anci ação di ret a de um
obj et o do t i po bar ra de bot ões superi or, t ornando- o di sponível na apli cação chamadora.

E Cl asse But t onBar : Cl asse do obj et o But t onBar( ) , a qual permi t e a i nst anci ação di ret a
de um obj et o bar ra de bot ões genéri co, o qual pode ser ut ili zado em qual quer posi ção
da t el a, t ornando- o di sponível na apli cação chamadora.


30.3.1. Enchoi ceBar ( )

Função que cri a uma barra de bot ões no format o padrão ut ili zado pel as i nt erfaces de cadast r o
da apli cação Prot heus.

Est a bar ra possui os bot ões padrões para confirmar ou cancel ar a i nt erface e ai nda permi t e a
adi ção de bot ões adi ci onai s com a ut ili zação do parâmet r o aBut t ons.


E Si nt ax e:


Enchoi ceBar ( oDl g, bOk , bCancel , l MsgDel , aBut t ons, nRecno, cAl i as)


E Par âmet r os:

oDl g Di al og onde i rá cri ar a barra de bot ões
bOk Bl oco de códi go a ser execut ado no bot ão Ok
bCancel Bl oco de códi go a ser execut ado no bot ão Cancel ar
l MsgDel Exi be di al og para confi r mar a excl usão
aBut t ons
Array cont endo bot ões adi ci onai s.
aArray[ n] [ 1] - > I magem do bot ão
aArray[ n] [ 2] - > bl oco de códi go cont endo a ação do bot ão
aArray[ n] [ 3] - > t ít ul o do bot ão
nRecn o Regi st ro a ser posi ci onado após a execução do bot ão Ok.
cAl i as
Ali as do regi st r o a ser posi ci onado após a execução do bot ão
Ok. Se o parâmet r o nRecno for i nformado, o cAl i as passa ser
obri gat óri o.

E Apar ênci a:





- 334 -

ADVPL Compl et o


Ex empl o: Ut i l i zação da f unção Enchoi ceBar ( )


#include "protheus.ch"

/*/
+-----------------------------------------------------------------------------
| Função | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização da função |
| | EnchoiceBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function DEnchBar()
Local oDlg, oBtn
Local aButtons := {}

DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd

AADD( aButtons, {"HISTORIC", {|| TestHist()}, "Histórico...",;
"Histórico",{|| .T.}} )

@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg

ACTIVATE MSDIALOG oDlg ;
ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))

Return















- 335 -

ADVPL Compl et o



30.3.2. TBar ( )

Cl asse de obj et os vi suai s que permi t e a i mpl ement ação de um component e do t i po barr a de
bot ões para a part e superi or de uma j anel a previ ament e defi ni da.

E Si nt ax e: New ( oWnd, nBt nWi dt h, nBt nHei ght , l 3D, cMode, oCur sor , cResour ce,
l NoAut oAdj u st )

E Ret or no: oTBar ¬ obj et o do t i po TBar ( )

E Par âmet r os:

oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
nBt nWi dt h Numéri co, opci onal . Lar gura do bot ão cont i do na barr a
nBt nHei ght Numéri co, opci onal . Al t ura do bot ão cont i do na barra
l 3D Lógi co, opci onal . Defi ne t i po da barra
cMode Não ut i lizado.
oCur sor
Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a
barra.
cResour ce
Caract er , opci onal . I magem do r ecurso a ser i nseri do como
fundo da bar ra.
l NoAut oAdj u st Lógi co.

E Apar ênci a:





Ex empl o: Ut i l i zação da f unção Enchoi ceBar ( )


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------------
| Função | TSTBAR | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/

User Function TstTBar()
Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

- 336 -

ADVPL Compl et o



Exemplo (continuação):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;
{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;
{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;
{||},oTBar,'Preço' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return



30.3.3. But t onBar

A si nt axe But t on Bar é a forma cl ássi ca ut ili zada na li nguagem ADVPL para i mpl ement ar um
obj et o da cl asse TBar( ) , o qual possui as caract eríst i cas menci onadas no t ópi co ant eri or .

E Si nt ax e:


DEFI NE BUTTONBAR oBar SI ZE nWi dt h, nHei ght 3D MODE OF oDl g
CURSOR


E Ret or no: ( ) .

E Par âmet r os:

oBar Obj et o do t i po TBar( ) que será cri ado com a ut i li zação da
si nt axe But t onBar( ) .
nWi dt h Numéri co, opci onal . Lar gura do bot ão cont i do na barr a.
nHei ght Numéri co, opci onal . Al t ura do bot ão cont i do na barra.
3D Se defi ni do habilit a a visuali zação em 3D da barra de bot ões.
oDl g Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
MODE Defi ne a forma de ori ent ação do obj et o But t onBar ut ili zando
os segui nt es t ermos pré- defi ni dos:
TOP, BOTTOM, FLOAT

CURSOR Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e
a barr a.


- 337 -

ADVPL Compl et o


A si nt axe But t onBar requer a adi ção dos bot ões como recur sos adi ci onai s da barr a
previ ament e defi ni da ut ilizando a si nt axe abai xo:

E Bot ões: BUTTON RESOURCE

E Si nt ax e adi ci onal :


DEFI NE BUTTON RESOURCE cBi t Map OF oBar ACTI ON cAcao TOOLTI P
cTex t o


E Par âmet r os:

cBi t Map Nome da i magem di sponível na apli cação.
oBar Obj et o do t i po TBar( ) no qual o bot ão será adi ci onado.
cAcao Função ou l i st a de expr essões que det ermi na a ação que será
real i zada pel o bot ão.
cTex t o Text o no est il o “ t ool t i p t ext ” que será exi bi do quando o
cursor do mouse for posi ci onado sobre o bot ão na barra de
ferrament as.

E Apar ênci a:





Ex empl o: Ut i l i zação da si nt ax e But t on Bar


#include 'protheus.ch'

/*/
+-----------------------------------------------------------------------
| Função | TstBBar | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/

User Function TstBBar()

Local oDlg
Local oBtn1
Local oBtn2

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - BUTTONBAR',,,,,,,,,.T.)

DEFINE BUTTONBAR oBar SIZE 25,25 3D TOP OF oDlg

- 338 -

ADVPL Compl et o



Exemplo (continuação):

DEFINE BUTTON RESOURCE "S4WB005N" OF oBar ACTION NaoDisp() TOOLTIP "Recortar"
DEFINE BUTTON RESOURCE "S4WB006N" OF oBar ACTION NaoDisp() TOOLTIP "Copiar"
DEFINE BUTTON RESOURCE "S4WB007N" OF oBar ACTION NaoDisp() TOOLTIP "Colar"
DEFINE BUTTON oBtn1 RESOURCE "S4WB008N" OF oBar GROUP;
ACTION Calculadora() TOOLTIP "Calculadora"

oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N" OF oBar ACTION Agenda() TOOLTIP "Agenda"
DEFINE BUTTON RESOURCE "S4WB010N" OF oBar ACTION OurSpool() TOOLTIP "Spool"
DEFINE BUTTON RESOURCE "S4WB016N" OF oBar GROUP;
ACTION HelProg() TOOLTIP "Ajuda"

DEFINE BUTTON oBtn2 RESOURCE "PARAMETROS" OF oBar GROUP;
ACTION Sx1C020() TOOLTIP "Parâmetros"

oBtn2:cTitle:="Param."

DEFINE BUTTON oBtOk RESOURCE "FINAL" OF oBar GROUP;
ACTION oDlg:End()TOOLTIP "Sair"

oBar:bRClicked := {|| AllwaysTrue()}
oDlg:lCentered := .T.
oDlg:Activate()

Return





















- 339 -

ADVPL Compl et o



30.3.4. I magens pr é- def i ni das par a as bar r as de bot ões

Conforme menci onado nos t ópi cos ant eri ores, os bot ões vi suai s do t i po bar ra de bot ões
permi t em a defi ni ção de i t ens com ações e i magens vi ncul adas.

Dent r e os obj et os e funções menci onados, foi cit ada a Enchoi ceBar( ) , a qual permi t e a adi ção
de bot ões adi ci onai s at ravés do parâmet r o aBu t t on, sendo que os i t ens dest e ar ray devem
possui r o segui nt e format o:

E Si nt ax e: AADD( aBut t ons,{ cBi t Map, bAcao, cText o} )

E Est r ut u r a:

cBi t Map
Nome da i magem pré- defi ni da exi st ent e na apl icação ERP que
será vi ncul ada ao bot ão.
bAcao
Bl oco de códi go que defi ne a ação que será execut ada com a
ut ili zação do bot ão.
cTex t o
Text o no est il o “ t ool t i p t ext ” que será exi bi do quando o cursor
do mouse for posi ci onado sobr e o bot ão na bar ra de
ferrament as.

E Al gun s Bi t Maps di sponív ei s:


DESTI NOS

DI SCAGEM

EDI T

EDI TABLE

EXCLUI R

FORM

GRAF2D

GRAF3D

LI NE

NOTE

OBJETI VO

OK

PENDENTE

PRECO

PRODUTO

S4SB0 14N

S4WB00 1N

S4WB00 5N

S4WB00 6N

S4WB00 7N

S4WB00 8N

S4WB00 9N

S4WB01 0N

S4WB01 1N

S4WB01 3N

S4WB01 4A

S4WB01 6N

SI MULACA

VENDEDOR

USER

E Ex empl o:


AADD(aButtons,{"USER",{||AllwaysTrue()},"Usuário"})



- 340 -

ADVPL Compl et o



APÊNDI CES

BOAS PRÁTI CAS DE PROGRAMAÇÃO

31. Ar r edondament o

Al gumas operações numéri cas podem causar di ferenças de ar r edondament o. I sso ocor r e
devi do a di ferenças no armazenament o de vari ávei s numéri cas nos di versos pr ocessadores,
di ferença est a, i ncl usi ve, pr esent e no ADVPL, mesmo ant es do surgi ment o do Pr ot heus.

Para evi t ar esses probl emas de arr edondament o, deve ser ut ili zada a função Round( ) ,
pri nci pal ment e ant es de r eali zar uma comparação e ant es de se ut ili zar a função I nt ( ) .

Desse modo, assegura- se que o resul t ado será cor r et o i ndependent ement e do pr ocessador ou
pl at aforma.

Ex empl o 01 :


If (Valor/30) == 50 // pode ser falso ou inválido
If Round(Valor/30, 0) == 50 // correto


Ex empl o 02 :


M->EE8_QTDEM1 := Int(M->EE8_SLDINI/M->EE8_QE) // pode ser falso ou inválido
M->EE8_QTDEM1 := Int(Round(M->EE8_SLDINI/M->EE8_QE,10)) // correto



32. Ut i l i zação de I dent ação

É obri gat óri a a ut ilização da i dent ação, poi s t orna o códi go mui t o mai s l egível . Vej a os
exempl os abai xo:


While !SB1->(Eof())
If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif
Do Case
Case SB1->B1_LOCAL == “01” .OR. SB1->B1_LOCAL == “02”
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)
Case SB1->B1_LOCAL == “03”
TrataDefeito(SB1->B1_COD)
OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()
EndDo


- 341 -

ADVPL Compl et o




A ut ili zação da i dent ação segui ndo as est rut uras de cont r ol e de fl uxo ( whil e, I F, caso et c.)
t orna a compr eensão do códi go mui t o mai s fáci l:


While !SB1->(Eof())

If mv_par01 == SB1->B1_COD
dbSkip()
Loop
Endif

Do Case
Case SB1->B1_LOCAL == “01” .OR. SB1->B1_LOCAL == “02”
TrataLocal(SB1->B1_COD, SB1->B1_LOCAL)

Case SB1->B1_LOCAL == “03”
TrataDefeito(SB1->B1_COD)

OtherWise
TrataCompra(SB1->B1_COD, SB1->B1_LOCAL)
EndCase
dbSkip()

EndDo


Para i dent ar o códi go ut ili ze a t ecl a < TAB> e na ferrament a DEV- St udi o, a qual pode ser
confi gurada at ravés da opção “ Pr efer ênci as” :



- 342 -

ADVPL Compl et o




33. Capi t ul ação de Pal av r as- Chave

Uma convenção ampl ament e ut i lizada é a de capi t ul ar as pal avras chaves, funções, vari ávei s e
campos ut ili zando uma combi nação de caract er es em mai úscul o e mi núscul o, vi sando facili t ar
a l ei t ura do códi go font e. O códi go a segui r:


Local ncnt w h i l e ( ncnt + + < 1 0 ) nt ot al + = ncnt * 2 enddo


Fi cari a melhor com as pal avras chaves e vari ávei s capi t ul adas:


Local n Cnt Whi l e ( nCnt + + < 1 0 ) nTot al + = nCnt * 2 EndDo




Para funções de mani pul ação de dados que comecem por “ db” , a capi t ulação
só será efet uada após o “ db” :

E dbSeek ( )
E dbSel ect Ar ea( )


33.1. Pal av r as em mai úscul o

A regra é ut i lizar caract er es em mai úscul o para:

E Const ant es:


# defi ne NUMLI NES 60 # defi ne NUMPAGES 1000


E Var i áv ei s de memór i a:


M- > CT2_CRCONV M- > CT2_MCONVER : = Cri aVar( "CT2_CONVER")


E Campos:


SC6- > C6_NUMPED


E Quer y s:


SELECT * FROM.. .


- 343 -

ADVPL Compl et o



34. Ut i l i zação da Not ação Húngar a

A not ação húngara consi st e em adi ci onar os prefi xos aos nomes de vari ávei s, de modo a
faci l ment e se i dent i fi car seu t i po. I st o facili t a na cri ação de códi gos- font e ext ensos, poi s
usando a Not ação Húngara, você não pr eci sa fi car o t empo t odo vol t ando à defi ni ção de uma
vari ável para se l embrar qual é o t i po de dados que deve ser col ocado nel a. Vari ávei s devem
t er um pr efi xo de Not ação Húngara em mi núscul as, segui do de um nome que i dent i fi que a
função da vari ável , sendo que a i ni ci al de cada pal avra deve ser mai úscul a.
É obri gat óri a a ut ilização dest a not ação para nomear vari ávei s.
Not ação Ti po de dado Ex empl o
a Array aVal ores
b Bl oco de códi go bSeek
c Caract er cNome
d Dat a dDat aBase
l Lógi co l Cont i nua
n Numéri co nVal or
o Obj et o oMai nWindow
x I ndefi ni do xCont eudo

35. Técni cas de pr ogr amação ef i ci ent e

Para o desenvol vi ment o de si st emas e a pr ogramação de r ot i nas, sempr e é esperado que
qual quer códi go escri t o sej a:

O Funci on al ment e cor r et o
O Ef i ci ent e
O Legív el
O Reut i l i záv el
O Ex t ensív el
O Por t áv el

Após anos de experi ênci a na ut ili zação de li nguagens padrão xBase e do desenvol vi ment o da
linguagem ADVPL, al gumas t écni cas para uma progr amação ot i mizada e efi ci ent e foram
reconheci das. A ut ili zação das t écni cas a segui r, vi sa buscar o máxi mo apr ovei t ament o dos
recursos da l inguagem com o obj et i vo de cri ar programas com est as car act eríst i cas.

Cr i ação de f unções segundo a necessi dade

Observe o códi go de exempl o:


User Function GetAnswer(lDefault)
Local lOk
lOk := GetOk(lDefault)
If lOk
Return .T.
Else
Return .F.
Endif
Return nil


- 344 -

ADVPL Compl et o




Ut ilizando- se apenas o cri t éri o "a função funci ona corr et ament e?", a função Get Answer é
perfei t a. Recebe um parâmet ro l ógi co com a respost a padrão e r et orna um val or l ógi co
dependent e da opção escol hi da pel o usuári o em uma função de di ál ogo "si m/ não" desi gnada
para i sso. Pode ent r et ant o ser mel horada, part i cul arment e se efi ci ência for consi derada como
um cri t éri o para um códi go mel hor. Efi ci ência t i pi cament e envol ve a ut ili zação de poucos
recursos de máqui na, poucos chamadas de funções ou t ornar mai s rápi do um pr ocesso.

Segundo esse raci ocíni o, poderi a se pr oduzi r o segui nt e códi go:


User Function GetAnswer(lDefault)
Return If( GetOk(lDefault), .T., .F.)


O códi go aci ma ai nda pode ser apri morado confor me abai xo:


User Function GetAnswer(lDefault)
Return GetOk(lDefault)


Com a ot i mi zação do códi go da função Get Answer( ) , pode faci l ment e veri fi car que a mesma
não r eal iza nada adi ci onal à chamada de Get Ok( ) , podendo ser subst i t uída por uma chamada
di ret a dest a, cont i nuando a funci onar cor ret ament e.

Codi f i cação aut o- document áv el

Nenhum coment ári o subst i t ui um códi go cl arament e escri t o, e est e não é um aci dent e.
Consi der e o exempl o:


cVar := " " // 11 espaços


O t amanho da vari ável cVar não é evi dent e por si só e não é faci lment e veri fi cado. Est es
mesmos 10 espaços est ari am mai s óbvi os e ai nda assi m garant i dos se a inst rução fosse escri t a
como:


cVar := Space(11)


O mesmo pri ncípi o pode ser apli cado para qual quer st ri ng l onga de caract eres r epet i dos. A
função Repli cat e pode ser ut ilizada como a segui r:


cVar := Replicate( "*", 80 )


Est e t i po de programação dei xa o códi go fáci l de di git ar, fáci l de l er e mai s fl exível .



- 345 -

ADVPL Compl et o



Ut i l i zação de sol uções si mpl es

Si mpli ci dade na cri ação de i nst ruções t orna a programação e at é mesmo a execução mai s
rápi da. Consi der e a l i nha de códi go:


If nVar > 0 .Or. nVar < 0


Se o val or da vari ável nVar for i gual a zero ( 0) no moment o da execução dest a l inha de
códi go, ambas as comparações separadas pel o operador l ógi co .Or. serão efet uadas: Após ser
avali ada, a pri mei ra comparação i rá fal har. A segunda comparação será ent ão avali ada e
fal hará t ambém. Como resul t ado, o códi go exi st ent e dent ro da est rut ura de fl uxo I f não será
execut ado. Tal códi go soment e será execut ado quando o val or dest a vari ável for mai or OU
menor do que zero. Ou sej a, sempr e que for DI FERENTE de zero, o que t orna a li nha a segui r
mai s efi ci ent e:


If nVar != 0


Est e t i po de al t eração t orna o códi go mai s l egível e o pr ocessament o mai s rápi do, evi t ando a
avali ação de i nst ruções desnecessari ament e.

Exi st em out ras si t uações onde a si mpli fi cação pode ser ut ili zada. A expressão de aval i ação a
segui r:


If cVar == "A" .Or. cVar == "B" .Or cVar == "C" .Or. cVar == "D"


Pode ser subst i t uído pel o operador de cont enção:


If cVar $ "ABCD"


Opção por f l ex i bi l i dade

A mel hor sol ução é aquel a que envol ve o probl ema i medi at o e previ ne probl emas no fut ur o.
Consi der e o exempl o:


@nRow,nCol PSAY cVar Picture "!!!!!!!!!!!!!!!!!!!!"


Excet o cont ando- se os caract eres, não exi st e manei ra de saber se o número de car act er es de
excl amação é o esperado. Enquant o i st o é um probl ema, exi st em al go mai s grave. A expressão
de pi ct ure é est át i ca. Se no fut ur o for necessári o aj ust ar o t amanho da vari ável cVar, ser á
necessári o l ocali zar t odos os l ugares no códi go onde est a máscara de pi ct ure est á sendo
ut ili zada para aj ust e manual .




- 346 -

ADVPL Compl et o



Exi st e uma opção de sol ução de aut o- aj ust e di sponível que é fácil de di git ar e t em a garant i a
de execut ar a t ar efa i gual ment e ( t ornar t odos os caract er es mai úscul os) :


@nRow,nCol PSAY cVar Picture "@!"


Opção da pr at i ci dade ao dr ama

Se a sol ução par ece compl exa, pr ovavel ment e é porque o cami nho escol hi do est á l evando a
i sso. Deve- se sempr e se pergunt ar porque al guém desenvol veri a uma linguagem que requi si t e
t ant os comandos compli cados para fazer al go si mpl es. Na grande mai ori a dos casos, exi st e
uma sol ução mai s si mples. O exempl o abai xo dei xa i sso bem cl aro:


@ 10,25 Say Substr(cCep,1,5) + "-" + Substr(cCep,6,3) Picture "!!!!!!!!!"


Est e códi go pode ser escri t o de uma forma muit o mai s si mpl es, confor me demonst rado abai xo:


@ 10,25 Say cCep Picture "@R 99999-999"


Ut i l i zação de oper ador es de i ncr ement o/ decr ement o

Ut ilizados devi dament e, os operador es de i ncrement o e decrement o t ornam o códi go mai s fácil
de l er e possi vel ment e um pouco mai s rápi dos. Ao cont rári o de escrever adi ções si mpl es como:


nVar := nVar + 1
nVar := nVar -1


Pode- se escrevê- l as assi m:


++nVar
--nVar


Deve- se apenas t omar cui dado com a precedênci a dest es operador es, poi s o "+ + " ou o " - - "
podem aparecer ant es ou depoi s de uma variável , e em al guns casos quando a vari ável for
ut ili zada dent ro de uma expressão, a prefi xação ou sufi xação dest es operador es afet ará o
resul t ado. Para mai ores det al hes, consul t e a document ação de operador es da l i nguagem
ADVPL.


- 347 -

ADVPL Compl et o



Ev i t ar passos desnecessár i os

Exi st e uma di ferença ent re um bom hábi t o e perda de t empo. Al gumas vezes est es concei t os
podem est ar mui t o pr óxi mos, mas um modo de di fer enci á- l os é bal ancear os benefíci os de
real i zar al guma ação cont ra o pr obl ema que resul t ari a se não fosse execut ada. Obser ve o
exempl o:


Local nCnt := 0
For nCnt := 1 To 10
<código>
Next nCnt


I ni ci ali zar a vari ável no moment o da decl aração não é um probl ema. Se o 0 fosse necessári o
no exempl o, t eri a sido út il a i ni ci alização na decl aração. Mas nest e caso a est rut ura de
repet i ção For .. .Nex t at ri bui o seu val or i medi at ament e com 1, port ant o não houve ganho em
at ri bui r a vari ável com 0 no começo.

Nest e exempl o não há nenhum pont o negat i vo e nada er rado ocorr er á se a vari ável não for
i ni ci alizada, port ant o é aconsel hável evi t ar est e t i po de i ni ci ali zação, poi s não t orna o códi go
mai s segur o e t ambém não expr essa a i nt enção do códi go mai s cl arament e.

Por ém not e est e exempl o, onde a vari ável não é i ni ci ali zada:


Local nCnt
While ( nCnt++ < 10 )
<código>
EndDo


Em ADVPL, vari ávei s não i ni ci ali zadas sempre t em seu val or cont endo nul o ( nil ) a princípi o, o
que fará com que uma exceção em t empo de execução acont eça quando a i nst rução de
repet i ção whi l e for execut ada.

Di ferent ement e do pri mei ro exempl o, onde a i ni ci ali zação da vari ável não fazi a di ferença
al guma, nest e segundo exempl o a i ni ci alização é absol ut ament e necessári a. Deve- se pr ocurar
i ni ci alizar vari ávei s numéri cas com zer o ( 0) e vari ávei s caract er com st ri ng nul a ( "") apenas
quando real ment e necessári o.




- 348 -

ADVPL Compl et o




Ut i l i zação de al t er n at i v as

Quando se est á t rabal hando em uma si mples r ot i na, deve- se t omar al gum t empo par a
expl orar duas ou t r ês di ferent es abordagens. Quando se est á t r abal hando em al go mai s
compl exo, deve- se pl anej ar prot ot i par al gumas a mai s. Consi der e o seguint e códi go:


If cHair = "A"
Replace hair With "Loira"
Else
If cHair = "B"
Replace hair With "Morena"
Else
If cHair = "C"
Replace hair With "Ruiva"
Else
If cHair = "D"
Replace hair With "Grisalho"
Else
Replace hair With "Preto"
Endif
Endif
Endif
Endif


Um códi go de uma única l et ra, ( A at é E) , foi i nformado para i ndi car a cor de cabel o. Est e
códi go foi ent ão conver t i do e ar mazenado como uma st ri ng. Pode- se not ar que a cor "Pret o"
será at ri buída se nenhuma out ra opção for verdadei ra.

Uma alt ernat i va que reduz o nível de i dent ação t orna o códi go mai s fácil de l er enquant o reduz
o número de comandos repl ace:


Do Case
Case cHair == "A"
cColor := "Loira"
Case cHair == "B"
cColor := "Morena"
Case cHair == "C"
cColor := "Ruiva"
Case cHair == "D"
cColor := "Grisalho"
OtherWise
cColor := "Preto"
EndCase

Replace hair With cColor



- 349 -

ADVPL Compl et o



Ut i l i zação de ar qui v os de cabeçal ho qu an do necessár i o

Se um arqui vo de códi go cri ado se refer enci a a comandos para i nt erpr et ação e t rat ament o de
arqui vos XML, est e deve se i ncl ui r o arqui vo de cabeçal ho própri o para t ai s comandos
( XMLXFUN.CH no exempl o) . Por ém não deve- se i nclui r arqui vos de cabeçal ho apenas por
segurança. Se não se est á r efer enci ando nenhuma das const ant es ou ut ilizando nenhum dos
comandos cont i dos em um dest es arqui vos, a i ncl usão apenas t ornará a compi l ação mai s
demorada.

Const ant es em mai ú scul o

I st o é uma convenção que faz sent i do. Em ADVPL, como em C por exempl o, a regra é ut i lizar
t odos os caract eres de uma const ant e em mai úscul o, a fi m de que possam ser cl arament e
reconheci dos como const ant es no códi go, e que não sej a necessári os l embrar onde for am
decl arados.

Ut i l i zação de i dent ação

Est e é um hábi t o que t odo programador deve desenvol ver. Não consome mui t o esforço para
mant er o códi go ali nhado durant e o t r abal ho, porém quando necessári o pode- se ut ilizar a
ferrament a TOTVS DevSt udi o para a re- i dent ação de códi go. Para mai or es det al hes, consul t e a
document ação sobre a i dent ação de códi gos font es di sponível nos demai s t ópi cos dest e
mat eri al .

Ut i l i zação de espaços em br anco

Espaços em branco ext r as t ornam o códi go mais fáci l para a l ei t ura. Não é necessári o i mensas
áreas em br anco, mas agrupar pedaços de códi go at ravés da ut ili zação de espaços em branco
funci ona mui t o bem. Cost uma- se separar parâmet r os com espaços em branco.

Quebr a de l i nh as mu i t o l ongas

Com o obj et i vo de t ornar o códi go mai s fácil de l er e i mpri mi r, as li nhas do códi go não devem
est ender o li mi t e da t ela ou do papel . Podem ser "quebradas" em mai s de uma li nha de t ext o
ut ili zando o pont o- e- vírgul a ( ; ) .

Capi t u l ação de pal av r as- chav e

Uma convenção ampl ament e ut i lizada é a de capi t ul ar as pal avras chaves, f unções, vari ávei s e
campos ut i lizando uma combi nação de caract er es em mai úscul o e mi núscul o, vi sando facili t ar
a l ei t ura do códi go font e.

Avali ando o códi go a segui r:


local ncnt
while ( ncnt++ < 10 )
ntotal += ncnt * 2
enddo




- 350 -

ADVPL Compl et o



O mesmo fi cari a mui t o mai s cl aro se r e- escri t o conforme abai xo:


Local nCnt

While ( nCnt++ < 10 )
nTotal += nCnt * 2
EndDo


Ut i l i zação da Not ação Húngar a

A Not ação Húngara é mui t o comum ent re pr ogramador es xBase e de out ras li nguagens. A
document ação do ADVPL ut ili za est a not ação para a descri ção das funções e comandos e é
aconsel hável sua ut ilização na cri ação de rot i nas, poi s aj uda a evi t ar pequenos err os e facili t a
a l ei t ura do códi go. Para mai ores det al hes, consul t e a document ação sobr e a ut ili zação da
Not ação Húngara de códi gos font es di sponível nos demai s t ópi cos dest e mat eri al .

Ut i l i zação de n omes si gn i f i cant es par a v ar i áv ei s

A pri nci pal vant agem da li berdade na cri ação dos nomes de vari ávei s é a facili dade de
i dent i fi cação da sua ut ili dade. Port ant o deve- se ut ili zar essa facili dade o máxi mo possível .
Nomes sem sent i do apenas t ornarão di fícil a ident i fi cação da ut ili dade de uma det ermi nada
vari ável , assi m como nomes ext r emament e curt os. Nem sempr e a ut ili zação de uma vari ável
chamada i é a mel hor saída. Cl aro, não convêm cri ar uma vari ável com um nome mui t o l ongo
que será ut ili zada como um cont ador, e r efer enci ada mui t as vezes no códi go. O bom senso
deve ser ut ili zado.

Cri ar vari ávei s como nNumer o ou dDat a t ambém não aj udam na ident i fi cação. A Not ação
Húngara j á est á sendo ut ilizada para i sso e o obj et i vo do nome da vari ável deveri a ser
i dent i fi car sua ut ili zação, não o t i po de dado ut ili zado. Deve- se procurar subst i t ui r t ai s
vari ávei s por al go como nTot al ou dCompra.

O mesmo é váli do para nomes de funções, que devem descrever um pouco sobr e o que a
função faz. Novament e nomes ext r emament e curt os não são aconsel hávei s.

Ut i l i zação de coment ár i os

Coment ári os são mui t o út ei s na document ação de pr ogramas cri ados e para faci li t ar a
i dent i fi cação de pr ocessos i mport ant es no fut ur o e devem sempr e ser ut ilizados.

Sempr e que possível , funções cri adas devem t er uma breve descri ção do seu obj et i vo,
parâmet ros e ret orno. Al ém de servi r como document ação, os coment ári os embel ezam o
códi go ao separar as funções umas das out ras. Os coment ári os devem ser ut ilizados com bom
senso, poi s r eescrever a si nt axe ADVPL em port uguês t orna- se apenas perda de t empo:


If nLastKey == 27 // Se o nLastKey for igual a 27



- 351 -

ADVPL Compl et o



Cr i ação de men sagen s si st êmi cas si gn i f i cant es e con si st ent es

Sej a oferecendo assi st ênci a, exi bi ndo mensagens de avi so ou mant endo o usuári o i nformado
do est ado de al gum processo, as mensagens devem r efl et i r o t om geral e a i mport ânci a da
apli cação. Em t ermos gerai s, deve- se evi t ar ser mui t o i nformal e ao mesmo t empo mui t o
t écni co.


"Aguarde. Reindexando (FILIAL+COD+ LOCAL) do arquivo: \DADOSADV\SB1990.DBF"


Esse t i po de mensagem pode dar i nformações demai s para o usuário e dei xá- l o sent i ndo- se
desconfort ável se não souber o que si gni fi ca "rei ndexando", et c. E de fat o, o usuári o não devi a
ser i ncomodado com t ai s det al hes. Apenas a frase "Aguarde, i ndexando." funci onaria
corr et ament e, assi m como pal avras "pr ocessando" ou "r eorgani zando".

Out ra boa i déi a é evi t ar a r efer enci a a um i t em corr ent e de uma t abel a como um " r egi st ro":


"Deletar este registro?"


Se a operação est i ver sendo efet uada em um arqui vo de cli ent es, o usuári o deve ser
quest i onado sobre a remoção do cli ent e cor rent e, se possível informando val ores de
i dent i fi cação como o códi go ou o nome.

Ev i t ar abr ev i ação de coman dos em 4 l et r as

Apesar do ADVPL supor t ar a abr evi ação de comandos em quat r o l et r as ( por exempl o, r epl no
l ugar de r epl ace) não há necessi dade de ut ili zar t al funci onali dade. I st o apenas t orna o códi go
mai s di fícil de l er e não t orna a compi l ação mai s rápi da ou si mpl es.

Ev i t ar " di sf ar ces" no códi go

Não deve- se cri ar const ant es para expr essões compl exas. I st o t ornará o códi go mui t o di fícil de
compreender e poderá causar er r os pri mári os, poi s pode- se i magi nar que uma at ri bui ção é
efet uada a uma vari ável quando na verdade há t oda uma expr essão di sfarçada:


#define NUMLINES aPrintDefs[1]
#define NUMPAGES aPrintDefs[2]
#define ISDISK aReturn[5]

If ISDISK == 1
NUMLINES := 55
Endif

NUMPAGES += 1




- 352 -

ADVPL Compl et o



A i mpressão que se t em após uma l ei t ura dest e códi go é de que val or es est ão sendo at ri buídos
às vari ávei s ou que const ant es est ão sendo ut ilizadas. Se o obj et i vo é fl exi bilidade, o códi go
ant eri or deve ser subst i t uído por:


#define NUMLINES 1
#define NUMPAGES 2
#define ISDISK 5

If aReturn[ISDISK] == 1
aPrintDefs[ NUMLINES ] := 55
Endif

aPrintDefs[ NUMPAGES ] += 1


Ev i t ar códi go de segu r an ça desnecessár i o

Dada sua nat ur eza bi nári a, t udo pode ou não acont ecer dent r o de um comput ador . Adi ci onar
pedaços de códi go apenas para "garant i r a segurança" é fr eqüent ement e ut ilizado como uma
descul pa para evi t ar cor ri gi r o pr obl ema r eal . I st o pode i nclui r a checagem para val i dar
i nt erval os de dat as ou para t i pos de dados corr et os, o que é comument e ut ilizando em
funções:


Static Function MultMalor( nVal )
If ValType( nVal ) != "N"
nVal := 0
Endif
Return ( nVal * nVal )


O ganho é i rri sóri o na checagem do t i po de dado do parâmet ro j á que nenhum pr ograma
corr et ament e escri t o em execução poderi a envi ar uma st ring ou uma dat a para a função. De
fat o, est e t i po de "capt ura" é o que t orna a depuração di fícil , j á que o ret orno será sempr e um
val or vál i do ( mesmo que o par âmet ro r ecebi do sej a de t i po de dado i ncor ret o) . Se est a
capt ura não t i ver si do efet uada quando um possível er r o de t i po de dado i nváli do ocor rer, o
códi go pode ser cor ri gi do para que est e er r o não mai s acont eça.

I sol ament o de st r i ngs de t ex t o

No caso de mensagens e st ri ngs de t ext o, a cent rali zação é um bom negóci o. Pode- se col ocar
mensagens, cami nhos para arqui vos, e mesmo out ros val or es em um l ocal específi co. I st o os
t orna acessívei s de qual quer l ugar no programa e fácei s de ger enci ar.

Por exempl o, se exi st e uma mensagem comum como " I mpr i mi n do, por f av or aguar de.. . "
em mui t as part es do códi go, corr e- se o ri sco de não segui r um padrão para uma das
mensagens em al gum lugar do códi go. E mant ê- l as em um úni co l ugar, como um arqui vo de
cabeçal ho, t orna fáci l a produção de document ação e a i nt ernaci onalização em out r os i di omas.



- 353 -

ADVPL Compl et o




LI STAS DE EXERCÍ CI OS

Módul o 04.1.: Desenvol vendo apl i cações em ADVPL



01

Desenvol ver um progr ama que i mpl ement e a função AxCadast ro( ) para a
t abel a padrão do si st ema SA2 – Cadast ro de Fornecedor es.



02

I mpl ement ar no AxCadast ro( ) desenvol vi do no i t em ant eri or as funções de
vali dação de al t eração e vali dação de excl usão.



03

Desenvol ver um programa que i mpl ement e a função Mbrowse( ) ut ili zando as
funções padrões de cadast ro, para a t abel a padrão do si st ema SA2 – Cadast ro
de Fornecedor es.




- 354 -

ADVPL Compl et o


04

I mpl ement ar no Mbr owse( ) desenvol vi do no i t em ant eri or a função de
l egenda.


05

I mpl ement ar no Mbrowse( ) desenvol vi do no i t em ant eri or uma função
específi ca de i nclusão ut ilizando os r ecur sos adi ci onai s da função AxI ncl ui( ) .


06

Desenvol ver um pr ogr ama que i mpl ement e uma MarkBr owse ut i lizando as
funções padrões de cadast ro, para a t abel a padrão do si st ema SA2 – Cadast ro
de Fornecedor es.


07

I mpl ement ar na Mar kBr owse( ) desenvol vi da no i t em ant eri or uma função para
excl usão de múl t i pl os regi st ros da t abel a padrão do si st ema SA2 – Cadast ro
de Fornecedor es.



- 355 -

ADVPL Compl et o


08

Desenvol ver um programa que i mpl ement e uma Mar kBr owse( ) para a t abel a
padrão do si st ema SA1 – Cadast r o de Cli ent e, cont empl ando uma função que
permi t a a vi suali zação dos dados pri nci pai s de múl t ipl os cl i ent es sel eci onados.


09

Desenvol ver um progr ama que i mpl ement e uma Model o2( ) para a t abel a
padrão do si st ema SX5 – Cadast r o de t abel as, cont empl ando a funci onali dade
de i ncl usão.


10

I mpl ement ar na Model o2( ) desenvol vi da no it em ant eri or as funci onali dades
de Vi sualização, Al t eração e Excl usão.


11
Desenvol ver um programa que i mpl ement e uma Model o3( ) para as t abel as
padrões do si st ema SF1 – Cabeçal ho do Document o de Ent r ada e SD1 – I t ens
do document o de ent rada, cont empl ando as funci onali dades de Vi sualização e
I ncl usão.


- 356 -

ADVPL Compl et o



12

I mpl ement ar na Model o3( ) desenvol vi da no i t em ant eri or as funci onalidades e
Al t eração e Excl usão.


13

Desenvol ver um progr ama que cri e um arqui vo de t rabal ho com est rut ura
si mil ar ao SA1 e receba as i nformações dest a t abel a.


14

I mpl ement ar na r ot i na desenvol vi da no i t em ant eri or, um Mar kBr owse que
permi t e a sel eção e vi suali zação de apenas um r egi st ro sel eci onado.


15

Desenvol ver um progr ama que i mpl ement e um r el at óri o que permi t a a
i mpressão de uma li st agem si mpl es dos dados da t abel a padrão SA1 –
Cadast r o de cl i ent es.



- 357 -

ADVPL Compl et o


16

Desenvol ver um progr ama que i mpl ement e um r el at óri o que permi t a a
i mpressão de uma l i st agem si mpl es das not as fi scai s e seus r espect i vos i t ens.


17

Desenvol ver um programa que real i ze a export ação dos i t ens marcados no
SA1 – Cadast ro de Cli ent es para um arqui vo no format o .TXT em um di ret óri o
especi fi cado pel o usuári o.


18

Desenvol ver um programa que r eal i ze a i mport ação das i nformações cont i das
em um arqui vo no format o .TXT sel eci onado pel o usuári o e as at ual ize no SA1
– Cadast r o de Cl i ent es.


19

Desenvol ver o mesmo programa do i t em ant eri or ut ili zando as funções da
famíli a FT.



- 358 -

ADVPL Compl et o



Módul o 04.2.: Of i ci na de Pr ogr amação I


20

Desenvol ver uma apli cação vi sual que i mpl ement e cada um dos component es
di sponívei s no font e DI ALOG_OBJETOS.PRW.




21

I mpl ement ar as r ot i nas de i mport ação e expor t ação desenvol vi das nos i t ens
ant eri or as r éguas de pr ocessament o mai s adequadas.




22

Subst i t ui r em uma das r ot i nas desenvol vidas ant eri orment e a função
Pergunt e( ) pel a função ParamBox( ) .




- 359 -

ADVPL Compl et o



23

Desenvol ver uma rot i na que i mpl ement ar um Li st Box si mpl es que permi t a
vi suali zar as t abel as cadast radas no SX5 – Cadast ro de Tabel as.


25

I mpl ement ar na r ot i na desenvol vi da no i t em ant eri or a opção de vi suali zação
dos i t ens de uma das t abel as sel eci onadas, demonst rando- os em uma Li st Box
Gri d.


26

Desenvol ver uma r ot i na que i mpl ement e uma Model o2( ) ut ilizando os
component es vi suai s necessári os, compl ement ados com os r ecur sos de
rol agem do obj et o Scr ol l Box( ) .



- 360 -

ADVPL Compl et o




Módul o 05: I nt r odução a or i ent ação à obj et os



27

I mpl ement ar a cl asse Al uno( ) com os mét odos New( ) , BuscaAl uno( ) e
Sal vaAl uno( ) .




28

Desenvol ver a i nt erface vi sual para int eragi r com a cl asse Al uno( )
i mpl ement ada ant eri or ment e.




29

I mpl ement ar na rot i na desenvol vi da no i t em ant eri or os r ecursos necessári os
para persi st i r as i nfor mações e r ecuperar os dados de i t ens pr evi ament e
sal vos.




- 361 -

ADVPL Compl et o




Módul o 06: ADVPL or i ent ado à obj et os I



30

Desenvol ver uma rot i na que i mpl ement e uma Enchoi ce( ) para o SA1 –
Cadast r o de cl i ent es.


31

Adequar a r ot i na desenvol vi da no i t em ant eri or para permi t i r o uso da cl asse
de obj et os MsMGet ( ) .



32

Desenvol ver uma i nt erface de cadast ro combi nando os r ecursos de um obj et o
MsMGet ( ) e um obj et o MsNewGet Dados( ) causando o mesmo efei t o de uma
i nt erface no padr ão da Model o3( ) .





- 362 -

ADVPL Compl et o



33

I mpl ement ar na r ot i na desenvol vi da no it em ant eri or o uso da função
Enchoi ceBar( ) com um bot ão que permi t a ao usuári o vi suali zar um dos i t ens
exi bi dos na i nt erface.


34

Adequar a r ot i na desenvol vi da no it em ant eri or de for ma a subst i t ui r o uso da
função Enchoi ceBar( ) pel a cl asse de obj et o TBar( ) .


35

Convert er a si nt axe cl ássi ca ut ili zada no font e DI ALOG_OBJETOS. PRW para a
si nt axe ori ent ada a obj et os.


36

Convert er a si nt axe cl ássi ca dos font es “ Li st Box” para a si nt axe ori ent ada a
obj et os.



- 363 -

ADVPL Compl et o



Pr oj et o: Av al i ação pr át i ca do t r ei nament o de ADVPL I nt er medi ár i o

Obj et ivos do proj et o

E Contemplar o conteúdo do curso e estimular a prática da programação utilizando a linguagem
ADVPL;

E Acrescentar um grau de desafio ao treinamento;

Regras para ent rega e apresent ação

E Deverá ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessários. A avaliação do projeto será realizada após a entrega, no prazo estabelecido pelo
instrutor;

E Pode ser realizado em grupos de até 03 pessoas. Caso existam alunos sem grupos, estes poderão
integrar equipes já formadas com o total de membros estabelecido, mediante aprovação do
instrutor;

Avaliação do proj et o

E Mesmo peso da prova teórica, podendo substituí-la integralmente.
E Serão considerados os quesitos:
O Funcionalidades
O Clareza da programação
O Apresentação
O Otimização de técnicas e recursos apresentados no treinamento

Funcionalidades que compõe o proj et o

Desenvolver uma aplicação utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:

01

Efet ue a l ei t ura de um arqui vo em format o . TXT com os dados necessári os
para real i zar o cadast ro de fornecedor es no si st ema Pr ot heus, e grave est as
i nformações em um arqui vo int ermedi ári o.


02
A part i r da sel eção dos r egi st ros di sponívei s nest e arqui vo i nt ermedi ári o, o
usuári o poderá:

O I mpri mi r os i t ens sel eci onados;
O Efet i var os i t ens sel eci onados, gravando- os no SA2 – Cadast r o de
Fornecedores;
O Est ornar i t ens j á efet i vados, el i mi nando- os do SA2 - Cadast r o de
Fornecedores;
O Excl ui r os regi st ros sel eci onados do arqui vo i nt ermedi ári o;
O Excl ui r t odos os r egi st r os i mport ados de um arqui vo em for mat o .TXT
especi fi cado.
O Vi suali zar as i nformações do r egi st ro gerado no arqui vo i nt ermedi ári o;
O Vi suali zar o r egi st ro gerado no SA2 – Cadast ro de Fornecedor es a
part i r de um i t em sel eci onado no arqui vo i nt er medi ári o.



- 364 -

ADVPL Compl et o



MÓDULO 07: ADVPL Or i ent ado à obj et os I I

Nest e módul o serão t r at ados os component es e obj et os da i nt erface vi sual da li nguagem
ADVPL, permi t i ndo o desenvol vi ment o de apli cações com i nt erfaces gráfi cas com si nt axe
ori ent ada a obj et os.

36. Component es da i nt er f ace vi sual do ADVPL

A linguagem ADVPL possui di versos component es vi suai s e auxiliares, os quai s podem ser
represent ados ut i lizando a est rut ura abai xo:

. Cl asses da I nt er f ace Vi sual




Tsr vobj ect
. Cl asses Aux i l i ar es


Tfont

. Cl asses de Janel as


Msdialog
Tdialog
Twindow

. Cl asses de Component es


Tcont r ol


.
Cl asses de Component es
Vi suai s
Br get ddb
Mscalend
Mscalendgr id
Msselbr
Msworkt ime
Sbut t on
Tbar
Tbit map
Tbr owsebut t on
Tbt nbmp
Tbt nbmp2
Tbut t on
Tcbr owse
Tcheckbox
Tcolor t r iangle
Tcombobox
Tfolder
Tfont
Tget
Tgr oup
Thbut t on
Tibrowser
Tlist box
Tmenu
Tmenubar
Tmet er
Tmsgr aphic
Tmsgbar
Tmult ibt n
Tmult iget
Tolecont ainer
Tpageview
Tpanel
Tr admenu
Tsbr owse
Tsay
Tscr ollbox
Tsimpleedit or
Tslider

- 365 -

ADVPL Compl et o






.
Cl asses de Component es
Vi suai s
Tsplit t er
Tt abs
Tt oolbox
Twbrowse
Vcbrowse

At r i but os comu ns as cl asses de componen t es v i suai s

cCapt i on Tít ul o ou cont eúdo do obj et o.
cF3
Consul t a F3 ao qual o obj et o est á vi ncul ado, quando o
mesmo é do t i po get .
cMsg
Mensagem exi bi da na barra de st at us da j anel a pri nci pal
quando o obj et o ganha foco.
cName Nome do obj et o
cTool t i p Mensagem exi bi da quando obj et o exi be seu t ool t i p.
cVar i abl e
Vari ável que receberá o cont eúdo sel eci onado ou di git ado no
obj et o, quando o mesmo for t o t i po get ou si milar.
l Passw or d
I ndi ca se o t ext o di gi t ado no obj et o será exi bi do no f ormat o
de password, quando o mesmo é do t i po get .
l ReadOn l y Fl ag que indi ca se o obj et o pode ou não ser edit ado.
l Show Hi nt
Fl ag que at i va .T. ou desat i va .F. a exi bi ção do t ool t i p do
obj et o.
l Vi si bl eCont r ol Se . T. o obj et o é vi sível , se .F. o obj et o é i nvi sível .
nHei ght Al t ura em pi xel s.
nLef t Coordenada hori zont al em pi xel s.
nTop Coordenada vert i cal em pi xel s.
nWi dt h Largura em pi xel s.
Pi ct ur e
Pi ct ure de di gi t ação do obj et o, quando o mesmo é do t i po
get .

Ev ent os comun s as cl asses de compon ent es v i su ai s

bAct i on
Bl oco de códi go execut ado quando o obj et o é ut ilizado,
quando o mesmo é do t i po bot ão ou si mil ar.
bCh ange
Bl oco de códi go execut ado quando ocor re uma mundança na
sel eção de i t ens que compõe o obj et o, como por exempl o
em l i st as ou gri ds.
bF3
Bl oco de códi go execut ado quando ut ili zado o r ecurso de
consul t a F3 vi ncul ado ao obj et o.
bGot Focus Execut ado quando obj et o ganha foco.
bl Cl i ck ed
Execut ado quando aci onado cl i ck do bot ão esquerdo do
mouse sobr e o obj et o.
bl Dbl Cl i ck
Execut ado quando aci onado dupl o cli ck do bot ão esquerdo
do mouse sobr e o obj et o.
bLost Focus Execut ado quando obj et o perde foco.
br Cl i ck ed
Execut ado quando aci onado cl i ck do bot ão di rei t o do mouse
sobr e o obj et o.
bVal i d
Execut ado quando o cont eúdo do obj et o é modi fi cado e
deverá ser vali dado. Deve ret ornar . T. se o cont eúdo é
váli do e .F. se cont eúdo i nváli do.
bWhen
Execut ado quando há movi ment ação de foco na j anel a.Se
ret ornar . T. o obj et o cont i nua habilit ado, se ret ornar .F. o
obj et o será desabili t ado.

- 366 -

ADVPL Compl et o




Cl asses da i nt er f ace v i su al

TSRVOBJECT( )

E Descr i ção: Cl asse abst rat a i ni ci al de t odas as cl asses de i nt erface do ADVPL. Não deve
ser i nst anci ada di ret ament e.

E Pr opr i edades:

nLef t Coordenada hori zont al em pi xel s.
nTop Coordenada vert i cal em pi xel s.
nWi dt h Largura em pi xel s.
nHei ght Al t ura em pi xel s.
cCapt i on Tít ul o ou cont eúdo do obj et o.
cTool t i p Mensagem exi bi da quando obj et o exi be seu t ool t i p.
l Show Hi nt
Fl ag que at i va .T. ou desat i va .F. a exi bi ção do t ool t i p do
obj et o.
cMsg
Mensagem exi bi da na barra de st at us da j anel a pri nci pal
quando o obj et o ganha foco.
nCl r Tex t Cor do t ext o do obj et o.
nCl r Pane Cor do fundo do obj et o.
bWhen
Execut ado quando há movi ment ação de foco na j anel a.Se
ret ornar . T. o obj et o cont i nua habilit ado, se ret ornar .F. o
obj et o será desabili t ado.
bVal i d
Execut ado quando o cont eúdo do obj et o é modi fi cado e
deverá ser vali dado. Deve ret ornar . T. se o cont eúdo é
váli do e .F. se cont eúdo i nváli do.
bl Cl i ck ed
Execut ado quando aci onado cl i ck do bot ão esquerdo do
mouse sobr e o obj et o.
br Cl i ck ed
Execut ado quando aci onado cl i ck do bot ão di rei t o do mouse
sobr e o obj et o.
bl Dbl Cl i ck
Execut ado quando aci onado dupl o cli ck do bot ão esquerdo
do mouse sobr e o obj et o.
oWnd Janel a onde o obj et o foi cri ado.
l Vi si bl e Se . T. o obj et o é vi sível , se .F. o obj et o é i nvi sível .
Car go Cont eúdo associ ado ao obj et o.
bLost Focus Execut ado quando obj et o perde foco.
bGot Focus Execut ado quando obj et o ganha foco.

E Const r ut or : Não pode ser i nst an ci ada.

E Par âmet r os:

Nen hum -

- 367 -

ADVPL Compl et o



E Mét odos aux i l i ar es:

Set Focu s

O Descr i ção: Força mudança do foco de ent rada de dados para o cont r ole.
O Si nt ax e: Set Focus( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

Hi de

O Descr i ção: Torna obj et o i nvi sível .
O Si nt ax e: Hi de( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

Show

O Descr i ção: Torna obj et o vi sível .
O Si nt ax e: Show( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

Enabl e

O Descr i ção: Habili t a o obj et o.
O Si nt ax e: En abl e( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l


- 368 -

ADVPL Compl et o



Di sabl e

O Descr i ção: Desabi li t a o obj et o.
O Si nt ax e: Di sabl e( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

Ref r esh

O Descr i ção: Força at ualização ( si ncr oni a) de pr opri edades ent re o programa e o
Prot heus Remot e.
O Si nt ax e: Ref r esh( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l


Ex empl o:


CLASS TCONTROL FROM TSRVOBJECT



- 369 -

ADVPL Compl et o



Cl asses aux i l i ar es

TFONT( )

E Descr i ção: Cl asse de obj et os que defi ne a font e do t ext o ut ili zado nos cont rol es
vi suai s.

E Pr opr i edades:

- Herdadas as cl asses superi or es

E Const r ut or : New( [ acName] , [ nPar2] , [ anHeight ] , [ l Par4] , [ al Bol d] , [ nPar6] ,
[ l Par7] , [ nPar8] , [ al I t alic] , [ al Underli ne] )

E Par âmet r os:

acName Caract er e, opci onal . Nome da font e, o padrão é “ Ari al ” .
nPar 2 Reser vado.
anHei ght Numéri co, opci onal . Tamanho da font e. O padr ão é - 11.
l Par 4 Reser vado.
al Bol d Lógi co, opci onal . Se . T. o est i l o da font e será negri t o.
nPar 6 Reser vado.
l Par 7 Reser vado.
nPar 8 Reser vado.
al I t al i c Lógi co, opci onal . Se . T. o est i l o da font e será i t áli co.
al Under l i ne Lógi co, opci onal . Se . T. o est i l o da font e será sublinhado.

E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oSay
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE 'My dialog' PIXEL
// Cria font para uso
oFont:= TFont():New('Courier New',,-14,.T.)
// Apresenta o tSay com a fonte Courier New
oSay := TSay():New( 10, 10, {|| 'Mensagem'},oDlg,, oFont,,,, .T.,
CLR_WHITE,CLR_RED )
oSay:lTransparent:= .F.
ACTIVATE MSDIALOG oDlg CENTERED
Return


- 370 -

ADVPL Compl et o



Cl asses de j an el as

MSDI ALOG( )

E Descr i ção: Cl asse de obj et os que deve ser ut ilizada como padr ão de j anel a para
ent rada de dados. MSDi al og é um t i po de j anel a di ál ogo modal , i st o
é, não permi t e que out ra j anel a at i va receba dados enquant o est a
est i ver at i va.

E Pr opr i edades:

- Herdadas as cl asses superi or es


E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] ,
[ cPar6] , [ nPar7] , [ l Par8] , [ nPar9] , [ anCl rText ] , [ anCl rBack] , [ oPar12] ,
[ aoWnd] , [ al Pi xel ] , [ oPar15] , [ oPar16] , [ l Par17] )


E Par âmet r os:

anTop
Numéri co, opci onal . Coordenada vert i cal superi or em pi xel s
ou caract er es.
anLef t
Numéri co, opci onal . Coordenada hori zont al esquerda em
pi xel s ou caract eres.
an Bot om
Numéri co, opci onal . Coordenada vert i cal i nferi or em pi xel s
ou caract er es.
anRi ght
Numéri co, opci onal . Coordenada hori zont al di reit a em pi xel s
ou caract er es.
acCapt i on Caract er e, opci onal . Tít ul o da j anel a.
cPar 6 Reser vado.
nPar 7 Reser vado.
l Par 8 Reser vado.
nPar 9 Reser vado.
anCl r Tex t Numéri co,opci onal . Cor do t ext o.
anCl r Back Numéri co,opci onal . Cor de fundo.
oPar 12 Reser vado.
aoWn d
Obj et o, opci onal . Janel a mãe da j anel a a ser cri ada, padrão
é a j anel a pri nci pal do programa.
al Pi x el
Lógi co, opci onal . Se . T. consi dera as coordenadas passadas
em pi xel s, se .F. consi dera caract er es.
oPar 15 Reser vado.
oPar 16 Reser vado.
nPar 17 Reser vado.


- 371 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
// cria diálogo
Local oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)

// ativa diálogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando…'
)} )
Return


TDI ALOG( )

E Descr i ção: Cl asse de obj et os do t i po di ál ogo de ent rada de dados, sendo seu
uso reservado. Recomenda- se ut ili zar a cl asse MSDi al og que é
herdada dest a cl asse.


E Pr opr i edades:

- Herdadas as cl asses superi or es


E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] ,
[ cPar6] , [ nPar7] , [ l Par8] , [ nPar9] , [ anCl rText ] , [ anCl rBack] , [ oPar12] ,
[ aoWnd] , [ al Pi xel ] , [ oPar15] , [ oPar16] , [ nPar17] , [ anWi dt h] ,
[ anHei ght ] )


E Par âmet r os:

anTop
Numéri co, opci onal . Coordenada vert i cal superi or em pi xel s
ou caract er es.
anLef t
Numéri co, opci onal . Coordenada hori zont al esquerda em
pi xel s ou caract eres.
an Bot om
Numéri co, opci onal . Coordenada vert i cal i nferi or em pi xel s
ou caract er es.
anRi ght Numéri co, opci onal . Coordenada hori zont al di reit a em pi xel s

- 372 -

ADVPL Compl et o


ou caract er es.
acCapt i on Caract er e, opci onal . Tít ul o da j anel a.
cPar 6 Reser vado.
nPar 7 Reser vado.
l Par 8 Reser vado.
nPar 9 Reser vado.
anCl r Tex t Numéri co,opci onal . Cor do t ext o.
anCl r Back Numéri co,opci onal . Cor de fundo.
oPar 12 Reser vado.
aoWn d
Obj et o, opci onal . Janel a mãe da j anel a a ser cri ada, padrão
é a j anel a pri nci pal do programa.
al Pi x el
Lógi co, opci onal . Se . T. consi dera as coordenadas passadas
em pi xel s, se .F. consi dera caract er es.
oPar 15 Reser vado.
oPar 16 Reser vado.
nPar 17 Reser vado.
anWi dt h Numéri co, opci onal . Lar gura da j anel a em pi xel s.
anHei ght Numéri co, opci onal . Al t ura da j anel a em pi xel s.


E Mét odos aux i l i ar es:

Act i v at e

O Descr i ção: At i va ( exi be) o di ál ogo. Chamar soment e uma vez est e
mét odo.
O Si nt ax e: Act i vat e( [ bPar1] , [ bPar2] , [ bPar3] , [ al Cent er ed] , [ abValid] ,
[ l Par6] , [ abI ni t ] , [ bPar8] , [ bPar9] )
O Par âmet r os:

bPar 1 Reser vado.
bPar 2 Reser vado.
bPar 3 Reser vado.
al Cent er ed
Lógi co, opci onal . Se .T. exi be a j anel a cent ralizada, .F. é
padrão.
abVal i d
Bl oco de códi go, opci onal . Deve ret ornar .T. se cont eúdo
do di ál ogo é vál i do, se ret ornar .F. o di ál ogo não fechará
quando sol i ci t ada de encerrar.
l Par 6 Reser vado.
abI ni t
Bl oco de códi go, opci onal . Execut ado quando o di ál ogo
i ni ci a exi bi ção.
bPar 8 Reser vado.
bPar 9 Reser vado.

O Ret or no:

Nen hum -


- 373 -

ADVPL Compl et o



End

O Descr i ção: Encerr a ( fecha) o di ál ogo.
O Si nt ax e: End( )
O Par âmet r os:

Nen hum -

O Ret or no: Lógi co .T. se o di ál ogo foi encer rado.

Lógi co I ndi ca se o di ál ogo foi encer rado.


E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
// cria diálogo
oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa diálogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando..
.')} )

/* os comandos abaixo proporcionam o mesmo resultado
// cria diálogo
DEFINE DIALOG oDlg TITLE 'Meu dialogo' FROM 10,10 TO 300,300 COLOR
CLR_BLACK,CLR_WHITE PIXEL
// ativa diálogo centralizado
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop('iniciando...')) VALID
(msgstop('validou!'),.T.)
*/
Return Nil

- 374 -

ADVPL Compl et o



TWI NDOW( )

E Descr i ção: Cl asse de obj et os do t i po di ál ogo pri nci pal de programa. Deverá
exi st i r apenas uma i nst ânci a dest e obj et o na execução do programa.

E Pr opr i edades:

- Herdadas das cl asses superi or es


E Const r ut or : New( [ anTop] , [ anLeft ] ,[ anBot t om] , [ anRi ght ] , [ acTi t l e] , [ nPar6] ,
[ oPar7] ,[ oPar8] ,[ oPar9] , [ aoPar ent ] , [ l Par11] , [ l Par12] , [ anCl rFore] ,
[ anCl rBack] , [ oPar15] , [ cPar16] , [ l Par17] , [ l Par18] , [ l Par19] ,
[ l Par20] , [ al Pi xel ] ) ;

E Par âmet r os:

nTop
Numéri co, opci onal . Coordenada vert i cal superi or em pi xel s
ou caract er es.
nLef t
Numéri co, opci onal . Coordenada hori zont al esquerda em
pi xel s ou caract eres.
nBot t om
Numéri co, opci onal . Coordenada vert i cal i nferi or em pi xel s
ou caract er es.
nRi ght
Numéri co, opci onal . Coordenada hori zont al i nferi or em pi xel s
ou caract er es.
cTi t l e Caract er e, opci onal . Tít ul o da j anel a.
nPar 6 Reser vado.
oPar 7 Reser vado.
oPar 8 Reser vado.
oPar 9 Reser vado.
oPar ent Obj et o, opci onal . Janel a mãe da j anel a corr ent e.
l Par 11 Reser vado.
l Par 12 Reser vado.
nCl r For e Numéri co, opci onal . Cor de fundo da j anel a.
nCl r Tex t Numéri co, opci onal . Cor do t ext o da j anel a.
oPar 15 Reser vado.
cPar 1 6 Reser vado.
l Par 17 Reser vado.
l Par 18 Reser vado.
l Par 19 Reser vado.
l Par 20 Reser vado.
l Pi x el
Lógi co, opci onal . Se . T. ( padrão) consi dera coor denadas
passadas em pi xel s, se .F. consi dera caract er es.


- 375 -

ADVPL Compl et o


E Mét odos aux i l i ar es:

Act i v at e

O Descr i ção: At i va ( exi be) a j anel a. Chamar esse mét odo apenas uma vez.
O Si nt ax e: Act i vat e( [ acShow] , [ bPar2] , [ bPar3] , [ bPar4] , [ bPar5] , [ bPar 6] ,
[ abI ni t ] , [ bPar8] , [ bPar9] , [ bPar10] , [ bPar11] , [ bPar12] ,[ bPar13] ,
[ bPar14] , [ bPar15] , [ abVali d] , [ bPar17] , [ bPar18] ) .
O Par âmet r os:

acShow
Caract er , opci onal . “ I CONI ZED” para j anel a i coni zada ou
“ MAXI MI ZED” para j anel a maxi mizada.
bPar 2 Reser vado.
bPar 3 Reser vado.
bPar 4 Reser vado.
bPar 5 Reser vado.
bPar 6 Reser vado.
abI ni t
Bl oco de códi go. Execut ado quando j anel a est á sendo
exi bi da.
bPar 8 Reser vado.
bPar 9 Reser vado.
bPar 10 Reser vado.
bPar 11 Reser vado.
bPar 12 Reser vado.
bPar 13 Reser vado.
bPar 14 Reser vado.
bPar 15 Reser vado.
abVal i d
Bl oco de códi go. Execut ado quando a j anel a for sol i ci t ada
de fechar. Deverá ret or nar .T. se o cont eúdo da j anel a for
váli do, ou .F. se não. Se o bl oco r et ornar .F. a j anel a não
fechará.
bPar 17 Reser vado.
bPar 18 Reser vado.


O Ret or no:

Nen hum -


End

O Descr i ção: Sol i ci t a encer rament o da j anel a.
O Si nt ax e: End( )
O Par âmet r os:

Nen hum -

O Ret or no: Lógi co .T. se o di ál ogo foi encer rado.

Lógi co I ndi ca se a j anel a foi encerrada.


- 376 -

ADVPL Compl et o


Cent er

O Descr i ção: Cent ral iza a j anel a.
O Si nt ax e: Cent er( )
O Par âmet r os:

Nen hum -

O Ret or no: Lógi co .T. se o di ál ogo foi encer rado.

Nen hum -

E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oWindow
Local abInit:= {||conout('ativando!')}
Local abValid:= {||conout('encerrando!'),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, 'Meu
programa',,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. )
oWindow:Activate('MAXIMIZED',,,,,,abInit,,,,,,,,,abValid,,)

/* os comandos abaixo proporcionam o mesmo resultado
DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE 'Meu programa'
COLOR CLR_WHITE,CLR_BLACK
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid
*/
Return
.


- 377 -

ADVPL Compl et o



Cl asses de componen t es

TCONTROL( )

E Descr i ção: Cl asse abst rat a comum ent r e t odos os component es vi suai s
edi t ávei s. Não deve ser i nst anci ada di ret ament e.


E Pr opr i edades:

Al i gn
Numéri co. Al inhament o do cont r ol e no espaço
di sponi bili zado pel o seu obj et o par ent e. 0 = Nenhum
( padrão) , 1= no t opo, 2 = no r odapé, 3= a esquerda, 4 = a
di rei t a e 5 = em t odo o parent e.
l Modi f i ed
Lógi co. Se .T. i ndi ca que o cont eúdo da vari ável associ ada
ao cont r ol e foi modi fi cado.
l ReadOn l y
Lógi co. Se .T. o cont eúdo da vari ável associ ada ao cont r ol e
permanecerá apenas para l ei t ura.
hPar ent
Numéri co. Handl e ( i dent i fi cador) do obj et o sobr e o qual o
cont r ol e foi cri ado.
bCh ange
Bl oco de códi go. Execut ado quando o est ado ou cont eúdo do
cont r ol e é modi fi cado pel a ação sobre o cont rol e.

E Const r ut or : Não pode ser i nst an ci ada.

E Par âmet r os:

Nen hum -

E Mét odos aux i l i ar es:

Set Focu s

O Descr i ção: Força mudança do foco de ent rada de dados para o cont r ole.
O Si nt ax e: Set Focus( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l


Ex empl o:


CLASS TSay FROM Tcontrol


- 378 -

ADVPL Compl et o



Cl asses de componen t es v i suai s

BRGETDDB( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po Gr i d.

E Pr opr i edades:

+ Herdadas da cl asse superi or
nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o
nLen Númer o t ot al de li nhas do obj et o

E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ aHeader s] ,
[ aCol Si zes] , [ oDl g] , [ cFi eld] , [ uVal ue1] , [ uValue2] , [ uChange] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCur sor] , [ nCl rFore] , [ nCl rBack] ,
[ cMsg] , [ l Updat e] , [ cAli as] , [ l Pi xel ] , [ bWhen] , [ l Desi gn] , [ bVali d] ,
[ aAl t er] , [ oMot her] )

E Par âmet r os:

nRow Numéri co, opci onal . Coordenada vert i cal
nCol Numéri co, opci onal . Coordenada hori zont al
nWi dt h Numéri co, opci onal . Lar gura do obj et o
nHei ght Numéri co, opci onal . Al t ura do obj et o
bFi el ds Bl oco de códi go, Li st a de Campos
aHeader s Vet or, Descri ção dos campos para no cabeçal ho
aCol Si zes Vet or, Largur a das col unas
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor deverá
ser cri ado.
cFi el d Caract er , opci onal . Campos necessári os ao fil t ro
uVal ue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro
uVal ue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro
bCh ange
Bl oco de códi go, opci onal . Execut ado quando o i t em
sel eci onado é al t erado.
bLDbl Cl i ck
Bl oco de códi go, opci onal . Execut ado quando aci onado dupl o
cli ck do bot ão esquerdo do mouse sobr e o cont r ol e.
bRCl i ck Não ut i lizado
oFont Obj et o, opci onal . Font e
oCur sor Obj et o, opci onal . Ti po do Cur sor
nCl r For e Numéri co, opci onal . Cor do t ext o da j anel a.
nCl r Back Numéri co, opci onal . Cor de fundo da j anel a.
cMsg
Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o
obj et o
l Updat e Não ut i lizado
cAl i as
Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o
se ut i lizado com Tabel a
l Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
bWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
l Desi gn Não Ut i li zado

- 379 -

ADVPL Compl et o


bVal i d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.
aAl t er Não Ut i li zado
oMot her Não Ut i li zado

E Mét odos aux i l i ar es:

GoUp

O Descr i ção: Sal t a uma linha para ci ma.
O Si nt ax e: GoUp( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

GoDow n

O Descr i ção: Sal t a uma linha para bai xo.
O Si nt ax e: GoDow n( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

GoTop

O Descr i ção: Sal t a para pri mei ra linha.
O Si nt ax e: GoTop( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

GoBot t om

O Descr i ção: Sal t a para ult i ma linha.
O Si nt ax e: GoBot t om( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

- 380 -

ADVPL Compl et o



Row Count

O Descr i ção: Ret orna numer o de l i nhas vi si vei s.
O Si nt ax e: Row Count ( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l


E Apar ênci a:



- 381 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := BrGetDDB():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)


ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

MSCALEND( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po Cal endári o.

E Pr opr i edades:

+ Herdadas da cl asse superi or
bCh ange
Bl oco de códi go execut ado na mudança de sel eção de um
di a.
bCh angeMes
Bl oco de códi go execut ado na mundaça de sel eção de um
mês.
dDi aAt u Di a at ual ment e sel eci onado

E Const r ut or : New( [ nRow] , [ nCol ] , [ oDl g] , [ l CanMult Sel ] )

- 382 -

ADVPL Compl et o



E Par âmet r os:

nRow Numéri co, opci onal . Coordenada vert i cal
nCol Numéri co, opci onal . Coordenada hori zont al
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor deverá
ser cri ado.

l CanMul t Sel Logi co, opci onal . Permi t e sel eção de mul t i pl os di as


E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
user function Calend_Ex()
DEFINE MSDIALOG oDlg FROM 0,0 TO 1000,1000 PIXEL TITLE 'Exemplo de
MsCalend'
// Cria objeto
oCalend:=MsCalend():New(01,01,oDlg,.T.)
// Code-Block para mudança de Dia
oCalend:bChange := {|| Alert('Dia Selecionado: ' +
dtoc(oCalend:dDiaAtu)) }
// Code-Block para mudança de mes
oCalend:bChangeMes := {|| alert('Mes alterado') }
ACTIVATE MSDIALOG oDlg CENTERED
Return


- 383 -

ADVPL Compl et o



MSCALENDGRI D( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po Grade de Períodos.

E Pr opr i edades:

bAct i on
Bl oco de códi go. Execut ado quando o bot ão esquerdo do
mouse é pr essi onado.
bRCl i ck
Bl oco de códi go. Execut ado quando o bot ão di r ei t o do mouse
é pr essi onado.

E Const r ut or : New( [ aoWnd] , [ anRow] , [ anCol ] , [ anHei ght ] , [ anWi dt h] ,
[ dDat eI ni ] , [ nResol ut ion] , [ abWhen] , [ abAct i on] , [ nDefCol or] ,
[ bRCli ck] , [ lFill All ] )

E Par âmet r os:

aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.

anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
anHei ght Numéri co, opci onal . Al t ura do bot ão em pi xel s.
anWi dt h Numéri co, opci onal . Lar gura do bot ão em pi xel s.

dDat eI n i Dat a, Dat a i ni ci al do Calendári o
nResol ut i on Numéri co, Resol ução a ser apl i cada na gri d do Cal endári o
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.

abAct i on
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
quando o bot ão for pressi onado.

nDef Col or Numéri co, opci onal . Cor do Fundo da Gri d.
bRCl i ck
Bl oco de códi go, opci onal . Execut ado quando aci onado o
bot ão di rei t o do mouse sobr e o cont r ol e.
l Fi l l Al l Lógi co, opci onal . Pr eenche t odo o peri odo

E Mét odos aux i l i ar es:

Add

O Descr i ção: Adi ci ona peri odo na Gri d.
O Si nt ax e: Add( cCapt i on, nLi n, nI ni t i al , nFi nal , nCol or, cDescri )
O Par âmet r os:

cCapt i on Caract er . Descri ção a ser i nseri da a esquerda da Gri d
nLi n Numeri co. Numer o da l inha a ser i nseri do o i t em
nI n i t i al Numeri co. Di a i ni ci al
nFi n al Numeri co. Di a Fi nal

- 384 -

ADVPL Compl et o


nCol or Numeri co. Cor que dest acara o i t em
cDescr i Caract er , Opi ci onal . Descri ção do t i po t ool t i p( hint ) do i t em

O Ret or no:

Ni l

E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
nResolution := 1
oMsCalendGrid := MsCalendGrid():New( oDlg, 01, 01, 500,300,;
date(), nResolution, ,{|x,y| Alert(x) },;
RGB(255,255,196), {|x,y|Alert(x,y)}, .T.
)
oMsCalendGrid:Add('caption 01', 1, 10, 20, RGB(255,000,0),
'Descricao 01')
oMsCalendGrid:Add('caption 02', 2, 20, 30, RGB(255,255,0),
'Descricao 02')
oMsCalendGrid:Add('caption 03', 3, 01, 05, RGB(255,0,255),
'Descricao 03')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 385 -

ADVPL Compl et o



MSSELBR( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Gri d

E Pr opr i edades:

+ Herdadas da cl asse superi or
nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o
nLen Númer o t ot al de li nhas do obj et o

E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] , [ bFi el ds] , [ aHeader s] ,
[ aCol Si zes] , [ oDl g] , [ cFi eld] , [ uVal ue1] , [ uValue2] , [ uChange] ,
[ uLDbl Cli ck] , [ uRCli ck] , [ oFont ] , [ oCur sor] , [ nCl rFore] , [ nCl rBack] ,
[ cMsg] , [ l Updat e] , [ cAl ias] , [ l Pi xel] , [ bWhen] , [ l Desi gn] , [ bVali d] )

E Par âmet r os:

nRow Numéri co, opci onal . Coordenada vert i cal
nCol Numéri co, opci onal . Coordenada hori zont al
nWi dt h Numéri co, opci onal . Lar gura do obj et o
nHei ght Numéri co, opci onal . Al t ura do obj et o
bFi el ds Bl oco de códi go, Li st a de Campos
aHeader s Vet or, Descri ção dos campos para no cabeçal ho
aCol Si zes Vet or, Largur a das col unas
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor deverá
ser cri ado.
cFi el d Caract er , opci onal . Campos necessári os ao fil t ro
uVal ue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro
uVal ue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro
bCh ange
Bl oco de códi go, opci onal . Execut ado quando o i t em
sel eci onado é al t erado.
bLDbl Cl i ck
Bl oco de códi go, opci onal . Execut ado quando aci onado dupl o
cli ck do bot ão esquerdo do mouse sobr e o cont r ol e.
bRCl i ck Não ut i lizado
oFont Obj et o, opci onal . Font e
oCur sor Obj et o, opci onal . Ti po do Cur sor
nCl r For e Numéri co, opci onal . Cor do t ext o da j anel a.
nCl r Back Numéri co, opci onal . Cor de fundo da j anel a.
cMsg
Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o
obj et o
l Updat e Não ut i lizado
cAl i as
Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o
se ut i lizado com Tabel a
l Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
bWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
l Desi gn Não Ut i li zado
bVal i d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.


- 386 -

ADVPL Compl et o


E Mét odos aux i l i ar es:

GoUp

O Descr i ção: Sal t a uma linha para ci ma.
O Si nt ax e: GoUp( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

GoDow n

O Descr i ção: Sal t a uma linha para bai xo.
O Si nt ax e: GoDow n( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

GoTop

O Descr i ção: Sal t a para pri mei ra linha.
O Si nt ax e: GoTop( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

GoBot t om

O Descr i ção: Sal t a para ult i ma linha.
O Si nt ax e: GoBot t om( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l


- 387 -

ADVPL Compl et o



Row Count

O Descr i ção: Ret orna numer o de l i nhas vi si vei s.
O Si nt ax e: Row Count ( )
O Par âmet r os:

Nenhum -

O Ret or no:

Ni l

E Apar ênci a:




- 388 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'

DbSelectArea('SA1')
oBrowse := MsSelBr():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))

// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,{||
Alert(oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)


ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
.

MSWORKTI ME( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Bar ra de Período.

E Pr opr i edades:

bCh ange
Bl oco de códi go. Execut ado ao di sparar qual quer ação sobre
o obj et o.

E Const r ut or : New( [ aoWnd] , [ anRow] , [ anCol ] , [ anHei ght ] , [ anWi dt h] ,
[ nResol ut i on] , [ cVal ue] , [ abWhen] , [ abChange] )

E Par âmet r os:

aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anCol Numéri co, opci onal . Coordenada hori zont al em pi xel s ou

- 389 -

ADVPL Compl et o


caract eres.
anHei ght Numéri co, opci onal . Al t ura do bot ão em pi xel s.
anWi dt h Numéri co, opci onal . Lar gura do bot ão em pi xel s.
nResol ut i on Numéri co, Resol ução a ser apl i cada na gri d do Cal endári o
cVal u e Caract er , opci onal . Descri t i vo
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
abChange
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
quando o bot ão for pressi onado.

E Mét odos aux i l i ar es:

Get Val ue

O Descr i ção: Ret orna os i t em sel eci onados no for mat o “ XX X XX” .
O Si nt ax e: Get Val ue( )
O Par âmet r os:

Nen hum -

O Ret or no:

Car act er Ret orna os i t em sel eci onados no format o “ XX X XX” .

Get I nt er Ti me

O Descr i ção: Ret orna per i odo sel eci onado.
O Si nt ax e: Get I nt erTi me( )
O Par âmet r os:

Nen hum -

O Ret or no:

Car act er Ret orna o período sel eci onada no format o “ HH: MM: SS”

Set Resol

O Descr i ção: Defi ne a r esol ução da demonst ração da bar ra de períodos.
O Si nt ax e: Set Resol ( nResol ut i on)
O Par âmet r os:

nResol ut i on Resol ução

O Ret or no:

Ni l


- 390 -

ADVPL Compl et o



Set Val ue

O Descr i ção: At ri bui um det ermi ndo cont eúdo para um obj et o ou at ri but o
de um obj et o.
O Si nt ax e: Set Val ue( xVal ue, cPi ct ure)
O Par âmet r os:

xVal ue Val or que será at ri buído ao obj et o ou at ri but o do obj et o.
cPi ct ure Pi ct ure de formação opci onal para o cont eúdo at ri buído.

O Ret or no:

Nen hum


E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMsWorkTime := MsWorkTime():New(oDlg,04,04,280,133,0,'',{||.T.},;
{|oWorkTime|Alert('GetValue():
'+oWorkTime:GetValue()+chr(13)+;
'GetInterTime():
'+oWorkTime:GetInterTime())} )
oMsWorkTime:SetValue('X X XX X')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


- 391 -

ADVPL Compl et o



SBUTTON( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po bot ão que Defi ne o component e
vi sual SBut t on, o qual permi t e a i ncl usão de bot ões de operação na
t el a da int erface, os quai s serão vi suali zados dependendo da
i nt erface do si st ema ERP ut ili zada soment e com um t ext o si mpl es
para sua i dent i fi cação, ou com uma i magem ( Bi t Map) pré- defi ni do.

E Pr opr i edades:

bAct i on
Bl oco de códi go. Execut ado ao pr eci onar o bot ão esquerdo
do mouse.

E Const r ut or : New( [ nTop] , [ nLeft ] , [ nType] , [ bAct i on] , [ oWnd] , [ l Enabl e] ,
[ cMsg] , [ bWhen] )

E Par âmet r os:

Par âmet r o Ti po / Descri ção
nTop
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
nLef t
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
nTy pe Numéri co. Ti po do Bot ão
bAct i on
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
quando o bot ão for pressi onado.
oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
l Enabl e Logi co, opci onal . Habili t a/ Desabi li t a bot ão
cMsg Caract er , Opi ci onal . Descri ção do t i po t ool t i p( hint ) do i t em
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.

E Mét odos aux i l i ar es:

Cr eat e

O Descr i ção: Ret orna Mét odo const rut or opci onal da cl asse.
O Si nt ax e: Creat e( )
O Par âmet r os:

Nen hum -

O Ret or no:

Obj et o
Obj et o da cl asse Sbut t on com t odos os at ri but os com
cont eúdos padrões.


- 392 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oSButton1 := SButton():New( 01,01,1,{||Alert('SButton
01')},oDlg,.T.,,)
oSButton2 := SButton():New( 21,01,2,{||Alert('SButton
02')},oDlg,.T.,,)
oSButton3 := SButton():New( 41,01,3,{||Alert('SButton
03')},oDlg,.T.,,)
oSButton4 := SButton():New( 61,01,4,{||Alert('SButton
04')},oDlg,.T.,,)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL











- 393 -

ADVPL Compl et o



TBAR( )

E Descr i ção: Cl asse de obj et os vi suai s que permi t e a i mpl ement ação de um
component e do t i po barra de bot ões para a part e superi or de uma
j anel a previ ament e defi ni da.

E Pr opr i edades:

- Herdados das cl asses superi or es.

E Const r ut or :

E Par âmet r os:

oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
nBt nWi dt h Numéri co, opci onal . Lar gura do bot ão cont i do na barr a
nBt nHei ght Numéri co, opci onal . Al t ura do bot ão cont i do na barra
l 3D Lógi co, opci onal . Defi ne t i po da barra
cMode Não ut i lizado.
oCur sor
Obj et o, opci onal . Defi ne Cursor ao posi ci onar o mouse sobr e a
barra.
cResour ce
Caract er , opci onal . I magem do r ecurso a ser i nseri do como
fundo da bar ra.
l NoAut oAdj u st Lógi co.

E Apar ênci a:



- 394 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'

/*/
+------------------------------------------------------------------------
| Função | TSTBAR | Autor | MICROSIGA |Data | |
+------------------------------------------------------------------------
| Descrição | Programa que demonstra a utilização do objeto TBar() |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/

User Function TstTBar()
Local oDlg

oDlg := MSDIALOG():New(000,000,305,505, 'Exemplo - TBAR',,,,,,,,,.T.)

Exemplo (continuação):

oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )

oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )

oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica' ,,,,;
{||},oTBar,'Critica',,.F.,.F. )

oTBtnBmp2_3 := TBtnBmp2():New( 00, 00, 35, 25, 'bmpcpo' ,,,,;
{||},oTBar,'PCO',,.F.,.F. )

oTBtnBmp2_4 := TBtnBmp2():New( 00, 00, 35, 25, 'preco' ,,,,;
{||},oTBar,'Preço' ,,.F.,.F. )

oDlg:lCentered := .T.
oDlg:Activate()

Return










- 395 -

ADVPL Compl et o



TBI TMAP( )

E Descr i ção: Cl asse de obj et os vi suai s que permi t e a exi bi ção de uma i magem.

E Pr opr i edades:

cResName Caract er e, Nome do r esource
cBmpFil e Caract er e, Nome do arqui vo
l St ret ch Lógi co, opci onal . St rech da i magem
l Aut oSi ze Lógi co, opci onal . Tamanho aut omát i co
l Transparent Lógi co, opci onal . Transparent e

E Const r ut or : New( [ anTop] , [ anLeft ] , [ anWi dt h] , [ anHei ght ] , [ acResName] ,
[ acBmpFil e] , [ al NoBor der] , [ aoWnd] , [ abLCl i cked] , [ abRCli cked] ,
[ al Scroll ] , [ alSt ret ch] , [ aoCursor] , [ acMsg] , [ al Updat e] , [ abWhen] ,
[ al Pi xel ] , [ abVali d] , [ al Desi gn] , [ al I sI con] , [ al I sJpeg] )

E Par âmet r os:

anTop
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anLef t
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
anWi dt h Numéri co, opci onal . Lar gura em pi xel s.
anHei ght Numéri co, opci onal . Al t ura em pi xel s.
acResName Caract er e, Nome do r esource.
acBmpFi l e Caract er e, Nome do arqui vo.
al NoBor der Lógi co, opci onal . Exi be borda
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde a i magem deverá
ser cri ada.
abLCl i ck ed
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
bot ão esquerdo do mouse for pressi onado.
abRCl i ck ed
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
bot ão di rei t o do mouse for pr essi onado.
al Scr ol l Lógi co, opci onal . At i va o scrol l
al St r et ch Lógi co, opci onal . St rech da i magem
aoCur sor Obj et o, opci onal . Cursor a ser exi bi do
acMsg Não ut i lizado
al Updat e Não ut i lizado
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
al Pi x el Lógi co, opci onal . Ut iliza coordenadas em pi xel
abVal i d
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado na
vali dação.
al Desi gn Não ut i lizado
al I sI con
Lógi co, opci onal . Í cone. Não ut i lizado a part i r da versão
Prot heus 8
al I sJpeg
Lógi co, opci onal . Jpeg. Não ut i lizado a part i r da versão
Prot heus 8


- 396 -

ADVPL Compl et o



E Mét odos aux i l i ar es:

Cr eat e

O Descr i ção: Ret orna Mét odo const rut or opci onal da cl asse.
O Si nt ax e: Creat e( )
O Par âmet r os:

Nenhum -

O Ret or no:

Obj et o
Obj et o da cl asse TBar com t odos os at r i but os com
cont eúdos padrões.

Set Bmp

O Descr i ção: Mét odo par a car r egar uma i magem do reposi t óri o.
O Si nt ax e: Set Bmp( acResName )
O Par âmet r os:

acResName Caract er e, Nome do r esource

O Ret or no:

Nen hum -

Load

O Descr i ção: Mét odo par a car r egar uma i magem do reposi t óri o ou l ocal .
O Si nt ax e: Load( acResName, acBmpFi l e )
O Par âmet r os:

acResName Caract er e, Nome do r esource.
acBmpFil e Caract er e, Nome do arqui vo.

O Ret or no:

Nen hum -

E Apar ênci a:



- 397 -

ADVPL Compl et o



Ex empl o:


#include “protheus.ch”


User Function tBitmapTst()
Local oDlg
Local oBmp

DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 280,330 PIXEL

@ 10, 10 BITMAP oBmp RESOURCE 'totvs.bmp' SIZE 150,150 OF oDlg PIXEL
oBmp:lAutoSize := .T.

ACTIVATE MSDIALOG oDlg CENTERED

Return

.

TBROWSEBUTTON( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po bot ão no format o padrão ut ili zado
em br owses da apl i cação.

E Pr opr i edades:

bAct i on
Bl oco de códi go. Execut ado ao pr eci onar o bot ão esquerdo
do mouse.

E Const r ut or : New( [ nRow] , [ nCol ] , [ cCapt i on] , [ oWnd] , [ bAct i on] , [ nWi dt h] ,
[ nHei ght ] , [ nHel pI d] , [ oFont ] , [ l Defaul t ] , [ l Pi xel ] , [ l Desi gn] , [ cMsg] ,
[ l Updat e] , [ bWhen] , [ bVali d] , [ l Cancel ] )

E Par âmet r os:

nRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
nCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
cCapt i on Caract er e, opci onal . Ti t ul o do bot ão.
oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
bAct i on
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
quando o bot ão for pressi onado.
nWi dt h Numéri co, opci onal . Lar gura do bot ão em pi xel s
nHei ght Numéri co, opci onal . Al t ura do bot ão em pi xel s.

nHel pI d Reser vado
oFont
Obj et o, opci onal . Obj et o t i po t Font com propri edades da
font e ut i lizada para o t ít ul o do bot ão.
l Def au l t Reser vado
l Pi x el
Lógi co, opci onal . Se . T. consi dera as coordenadas passadas
em pi xel s, se .F. ( padrão) consi dera em caract eres.

- 398 -

ADVPL Compl et o


l Desi gn Reser vado
cMsg Reser vado
l Updat e Reser vado
bWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
bVal i d Reser vado
l Cancel Reser vado

E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBrowseButton := TBrowseButton():New( 01,01,'TBrowseButton',oDlg,;

{||Alert('TBrowseButton')},40,10,,,.F.,.T.,.F.,,.F.,,,)

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL















- 399 -

ADVPL Compl et o



TBTNBMP( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po bot ão, o qual permi t e que sej a
vi ncul ada uma i magem ao cont r ol e.

E Pr opr i edades:

bAct i on
Bl oco de códi go. Execut ado ao pr eci onar o bot ão esquerdo
do mouse.

E Const r ut or : NewBar( [ cResName1] , [ cResName2] , [ cBmpFil e1] , [ cBmpFil e2] ,
[ cMsg] , [ bAct i on] , [ l Group] , [ oWnd] , [ l Adj ust ] , [ bWhen] , [ cTool Ti p] ,
[ l Pressed] , [ bDr op] , [ cAct i on] , [ nPos] , [ cPr ompt ] , [ oFont ] ,
[ cResName3] , [ cBmpFi le3] , [ l Border] )

E Par âmet r os:

cResName1 Caract er e, Nome do r esource
cResName2 Caract er e, Nome do r esource
cBmpFi l e1 Caract er e, NÃO UTI LI ZADO
cBmpFi l e2 Caract er e, NÃO UTI LI ZADO
cMsg Caract er e, Mensagem de Hi nt
bAct i on Bl oco de códi go. Ação execut ada
l Gr oup Lógi co. Defi ne grupo
oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá ser
cri ado
l Adj u st Lógi co, NÃO UTI LI ZADO
bWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
cTool Ti p Mensagem exi bi da quando obj et o exi be seu t ool t i p.
l Pr essed Não ut i lizado
bDr op Não ut i lizado
cAct i on Não ut i lizado
nPos Não ut i lizado
cPr ompt Caract er , opci onal . Capt i on do bot ão.
oFont
Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as
caract eríst i cas da font e ut ili zada para exi bi r o cont eúdo do
cont r ol e.
cResName3 Não ut i lizado
cBmpFi l e3 Não ut i lizado
l Bor der Não ut i lizado


- 400 -

ADVPL Compl et o



E Mét odos aux i l i ar es:

LoadBi t maps

O Descr i ção: At ri bui ao bot ão os bi t maps ou r ecursos para exi bi ção.
O Si nt ax e: LoadBi t maps( [ cResName1] , [ cResName2] , [ cBmpFi l e1] ,
[ cBmpFil e2] , [ cResName3] , [ cBmpFil e3] )

O Par âmet r os:

cResName1 Caract er e, Nome do r esource
cResName2 Caract er e, Nome do r esource
cBmpFil e1 Caract er e, Nome do arqui vo BMP
cBmpFil e2 Caract er e, Nome do arqui vo BMP
cResName3 Caract er e, Nome do r esource
cBmpFil e3 Caract er e, Nome do r esource

O Ret or no:

Nen hum


Set PopUpMenu

O Descr i ção: Set a o obj et o do t i po TMenu referent e ao bot ão.
O Si nt ax e: Set PopupMenu( oMenu)
O Par âmet r os:

Nenhum -

O Ret or no:

Nen hum -

E Apar ênci a:



- 401 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. ) // Orig: 25,45
oTBtnBmp1 := TBtnBmp() :NewBar('RPMNEW',,,,'Msg 01',;
{||Alert('TBtnBmp
01')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
oTBtnBmp2 := TBtnBmp() :NewBar('copyuser',,,,'Msg 02',;
{||Alert('TBtnBmp
02')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


TBTNBMP2 ( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po bot ão, o qual permi t e a exi bi ção de
uma i magem ou de um popup.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New( [ anTop] , [ anLeft ] , [ anWi dt h] , [ anHei ght ] , [ acResName1] ,
[ acResName2] , [ acBmpFil e1] , [ acBmpFil e2] ,[ abAct i on] , [ aoWnd] ,
[ acMsg] , [ abWhen] , [ l Adj ust e] , [ l Updat e] )

E Par âmet r os:

anTop
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anLef t
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
anWi dt h Numéri co, opci onal . Lar gura em pi xel s.
anHei ght Numéri co, opci onal . Al t ura em pi xel s.
acResName1 Caract er e, Nome do r esource
acResName2 Caract er e, NÃO UTI LI ZADO
acBmpFi l e1 Caract er e, NÃO UTI LI ZADO
acBmpFi l e2 Caract er e, NÃO UTI LI ZADO
abAct i on Bl oco de códi go. Ação execut ada
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá ser
cri ado
acMsg Caract er e, Mensagem de Hi nt
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
l Adj u st Lógi co, NÃO UTI LI ZADO
l Updat e Lógi co, NÃO UTI LI ZADO

E Mét odos aux i l i ar es:

- 402 -

ADVPL Compl et o



LoadBi t maps

O Descr i ção: At ri bui ao bot ão os bi t maps ou r ecursos para exi bi ção.
O Si nt ax e: LoadBi t maps( [ cResName1] , [ cResName2] , [ cBmpFi l e1] ,
[ cBmpFil e2] , [ cResName3] , [ cBmpFil e3] )

O Par âmet r os:

cResName1 Caract er e, Nome do r esource
cResName2 Caract er e, Nome do r esource
cBmpFi l e1 Caract er e, Nome do arqui vo BMP
cBmpFi l e2 Caract er e, Nome do arqui vo BMP
cResName3 Caract er e, Nome do r esource
cBmpFi l e3 Caract er e, Nome do r esource

O Ret or no:

Nen hum

Set PopUpMenu

O Descr i ção: Set a o obj et o do t i po TMenu referent e ao bot ão.
O Si nt ax e: Set PopupMenu( oMenu)
O Par âmet r os:

Nenhum -

O Ret or no:

Nen hum -

E Apar ênci a:



- 403 -

ADVPL Compl et o



Ex empl o:

Local oBtn := TBtnBmp2():New( 10, 10, 25, 25, 'printer_r2' , , , , , oDlg,
, , )
Exemplo 2 (Popup)
#INCLUDE 'PROTHEUS.CH'
User Function BtnBmpPopUp
Local oDlg
Local oBtn
DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 100,200 PIXEL
oBtn := TBtnBmp2():New( 10, 10, 13, 13, 'IBF-MENU.BMP' , 'IBF-MENU.BMP' ,
, , , oDlg, , , .T.)
oBtn:SetPopupmenu(TShowMenu())
ACTIVATE MSDIALOG oDlg CENTERED
Return

/**************************/
Static Function TShowMenu()
Local oMenu
oMenu := TMenu():New(0,0,0,0,.T.)
oMenu:Add(TMenuItem():New(,'Detalhes', 'Detalhes',,, ,,,,,,,,,.T.))
oMenu:Add(TMenuItem():New(,'Add Info', 'Add Info',,, ,,,,,,,,,.T.))
Return oMenu

TBUTTON( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po bot ão, o qual permi t e a ut ili zação
de t ext o para sua i dent ifi cação.

E Pr opr i edades:

l Pr ocessi n g Lógi co. Se .T. i ndi ca o bot ão est á efet uando uma ação.
bAct i on Bl oco de códi go. Execut ado quando o bot ão é pressi onado.

E Const r ut or : New( [ anRow] , [ anCol ] , [ acCapt i on] , [ aoWnd] , [ abAct i on] ,
[ anWi dt h] , [ anHei ght ] , [ nPar8] , [ aoFont ] , [ l Par10] ,
[ al Pi xel ] ,[ l Par12] ,[ cPar13] , [ l Par14] , [ abWhen] , [ bPar16] , [ l Par17] )

E Par âmet r os:

Par âmet r o Ti po / Descri ção
anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
acCapt i on Caract er e, opci onal . Ti t ul o do bot ão.
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
abAct i on
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
quando o bot ão for pressi onado.
anWi dt h Numéri co, opci onal . Lar gura do bot ão em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do bot ão em pi xel s.
nPar 8 Reser vado.
aoFont
Obj et o, opci onal . Obj et o t i po t Font com propri edades da
font e ut i lizada para o t ít ul o do bot ão.

- 404 -

ADVPL Compl et o


l Par 10 Reser vado.
al Pi x el
Lógi co, opci onal . Se . T. consi dera as coordenadas passadas
em pi xel s, se .F. ( padrão) consi dera em caract eres.
l Par 12 Reser vado.
cPar 1 3 Reser vado.
l Par 14 Reser vado.
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
bPar 16 Reser vado.
l Par 17 Reser vado.

E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo
aItems:= {'item1','item2','item3'}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo'
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')

// Botão para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor é '+cCombo )
Return NIL

- 405 -

ADVPL Compl et o



TCBROWSE( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po Gr i d.

E Pr opr i edades:

+ Herdadas da cl asse superi or
nAt Li nha at ual ment e sel eci onada / posi ci onada no obj et o
nLen Númer o t ot al de li nhas do obj et o

E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei gt h] ,[ bFi el ds] , [ aHeader s] ,
[ aCol Si zes] , [ oDl g] , [ cFi eld] , [ uVal ue1] , [ uValue2] ,
[ uChange] ,[ { | nRow,nCol ,nFl ags| [ uLDbl Cli ck] } ] ,
[ { | nRow,nCol ,nFl ags| [ uRCli ck] } ] , [ oFont ] , [ oCursor] , [ nCl rFor e] ,
[ nCl rBack] , [ cMsg] , [ l Updat e] , [ cAli as] , [ l Pi xel ] , [ { uWhen} ] ,
[ l Desi gn] , [ bValid] , [ l HScr oll ] , [ l VScrol l ] )

E Par âmet r os:

nRow Numéri co, opci onal . Coordenada vert i cal
nCol Numéri co, opci onal . Coordenada hori zont al
nWi dt h Numéri co, opci onal . Lar gura do obj et o
nHei ght Numéri co, opci onal . Al t ura do obj et o
bFi el ds Bl oco de códi go, Li st a de Campos
aHeader s Vet or, Descri ção dos campos para no cabeçal ho
aCol Si zes Vet or, Largur a das col unas
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor deverá
ser cri ado.
cFi el d Caract er , opci onal . Campos necessári os ao fil t ro
uVal ue1 I ndefi ni do, opci onal . I ni ci o do i nt erval o para o fi l t ro
uVal ue2 I ndefi ni do, opci onal . Fim do i nt erval o par a o fi lt ro
bCh ange
Bl oco de códi go, opci onal . Execut ado quando o i t em
sel eci onado é al t erado.
bLDbl Cl i ck
Bl oco de códi go, opci onal . Execut ado quando aci onado dupl o
cli ck do bot ão esquerdo do mouse sobr e o cont r ol e.
bRCl i ck Não ut i lizado
oFont Obj et o, opci onal . Font e
oCur sor Obj et o, opci onal . Ti po do Cur sor
nCl r For e Numéri co, opci onal . Cor do t ext o da j anel a.
nCl r Back Numéri co, opci onal . Cor de fundo da j anel a.
cMsg
Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o
obj et o
l Updat e Não ut i lizado
cAl i as
Caract er , opci onal se obj et o ut ili zado com Vet or , obri gat ori o
se ut i lizado com Tabel a
l Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
bWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
l Desi gn Não Ut i li zado
bVal i d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo

- 406 -

ADVPL Compl et o


for vál i do e .F. quando o cont eúdo for i nváli do.
l HScr ol l
Lógi co, opci onal . Se . T., habilit a barra de rol agem
hori zont al .
l VScr ol l Lógi co, opci onal . Se . T., habilit a barra de rol agem vert i cal .

E Mét odos aux i l i ar es:

GoUp

O Descr i ção: Sal t a uma linha para ci ma.
O Si nt ax e: GoUp( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

GoDow n

O Descr i ção: Sal t a uma linha para bai xo.
O Si nt ax e: GoDow n( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

GoTop

O Descr i ção: Sal t a para pri mei ra linha.
O Si nt ax e: GoTop( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

GoBot t om

O Descr i ção: Sal t a para ult i ma linha.
O Si nt ax e: GoBot t om( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l


- 407 -

ADVPL Compl et o


Row Count

O Descr i ção: Ret orna numer o de l i nhas vi si vei s.
O Si nt ax e: Row Count ( )
O Par âmet r os:

Nen hum -

O Ret or no:

Ni l

E Apar ênci a:




- 408 -

ADVPL Compl et o


Ex empl o:

#include 'protheus.ch'
user function TcBrowse_EX()
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
Local aList := {} // Vetor com elementos do Browse
Local nX
// Cria Vetor para teste
for nX := 1 to 100
aListAux := {.T., strzero(nX,10), 'Descrição do Produto '+;
strzero(nX,3), 1000.22+nX}
aadd(aList, aListAux)
next

DEFINE MSDIALOG oDlg FROM 0,0 TO 520,600 PIXEL TITLE 'Exemplo da TCBrowse'
// Cria objeto de fonte que sera usado na Browse
Define Font oFont Name 'Courier New' Size 0, -12
// Cria Browse
oList := TCBrowse():New( 01 , 01, 300, 200,,;
'','Codigo','Descrição','Valor'},{20,50,50,50},;
oDlg,,,,,{||},,oFont,,,,,.F.,,.T.,,.F.,,, )
// Seta o vetor a ser utilizado
oList:SetArray(aList)
// Monta a linha a ser exibina no Browse
oList:bLine := {||{ If(aList[oList:nAt,01],oOK,oNO),;
aList[oList:nAt,02],;
aList[oList:nAt,03],;
Transform(aList[oList:nAT,04],'@E 99,999,999,999.99') } }
// Evento de DuploClick (troca o valor do primeiro elemento do Vetor)
oList:bLDblClick := {|| aList[oList:nAt][1] :=;
!aList[oList:nAt][1],oList:DrawSelect() }
// Principais commandos
oBtn := TButton():New( 210, 001,'GoUp()' , oDlg,{||oList:GoUp()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 001,'GoDown()', oDlg,{||oList:GoDown()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 001,'GoTop()' , oDlg,{||oList:GoTop()}, ;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 001,'GoBottom()', oDlg,{||oList:GoBottom()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 210, 060, 'nAt (Linha selecionada)' ,;
oDlg,{|| Alert(oList:nAt)},;
90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 060, 'nRowCount (Nr de linhas visiveis)',
oDlg,;{|| Alert(oList:nRowCount()) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 230, 060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oList:nLen) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )

oBtn := TButton():New( 240, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aList,oList,'@!',3) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return


- 409 -

ADVPL Compl et o



TCHECKBOX( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - CheckBox.

E Pr opr i edades:

bLCl i ck ed Bl oco de códi go di sparado ao cl i que do mouse no obj et o
bSet Get
Bl oco de códi go di sparado na mudança de i t em sel eci onado,
responsavel pel a mudança de val or da vari avel numeri ca
que i ndi ca o i t em sel eci onado.
bWhen
Bl oco de códi go r ecebe um l ógi co e de True per mi t e
al t eração, se Fal se não permi t e.
bVal i d Bl oco de códi go execut ado na sai da do obj et o.

E Const r ut or : New( [ nRow] , [ nCol ] , [ cCapt i on] , [ bSet Get ] , [ oDl g] , [ nWi dt h] ,
[ nHei ght ] , [ aHel pI ds] , [ bLCl i cked] , [ oFont ] , [ bVali d] , [ nCl rText ] ,
[ nCl rPane] , [ l Desi gn] , [ lPi xel ] , [ cMsg] , [ l Updat e] , [ bWhen] )

E Par âmet r os:

nRow Numéri co, opci onal . Coordenada vert i cal
nCol Numéri co, opci onal . Coordenada hori zont al
cCapt i on Caract er , Text o descri t ivo
bSet Get Code- bl ock, opci onal , Responsável pel a set agem de val or
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor deverá
ser cri ado.
nWi dt h Numéri co, opci onal . Lar gura do obj et o
nHei ght Numéri co, opci onal . Al t ura do obj et o
aHel pI ds Não ut i lizado
bLCl i ck ed Bl oco de códi go, opci onal . Execut ado ao cl i que do mouse.
oFont Obj et o, opci onal . Font e
bVal i d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.
nCl r Tex t Numéri co, opci onal . Cor do t ext o da j anel a.
nCl r Pane Numéri co, opci onal . Cor de fundo da j anel a.
l Desi gn Não ut i lizado
l Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
cMsg
Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o
obj et o
l Updat e Não ut i lizado
bWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.


- 410 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
user function TCheckBox()
DEFINE MSDIALOG oDlg FROM 0,0 TO 270,400 PIXEL TITLE 'Exemplo da
TCBrowse'
lCheck1 := .T.
oCheck1 := TCheckBox():New(01,01,'CheckBox 001',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck2 := TCheckBox():New(11,01,'CheckBox 002',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck3 := TCheckBox():New(21,01,'CheckBox 003',,oDlg,
100,210,,,,,,,,.T.,,,)

oCheck4 :=TCheckBox():New(31,01,'CheckBox 004',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck5 := TCheckBox():New(41,01,'CheckBox
005',,oDlg,100,210,,,,,,,,.T.,,,)


// Seta Eventos do primeiro Check
oCheck1:bSetGet := {|| lCheck1 }
oCheck1:bLClicked := {|| lCheck1:=!lCheck1 }
oCheck1:bWhen := {|| .T. }
oCheck1:bValid := {|| Alert('bValid') }
// Principais comandos
oBtn := TButton():New( 060, 001, 'Retorna estado do CheckBox
001',;
oDlg,{|| Alert(lCheck1) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return

- 411 -

ADVPL Compl et o



TCOLORTRI ANGLE( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po Pal et a de Cor es.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ anWi dt h] , [ anHei ght ] )

E Par âmet r os:

anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde a pal et a deverá
ser cri ada.
anWi dt h Numéri co, opci onal . Lar gura da pal et a em pi xels.
anHei ght Numéri co, opci onal . Al t ura da pal et a em pi xel s.

E Mét odos aux i l i ar es:

Cr eat e

O Descr i ção: Mét odo const rut or opci onal da cl asse.
O Si nt ax e: Creat e( aoWnd)
O Par âmet r os:

aoWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a pal et a deverá
ser cri ada.

O Ret or no:

Obj et o
Obj et o do t i po TCol orTr i angul e com os at ri but os defi ni dos
com cont eúdo padrão.

Ret Col or

O Descr i ção: Ret orna o RGB da cor sel eci onada
O Si nt ax e: Ret Col or ( )
O Par âmet r os:

Nenhum -

O Ret or no:

Numér i co Val or que represent a do RGB da cor.



- 412 -

ADVPL Compl et o




Set Col or I n i

O Descr i ção: Defi ne a cor i ni ci al sel eci onada para o cont r ol e.
O Si nt ax e: Set Col or I ni ( nCol or )
O Par âmet r os:

nCol or Val or da cor i ni ci al no padrão RGB.

O Ret or no:

Nen hum -

Set Col or

O Descr i ção: Defi ne a cor corr ent e.
O Si nt ax e: Set Col or ( nCol or )
O Par âmet r os:

nCol or Val or da cor i ni ci al no padrão RGB.

O Ret or no:

Nen hum -

Set Si zeTr i angul e

O Descr i ção: Defi ne o t amanho do t ri ângul o de confi guração das cores.
O Si nt ax e: Set Si zeTr i an gul e ( nWi dh, nHei ght )
O Par âmet r os:

nWi dt h Numéri co. Largura
nHei ght Numéri co.Al t ura

O Ret or no:

Nen hum -

E Apar ênci a:



- 413 -

ADVPL Compl et o



Ex empl o:

#include “protheus.ch”


User Function tColor()
Local oDlg, oColorT
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Cores”
// Usando o método create
oColorT := tColorTriangle():Create( oDlg )
oColorT:SetColorIni( nColorIni )
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil

TCOMBOBOX( )

E Descr i ção: Cl asse de obj et os vi suai s do t ipo t ComboBox, a qual cri a uma
ent rada de dados com múl t ipl a escol ha com i t em defi ni do em uma
li st a vert i cal , aci onada por F4 ou pel o bot ão esquerdo l ocali zado na
part e di rei t a do cont rol e. A vari ável associ ada ao cont rol e t erá o
val or de um dos i t ens sel eci onados ou no caso de uma li st a
i ndexada, o val or de seu índi ce.

E Pr opr i edades:

aI t ems
Array. Li st a de i t ens, caract er es, a serem exi bi dos. Pode t er
os segui nt es format os: a) Seqüenci al , exempl o:
{ “ i t em1” ,” i t em2” ,... ,” i t emN” } ou b) I ndexada, exempl o:
{ “ a= i t em1” ,” b= i t em2” , ..., “ n= i t emN” } .
nAt Numéri co. Posi ção do i t em sel eci onado.

E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ anI t ems] , [ anWi dt h] ,
[ anHei ght ] , [ aoWnd] , [ nPar8] , [ abChange] , [ abVali d] , [ anCl rText ] ,
[ anCl rBack] , [ al Pi xel ] , [ aoFont ] , [ cPar15] , [ l Par16] , [ abWhen] ,
[ l Par18] , [ aPar19] , [ bPar20] , [ cPar21] , [ acReadVar] )

E Par âmet r os:

Par âmet r o
anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abSet Get
Bl oco de códi go, opci onal . Bl oco de códi go no format o { | u|
i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za
para at uali zar a vari ável < var > . < var > deve ser t i po
caract er. Se a l i st a for seqüenci al , o cont rol e at ualizará
< var> com o cont eúdo do i t em sel eci onado, se a li st a for
i ndexada, < var> será at ualizada com o val or do índi ce do
i t em sel eci onado.
an I t ems
Array, opci onal . Li st a de i t ems, caract er es, a ser em exi bi dos.
Pode t er os segui nt es format os: a) Seqüenci al , exempl o:
{ “ i t em1” ,” i t em2” ,... ,” i t emN” } ou b) I ndexada, exempl o:
{ “ a= i t em1” ,” b= i t em2” , ..., “ n= i t emN” } .
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.

- 414 -

ADVPL Compl et o


anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e será
cri ado.
nPar 8 Reser vado.
abChange
Bl oco de códi go, opci onal . Execut ado quando o cont r ol e
modi fi ca o i t em sel eci onado.
abVal i d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.
anCl r Back Numéri co, opci onal . Cor de fundo do cont rol e.
anCl r Tex t Numéri co, opci onal . Cor do t ext o do cont rol e.
al Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
aoFont
Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as
caract eríst i cas da font e ut ili zada para exi bi r o cont eúdo do
cont r ol e.
cPar 1 5 Reser vado.
l Par 16 Reser vado.
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
l Par 18 Reser vado.
aPar 19 Reser vado.
bPar 20 Reser vado.
cPar 2 1 Reser vado.
acReadVar
Caract er e, opci onal . Nome da vari ável que o cont rol e deverá
mani pul ar, deverá ser a mesma vari ável informada no
parâmet ro abSet Get , e será o r et orno da função ReadVar( ) .

E Mét odos aux i l i ar es:

Sel ect

O Descr i ção: Muda o i t em sel eci onado no combobox.
O Si nt ax e: Sel ect ( [ anI t em] )
O Par âmet r os:

anI t em Numéri co, opci onal . Posi ção do i t em a ser sel eci onado.

O Ret or no:

Nen hum -


- 415 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo
aItems:= {'item1','item2','item3'}
cCombo:= aItems[2]
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Combo'
oCombo:= tComboBox():New(10,10,{|u|if(PCount()>0,cCombo:=u,cCombo)},;
aItems,100,20,oDlg,,{||MsgStop('Mudou item')},,,,.T.,,,,,,,,,'cCombo')

// Botão para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor é '+cCombo )
Return NIL

- 416 -

ADVPL Compl et o



TFOLDER( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Fol der.

E Pr opr i edades:

aPr ompt s Array, Ti t ul o dos fol ders
aDi al ogs Array, Nome dos di ál ogos
nOpt i on Numéri co, Fol der sel ecionado
bSet Opt i on Bl oco de códi go, Execut ado na sel eção do fol der

E Const r ut or : New( [ anTop] , [ anLeft ] , [ aPr ompt s] , [ aDi al ogs] , [ aoWnd] ,
[ anOpt i on] , [ anCl rFore] , [ anCl rBack] , [ al Pi xel ] , [ al Desi gn] , [ anWi dt h] ,
[ anHei ght ] , [ acMsg] , [ al All Wi dt h] )

E Par âmet r os:

anTop
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anLef t
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
aPr ompt s Array, Ti t ul o dos fol ders
aDi al ogs Array, Nome dos di ál ogos
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá ser
cri ado
anOpt i on Numéri co, opci onal . Folder sel eci onado
anCl r For e Numéri co, opci onal . Cor de fr ent e
anCl r Back Numéri co, opci onal . Cor de fundo
al Pi x el Lógi co, opci onal . Ut iliza coordenadas em pi xel
al Desi gn Lógi co, opci onal . NÃO USADO
anWi dt h Numéri co, opci onal . Lar gura em pi xel s.
anHei ght Numéri co, opci onal . Al t ura em pi xel s.
acMsg Caract er e, Mensagem de Hi nt
al Al l Wi dt h Lógi co, opci onal . NÃO USADO

E Mét odos aux i l i ar es:

Set Opt i on

O Descr i ção: Sel eci ona fol der desej ado
O Si nt ax e: Set Opt i on( nOpt i on )
O Par âmet r os:

nOpt i on Numéri co. Fol der a ser sel eci onado

O Ret or no:

Nen hum -


- 417 -

ADVPL Compl et o


AddI t em

O Descr i ção: I nser e um fol der
O Si nt ax e: AddI t em ( cI t em, l Vi si bl e )
O Par âmet r os:

cI t em Caract er e. Tít ul o do Fol der
l Vi si bl e Lógi co. Vi sível

O Ret or no:

Nen hum -

aEn abl e

O Descr i ção: Habili t a/ Desabili t a um fol der
O Si nt ax e: aEnabl e( nI t em, l Enabl e )
O Par âmet r os:

nI t em Numéri co. Fol der para habilit ar/ desabi lit ar
l Enabl e Lógi co. Habi lit a/ Desabilit a

O Ret or no:

Nen hum -

E Apar ênci a:




- 418 -

ADVPL Compl et o



Ex empl o:

Local oFolder
Local aFolder := { 'Folder 1', 'Folder 2', 'Folder 3' }

oFolder := TFolder():New( 0, 0, aFolder, aFolder, oDlg,,,, .T., , 200,;
200 )



TGET( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont r ol e – t Get , a qual cri a um
cont r ol e que armazena ou al t era o cont eúdo de uma vari ável at ravés
de di gi t ação. O cont eúdo da vari ável só é modi fi cado quando o
cont r ol e perde o foco de edi ção para out ro cont r ol e.

E Pr opr i edades:

l Password
Lógi co. Se .T. o cont rol e se comport a como ent r ada de
dados de senha, exi bi ndo ast eri scos ‘* ’ para esconder o
cont eúdo di gi t ado.
Pi ct ure
Caract er e. Máscara de format ação do cont eúdo a ser
exi bi do.

E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ aoWnd] , [ anWi dt h] ,
[ anHei ght ] , [ acPi ct ] , [ abVali d] , [ anCl rFore] , [ anCl rBack] , [ aoFont ] ,
[ l Par12] , [ oPar13] , [ al Pi xel ] , [ cPar15] , [ l Par16] , [ abWhen] , [ l Par18] ,
[ l Par19] , [ abChange] , [ al ReadOnl y] , [ alPassword] , [ cPar23] ,
[ acReadVar] , [ cPar25] , [ l Par26] , [ nPar27] , [ l Par28] )

E Par âmet r os:

anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abSet Get
Bl oco de códi go, opci onal . Bl oco de códi go no format o { | u|
i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za
para at uali zar a vari ável < var > . < var > deve ser t i po
caract er, numéri co ou dat a.
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e será
cri ado.
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
acPi ct
Caract er e, opci onal . Máscar a de format ação do cont eúdo a
ser exi bido.
abVal i d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.
anCl r For e Numéri co, opci onal . Cor de fundo do cont rol e.
anCl r Back Numéri co, opci onal . Cor do t ext o do cont rol e.
aoFont
Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as
caract eríst i cas da font e ut ili zada para exi bi r o cont eúdo do

- 419 -

ADVPL Compl et o


cont r ol e.
l Par 12 Reser vado.
oPar 13 Reser vado.
al Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
cPar 1 5 Reser vado.
l Par 16 Reser vado.
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
l Par 18 Reser vado.
l Par 19 Reser vado.
abChange
Bl oco de códi go, opci onal . Execut ado quando o cont r ol e
modi fi ca o val or da vari ável associ ada.
al ReadOnl y Lógi co, opci onal . Se . T. o cont r ol e não poderá ser edi t ado.
al Passw or d
Lógi co, opci onal . Se . T. o cont r ol e exi bi rá ast eri scos “ * ” no
l ugar dos caract er es exibi dos pel o cont r ol e para si mul ar
ent rada de senha.
cPar 2 3 Reser vado.
acReadVar
Caract er e, opci onal . Nome da vari ável que o cont rol e deverá
mani pul ar, deverá ser a mesma vari ável informada no
parâmet ro abSet Get , e será o r et orno da função ReadVar( ) .
cPar 2 5 Reser vado.
l Par 26 Reser vado.
nPar 27 Reser vado.
l Par 28 Reser vado.

E Apar ênci a:



- 420 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, nGet1:=0
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Get'
oGet1:= TGet():New(10,10,{|u| if(PCount()>0,nGet1:=u,nGet1)}, oDlg,;
100,20,'@E 999,999.99',;
{|o|nGet1>1000.00},,,,,,.T.,,,,,,,,,,'nGet1')

// Botão para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor é '+Transform(nGet1,'@E 999,999.00') )

Return NIL

TGROUP( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po painel – t Group, a qual cri a um
pai nel onde cont r ol es vi suai s podem ser agrupados ou cl assi fi cados.
Nest e pai nel é cri ada uma borda com t ít ul o em vol t a dos cont r ol es
agrupados.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New( [ anTop] , [ anLeft ] , [ anBot t om] , [ anRi ght ] , [ acCapt i on] ,
[ aoWnd] , [ anCl rText ] , [ anCl rPane] , [ al Pi xel ] , [ lPar10] )

E Par âmet r os:

anTop
Numéri co, opci onal . Coordenada vert i cal superi or em pi xel s
ou caract er es.
anLef t
Numéri co, opci onal . Coordenada hori zont al esquerda em
pi xel s ou caract eres.
an Bot t om
Numéri co, opci onal . Coordenada vert i cal i nferi or em pi xel s
ou caract er es.
anRi ght
Numéri co, opci onal . Coordenada hori zont al di reit a em pi xel s
ou caract er es.
acCapt i on Caract er e, opci onal . Tít ul o do grupo.
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e será
cri ado.
anCl r Tex t Numéri co, opci onal . Cor do t ext o.
anCl r Pan e Numéri co, opci onal . Cor do fundo.
al Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
l Par 10 Reser vado.


- 421 -

ADVPL Compl et o



E Apar ênci a:




Ex empl o:


#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oGroup:= tGroup():New(10,10,130,130,'grupo de gets',oDlg,,,.T.)
@ 18,16 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
@ 38,16 MSGET oGet2 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
ACTIVATE MSDIALOG oDlg CENTERED











- 422 -

ADVPL Compl et o



THBUTTON( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po bot ão com hi perl ink.

E Pr opr i edades:

bAct i on Bl oco de códi go. Execut ado quando o bot ão é pressi onado.

E Const r ut or : New( [ anRow] , [ anCol ] , [ acCapt i on] , [ aoWnd] , [ abAct i on] ,
[ anWi dt h] , [ anHei ght ] , [ aoFont ] , [ abWhen] )

E Par âmet r os:

Par âmet r o Ti po / Descri ção
anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
acCapt i on Caract er e, opci onal . Ti t ul o do bot ão.
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
abAct i on
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
quando o bot ão for pressi onado.
anWi dt h Numéri co, opci onal . Lar gura do bot ão em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do bot ão em pi xel s.
aoFont
Obj et o, opci onal . Obj et o t i po t Font com propri edades da
font e ut i lizada para o t ít ul o do bot ão.
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.

E Mét odos aux i l i ar es:

Cr eat e

O Descr i ção: Mét odo const rut or opci onal da cl asse.
O Si nt ax e: Creat e( aoWnd)
O Par âmet r os:

aoWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a pal et a deverá
ser cri ada.

O Ret or no:

Obj et o
Obj et o do t i po THBut t on com os at ri but os defi nidos com
cont eúdo padrão.


- 423 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include “protheus.ch”
#include “hbutton.ch”
User Function MyhBtn()
Local oDlg, ohBtn
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE “Meu hButton”
// Usando o método create
ohBtn:= tHButton():Create( oDlg )
ohBtn:nTop := 100
ohBtn:nLeft := 10
ohBtn:nWidth := 100
ohBtn:nHeight := 30
ohBtn:cCaption := 'hButton'
ohBtn:blClicked := { || MsgStop( 'Cliquei' ) }
// Usando o command
@ 200,100 HBUTTON ohBtn PROMPT 'Exemplo hButton' SIZE 100,30 ACTION
MsgStop('Cliquei') OF oDlg MESSAGE 'hButton'
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil


TI BROWSER( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po Pági na de I nt ernet , sendo
necessári o i ncl ui r a cl ausul a Browser Enabl ed= 1 no Confi g do
Remot e. I NI

E Pr opr i edades:

- Herdadas da cl asse superi or

E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei ght ] , [ cPager] , [ oWnd] )

E Par âmet r os:

nRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
nCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres
nWi dt h Numéri co, opci onal . Lar gura em pi xel s
nHei gt h Numéri co, opci onal . Al t ura em pi xel s.
cPage Caract er . Enr edeço URL da pági na de I nt ernet
oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá ser
cri ado

E Apar ênci a:

- 424 -

ADVPL Compl et o





Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// Habilitar no Remote(Config) -> BrowserEnabled=1
oTIBrowser:=
TIBrowser():New(0,0,306,134,'http://www.microsiga.com.br',oDlg )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL












- 425 -

ADVPL Compl et o



TLI STBOX( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e – t Li st box, a qual cri a uma
j anel a com i t ens sel eci onávei s e barra de rol agem. Ao sel eci onar um
i t em, uma vari ável é at ualizada com o cont eúdo do i t em sel eci onado.

E Pr opr i edades:

nAt Numéri co. Posi ção do i t em sel eci onado.
aI t ems Array de i t ems caract er es. Li st a do i t ens sel eci onávei s.

E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ aaI t ems] , [ anWi dt h] ,
[ anHei gt h] , [ abChange] , [ aoWnd] , [ abVali d] , [ anCl rFor e] ,
[ anCl rBack] , [ al Pi xel ] , [ l Par13] , [ abLDBLCl i ck] , [ aoFont ] , [ cPar16] ,
[ l Par17] , [ abWhen] , [ aPar19] , [ bPar20] , [ l Par21] , [ l Par22] ,
[ abRi ght Cli ck] )

E Par âmet r os:

anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abSet Get
Bl oco de códi go, opci onal . Bl oco de códi go no format o { | u|
i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za
para at uali zar a vari ável < var > . < var > deve ser t i po
caract er ou numéri ca.
aaI t ems
Array de i t ems caract er es, opci onal . Li st a de i t ems
sel eci onávei s.
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
abChange
Bl oco de códi go, opci onal . Execut ado quando o i t em
sel eci onado é al t erado.
aoWn d
Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e será
cri ado.
abVal i d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.
anCl r For e Numéri co, opci onal . Cor de fundo do cont rol e.
anCl r Back Numéri co, opci onal . Cor do t ext o do cont rol e.
al Pi x el
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
l Par 13 Reser vado.
abLDBLCl i ck
Bl oco de códi go, opci onal . Execut ado quando aci onado dupl o
cli ck do bot ão esquerdo do mouse sobr e o cont r ol e.
aoFont
Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as
caract eríst i cas da font e ut ili zada para exi bi r o cont eúdo do
cont r ol e.
cPar 1 6 Reser vado.
l Par 17 Reser vado.
abWh en
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.

- 426 -

ADVPL Compl et o


aPar 19 Reser vado.
bPar 20 Reser vado.
l Par 21 Reser vado.
l Par 22 Reser vado.
abRi ght Cl i ck
Bl oco de códi go, opci onal . Execut ado quando aci onado cl i ck
do bot ão di rei t o do mouse sobr e o cont rol e.

E Mét odos aux i l i ar es:

Sel ect

O Descr i ção: Força a sel eção de um i t em.
O Si nt ax e: Sel ect ( [ anI t em] )
O Par âmet r os:

nI t em Numéri co, opci onal . Posi ção do i t em a ser sel eci onado.

O Ret or no:

Nen hum -

Add

O Descr i ção: Adi ci ona novo i t em.
O Si nt ax e: Add( cText , nPos )
O Par âmet r os:

cText Caract er e, obri gat óri o. Text o do i t em.
nPos
Numéri co, obri gat óri o. Se 0 ou mai or que o númer o de
i t ens, i nsere o i t em no fi nal da li st a. Se val or ent re 1 e
número de i t ens, i nser e o i t em na posi ção i nfor mada,
empur rando o i t em ant eri or para bai xo.

O Ret or no:

Nen hum -

Modi f y

O Descr i ção: Modi fi ca o t ext o de um i t em.
O Si nt ax e: Modi fy( cText , nPos )
O Par âmet r os:

cText Caract er e, obri gat óri o. Novo t ext o do i t em.
nPos
Numéri co, obri gat óri o. Posi ção a ser modi fi cada deve ser
mai or que 0 e menor ou i gual que o númer o de i t ens.

O Ret or no:

Nen hum -


- 427 -

ADVPL Compl et o



Del

O Descr i ção: Remove um i t em.
O Si nt ax e: Del ( nPos )
O Par âmet r os:

nPos
Numéri co, obri gat óri o. Posi ção a ser excl ui da, deve ser
mai or que 0 e menor ou i gual que o númer o de i t ens.

O Ret or no:

Nen hum -

Len

O Descr i ção: Ret orna o númer o de i t ens.
O Si nt ax e: Len( )
O Par âmet r os:

Nenhum -

O Ret or no:

Numéri co Númer o de i t ens.

Reset

O Descr i ção: Apaga t odos os i t ens.
O Si nt ax e: Reset ( )
O Par âmet r os:

Nenhum -

O Ret or no:

Nen hum -


- 428 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oList, nList:= 1
Local aItems:={}
Aadd(aItems,'Item 1')
Aadd(aItems,'Item 2')
Aadd(aItems,'Item 3')
Aadd(aItems,'Item 4')
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE 'Teste'
oList:= tListBox():New(10,10,{|u|if(Pcount()>0,nList:=u,nList)};
,aItems,100,100,,oDlg,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 429 -

ADVPL Compl et o



TMENU( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Menu.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New ( [ nTop] , [ nLeft ] , [ nHei ght ] , [ nWi dt h] , [ l PopUp] , [ cBmpName] ,
[ oWnd] , [ nCl rNoSel ect ] , [ nCl rSel ect ] , [ cArr owUpNoSel ] ,
[ cArr owUpSel ] , [ cArr owDownNoSel ] , [ cAr r owDownSel ] )

E Par âmet r os:

nTop Numéri co, opci onal . Coordenada vert i cal em pi xel s.
nLef t Numéri co, opci onal . Coordenada hori zont al em pi xel s.
nHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
nWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
l PopUp Lógi co. Defi ne se o obj et o será um PoPup
cBmpName Caract er opci onal . Fi gura do Menu
oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá
ser cri ado
nCl r NoSel ect Numeri co opci onal . Cor quando não sel eci onado
nCl r Sel ect Numeri co opci onal . Cor quando sel eci onado
cAr r ow UpNoSel
Caract er opci onal , Defi ne a fi gura da set a para ci ma
quando não sel eci onado o i t em.
cAr r ow UpSel
Caract er opci onal , Defi ne a fi gura da set a para ci ma
quando sel eci onado o i t em.
cAr r ow Dow nNoSel
Caract er opci onal , Defi ne a fi gura da set a para bai xo
quando não sel eci onado o i t em.
cAr r ow Dow nSel
Caract er opci onal , Defi ne a fi gura da set a para bai xo
quando sel eci onado o i t em.

E Apar ênci a:



- 430 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMenu := TMenu():New( 0,0,0,0,.F.,'',oDlg,CLR_WHITE,CLR_BLACK)
// Adiciona Item ao Menu Principal
oMenuItem1 := TMenuItem():New2( oMenu:Owner(),'Item 001','Item
001',,,)
oMenu:Add( oMenuItem1 )

// Adiciona sub-Itens
oMenuItem2 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
001',,,{||Alert('TMenuItem')})
oMenuItem3 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
002',,,{||Alert('TMenuItem')})
oMenuItem1:Add( oMenuItem2 )
oMenuItem1:Add( oMenuItem3 )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


TMENUBAR( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Bar ra de Menu.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New( [ oWnd] )

E Par âmet r os:

oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.

E Apar ênci a:




- 431 -

ADVPL Compl et o


Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// Monta um Menu Suspenso
TMenuBar := TMenuBar():New(oDlg)
TMenuBar:nClrPane := RGB(183,208,248) // Cor de fundo do Menu
oTMenu1 := TMenu():New(0,0,0,0,.T.,,oDlg)
oTMenu2 := TMenu():New(0,0,0,0,.T.,,oDlg)
TMenuBar:AddItem('Arquivo' , oTMenu1, .T.)
TMenuBar:AddItem('Relatorio', oTMenu2, .T.)

// Cria Itens do Menu
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 01',,,,;
{||Alert('TMenuItem 01')},,'AVGLBPAR1',,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 02',,,,;
{||Alert('TMenuItem 02')},,,,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

TMETER( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e – t Met er, a qual exi be uma
régua ( gauge) de pr ocessament o, descr evendo o andament o de um
processo at ravés da exi bi ção de uma barra horizont al .

E Pr opr i edades:

nTot al
Numéri co. Númer o t ot al de passos at é o pr eenchi ment o da
régua de processo.
l Percent age
Lógi co. Se .T. consi dera o passo de movi ment ação em
porcent agem.
nCl rBar Numéri co. Cor da bar ra de andament o.

E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ anTot al ] , [ aoWnd] , [ anWi dt h] ,
[ anHei ght ] , [ l Par8] , [ al Pi xel ] , [ oPar10] , [ cPar11] , [ al NoPerc] ,
[ anCl rPane] , [ nPar14] , [ anCl rBar] , [ nPar16] , [ l Par17] )

E Par âmet r os:

anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abSet Get
Bl oco de códi go, opci onal . Bl oco de códi go no format o { | u|
i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za
para at uali zar a vari ável < var > . < var > deve ser t i po
numéri co.
anTot al
Numéri co, opci onal . Numer o t ot al de passos at é o
preenchi ment o da régua de processo.

- 432 -

ADVPL Compl et o


aoWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e sera
cri ado.
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
l Par8 Reser vado.
al Pi xel
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
oPar10 Reser vado.
cPar11 Reser vado.
al NoPer c
Lógi co, opci onal . Se . T. ( padrão) não consi dera os passos de
at ualização em porcent agem.
anCl rPane Numéri co, opci onal . Cor de fundo do cont rol e.
nPar14 Reser vado.
anCl rBar Numéri co, opci onal . Cor da bar ra de andament o.
nPar16 Reser vado.
l Par17 Reser vado.

E Mét odos aux i l i ar es:

Set

O Descr i ção: At uali za a posi ção da r égua de pr ocessament o.
O Si nt ax e: Set ( [ nVal ] )
O Par âmet r os:

nVal
Numéri co, opci onal . Novo val or da posi ção da r égua de
processament o.

O Ret or no:

Nen hum -


E Apar ênci a:



- 433 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
STATIC lRunning:=.F., lStop:=.F.
User Function Teste()
Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE 'Teste' Pixel
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)};
,100,oDlg,100,16,,.T.) // cria a régua
// botão para ativar andamento da régua
@ 30,10 BUTTON oBtn1 PROMPT 'Run ' OF oDlg PIXEL ACTION RunMeter(oMeter)
@ 50,10 BUTTON oBtn2 PROMPT 'Stop' OF oDlg PIXEL ACTION lStop:=.T.
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
STATIC Function RunMeter(oMeter)
If lRunning
Return
Endif
lRunning:= .T.

oMeter:Set(0)
// inicia a régua
While .T. .and. !lStop
Sleep(1000) // pára 1 segundo
ProcessMessages() // atualiza a pintura da janela, processa mensagens do
windows
nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da régua
nCurrent+=10 // atualiza régua

oMeter:Set(nCurrent)
if nCurrent==oMeter:nTotal
Return
endif
Enddo

lRunning:= .F.
lStop:= .F.
Return


- 434 -

ADVPL Compl et o



TMSGRAPHI C( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Gráfi co.

E Pr opr i edades:

l 3D Lógi co, opci onal Gráfi co em 3D
l Axi sVi si b Lógi co, opci onal Most ra ei xos do gráfi co

E Const r ut or : New( [ anRow] , [ anCol ] , [ aoWnd] , [ aoFont ] , [ anCl rText ] ,
[ anCl rBack] , [ anWi dt h] , [ anHei ght ] )

E Par âmet r os:

anRow Numéri co, opci onal . Coordenada vert i cal em pi xel s.
anCol Numéri co, opci onal . Coordenada hori zont al em pi xel s.
aoWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a i magem deverá
ser cri ada.
aoFont Obj et o, opci onal . Font e ut ili zada no gráfi co.
anCl rText Caract er e, Nome do r esource.
anCl rBack Caract er e, Nome do arqui vo.
anWi dt h Lógi co, opci onal . Exi be borda
anHei ght
Obj et o, opci onal . Janel a ou cont r ol e onde a i magem deverá
ser cri ada.

E Mét odos aux i l i ar es:

Cr eat eSer i e

O Descr i ção: Mét odo par a cri ação de uma seri e para o gráfi co.
O Si nt ax e: Creat eSeri e( [ nSeri eType] , [ cLegend] , [ nDeci mal s] ,
[ l ShowVal ues] )
O Par âmet r os:

nSeri eType
Numéri co. I ndi ca o t i po do gráfi co
GRP_LI NE 1
GRP_AREA 2
GRP_POI NT 3
GRP_BAR 4
GRP_PI E 10
cLegend Caract er e, opci onal . Legenda da séri e.
nDeci mal s
Numéri co, opci onal . Numer o de casas deci mai s dos
val ores.
l ShowVal ues Lógi co, opci onal . Most ra val ores

O Ret or no:

Numéri co Numer o da séri e cri ada.


- 435 -

ADVPL Compl et o



Add

O Descr i ção: Mét odo par a adi ci onar um i t em ao gráfi co.
O Si nt ax e: Add( nSeri e, nVal , cLegend, nCol or )
O Par âmet r os:

nSeri e Numéri co. Seri e a ser i nseri do o i t em.
nVal Numéri co. Val or do i t em.
cLegend Caract er e. Legenda do i t em.
nCol or Numéri co, Cor do i t em.

O Ret or no:

Nen hum -

Set Gr adi ent e

O Descr i ção: Mét odo par a set ar o fundo do gráfi co com uma cor gradi ent e
em det ermi nada di reção.
O Si nt ax e: Set Gr adi ent ( nDi rect i on, St art Col or , EndCol or )
O Par âmet r os:

nDi rect i on
Numéri co. I ndi ca di reção do gradi ent e.
GDTOPBOTTOM 1
GDBOTTOMTOP 2
GDLEFTRI GHT 3
GDRI GHTLEFT 4
St art Col or Numéri co. Cor i ni ci al .
EndCol or Numéri co. Cor fi nal .

O Ret or no:

Nen hum -

Set Ti t l e

O Descr i ção: Defi ne o t i t ul o do gráfi co.
O Si nt ax e: Set Ti t l e( cTi t l e, cTi t l e2, Col or, Ali gment , l Foot )
O Par âmet r os:

cTi t l e Caract er e. Pri mei ro t i t ulo.
cTi t l e2 Caract er e. Segundo t i t ul o.
Col or Numéri co. Cor do t i t ul o.
Ali gment
Numéri co. Al inhament o do t i t ul o.
A_LEFTJUST 1
A_RI GHTJUS 2
A_CENTER 3
l Foot Lógi co. I ndi ca t i t ul o no r odapé do gráfi co.

O Ret or no:

Nen hum -


- 436 -

ADVPL Compl et o



Set LegenPr op

O Descr i ção: Mét odo par a set ar propri edades da l egenda.
O Si nt ax e: Set LegenPr op( Align, Col or, St yl e, Vi sibl e )
O Par âmet r os:

Ali gn
Numeri co. Al inhament o da l egenda.
GRP_SCRTOP 1
GRP_SCRLEFT 2
GRP_SCRBOTTOM 3
GRP_SCRRI GHT 4
Col or Numéri co. Cor da l egenda.
St yl e
Numéri co. Est i l o da l egenda.
GRP_AUTO 1
GRP_SERI ES 2
GRP_VALUES 3
GRPLASTVAL 4
Vi si bl e Lógi co. I ndi ca de o t i t ulo será vi sível .

O Ret or no:

Nen hum -


Set Mar gi ns

O Descr i ção: Mét odo par a set ar as margens superi or , i nferi or e l at erai s do
gráfi co.
O Si nt ax e: Set Margi ns( nTop, nLeft , nBot t om, nRi ght )
O Par âmet r os:

nTop Numéri co. Posi ção em r el ação ao t opo do gráfi co.
nLeft Numéri co. Posi ção em r el ação a esquerda.
nBot t om Numéri co. Posi ção em r el ação ao r odapé.
nRight Numéri co. Posi ção em r el ação a di rei t a.

O Ret or no:

Nen hum -

Set RangeY

O Descr i ção: Def i n e a escal a dos v al or es do ei x o Y
O Si nt ax e: Set RangeY ( mi n, max, del t a) .
O Par âmet r os:

Mi n val or i ni ci al
Max val or fi nal
del t a
i nt erval o ent re os val or es [ opci onal , cal cul ado
aut omat i cament e ]

O Ret or no:

Nen hum -

- 437 -

ADVPL Compl et o



Sav eToBMP

O Descr i ção: Mét odo para sal var o gráfi co at ual em um bit map no
server( Obsol et o, v er Sav eToI mage) .
O Si nt ax e: SaveToBMP( BmpName, Pat hToWri t e )
O Par âmet r os:

BmpName Caract er e, Nome do da fi gura a ser sal va.
Pat hToWri t e Caract er e. Pat h no Server onde será sal va a fi gura.

O Ret or no:

Lógi co I ndi ca se a i magem foi sal va corr et ament e.


Sav eToI mage

O Descr i ção: Mét odo par a sal var o gráfi co at ual em um format o de pr é-
det ermi nado no ser ver.
O Si nt ax e: SaveToI mage( BmpName, Pat hToWri t e, TypeI mage)
O Par âmet r os:

BmpName Caract er e, Nome do da fi gura a ser sal va.
Pat hToWri t e Caract er e. Pat h no Server onde será sal va a fi gura.
TypeI mage
Caract er e. Ti po da Fi gura ( Defaul t ' JPEG' )
Ti pos suport ados: JPEG, PNG, BMP

O Ret or no:

Lógi co I ndi ca se a i magem foi sal va corr et ament e.

Del Ser i e

O Descr i ção: Mét odo par a del et ar uma séri e do grafi co.
O Si nt ax e: Del Seri e ( nSeri e )
O Par âmet r os:

nSeri e Numéri co. Seri e a ser del et ada.

O Ret or no:

Lógi co I ndi ca se a séri a foi removi da do gráfi co

ZoomI n

O Descr i ção: Mét odo par a efet uar zoom i nt erno ( + ) .
O Si nt ax e: ZoomI n( )
O Par âmet r os:

Nen hum -

O Ret or no:

Nen hum -

- 438 -

ADVPL Compl et o



ZoomOut

O Descr i ção: Mét odo par a efet uar zoom ext erno ( - ) .
O Si nt ax e: ZoomOut ( )
O Par âmet r os:

Nen hum -

O Ret or no:

Nen hum -

E Apar ênci a:
















- 439 -

ADVPL Compl et o



Ex empl o:

#include 'MSGRAPHI.CH'
User Function tMsGraphicTst()

DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 250,330 PIXEL

@ 001, 001 MSGRAPHIC oGraphic SIZE 120,120 OF oDlg

oGraphic:SetTitle('Titulo do Grafico', DTOC(Date()), CLR_BLACK,
A_LEFTJUST, GRP_TITLE )
oGraphic:SetMargins(2,6,6,6)
oGraphic:SetGradient(GDBOTTOMTOP, CLR_HGRAY, CLR_WHITE)
oGraphic:SetLegenProp(GRP_SCRRIGHT, CLR_HGRAY, GRP_AUTO,.T.)

nSerie := oGraphic:CreateSerie( 10 )
oGraphic:l3D := .T. // Grafico em 3D
oGraphic:lAxisVisib := .T. // Mostra os eixos

// Itens do Grafico
oGraphic:Add(nSerie, 200, 'Item01', CLR_BLUE )
oGraphic:Add(nSerie, 180, 'Item02', CLR_RED )
oGraphic:Add(nSerie, 210, 'Item03', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item04', CLR_BLUE )
oGraphic:Add(nSerie, 100, 'Item05', CLR_BLUE )
oGraphic:Add(nSerie, 080, 'Item06', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item07', CLR_BLUE )

@ 001, 124 BUTTON 'Salva Grafico' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:SaveToBMP('Exemplo.bmp','\web\')
@ 020, 124 BUTTON 'Zoom IN' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomIn()
@ 040, 124 BUTTON 'Zoom OUT' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomOut()
@ 060, 124 BUTTON 'Deleta Serie' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:DelSerie(nSerie)

ACTIVATE MSDIALOG oDlg CENTERED

Return









- 440 -

ADVPL Compl et o



TMSGBAR( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Rodapé.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New ( [ oWnd] , [ cPr ompt ,] , [ l Cent ered] , [ l Cl ock] , [ l Dat e] , [ l Kbd] ,
[ nCl rFore] , [ nCl rBack] , [ oFont ] , [ l I nset ] , [ i mageName] )

E Par âmet r os:

oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá ser
cri ado
cPr ompt Caract er . Descri ção na Barra
l Cent ered Logi co. Defi ne cent ral i zação do t ext o
l Cl ock Nao ut i lizado
l Dat e Nao ut i lizado
l Kbd Nao ut i lizado
nCl rFore Numeri co, opci onal . Defi ne cor da font e da barr a
nCl rBack Numeri co, opci onal . Defi ne cor do fundo da barr a
oFont
Obj et o, opci onal . Obj et o t i po t Font com propri edades da
font e ut i lizada para o t ít ul o do bot ão.
l I nset Nao ut i lizado
i mageName Caract er , opci onal . I nsere fi gura l at eral esquerda

E Mét odos aux i l i ar es:

AddI t em

O Descr i ção: Mét odo i nsere um subi t em no rodapé
O Si nt ax e: AddI t em( oTMsgI t em )
O Par âmet r os:

oTMsgI t em
Obj et o do t i po TMsgI t em que será i nseri do como subi t em
do r odapé.

O Ret or no:

Nen hum -


- 441 -

ADVPL Compl et o


Set Msg

O Descr i ção: Defi ne a descri ção da bar ra de rodapé
O Si nt ax e: Set Msg( cText o )
O Par âmet r os:

cText o Text o a ser i nseri do na barra

O Ret or no:

Nen hum -

E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 442 -

ADVPL Compl et o


TMSGI TEM( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e – ut ili zado para adi ci onar
mensagens em out ros obj et os, como bar ras e menus.

E Pr opr i edades:

- Herdadas das cl asses superi or es

E Const r ut or : New ( < oMsgBar > , < cMsg> , < nSi ze> , < oFont > , < n Cl r For e> ,
< nCl r Back > , l Enabl e , [ < { bAct i on } > ] , cI magem )

E Par âmet r os:

oMsgBar Obj et o do t i po bar ra ou menu no qual será adi cionado o i t em
de mensagem.
cMsg Mensagem que será exibi da pel o obj et o
nSi ze Tamanho da font e do t ext o
oFont Font e do t ext o
nCl r For e Cor da font e do t ext o
nCl r Back Cor do fundo do obj et o
l Enabl e I ndi ca se o obj et o est á habilit ado.
bAct i on Bl oco de códi go execut ado quando o obj et o é at i vado
cI magem I magem a ser vi ncul ada no obj et o.

E Apar ênci a:



- 443 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

.


TMULTI BTN( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - Múl t i pl os bot ões.

E Pr opr i edades:

bAct i on
Bl oco de códi go. Execut ado ao pr eci onar o bot ão esquerdo
do mouse.

E Const r ut or : New( [ nRow] , [ nCol ] , [ cTi t l e] , [ oWnd] , [ bAct i on] , [ nWidt h] ,
[ nHei ght ] , [ i mgName] , [ ori ] , [ cMsg] , [ bt nPer Li ne] )

E Par âmet r os:

nRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
nCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres
oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá ser
cri ado
bAct i on
Bl oco de códi go, opci onal . Bl oco que deverá ser aci onado
quando o bot ão for pressi onado.
nWi dt h Numéri co, opci onal . Lar gura em pi xel s
nHei gt h Numéri co, opci onal . Al t ura em pi xel s.
i mgName
Caract er . I magem a ser i nseri da ao l ado esquer do do
component e
ori Numeri co, opci onal . Ori ent ação dos bot ões.
cMsg Caract er , Opi ci onal . Descri ção do t i po t ool t i p( hint ) do i t em
bt nPerLi ne Numeri co, opci onal . Quant idade de bot ões por l i nha


- 444 -

ADVPL Compl et o



E Mét odos aux i l i ar es:

LoadI mage
O Descr i ção: Muda a fi gura a esquerda do component e
O Si nt ax e: LoadI mage( cI magem)
O Par âmet r os:

cI magem Nome da i magem que será car regada pel o obj et o

O Ret or no:

Nen hum -

AddBut t on
O Descr i ção: I nser e um bot ão
O Si nt ax e: AddBut t on( cText o)
O Par âmet r os:

cText o Text o para exi bi ção no bot ão i nseri do.

O Ret or no:

Nen hum -

Set Ti t l e
O Descr i ção: Muda o t i t ulo e o numer o de bot ões por li nha
O Si nt ax e: Set Ti t l e( cText o, nBot oes)
O Par âmet r os:

cText o Text o que será at ri buído aos bot ões
nBot oes Númer o de bot ões por l inha

O Ret or no:

Nen hum -

Set Font s
O Descr i ção: Muda a font do t i t ul o e dos bot ões
O Si nt ax e: Set Ti t l e( cFont Ti t , nSi zeTi t , nFont But , nSizeBut )
O Par âmet r os:

cFont Ti t Nome da font e que será at ri buída ao t ít ul o
nSizeTi t Tamanho da font e do t ít ul o
nFont But Nome da font e que será at ri buída aos bot ões
nSizeBut Tamanho da font e dos bot ões

O Ret or no:

Nen hum -


- 445 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

otMultiBtn := tMultiBtn():New( 01,01,'cTitle1',oDlg,;
{|x|Alert(Str(x)) },200,150,'afastamento',0,'cTitle',3
)

otMultiBtn:SetFonts('Tahoma',16,'Tahoma',10)
otMultiBtn:AddButton('btn01')
otMultiBtn:AddButton('btn02')
otMultiBtn:AddButton('btn04')
otMultiBtn:AddButton('btn05')

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
.

- 446 -

ADVPL Compl et o



TMULTI GET( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e - edi ção de t ext o de
múl t ipl as linhas.

E Pr opr i edades:

l WordWrap Lógi co. Se .T. , faz quebra aut omát i ca de li nhas.

E Const r ut or : New( [ anRow] , [ anCol ] , [ abSet Get ] , [ aoWnd] , [ anWi dt h] ,
[ anHei ght ] , [ aoFont ] , [ al HScrol l ] , [ anCl rFore] , [ anCl rBack] , [ oPar11] ,
[ al Pi xel ] , [ cPar13] , [ l Par14] , [ abWhen] , [ l Par16] , [ l Par17] ,
[ al ReadOnl y] , [ abVali d] , [ bPar20] , [ l Par21] , [ al NoBorder] ,
[ al NoVScrol l ] )

E Par âmet r os:

Parâmet r o
anRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
caract eres.
anCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
abSet Get
Bl oco de códi go, opci onal . Bl oco de códi go no format o { | u|
i f( Pcount ( ) > 0, < var> : = u, < var> ) } que o cont rol e ut ili za
para at uali zar a vari ável < var > . < var > deve ser t i po
caract er.
aoWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o cont rol e será
cri ado.
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
aoFont
Obj et o, opci onal . Obj et o t i po t Font ut ili zado para defi ni r as
caract eríst i cas da font e ut ili zada para exi bi r o cont eúdo do
cont r ol e.
al HScrol l
Lógi co, opci onal . Se . T., habilit a barra de rol agem
hori zont al .
anCl rFore Numéri co, opci onal . Cor de fundo do cont rol e.
anCl rBack Numéri co, opci onal . Cor do t ext o do cont rol e.
oPar11 Reser vado.
al Pi xel
Lógi co, opci onal . Se . T. as coordenadas i nformadas são em
pi xel s, se .F. são em car act eres.
cPar13 Reser vado.
l Par14 Reser vado.
abWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.
l Par16 Reser vado.
l Par17 Reser vado.
al ReadOnl y Lógi co, opci onal . Se . T. o cont r ol e so permi t i ra lei t ura.
abVali d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.
bPar20 Reser vado.
l Par21 Reser vado.

- 447 -

ADVPL Compl et o


al NoBorder Lógi co, opci onal . Se . T. cri a cont r ol e sem borda.
al NoVScrol l Lógi co, opci onal . Se . T., habilit a barra de rol agem vert i cal .

E Mét odos aux i l i ar es:

Enabl eVScr ol l

O Descr i ção: Habi li t a a barra de r ol agem vert i cal.
O Si nt ax e: Enabl eVScrol l ( l Enabl e )
O Par âmet r os:

l Enabl e
Lógi co, obri gat óri o. Se . T. habili t a se .F. desabilit a a bar ra
de r ol agem.

O Ret or no:

Nen hum -

Enabl eHScr ol l

O Descr i ção: Habi li t a a barra de r ol agem hori zont al .
O Si nt ax e: Enabl eHScr ol l( l Enabl e )
O Par âmet r os:

l Enabl e
Lógi co, obri gat óri o. Se . T. habili t a se .F. desabilit a a bar ra
de r ol agem.

O Ret or no:

Nen hum -


E Apar ênci a:



- 448 -

ADVPL Compl et o



Ex empl o:

#include “protheus.ch”
User Function Teste()

Local oDlg, oMemo, cMemo:= space(50)

DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test”

oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)};
,oDlg,100,100,,,,,,.T.)

@ 200,10 BUTTON oBtn PROMPT “Fecha” OF oDlg PIXEL ACTION oDlg:End()

ACTIVATE MSDIALOG oDlg CENTERED

MsgStop(cMemo)

Return NIL


TOLECONTAI NER( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e, a qual permi t e a cri ação
de um bot ão vi ncul ado a um obj et o OLE.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New( [ nRow] , [ nCol ] , [ nWi dt h] , [ nHei ght ] , [ oWnd] , [ l Aut oAct i vat e] ,
[ cFil eName] )

E Par âmet r os:

nRow
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
nCol
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres.
nWi dt h Numéri co, opci onal . Lar gura do bot ão em pi xel s
nHei ght Numéri co, opci onal . Al t ura do bot ão em pi xel s.

oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde o bot ão deverá ser
cri ado.
l Aut oAct i vat e Nao ut i lizado
cFil eName Caract er . Endereço do arqui vo Ol e a ser abert o


- 449 -

ADVPL Compl et o



E Mét odos aux i l i ar es:

OpenFr omFi l e

O Descr i ção: Abr e arqui vo do t i po OLE.
O Si nt ax e: New( [ cFi l eName, [ l AsI con] , [ all owI nPl ace] )
O Par âmet r os:

cFil eName Caract er . Endereço do arqui vo Ol e a ser abert o
l AsI con Logi co. Defi ne obj et o Ol e como I cone
all owI nPl ace Logi co opci onal . Permi t e abert ura de arqui vo l ocal

O Ret or no:

Nen hum -


E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// TOleContainer
oTOleContainer := TOleContainer():New(
05,05,306,134,oDlg,.T.,'C:\Lixo\TesteRemote.doc' )

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL


- 450 -

ADVPL Compl et o


TPAGEVI EW( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont rol e, que permi t e a
vi suali zação de arqui vos no format o ger ado pel o spool de i mpressão
do Prot heus.

E Pr opr i edades:

- Herdadas das cl asses superi or es.

E Const r ut or : New( [ nCol ] , [ nRow] , [ nWi dt h] , [ nHei ght ] , [ oPri nt er] , [ oWnd] ,
[ nPageWi dt h] , [ nPageHei ght ] )

E Par âmet r os:

nCol
Numéri co, opci onal . Coordenada vert i cal em pi xel s ou
carat er es.
nRow
Numéri co, opci onal . Coordenada hori zont al em pi xel s ou
caract eres
nWi dt h Numéri co, opci onal . Lar gura em pi xel s
nHei gt h Numéri co, opci onal . Al t ura em pi xel s.

oPri nt er Obj et o do t i po TMsPri nt er( )
oWnd
Obj et o, opci onal . Janel a ou cont r ol e onde a bot ão deverá ser
cri ado
nPageWi dt h Numéri co, opci onal . Lar gura em pi xel s da pagi na
nPageHei ght Numéri co, opci onal . Al t ura em pi xel s da pagi na

E Mét odos aux i l i ar es:

PageSi ze

O Descr i ção: Defi ne o t amanho da pagi na.
O Si nt ax e: AddI t em( nLar gura, nAl t ura)
O Par âmet r os:

nLargura Lagura da pági na
nAlt ura Al t ura da pági na

O Ret or no:

Nen hum -

Pr i nt Page

O Descr i ção: I mpri me uma det ermi nada pági na.
O Si nt ax e: Pr i nt Page( nNrPagi na)
O Par âmet r os:

nNrPagi na Pági na que será i mpressa

O Ret or no:

Nen hum -


- 451 -

ADVPL Compl et o



E Apar ênci a:



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'

// TPageView
__RelDir := WSPLRelDir()
oPrinter := TMsPrinter():New()
oPrinter:SetFile(__RELDIR + 'matr020.prt',.F.)
oTPageView := TPageView():New(
0,0,500,300,oPrinter,oTFolder2:aDialogs[07],550,350 )
oTPageView:Reset(400,400)
oTPageView:PrintPage(1)
oTPageView:Show()
oTPageView:nZoom := 150

ACTIVATE MSDIALOG oDlg CENTERED
Return NIL

- 452 -

ADVPL Compl et o



TPANEL( )

E Descr i ção: Cl asse de obj et os vi suai s do t i po cont r ol e – t Panel , a qual permi t e
cri ar um painel est át i co, onde podem ser cri ados out ros cont r ol es
com o obj et i vo de organi zar ou agrupar component es vi suai s.

E Pr opr i edades:

- Herdadas das cl asses superi or es

E Const r ut or : New( [ anRow] , [ anCol ] , [ acText ] , [ aoWnd] , [ aoFont ] , [ alCent ered] ,
[ l Par6] , [ anCl rText ] , [ anCl rBack] , [ anWi dt h] , [ anHei ght ] , [ al Lower ed] ,
[ al Rai sed] )

E Par âmet r os:

anRow Numéri co, opci onal . Coordenada vert i cal em pi xel s.
anCol Numéri co, opci onal . Coordenada hori zont al em pi xel s.
acText Caract er e, opci onal . Text o a ser exi bi do ao fundo.
aoWnd
Obj et o, opci onal . Janel a ou cont r ol e onde será cri ado o
obj et o.
al Cent ered
Lógi co, opci onal . Se . T. exi be o t ext o de t ít ul o ao cent r o do
cont r ol e.
l Par6 Reser vado.
anCl rText Numéri co, opci onal . Cor do t ext o do cont rol e.
anCl rBack Numéri co, opci onal . Cor do fundo do cont rol e.
anWi dt h Numéri co, opci onal . Lar gura do cont rol e em pi xel s.
anHei ght Numéri co, opci onal . Al t ura do cont rol e em pi xel s.
al Lower ed
Lógi co, opci onal . Se . T. exi be o pai nel rebai xado em r el ação
ao cont r ol e de fundo.
al Rai sed
Lógi co, opci onal . Se . T. exi be a borda do cont r ol e rebai xada
em rel ação ao cont rol e de fundo.

E Apar ênci a:



- 453 -

ADVPL Compl et o



Ex empl o:

#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oPanel:= tPanel():New(10,10,””,oDlg,,,,,CLR_BLUE,100,100) // cria o
painel
@ 10,10 BUTTON oBtn1 PROMPT 'hide' OF oPanel ACTION oPanel:Hide() // cria
botão sobre o painel
@ 200,10 BUTTON oBtn2 PROMPT 'show' OF oDlg ACTION oPanel:Show() // cria
botão fora o painel
ACTIVATE MSDIALOG oDlg CENTERED
Return


TRADMENU( )

E Descr i ção: Cl asse de obj et os vi suai s do t ipo cont r ol e – TRadMenu, a qual
permi t e cri ar um cont rol e vi sual no format o Radi o But t on.

E Pr opr i edades:

bCh ange Bl oco de códi go di sparado na mudança de i t em sel eci onado
bSet Get
Bl oco de códi go di sparado na mudança de i t em sel eci onado,
responsavel pel a mudança de val or da vari avel numeri ca
que i ndi ca o i t em sel eci onado.
bWhen Bl oco de códi go que per mi t e ou não a al t eração do obj et o
bVal i d Bl oco de códi go execut ado na sai da do obj et o.

E Const r ut or : New( [ nRow] , [ nCol ] , [ aI t ems] , [ bSet Get ] , [ oDl g] , [ aHel pI ds] ,
[ bChange] , [ nCl rText ] , [ nCl rPane] , [ cMsg] , [ l Updat e] , [ bWhen] ,
[ nWi dt h] , [ nHei ght ] , [ bVali d] , [ l Desi gn] , [ l 3d] , [ l Pi xel ] )

E Par âmet r os:


nRow Numéri co, opci onal . Coordenada vert i cal
nCol Numéri co, opci onal . Coordenada hori zont al
aI t ems Vet or, el ement os do Radi o
bSet Get Code- bl ock, Responsável pel a set agem de val or
oDl g
Obj et o, opci onal . Janel a ou cont r ol e onde o di visor deverá
ser cri ado.
aHel pI ds Não ut i lizado
bChange
Bl oco de códi go, opci onal . Execut ado quando o i t em
sel eci onado é al t erado.
nCl rText Numéri co, opci onal . Cor do t ext o da j anel a.
nCl rPane Numéri co, opci onal . Cor de fundo da j anel a.
cMsg
Caract er , opci onal . Mesamge ao posi ci onar o mouse sobr e o
obj et o
l Updat e Não ut i lizado
bWhen
Bl oco de códi go, opci onal . Execut ado quando mudança de
foco de ent rada de dados est á sendo efet uada na j anel a
onde o cont r ol e foi cri ado. O bl oco deve r et ornar . T. se o
cont r ol e deve permanecer habili t ado ou .F. se não.

- 454 -

ADVPL Compl et o


nWi dt h Numéri co, opci onal . Lar gura do obj et o
nHei ght Numéri co, opci onal . Al t ura do obj et o
bVali d
Bl oco de códi go, opci onal . Execut ado quando o cont eúdo do
cont r ol e deve ser vali dado, deve ret ornar .T. se o cont eúdo
for vál i do e .F. quando o cont eúdo for i nváli do.
l Desi gn Não ut i lizado
l 3d Não ut i lizado
l Pi xel
Lógi co, opci onal .