Advpl o Manual PDF

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 417

Advpl o Manual

Versão 1.0

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________2

Índice

A Tecnologia Protheus ...........................................................................................................17


Características da Tecnologia Protheus .............................................................................17
As Camadas do Advanced Protheus ...................................................................................17
Servidor de Aplicação ........................................................................................................18
Terminal Thin-Client ...........................................................................................................18
Dados ....................................................................................................................................18
Repositório de Apo’s ..........................................................................................................18
Estruturação .............................................................................................................................19
A estrutura de diretórios do Advanced Protheus.........................................................19
Versão AP5 .......................................................................................................................19
Versão AP6 .......................................................................................................................19
Aplicativos do Advanced Protheus ..................................................................................20
Protheus Server ..............................................................................................................20
Remote .............................................................................................................................20
I DE .....................................................................................................................................20
Monitor ..............................................................................................................................20
Nomenclaturas Utilizadas..................................................................................................21
Topologia de Rede ..................................................................................................................21
Características e Possibilidades de Topologias de Rede ............................................21
IDE - I ntegrated Development Environment ....................................................................23
Características do IDE .......................................................................................................23
Monitor ......................................................................................................................................24
Informações Básicas das Conexões................................................................................24
Btrieve .......................................................................................................................................24
Informações Básicas ..........................................................................................................24
Configuração do Btrieve/ PervasiveSQL2000: ...............................................................25
CTree .........................................................................................................................................27
Informações Básicas ..........................................................................................................27
Índices...................................................................................................................................27
Sistemas Operacionais e Plataformas (versão AP6 e posteriores) ..............................28
Sistemas Operacionais e Plataformas ............................................................................28
Plataformas e SO's suportados....................................................................................28
Novos SO's a serem suportados .................................................................................28
AdPl – Guia de Programação................................................................................................29
A Linguagem AdvPl.................................................................................................................29
Programação Com I nterface Própria com o Usuário ..................................................29
Programação Sem I nterface Própria com o Usuário ..................................................29
Programação por Processos .........................................................................................30

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________3

Programação de RPC.....................................................................................................30
Programação Web ..........................................................................................................30
Programação TelNet ......................................................................................................30
Sintaxe da Linguagem ...........................................................................................................30
Edição de Programas .............................................................................................................30
Criação de um Programa ......................................................................................................30
Linhas de Programa ...........................................................................................................31
Linhas de Comando .......................................................................................................31
Linhas de Comentário ....................................................................................................31
Linhas Mistas ...................................................................................................................32
Tamanho da Linha ..............................................................................................................32
Estrutura de um Programa ...................................................................................................32
A Área de I dentificação .....................................................................................................33
A Área de Ajustes Iniciais .................................................................................................33
O Corpo do Programa ........................................................................................................34
A Área de Encerramento ...................................................................................................34
Variáveis de Memória.............................................................................................................34
Tipos de Dados........................................................................................................................34
Numérico ..............................................................................................................................34
Lógico ....................................................................................................................................35
Caracter ................................................................................................................................35
Data .......................................................................................................................................35
Matriz (Array) ......................................................................................................................35
Bloco de Código ..................................................................................................................35
Criação e Atribuição de Variáveis ........................................................................................36
Matrizes.....................................................................................................................................38
Matrizes como Estruturas .................................................................................................39
Cuidados com Matrizes......................................................................................................41
Inicializando Matrizes.............................................................................................................41
Se o tamanho da matriz é conhecido.............................................................................41
Se o tamanho da matriz não é conhecido ....................................................................42
Blocos de Código.....................................................................................................................42
Um Primeiro Lembrete ......................................................................................................42
Outro Lembrete ...................................................................................................................43
Lista de Expressões............................................................................................................44
Duas Linhas de Código ..................................................................................................44
Duas Linha de Código em Uma , Utilizando Ponto-e-Vírgula ...............................44
Convertendo para uma Lista de Expressões ............................................................44
Onde Pode-se Utilizar uma Lista de Expressões?....................................................45
De Listas de Expressões para Blocos de Código .........................................................45
Executando um Bloco de Código ................................................................................46
Passando Parâmetros ....................................................................................................47
Utilizando Blocos de Código .........................................................................................47
Escopo de Variáveis................................................................................................................48

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________4

O Contexto de Variáveis dentro de um Programa...........................................................48


Variáveis Locais .......................................................................................................................49
Variáveis Estáticas ..................................................................................................................50
Variáveis Privadas ...................................................................................................................50
Variáveis Públicas ...................................................................................................................51
Diferenciação entre variáveis e nomes de campos .........................................................52
Operadores da Linguagem ...................................................................................................53
Operadores Comuns...............................................................................................................53
Operadores Matemáticos ..................................................................................................53
Operadores de String .........................................................................................................54
Operadores Relacionais .....................................................................................................54
Operadores Lógicos............................................................................................................54
Operadores de Atribuição .....................................................................................................55
Atribuição Simples ..............................................................................................................55
Atribuição em Linha ...........................................................................................................55
Atribuição Composta ..........................................................................................................56
Operadores de Incremento/ Decremento...........................................................................56
Operadores Especiais .............................................................................................................57
Ordem de Precedência dos Operadores ............................................................................58
Alteração da Precedência ..................................................................................................58
Macro Substituição .................................................................................................................59
Estruturas de Controle ...........................................................................................................60
Controlando o Fluxo ...............................................................................................................60
Estruturas de Repetição ........................................................................................................60
Repetição de Comandos........................................................................................................60
O Comando FOR...NEXT ........................................................................................................60
O Comando WHI LE...ENDDO ...............................................................................................62
Estruturas de Decisão ............................................................................................................63
Desviando a Execução ...........................................................................................................63
O Comando IF...ENDIF..........................................................................................................63
O Comando DO CASE...ENDCASE.......................................................................................64
Informações Adicionais..........................................................................................................65
Lista de Palavras Reservadas ...............................................................................................65
Técnicas de Programação Eficiente em AdvPl ..................................................................66
Criação de Funções Segundo a Necessidade ...............................................................67
Codificação Auto-Documentável......................................................................................68
Utilização de Soluções Simples ........................................................................................68
Opção por Flexibilidade .....................................................................................................69
Opção da Praticidade ao Drama......................................................................................69
Utilização de Operadores de Incremento/ Decremento ..............................................69
Evitar Passos Desnecessários ..........................................................................................70
Utilização de Alternativas ..................................................................................................71
Utilização de Arquivos de Cabeçalho Quando Necessário .........................................72
Constantes em Maiúsculo .................................................................................................72

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________5

Utilização de Identação .....................................................................................................72


Utilização de Espaços em Branco ....................................................................................73
Quebra de Linhas Muito Longas......................................................................................73
Capitulação de Palavras-Chave .......................................................................................74
Utilização da Notação Húngara .......................................................................................74
Utilização de Nomes Significantes para Variáveis .......................................................74
Utilização de Comentários ................................................................................................74
Criação de Mensagens Sistêmicas Significantes e Consistentes ..............................75
Evitar Abreviação de Comandos em 4 letras................................................................75
Evitar "Disfarces" no Código ............................................................................................75
Evitar Código de Segurança Desnecessário ..................................................................76
Isolamento de Strings de Texto ......................................................................................77
Tabela de Pictures de Formatação .....................................................................................77
Comando SAY/ PSAY...........................................................................................................77
Comando GET......................................................................................................................77
Programação do AdvPl para o ERP Siga Advanced Protheus .......................................78
Prefácio .....................................................................................................................................78
O Que é Fazer um Programa com I nteligência ............................................................79
Programando Simples, mas Certo...................................................................................80
Erros que Podem ser Evitados.........................................................................................80
A I mportância de Programas Documentados...............................................................81
Cabeçalho de Programa / Função ...................................................................................81
Criação de Variáveis ...............................................................................................................82
A Declaração ........................................................................................................................82
O Tipo de Variável ..............................................................................................................82
Tipos Existentes ..............................................................................................................82
Inicialização ..........................................................................................................................83
Padronização de Variáveis ................................................................................................83
Criando uma Variável Utilizando a Função CRI AVAR() ..............................................83
Variáveis de Relatórios ......................................................................................................84
Cuidados com o Posicionamento de Registros.................................................................85
Função Posicione ................................................................................................................86
Função Existcpo ..................................................................................................................86
Restaurando Índice e limpando filtros ...........................................................................86
Outros Cuidados......................................................................................................................87
Confrontando relatórios e consultas...............................................................................87
Problemas com Looping de Programas .........................................................................87
Manipulação de Arquivos Externos ao Protheus..........................................................88
Desenvolvendo Telas .........................................................................................................89
Salvando Array’s padrões .................................................................................................90
Pontos de Entrada ..................................................................................................................90
Objetivo dos Pontos de Entrada ......................................................................................90
Quando criar um Ponto de Entrada ................................................................................90
Sintaxe para criar um Ponto de Entrada: ..................................................................91

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________6

Procedimentos para sua criação .....................................................................................91


Contabilizando .........................................................................................................................91
A Função HeadProva ..........................................................................................................92
A função DetProva() ..........................................................................................................92
A função RodaProva() .......................................................................................................92
Atualizando SX (ATUSX) ........................................................................................................93
Exemplo de atualização no SX: .......................................................................................93
SX1 - Parâmetros Genéricos ............................................................................................93
SX2 - Mapeamento dos arquivos ....................................................................................93
SX3 - Dicionário de Dados ................................................................................................94
SX5 - Tabelas Genéricas ...................................................................................................94
SX6 - Parâmetros................................................................................................................94
SX7 – Gatilhos .....................................................................................................................94
SXE/ SXF - Seqüência. de documentos...........................................................................94
SINDEX- Arquivo de Í ndices.............................................................................................94
Controle de Transação (TTS) ...............................................................................................94
O que é .................................................................................................................................94
Quando usar ........................................................................................................................94
Como usar ............................................................................................................................94
Onde não usar .....................................................................................................................95
Comandos Definidos pelo Usuário (UDC´ s) ......................................................................95
Uso de Strings .....................................................................................................................96
Conceito de Filial e Compartilhamento de Arquivos .......................................................97
Arquivos Compartilhados ..................................................................................................97
Arquivos Exclusivos ............................................................................................................97
Técnicas para Filtragem ....................................................................................................98
Chaves Primárias ................................................................................................................98
Chaves Estrangeiras ...........................................................................................................98
Integridade Referencial .....................................................................................................98
Utilizando Rotinas Automáticas ...........................................................................................99
Controle de Semáforo ............................................................................................................99
Atualização do SourceSafe..................................................................................................100
Procedimentos de Localizações .........................................................................................100
Procedimentos a serem cumpridos em alteração / desenvolvimento de
programas : .......................................................................................................................100
Programando com Schedule de Relatórios .....................................................................101
Modelos de Programas Padronizados...............................................................................101
Modelo 1 .................................................................................................................................102
Modelo 2 .................................................................................................................................104
Modelo 3 .................................................................................................................................112
Modelos de Relatórios..........................................................................................................126
Modelos de Cálculos .............................................................................................................130
Funções básicas da Linguagem .........................................................................................139
AAdd ........................................................................................................................................139

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________7

ACopy ......................................................................................................................................140
AClone .....................................................................................................................................141
ADel .........................................................................................................................................142
ADir ..........................................................................................................................................142
AEval ........................................................................................................................................143
AFill ..........................................................................................................................................145
AI ns..........................................................................................................................................146
Alias..........................................................................................................................................146
Append From .........................................................................................................................147
Array ........................................................................................................................................149
AScan .......................................................................................................................................150
ASize ........................................................................................................................................152
ASort ........................................................................................................................................153
ATail .........................................................................................................................................154
BTVCanOpen ..........................................................................................................................154
BTVCreateDDFs .....................................................................................................................155
BTVDropIdxs ..........................................................................................................................156
BTVTables...............................................................................................................................157
CDow .......................................................................................................................................158
CMonth ....................................................................................................................................158
Commit ....................................................................................................................................159
Copy To ...................................................................................................................................160
Copy File .................................................................................................................................161
Copy Structure.......................................................................................................................162
CPYS2T ....................................................................................................................................163
CPYT2S....................................................................................................................................164
CTreeDelIdxs .........................................................................................................................164
CTreeDellnt ............................................................................................................................165
CurDir ......................................................................................................................................166
Date .........................................................................................................................................167
Day ...........................................................................................................................................167
DBAppend ...............................................................................................................................168
DBClearAllFilter ......................................................................................................................169
DBClearFilter ..........................................................................................................................170
DBCloseAll...............................................................................................................................170
DBCloseArea...........................................................................................................................171
DBClearI ndex .........................................................................................................................171
DBCommit ...............................................................................................................................172
DBCommitAll ..........................................................................................................................172
DBCreate .................................................................................................................................173
DBCreateI ndex ......................................................................................................................174
DBDelete .................................................................................................................................175
DBEval .....................................................................................................................................175
DBF...........................................................................................................................................177

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________8

DBFieldI nfo .............................................................................................................................177


DBFilter ....................................................................................................................................178
DBGoBottom ..........................................................................................................................179
DBGoTo ...................................................................................................................................180
DBGoTop .................................................................................................................................180
DBI nfo .....................................................................................................................................181
DBOrderInfo ...........................................................................................................................182
DBOrderNickName ................................................................................................................183
DBRecall ..................................................................................................................................184
DBRecordI nfo ........................................................................................................................184
DBReindex ..............................................................................................................................185
DBRLock ..................................................................................................................................186
DBRLockList ...........................................................................................................................187
DBRunLock .............................................................................................................................187
DbSeek ....................................................................................................................................188
DBSetDriver ............................................................................................................................190
DBSetFilter ..............................................................................................................................190
DBSetI ndex ............................................................................................................................191
DBSetNickName ....................................................................................................................192
DBSetOrder ............................................................................................................................193
DBSkip .....................................................................................................................................194
DBStruct ..................................................................................................................................195
DBUnlock ................................................................................................................................195
DBUnlockAll ............................................................................................................................196
Delete ......................................................................................................................................196
Deleted ....................................................................................................................................198
DevOutPict ..............................................................................................................................198
DevPos ....................................................................................................................................199
Directory .................................................................................................................................200
DirRemove ..............................................................................................................................201
DiskSpace ...............................................................................................................................202
Dow ..........................................................................................................................................202
Dtoc..........................................................................................................................................203
Dtos..........................................................................................................................................204
Eject .........................................................................................................................................205
ElapTime .................................................................................................................................205
FClose ......................................................................................................................................206
FCreate ....................................................................................................................................207
FErase ......................................................................................................................................208
FError .......................................................................................................................................209
FieldBlock ................................................................................................................................210
FieldWbl ..................................................................................................................................211
File ............................................................................................................................................212
FOpen ......................................................................................................................................213

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________9

FOpenPort ...............................................................................................................................214
FRead.......................................................................................................................................216
FReadStr .................................................................................................................................217
Frename ..................................................................................................................................218
FSeek .......................................................................................................................................219
FWrite ......................................................................................................................................220
GetImpWindows....................................................................................................................222
GetPortActive .........................................................................................................................222
GetClientDir ............................................................................................................................223
Header .....................................................................................................................................223
IndexKey .................................................................................................................................224
IndexOrd .................................................................................................................................225
InitPrint ...................................................................................................................................225
IsPrinter ..................................................................................................................................226
IsCisaSyncOn .........................................................................................................................227
Locate ......................................................................................................................................227
LUpdate ...................................................................................................................................229
MakeDir ...................................................................................................................................229
MemoLine ...............................................................................................................................230
MemoRead..............................................................................................................................231
MemoWrite .............................................................................................................................232
MLCount ..................................................................................................................................232
Month ......................................................................................................................................233
MsCompress ...........................................................................................................................234
MsCRC32 .................................................................................................................................235
MsCRC32Str ............................................................................................................................236
MsDecomp ..............................................................................................................................236
OrdCondSet ............................................................................................................................237
OrdCreate ...............................................................................................................................238
OrdDescend ............................................................................................................................240
OrdKey ....................................................................................................................................241
OrdListAdd ..............................................................................................................................242
PRow ........................................................................................................................................243
Pack .........................................................................................................................................244
PCol ..........................................................................................................................................244
PreparePrint ...........................................................................................................................245
PrnFlush ..................................................................................................................................246
RDDSetDefault .......................................................................................................................247
RealRDD ..................................................................................................................................247
Recall .......................................................................................................................................248
RecSize ....................................................................................................................................249
ReI ndex ...................................................................................................................................250
Replace....................................................................................................................................250
RLock .......................................................................................................................................252

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________10

Seconds...................................................................................................................................253
Seek .........................................................................................................................................253
Select .......................................................................................................................................254
Set Filter ..................................................................................................................................255
Set Index ................................................................................................................................256
Set Order ................................................................................................................................257
SetPrc ......................................................................................................................................258
Skip ..........................................................................................................................................258
SplitPath ..................................................................................................................................260
TCConType .............................................................................................................................261
TCDelFile .................................................................................................................................262
TCGenQry ...............................................................................................................................262
TCI svLock ...............................................................................................................................263
TCRefresh ...............................................................................................................................263
TCSetBuff ................................................................................................................................264
TCSetConn ..............................................................................................................................264
TCSetDummy .........................................................................................................................265
TCSetField ...............................................................................................................................266
TCSpExec ................................................................................................................................267
TCSpExist ................................................................................................................................268
TCSqlError ..............................................................................................................................269
TCSrvType ..............................................................................................................................269
TCSysExe ................................................................................................................................270
;TCUnLink ...............................................................................................................................271
TCVUnLock .............................................................................................................................271
TCVLock ..................................................................................................................................272
Time .........................................................................................................................................273
UnLock.....................................................................................................................................274
UpdateIntName .....................................................................................................................274
Use ...........................................................................................................................................275
Used .........................................................................................................................................277
Year ..........................................................................................................................................277
ZAP...........................................................................................................................................278
Classes de I nterface Visual .................................................................................................279
tSrvObject ...............................................................................................................................279
Características ...................................................................................................................279
Propriedades ......................................................................................................................279
Métodos ..............................................................................................................................280
SetFocus .........................................................................................................................280
Hide .................................................................................................................................280
Show ................................................................................................................................280
Enable .............................................................................................................................280
Disable ............................................................................................................................281
Refresh ............................................................................................................................281

10

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________11

Classes de Janelas ................................................................................................................281


tWindow ..................................................................................................................................281
Hierarquia ...........................................................................................................................281
Características ...................................................................................................................281
Propriedades ......................................................................................................................282
Métodos ..............................................................................................................................282
New ..................................................................................................................................282
Activate ...........................................................................................................................283
End ...................................................................................................................................284
Center..............................................................................................................................284
Exemplo ..........................................................................................................................284
TDialog ....................................................................................................................................284
Hierarquia ...........................................................................................................................285
Características ...................................................................................................................285
Propriedades ......................................................................................................................285
Métodos ..............................................................................................................................285
New ..................................................................................................................................285
Activate ...........................................................................................................................286
End ...................................................................................................................................287
MSDialog .................................................................................................................................287
Hierarquia ...........................................................................................................................287
Características ...................................................................................................................287
Propriedades ......................................................................................................................287
Métodos ..............................................................................................................................287
New ..................................................................................................................................287
Classes Auxiliares ..................................................................................................................289
tFont ........................................................................................................................................289
Hierarquia ...........................................................................................................................289
Descrição ............................................................................................................................289
Métodos ..............................................................................................................................289
New ..................................................................................................................................289
Exemplo ..............................................................................................................................290
Classes de Componentes ....................................................................................................290
tControl ...................................................................................................................................290
Hierarquia ...........................................................................................................................290
Características ...................................................................................................................290
Propriedades ......................................................................................................................290
Métodos ..............................................................................................................................291
SetFocus .........................................................................................................................291
Classes de Componentes Visuais ......................................................................................291
tButton ....................................................................................................................................291
Hierarquia ...........................................................................................................................291
Descrição ............................................................................................................................291
Propriedades ......................................................................................................................291

11

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________12

Metodos ..............................................................................................................................292
New ..................................................................................................................................292
Exemplo ..............................................................................................................................293
tCheckBox ...............................................................................................................................293
Hierarquia ...........................................................................................................................293
Descrição ............................................................................................................................293
Métodos ..............................................................................................................................293
New ..................................................................................................................................293
Exemplo ..............................................................................................................................294
tComboBox .............................................................................................................................295
Hierarquia ...........................................................................................................................295
Descrição ............................................................................................................................295
Propriedades ......................................................................................................................295
Métodos ..............................................................................................................................295
New ..................................................................................................................................295
Select ...............................................................................................................................296
Exemplo ..............................................................................................................................297
tGet ..........................................................................................................................................297
Hierarquia ...........................................................................................................................297
Descrição ............................................................................................................................297
Propriedades ......................................................................................................................297
Métodos ..............................................................................................................................298
New ..................................................................................................................................298
Exemplo ..............................................................................................................................299
tGroup .....................................................................................................................................299
Hierarquia ...........................................................................................................................299
Descrição ............................................................................................................................300
Métodos ..............................................................................................................................300
New ..................................................................................................................................300
Exemplo ..............................................................................................................................300
tListbox ....................................................................................................................................301
Hierarquia ...........................................................................................................................301
Descrição ............................................................................................................................301
Parâmetros .........................................................................................................................301
Métodos ..............................................................................................................................301
New ..................................................................................................................................301
Select ...............................................................................................................................302
Add...................................................................................................................................303
Modify .............................................................................................................................303
Del....................................................................................................................................303
Len ...................................................................................................................................304
Reset ...............................................................................................................................304
Exemplo ..............................................................................................................................304
tMeter ......................................................................................................................................305

12

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________13

Hierarquia ...........................................................................................................................305
Descrição ............................................................................................................................305
Parâmetros .........................................................................................................................305
Métodos ..............................................................................................................................305
New ..................................................................................................................................305
Set ....................................................................................................................................306
Exemplo ..............................................................................................................................306
tMultiget ..................................................................................................................................307
Hierarquia ...........................................................................................................................307
Descrição ............................................................................................................................307
Propriedades ......................................................................................................................307
Métodos ..............................................................................................................................308
New ..................................................................................................................................308
EnableVScroll .................................................................................................................309
EnableHScroll.................................................................................................................309
Exemplo ..............................................................................................................................310
tPanel.......................................................................................................................................310
Hierarquia ...........................................................................................................................310
Descrição ............................................................................................................................310
Métodos ..............................................................................................................................310
New ..................................................................................................................................310
Exemplo ..............................................................................................................................311
tRadMenu ...............................................................................................................................311
Hierarquia ...........................................................................................................................311
Descrição ............................................................................................................................311
Propriedades ......................................................................................................................312
Métodos ..............................................................................................................................312
New ..................................................................................................................................312
EnableI tem .....................................................................................................................313
Exemplo ..............................................................................................................................313
tSay ..........................................................................................................................................313
Hierarquia ...........................................................................................................................313
Descrição ............................................................................................................................314
Parâmetros .........................................................................................................................314
Métodos ..............................................................................................................................314
New ..................................................................................................................................314
SetText ............................................................................................................................315
Exemplo ..............................................................................................................................315
tScrollbox ................................................................................................................................316
Hierarquia ...........................................................................................................................316
Descrição ............................................................................................................................316
Métodos ..............................................................................................................................316
New ..................................................................................................................................316
Exemplo ..............................................................................................................................316

13

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________14

Infra-estrutura .......................................................................................................................318
MsGetDados ...........................................................................................................................318
MsGetDb .................................................................................................................................322
MsmGet ...................................................................................................................................326
MBrowse .................................................................................................................................329
Funções ...................................................................................................................................330
AllGroups.................................................................................................................................330
AllUsers ...................................................................................................................................331
APMsgAlert .............................................................................................................................333
APMsgI nfo ..............................................................................................................................333
APMsgNoYes ..........................................................................................................................334
APMsgStop..............................................................................................................................334
APMsgYesNo ..........................................................................................................................335
APMsgYesNo ..........................................................................................................................335
Cabec .......................................................................................................................................336
Capital .....................................................................................................................................338
CloseBrowse ...........................................................................................................................338
Conpad1 ..................................................................................................................................339
Enchoicebar ............................................................................................................................339
FileNoExt .................................................................................................................................340
Final .........................................................................................................................................341
FTPConnect ............................................................................................................................341
FTPDirChange ........................................................................................................................342
FTPDirectory ..........................................................................................................................343
FTPDisconnect .......................................................................................................................343
FTPDownload .........................................................................................................................344
FTPErase .................................................................................................................................344
FTPGetCurDir .........................................................................................................................345
FTPRenameFile ......................................................................................................................345
FTPUpload ..............................................................................................................................346
FunDesc ..................................................................................................................................347
FunName ................................................................................................................................347
GetCountryList .......................................................................................................................348
GetMark...................................................................................................................................348
GetMv ......................................................................................................................................349
IncProc ....................................................................................................................................350
IncRegua.................................................................................................................................350
IndRegua ................................................................................................................................352
MarkBRefresh .........................................................................................................................353
MarkBrow ................................................................................................................................353
Ms_Flush .................................................................................................................................354
MsAppend ...............................................................................................................................356
MsCopyFile .............................................................................................................................356
MsCopyTo ...............................................................................................................................357

14

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________15

MsCreate .................................................................................................................................358
MsErase ...................................................................................................................................358
MsFile.......................................................................................................................................359
MsRename ..............................................................................................................................360
MsUnlock.................................................................................................................................360
OurSpool .................................................................................................................................361
Pergunte .................................................................................................................................362
Processa ..................................................................................................................................363
ProcRegua ..............................................................................................................................364
PswAdmin ...............................................................................................................................364
PswID ......................................................................................................................................365
PswName ................................................................................................................................365
PswOrder ................................................................................................................................366
PswRet .....................................................................................................................................367
PswSeek ..................................................................................................................................367
ReadVar ...................................................................................................................................368
RetAcsName ...........................................................................................................................368
RetExtHlp ................................................................................................................................369
RetExtHls ................................................................................................................................369
RetExtHpr ...............................................................................................................................370
RetExtMnu ..............................................................................................................................370
RetFileName ...........................................................................................................................371
Roda.........................................................................................................................................371
RptStatus ................................................................................................................................373
SetDefault ...............................................................................................................................374
SetPrint ....................................................................................................................................376
SetRegua ................................................................................................................................378
SixDescricao ...........................................................................................................................380
VerSenha ................................................................................................................................380
X1Def01 ..................................................................................................................................381
X1Def02 ..................................................................................................................................381
X1Def03 ..................................................................................................................................382
X1Def04 ..................................................................................................................................382
X1Def05 ..................................................................................................................................383
X1Pergunt ...............................................................................................................................383
X2Nome...................................................................................................................................384
X3CBox ....................................................................................................................................385
X3Descric ................................................................................................................................385
X3Picture .................................................................................................................................386
X3Titulo ...................................................................................................................................386
X3Uso ......................................................................................................................................386
X5Descri ..................................................................................................................................387
X6Conteud ..............................................................................................................................388
X6Desc1 ..................................................................................................................................388

15

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________16

X6Desc2 ..................................................................................................................................389
X6Descric ................................................................................................................................389
XADescric ................................................................................................................................390
XBDescri ..................................................................................................................................390

16

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________17

A Tecnologia Protheus

O Adv anced Pr ot heus é um a nova t ecnologia desenvolv ida sobre o sist em a Adv anced, que t ev e toda a
int eligência dividida em duas cam adas: Ser v idor de Aplicação ( Protheus Serv er ) e I nt er face ( Rem ot e) . Ou
sej a, um a aplicação 32 bits que se encarr ega do ger enciam ento das conex ões, da ex ecução do código
AdvPl e do acesso aos r ecursos de banco de dados ( ADS, Bt riev e, CTree ou TopConnect ) , e um a aplicação
thin- client que efetua apenas a int er face com o usuár io.

Características da Tecnologia Protheus


As principais car acterísticas da t ecnologia Protheus são:

• Possibilidade de gr ande v ar iação de topologias de r ede e processam ent o dist ribuído

• Baixo t ráfego de r ede ent re o AP5 Ser ver e o AP5 Rem ot e

• Ut ilização de configur ações, possibilit ando o uso de conex ões sim ult âneas at r avés de prot ocolos
diferent es e o acesso a diferent es r epositórios de APO's e diret ór ios ( o que per m ite o uso de
diferent es idiom as, ver sões, et c, acessando a m esm a base de dados)

• Difer entes possibilidades de im pr essão de r elat ór ios. No Adv anced Pr ot heus pode- se im pr im ir os
r elatórios de t r ês form as:

1.Em disco

2.Via Window s

3.Dir et o na Por t a

As im pressões efetuadas v ia Windows ou diretam ent e na por ta podem ser im pr essas no serv idor ( o
que ev itará o tr áfego de rede do relat ór io im pr esso) ou na est ação. As im pr essões efet uadas em disco
tam bém ev itam o tr áfego de rede. Os r elatór ios em disco são sem pr e m ant idos no ser vidor e som ente
as páginas requisit adas são env iadas à est ação.

• Os a rq u ivos d e ba n co d e da dos são sem p re a be rt os n o ser vido r. Entr et ant o, arquivos t ex to


podem ser aber t os na estação com a função FOpen. A refer ência a pat hs que não contiver em um a
letr a de driv e ( por exem plo, " \ DADOS\ ARQ.TXT") , são consider adas a par tir do ser vidor no diretór io
inform ado na seção " Root Path" do ar quivo de configurações do Protheus Serv er

• Não ex ist e o conceit o de " m ódulos" de sist em a. Exist e o conceit o de pr ogr am a inicial, de onde a
execução do Rem ote ser á iniciada ( e os out ros APO's ut ilizados ser ão carr egados e descarr egados
dinam icam ent e de acor do com sua cham ada a par t ir dest e) . I sso perm it e que r ot inas que er am de
" m ódulos" diferent es sejam ex ecut adas diretam ent e de um m esm o m enu de usuário

As Camadas do Advanced Protheus

17

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________18

O Advanced Protheus é div idido em quat ro cam adas par a a operação são elas:

• Serv idor de Aplicação

• Term inal Thin- Client

• Dados

• Reposit ór io de APO´ s

Servidor de Aplicação

O Pr ot heus Ser ver é a aplicação encar regada da com pilação e da execução do código em AdvPl, no qual o
sistem a Siga Advanced est á escr ito a par t ir da v er são 5.07. Na linguagem Adv Pl, as r ot inas são m ant idas
em APO's ( Adv anced Pr ot heus Obj ects) indiv iduais em reposit ór ios. Isso per m it e que as r ot inas sej am
carr egadas/ descar regadas dinam icam ente da m em ória da m áquina onde o Pr ot heus Ser ver está sendo
ex ecut ado, ou seja, de acor do com a necessidade de execução dos Ter m inais conect ados, e facilita a
at ualização após cor r eções de não- confor m idades ou cr iação de m elhor ias, pois apenas os APO's
m odificados necessit am ser at ualizados. Desse m odo, a per form ance é alt a e não r equer m uit os recursos
da m áquina par a a execução do ser vidor .

Terminal Thin-Client

O Rem ot e é a aplicação encarr egada da interface com o usuár io. Não ex ist e pr ocessam ent o local, por isso
o tr áfego de rede ent re o Ter m inal e o Ser vidor de Aplicação é baixo, t ratando- se apenas de com andos
para o desenho das telas e do t rat am ent o do teclado e m ouse.

Dados

O acesso aos dados é efet uado pelo Serv idor de Aplicação ut ilizando as seguintes bases de dados: ADS,
BTriev e, CTree e TopConnect ( para padrão SQL) . Par a bases de dados SQL, ex ist e tot al supor t e a St or ed
Pr ocedur es. No Pr ot heus, t odas as bases de dados t êm supor te a cont role de t r ansação.

Repositório de Apo’s

E no r epositório que se encont r am os pr ogram as escr it os em AdvPl que ser ão car r egados par a a ex ecução
de det er m inada t ar efa. É at ravés do r eposit ório de Apo’s que pode- se incluir novas cust om izações no
sistem a.

18

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________19

Estruturação

A estrutura de diretórios do Advanced Protheus

A est rutura de dir et órios do Adv anced Pr ot heus depende da versão inst alada.

Versão AP5

\ ap5\ Dir et ór io inicial do Protheus. É a part ir dest e dir et ór io que o sist em a irá localizar os
cam inhos infor m ados em parâm et r os, custom izações, et c.

\ ap5\ apo\ Dir et ór io onde ser ão localizados os arquiv os de r eposit ór io de APO´ s.

\ ap5\ bin\ Dir et ór io onde são localizados os arquivos do núcleo do Pr ot heus: ex ecut áv eis,
bibliotecas de carga dinâm ica ( DLL´ s) e arquivos de configur ação do sist em a.

\ ap5\ sigaadv\ Sim ilar ao \ SI GAADV\ das ver sões Adv anced 2.0x/ 4.0x. É o diretór io onde se
encont r am os ar quiv os de configur ação do sistem a ERP Advanced, ar quivos de m enus,
etc. É t am bém o diretór io inicial de execução no Rem ot e.

\ ap5\ dadosadv \ Sim ilar ao \ DADOSADV\ das ver sões Advanced 2.0x/ 4.0x . É o diretório onde se
localizam os ar quiv os de base de dados par a ver sões não SQL.

\ ap5\ r elat o\ Sim ilar ao \ RELATO\ das versões Advanced 2.0x/ 4.0x . Dir et ór io par a gr av ação de
arquivos de im pr essão em disco.

\ ap5\ cpr ova\ Sim ilar ao \ CPROVA\ das versões Advanced 2.0x/ 4.0x . Diret ór io par a gr av ação de
arquivos de cont abilização.

\ ap5\ ixbpad\ Dir et ór io de localização de progr am as de exem plo escr it os em AdvPl, nos padr ões
definidos pela Micr osiga Softw ar e S.A.

\ ap5\ include\ Dir et ór io de ar quiv os de inclusão padrão ( ext ensão .CH) necessár ios par a a
com pilação de pr ogram as escr it os em AdvPl.

\ ap5\ ut il\ Dir et ór io de ferr am ent as adicionais do Pr ot heus.

Versão AP6

\ ap6\ Dir etório inicial do Pr ot heus. É a par tir dest e diret ór io que o sist em a ir á localizar os
cam inhos infor m ados em par âm etr os, custom izações, etc.

\ ap6\ apo\ Dir etório onde serão localizados os ar quiv os de r epositório de APO´ s.

\ ap6\ bin\ ser ver\ Dir etório onde são localizados os ar quiv os do núcleo do Prot heus Ser v er :
executáveis, bibliot ecas de car ga dinâm ica ( DLL´ s) e ar quiv os de configur ação.

\ ap6\ bin\ r em ot e\ Dir etório onde são localizados os arquivos das aplicações clientes ( Rem ot e, I DE,
Monit or , etc) : executáveis, bibliot ecas de car ga dinâm ica ( DLL´ s) e ar quiv os de

19

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________20

configur ação.

\ ap6\ sigaadv\ Sim ilar ao \ SI GAADV\ das v er sões Advanced 2.0x/ 4.0x . É o diretório onde se
encontr am os arquiv os de configur ação do sist em a ERP Advanced, ar quiv os de
m enus, et c. É t am bém o dir etório inicial de ex ecução no Rem ote.

\ ap6\ dadosadv \ Sim ilar ao \ DADOSADV\ das v er sões Adv anced 2.0x / 4.0x. É o dir et ório onde se
localizam os ar quiv os de base de dados par a v er sões não SQL.

\ ap6\ r elat o\ Sim ilar ao \ RELATO\ das v er sões Adv anced 2.0x / 4.0x. Diretór io par a gr av ação de
arquiv os de im pr essão em disco.

\ ap6\ cpr ova\ Sim ilar ao \ CPROVA\ das v er sões Adv anced 2.0x / 4.0x. Diretór io par a gr av ação de
arquiv os de cont abilização.

\ ap6\ ixbpad\ Dir etório de localização de pr ogram as de ex em plo escr itos em AdvPl, nos padr ões
definidos pela Microsiga Soft ware S.A.

\ ap6\ include\ Dir etório de ar quivos de inclusão padr ão ( ex tensão .CH) necessários par a a
com pilação de pr ogram as escr itos em Adv Pl.

Est as são as est r ut ur as par a um a instalação padr ão do Protheus de acor do com a v er são ut ilizada.
Por ém a localização de instalação pode variar de acor do com o local de inst alação.

Aplicativos do Advanced Protheus

O Adv anced Pr ot heus possui, basicam ent e, quatr o aplicat ivos ut ilizados com difer entes finalidades. São
eles:

Protheus Server

Tr at a- se do ser vidor de aplicação do Advanced Protheus est a é a part e do sistem a que ser á ex ecut ada no
Serv idor e será r esponsáv el pela com unicação ent r e o Cliente, a Base de Dados e o Reposit ór io de Apo’s.
O nom e do executável depende da ver são e sist em a oper acional ut ilizados, por exem plo: AP5SRV.EXE ou
AP6SRVWI N.EXE.

Remote

É o Rem ot e que utilizam os par a int er agir com todo o sist em a, ele poder á ser inst alado de duas m aneir as,
no ser vidor ou na própr ia est ação de t rabalho. O nom e do executável depende da v er são ut ilizada, por
ex em plo: AP5RMT.EXE ou AP6RMT.EXE.

I DE

Tr at a- se do am bient e de desenvolv im ento integr ado do Adv anced Pr ot heus. É atr avés dest e aplicat ivo que
todos os acessos aos reposit ór ios de Apo’s ( com pilação de cust om izações, visualização de funções
ex ist entes et c.) são efet uados, e t am bém é a fer ram ent a par a desenv olvim ent o e depur ação de
aplicações/ cust om izações. O nom e do executável depende da v er são ut ilizada, por ex em plo: AP5I DE.EXE
ou AP6IDE.EXE.

Monitor

20

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________21

Esta ferr am ent a per m ite a int eração com os usuár ios conect ados ao sist em a: Analisar os progr am as em
uso, der r ubar conex ões pendentes, env iar m ensagens ao usuár ios et c. O nom e do executável depende da
versão ut ilizada, por exem plo: AP5MONI T.EXE ou AP6MONIT.EXE

Alem destas aplicações, o Siga Adv anced Pr ot heus cont a ainda com outr os ut ilit ár ios div er sos, com o o Diff
( ut ilizado par a com par ação de arquivos t ex to) e Dum p ( ut ilizado para edição de arquivos binár ios) .

Nomenclaturas Utilizadas

Estas são as pr incipais nom eclatur as utilizadas no Adv anced Pr ot heus:

Bu ild: Ver são com plet a do sist em a com seus ex ecut áv eis, Dll’s e RPO com plet o. O build do sistem a pode
ser ident ificado at ravés da opção Miscelâneas | Sobre dentr o dos m ódulos do sistem a.

RPO: É o arquivo binário de r eposit ór io de APO’s, com o código Adv Pl.

Pa t ch : Ar quivo binár io sem elhant e ao r eposit ór io cont endo apenas atualizações de APO’s, cor reções
disponibilizadas pela Micr osiga Soft ware S.A., que ser á aplicado no reposit ór io at ravés do IDE.

Ve rsão M a st er : Mesm a definição de build porém nest e caso a versão ser á utilizada com o referência para
a geração de atualizações do sist em a ( pat ch’s) . Quando gerada, a versão é encam inhada a todos os
envolv idos em pr ocessos de im plant ação/ utilização do sist em a v ia corr eio ou disponibilizada no sit e de FTP
do Prot heus.

A definição dos nom es dos ar quivos dos reposit ór ios de APO's e Pat ch´ s seguem o m esm o padr ão
( difer enciando- se apenas na ex tensão Pat ch= .PAT e reposit ór io= RPO) e é efet uada da seguinte
m aneira AP12345.RPO:

1 – ( D) bf, ( T) op, ( A) ds, ( B) t r ieve, ( C) Tr ee;

2 – ( P) ort uguese, ( E) nglish, ( S) panish;

3 – Versão;

4 – Versão;

5 – Versão;

Por exem plo, APBP609.RPO ser á um reposit ór io de APO's para base de dados BTrieve, idiom a
Por t uguês e versão 609.

Topologia de Rede
Devido à sua div isão em cam adas, a t ecnologia Protheus perm it e m ont ar o am bient e de execução com
difer entes t opologias, pr ior izando a execução, o tr áfego de rede ou os r ecur sos individuais das m áquinas
ex ist entes, o que t or na o pr ocessam ento dist ribuído. Essa é um a das gr andes vant agens da t ecnologia
Pr ot heus.

Características e Possibilidades de Topologias de Rede

21

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________22

• Pode- se m ant er um ou m ais ser vidor es de aplicação do Protheus ( Pr ot heus Ser ver) .

• Um Protheus Serv er pode est ar na m esm a m áquina que o gerenciador de banco de dados.

• Máquinas m elhor es ou com m ais r ecur sos podem t er um Pr ot heus Ser ver sendo executado
localm ent e ( na est ação) visando prior izar o processam ent o local. Por ém há um aum ento do t ráfego
de r ede entr e o ger enciador de banco de dados e o Prot heus Ser ver local.

• Do m esm o m odo, pode- se executar ser vidores r em otam ent e pr ior izando o processam ent o de um a
ou m ais estações.

• Ut ilização do protocolo TCP- I P para as conex ões. Na v er são AP5 pode- se utilizar tam bém o
protocolo NAMED PIPES.

• Pode- se disponibilizar conexões v ia Internet at ravés da m ont agem de um Web Ser ver na em presa
ou at r avés de pr ov edor es de acesso ( com o a UOL e o ZAZ ) . Nest e caso, o Protheus Serv er pode ser
executado no pr ovedor ou na em pr esa ut ilizando um a LP para a conexão ao provedor de acesso.

• A Int er net é utilizada apenas com o o m eio de com unicação, ou sej a, a conexão TCP- IP ent re o
Rem ote e o Protheus Serv er . Além da segur ança ofer ecida pelo sist em a Adv anced, a segur ança
dev er á ser oferecida pela conexão. Por isso, é aconselhável que a m áquina onde o serv idor Web
est ej a sendo executado não seja o m esm o do serv idor da banco de dados.

• O Pr ot heus Serv er t am bém pode ser executado com o um ser vidor I nt er net , HTTP e/ ou FTP.

• Pode- se m ant er um a página para o dow nload do Rem ot e, de m odo que os usuário r em otos possam
efet uar o dow nload par a conect ar- se e utilizar o sist em a. Na v er são AP6 pode- se configur ar o
Rem ote par a se at ualizar aut om at icam ent e a par tir do Pr ot heus Ser ver sendo ex ecut ado com o um
ser vidor FTP.

22

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________23

A definição da m elhor t opologia para execução é um passo im por tant e da im plem entação da
t ecnologia Prot heus, pois influenciar á tot alm ent e na perform ance. O m aior t r áfego de r ede está
localizado entr e o Protheus Serv er e o Banco de Dados, j á que o t ráfego ent r e o Pr ot heus Ser v er e
o Rem ot e lim it a- se às infor m ações par a m ont agem de t elas e cont r ole de t eclado e m ouse. Desta
form a, dependendo do t ipo e da v elocidade da conexão, pode se t or nar inv iável m ant er um
Prot heus Serv er em um a cidade conect ado ao banco de dados em outr a. Por out ro lado, caso
existam m uitas conexões nest a out r a cidade, ou caso est as conex ões ex ecut em pr ocessam ent os
pesados, pr ior izar o processam ent o disponibilizando um Protheus Ser v er par a ser executado
localm ente nesta cidade pode ser um a boa solução.

I DE - I ntegrated Development Environment


O IDE ( I nt egrat ed Developm ent Environm ent ) é um a fer ram enta de edição, com pilação e depuração de
er r os. É at r av és do IDE que o sistem a ERP Siga Advanced é desenv olv ido. Tam bém é at ravés do I DE que
os analistas da Micr osiga e os usuár ios do Protheus podem cr iar e m ant er suas r ot inas específicas. O I DE
é o único m odo de com pilar os ar quivos de progr am as escr itos em AdvPl par a a geração dos APO's no
reposit ór io.

Com o fer ram enta de edição e depuração, engloba t odos os recursos disponíveis nas m elhores fer r am ent as
de desenvolv im ento do m ercado.

Características do I DE

• Para a ex ecução do IDE não é necessár io conect ar - se ao Pr ot heus Ser ver , ex ceto nas oper ações de
atualização ou consulta de um r eposit ór io ( com pilação, obtenção do Mapa de Obj et os, aplicação de
pat ch´ s, etc) e dur ante o pr ocesso de depur ação.

• Não é aconselháv el ex ecut ar o I DE r em ot am ent e ( via Int er net ou v ia m odem ) , pois a conexão do
Rem ote ao Protheus, quando efetuada at r av és do I DE, é m ais lent a.

• Os passos par a o desenv olv im ent o de pr ogram as em AdvPl utilizando o I DE são:

1.Cr iaçã o do cód ig o at ra vé s do ed it o r. Na linguagem AdvPl, os analist as e os usuár ios do Pr ot heus


têm todos os r ecursos disponív eis par a o desenvolvim ent o de suas rot inas. E difer ent em ent e do
antigo RDMAKE, não é m ais um a linguagem int er pr et ada. Por isso, a perform ance das rot inas
específicas é dez v ezes m aior do que era nos RDMAKEs ant igos.

2.M on t a ge m d o Gru po de Pro je t o s. O Gr upo de Pr oj et os é um ger enciador ex ist ente dentr o do


IDE, onde o usuário pode m ant er os arquiv os de código separ ados por pr oj et os e past as. Com
um gr upo de proj et os os ar quivos podem ser organizados de um a form a lógica, em proj et os e
past as.

3.Co m pilaçã o. Durant e a com pilação, os ar quivos são env iados ao Pr ot heus Ser ver. Toda a
com pilação e a gr av ação no r eposit ório são efet uadas no ser vidor .

4.D e pu r ação . O IDE perm it e aos usuár ios depurar as rot inas cr iadas, ex ecut ando- as linha a linha ou
em m odo de anim ação. Per m ite v isualizar infor m ações com o variáveis em difer ent es escopos,
pilha de cham adas, list a de break point s, et c. Ex at am ent e com o as m elhores fer ram entas de
desenv olvim ent o existent es no m er cado. No IDE pode- se depur ar pont os de ent rada
sim plesm ente colocando- se um ponto de parada ( br eak point ) em um a linha qualquer do código
do ponto de ent rada;

23

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________24

Monitor
O Monitor é utilizado par a m onit or ar as conex ões de t er m inais ao Pr ot heus Ser ver. At ravés dele pode- se:

• Verificar as conexões ativ as.

• Enviar m ensagens par a um a ou m ais conex ões.

• Desabilit ar novas conexões. Ist o é út il quando se pr ecisa efet uar algum a m anutenção e se pr ecisa
evit ar que out r os usuár ios se conectem .

I nformações Básicas das Conexões

• Usuário. É o nom e do usuár io na r ede local. Par a conexões rem ot as este nom e está em br anco.

• Com putador. Nom e da m áquina onde o Rem ote est á sendo executado.

• Conexão. I ndica a data e hor a de início da conexão do Rem ot e.

• Tem po de Uso. I ndica o t em po em hor as, m inut os e segundos desde que o Rem ot e se conect ou.

• Pr ogr am a I nicial. É o nom e do progr am a inicial ( APO) com o qual o Rem ot e iniciou a execução.

• Envir onm ent. Nom e do am bient e sendo ut ilizado pelo ter m inal.

Btrieve

I nformações Básicas

• Para m anipulação de t abelas Bt r ieve o dr iv er ut ilizado é "BTVCDX";

• Para pr ogram ar algo específico para o Bt rieve pode- se ut ilizar o t est e "# ifdef BTV";

• A ex t ensão padr ão das t abelas é " .dat " ;

• Os índices são criados no m esm o ar quivo de dados ( ".dat" ) ;

• As m anipulações e visualizações de dados devem ser feit as at ravés do " APSdu" , pois as ant igas
fer r am ent as são incom pat íveis;

• O Bt r ieve v er são 6.15 não pr ecisa ser inst alado, pois as DLLs necessár ias são disponibilizadas j unto
com o Pr ot heus. Os ar quiv os necessários ficam no diretór io " BI N" ( wbt r v32.dll, w 32m kr c.dll,
w bt rv res.dll e w 32m kde.ex e) . O funcionam ent o é pr at icam ente igual ao Bt r ieve Ser ver, por t anto
pode- se executar os t estes na versão 6.15 nor m alm ent e;

• O w32m k de continua um per íodo em ex ecução após o térm ino do Prot heus, pois se o Protheus for
executado nov am ent e não é necessár io seu r einício. Quando o usuár io desejar r enom ear o diretór io

24

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________25

" BI N" , o m esm o não será per m itido por esse m otiv o, deve- se por tant o finalizar a ex ecução do
m esm o;

• As inform ações das t abelas, cam pos e índices são arm azenados no diretór io " DDF" , criado abaix o do
" Root Path", at ravés dos ar quiv os ( Field.btv , File.btv , Finfo.btv , I info.bt v e I ndex .bt v) . Se est es
arquivos for em apagados as t abelas serão r ecriadas e todos os dados serão PERDI DOS. Não se pode
copiar um a t abela com est rutur a diferent e par a este dir etório, pois seus dados devem ser
atualizados nos arquivos do DDF t am bém . Com o os dados e o dir et ór io DDF devem est ar
" sincr onisados" os ar quivos do DDF dev em ser incluídos no esquem a de " back up" dos dados;

• As t abelas só podem t er " um " cam po do tipo m em o e est e cam po deve ser o últim o, por isso na
hor a da cr iação da t abela o Pr ot heus aut om at icam ent e desloca o cam po m em o par a o final e m ost ra
um a m ensagem de aviso;

• Para apagar os índices, ent r ar em APSdu, abrir a t abela e escolher I ndex/ er ase all. Ele apagará
t odos os índices da t abela e t am bém a sua definição no DDF. Par a fazer via pr ogram a, selecione a
t abela e cham e a função < @> BTVDr opIdxs( ) . Por tant o aconselha- se utilizar o índice do t ipo
per m anente som ent e se o m esm o for ut ilizado post er ior m ent e ( out ras aber turas da t abela) caso
contr ár io deve- se utilizar os índices t em porários;

• Para ger ar os ar quiv os DFF´ s com pat íveis com out r as ferr am ent as que m anipulam arquiv os btr iev e,
inclusive Cry st al Repor t s, ex istem duas funções par a criar os ar quiv os necessár ios: < @> BTVTables e
< @> BTVCreat eDDFs;

Configuração do Btrieve/ PervasiveSQL2000:

• Para configur ar o Bt r ieve Ser v er dev e- se executar os seguint es passos:

1.Term inar a ex ecução do Pr otheus e parar o ser v iço w32m k de;

2.Delet ar os arquivos binár ios do Bt r ieve do dir et ório " Pr ot heus\ Bin" ( wbtr v32.dll, w 32m kr c.dll,
w bt rv r es.dll e w32m k de.exe) ;

3.Inst alar o Per vasiv eSQL200 com os r espect iv os "Ser vices Packs";

4.Entr ar no Per v asiv e Cont rol Center ( m enu I niciar - Per vasiv e - Per vasive Contr ol Cent er ) ;

5.Visualizar os nom es dos ser v idor es disponíveis ( no caso de Linux , Nov ell e Solar is dev e- se
acrescent ar um serv idor ) ;

6.At r av és de um duplo click sobre o ser vidor que se deseja utilizar entr ar em " configuração"
( configur at ion) ;

7.Para Windows NT e 2000 dev e- se acer tar os valor es de alguns parâm etr os:

Past a Access:

• Accept Rem ot e Request : ON

• Act iv e Clients : 10000

• Logical File Handles : 100000

• MaxDat abases: 10

• Maxim um Open Files: 10000

• Num ber of Sessions: 20

Past a Com m unicat ion Buffer Size:

25

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________26

• Com m unication Buffer Size : 63

• MKDE Com m unicat ion Buffer Size: 63

• Read Buffer Size: 4

Past a Dat a Integr ity :

10. Initiation Tim e Lim it : 100000

11. Oper at ion Bundle Lim it : 10000

Past a Mem or y usage:

• Allocat e Resource at St ar t up: On

• Back to Minim al St at e if I nact ive: On

• Ex t ended Operat ion Buffer Size: 16

• Sy st em Cache: On

Past a Per for m ance Tunning:

• Cache Allocat ion Size: + - 131072 ( m ínim o de 12000)

• Com m unications Thr eads : 64

• I ndex Balancing: Off

• Lar gest Com pr essed Record Size: 0

• Log Buffer Size: 64

• Num ber of I nput / Output Threads : 64

• Num ber of Work er Thr eads: 64

• Tr ansaction Log Size: 512

* Obs: O Cache Allocation Size aloca m em ória do serv idor par a uso do banco de dados.
Quanto m ais m em ór ia, m ais r ápidas são ex ecut adas as operações.

A v er são 6.15 possui um a lim it ação: Se dois ser vidores NT4 est iverem acessando o m esm o
arquiv o, ocorr erá lent idão na r ede. I sso acont ece se for ut ilizado o m esm o RPO ( que é um arquivo
btr iev e) par a dois ser vidores no AP5. A solução é sem pr e r eplicar os r eposit ór ios em cada ser vidor
ou adquir ir ( deve ser com prado) a v er são a part ir da Per v asiv eSQL2000. Em m áquinas Win2000,
não é nem m esm o possível abrir um arquivo btr iev e de dois serv idor es. Est e pr oblem a é de
conhecim ent o da Per vasiv e, m as não ser á alt er ado porque est a v er são foi descont inuada por volta
de agost o de 2001.

26

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________27

CTree

I nformações Básicas

• Para m anipulação de t abelas Ct ree o driv er utilizado é “ CTREECDX” ;

• Para pr ogram ar algo específico para o Ct ree pode- se utilizar o t este “ # ifdef CTREE” ;

• A ex tensão padrão das t abelas é “ .dt c” . Quando o LocalFile estiver utilizando o banco Ct ree os SXs
continuam t endo com o padr ão a ext ensão “ .dbf” , m as as t abelas cr iadas ( SX1990.DBF, SX2990.DBF,
etc) são Ctr ee. Por tant o r ecom enda- se que se configure out r a ex tensão padrão para ar quiv os locais
do t ipo Ct r ee atr av és da chave “ LocalDbExt ension” no arquivo “ ap6sr v.ini” com o “ .dt c” ;

• As m anipulações e visualizações de dados devem ser feit as at ravés do “ APSdu” , pois as ant igas
fer r am ent as são incom pat ív eis;

• O Ct r ee não precisa ser inst alado, pois sua bibliot eca é ger ada j unto com o Prot heus;

• Os cam pos do tipo m em o devem ser os últ im os da tabela, por isso na hor a da sua criação o
Protheus aut om aticam ent e desloca- os par a o final e m ost ra um a m ensagem de av iso;

• As t abelas geradas pelo Ctr ee são totalm ente com pat íveis entr e as plat afor m as Windows e Linux,
pode- se inclusive copiar um a t abela ger ada no Linux e abrí- la no Window s e v ice- e- v er sa.

Í ndices

• - O índice int er no do Ct r ee ( or dem do r ecno) é cr iado em outr o arquivo com ext ensão “ .int ” . Um a
pasta ( “ ct reeint” ) é criada abaix o da pasta com a t abela. Nesta past a serão ar m azenados todos os
índices int er nos daquele dir et ór io. Caso não exista o ar quiv o de índice int er no o m esm o é gerado
aut om at icam ent e pelo Pr ot heus m ostr ando um av iso de que reconstr uiu o índice no ser vidor na hora
da aber t ur a da t abela. Par a apagá- lo pode ser ut ilizada um a função < @> CTREEDELI NT;

• - Os ar quiv os de índices per m anentes são criados fora do ar quivo da tabela com ext ensão padr ão
com o nos out ros RDDs ( “ .cdx” ) , m as suas inform ações são arm azenadas no arquivo da tabela
( “ .dtc” ) . Por tant o par a se cr iar ou excluir índices perm anent es a tabela dev e est ar abert a em m odo
exclusiv o. Na hor a da abert ur a da tabela, t odos os arquivos de índices per m anentes r elacionados em
sua est r ut ur a são aber t os t am bém , por isso não se pode deletar o arquivo de índice per m anente com
a r espectiva tabela abert a. Caso não exista um ou m ais ar quivos de índices da tabela na hor a de sua
abert ur a, o Prot heus irá r ecriá- los aut om at icam ent e de for m a sem elhante ao índice interno. O
dir etório do ar quiv o de índice tam bém é ar m azenado na est r ut ur a da tabela, m as quando a t abela é
abert a e é const at ado que a t abela est á em out ro diret ór io o Pr ot heus aut om at icam ente at ualiza esta
inform ação. Par a se delet ar os índices de um a t abela Ct ree pode- se utilizar a função
< @> CTREEDELI DXS ou utilizar a opção “ Index/ er ase all” no APSdu. Por tant o aconselha- se ut ilizar o
índice do tipo per m anent e som ente se o m esm o for ut ilizado post er ior m ente ( outr as aber turas da
t abela) caso cont rário dev e- se ut ilizar os índices tem porár ios;

• - O índice t em por ár io é cr iados dentr o de um subdir et ór io com o nom e do arquiv o especificado na


hor a de sua cr iação, por ex em plo “ ind1.idx” contendo os ar quivos “ ind1.ind” , “ ind1c.ind” e
“ ind1r .ind” . Este t ipo de índice não possui definição ar m azenada no arquiv o da tabela, por ser
t em por ário.

27

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________28

Sistemas Operacionais e Plat aformas ( versão AP6 e post eriores)

Sistemas Operacionais e Plataformas

O Pr ot heus Ser ver foi desenv olvido em ANSI C+ + e , por tant o, independe de API's especificas para
funcionar . Gr aças a isso, o núcleo do Pr ot heus pode ser r ecom pilado em todos os sist em as operacionais e
plat aform as que supor tem ANSI C+ + .

Outr a pr eocupação dur ante o desenvolvim ent o do Pr ot heus foi gar antir tot al com pat ibilidade dos
reposit ór ios de objetos do Pr ot heus ( RPO's) e das cor r eções dos reposit ór ios ( Patch's) entr e os sistem as
oper acionais e platafor m as.

Plataformas e SO's suportados

• Windows e Linux I nt el,

• Windows IA64,

• Sun Solar is ( RI SC ) ,

• HP UX ( RISC ) ,

• Com paq Tr ue64 ( RI SC ) ,

• I BM AI X ( Pow er PC e RS/ 6000 ) ,

Novos SO's a serem suportados

• Palm OS ( em fase Bet a )

• Pock et PC

28

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________29

AdPl – Guia de Programação

A Linguagem AdvPl
A Linguagem Adv Pl teve seu início em 1994, sendo na verdade um a evolução na ut ilização de linguagens
no padrão xBase pela Micr osiga Soft ware S.A. ( Clipper , Visual Object s e depois Fiv eWin) . Com a cr iação
da t ecnologia Pr otheus, era necessário cr iar um a linguagem que supor t asse o padr ão x Base para a
m anut enção de t odo o código ex ist ente do sistem a de ERP Siga Advanced. Foi ent ão cr iada a linguagem
cham ada Adv anced Pr ot heus Language.

O Adv Pl é um a ext ensão do padr ão x Base de com andos e funções, oper ador es, est rut ur as de cont r ole de
fluxo e palav ras r eser vadas, contando tam bém com funções e com andos disponibilizados pela Microsiga
que a t or na um a linguagem com pleta par a a cr iação de aplicações ERP pr ontas par a a Int er net. Tam bém é
um a linguagem or ient ada a obj et os e event os, per m itindo ao pr ogram ador desenvolver aplicações visuais
e criar suas própr ias classes de objetos.

Quando com pilados, t odos os ar quivos de código tornam - se unidades de int eligência básicas, cham ados
APO´ s ( de Advanced Protheus Obj ect s) . Tais APO´ s são m ant idos em um r eposit ório e carr egados
dinam icam ent e pelo AP6 Ser ver para a ex ecução. Com o não ex ist e a linkedição, ou união física do código
com pilado a um det er m inado m ódulo ou aplicação, funções criadas em AdvPl podem ser ex ecut adas em
qualquer pont o do am bient e Advanced Protheus.

O com pilador e o interpretador da linguagem Adv Pl é o pr óprio ser vidor AP6 ( AP6 Ser ver) , e existe um
am biente v isual par a desenv olvim ent o int egr ado ( AP6 I DE) onde o código pode ser cr iado, com pilado e
depurado.

Os progr am as em Adv Pl podem cont er com andos ou funções de int er face com o usuário. De acordo com
tal car act er íst ica, t ais pr ogr am as são subdivididos nas seguintes cat egor ias:

Programação Com I nterface Própria com o Usuário

Nest a categoria ent ram os progr am as desenv olv idos par a ser em ex ecut ados atr avés do t er m inal r em oto
do Prot heus, o AP6 Rem ot e. O AP6 Rem ote é a aplicação encar regada da int er face e da int er ação com o
usuário, sendo que t odo o processam ent o do código em Adv Pl, o acesso ao banco de dados e o
gerenciam ent o de conexões é efet uado no AP6 Ser ver. O AP6 Rem ote é o principal m eio de acesso a
ex ecução de rot inas escr it as em AdvPl no AP6 Serv er , e por isso perm it e ex ecut ar qualquer t ipo de código,
tenha ele int er face com o usuário ou não. Por ém nest a cat egor ia são consider ados apenas os pr ogram as
que realizem algum tipo de interface r em ot a ut ilizando o prot ocolo de com unicação do Protheus.

Pode- se cr iar rotinas par a a cust om ização do sist em a ERP Advanced Pr ot heus, desde pr ocessos adicionais
at é m esm o r elatórios. A grande vant agem é apr oveitar t odo o am bient e m ont ado pelos m ódulos do ERP
Advanced Pr otheus. Por ém , com o Adv Pl é possív el at é m esm o criar t oda um a aplicação, ou m ódulo, do
com eço.

Todo o código do sistem a ERP Adv anced Pr ot heus é escr ito em Adv Pl.

Programação Sem I nterface Própria com o Usuário

As r ot inas cr iadas sem int er face são consideradas nest a cat egor ia por que geralm ente t êm um a ut ilização
m ais específica do que um processo adicional ou um r elatório nov o. Tais r ot inas não t êm int er face com o
usuãrio at r av és do AP6 Rem ote, e qualquer t entat iv a nesse sent ido ( com o a cr iação de um a janela
padr ão) ocasionar á um a exceção em t em po de execução. Estas rot inas são apenas pr ocessos, ou Jobs,
ex ecut ados no AP6 Serv er . Algum as vezes, a int er face dest as r ot inas fica a car go de aplicações ex t er nas,

29

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________30

desenv olvidas em out ras linguagens, que são responsáveis por iniciar os processos no serv idor AP6
at r avés dos m eios disponív eis de int egração e conect ividade no Protheus.

De acordo com a ut ilização e com o m eio de conect iv idade utilizado, estas r ot inas são subcat egor izadas
assim :

Programação por Processos

Rotinas escrit as em Adv Pl podem ser iniciadas com o pr ocessos indiv iduais ( sem int er face) no AP6 Serv er
at r avés de duas m aneiras: I niciadas por out r a rotina AdvPl at r av és da cham ada de funções com o St ar tJob
ou CallProc ou iniciadas aut om aticam ent e na inicialização do AP6 Ser ver ( quando pr opriam ente
configurado) .

Programação de RPC

At ravés de um a bibliot eca de funções disponív el no Prot heus ( um a API de com unicação) , pode- se ex ecut ar
rot inas escr it as em AdvPl dir et am ent e no AP6 Ser ver, at ravés de aplicações ext ernas escrit as em outr as
linguagens. I st o é o que se cham a de RPC ( de Rem ote Procedure Call, ou Cham ada de Procedim ent os
Rem ot a) .

O serv idor Pr ot heus t am bém pode execut ar r ot inas em AdvPl em out ros ser vidores Pr otheus at ravés de
conexão TCP/ I P dir et a ut ilizando o conceito de RPC. Do m esm o m odo, aplicações ext er nas podem
requisitar a execução de rotinas escrit as em AdvPl atr av és de conex ão TCP/ I P dir et a.

Programação Web

O AP6 Ser ver pode tam bém ser ex ecut ado com o um ser vidor Web, r espondendo a r equisições HTTP. No
m om ent o dest as r equisições, pode execut ar r ot inas escrit as em AdvPl com o pr ocessos indiv iduais,
enviando o r esult ado das funções com o r et or no das requisições par a o cliente HTTP ( com o por ex em plo
um Br owser de Internet ) . Qualquer rotina escr ita em Adv Pl que não cont enha com andos de int erface pode
ser execut ada atr av és de r equisições HTTP. O Pr ot heus per m ite a com pilação de ar quivos HTML cont endo
código Adv Pl em but ido. São os cham ados ar quivos AdvPl ASP, para a cr iação de páginas dinâm icas.

Programação TelNet

TelNet é part e da gam a de protocolos TCP/ I P que per m it e a conex ão a um com putador r em oto at ravés de
um a aplicação client e dest e pr ot ocolo. O AP6 Ser ver pode em ular um t er m inal TelNet , at r av és da
ex ecução de rotinas escrit as em Adv Pl. Ou seja, pode- se escrever r ot inas Adv Pl cuja int erface final será
um t er m inal TelNet ou um colet or de dados m óvel.

Sintaxe da Linguagem

Edição de Programas

Criação de um Programa

30

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________31

Um pr ogram a de com putador nada m ais é do que um grupo de com andos logicam ent e dispost os com o
objet iv o de ex ecut ar det erm inada t arefa. Esses com andos são gr av ados em um arquivo t ex t o que é
tr ansform ado em um a linguagem executável por um com put ador at r av és de um processo cham ado
com pilação. A com pilação subst itui os com andos de alto nív el ( que os hum anos com pr eendem ) por
instr uções de baix o nível ( com pr eendida pelo sistem a oper acional em ex ecução no com putador) . No caso
do Adv Pl, não é o sist em a oper acional de um com put ador que ir á ex ecut ar o código com pilado, m as sim o
AP6 Serv er .

Dent ro de um progr am a, os com andos e funções utilizados devem seguir r egras de sint ax e da linguagem
ut ilizada, pois caso cont r ár io o pr ogr am a será interr om pido por er ros. Os er r os podem ser de com pilação
ou de ex ecução.

Er ros de com pilação são aqueles encontr ados na sintaxe que não per m item que o ar quiv o de código do
pr ogram a sej a com pilado. Podem ser com andos especificados de for m a er rônea, ut ilização inválida de
oper ador es, etc.

Er ros de execução são aqueles que acont ecem depois da com pilação, quando o pr ogram a está sendo
ex ecut ado. Podem ocorr er por inúm er as r azões, m as ger alm ent e se refer em a funções não exist ent es, ou
variáveis não cr iadas ou inicializadas, et c.

Linhas de Programa

As linhas exist ent es dentr o de um ar quiv o text o de código de pr ogram a podem ser linhas de com ando,
linhas de com entário ou linhas m ist as.

Linhas de Comando

Linhas de com ando possuem os com andos ou inst ruções que serão ex ecut adas. Por exem plo:

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

Linhas de Comentário

Linhas de com entário possuem um t ex t o qualquer, m as não são ex ecut adas. Serv em apenas para
docum entação e par a tornar m ais fácil o ent endim ento do progr am a. Exist em t rês for m as de se com ent ar
linhas de text o. A pr im eir a delas é utilizar o sinal de * ( ast er isco) no com eço da linha:

* Programa para cálculo do total


* Autor: Microsiga Software S.A.
* Data: 2 de outubro de 2001

Todas as linhas iniciadas com um sinal de ast erisco são consideradas com o com ent ár io. Pode- se ut ilizar a
palavr a NOTE ou dois sím bolos da letr a " e" com ercial ( &&) par a realizar a função do sinal de ast er isco.
Porém todas estas for m as de com ent ár io de linhas são obsoletas e ex ist em apenas par a com pat ibilização
com o padr ão x Base. A m elhor m aneir a de com entar linhas em Adv Pl é ut ilizar duas bar ras t ransversais:

// Programa para cálculo do total


// Autor: Microsiga Software S.A.
// Data: 2 de outubro de 2001

31

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________32

Outr a for m a de docum ent ar text os é ut ilizar as bar ras t ransversais j untam ent e com o asterisco, podendo-
se com entar t odo um bloco de t ex to sem precisar com entar linha a linha:

/*
Programa para cálculo do total
Autor: Microsiga Software S.A.
Data: 2 de outubro de 2001
*/

Todo o t ex to encont rado ent re a abert ur a ( indicada pelos caracteres / * ) e o fecham ent o ( indicada pelos
caract eres * / ) é consider ado com o com ent ár io.

Linhas Mistas

O AdvPl tam bém perm it e que ex ist am linhas de com ando com com ent ár io. I sto é possív el incluíndo- se as
duas bar r as t r ansver sais ( / / ) ao final da linha de com ando e adicionando- se o t ex to do com ent ár io:

Local nCnt
Local nSoma := 0 // Inicializa a variável com zero para a soma
For nCnt := 1 To 10
nSoma += nCnt
Next nCnt

Tamanho da Linha

Assim com o a linha física, delim itada pela quantidade de car acteres que pode ser digitado no editor de
text os ut ilizado, exist e um a linha considerada linha lógica. A linha lógica, é aquela consider ada para a
com pilação com o um a única linha de com ando.

A pr incípio, cada linha digitada no ar quivo t ex to é diferenciada após o pressionam ent o da t ecla < Ent er > .
Ou sej a, a linha lógica, é a linha física no ar quiv o. Porém algum as v ezes, por lim itação física do editor de
text o ou por estét ica, pode- se "quebr ar " a linha lógica em m ais de um a linha física no arquivo t ext o. I sto
é efetuado ut ilizando- se o sinal de ponto- e- v írgula ( ; ) .

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 ex em plo existe um a linha de com ando par a a checagem das v ar iáv eis ut ilizadas. Com o a linha
tor na- se m uit o gr ande, pode- se div idí- la em m ais de um a linha física utilizando o sinal de pont o- e- v ír gula.
Se um sinal de pont o- e- vír gula for esquecido nas duas pr im eiras linhas, durant e a ex ecução do progr am a
ocor r er á um er r o, pois a segunda linha física será consider ada com o um a segunda linha de com ando na
com pilação. E dur ante a ex ecução est a linha não ter á sent ido.

Estrutura de um Programa

32

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________33

Apesar de não ser um a linguagem de padrões r ígidos com r elação à est r ut ur a do pr ogram a, é im port ante
ident ificar algum as de suas par t es. Consider e o progr am a de exem plo abaix o:

/*
+===========================================+0
| Programa: Cálculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+===========================================+
*/

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

Pode- se classificar um pr ogram a em Adv Pl em quat r o part es básicas:

1.Ár ea de I dent ificação

2.Ár ea de Ajust es Iniciais

3.Corpo do Pr ogram a

4.Ár ea de Encer ram ento

A Área de I dentificação

Esta é um a ár ea que não é obr igatória e é dedicada a docum entação do progr am a. Quando exist ent e,
cont ém apenas com entários ex plicando a sua finalidade, data de criação, aut or , etc, e aparece no com eço
do progr am a, ant es de qualquer linha de com ando.

O for m at o para esta área não é definido. Pode- se colocar qualquer t ipo de infor m ação desejada e escolher
a for m at ação apropr iada.

/*
+==========================================+
| Programa: Cálculo do Fatorial |
| Autor : Microsiga Software S.A. |
| Data : 02 de outubro de 2001 |
+==========================================+
*/
Opcionalm ent e pode- se incluir definições de constant es ut ilizadas no pr ogr am a ou inclusão de ar quivos de
cabeçalho nesta área.

A Área de Ajustes I niciais

33

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________34

Nest a ár ea geralm ente se fazem os aj ustes iniciais, im port antes para o cor reto funcionam ent o do
pr ogram a. Entr e os aj ustes se encontr am declarações de var iáveis, inicializações, aber tura de ar quivos,
et c. Apesar do AdvPl não ser um a linguagem r ígida e as v ar iáveis poderem ser declar adas em qualquer
lugar do pr ogr am a, é aconselhável fazê- lo nest a ár ea v isando t ornar o código m ais legível e facilit ar a
ident ificação de variáv eis não utilizadas.

Local nCnt
Local nResultado := 0 // Resultado do fatorial
Local nFator := 10 // Número para o cálculo

O Corpo do Programa

É nest a ár ea que se encont r am as linhas de código do pr ogram a. É onde se realiza a tarefa necessár ia
at r avés da or ganização lógica dest as linhas de com ando. Espera- se que as linhas de com ando est ej am
or ganizadas de tal m odo que no final desta área o r esultado esper ado sej a obtido, sej a ele arm azenado
em um arquivo ou em v ar iáveis de m em ória, pr onto par a ser exibido ao usuár io at ravés de um relatór io
ou na t ela.

// Cálculo do fatorial
For nCnt := nFator To 1 Step -1
nResultado *= nCnt
Next nCnt

A Área de Encerramento

É nest a ár ea onde as finalizações são efet uadas. É onde os arquivos aber t os são fechados, e o r esultado
da execução do progr am a é ut ilizado. Pode- se exibir o resultado arm azenado em um a v ar iáv el ou em um
ar quivo ou sim plesm ent e finalizar , caso a tarefa j á t enha sido t oda com pletada no corpo do progr am a. É
nest a ár ea que se encontr a o encer ram ent o do progr am a. Todo pr ogram a em Adv Pl deve sem pre term inar
com a palavr a chave r et ur n.

// Exibe o resultado na tela, através da função alert


Alert("O fatorial de " + cValToChar(nFator) + ;
" é " + cValToChar(nResultado))

// Termina o programa
Return

Variáveis de Memória

Tipos de Dados
O AdvPl não é um a linguagem de t ipos rígidos ( st r ongly t yped) , o que significa que v ar iáv eis de m em ór ia
podem diferent es t ipos de dados durant e a execução do progr am a. Variáveis podem tam bém cont er
objet os, m as os tipos prim ários da linguagem são:

Numérico

34

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________35

O Adv Pl não difer encia valor es int eir os de valor es com pont o flut uant e, por t ant o pode- se criar variáveis
num ér icas com qualquer v alor dent ro do int er valo perm it ido. Os seguint es elem ent os são do t ipo de dado
num ér ico:

2
43.53
0.5
0.00001
1000000

Um a v ar iável do tipo de dado num érico pode cont er um núm er o de dezoito dígitos incluindo o ponto
flutuante, no int er valo de 2.2250738585072014 E–308 at é 1.7976931348623158 E+ 308.

Lógico

Valores lógicos em AdvPl são ident ificados at r av és de .T. ou .Y. para v er dadeir o e .F. ou .N. par a falso
( independent em ent e se os caract er es estiv er em em m aiúsculo ou m inúsculo) .

Caracter

St rings ou cadeias de caract er es são ident ificadas em AdvPl por blocos de t ex to ent re aspas duplas ( " ) ou
aspas sim ples ( ') :

"Olá mundo!"
'Esta é uma string'
"Esta é 'outra' string"

Um a v ar iáv el do t ipo car act er pode cont er st r ings com no m áxim o 1 Mb, ou sej a, 1048576 car act er es.

Data

O Adv Pl tem um tipo de dados específico par a datas. Inter nam ente as variáveis dest e tipo de dado são
ar m azenadas com o um núm ero corr espondent e a data Juliana.

Variáv eis do tipo de dados Data não podem ser declaradas dir et am ent e, e sim at ravés da ut ilização de
funções específicas com o por ex em plo ct od que convert e um a str ing par a data.

Matriz ( Array)

Matr izes são um t ipo de dado especial. É a disposição de out ros elem entos em colunas e linhas. O Adv Pl
suport a m atr izes uni ou m ult idim ensionais. Os elem ent os de um a m at r iz são acessados at r av és de índices
num ér icos iniciados em 1, ident ificando a linha e coluna para quant as dim enões exist irem .

Um a m at riz pode cont er no m áxim o 100000 elem entos, independentem ente do núm ero de dim ensões.

Matr izes devem ser utilizadas com cautela, pois se forem m uit o gr andes podem ex aurir a m em ória do
serv idor.

Bloco de Código

O bloco de código é um t ipo de dado especial. É ut ilizado par a ar m azenar instr uções escr itas em Adv Pl
que poderão ser executadas post erior m ent e.

35

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________36

Criação e Atribuição de Variáveis


Variáv eis de m em ór ia são um dos recursos m ais im por tant es de um a linguagem . São áreas de m em ór ia
cr iadas par a ar m azenar infor m ações utilizadas por um progr am a par a a execução de t arefas. Por ex em plo,
quando o usuár io digita um a infor m ação qualquer , com o o nom e de um pr odut o, em um a t ela de um
pr ogram a est a infor m ação é ar m azenada em um a v ar iáv el de m em ór ia para poster iorm ent e ser gravada
ou im pressa.

A part ir do m om ent o que um a variáv el é cr iada, não é necessár io m ais se refer enciar ao seu conteúdo, e
sim ao seu nom e. O nom e de um a v ar iáv el é um ident ificador único que segue duas r egras r egras:

M áx im o d e 1 0 ca ra ct er es. O Adv Pl não im pede a cr iação de um a variável de m em ór ia cujo nom e


cont enha m ais de 10 caract eres, por ém apenas os 10 pr im eir os ser ão consider ados par a a localização do
cont eúdo arm azenado. Port ant o se for em cr iadas duas v ar iáv eis cujos 10 prim eir os caract er es forem
iguais, com o nTotalGer alAnual e nTotalGer alMensal, as refer ências a qualquer um a delas no progr am a
resultarão o m esm o. Ou sej a, ser ão a m esm a v ar iáv el:

nTotalGeralMensal := 100
nTotalGeralAnual := 300
Alert("Valor mensal: " + cValToChar(nTotalGeralMensal))

Quando o cont eúdo da v ar iáv el nTotalGer alMensal é ex ibido, o seu v alor será de 300. I sso acontece
porque no m om ent o que esse valor foi at ribuido à v ar iáv el nTotalGer alAnual, o AdvPl considerou apenas
os 10 pr im eir os car act er es ( assim com o o faz quando deve exibir o valor da variáv el nTot alGeralMensal) ,
ou sej a, considerou- as com o a m esm a v ar iáv el. Assim o valor original de 100 foi substit uido pelo de 300.

Lim it a çã o de cara ct er es n o n o m e. Os nom es das variáv eis dev em sem pre com eçar por um a let r a ou o
caract er de sublinhado ( _ ) . No r est ante, pode conter let ras, núm eros e o caract er de sublinhado.
Qualquer out r o caract er, incluindo espaços em br anco, não são per m it idos.

O Adv Pl perm it e a cr iação ilim it ada de v ar iáveis, dependendo apenas da m em ór ia disponível. A seguir
estão alguns nom es válidos par a var iáveis:

TOT01
cNumero
VAR_QUALQUER
M_CARGO
A11

E alguns inválidos:

1CODIGO (Inicia por um número)


M CARGO (contém um espaço em branco)
LOCAL (palavra reservada do AdvPl)

O AdvPl não é um a linguagem de t ipos rígidos par a v ar iáveis, ou sej a, não é necessár io infor m ar o t ipo de
dados que det erm inada v ar iáv el ir á cont er no m om ento de sua declar ação, e o seu v alor pode m udar
durant e a ex ecução do progr am a. Tam bém não há necessidade de declar ar v ar iáveis em um a seção
específica do seu código font e, em bor a sej a aconselhável declar ar todas as v ar iáveis necessár ias no
com eço, tor nando a m anut enção m ais fácil e ev it ando a declar ação de v ar iáv eis desnecessár ias.

Para declar ar um a v ar iável dev e- se utilizar um ident ificador de escopo, seguido de um a list a de variáveis
separadas por vír gula ( ,) . Um ident ificador de escopo é um a palavr a chav e que indica a que context o do
pr ogram a a variável declar ada pert ence. O cont ex t o de variáveis pode ser local ( visualizadas apenas

36

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________37

dent ro do progr am a atual) , público ( v isualizadas por qualquer out r o pr ogram a) , entr e outr os. Os
difer entes t ipos de context o de variáveis são ex plicados na docum ent ação sobr e escopo de variáveis.

Consider e as linhas de código de ex em plo:

nResultado := 250 * (1 + (nPercentual / 100))

Se est a linha for execut ada em um pr ogram a AdvPl, ocor rerá um er ro de ex ecução com a m ensagem
"v ar iable does not ex ist: nPer cent ual" , pois esta v ar iáv el est á sendo ut ilizada em um a ex pr essão de
cálculo sem t er sido declar ada. Para solucionar este er ro, dev e- se declar ar a variáv el pr ev iam ent e:

Local nPercentual, nResultado


nResultado := 250 * (1 + (nPercentual / 100))

Nest e ex em plo, as v ar iáveis são declaradas pr ev iam ent e ut ilizando o identificador de escopo local. Quando
a linha de cálculo for ex ecut ada, o er ro de v ar iável não exist ent e não m ais ocorr er á. Porém variáveis não
inicializadas t êm sem pre o v alor default nulo ( Nil) e este v alor não pode ser ut ilizado em um cálculo pois
tam bém gerará err os de ex ecução ( nulo não pode ser div idido por 100) . A r esolução dest e pr oblem a é
efet uada inicializando- se a variáv el at r av és de um a das for m as:

Local nPercentual,nResultado
Store 10 To nPercentual
nResultado := 250 * (1 + (nPercentual / 100))

ou

Local nPercentual, nResultado


nPercentual := 10
nResultado := 250 * (1 + (nPercentual / 100))

ou

Local nPercentual := 10, nResultado


nResultado := 250 * (1 + (nPercentual / 100))

A difer ença ent re o últim o exem plo e os dois ant er ior es é que a v ar iáv el é inicializada no m om ent o da
declar ação. Nos dois pr im eir os exem plos, a var iável é pr im eir o declar ada e então inicializada em um a
outr a linha de código. O com ando stor e ex ist e apenas por com patibilidade com ver sões ant er ior es e outr as
linguagens x Base, m as é obsolet o. Dev e- se utilizar o oper ador de atr ibuição ( : = ou som ente = ) . É
aconselháv el optar pelo oper ador de at r ibuição com posto de dois pont os e sinal de igual, pois o oper ador
de atr ibuição ut ilizando som ent e o sinal de igual pode ser facilm ente confundido com o operador r elacional
( par a com par ação) dur ant e a cr iação do pr ogram a.

Um a v ez que um valor lhe sej a atr ibuído, o tipo de dado de um a v ar iável é igual ao t ipo de dado do valor
at r ibuído. Ou seja, um a variáv el passa a ser num érica se um núm er o lhe é at ribuído, passa a ser car act er
se um a str ing de text o lhe for at r ibuída, etc. Por ém m esm o que um a v ar iáv el sej a de determ inado t ipo de
dado, pode- se m udar o t ipo da variável at r ibuindo out ro tipo a ela:

01 Local xVariavel // Declara a variável inicialmente com valor nulo

37

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________38

02
03 xVariavel := "Agora a variável é caracter..."
04 Alert("Valor do Texto: " + xVariavel)
05
06 xVariavel := 22 // Agora a variável é numérica
07 Alert(cValToChar(xVariavel))
08
09 xVariavel := .T. // Agora a variável é lógica
10 If xVariavel
11 Alert("A variável tem valor verdadeiro...")
12 Else
13 Alert("A variável tem valor falso...")
14 Endif
15
16 xVariavel := Date() // Agora a variável é data
17 Alert("Hoje é: " + DtoC(xVariavel))
18
19 xVariavel := nil // Nulo novamente
20 Alert("Valor nulo: " + xVariavel)
21
22 Return

No pr ogr am a de exem plo ant er ior , a variáv el xVar iavel é ut ilizada para arm azenar diver sos tipos de
dados. A letr a " x" em m inúsculo no com eço do nom e é ut ilizada para indicar um a variável que pode cont er
diver sos tipos de dados, segundo a Not ação Húngar a ( consulte docum ent ação específica para det alhes) .
Este pr ogr am a tr oca os valor es da variáv el e ex ibe seu conteúdo par a o usuár io at ravés da função alert .
Essa função r ecebe um par âm etr o que deve ser do t ipo st ring de car acter , por isso dependendo do t ipo de
dado da variável x Var iav el é necessár io fazer um a conversão ant es.

Apesar dessa flex ibilidade de utilização de v ar iáv eis, deve- se tom ar cuidados na passagem de parâm etr os
para funções ou com andos, e na concatenação ( ou som a) de valor es. Note a linha 20 do pr ogram a de
ex em plo. Quando esta linha é execut ada, a var iável x Var iav el cont em o v alor nulo. A t entat iv a de som a de
tipos de dados difer entes gera er ro de ex ecução do pr ogram a. Nest a linha do ex em plo, ocor rerá um er ro
com a m ensagem " ty pe m ism at ch on + " . Excet uando- se o caso do v alor nulo, para os dem ais dev e- se
sem pr e ut ilizar funções de conv er são quando necessit a- se concat enar t ipos de dados difer entes ( por
ex em plo, nas linhas 07 e 17.

Note t am bém que quando um a v ar iáv el é do t ipo de dado lógico, ela pode ser ut ilizada diret am ent e para
checagem ( linha 10) :

If xVar iavel

é o m esm o que

If xVar iavel = .T.

A declaração de v ar iáv eis par a os dem ais tipos de dados, m at rizes e blocos de código, é ex at am ent e igual
ao descr it o at é agor a. Apenas exist em algum as difer enças quant o a inicialização, que podem ser
consult adas na docum entação de inicialização de matrizes e blocos de código.

Matrizes

38

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________39

Matr izes, ou ar r ay s, são coleções de valor es. Ou, de um a m aneira m ais fácil de ent ender, um a list a. Um a
m at r iz pode ser criada atr av és de difer ent es m aneir as. Consult e a docum ent ação sobre I nicialização de
Matrizes par a m aior es det alhes.

Cada it em em um a m at riz é r eferenciado pela indicação de sua posição num ér ica na lista, iniciando pelo
núm er o 1. O ex em plo a seguir declar a um a var iáv el, atr ibui um a m at r iz de t rês elem entos a ela, e ent ão
ex ibe um dos elem ent os e o t am anho da m at riz:

Local aLetr as / / Declar ação da v ar iável

aLet r as : = { " A" , " B" , " C" } / / At r ibuição da m at r iz à variável

Aler t ( aLetr as[ 2] ) / / Exibe o segundo elem ent o da m at r iz

Aler t ( cValToChar( Len( aLet r as) ) ) / / Exibe o t am anho da m at riz

O Adv Pl perm it e a m anipulação de m at rizes facilm ent e. Enquant o que em out ras linguagens com o C ou
Pascal é necessár io alocar m em ór ia para cada elem ento de um a m atr iz ( o que t ornar ia a ut ilização de
"point eir os" necessár ia) , o Adv Pl se encarr ega de gerenciar a m em ór ia e t or na sim ples adicionar
elem entos a um a m at r iz, ut ilizando a função aAdd:

aAdd( aLetr as,"D" ) / / Adiciona o quar t o elem ento ao final da m at riz

Aler t ( aLetr as[ 4] ) / / Exibe o quar t o elem ento

Aler t ( aLetr as[ 5] ) / / Er ro! Não há um quint o elem ento na m atr iz

Matrizes como Estruturas

Um a car act er íst ica int er essant e do AdvPl é que um a m at riz pode cont er qualquer coisa: núm eros, dat as,
lógicos, car acteres, objetos, et c. E ao m esm o t em po. Em outr as palavr as, os elem ent os de um a m at r iz
não pr ecisam ser necessar iam ent e do m esm o t ipo de dado, em cont r aste com out ras linguagens com o C e
Pascal.

aFunct 1 : = { " Pedr o" ,32,.T.}

Esta m at riz contem um a str ing, um núm ero e um v alor lógico. Em out r as linguagens com o C ou Pascal,
este "pacot e" de infor m ações pode ser cham ado com o um "st ruct " ( estr ut ur a em C, por exem plo) ou um
"r ecor d" ( r egist r o em Pascal, por ex em plo) . Com o se fosse na verdade um r egistr o de um banco de dados,
um pacot e de infor m ações const r uído com div er sos cam pos. Cada cam po tendo um pedaço diferent e de
dado.

Suponha que no ex em plo anterior, o ar ray aFunct 1 cont enha inform ações sobr e o nom e de um a pessoa,
sua idade e sua situação m atr im onial. Os seguintes # defines podem ser cr iados par a indicar cada posição
dos valor es dentr o da m at r iz:

# define FUNCT_NOME 1

# define FUNCT_IDADE 2

# define FUNCT_CASADO 3

39

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________40

E considere m ais algum as m atr izes para repr esentar m ais pessoas:

aFunct 2 : = { " Mar ia" , 22, .T.}

aFunct 3 : = { " Ant ônio" , 42, .F.}

Os nom es podem ser im pr essos assim :

Aler t ( aFunct1[ FUNCT_NOME] )

Aler t ( aFunct2[ FUNCT_NOME] )

Aler t ( aFunct3[ FUNCT_NOME] )

Agor a, ao invés de t r abalhar com v ar iáv eis indiv iduais, pode- se agr upá- las em um a out r a m at riz, do
m esm o m odo que m uit os r egist ros são agr upados em um a t abela de banco de dados:

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

Que é equivalente a isso:

aFunct s : = { { " Pedr o" , 32, .T.} , ;

{ " Maria" , 22, .T.} , ;

{ " Antônio", 42, .F.} }

aFunct s é um a m at r iz com 3 linhas por 3 colunas. Um a v ez que as v ar iáveis separadas for am com binadas
em um a m at r iz, os nom es podem ser ex ibidos assim :

Local nCount

For nCount : = 1 To Len( aFunct s)

Aler t ( aFuncts[ nCount,FUNCT_NOME] )

/ / O acesso a elem ent os de um a m at r iz m ult idim ensional

/ / pode ser r ealizado t am bém dest a for m a:

/ / aFunct s[ nCount ] [ FUNCT_NOME]

Next nCount

40

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________41

A v ar iáv el nCount seleciona que funcionár io ( ou que linha) é de int er esse. Então a const ante
FUNCT_NOME seleciona a prim eir a coluna daquela linha.

Cuidados com Matrizes

Matr izes são list as de elem entos, por t ant o m em ór ia é necessár ia par a ar m azenar est as inform ações.
Com o as m at rizes podem ser m ultidim ensionais, a m em ória necessária ser á a m ultiplicação do núm er o de
itens em cada dim ensão da m at riz, considerando- se o t am anho do conteúdo de cada elem ent o contido
nest a. Port ant o o t am anho de um a m atr iz pode v ar iar m uit o.

A facilidade da ut ilização de m at r izes, m esm o que para arm azenar inform ações em pacotes com o descr ito
anteriorm ent e, não é com pensada pela ut ilização em m em ória quando o núm er o de it ens em um ar ray for
m uit o gr ande. Quando o núm er o de elem ent os for m uit o gr ande dev e- se pr ocur ar out r as soluções, com o a
ut ilização de um arquivo de banco de dados t em por ár io.

Não há lim it ação par a o núm ero de dim ensões que um a m atr iz pode t er , m as o núm er o de elem ent os
m áx im o ( independent es das dim ensões onde se encont r am ) é de 100000.

I nicializando Matrizes
Algum as vezes o tam anho da m atr iz é conhecido previam ent e. Outr as vezes o tam anho da m atr iz só será
conhecido em t em po de ex ecução.

Se o tamanho da matriz é conhecido

Se o t am anho da m atr iz é conhecido no m om ent o que o pr ogram a é escr ito, há diversas m aneiras de
im plem ent ar o código.

01 Local nCnt

02 Local aX[ 10]

03 Local aY : = Ar r ay ( 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 Nex t nCnt

Este código preenche a m at riz com um a tabela de quadrados. Os valor es ser ão 1, 4, 9, 16 ... 81, 100.
Note que a linha 07 se refere à v ar iáv el aX, m as poder ia t am bém t r abalhar com aY ou aZ. O obj et ivo
dest e ex em plo é dem onst rar tr Ês m odos de cr iar um a m at riz de tam anho conhecido no m om ent o da
cr iação do código.

Na linha 02 a m atr iz é criada usando aX[ 10] . Isto indica ao AdvPl par a alocar espaço par a 10 elem ent os
na m at riz. Os colchetes [ e ] são utilizados para indicar o t am anho necessário.

Na linha 03 é utilizada a função ar r ay com o par âm etr o 10 para cr iar a m atr iz, e o r et or no desta função é
at r ibuído à variável aY.

41

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________42

Na linha 03 é efet uado o que se cham a "desenhar a im agen da m at r iz" . Com o pode- se not ar , exist em dez
0´ s na list a encer rada ent r e chav es ( { } ) . Clar am ente, est e m ét odo não é o ut ilizado par a criar um a m at r iz
de 1000 elem ent os. O ter ceir o m étodo difer e dos ant er iores porque inicializa a m atr iz com os valor es
definit ivos. Nos dois prim eir os m ét odos, cada posição da m atr iz cont ém um v alor nulo ( Nil) e deve ser
inicializado post er ior m ente.

A linha 07 dem onstr a com o um valor pode ser at ribuído par a um a posição existent e em um a m at r iz
especificando o índice entr e colchet es.

Se o tamanho da matriz não é conhecido

Se o t am anho da m at r iz não é conhecido at é o m om ent o da execução do progr am a, há algum as m aneir as


de criar um a m at riz e adicionar elem ent os a ela. O exem plo a seguir ilustr a a idéia de cr iação de um a
m at r iz vazia ( sem nenhum elem ent o) e adição de elem ent os dinam icam ente.

01 Local nCnt

02 Local aX[ 0]

03 Local aY : = Ar r ay ( 0)

04 Local aZ : = { }

05

06 For nCnt : = 1 To nSize

07 aAdd( aX,nCnt * nCnt)

08 Nex t nCnt

A linha 02 ut iliza os colchetes para cr iar um a m atr iz vazia. Apesar de não ter nenhum elem ent o, seu t ipo
de dado é m atr iz.

Na linha 03 a cham ada da função ar ray cria um a m atr iz sem nenhum elem ento.

Na linha 04 est á declar ada a r epr esent ação de um a m at riz v azia em Adv Pl. Mais um a vez, est ão sendo
ut ilizadas as chav es par a indicar que o t ipo de dados da v ar iáv el é m at riz. Not e que { } é um a m atr iz v azia
( t em o tam anho 0) , enquant o { Nil} é um a m at r iz com um único elem ento nulo ( t em t am anho 1) .

Porque cada um a dest as m atr izes não cont em elem ent os, a linha 07 ut iliza a função aadd par a adicionar
elem entos sucessivam ente at é o t am anho necessár io ( especificado por ex em plo na var iáv el nSize) .

Blocos de Código
Blocos de código são um conceit o ex ist ent e há m uit o tem po em linguagens x Base. Não com o algo que
apar eceu da noit e par a o dia, e sim um a ev olução progr essiv a utilizando a com binação de m uit os
conceit os da linguagem par a a sua im plem entação.

Um Primeiro Lembrete

O AdvPl é um a linguagem baseada em funções. Funções t êm um v alor de r et or no. Assim com o o oper ador
de at ribuição : = .

Assim , ao inv és de escrever:

42

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________43

x : = 10 / / At r ibui o valor 10 à v ar iável cham ada X

Aler t ( " Valor de x: " + cValToChar ( x) )

Posde- se escr ev er :

/ / At ribui e então ex ibe o v alor da v ar iáv el X

Aler t ( " Valor de x: " + cValt oChar( X : = 10) )

A ex pr essão x: = 10 é av aliada pr im eiro, e ent ão seu r esult ado ( o valor de X, que agor a é 10) é passada
para a função cv altochar par a a conv er são para car acter , e em seguida para a função aler t para a
ex ibição. Por causa dest a regr a de precedência é possív el at ribuir um valor a m ais de um a varíavel ao
m esm o t em po:

Z := Y := X := 0

Por causa dessa r egr a, essa expressão é avaliada com o se fosse escrit a assim :

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

Apesar do AdvPl av aliar expressões da esquer da par a a direita, no caso de at ribuições isso acont ece ao
cont r ár io, da direit a par a a esquerda. O v alor é at ribuído à variável X, que r et or na o v alor para ser
at r ibuído à v ar iável Y e assim sucessiv am ent e. Pode- se dizer que o zero foi " pr opagado at r avés da
ex pr essão" .

Outro Lembrete

Em AdvPl pode- se j untar div er sas linhas de código em um a única linha físcia do ar quiv o. Por ex em plo, o
código:

If lAchou

Aler t ( " Cliente encont rado!" )

Endif

pode ser escr ito assim :

If lAchou ; Alert ( " Cliente encont rado!" ) ; Endif

43

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________44

O pont o- e- vír gula indica ao AdvPl que a nova linha de código est á para com eçar. Pode- se então colocar
diver sas linhas lógicas de código na m esm a linha física atr av és do edit or de t ex to utilizado.

Apesar da possibilidade de se escr ev er t odo o pr ogram a assim , em um a única linha física, isto não é
recom endado pois dificult a a legibilidade do progr am a e, conseqüentem ente, a m anut enção.

Lista de Expressões

A ev olução dos blocos de código com eça com as list as de ex pr essões. Nos exem plos a seguir , o sím bolo
= = > indicará o retorno da expr essão após sua avaliação ( seja par a atr ibuir em um a variáv el, exibir para o
usuário ou im pr im ir em um r elatór io) , que será im pr esso em um r elat ór io por exem plo.

Duas Linhas de Código

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

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

Cada um a das linhas t er á a expressão av aliada, e o valor da variável ser á então im pr esso.

Duas Linha de Código em Uma , Utilizando Ponto- e- Vírgula

Este é o m esm o código que o ant erior , apenas escr it o em um a única linha:

Aler t ( cValToChar ( x : = 10 ; y : = 20 ) ) ==> 10

Apesar desse código se encont rar em um a única linha física, existem duas linhas lógicas separadas pelo
pont o e v ír gula. Ou sej a, esse código é equiv alent e a:

Aler t ( cValToChar ( x : = 10 ) )

y : = 20

Port ant o apenas o v alor 10 da variável x ser á passado para as funções cvaltochar e aler t par a ser exibido.
E o v alor 20 apenas será at ribuído à v ar iáv el y.

Convertendo para uma Lista de Expressões

Quando parênt eses são colocados ao r edor do código e o sinal de ponto- e- v írgula subst it uído por um a
vír gula apenas, o código torna- se um a list a de ex pr essões:

Aler t ( cValToChar ( ( X : = 10 , Y : = 20 ) ) ) ==> 20

O valor de r et orno result ant e de um a lista de ex pr essões é o v alor result ant e da últ im a ex pr essão ou
elem ento da lista. Funciona com o se fosse um pequeno pr ogr am a ou função, que r et or na o r esult ado de
sua últ im a av aliação ( efetuadas da esquer da para a direita) .

44

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________45

Nest e ex em plo, a expressão x : = 10 é av aliada, e ent ão a ex pr essão y : = 20, cuj o valor r esult ante é
passado para a função aler t e cvalt ochar, e então exibido. Depois que essa linha de código é execut ada, o
valor de X é igual a 10 e o de y igual a 20, e 20 ser á exibido.

Teor icam ente, não há lim it ação par a o núm ero de ex pr essões que podem ser com binadas em um a list a de
ex pr essões. Na pr át ica, o núm ero m áx im o é por v olta de 500 sím bolos.

Debugar listas de ex pr essões é difícil oprque as ex pr essões não estão div ididas em linhas de código font e,
o que tor na t odas as ex pr essões associadas a um a m esm a linha de código. Ist o pode t or nar m uit o difícil
determ inar onde um err o ocorr eu.

Onde Pode-se Utilizar uma Lista de Expressões?

O pr opósit o principal de um a list a de expr essões é agr upá- las em um a única unidade. Em qualquer lugar
do código AdvPl que um a ex pr essão sim ples pode ser utilizada, pode- se utilizar um a lista de ex pr essões. E
ainda, pode- se fazer com que v ár ias coisas acont eçam onde norm alm ente apenas um a acontecer ia.

X : = 10 ; Y : = 20

If X > Y

Alert ( " X" )

Z := 1

Else

Alert ( " Y")

Z : = -1

Endif

Aqui tem os o m esm o conceit o, escr ito ut ilizando list as de expressões na função iif:

X : = 10 ; Y : = 20

iif( X > Y , ;

( Alert ( "X") , Z : = 1 ) , ;

( Alert ( "Y") , Z : = - 1 ) )

De Listas de Expressões para Blocos de Código

Consider e a seguint e list a de ex pr essões:

Aler t ( cValToChar ( ( x : = 10, y : = 20 ) ) ) = = > 20

45

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________46

O Adv Pl per m ite criar funções, que são pequenos pedaços de código, com o se fosse um pequeno
pr ogram a, ut ilizados par a dim inuir par tes de t arefas m ais com plex as e reaproveit ar código em m ais de um
lugar num pr ogr am a. Par a m aiores detalhes consulte a docum ent ação sobre a criação de funções em
AdvPl. Por ém , a idéia neste m om ent o é que a lista de ex pr essões utilizada na linha anterior pode ser
cr iada com o um a função:

Function Lista( )

X : = 10

Y : = 20

Return Y

E a linha de exem plo com a list a de ex pr essões pode ser subst ituída, t endo o m esm o resultado, por :

Aler t ( cValToChar ( List a( ) ) ) = = > 20

Com o m encionado ant er ior m ente, um a list a de expressões é com o um pequeno pr ogr am a ou função. Com
poucas m udanças, um a list a de expr essões pode se tornar um bloco de código:

( X : = 10 , Y : = 20 ) / / Lista de Ex pr essões

{ | | X : = 10 , Y : = 20 } / / Bloco de Código

Note as chav es { } ut ilizadas no bloco de código. Ou sej a, um bloco de código é um a m at r iz. Por ém na
verdade, não é um a lista de dados, e sim um a list a de com andos, um a list a de código.

/ / Ist o é um a m at r iz de dados

A : = { 10, 20, 30}

/ / Ist o é um bloco de código, porém funciona com o

/ / se fosse um a m at r iz de com andos

B : = { | | x : = 10, y : = 20}

Executando um Bloco de Código

Difer entem ente de um a m at riz, não se pode acessar elem ent os de um bloco de código at ravés de um
índice num ér ico. Porém blocos de código são sem elhant es a um a list a de ex pr essões, e a um a pequena
função. Ou sej a, podem ser ex ecut ados. Par a a ex ecução, ou avaliação, de um bloco de código, dev e- se
ut ilizar a função eval:

nRes : = Ev al( B) = = > 20

46

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________47

Essa função r ecebe com o par âm ero um bloco de código e av alias t odas as expressões cont idas nest e bloco
de código, r et or nando o r esultado da últ im a ex pr essão avaliada.

Passando Parâmetros

Já que blocos de código são com o pequenas funções, t am bém é possív el a passagem de par âm et ros para
um bloco de código. Os par âm etr os devem ser inform ados ent re as barr as v er t icais ( | | ) separ ados por
vír gulas, assim com o em um a função.

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

Porém dev e- se not ar que j á que o bloco de código r ecebe um parâm etr o, um valor deve ser passado
quando o bloco de código for av aliado.

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

Utilizando Blocos de Código

Blocos de código podem ser ut ilizados em diversas situações. Ger alm ent e são ut ilizados par a ex ecut ar
tar efas quando ev entos de obj et os são acionados ou par a m odificar o com por tam ento padrão de algum as
funções.

Por exem plo, consider e a m at riz abaix o:

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

Esta m at riz pode ser ordenada pelo prim eiro nom e, utilizando- se a cham ada da função asort ( A) , r esultado
na m at riz com os elem entos or denados dessa for m a:

{ " FRED SMITH" , " GARY HALL", "TIM JONES"}

A or dem padrão para a função asort é ascendent e. Este com port am ent o pode ser m odificado at ravés da
infor m ação de um bloco de código que ordena a m atr iz de form a descendent e:

B : = { | X, Y| X > Y }

aSor t( A, B)

O bloco de código ( de acor do com a docum ent ação da função asor t) dev e ser escr ito par a aceit ar dois
parâm et r os que são os dois elem entos da m at riz para com par ação. Not e que o bloco de código não
conhece que elem ent os est á com par ando - a função asor t seleciona os elem entos ( t alv ez utilizando o
algor ít m o QuickSor t ) e passa- os para o bloco de código. O bloco de código com par a- os e r et or na
verdadeir o ( .T.) se se encont ram na ordem cor reta, ou falso ( .F.) se não. Se o v alor de r et or no for falso, a
função asor t irá ent ão tr ocar os valores de lugar e seguir com par ando o pr óx im o par de valores.

47

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________48

Então, no bloco de código ant er ior , a com par ação X > Y é v er dadeir a se os elem ent os est ão em or dem
descendent e, o que significa que o prim eir o v alor é m aior que o segundo.

Para ordenar a m esm a m at riz pelo últim o nom e, tam bém em or den descendente, pode- se ut ilizar o
seguint e bloco de código:

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

Note que est e bloco de código pr ocur a e com par a as par t es dos car act er es im ediat am ente seguint e a um
espaço em br anco. Depois de ut ilizar esse bloco de código para a função asort , a m at r iz cont er á:

{ " GARY HALL", "TIM JONES", "FRED SMI TH"}

Finalm ente, par a or denar um sub- elem ent o ( coluna) de um a m atr iz por ex em plo, pode- se ut ilizar o
seguint e bloco de código:

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

Escopo de Variáveis

O Contexto de Variáveis dentro de um Programa


As v ar iáveis declar adas em um progr am a ou função, são visíveis de acor do com o escopo onde são
definidas. Com o t am bém do escopo depende o t em po de exist ência das v ar iáv eis. A definição do escopo
de um a v ar iável é efet uada no m om ento de sua declar ação.

Local nNum er o : = 10

Esta linha de código declar a um a variável cham ada nNum ero indicando que pert ence seu escopo é local.

Os ident ifador es de escopo são:

• LOCAL

• STATI C

48

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________49

• PRIVATE

• PUBLI C

O Adv Pl não é rígido em relação à declaração de v ar iáv eis no com eço do pr ogr am a. A inclusão de um
ident ificador de escopo não é necessár io para a declar ação de um a v ar iáv el, cont ant o que um valor lhe
sej a at ribuído.

nNum ero2 : = 15

Quando um v alor é at ribuído à um a variável em um progr am a ou função, o Adv Pl cr iar á a variáv el caso
ela não tenha sido declar ada anteriorm ent e. A v ar iáv el ent ão é cr iada com o se t iv esse sido declarada
com o Privat e.

Dev ido a essa car act er íst ica, quando pr etende- se fazer um a atr ibuição a um a v ar iável declarada
previam ente m as escreve- se o nom e da variáv el de for m a incor r et a, o Adv Pl não gerará nenhum
err o de com pilação ou de ex ecução. Pois com preenderá o nom e da v ar iáv el escr it o de form a
incorr et a com o se fosse a cr iação de um a nov a variável. Ist o alt er ar á a lógica do pr ogram a, e é um
err o m uitas v ezes difícil de ident ificar .

Variáveis Locais
Variáv eis locais são pert encent es apenas ao escopo da função onde for am declar adas. Devem ser
ex plicit am ent e declaradas com o ident ificador LOCAL, com o no ex em plo:

Function Pai( )

Local nVar : = 10, aMat riz : = { 0,1,2,3}

< com andos>

Filha( )

< m ais com andos>

Return( .T.)

49

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________50

Nest e ex em plo, a variáv el nVar foi declarada com o local e atr ibuída com o valor 10. Quando a função Filha
é ex ecut ada, nVar ainda existe m as não pode ser acessada. Quando a ex ecução da função Pai ter m inar , a
variável nVar é dest ruída. Qualquer v ar iável com o m esm o nom e no pr ogr am a que cham ou a função Pai
não é afetada.

Variáv eis locais são cr iadas autom aticam ent e cada v ez que a função onde for em declar adas for at iv ada.
Elas cont inuam a ex istir e m antêm seu valor at é o fim da at ivação da função ( ou sej a, at é que a função
ret or ne o cont r ole par a o código que a ex ecut ou) . Se um a função é cham ada r ecur siv am ent e ( por
ex em plo, cham a a si m esm a) , cada cham ada em recursão cr ia um novo conj unto de v ar iáveis locais.

A visibilidade de var iáveis locais é idênt ica ao escopo de sua declar ação. Ou seja, a v ar iável é v isível em
qualquer lugar do código fonte em que foi declarada. Se um a função é cham ada recursivam ente, apenas
as var iáv eis locais cr iadas na m ais r ecente at ivação são visív eis.

Variáveis Estáticas
Variáv eis est át icas funcionam basicam ent e com o as v ar iáv eis locais, m as m antêm seu v alor at ravés da
ex ecução. Var iáveis estáticas dev em ser declar adas explicitam ent e no código com o ident ificador STATI C.

O escopo das v ar iáveis estát icas depende de onde são declar adas. Se for em declar adas dent r o do cor po
de um a função ou pr ocedim ento, seu escopo ser á lim it ado àquela r otina. Se forem declar adas for a do
corpo de qualquer r otina, seu escopo é t odo o arquivo de progr am a.

Nest e ex em plo, a variável nVar é declar ada com o est ática e inicializada com o valor 10:

Function Pai( )

St at ic nVar : = 10

< com andos>

Filha( )

< m ais com andos>

Return( .T.)

Quando a função Filha é executada, nVar ainda ex ist e m as não pode ser acessada. Difer ent e de variáveis
declar as com o LOCAL ou PRI VATE, nVar cont inua a ex ist ir e m ant em seu valor atual quando a ex ecução
da função Pai term ina. Ent r et anto, som ent e pode ser acessada por ex ecuções subseqüênt es da função Pai.

Variáveis Privadas
A declar ação é opcional par a variáveis priv adas. Mas podem ser declar adas ex plicit am ent e com o
ident ificador PRI VATE.

50

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________51

Adicionalm ent e, a atr ibuição de valor a um a variáv el não cr iada ant er ior m ent e autom at icam ente cr ia a
variável com o pr ivada. Um a vez cr iada, um a variável pr ivada cont inua a ex ist ir e m ant em seu valor até
que o pr ogram a ou função onde foi cr iada t erm ine ( ou sej a, até que a função onde foi cr iada r etorne para
o código que a ex ecut ou) . Nest e m om ento, é aut om at icam ente dest ruída.

É possível criar um a nov a variável privada com o m esm o nom e de um a v ar iáv el já existent e. Entr et ant o, a
nova ( duplicada) variável pode apenas ser criada em um nív el de at ivação infer ior ao nív el onde a v ar iáv el
foi declar ada pela prim eira v ez ( ou sej a, apenas em um a função cham ada pela função onde a v ar iáv el já
havia sido cr iada) . A nov a variáv el pr ivada ir á esconder qualquer out ra v ar iáv el pr iv ada ou pública ( vej a a
docum entação sobr e v ar iáv eis públicas) com o m esm o nom e enquanto existir .

Um a v ez cr iada, um a variáv el priv ada é v isível em todo o pr ogram a enquanto não for dest r uída
autom at icam ent e quando a r ot ina que a cr iou ter m inar ou um a out ra v ar iáv el pr iv ada com o m esm o nom e
for criada em um a subfunção cham ada ( nest e caso, a v ar iável existent e torna- se inacessív el até que a
nova v ar iáv el pr iv ada sej a dest r uída) .

Em t er m os m ais sim ples, um a v ar iáv el pr iv ada é visív el dent ro da função de cr iação e t odas as funções
cham adas por est a, a m enos que um a função cham ada cr ie sua pr ópria var iável pr ivada com o m esm o
nom e.

Por exem plo:

Function Pai( )

Pr ivate nVar : = 10

< com andos>

Filha( )

< m ais com andos>

Return( .T.)

Nest e ex em plo, a variáv el nVar é cr iada com o pr iv ada e inicializada com o valor 10. Quando a função Filha
é ex ecut ada, nVar ainda exist e e, difer ente de um a v ar iáv el local, pode ser acessada pela função Filha.
Quando a função Pai term inar , nVar ser á dest r uída e qualquer declaração de nVar ant erior se t or nará
acessív el nov am ent e.

Variáveis Públicas
Pode- se cr iar var iáveis públicas dinam icam ent e no código com o ident ificador PUBLI C. As variáveis
públicas cont inuam a exist ir e m ant êm seu v alor at é o fim da execução.

É possível cr iar um a v ar iável priv ada com o m esm o nom e de um a var iável pública ex istent e. Entr et ant o,
não é per m it ido cr iar um a var iável pública com o m esm o nom e de um a variável pr ivada existent e.

Um a v ez criada, um a v ar iável pública é v isível em t odo o pr ogram a onde foi declar ada at é que seja
escondida por um a variável pr ivada criada com o m esm o nom e. A nov a variável pr ivada cr iada esconde a

51

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________52

variável pública existent e, e est a se t ornar á inacessív el at é que a nov a variáv el pr ivada sej a destr uída. Por
ex em plo:

Function Pai( )

Public nVar : = 10

< com andos>

Filha( )

< m ais com andos>

Return( .T.)

Nest e ex em plo, nVar é criada com o pública e inicializada com o v alor 10. Quando a função Filha é
ex ecut ada, nVar ainda exist e e pode ser acessada. Difer ente de var iáveis locais ou priv adas, nVar ainda
ex ist e após o térm ino da a ex ecução da função Pai.

Diferent em ent e dos outr os ident ificador es de escopo, quando um a v ar iável é declarada com o
pública sem ser inicializada, o valor assum ido é falso ( .F.) e não nulo ( nil) .

Diferenciação entre variáveis e nomes de campos


Muit as v ezes um a v ar iável pode ter o m esm o nom e que um cam po de um ar quiv o ou t abela abert o no
m om ent o. Nest e caso, o AdvPl pr ivilegiar á o cam po. Assim um a r eferência a um nom e que identifique
tant o um a variável com o um cam po, r esult ar á no cont eúdo do cam po.

Para especificar qual deve ser o elem ent o refer enciado, dev e- se utilizar o oper ador de ident ificação de
apelido ( - > ) e um dos dois identificadores de referência, MEMVAR ou FI ELD.

cRes : = MEMVAR- > NOME

Esta linha de com ando identifica que o v alor at ribuído à var iável cRes dev e ser o v alor da variável de
m em ór ia cham ada NOME.

cRes : = FIELD- > NOME

52

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________53

Nest e caso, o v alor at ribuído à v ar iáv el cRes ser á o valor do cam po NOME ex istent e no ar quiv o ou tabela
aber to na área at ual.

O identificador FI ELD pode ser subst it uído pelo apelido de um arquivo ou tabela aber to, para evit ar a
necessidade de selecionar a área antes de acessar o conteúdo de term inado cam po.

cRes : = CLI ENTES- > NOME

Para m aior es det alhes sobre abert ur a de ar quiv os com atr ibuição de apelidos, consult e a docum ent ação
sobr e acesso a banco de dados ou a docum ent ação da função dbUseArea.

Operadores da Linguagem

Operadores Comuns
Na docum ent ação sobr e variáv eis há um a br ev e dem onst ração de com o at r ibuir v alores a um a variável da
for m a m ais sim ples. O AdvPl am plia significat iv am ent e a ut ilização de v ar iáv eis at ravés do uso de
ex pr essões e funções. Um a ex pr essão é um conj unt o de oper ador es e operandos cuj o r esult ado pode ser
at r ibuído a um a v ar iáv el ou ent ão analisado par a a t om ada de decisões. Por ex em plo:

Local nSalario : = 1000, nDescont o : = 0.10

Local nAum ento, nSalLiquido

nAum ent o : = nSalar io * 1.20

nSalLiquido : = nAum ent o * ( 1- nDescont o)

Nest e ex em plo são ut ilizadas algum as ex pr essões par a calcular o salár io líquido após um aum ento. Os
oper andos de um a ex pr essão podem ser um a variável, um a const ante, um cam po de arquivo ou um a
função.

Operadores Matemáticos

Os operadores utilizados em AdvPl par a cálculos m atem át icos são:

+ Adição

- Subt r ação

* Multiplicação

53

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________54

/ Div isão

* * ou ^ Exponenciação

% Módulo ( Resto da Div isão)

Operadores de String

Os operadores utilizados em AdvPl par a t ratam ento de car act er es são:

+ Concat enação de str ings ( união)

- Concat enação de str ings com elim inação dos br ancos finais das st rings int erm ediárias

$ Com paração de Substr ings ( contido em )

Operadores Relacionais

Os operadores utilizados em AdvPl par a oper ações e avaliações r elacionais são:

< Com par ação Menor

> Com par ação Maior

= Com par ação I gual

== Com par ação Exatam ent e Igual ( para caract er es)

<= Com par ação Menor ou I gual

>= Com par ação Maior ou I gual

<> Com par ação Diferent e

ou

ou

!=

Operadores Lógicos

Os operadores utilizados em AdvPl par a oper ações e avaliações lógicas são:

.And. E lógico

.Or. OU lógico

54

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________55

.Not . ou ! NÃO lógico

Operadores de Atribuição
Os operadores utilizados em AdvPl par a at r ibuição de valor es a v ar iáv eis de m em ór ia são:

= At ribuição Sim ples

:= At ribuição em Linha

+= Adição e At ribuição em Linha

-= Subt ração e At r ibuição em Linha

*= Mult iplicação e At ribuição em Linha

/= Divisão e Atr ibuição em Linha

* * = ou ^ = Ex ponenciação e At r ibuição em Linha

%= Módulo ( rest o da divisão) e Atr ibuição em Linha

Atribuição Simples

O sinal de igualdade é ut ilizado para atr ibuir valor a um a v ar iáv el de m em ór ia.

nVar iavel = 10

Atribuição em Linha

O oper ador de at r ibuição em linha é caract erizado por dois pontos e o sinal de igualdade. Tem a m esm a
função do sinal de igualdade sozinho, por ém aplia a atr ibuição às var iáveis. Com ele pode- se at ribuir m ais
de um a v ar iável ao m esm o t em po.

nVar 1 : = nVar2 : = nVar 3 : = 0

Quando div er sas variáveis são inicializadas em um a m esm a linha, a atr ibuição com eça da dir eit a para a
esquer da, ou sej a, nVar 3 recebe o v alr o zero inicialm ente, nVar 2 r ecebe o cont eúdo de nVar3 e nVar1
recebe o cont eúdo de nVar 2 por final.

Com o operador de atr ibuição em linha, pode- se substit uir as inicializações individuais de cada v ar iáv el
por um a inicialização apenas:

55

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________56

Local nVar1 : = 0, nVar 2 : = 0, nVar3 : = 0

por

Local nVar1 : = nVar 2 : = nVar3 : = 0

O oper ador de at ribuição em linha tam bém pode ser ut ilizado para subst it uir valor es de cam pos em um
banco de dados.

Atribuição Composta

Os operadores de at ribuição com post a são um a facilidade da linguagem AdvPl para ex pr essões de cálculo
e at r ibuição. Com eles pode- se econom izar digitação:

Oper ador Ex em plo Equivalent 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

Operadores de I ncremento/ Decremento


A linguagem Adv Pl possui operadores par a realizar increm ento ou decr em ent o de variáv eis. Entende- se
por increm ent o aum entar o v alor de um a variável num ér ica em 1 e ent ende- se por decr em ent o dim inuir o
valor da variável em 1. Os oper ador es são:

++ I ncrem ent o Pós ou Pr é- fix ado

-- Decrem ento Pós ou Pré- fixado

Os oper ador es de decr em ent o/ incr em ent o podem ser colocados t ant o ant es ( pré- fixado) com o depois
( pós- fixado) do nom e da variável. Dent ro de um a expressão, a ordem do operador é m uit o im port ant e,
podendo alter ar o r esult ado da ex pr essão. Os oper ador es incr em entais são ex ecut ados da esquer da para a
dir eita dent ro de um a ex pr essão.

Local nA : = 10

56

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________57

Local nB : = nA+ + + nA

O valor da variáv el nB r esult a em 21, pois a pr im eir a refer ência a nA ( ant es do + + ) cont inha o v alor 10
que foi considerado e im ediat am ent e aum ent ado em 1. Na segunda referência a nA, este j á possuía o
valor 11. O que foi efet uado foi a som a de 10 m ais 11, igual a 21. O r esult ado final após a ex ecução
dest as duas linhas é a variáv el nB contendo 21 e a variável nA cont endo 11.

No ent ando:

Local nA : = 10

Local nB : = + + nA + nA

Result a em 22, pois o operador increm ental aum ent ou o v alor da prim eir a nA ant es que seu valor fosse
consider ado.

Operadores Especiais
Além dos operadores com uns, o AdvPl possui alguns out r os operadores ou identificador es. Est as são suas
finalidades:

() Agr upam ent o ou Função

[] Elem ent o de Mat r iz

{} Definição de Mat r iz, Const ant e ou Bloco de Código

-> Identificador de Apelido

& Macrosubst it uição

@ Passagem de par âm et ro por refer ência

Os parênt eses são ut ilizados par a agr upar elem ent os em um a ex pr essão m udando a or dem de
pr ecedência da avaliação da expressão ( segundo as r egr as m at em áticas por exem plo) . Tam bém ser vem
para env olver os ar gum entos de um a função. Vej a a docum ent ação sobr e precedência de operadores
para m aior es detalhes.

Os colchet es são ut ilizados par a especificar um elem ento específico de um a m at r iz. Por exem plo, A[ 3,2] ,
refer e- se ao elem ento da m at riz A na linha 3, coluna 2.

As chaves são ut ilizadas para a especificação de m atr izes lit er ais ou blocos de código. Por ex em plo,
A: = { 10,20,30} cr ia um a m at riz cham ada A com t rês elem entos.

O sím bolo - > ident ifica um cam po de um arquivo diferenciando- o de um a v ar iável. Por exem plo, FUNC-
> nom e r efer e- se ao cam po nom e do ar quiv o FUNC. Mesm o que exist a um a variável cham ada nom e, é o
cam po nom e que será acessado.

O sím bolo & ident ifica um a av aliação de ex pr essão at r avés de m acr o e é v ist o em det alhes na
docum entação sobr e macrossubstituição .

57

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________58

O sím bolo @ é ut ilizado para indicar que dur ant e a passagem de um a v ar iáv el par a um a função ou
pr ocedim ento ela sej a tom ada com o um a r efer ência e não com o valor .

Ordem de Precedência dos Operadores


Dependendo do t ipo de oper ador , ex ist e um a or dem de pr ecedência par a a av aliação dos oper andos. Em
pr incípio, t odas as operações com os oper ador es são realizadas da esquerda para a dir eita se eles t iverem
o m esm o nível de pr ior idade.

A or dem de precedência, ou nív el de prioridade de execução, dos operadores em Adv Pl é:

1.Oper ador es de I ncrem ent o/ Decr em ent o pr é- fix ado

2.Oper ador es de St r ing

3.Oper ador es Mat em át icos

4.Oper ador es Relacionais

5.Oper ador es Lógicos

6.Oper ador es de At r ibuição

7.Oper ador es de I ncrem ent o/ Decr em ent o pós- fix ado

Em ex pr essões com plex as com diferent es t ipos de operadores, a av aliação seguirá essa sequência. Caso
ex ist a m ais de um oper ador do m esm o t ipo ( ou sej a, de m esm o nív el) , a av aliação se dá da esquer da
para direita. Par a os oper ador es m atem áticos ent ret ant o há um a pr ecedência a seguir:

1.Ex ponenciação

2.Mult iplicação e Div isão

3.Adição e Subt ração

Consider e o exem plo:

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

O resultado desta expressão é 30, pois prim eir am ente é calculada a ex ponenciação 2^ 3( = 8) , ent ão são
calculadas as m ult iplicações e div isões 10/ 2( = 5) e 5* 3( = 15) , e finalm ent e as adições r esult ando em
2+ 5+ 15+ 8( = 30) .

Alteração da Precedência

A ut ilização de par ênteses dent ro de um a expressão alt era a ordem de precedência dos oper ador es.
Oper andos entr e parênt eses são analisados antes dos que se encont r am for a dos parênt eses. Se ex ist irem
m ais de um conj unto de parênt eses não- aninhados, o grupo m ais a esquer da ser á av aliado pr im eiro e
assim sucessivam ente.

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

58

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________59

No ex em plo acim a prim eir o ser á calculada a exponenciação 2^ 3( = 8) . Em seguida 2+ 10( = 12) será
calculado, 2+ 5( = 7) calculado, e finalm ent e a div isão e a m ult iplicação ser ão efet uadas, o que result a em
12/ 7* 3+ 8( = 13.14) .

Se existir em vários parênt eses aninhados, ou sej a, colocados um dent r o do out r o, a avaliação ocor r er á do
parênt eses m ais int ero em dir eção ao m ais ext er no.

Macro Substituição
O oper ador de m acro subst ituição, sim bolizado pelo " e" com ercial ( &) , é utilizado par a a avaliação de
ex pr essões em tem po de ex ecução. Funciona com o se um a ex pr essão ar m azenada fosse com pilada em
tem po de execução, ant es de ser de fato executada. Considere o ex em plo:

01 X : = 10

02 Y : = " X + 1"

03 B : = &Y / / O cont eúdo de B será 11

A variáv el X é at ribuída com o valor 10, enquant o a var iáv el Y é at ribuída com a st r ing de car act er es
cont endo " X + 1".

A ter ceir a linha ut iliza o oper ador de m acr o. Est a linha faz com que o núm er o 11 seja at ribuído à v ar iáv el
B. Pode- se per ceber que esse é o valor r esult ante da ex pr essão em for m at o de car act er e cont ida na
variável Y.

Ut ilizando- se um a t écnica m atem át ica elem ent ar , a subst ituição, t em os que na segunda linha, Y é definido
com o " X + 1" , ent ão pode- se substit uir Y na t er ceir a linha:

03 B : = &" X + 1"

O oper ador de m acr o cancela as aspas:

03 B : = X + 1

Pode- se perceber que o oper ador de m acr o rem ov e as aspas, o que deixa um pedaço de código par a ser
ex ecut ado. Dev e- se t er em m ent e que tudo isso acont ece em t em po de eecução, o que t orna tudo m uito
dinâm ico. Um a utilização inter essant e é cr iar um t ipo de calculador a, ou avaliador de fór m ulas, que
determ ina o r esult ado de algo que o usuár io digit a.

O operador de m acro t em um a lim itação: v ar iáv eis r efer enciadas dent ro da str ing de caract eres ( X
nos exem plos ant er ior es) não podem ser locais.

59

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________60

Estruturas de Controle

Controlando o Fluxo
O AdvPl suport a v ár ias est ruturas de cont role que per m it em m udar a seqüência de flux o de execução de
um pr ogr am a. Est as est r ut ur as per m it em a ex ecução de código baseado em condições lógica e a r epet ição
da execução de pedaços de código qualquer núm er o de vezes.

Em AdvPl, todas as est r ut ur as de cont r ole podem ser "aninhadas" dent r o de t odas as dem ais est r ut ur as
cont anto que estejam aninhadas pr opriam ente. Est rutur as de cont role têm um ident ificador de início e um
de fim , e qualquer est r ut ur a aninhada deve se encont r ar ent r e estes ident ificador es.

Tam bém existem estr ut ur as de contr ole par a det er m inar que elem ent os, com andos, etc em um progr am a
serão com pilados. Est as são as diretiv as do pr é- pr ocessador # ifdef...# endif e # ifndef...# endif. Consulte a
docum entação sobr e o pr é- pr ocessador para m aior es detalhes.

As est rut ur as de contr ole em Adv Pl est ão div ididas em Estruturas de Repetição e Estruturas de
Decisão.

Estruturas de Repetição

Repetição de Comandos
Estr ut uras de r epet ição são deseginadas par a execut ar um a seção de código m ais de um a vez. Por
ex em plo, im agiando- se a exist ência de um a função par a im pr im ir um r elat ório, pode- se desej ar im prim i- lo
quat ro v ezes. Claro, pode- se sim plesm ente cham ar a função de im pr essão quat ro v ezes em seqüência,
m as isto se tornar ia pouco pr ofissional e não resolv er ia o pr oblem a se o núm ero de relat ór ios fosse
variável.

Em AdvPl ex ist em dois com andos para a r epet ição de seções de código. O com ando FOR...NEXT e o
com ando WHILE...ENDDO.

O Comando FOR...NEXT
A estr ut ura de cont role FOR...NEXT, ou sim plesm ente o loop FOR, repete um a seção de código em um
núm er o det er m inado de vezes.

Sin t ax e

FOR Variav el : = nValorI nicial TO nValorFinal [ STEP nI ncr em ent o]

Com andos...

60

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________61

[ EXIT]

[ LOOP]

NEXT

Pa râ m et ro s

Variav el Especifica um a v ar iável ou um elem ent o de um a m atr iz para atuar com o um


cont ador . A v ar iável ou o elem ent o da m at riz não precisa ter sido declarado ant es
da execução do com ando FOR...NEXT. Se a v ar iável não exist ir, será criada com o
um a variável privada .

nValor I nicial nValor I nicial é o valor inicial para o contador; nValor Final é o valor final para o
TO nValorFinal cont ador . Pode- se ut ilizar valor es num ér icos lit er ais, var iáv eis ou expr essões,
cont anto que o resultado sej a do t ipo de dado num érico.

STEP nI ncrem ent o é a quandidade que ser á increm entada ou decr em entada no cont ador
nI ncrem ent o após cada ex ecução da seção de com andos. Se o v alor de nIncr em ento for negativ o,
o cont ador ser á decr em ent ado. Se a cláusula STEP for om itida, o contador será
increm entado em 1. Pode- se ut ilizar valor es num ér icos lit er ais, variáv eis ou
ex pr essões, contant o que o r esult ado sej a do t ipo de dado num ér ico.

Com andos Especifica um ou m ais inst r uções de com ando AdvPl que ser ão ex ecut adas.

EXIT Tr ansfer e o contr ole de dent ro do com ando FOR...NEXT par a o com ando
im ediatam ent e seguint e ao NEXT, ou seja, finaliza a repetição da seção de
com andos im ediat am ent e. Pode- se colocar o com ando EXI T em qualquer lugar ent re
o FOR e o NEXT.

LOOP Retorna o cont r ole dir et am ent e para a cláusula FOR sem ex ecut ar o r est ante dos
com andos entr e o LOOP e o NEXT. O cont ador é incr em entadou ou decrem entado
norm alm ente, com o se o NEXT t ivesse sido alcançado. Pode- se colocar o com ando
LOOP em qualquer lugar entr e o FOR e o NEXT.

Co m en t ár ios

Um a v ar iáv el ou um elem ent o de um a m atr iz é utilizado com o um cont ador par a especificar quant as v ezes
os com andos Adv Pl dentr o da estr ut ur a FOR...NEXT são ex ecut ados. Os com andos Adv Pl depois do FOR
são ex ecut ados at é que o NEXT sej a alcançado. O cont ador ( Variav el) é então incr em entado ou
decr em ant ado com o valor em nIncr em ento ( se a cláusula STEP for om it ida, o contador é increm entado
em 1) . Ent ão, o cont ador é com parado com o valor em nValor Final. Se for m enor ou igual ao valor em
nValor Final, os com andos seguint es ao FOR são executados novam ente. Se o v alor for m aior que o
cont ido em nValor Final, a est rutura FOR...NEXT é t er m inada e o pr ogr am a continua a ex ecução no
pr im eir o com ando após o NEXT.

Os v alor es de nValor I nicial, nValorFinal e nI ncrem ent o são apenas consider ados inicialm ente. Entr et ant o,
m udar o valor da v ar iável utilizada com o cont ador dent ro da est r ut ur a afetará o núm ero de vezes que a
r epet ição será executada. Se o v alor de nIncr em ent o é negat iv o e o valor de nValor I nicial é m aior que o de
nValorFinal, o cont ador ser á decrem ent ado a cada r epet ição.

Ex em plo

Local nCnt

Local nSom aPar : = 0

61

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________62

For nCnt : = 0 To 100 St ep 2

nSom aPar + = nCnt

Next

Aler t ( " A som a dos 100 prim eir os núm er os par es é: " + ;

cValToChar ( nSom aPar ) )

Return

Este exem plo im prim e a som a dos 100 pr im er ios núm er os par es. A som a é obit ida atr avés da r epet ição do
cálculo utilizando a pr ópria var iável de cont ador . Com o a cláusula STEP est á sendo ut ilizada, a v ar iáv el
nCnt ser á sem pr e increm ent ada em 2. E com o o contador com eça com 0, seu v alor sem pr e será um
núm er o par .

O Comando W HI LE...ENDDO
A estr ut ur a de cont role WHI LE...ENDDO, ou sim plesm ente o loop WHI LE, r epet e um a seção de código
enquant o um a det er m inada expressão r esult ar em ver dadeir o ( .T.) .

Sin t ax e

WHI LE lExpressao

Com andos...

[ EXIT]

[ LOOP]

ENDDO

Pa râ m et ro s

lEx pr essao Especifica um a ex pr essão lógica cuj o valor det er m ina quando os com andos ent r e o WHI LE
e o ENDDO são executados. Enquant o o r esult ado de lExpr essao for avaliado com o
ver dadeir o ( .T.) , o conj unt o de com andos são executados.

Com andos Especifica um ou m ais inst r uções de com ando AdvPl que serão ex ecut adas enquanto
lEx pr essao for avaliado com o verdadeir o ( .T.) .

EXIT Tr ansfere o contr ole de dentr o do com ando WHI LE...ENDDO par a o com ando
im ediat am ent e seguint e ao ENDDO, ou sej a, finaliza a r epet ição da seção de com andos
im ediat am ent e. Pode- se colocar o com ando EXI T em qualquer lugar ent r e o WHI LE e o
ENDO.

62

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________63

LOOP Retor na o cont role diretam ent e par a a cláusula WHILE sem executar o rest ante dos
com andos entr e o LOOP e o ENDDO. A expressão em lExpressao é r eavaliada para a
decisão se os com andos cont inuar ão sendo ex ecut ados.

Co m en t ár ios

Os com andos ent r e o WHI LE e o ENDDO são execut ados enquant o o r esult ado da avaliação da expressão
em lEx pr essao per m anecer verdadeiro ( .T.) . Cada palavr a chav e WHI LE dev e ter um a palav ra chave
ENDDO cor respondent e.

Ex em plo

Local nNum ber : = nAux : = 350

nAux : = Int ( nAux / 2)

While nAux > 0

nSom aPar + = nCnt

Next

Aler t ( " A som a dos 100 prim eir os núm er os par es é: " + ;

cValToChar ( nSom aPar ) )

Return

Estruturas de Decisão

Desviando a Execução
Estr ut uras de desvio são deseginadas par a ex ecut ar um a seção de código se det erm inada condição lógica
resultar em ver dadeir o ( .T.) . Em AdvPl ex ist em dois com andos para execução de seções de código de
acor do com avaliações lógicas. O com ando IF...ENDI F e o com ando DO CASE...ENDCASE.

O Comando I F...ENDI F
Ex ecut a um conjunt o de com andos baseado no valor de um a expressão lógica.

63

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________64

Sin t ax e

IF lExpressao
Comandos
[ELSE
Comandos...]
ENDIF

Pa râ m et ro s

lExpr essao Especifica um a ex pr essão lógica que é avaliada. Se lExpressao r esult ar em ver dadeiro
( .T.) , qualquer com ando seguinte ao I F e antecedent e ao ELSE ou ENDI F ( o que ocor r er
pr im eir o) ser á executado.

Se lEx pr essao r esult ar em falso ( .F.) e a cláusula ELSE for definida, qualquer com ando
após essa cláusula e ant erior ao ENDI F será executada. Se a cláusula ELSE não for
definida, todos os com andos entr e o I F e o ENDI F são ignor ados. Neste caso, a ex ecução
do pr ogr am a cont inua com o pr im eir o com ando seguinte ao ENDI F.

Com andos Conj unto de com andos AdvPl que serão executados dependendo da av aliação da
ex pr essão lógica em lExpressao.

Co m en t ár ios

Pode- se aninhar um bloco de com ando I F...ENDIF dentr o de outr o bloco de com ando I F...ENDI F. Por ém ,
para a av aliação de m ais de um a ex pr essão lógica, deve- se ut ilizar o com ando DO CASE...ENDCASE.

Ex em plo

Local dVencto := CTOD("31/12/01")


If Date() > dVencto
Alert("Vencimento ultrapassado!")
Endif
Return

O Comando DO CASE...ENDCASE
Ex ecut a o prim eir o conjunt o de com andos cuj a ex pr essão condicional resulta em verdadeiro ( .T.) .

Sin t ax e

DO CASE
CASE lExpressao1
Commandos
[CASE lExpressao2
Commandos
...
CASE lExpressaoN
Commandos]
[OTHERWISE
Commandos]
ENDCASE

Pa râ m et ro s

64

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________65

CASE Quando a pr im eira expressão CASE resultant e em v er dadeir o ( .T.) for encont r ada, o
lExpr essao1 conjunt o de com andos seguinte é executado. A ex ecução do conj unt o de com andos
Com andos... continua at é que a próxim a cláusula CASE, OTHERWI SE ou ENDCASE seja
encontr ada. Ao t er m inar de execut ar esse conj unt o de com andos, a ex ecução
continua com o prim eir o com ando seguint e ao ENDCASE.

Se um a expressão CASE result ar em falso ( .F.) , o conj unt o de com andos seguinte a
est a até a pr óx im a cláusula é ignor ado.

Apenas um conj unto de com andos é ex ecut ado. Est es são os pr im eir os com andos
cuj a ex pr essão CASE é avaliada com o v er dadeir o ( .T.) . Após a ex ecução, qualquer
out ra expressão CASE post er ior é ignorada ( m esm o que sua avaliação r esultasse em
v er dadeir o) .

OTHERWI SE Se t odas as expressões CASE for em av aliadas com o falso ( .F.) , a cláusula
Com m andos OTHERWI SE det er m ina se um conjunt o adicional de com andos deve ser ex ecut ado.
Se essa cláusula for incluida, os com andos seguintes ser ão ex ecut ados e ent ão o
progr am a cont inuará com o prim eir o com ando seguinte ao ENDCASE. Se a cláusula
OTHERWI SE for om it ida, a execução cont inuará nor m alm ent e após a cláusula
ENDCASE.

Co m en t ár ios

O Com ando DO CASE...ENDCASE é utilizado no lugar do com ando I F...ENDI F quando um núm ero m aior
do que um a ex pr essão deve ser av aliada, subst ituindo a necessidade de m ais de um com ando I F...ENDIF
aninhados.

Ex em plo

Local nMes := Month(Date())


Local cPeriodo := ""

DO CASE
CASE nMes <= 3
cPeriodo := "Primeiro Trimestre"
CASE nMes >= 4 .And. nMes <= 6
cPeriodo := "Segundo Trimestre"
CASE nMes >= 7 .And. nMes <= 9
cPeriodo := "Terceiro Trimestre"
OTHERWISE
cPeriodo := "Quarto Trimestre"
ENDCASE

Return

I nformações Adicionais

Lista de Palavras Reservadas

AADD DTOS I NKEY REPLI CATE VAL

65

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________66

ABS ELSE I NT RLOCK VALTYPE

ASC ELSEI F LASTREC ROUND WHI LE

AT EMPTY LEN ROW WORD

BOF ENDCASE LOCK RTRIM 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 IF RECCOUNT TYPE

DTOC IIF RECNO UPPER

Notas:

• Palav ras r eser vadas não podem ser ut ilizadas par a v ar iáveis, pr ocedim ent os, ou funções.

• Funções r eser vadas são pert encent es ao com pilador e por tant o não podem ser redefinidas por um a
aplicação.

• Abreviações de quat ro let ras de palavr as r eserv adas e funções tam bém são r eser av das.

• Todos os identifador es que com eçar em com um ou m ais caract er s de sublinhado ( _) são ut ilizados
com o ident ificador es internos e port anto são tam bém reser vados.

Técnicas de Programação Eficiente em AdvPl


Para o desenvolvim ent o de sist em as e a progr am ação de rotinas, sem pre é esper ado que qualquer código
escr ito seja:

• de corr et o funcionam ent o

66

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________67

• eficient e

• legív el

• r eut ilizáv el

• ex tensível

• port ável

Após anos de exper iência na utilização de linguagens padr ão x Base e do desenv olvim ent o da linguagem
AdvPl, algum as técnicas para um a pr ogr am ação ot im izada e eficient e for am r econhecidas. A ut ilização das
técnicas a seguir , v isa buscar o m áx im o apr oveit am ent o dos r ecur sos da linguagem com o objet iv o de
cr iar pr ogr am as com est as caract er íst icas.

Criação de Funções Segundo a Necessidade

Observ e o código de exem plo:

User Funct ion Get Answ er ( lDefault )

Local lOk

lOk : = Get Ok ( lDefault )

If lOk

Ret ur n .T.

Else

Retur n .F.

Endif

Return nil

Ut ilizando- se apenas o crit ér io "a função funciona cor retam ent e?", a função Get Answer é per feita. Recebe
um parâm etr o lógico com a r espost a padr ão e retorna um valor lógico dependent e da opção escolhida
pelo usuár io em um a função de diálogo " sim / não" designada par a isso. Pode entr et ant o ser m elhor ada,
part icular m ente se eficiência for consider ada com o um crit ér io par a um código m elhor . Eficiência
tipicam ent e inv olv e a ut ilização de poucos r ecur sos de m áquina, poucos cham adas de funções ou tornar
m ais r ápido um pr ocesso.

Segundo esse r aciocínio, poder ia se pr oduzir o seguint e código:

User Funct ion Get Answ er ( lDefault )

Return If( Get Ok( lDefault ) , .T., .F.)

Ou m elhor:

User Funct ion Get Answ er ( lDefault )

67

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________68

Return Get Ok ( lDefault )

Com a otim ização do código da função Get Answer, pode facilm ent e verificar que a m esm a não realiza
nada adicional à cham ada de Get Ok, podendo ser subst it uída por um a cham ada dir eta desta, continuando
a funcionar corr et am ent e.

Codificação Auto-Documentável

Nenhum com entário subst itui um código claram ente escr it o, e este não é um um acidente. Considere o
ex em plo:

cVar : = " " / / 11 espaços

O tam anho da variáv el cVar não é evident e por si só e não é facilm ent e ver ificado. Estes m esm os 10
espaços est ar iam m ais óbv ios e ainda assim garant idos se a instr ução fosse escr ita com o:

cVar : = Space( 10)

O m esm o pr incípio pode ser aplicado par a qualquer str ing longa de car acter es r epet idos. A função
Replicate pode ser utilizada com o a seguir :

cVar : = Replicat e( " * " , 80 )

Este tipo de progr am ação deixa o código fácil de digit ar , fácil de ler e m ais flex ível.

Utilização de Soluções Simples

Sim plicidade na cr iação de inst ruções t or na a pr ogr am ação e at é m esm o a execução m ais r ápida.
Consider e a linha de código:

If nVar > 0 .Or. nVar < 0

Se o v alor da v ar iáv el nVar for igual a zer o ( 0) no m om ent o da ex ecução desta linha de código, am bas as
com parações separ adas pelo operador lógico .Or . ser ão efet uadas: Após ser avaliada, a pr im er ia
com paração irá falhar . A segunda com par ação ser á então av aliada e falhará t am bém . Com o r esult ado, o
código existent e dent r o da est rut ur a de flux o If não ser á executado. Tal código som ent e será executado
quando o v alor dest a variáv el for m aior OU m enor do que zero. Ou sej a, sem pr e que for DIFERENTE de
zero, o que t orna a linha a seguir m ais eficiente:

If nVar ! = 0

68

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________69

Este tipo de alt er ação torna o código m ais legível e o processam ento m ais r ápido, evit ando a avaliação de
instr uções desnecessar iam ente.

Ex ist em out ras sit uações onde a sim plificação pode ser utilizada. A ex pr essão de av aliação a seguir :

If cVar = = "A" .Or . cVar = = " B" .Or ;

cVar = = " C" .Or . cVar = = " D"

Pode ser substit uído pelo operador de cont enção:

If cVar $ "ABCD"

Opção por Flexibilidade

A m elhor solução é aquela que env olve o problem a im ediat o e pr ev ine pr oblem as no futuro. Considere o
ex em plo:

@nRow,nCol PSAY cVar Pictur e "! ! !! ! !! ! !! !! ! !! ! !! ! !"

Ex ceto cont ando- se os car act er es, não ex ist e m aneir a de saber se o núm er o de car act er es de ex clam ação
é o esperado. Enquanto ist o é um pr oblem a, ex ist em algo m ais grave. A expressão de picture é estática.
Se no fut ur o for necessário ajust ar o tam anho da var iável cVar , ser á necessário localizar t odos os lugar es
no código onde est a m áscara de pict ur e est á sendo utilizada par a aj uste m anual. Exist e um a opção
dsolução de de aut o- aj uste disponív el que é fácil de digit ar e t em a garant ia de ex ecut ar a t arefa
igualm ente ( t or nar t odos os car acter es m aiúsculos) :

@nRow,nCol PSAY cVar Pictur e "@! "

Opção da Praticidade ao Drama

Se a solução parece com plex a, pr ov avelm ente é porque o cam inho escolhido está levando a isso. Dev e- se
sem pr e se per gunt ar por que alguém desenvolv er ia um a linguagem que r equisit e tant os com andos
com plicados para fazer algo sim ples. Na gr ande m aior ia dos casos, existe um a solução m ais sim ples. O
ex em plo abaixo deix a isso bem clar o:

@ 10,25 Say Substr ( cCep,1,5) + "- " + Subst r( cCep,6,3) Pict ur e " !! ! !! ! !! ! "

Que pode ficar m ais sim ples assim :

@ 10,25 Say cCep Pict ur e " @R 99999- 999"

Utilização de Operadores de I ncremento/ Decremento

69

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________70

Ut ilizados devidam ent e, os oper ador es de increm ent o e decr em ent o t or nam o código m ais fácil de ler e
possivelm ent e um pouco m ais r ápidos. Ao cont r ár io de escrever adições sim ples com o:

nVar : = nVar + 1

nVar : = nVar - 1

Pode- se escr evê- las assim :

+ + nVar

- - nVar

Deve- se apenas tom ar cuidado com a precedência destes oper ador es, pois o " + + " ou o " - - " podem
apar ecer ant es ou depois de um a variável, e em alguns casos quando a var iável for utilizada dentr o de
um a expressão, a prefix ação ou sufix ação destes oper ador es afet ar á o r esult ado. Par a m aiores detalhes,
consult e a docum ent ação de oper ador es da linguagem Adv Pl.

Evitar Passos Desnecessários

Ex ist e um a diferença ent re um bom hábit o e per da de t em po. Algum as v ezes est es conceit os podem est ar
m uit o pr óx im os, m as um m odo de difer enciá- los é balancear os benefícios de r ealizar algum a ação cont ra
o pr oblem a que result ar ia se não fosse executada. Observ e o exem plo:

Local nCnt : = 0

For nCnt : = 1 To 10

< código>

Next nCnt

Inicializar a v ar iáv el no m om ento da declaração não é um problem a. Se o 0 fosse necessário no ex em plo,


ter ia sido útil a inicialização na declaração. Mas nest e caso a est r ut ur a de r epet ição For... Next at ribui o
seu valor im ediat am ente com 1, por tant o não houve ganho em at ribuir a v ar iável com 0 no com eço.

Nest e ex em plo não há nenhum pont o negativ o e nada err ado ocor r er á se a var iáv el não for inicializada,
port ant o é aconselháv el evit ar este t ipo de inicialização, pois não t or na o código m ais seguro e t am bém
não ex pr essa a int enção do código m ais claram ente.

Porém note est e exem plo, onde a var iáv el não é inicializada:

Local nCnt

While ( nCnt+ + < 10 )

< código>

EndDo

70

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________71

Em AdvPl, variáveis não inicializadas sem pre t em seu v alor cont endo nulo ( nil) a pr incípio, o que far á com
que um a ex ceção em t em po de execução acont eça quando a inst rução de repetição w hile for executada.

Difer entem ente do pr im eir o ex em plo, onde a inicialização da v ar iáv el não fazia difer ença algum a, neste
segundo exem plo a inicialização é absolut am ente necessária. Dev e- se pr ocurar inicializar variáveis
num ér icas com zero ( 0) e v ar iáveis car acter com st r ing nula ( " " ) apenas quando realm ent e necessário.

Utilização de Alternativas

Quando se está t rabalhando em um a sim ples rotina, dev e- se t om ar algum t em po para explor ar duas ou
tr ês diferent es abordagens. Quando se est á t rabalhando em algo m ais com plexo, dev e- se planej ar
pr ot ot ipar algum as a m ais. Consider e o seguint e código:

If cHair = " A"

Replace hair Wit h "Loir a"

Else

If cHair = " B"

Replace hair Wit h "Mor ena"

Else

If cHair = " C"

Replace hair Wit h "Ruiva"

Else

I f cHair = " D"

Replace hair Wit h "Grisalho"

Else

Replace hair Wit h "Pret o"

Endif

Endif

Endif

Endif

Um código de um a única let r a, ( A até E) , foi inform ado par a indicar a cor de cabelo. Est e código foi ent ão
conv er tido e ar m azenado com o um a st ring. Pode- se not ar que a cor "Preto" ser á at ribuída se nenhum a
outr a opção for verdadeir a.

Um a alternat iva que r eduz o nível de identação tor na o código m ais fácil de ler enquant o r eduz o núm ero
de com andos replace:

Do Case

71

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________72

Case cHair = = "A"

cColor : = " Loira"

Case cHair = = "B"

cColor : = " Mor ena"

Case cHair = = "C"

cColor : = "Ruiva"

Case cHair = = "D"

cColor : = "Grisalho"

Ot herWise

cColor : = "Pret o"

EndCase

Replace hair Wit h cColor

Utilização de Arquivos de Cabeçalho Quando Necessário

Se um arquiv o de código cr iado se r efer encia a com andos par a int er pr et ação e tr at am ent o de ar quiv os
XML, est e deve se incluir o arquivo de cabeçalho própr io par a t ais com andos ( XMLXFUN.CH no exem plo) .
Porém não dev e- se incluir arquivos de cabeçalho apenas por segurança. Se não se est á r efer enciando
nenhum a das const ant es ou ut ilizando nenhum dos com andos cont idos em um dest es ar quiv os, a inclusão
apenas t or nar á a com pilação m ais dem orada.

Constantes em Maiúsculo

Ist o é um a convenção que faz sentido. Em Adv Pl, com o em C por exem plo, a r egr a é utilizar todos os
caract eres de um a constant e em m aiúsculo, a fim de que possam ser claram ent e r econhecidos com o
constant es no código, e que não sej a necessários lem br ar onde foram declar ados.

Utilização de I dentação

Este é um hábito que t odo pr ogram ador dev e desenv olver. Não consom e m uit o esfor ço par a m ant er o
código alinhado dur ante o tr abalho, por ém quando necessár io pode- se ut ilizar AP6 I DE par a a r eident ação
de código.

Consider e o exem plo:

While ! SB1- > ( Eof( ) )

If m v_par01 = SB1- > B1_COD

dbSk ip( )

Loop

Endif

Do Case

72

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________73

Case SB1- > B1_LOCAL = = "01" .Or. SB1- > B1_LOCAL = = " 02"

Tr at aLocal( SB1- > B1_COD,SB1- > B1_LOCAL)

Case SB1- > B1_LOCAL = = "03"

Tr at aDefeit o( SB1- > B1_COD)

Ot herWise

Tr at aCom pr a( SB1- > B1_COD,SB1- > B1_LOCAL)

EndCase

dbSk ip( )

EndDo

A ut ilização da ident ação seguindo as est ruturas de contr ole de flux o ( while, if, case, et c) t or na a
com pr eensão do código m uit o m ais fácil:

While ! SB1- > ( Eof( ) )

If m v_par01 = SB1- > B1_COD

dbSk ip( )

Loop

Endif

Do Case

Case SB1- > B1_LOCAL = = " 01" .Or . SB1- > B1_LOCAL = = " 02"

Tr at aLocal( SB1- > B1_COD,SB1- > B1_LOCAL)

Case SB1- > B1_LOCAL = = " 03"

Tr at aDefeit o( SB1- > B1_COD)

Other Wise

Tr at aCom pr a( SB1- > B1_COD,SB1- > B1_LOCAL)

EndCase

dbSkip( )

EndDo

Utilização de Espaços em Branco

Espaços em br anco ex tr as t ornam o código m ais fácil par a a leitura. Não é necessário im ensas ár eas em
br anco, m as agrupar pedaços de código atr av és da utilização de espaços em br anco funciona m uit o bem .
Cost um a- se separ ar par âm et ros com espaços em br anco.

Quebra de Linhas Muito Longas

73

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________74

Com o obj etivo de t or nar o código m ais fácil de ler e im prim ir , as linhas do código não devem estender o
lim it e da t ela ou do papel. Podem ser " quebr adas" em m ais de um a linha de t ex to utilizando o pont o- e-
vír gula ( ; ) .

Capitulação de Palavras-Chave

Um a convenção am plam ent e utilizada é a de capitular as palavr as chaves, funções, var iáv eis e cam pos
ut ilizando um a com binação de caract er es em m aiúsculo e m inúsculo, visando facilit ar a leit ur a do código
font e. O código a seguir:

local ncnt

while ( ncnt + + < 10 )

nt ot al + = ncnt * 2

enddo

Ficar ia m elhor com as palavr as chav es e variáv eis capituladas:

Local nCnt

While ( nCnt+ + < 10 )

nTot al + = nCnt * 2

EndDo

Utilização da Notação Húngara

A Notação Húngar a é m uit o com um ent re pr ogr am ador es x Base e de outr as linguagens. A docum ent ação
do Adv Pl ut iliza est a not ação par a a descr ição das funções e com andos e é aconselhável sua utilização na
cr iação de r ot inas, pois ajuda a evit ar pequenos er r os e facilit a a leit ur a do código. Par a m aiores detalhes,
consult e a docum ent ação sobre a Not ação Húngara disponível na docum ent ação da linguagem Adv Pl.

Utilização de Nomes Significantes para Variáveis

A pr incipal vant agem da liber dade na cr iação dos nom es de var iáv eis é a facilidade de identificação da sua
ut ilidade. Por t ant o dev e- se utilizar essa facilidade o m áxim o possív el. Nom es sem sent ido apenas tornar ão
difícil a ident ificação da ut ilidade de um a deter m inada variável, assim com o nom es ex tr em am ent e curt os.
Nem sem pre a utilização de um a variáv el cham ada i é a m elhor saída. Clar o, não convêm criar um a
variável com um nom e m uit o longo que ser á ut ilizada com o um cont ador , e r efer enciada m uit as vezes no
código. O bom senso dev e ser utilizado.

Cr iar v ar iáv eis com o nNum er o ou dDat a t am bém não ajudam na ident ificação. A Notação Húngar a j á está
sendo ut ilizada para isso e o objetiv o do nom e da var iável dever ia ser ident ificar sua utilização, não o t ipo
de dado ut ilizado. Dev e- se pr ocur ar substit uir t ais v ar iáv eis por algo com o nTotal ou dCom pra.

O m esm o é válido para nom es de funções, que devem descrever um pouco sobr e o que a função faz.
Novam ente nom es ext rem am ente cur t os não são aconselháv eis.

Utilização de Comentários

74

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________75

Com entários são m uit o út eis na docum ent ação de pr ogr am as cr iados e par a facilitar a ident ificação de
pr ocessos im por tant es no fut ur o. Devem sem pr e ser utilizados.

Sem pr e que possív el, funções criadas devem t er um a br ev e descrição do seu obj et ivo, parâm etr os e
ret or no. Além de serv ir com o docum entação, os com ent ários em belezam o código ao separ ar as funções
um as das out ras.

Os com ent ár ios dev em ser ut ilizados com bom senso, pois r eescr ever a sint ax e AdvPl em por t uguês torna-
se apenas per da de tem po:

If nLastKey = = 27 / / Se o nLast Key for igual a 27

Criação de Mensagens Sistêmicas Significantes e Consistentes

Seja ofer ecendo assist ência, ex ibindo m ensagens de av iso ou m antendo o usuár io inform ado do est ado de
algum pr ocesso, as m ensagens dev em r eflet ir o t om ger al e a im por tância da aplicação. Em t er m os
gerais, dev e- se ev it ar ser m uit o inform al e ao m esm o tem po m uit o técnico.

"Aguar de. Reindexando ( B1_FI LIAL+ B1_COD+ B1_LOCAL) do arquivo: \ DADOSADV\ SB1990.DBF"

Esse t ipo de m ensagem pode dar inform ações dem ais par a o usuár io e deix á- lo sent indo- se desconfor t áv el
se não souber o que significa " reindexando" , etc. E de fato, o usuár io não devia ser incom odado com t ais
detalhes. Apenas a fr ase " Aguarde, index ando." funcionar ia cor r et am ent e, assim com o palavr as
"processando" ou "r eor ganizando" .

Outr a boa idéia é ev itar a r efer encia a um item corr ente de um a t abela com o um "r egist ro":

"Delet ar est e registr o?"

Se a operação est iv er sendo efet uada em um ar quiv o de clientes, o usuário deve ser questionado sobre a
rem oção do client e cor rent e, se possív el infor m ando v alor es de identificação com o o código ou o nom e.

Evitar Abreviação de Comandos em 4 letras

Apesar do Adv Pl suport ar a abr ev iação de com andos em quat ro letr as ( por ex em plo, r epl no lugar de
replace) não há necessidade de ut ilizar tal funcionalidade. I st o apenas t or na o código m ais difícil de ler e
não t or na a com pilação m ais rápida ou sim ples.

Evitar "Disfarces" no Código

Não dev e- se criar const antes para ex pr essões com plex as. Isto t or nará o código m uito difícil de
com pr eender e poder á causar er ros pr im ár ios, pois pode- se im aginar que um a at ribuição é efet uada a
um a var iáv el quando na verdade há t oda um a ex pr essão disfar çada:

# define NUMLINES aPr intDefs[ 1]

# define NUMPAGES aPrint Defs[ 2]

# define I SDI SK aRet ur n[ 5]

75

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________76

If I SDI SK = = 1

NUMLI NES : = 55

Endif

NUMPAGES + = 1

A im pr essão que se tem após um a leit ur a dest e código é de que valores est ão sendo at ribuidos às
variáveis ou que constant es estão sendo ut ilizadas. Se o obj et ivo é flex ibilidade, o código anter ior deve
ser subst ituído por :

# define NUMLINES 1

# define NUMPAGES 2

# define I SDI SK 5

If aRet ur n[ I SDI SK] = = 1

aPr int Defs[ NUMLINES ] : = 55

Endif

aPrintDefs[ NUMPAGES ] + = 1

Evitar Código de Segurança Desnecessário

Dada sua nat ur eza binár ia, t udo pode ou não acontecer dent r o de um com put ador . Adicionar pedaços de
código apenas para " garant ir a segurança" é fr eqüent em ent e ut ilizado com o um a desculpa para evit ar
corr igir o problem a real. I st o pode incluir a checagem par a validar inter valos de dat as ou para t ipos de
dados corr etos, o que é com um ente ut ilizando em funções:

St at ic Funct ion RaizQuadrada( nVal )

If ValType( nVal ) != " N"

nVal : = 0

Endif

Return ( nVal * nVal )

O ganho é ir risór io na checagem do tipo de dado do par âm etr o j á que nenhum pr ogram a corr etam ente
escr ito em ex ecução poder ia enviar um a str ing ou um a dat a par a a função. De fat o, este t ipo de " capt ur a"
é o que t or na a depur ação difícil, j á que o r et or no será sem pr e um valor v álido ( m esm o que o par âm et ro
recebido seja de t ipo de dado incor r et o) . Se est a captura não tiver sido efetuada quando um possív el er ro
de t ipo de dado inválido ocor r er , o código pode ser cor rigido para que est e err o não m ais aconteça.

76

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________77

I solamento de Strings de Texto

No caso de m ensagens e str ings de t ext o, a cent ralização é um bom negócio. Pode- se colocar m ensagens,
cam inhos par a ar quiv os, e m esm o out ros valor es em um local específico. I sto os torna acessív eis de
qualquer lugar no pr ogram a e fáceis de ger enciar .

Por ex em plo, se existe um a m ensagem com um com o "I m pr im indo, por fav or aguar de..." em m uit as
part es do código, corr e- se o risco de não seguir um padr ão par a um a das m ensagens em algum lugar do
código. E m ant ê- las em um único lugar , com o um ar quiv o de cabeçalho, t or na fácil a pr odução de
docum entação e a internacionalização em out ros idiom as.

Tabela de Pictures de Formatação

Comando SAY/ PSAY

Funções

C Ex ibe CR depois de núm er os posit iv os

E Ex ibe num éricos com o ponto e a vír gula invert idos ( form ato Eur opeu)

R Inser e caract er es difer entes dos car act er es de t em plat e

X Ex ibe DB depois de núm er os negativos

Z Ex ibe zer os com o br ancos

( Envolv e núm er os negativ os ent re parênt eses

! Conv er te t odos os car ect er es alfabát icos par a m aiúsculo

Tem plat es

X Exibe dígit os par a qualquer t ipo de dado

9 Exibe dígit os par a qualquer t ipo de dado

# Exibe dígit os par a qualquer t ipo de dado

! Convert e car acteres alfabéticos par a m aiúsculo

* Exibe asterisco no lugar de espaços em br anco inicias em núm er os

. Exibe a posição do pont o decim al

, Exibe a posição do m ilhar

Comando GET

77

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________78

Funções

A Per m it e apenas caracteres alfabét icos

C Ex ibe CR depois de núm eros posit ivos

E Ex ibe num éricos com o ponto e vír gula invert idos ( form ato Europeu)

R I nser e caract er es difer ent es dos car act er es de tem plate na exibição m as não inser e- os na
var iável do GET

S< n> Per m it e r olam ento hor izont al do t ex to dentr o do GET, < n> é um núm ero inteir o que ident ifica
o t am anho da região

X Ex ibe DB depois de núm eros negativ os

Z Ex ibe zer os com o br ancos

( Ex ibe núm eros negat iv os ent r e parênt eses com os espaços em br anco iniciais

) Ex ibe núm eros negat iv os ent r e parênt eses sem os espaços em br anco iniciais

! Conv er t e caract eres alfabét icos para m aiúsculo

Tem plates

X Per m ite qualquer car act er e

9 Per m ite apenas dígitos para qualquer t ipo de dado, incluindo o sinal para num ér icos

# Per m ite dígit os, sinais e espaços em br anco para qualquer t ipo de dado

! Convert e car acteres alfabét icos par a m aiúsculo

* Exibe um ast er isco no lugar dos espaços em branco iniciais em núm eros

. Exibe o pont o decim al

, Exibe a posição do m ilhar

Programação do AdvPl para o ERP Siga Advanced Protheus

Prefácio

78

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________79

Ex ist e um dit ado chinês que diz: “ O Hom em não t ropeça em m ontanhas, t ropeça em pedregulhos, areia,
pequenos bur acos, m as nunca em um a m ont anha” .

Isso nos r em ete a pensar que onde er ram os é ex at am ente no sim ples, naquele det alhe quase
im perceptív el e que t em um v alor m uit o gr ande par a o t odo. Avaliem os do pont o de vist a hum ano; será
tão difícil cum pr im ent ar a todos, serm os m ais am igos, m ais ser enos nas decisões e com panheir os uns dos
outr os e tr abalhar m os em equipe? Por que m uit as vezes não o fazem os? Por que insist im os no
indiv idualism o e no m al- hum or ? Não seria m ais fácil, até m esm o óbvio, est ar m os m ais bem - hum or ados e
dispost os a t r abalhar em equipe, t r ocar m os conhecim ent o e discernim ento nas decisões, pensar m os m ais
no t odo por ém se im port ando com as part es que o com põe?

Seria m ais interessant e se ao cam inhar m os por um parque, pr estássem os m ais at enção nas ár vor es, no
cam inho, nas flor es, no canto dos passarinhos sem se esquecer do objet iv o do passeio, sem perder a
noção de t em po e dist ância, m as curt indo m uit o a paisagem , o detalhe.

Agor a vam os t raçar um par alelo com o nosso dia a dia. Não ser ia m elhor ao r eser v ar m os um font e,
verificarm os com m ais at enção:

As condicionais? Afinal m uit as v ezes não test am os um ELSE.

Os filtr os? Ger alm ente esquecem os de t ent ar ot im izar a perfor m ance no SQL.

As m ensagens? Afinal é t ão com um nos depararm os com t ex tos com plet am ent e sem sent ido.

Os helps? Dam os pouca at enção a eles e nos esquecem os que é a prim eir a coisa que o usuár io t ent a.

Im aginem algum as ligações m enos por causa de um a sim ples docum ent ação a m ais! Aquele pont o de
entr ada que criam os e não pensam os nos supost os par âm et ros que nosso pessoal em cam po pode quer er,
ou m esm o no r etorno m ais adequado para aquela função.

Lem br em - se tam bém da docum entação do nov o cam po; Ela realm ent e é necessár ia? Se a chav e de
índice é im pr escindível, por que não crio um a quer y? Ao responder um BOPS, não ser ia m elhor que fosse
sua últ im a ar gum entação para o problem a? Se ist o ficar clar o e bem resolvido não t er em os m ais aquela
ocor r ência ou dúv ida. Se t iv er m os que ex plicar um pr ocesso para alguém , que o façam os de tal for m a a
não gerarm os incógnit as.

Por que ao inv és de focarm os nossos esforços par a “ m at ar m os” o BOPS, não av aliam os o font e para
ev it arm os NOVOS BOPS? Ao r esolv er um a ocorr ência lem br e- se de todos os pont os de im plicação da sua
at ividade. O que isso ir á im pact ar no ser viço do out r o? Sem falar em docum ent ar no Quar k!

Vam os t razer o com por t am ent o do par que para o nosso tr abalho tam bém . Ao pr ogram ar vam os nos at er
aos detalhes, serm os m ais cr ít icos, pensar m os que aquela inst rução a m ais, significa m uito par a o sist em a
e que lá na fr ente, se t ratado com descuido, pode causar problem as.

Tenha conv icção que, se agirm os de m aneira m ais focada aos nossos propósit os, o passeio ou m elhor a
pr ogram ação, ser á m uit o m ais ent usiasm ada, produtiva e com um a m ar gem de err o bem m enor . Com
esse com por t am ent o quem ganha som os nós; Micr osiga! . Só assim t erem os m ais tem po de irm os ao
parque no final de sem ana.

Lem br e- se que não adiant a decidir m os passear no parque do Ibirapuer a no dom ingo, e não est ar m os com
a cabeça v olt ada par a o passeio, ao invés disso pensar m os no t r abalho, na DLLl que não com unica, no
BOPS que não foi baix ado, pois se assim for , est ar em os t ão v oltados par a outr os fins que não curt irem os
o passeio. Pense que para passear , ou m elhor , progr am ar, a regr a t am bém é v alida, não adiant a nem ao
m enos tent ar m os se não estiver m os concent r ados par a isso.

Enfim , quer um a pr ov a de t r abalho em equipe com um alt o nív el de qualidade e det alhes; este m anual,
que foi const it uído em apenas 2 dias, com a colaboração de m ais de 20 pessoas, focadas em seus
objet iv os, se at entando cada um com o seu t em a. O resultado? Um tr abalho ex celent e, um docum ento
para nos aj udar a serm os m elhor es e não err ar m os no fácil!

O Que é Fazer um Programa com I nteligência

Pr ecisam os ent ender , antes de m ais nada, o que é int eligência.

Segundo o dicionár io Michaelis, int eligência significa:

79

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________80

faculdade de entender , pensar, raciocinar e int erpretar;

Com pr eensão, conhecim ento pr ofundo.

De acor do com essa definição, se pretendem os ut ilizar nosso bem m ais pr ecioso em nosso tr abalho,
vam os pr ecisar desenv olver alguns hábit os:

Devem os est udar o progr am a ant es de com eçar a desenv olver. Im agine pr estar um concur so ou fazer
um a pr ov a sem estudar. Vai ganhar um zero na cer t a! No pr ogram a não ser á diferent e!

Fazer um lev antam ento dos progr am as que sofrer ão as conseqüências das alt er ações realizadas. Todos
esses progr am as deverão ser t est ados j unt am ent e com o pr ogr am a alterado.

Antes de cr iar um a função, consult e o Help Micr osiga ou os colegas de t r abalho, pois esta função j á pode
ter sido criada.

Ao criar um a função, cer tifique- se de que no cabeçalho const e algum as inform ações básicas com o:
descrição da função, sintaxe, definição dos par âm etr os e autor. É com um ao desenvolv er um a função,
ut ilizar m os out r a j á pr onta com o exem plo, e neste m om ent o o “ copiar / colar ” nos faz esquecer de alt er ar
estas inform ações.

Im agine se alguém desenv olver um a função inconsist ent e e esquecer de tr ocar o seu nom e no cabeçalho.
Devem os assum ir a responsabilidade de nossos atos.

Ao fazer a docum entação das alt er ações r ealizadas, cer tifique- se de que as inform ações est ão clar as, não
só par a o seu ent endim ent o m as para que os colegas não percam t em po t entando entender - las.

Ao r ealizar os t est es, defina cr itér ios. Antes de com eçar defina onde quer chegar. Não bast a consist ir suas
alt er ações. O fato de suas alt erações est ar em funcionando com o pr ev ist as não gar ante a não exist ência
de err os.

Não lim it e- se a test ar sua alt er ação na base que v ocê ut ilizou dur ante o desenv olvim ent o, pois v ocê criou
o am biente per feit o para que o pr ogram a funcione.

Pode par ecer um pouco tr abalhoso passar por estes pr ocessos no decor rer do desenv olv im ent o do
sistem a, m as se m edidas com o estas não for em t om adas, o que era ext rem am ente sim ples se t or nará
ex tr em am ent e t rabalhoso.

Programando Simples, mas Certo

Qual profissional da área de inform ática ainda não se depar ou com um código font e que parecia est ar
escr ito em out ro dialeto m esm o com todo conhecim ento adquirido naquela linguagem , est e fato
geralm ente ocorr e pela m á ut ilização de sint ax es com plexas que nem sem pr e significam um bom
funcionam ent o do sist em a.

Um pr ofissional da ár ea de inform át ica não possui nenhum m odelo padrão para desenvolv er os seus
algor it m os, por ém é necessária a aplicação da ét ica profissional para que se possa desenvolv er algorit m os
de m aneira sim ples e cor reta, est e conceit o se baseia nos seguint es aspectos :

Entender qual o obj etivo do processo em quest ão

Analisar a m elhor for m a de desenvolver um algor itm o que seja de fácil m anutenção.

Ut ilizar com andos e sintaxes que ut ilizem o m áxim o de sim plicidade e clar eza possível.

Erros que Podem ser Evitados

Ex ist em alguns er ros que com um pouco de atenção, podem ser ev itados, tais com o:

Verifique se a v ar iáv el está declar ada antes do uso;

Ao declar ar um a v ar iável, v er ifique qual a necessidade de ter essa var iável e qual o t ipo e a sua classe;

80

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________81

Classifiquem as funções e os pr ocedim ent os confor m e a necessidade, com o por ex em plo, na declaração de
um arr ay , defina o seu t am anho e no uso v er ifique se o elem ento existe;

Salv e a ordem e a área e o r egist ro do arquivo que ser á utilizadopar a que no final do processo se recupere
estes v alor es;

Ev it e r et or nar da função antes do seu final, ou sej a, cr ie pr efer encialm ent e um único r et or no;

Valide sem pr e o r et orno do ponto de ent rada;

Quando for gr avar um ar quiv o que ut iliza cam pos de outr os ar quiv os, posicione t odos os ar quiv os e
registr os antes de iniciar a gr av ação, e descr ev a o alias do cam po;

Ut ilize de arquiv o CH nas st rings par a localização;

Quando possível utilize a linguagem SQL, pois m inim iza o t em po de execução em m uitos processos.

A I mportância de Programas Documentados

Todos sabem os o quant o é difícil elaborar e m anter um a docum entação técnica atualizada, ainda m ais
aqui na Micr osiga, cuja dinâm ica dos acontecim ent os m uitas vezes im pede que isso sej a viabilizado.
Diante desse cenár io, o que nos rest a? Obv iam ent e que pelo m enos os pr ogram as sejam docum entados,
bem docum ent ados.

Docum entar bem , não significa que t enham os que escr ev er dezenas de linhas de com ent ár ios a cada linha
de código. Significa que os com entários têm passar algum a inform ação relev ant e. Vem os com ent ár ios
assim : “ com par a A com B” e só. I sso é óbvio, a leit ur a do código j á nos diz isso. A docum ent ação dev e se
at er a conceit os, por exem plo: “ Se A for m aior que B, o ar quivo de saldos será atualizado, caso cont rár io
o r egistr o ser á r ej eit ado para que o saldo não fique negativo.” . Isto sim tr ansm it e algum a infor m ação.

Tam bém se pode ut ilizar desse r ecur so par a fazer lem br et es a fat os im por tant es que, se for em deix ados
de lado, podem com pr om et er o funcionam ento das rot inas.

Por exem plo: “ Ao acionar est a função, o ar quiv o XXX DEVE est ar posicionado no índice 1” .

E os cabeçalhos? Quant os pr ogram as são “ apr ov eitados” e nem sequer o nom e do autor é t rocado? Se o
analist a X t iv esse escr it o t odos progr am as que aparece com o autor ele dev er ia ter com eçado na época do
Char les Babage. O cabeçalho das funções de conter o nom e na dita cuj a, autor, data de cr iação, um a
descrição sum ária de sua funcionalidade, a sintaxe e por últim o, m as não m enos im por t ant e, a descr ição
dos ar gum entos de ent rada e saída. A respeito desse últim o item dev e- se t er especial atenção nas
m anut enções, pois nov os ar gum ent os são cr iados e nem sem pre são declar ados nessa seção da
docum entação do cabeçalho, isso é m uit o gr ave.

No I DE do PROTHEUS existem opções bastant e int er essant es par a nos aux iliar nessa tarefa. Exper im ente
as opções I nser ir, Docum ent ação de cabeçalho e Inser ir , Docum ent ação de Explicação.

Ex ist e ainda um t ipo de docum entação que nem sem pr e é obser vada, é aquela inerent e ao pr ópr io código.
Pr ogram as cujas var iáveis são declar adas com o nX, cVAR1, dAUX, nNUM, et c., são ex tr em am ent e difíceis
de ent ender e pior, m anter. É conv enient e que os nom es das v ar iáveis ret ratem seu uso ou destino. Por
ex em plo: dDat aDeS ou dDat aDeE. Segundo as conv enções da Micr osiga, variáveis do tipo DATA devem
ser iniciadas pela let ra “ d” . Assim “ Dat a” , não acr escent a nada ao ent endim ento do que a v ar iáv el
repr esent a. Nos sobrou o “ dES” e o “ dEE” par a infor m ar par a que diados serv e a bendit a v ar iável. Será
saída, solução, saldo? Ent r ada, Est orno, Est oque? Que t al isso: dSegur o e dEntr ega?

Enfim , com o foi dito, não é preciso escr ev er um liv ro a cada pr ogr am a, bast a ser obj etivo e se colocar na
posição de quem não conhece o pr ogr am a t ão pouco o assunto. Algum dia você m esm o poder á est ar
nessa posição.

Cabeçalho de Programa / Função

O cabeçalho do progr am a é ut ilizado par a ident ificar inform ações ger ais sobre a r otina, seu aut or , dat a,
entr e out ras infor m ações. É im port ante que est ej a preenchida de form a cor r et a e at ualizada. Lem br e- se
de que nada adianta um cabeçalho que não infor m e nada ou pior ainda, com inform ações er rôneas.

81

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________82

Lem br e- se que um bom liv ro com eça com um bom prefácio, e um bom progr am a com eça com um
cabeçalho útil e legível.

A m anut enção/ at ualização do cabeçalho é de r esponsabilidade da últ im a pessoa que alt er ou o font e. O
cabeçalho de pr ogr am a padr ão da Micr osiga contém : r ot ina, autor , data do desenv olv im ent o, com entár io
sintético e sintaxe.

Criação de Variáveis
Na criação de um a v ar iáv el dev e- se ter em m ent e alguns pont os fundam ent ais:

• A declaração

• O t ipo de var iáv el

• A função CRIAVAR( )

• A inicialização

• Padr onização de v ar iáv eis

A Declaração

Deve ser feit a sem pr e no início da r ot ina que for ut ilizá- la, com o no ex em plo:

Function a910Ver Cod( )

Local cCod910 : = “ 001”

Return

O Tipo de Variável

O tipo de v ar iáv el serv e para identificar a ut ilização que a m esm a t er á no decor r er da r ot ina. Toda v ar iáv el
deve est ar t ipada dur ant e sua criação. Quando pr ogram am os nativ am ent e em “ C” , ist o se t or na
obrigat ór io. Devem os fazer o m esm o no AP5, pois isto dem onst ra que a variável foi conscientem ente
declar ada.

Tipos Existentes

PUBLIC: Esta v ar iável ser á inicializada em um valor lógico falso ( .F.) at é que seja atr ibuído um valor
específico a ela. Est a v ar iável per m anece definida por t oda a dur ação da aplicação e pode ser v ist a ( assim
com o usada, alt er ada e av aliada) por qualquer função. Est a v ar iável ger a um t ok en ( indicação) na tabela
de sím bolos, ist o significa que o m ódulo pr incipal conter á sím bolos par a est a classe de variáv el, o que, por
sua vez, ocupa m ais espaço de m em ória. Dev e- se evit ar a utilização dest e tipo, a não ser em casos
ex tr em os.

PRIVATE: Est a variáv el será inicializada em v alor nulo ( NI L) e um a vez declar ada, perm anecerá assim
durant e t oda a duração do flux o da função, at é que est e volt e ao pr ocedim ent o inicial que a cham ou. Em
essência, um a variáv el de m em ór ia PRI VATE inicializada logo no início do Pr ot heus, agirá com o um
variável PUBLI C. Esta v ar iável pode ser vist a por um a sub- r otina da função e m odificada de m aneira
corr espondente. Est a v ar iável t am bém ger a um t ok en na t abela de sím bolos com entada acim a.

LOCAL: Est a variável de m em ória ser á inicializada com valor nulo ( NI L) e só é v isível dentr o da função que
a inicializa, m esm o que esta últim a, cont enha funções incor poradas a seu cont eúdo. Est e t ipo de v ar iáv el
é o m ais adequado a ser ut ilizado em funções, pois não gera sím bolos na t abela de sím bolos, por
conseqüência ocupa pouco espaço de m em ória e, o com pilador av alia as v ar iáveis LOCAL e STATI C m ais

82

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________83

rapidam ent e que os out r os t ipos ( PUBLI C e PRI VATE) . Cuidado par a não sucum bir à teor ia de que se pode
obter econom ia de m em ór ia, m udando qualquer r eferência PRI VATE par a um a refer ência LOCAL. Se você
fizer isso, as funções podem não funcionar cor retam ent e, em bora funcionassem na v er são anterior às
alt er ações.

STATI C: A variável STATIC é idêntica à classe de arm azenam ent o LOCAL, com um a ex ceção. Um a v ar iáv el
STATI C é r et ida dent r o de sua sub- r ot ina, m esm o depois que o fluxo da função a tenha deix ado. I sto é
part icular m ente útil par a funções independent es t ipo “ caix a- pr eta” , que cont ém seu pr óprio conjunt o de
variáveis exclusivas e devem m anter esses v alor es de interação em interação.

I nicialização

Quando não at r ibuím os nenhum valor a um a v ar iáv el no m om ento de sua declaração, corr em os o r isco de
ut ilizá- la com v alor “ NI L” e causar err os fatais. Por isso, a inicialização de um a v ar iável é de ext r em a
im port ância.

Padronização de Variáveis

É im port ant e que ao ler m os o nom e de um a v ar iável, possam os saber se o seu t ipo é num ér ico, caract er,
data ou lógico. O nom e da v ar iável de get não deve coincidir com um a variáv el de out r o pr ogram a, pois
toda var iáv el de get possui um help específico.

Ex em plo:

a variável DBaixa ( get da baixa no pr ogram a de Tít ulos a Receber ) , j á possui um t ex to help que indica seu
cont eudo e não deverá ser cr iada outr a var iável par a outr a finalidade com este m esm o nom e.

Para tant o, definim os a seguint e padr onização :

N - > Num éricas

L - > Lógicas

D - > Dat a

C - > Car act er

A - > Arr ay ( m at riz)

O - > Obj et o

U - > Sem definição

Criando uma Variável Utilizando a Função CRI AVAR( )

Esta função cria um a variável, retor nando o valor do cam po, de acordo com o dicionário de dados. Avalia
o inicializador padrão e r et or na o cont eúdo de acordo com o t ipo de dado definido no dicionário.

Sint ax e

uRet : = Cr iaVar ( cCam po,lI niPad,cLado)

Onde :

Ur et - > t ipo de ret or no de acor do com o dicionár io de dados, consider ando inicializador padr ão.

cCam po - > Nom e do cam po

LiniPad - > I ndica se consider a ( .T.) ou não ( .F.) o inicializador padr ao ( X3_RELACAO)

Clado - > Lado par a inicializaçäo padrão

83

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________84

Variáveis de Relatórios

Na criação de um relat ór io algum as var iáveis e seus tipos são conv encionados par a a ut ilização da
bibliot eca de funções de relat ór io.

Variáv el Tipo Cont eúdo

wnRel Local Nom e default do r elatório em disco

cbCont Local Cont ador

Cabec1 Local 1ª linha do cabeçalho do relat ór io

Cabec2 Local 2ª linha do cabeçalho do relat ór io

Cabec3 Local 3ª linha do cabeçalho do relat ór io

Tam anho do Relat ór io ( P = Pequeno 80 colunas, M = Médio 132 colunas, G =


Tam anho Local
Gr ande, 220 colunas)

cDesc1 Local 1ª linha da descrição do r elat ór io

cDesc2 Local 2ª linha da descrição do r elat ór io

cDesc3 Local 3ª linha da descrição do r elat ór io

Lim it e Local Quantidade de colunas no r elat ório ( 80,132,220)

Tit ulo Local Tít ulo do Relat ór io

aRet ur n Privat e Matr iz com as infor m ações para a tela de configur ação de im pr essão

Nom eprog Privat e Nom e do pr ogram a do relat ór io

cStr ing Privat e Alias do arquivo pr incipal do r elat ório par a o uso de filt ro

Cont r ole das linhas de im pr essão. Seu valor inicial é a quantidade m áx im a de


Li Privat e
linhas por página ut ilizada no relat ór io

m _pag Privat e Cont r ole do núm er o de páginas do r elatório

Matr iz cont endo as ordens de layout para a im pressão. Caso não ex ist am v ár ias
or dens esta m at riz dev e est ar v azia. Ex.: aOr d : = { " Código", "Descr ição",
aOrd Privat e
" Telefone"} - > O lay out do relat ór io vai depender da ordem selecionada na t ela
de configur ação de im pressão

nLastKey Privat e Ut ilizado para cont rolar o cancelam ent o da im pr essão do relatór io

cPer g Privat e Nom e da pergunta a ser ex ibida par a o usuár io

aLinha Privat e Matr iz que contem inform ações para im pr essão de r elatórios cadast r ais

84

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________85

Cuidados com o Posicionamento de Registros


O posicionam ent o cor reto de registr os é fundam ental par a a funcionalidade com plet a dos pr ogr am as.
Algum as dicas par a posicionam ento de r egist ros são :

Ev it ar DBGOTOP( ) , usar DBSEEK( XFI LI AL( ) ) para os arquiv os de dados do sistem a. O com ando
DBGOTOP( ) som ent e ser á ut ilizado quando da real necessidade de se efet uar um a leit ura desde o início do
ar quivo independent e do t r at am ent o de filial.

Com o no m esm o ar quiv o de dados, poder em os t er r egist ros de vár ias filiais, dest a for m a ficar á gar ant ido
o posicionam ent o no prim eiro r egist ro da filial cor rent e.

Ao executar um DBSEEK( ) , v er ificar se localizou o r egist ro, exem plo:

If ! SB1- > ( dbSeek ( x Filial( " SB1" ) ) )

/ / Não achei o r egist ro

Endif

Mesm o que sej a óbvio a existência do r egistr o, faça o test e pois o pr ogr am a dev e pr ev er que a base de
dados não é t ão confiável com o deveria, e um aler ta ajuda a ident ificar est es casos. Em casos de
relat ór ios, at ent ar - se par a im pr im ir a m ensagem de form a consciente.

Se for executada a função RECLOCK( cAlias, .F.) , par a alt er ação do regist r o at ual, em um ar quiv o no
estado de EOF( ) ( caso falhe um DBSEEK( ) ) será abort ado o pr ogr am a e gravado um arquiv o text o de
nom e MSRLOCK.EOF que poder á ser usado par a aver iguações.

O com ando SOFTSEEK det er m ina se ser á usada um a busca r elativ a durant e um procura em um banco de
dados. Se est e com ando est iver em ON, e for utilizada um a função DBSEEK( ) , e nenhum a
corr espondência for encont rada, o pont eir o de regist r o ficar á no pr óx im o registr o do índice que possua um
valor m ais alt o que a ex pr essão ut ilizada nest a função. Est e com ando deverá ser ut ilizado com a m áxim a
at enção, pois caso est ej a ligado, poder á localizar um r egist ro err ado.

Quant o ao com ando DO WHI LE não esquecer de incluir a condição refer ent e à filial, quando est a leit ur a for
de r egist r os de um a filial) . Ex em plo :

dbSelect Ar ea( " SB1" )

dbSeek( x Filial( " SB1" ) )

Do While ! Eof( ) .And. B1_FILIAL = = x Filial( " SB1" )

/ / Pr ocessam ent o

dbSk ip( )

Enddo

Ao criar um a função que irá desposicionar r egist ros, use a função GETAREA( ) e RESTAREA( ) , para v olt ar
tudo à posição original. Exem plo:

Dbselect ar ea( "SD1" )

aAreasd1 : = Getarea( ) / / Arm azena o am bient e do ar quivo SD1

SD1- > ( dbset or der ( 3) )

SD1- > ( dbseek( xfilial( " SD1") + DTOS( "01/ 03/ 01" ) , .T.) )

Do While ! Eof( ) .And. D1_FI LIAL = = x filial( " SD1" ) .And. DTOS( D1_EMI SSAO) < = DTOS( m v _par 02)

85

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________86

/ / Pr ocessam ent o

Dbsk ip( )

Enddo

Rest ar ea( aAr easd1) / / Rest aur a o am bient e do ar quiv o SD1

Função Posicione

Podem os t am bém buscar um a infor m ação em det er m inado cam po usando apenas um a função.

Sint ax e:

Posicione( cAlias, nOr dem , cChave, cCam po)

Ex em plo:

Posicione( " SB1" , 1, xFilial( " SB1") + cCodigo, "B1_DESC" )

Dest a for m a, ser á efetuada um a busca no SB1, na or dem 1, chave da busca xFilial( "SB1") + cCodigo e
será retornado o cont eúdo do cam po "B1_DESC" . Not e que esta função, não r estaur a a posição or iginal do
ar quivo alv o ( no caso SB1) .

É necessár io colocar a FILI AL do ar quiv o na chave passada com o parâm et r o, caso ela exista na chav e do
indice.

Função Existcpo

Retorna se determ inada chav e ex ist e ou não no arquivo.

Sint ax e :

Ex ist Cpo( cAlias,cChave,nOr dem )

Ex em plo :

Ex ist Cpo( "SB1" , 1, cCodigo, " B1_DESC" )

Dest a for m a, será efet uada um a busca no SB1, na ordem 1, chav e cChav e. E será r etornado se a chave
foi encont r ada ou não ( .T. ou ,F,) . Nest e caso não é necessár io passar a filial. Ela será inserida
autom at icam ent e na chave de pesquisa pela função.

Restaurando Í ndice e limpando filtros

Nos relat ór ios devem os analisar que a função “ SetPrint ” , possibilit a efetuar filtr os , escolha da or dem e
ger ação em disco ou im pr essor a , no final dos pr ogr am as de r elat ório devem os r est aurar a or dem
or iginal do ar quivos e lim par o filt r o e desativ ar a im pr essora.

/ / Tér m ino do relat or io

dbSelect Ar ea( " SRA" )

Set Filt er t o

dbSetOr der ( 1)

Set Device To Scr een

If aRet ur n[ 5] = 1

Set Pr inter To

86

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________87

Com m it

our spool( wnrel)

Endif

MS_FLUSH( )

Outros Cuidados
Um dos cuidados que dev em os t er quando da cr iação de relat ór ios contendo valores é a ut ilização dos
subt ot ais e t ot ais, a fim de evit ar err os que podem ser desast rosos dur ant e um a tom ada de decisão
er r ada dev ido a valores er r ados.

A ut ilização de som at ór ias dev e ser bast ant e cr iteriosa a fim de não com eterm os o err o de m istur ar m os
unidades de m edidas difer ent es no m esm o cálculo.

Confrontando relatórios e consultas

Quando elabor am os um sist em a, ex ist em m uit os r elatórios que ger am dados para out r os r elat ór ios e
consult as.

Devem os t om ar cuidado par a que não acont eçam div er gências de inform ações de um par a o out ro, com o
por ex em plo, no caso de valores.

Um bom ex em plo disso, é a rotina de im pressão de folha de pagam ento. Est e r elat ór io ex ibe inform ações
que são utilizadas em out r os r elat órios, t ais com o, v alores par a o FGTS, guia de r ecolhim ent o de
im post os.

Um a solução para que não se ocorr a um a divergência de valor es, ser ia ut ilizar um a única função ou r otina
de processam ent o. I st o evitar ia que ao se alt er ar o sist em a, por m otiv o de lei ou outr o qualquer, o
pr ogram ador alter asse por exem plo às rotinas de relat ór io de folha de pagam ento e guia de im post os e
esquecesse de alt er ar por exem plo à r ot ina de r elat ór io de FGTS.

Ex em plos com o Saldos Bancár ios, Quant idades de Est oques, Valor es de Fat ur am ent o, entr e out ros, devem
ser confr ontados ent re r elatór ios e consult as para não ger arem inform ações er r ôneas ao client e.

Norm alm ente est es pr oblem as ocor rem em funções de cr itér ios de filtr agens difer enciados entr e eles. Para
ev it ar este t ipo de pr oblem a é fundam ent al que o analist a ao efetuar algum a m anut enção em algum
relat ór io ou consulta at ent e- se ao fato de assegur ar que esta alteração não influencie out r as situações.

Este é um tipo de não conform idade sim ples de ser ev it ada e que pode causar problem as sér ios par a os
usuários além de ser de dificil ar gum entação quando nos quest ionado, pois evidencia falt a de at enção ou
cr itério na m anuteção ou falt a de conhecim ento sobre o funcionam ent o do sist em a.

Problemas com Looping de Programas

O Pr ot heus utiliza a tecnologia Cliente/ Ser vidor. Isto significa que o aplicat ivo não é m ais executado
indiv idualm ente em cada m áquina, ele será executado no serv idor do aplicativo. At é a ver são 4.07 um
pr ogram a tr avado significav a que apenas a est ação est av a com pr om etida ( o ex ecut áv el est ava na
m em ór ia da est ação) . Com o Protheus, todo o processam ent o est á no Ser ver e quando o progr am a está
em looping est arem os gr adat iv am ent e “ usando t odo a CPU do Ser ver” e consequentem ent e parando todo
o pr ocessam ent o.

Se ao desenv olverm os um a rotina e a m esm a ent rar em looping ( t iver apenas um a entr ada e não tiv er
um a saída do processam ent o) , est e pr ocessam ent o utilizará todos os r ecur sos do ser v idor
com pr om et endo ( reduzindo dr asticam ent e a per for m ance do aplicat ivo) , ou at é im pedindo, o uso do
aplicat ivo por todos os dem ais usuár ios.

87

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________88

Se isso acont ecer em um a em presa onde ex ist em apenas 5 usuár ios, o adm inist rador da r ede poderá
reiniciar o serv idor, por ém onde existe um núm ero consider áv el de usuários poderá hav er um prej uízo
para a em presa que ut iliza nosso sistem a.

Ex em plo:

dbSeek( x Filial( “ SE1” ) + DTOS( dDt I ni) )

Do While SE1- > ( ! Eof( ) )

< - - - - - - - - - - Falt a um DbSkip( )

Enddo

No exem plo acim a, a rotina ficar á em looping ( pois falt a um com ando de saída da r ot ina, um DbSkip( )
seria o m ais apropr iado) , ut ilizando t odos os r ecur sos de processam ento do serv idor, fazendo com que o
m esm o par e de funcionar.

Outr o ex em plo:

aCam pos : = { }

Do w hile .T.

Aadd( aCam pos, “ Teste” )

Enddo

No exem plo acim a o caso é ainda m ais cr ítico, pois além ut ilizar t odo o r ecur so de pr ocessam ent o do
serv idor, em dado m om ent o haverá um a queda do aplicativo, devido a lim it ação da v ar iáv el t ipo
Ar ray, cr iada acim a. E quando est e lim it e for ultr apassado, o sist em a ser á int er r om pido abr upt am ente
e t odos os dem ais usuár ios ficar ão im possibilitados de ut ilizar em o sist em a.

Manipulação de Arquivos Externos ao Protheus

A m anipulação de arquiv os considerados ext er nos ao Prot heus dever á ter um t ratam ent o difer enciado. O
ar quivos a ser em m anipulados ( alt er ados/ consult ados) dev er ão ser copiados do Client par a o Serv er e
vice- versa ut ilizando um a conexão ( TPC- I P,I PX,etc) . Para copiar os ar quiv os, for am criadas duas funções
que serão ex ecut adas via conexão, a CPYS2T( ) encar regada de copiar do Ser ver para o Client / Ter m inal e
a CPYT2S( ) encar r egada de copiar do Client/ Term inal para o Ser v er .

O edit or de t ex t o Wor d da Micr osoft, os arquiv os de im agens ( BMP,JPEG,et c) exigem um lugar físico para
aber tur a dos docum entos/ im agens, nav egando pela Internet por ex em plo são copiados via conexão para
um dir et ór io t em por ár io no com putador para serem visualizados.

O AP5 tr abalha da m esm a form a, at ravés dessas consider ações e ut ilizando a ar quit et ura Client / Ser ver v ia
conexão os ar quiv os ser ão copiados.

Em alguns Módulos do Prot heus são encont radas rotinas de I m por tação/ Ex port ação de lançam ent os,
ex igindo serem ut ilizadas as funções CPYT2S( ) e CPYS2T( ) par a m anipulação dos arquivos. Por ex em plo,
um a im por tação de lançam ent os da Folha de Pagam ento poder á ser feita dir et am ente do Client sem
pr ecisar copiar par a o Serv er m as se out r o usuár io pr ecisar visualizar os lançam ent os de or igem da
im port ação não t er á acesso, agor a se for r ealizado a cópia do Client para o Serv er t odos poder ão
visualizar ( aconselháv el) . I sso acontece no Módulo de Cont r ole de Docum ent os, quando todos os ar quiv os
( docum ent os) são copiados ent r e o Client e o Serv er par a que t odos v isualizem e m anipulem . Um
ex em plo que não há necessidade de cópia são os arquivos ger ados par a cont abilização ( CPROVA) , pois
estes são ger ados no própr io Serv er não hav endo necessidade de cópia.

Os ar quivos que poderão ser copiados deverão est ar necessariam ente em baix o do Root Path na
configuração do Ser ver , ist o é, o dir et ór io DOCS do ex em plo abaixo dev er á ser sub- diretório do Root Pat h.

88

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________89

Ex em plo de cópia do Ser ver par a o Client:

CPYS2T( "\ DOCS\ EXEMPLO.DOC," C: \ WI NDOWS\ TEMP",.T.)

Onde os parâm et r os são:

1o. é o < Nom e do Arquiv o> a ser copiado para o Client

2o. é o < Nom e do Diretório> do Client e/ ou local físico onde será copiado o ar quivo.

3o. se deseja com pact ar o ar quivo ( recom endável)

Ex em plo de cópia do Client par a o Ser ver:

CPYT2S( " C: \ WI NDOWS\ TEMP\ EXEMPLO.DOC," \ DOCS" ,.T.)

Onde os parâm et r os são:

1o. é o < Nom e do Arquiv o> a ser copiado par a o Ser ver

2o. é o < Nom e do Diretório> do Ser ver

3o. se deseja com pact ar o ar quivo ( recom endável)

As funções possuem um r et orno Tr ue( .T.) ou False( .F.) indicando se a cópia foi r ealizada com sucesso ou
não.

Desenvolvendo Telas

A apar ência e obj etividade das telas num sist em a é base fundam ental da int er face Sistem a x Usuár io.

O AP5 já cr ia, aut om at icam ent e, a gr ande par t e das t elas de um m ódulo, t ais com o a Br ow se, a Get Dados
e Enchoice.

Algum as out r as t elas necessit am de constr ução “ m anual” , ou sej a, com a ut ilização de com andos, t ais
com o “ SAY” , “ GET” e “ LABEL” , na Dialog.

Pr ocur e sem pre colocar em t ela as infor m ações que m ais se objetiv am com o assunt o abordado.

Sem pr e que possível, dê prefer ência aos cam pos obr igatórios pr im eir o. I sso facilit a a digitação do usuár io,
que não pr ecisará passar de cam po em cam po ( no caso de estar ut ilizando a t ecla < TAB> ) at é chegar ao
cam po desej ado. A ordem dos cam pos t am bém é im por t ante par a a fácil localização das inform ações.

Quando o volum e de infor m ações é m uit o gr ande, divida os cam pos em folder s, ou sej a, past as,
agrupando os cam pos em assunt os. I sso irá deix ar a tela m enos poluída e ev itará que o usuár io navegue
por um a t ela só. Par a fazer essa facilidade, pr eencha o cam po X3_FOLDER, no SX3, com um núm er o,
agrupando- os de acor do com a t ipo de infor m ação e no SXA, com o ALIAS do arquiv o em paut a, a or dem ,
que equivale ao num ero infor m ado no X3_FOLDER e a descr ição nos tr ês idiom as. Essa descr ição que será
a infor m ação contida na pasta do folder . Ex em plo: Os cam pos SZ 1_ENDER, SZ1_NUM e SZ1_BAI RRO
devem est ar com o cam po X3_FOLDER pr eenchido com o conteúdo “ 1” . No SXA, o XA_ALI AS dever á ser
SZ 1, o XA_ORDEM = “ 1” ( m esm o valor preenchido no X3_FOLDER) , no XA_DESCRI C, “ Endereço
Residencial” e, nos dem ais, o m esm o t ex to em outr os idiom as.

O Folder , além de agr upar e facilitar a procura pelos cam pos, ev it a a r olagem v er t ical da t ela, facilit ando a
visualização das inform ações.

Ev it e t ela com m uit os botões. I sso poderá confundir o usuár io e induzi- lo ao err o. Ut ilize telas sequenciais,
conhecidas com o Wizard ( sem elhant e aos de inst alação de um soft war e) . Dessa for m a, o usuário ficará

89

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________90

m ais atent o aos fat os, dificultando o err o. Mas cuidado: não faça disso um a incansável sequência de t elas,
pois isso acabar á desm ot iv ando o usuár io a utilizar o sist em a.

Enfim , as t elas devem ser lim pas e obj et ivas, de t al form a que im peça o usuário de sair de seu obj et ivo
final. Todo curioso ir á aper tar t odos os bot ões da t ela ou pr eencher t odos os cam pos com qualquer t ipo de
infor m ação. Por tant o, estej a at ento a t am anho dos labels, para que os m esm os não ex cedam o tam anho
da caix a de diálogo definida. Isso, além de não ser est ét ico, pr ej udica o entendim ent o da infor m ação.

Salvando Array’s padrões

Quando t em os Janelas que necessit em apresent ar m ais de um a get dados, dev em os salvar os elem ent os,
acols, aheader e n, da t ela ant er ior para apr esentar um a nova janela.

As principais variáveis são:

Acols = Arr ay cont endo as linhas usada que ser ão apr esentadas na

Getdados

AHeader = Ar ray cont endo o cabeção das colunas da Getdados

N = Variável publica que indica a posição do at ual no acols

( a Linha que est á sendo edit ada na Get dados)

Para salv a- las podem os:

aColsAnt : = aClone( Acols)

aHeader Ant : = aClone( aHeader )

nElem Ant : = n

E para rest aura- las:

aCols : = aClone( aColsAnt)

aHeader : = aClone( aHeaderAnt )

n : = nElem Ant

Pontos de Entrada
Dent ro dos pr ocessos oper acionais dos progr am as é possív el cr iar “ aber t ur as” que possibilitam a
ex ecução de pr ocessos dist int os a par t ir de um a r ot ina do sist em a.

Objetivo dos Pontos de Entrada

Deix ar o sist em a flex iv él , pois isso per m ite um a gr ande v ar iedade de desenv olvim ent o pelos nossos
analist as de supor te de acordo com a necessidade de cada t ipo de client e/ im plantação.

Perm it ir que o sistem a sej a o m ais abrangente possív el de acordo com cada t ipo de segm ento de negócio.

Quando criar um Ponto de Entrada

O pont o de ent rada t em r esult ado quando per m ite que um pr ocesso possa ser m odificado, desde que ele
não sej a cr ítico para o sistem a.

90

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________91

Ex em plo: Mont agem das par celas de pagam ent o de um pedido

Ele é útil em pr ocessos que podem ser diferent es de acordo com o tipo de negócio de cada em pr esa ou
estr atégia adot ada.

Ex : Relat ór io de Pedido, Cadast ro de Client es

Sintaxe para criar um Ponto de Entrada:

Function TMKA010( )

Local lRet or no : = .F.

Local LTMKMCL : = Ex ist block( "TMKMCl" ) / / O “ Exist block ” detect a se ex ist e um a função no r eposit ór io do
AP5 com esse PE.

If lTMKMCL

lRetorno : = Execblock( “ TMKMCI ” ,.F.,F.,{ aValor } ) / / aValor é um ar ray que ser ia r ecebido pelo usuar io
em PARAMI XB

Endif

Return( lRetorno )

Procedimentos para sua criação

Av aliar com crit ér io a cr iação do Pont o de Ent rada, pois é im port ant e localiza- lo num pont o que seja út il,
não redudant e e que r ealm ente dê condições de atender ao solicitant e.

O Pont o de ent r ada não é um a ferr am ent a de cor reção de event uais falha do sistem a e sim par a ajudar no
desenv olvim ent o de negócios específicos.

Docum entar no QUARK com nom e,m om ento no qual o m om ent o em que ele é disparado, param etr os que
ele env ia,r etorno esperado ( se houv er ) e o que ele ex ecut a com o r et or no.

Contabilizando
A cont abilização de r egistr os em um sist em a ERP é necessár io t oda vez que houverem operaçoes
envolv endo v alor es na em pr esa, com o por ex em plo, a em issão de um a not a fiscal, um recebim ent o de
dinheir o, um pagam ento na folha, ent r e outr os.

Para quem está pr ogram ando é fundam ent al que este conceito esteja bast ante sidim ent ado.

Para se definir a contabilização em qualquer r ot ina deve- se :

• Definir os lançam ent os padronizados que serão ut ilizados par a a r ot ina ( cada m ódulo ou fam ília de
m ódulo possui um a sequencia lógica)

• Pr epar ar o progr am a par a efet uar as at ualizações e a contabilização. Est e det alhe é m uito
im port ante pois o lançam ent o padr ão é um a fór m ula e o posicionam ento dos r egistr os é
fundam ent al. Exem plo : Na rotina de exclusao de not a fiscal dev e- se executar a cont abilização
antes do com ando dbDelet e( ) .

• A cham ada do lançam ento contábil deve est ar em um lugar est rat égicam ent e corr et o, pois
teor icam ente é a últ im a coisa a ser feit a na rotina. Não é aconselhável executar a cont abilização
e depois efet uar out r os com andos.

91

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________92

Ex ist em tr ês funções que dev er ão ser ut ilizadas, par a que seja criado um arquivo t ext o, contendo as
infor m ações a ser em contabilizadas.

Com o t em os 2 sistem as cont ábeis ( SI GACON e SI GACTB) com procedim ent os diferenciados pr ogr am am os
de for m a ident ica par a am bos porém int er nam ente as r ot inas efet uam com andos difer entes. Os com andos
para a cont abilização são :

A Função HeadProva

Este função cria o cabeçalho da contabilização. É t r at ada de form a difer enciada para os m ódulos SI GACON
e SI GACTB.

Sint ax e:

nHdlPr v : = HeadProva( cLot eAt f, cNom Pr og, Subst r( cUsuar io,7,6) , @arquiv o, .T.)

Onde:

NHdlPr v - > Var iáv el que cont er á o num . ( Handle) do ar quivo ( .LAN) criado.

cLot eAtf - > Código do lot e do m ódulo ( Ex.: Ativ o Fix o: “ 8866” )

cNom Prog - > Nom e do Progr am a ( Ex .: “ ATFA060” )

cUsuar io - > Usuár io ar quiv o: nom e do ar quiv o ( Ex.: cAr quivo : = ‘ ‘)

A função DetProva( )

Em prim eir o lugar , dev e- se est ar posicionado no r egistr o, que cont ém o valor à ser cont abilizado

Sint ax e:

Ex pN1 : = Det Pr ov a( Ex pN2,ExpC1,ExpC2,ExpC3)

Ex pN1 - > Valor Tot al da Contabilização

Ex pN2 - > Handle retornado da função ant er ior

Ex pC1 - > Código do Lançam ento Padr ão

Ex pC2 - > Nom e da rotina Geradora

Ex pC3 - > Lançam ent o Padrão

A função RodaProva( )

Esta função ir á cr ia a finalização da cont abilização.

Sint ax e:

RodaPr ov a( Ex pN1, ExpN2)

Ex pN1 - > Handle ret or nado da função ant erior

Ex pN2 - > Valor Tot al da cont abililização

No Final, ou sej a, após todos r egistr os serem pr ocessados ut ilizar a função CA100I NCL( ) , cujo obj et ivo é
ler o ar quiv o gerado ( .LAN) , e ger ar os lançam ent os no ar quivo SI2 ( Lançam entos cont ábeis) .

Ex em plo:

CA100I ncl( cArquivo, nHdlPrv , nOpcx, cLot eContabil, lDigit a, lAglut , cOnLine, dDat a)

92

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________93

Onde:

cArquivo - > Nom e do ar quivo

nHdlPr v - > Num er o do Header

nOpcx - > Num ero da Opcao escolhida

cLot eContabil - > Num er o do Lot e

lDigita - > Se Most ra ou nao

lAglut - > Se Aglut ina ou não

cOnLine - > Det er m ina se ser a On Line ou pelo cPr ova

Atualizando SX ( ATUSX)
O ATUSX é um a fer r am ent a m uit o im por t ante utilizada na m anutenção dos arquivos cust om izador es
int er nos: os ar quivos SX’s . É nos arquivos SX que est ão arm azenadas todas as inform ações padrões
necessár ias par a a criação de bases das em presas e efetuar possív eis cust om izações.

Em um a at ualização de ver são, o sistem a ir á fazer um a com pat ibilização de dados com os ar quivos já
ex ist entes e os at ualizar á com base nos SX’s. Ao desenv olv er um a rot ina que ex ige um nov o cam po, por
ex em plo, est e dev er á ser criado no ATUSX, caso contr ár io ger ar á um a não confor m idade
com pr om etendo todo o t rabalho da at ualização e o bom andam ento do t r abalho. Todo os cam pos,
perguntas, índices, par âm etr os novos deverão est ar no ATUSX , pois estes são os padrões do Protheus.

É aqui t am bém que cadastr am os os HELP’s de cam po e de pr ogram as, cr iam os os m enus do sist em a e
onde disponibilizam os infor m ações par a serem tr aduzidas para out r os países.

Exemplo de atualização no SX:

Cr iação de Índice no Cadast r o de Funcionár ios- Suponham os que sej a necessário um índice por Dat a de
Adm issão. Nest e caso ut ilizar em os o SI NDEX , onde dev er ão ser alim ent ados basicam ent e o Alias ( SRA) ,
a or dem , a chav e de index ação ( RA_ADMI SSA) e sua descr ição em Por tuguês. As descr ições r eferent es
às out r as línguas dev er ão ficar a car go do depar t am ent o de t r aduções. Num a atualização de v er são, o
sistem a enxer gar á a existência dest e índice pelo SI NDEX e o disponibilizar á para ut ilização.

Ao final da m anutenção dos arquivos SX’s, abr e- se um a janela onde deve ser docum ent ado todas as
alt er ações efetuadas da for m a m ais clar a e pr ecisa possív el. Est a docum ent ação é de ext rem a im port ância
para que se tenha um contr ole dos ar quiv os custom izador es padrões e gar ant em um per feito
funcionam ent o do Protheus.

SX1 - Parâmetros Genéricos

Esta t abela cont ém as per gunt as, os v alor es ar m azenados e a últim a r espost a utilizada para
pr ocessam ent o, im pressão de r elatórios , etc.

Todos os processam entos ou r elatórios que tenham a opção de par am et rização, deverão ut ilizar a função
Pergunte par a car regar os valor es dos par âm et ros e/ ou apresent ar na t ela as per gunt as r elacionadas.

Com o o usuário pode não ut ilizar a opção de par am et rização, devem os sem pr e carr egar as variáveis
MV_PARXX com os valor es default ou com as últ im as r espost as aplicadas, para evit ar er r os de
com paração de variáveis.

SX2 - Mapeamento dos arquivos

93

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________94

Ar m azena os Pat hs dos ar quiv os possibilit ando que estes possam ser dist ribuídos em div er sos dr ives ou
dir et ór ios.

SX3 - Dicionário de Dados

Ar m azena infor m ações r eferent es às definições de t odos os cam pos que existem no Protheus.

SX5 - Tabelas Genéricas

Ar m azena t abelas genér icas ut ilizadas em t odo sist em a.

SX6 - Parâmetros

Elem ento chave par a a execução de um pr ocessam ento, que determ ina difer ent es r esult ados dependendo
do seu cont eúdo.

SX7 – Gatilhos

Rotina ou operação que é dispar ada a par t ir de um event o get .

SXE/ SXF - Seqüência. de documentos

Ar m azena sequencias alfanum éricas que deverão ser contr oladas por um sem áforo. Um exem plo clássico
seria a num eração de pedidos de v enda, em que vários usuár ios poder iam estar ut ilizando o m esm o
núm er o de pedido.

SI NDEX- Arquivo de Í ndices

Ar m azena t odos os índices padr ões.

Controle de Transação ( TTS)

O que é

Tr at ando- se de Banco de Dados, t oda e qualquer oper ação de inclusão, alt er ação ou ex clusão de r egist ro
é ar m azenada pr im eir am ent e na área de LOG, gar ant indo assim que ao fazer a inclusão de um a linha
( r egist ro) sej a garant ida a inclusão com pleta de todas as colunas ( cam pos) . Caso não seja possív el a
inclusão da linha com pleta ele execut a um pr ocedim ento cham ado de ROLLBACK, ou sej a, ignor a todo o
registr o.

Quando usar

Quando tem os um a oper ação em Banco de Dados que necessite que v ár ias inclusões, alt er ações ou
ex clusões só sej am efet uadas quando t odas as operações t enham sido realizadas com sucesso, garant indo
com isso que não seja at ualizada parcialm ente um a t abela ou que at ualize um a tabela e não at ualize out ra
tabela r elacionada.

Como usar

94

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________95

Para definir um a t r ansação, dev e- se utilizar os com andos BEGI N TRANSACTI ON e END TRANSACTI ON
para definir inicio e fim de um a t ransação r espect ivam ente. Todas infor m ações à serem gr avadas no
Banco devem estar dent r o de um a única t r ansação sej am elas pr ov enient es de um a ou várias tabelas.

Deve- ser evit ar utilizar laços ( WHI LE, FOR) dentr o de um a tr ansação, pois a ár ea de LOG do banco é
lim it ada, e se o v olum e de infor m ações ult r apassarem este lim ite, ocasionar á o t ravam ento do banco de
dados. O t am anho da t ransação dev e- ser ser conhecido pelo pr ogr am dor . Em sum a, para exem plificar ,
devem os cont rolar a t r ansação de um a not a e não de um conjunt o ilim it ado de not as.

Onde não usar

O cont role de t ransação j am ais dever á ser ut ilizado durant e pr ocesso que env olv am int er face ( t elas com
entr ada de dados) . O cont r ole deve- se resum ir apenas ao pr ocesso de gravação. Ent r e um início de
tr ansação ( Begin Tr ansact ion) e um final ( End Tr ansact ion) Todos os r egist ros a ser em gr av ados ficam
“ locados” até o final da t ransação. Caso t enham os um a t ela após o BEGI N e antes do END dependerem os
do usuár io par a efet uar a liber ação da tr ansação, fato est e que causar ia enorm es pr oblem as para o
usuário.

Outr o lugar que não deve- se ter o cont role de t ransação r efer e- se a rotinas de r epr ocessam entos ou
recálculos, onde as infor m ações podem ser r eger ados dur ant e este processo ou onde possam os t er um
gr ande núm ero de lock s.

BEGI N TRANSACTION

Ex pN1 : = FuncGrava( )

END TRANSACTION

Caso exist a um a t ransação dent r o de um a out ra a segunda ser á autom aticam ent e ignor ada, fechando- se
a t ransação principal quando da cham ada do com ando END TRANSACTI ON.

Comandos Definidos pelo Usuário ( UDC´ s)


Este r ecurso cr ia novas e infinitas possibilidades par a m odificar a m aneir a pela qual escrevem os o código
de um a função e a m aneir a pela qual podem os resolver pr oblem as com plex os. Ele ajuda a facilit ar a
m anut enção do código, e a im plem ent ação de nor m as.

Estes com andos são t r aduzidos, analisados e m odificados antes que o com pilador com ece a t rabalhar para
gerar um ar quivo objet o. O responsável por esta t r adução é o pr é- pr ocessador que é um t r adut or
int eligent e que at ua ant es da ger ação do código obj et o.

Em sua m aioria, ist o se resum e a encont r ar os com andos no código font e e tr aduzi- los par a inst ruções e
funções equivalentes que se acham no cor po da função ou no conteúdo de ar quivos .CH ( arquivos de
cabeçalho) . Est e tipo de ar quiv o ( .CH) , cont ém diver sos com andos que ser ão ut ilizados por todas as
funções que contenham a inst rução “ include” em seu código.

Estes m esm os com andos poder iam estar em butidos na função, m as para facilitar a m anutenção, um único
ar quivo .CH, pode ser incluído ( com ando include) em v ár ias funções ao m esm o t em po. Não há a
necessidade de colocar o com ando include em cada função. Um a única m enção ao .CH no ar quivo .PR?,
serv irá ao propósito de t odas as funções nele em but idas.

Estes com andos são dir et ivas do pré- pr ocessador e com eçam sem pre com o car acter “ # ” dir et am ente à
sua frent e e dev em est ar escr it os em car acteres t ipo caixa alta. Os m ais ut ilizados no Pr ot heus são:

# DEFI NE

# I FDEF, ou # IFNDEF

# ELSE

95

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________96

# ENDI F

# I NCLUDE

Cada um destes com andos pode ser colocado em qualquer part e do ar quiv o fonte, que ser á lido pelo pr é-
pr ocessador. No entant o, para facilit ar a v isualização da exist ência destes com andos e m anut enção da
função, est es com andos devem ser colocados no início do fonte.

O pr é- pr ocessador subst it uir á, cada ocorr ência da constant e no font e, ser á subst ituída pela ex pr essão ou
valor , que est iv er cont ida dir et am ent e à fr ente da m esm a. A ex em plo de sint ax e e código font e para este
com ando é:

# DEFI NE _TESC 27

# DEFI NE _LESC lastk ey ( )

if _nLast key = = _TESC

RETURN

Endif

if _LESC = = _TESC

RETURN

Endif

Esta diretiv a é m uit o út il quando tem os um valor const ante v ár ias v ezes r epet ido dentr o do código font e,
que poderá ser alt er ado com fr eqüência no decor r er da vida út il da função.

# I FDEF ou # I FNDEF < CONSTANTE>

< inst ruções>

# ELSE

< out r as inst ruções>

# ENDI F

Esta diretiv a do pré- processador perm it e que você pr epar e aplicações para com pilação condicional, ou em
outr as palavr as, se a < const ante> , definida anter iorm ent e via dir et iva DEFINE ou pelo Prot heus foi
definida ( I FDEF) , as < inst ruções> serão incor poradas ao código obj et o e as < out r as inst ruções> , ser ão
desprezadas. Mas se a < const ant e> não foi definida < IFNDEF> as < inst ruções> serão incor poradas e as
< out ras instr uções> ser ão desprezadas.

# I NCLUDE “ < ARQUIVO> ”

Um a inst rução INCLUDE diz ao pr é- pr ocessador par a inserir o conteúdo de out ro arquiv o em um local
determ inado dentr o da função. Est e ar quiv o especificado, dev e focalizar out ras inst r uções do pr é-
pr ocessador que possam ser com uns a diver sos m ódulos da r ot ina.

Uso de Strings

Para que o sist em a possa ser ut ilizado em out r os países com línguas diferent es ao invés de inserir m os
dir et am ent e os text os no font e do relat ór io ut ilizam os o recurso de st rings, onde atr av és de um include
acessarem os o text o em t rês línguas difer ent es ( Por tuguês, Espanhol e Inglês) dependendo da for m a da
com pilação.

É conv encionado que o nom e do include sej a o m esm o nom e do font e do r elatório par a que a m anutenção
dest e r elat ório sej a o m ais sim ples possível.

Ex em plo:

96

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________97

Relat ór io - > FABR001.PRW

Include - > FABR001.CH

Conceito de Filial e Compartilhamento de Arquivos


O Sist em a perm it e a cr iação de várias Filiais para um a m esm a em presa cadastr ada, de m odo que Filiais
da m esm a em presa com par t ilhem ou não as m esm as infor m ações com o Cadast r o de Produtos, Client es,
et c.

Este tr at am ento é feit o int ernam ent e at r av és dos cam po XX_FI LI AL obedecendo a seguint e r egr a:

Arquivos Compartilhados

Quando o ar quivo est a configurado par a t rabalhar no m odo com par t ilhado ( X2_MODO = ‘C’) , est e cam po
será gr av ado com “ “ ( espaços ) .

Dest e m odo o r egist ro ficar a disponível par a t odas as Filiais.

Arquivos Exclusivos

Quando o arquivo est a configur ado par a t rabalhar no m odo exclusiv o ( X2_MODO= ‘C’ ) , est a cam po será
gr av ado com o código da Filial At ual.

Dest e m odo o r egist ro focara disponiv el apenas par a a Filial que o gravou.

Para que o regist r o realm ent e fique disponív el ou não par a suas r espectivas Filiais , TODAS as rot inas que
m anilpulam r egist ros dir et am ent e na base de dados dev er á ver ificar a Filial at ravés da Função xFilial( ) ,
alem dist o a m aior ia dos índices possuem o cam po FILIAL na

chav e :

Sint ax e : XFI LIAL( EXPC1) onde, Ex pC1 = Alias do ar quivo

A função x Filial( ) verifica se o ar quiv o é ex clusivo ou com part ilhado e ira r etornar “ “ se o ar quivo for
Com part ilhado e o código da Filial se o ar quiv o for exclusiv o .

Por exem plo :

Para execut ar um dbSeek no ar quiv o de clientes :

DbSelect Ar ea( “ SA1” )

DbSeek( xFilial( “ SA1” ) + cCodCli+ cLoj a)

Índice do SA1 :

A1_FILIAL+ A1_COD+ A1_LOJA

Ou um pr ocessam ento no arquivo :

Do w hile !EOF( ) .AND. XX_FI LIAL= = xFilial( “ 01” )

Sendo o cam po FILI AL par te da chav e de Todos os índices do sist em a, est e pr ocedim ent o gar ante que a
ut ilização dos r egist ros ser á ex clusiva da Filial que cr iou os m esm os no caso do arquivo ser Ex clusivo, ou
disponível par a todas as Filiais quando o m esm o est iver configurado com o Com part ilhado.

97

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________98

Jam ais use um cam po filial de um a t abela par a ex ecut ar um dbSeek( ) em out ra tabela. Pois um a tabela
poderá ser com par t illhada ( cam po filial em br anco) , enquant o que a out r a poder á ser com par tilhada
( cam po filial preenchido) .

A variável cFilAnt cont ém a filial que o usuário est á oper ando, e a v ar iáv el cEm pant contém a em presa e
a filial

Técnicas para Filtragem

Nos sistem as Microsiga, a filt r agem dos dados em am bient e Code Base os “ DBFs” é feit a de m aneira
geral pela Função I NDREGUA( Param s,) , o que de form a ger al não im pede o uso de inst ruções com o SET
FI LTER TO, DBSETFILTER( ) , DBFI LTER( ) ou qualquer out ro com ando de sint ax e xBase. A I NDREGUA( ) é
um a função int er na que r eúne v ár ios atr ativos e facilidades par a o seu uso, entr e elas a possibilidade de
se indexar e filt rar os registr os at ravés dos par âm etr os fornecidos, ela tam bém é pr eferencialm ente usada
para que o código fique m ais “ lim po” e de fácil interpret ação pois dent r o de sua estr ut ur a r eúne um a sér ie
de com andos de indexação e filt r agem que agiliza o processo de cr iação de índices e filt r os em ar quiv os
de t r abalho com m enos linhas de código, v ej am os o Exem plo :

Chaves Primárias

Sua função é gar ant ir unicidade. Em toda r elação, por definição, t em - se um a ou m ais chaves candidat as.
Dessas chaves, um a será prim ária e se houver m ais de um a na relação, essas outr as serão definidas
com o chave alt ernada.

Chaves Estrangeiras

É um at r ibut o cuj a função é per m it ir relacionam ento. Em um a t abela na qual o atr ibut o é chave ext er na
ou est r angeir a, em out ra, o atr ibuto dev e ser chave pr im ár ia, e os valor es dos cam pos são necessários.

I ntegridade Referencial

Todos os v alor es da chav e estr angeira t em , obr igator iam ente, que t er v alor cor r espondent e na chave
pr im ár ia que se r elaciona; m as nem todos os v alores encont rados na chave prim ária, pr ecisam t er seus
corr espondentes na chave est rangeir a que se relaciona. Por exem plo, na tabela de client es, o cam po
A1_COD ( código do client e) , v ai est ar relacionado com out ra t abela que indica quais são os pedidos de
venda colocados. Desta form a, nem t odos os client es precisam ter pedidos de v enda colocados; m as,
necessar iam ent e, todos os pedidos de venda pr ecisam de um client e.

Com o o PROTHEUS foi pr oj et ado para o am biente SQL, onde a int egridade r eferencial das t abelas é
definida no própr io banco de dados atr av és de r egras int er nas, dev em os t om ar algum as pr ecauções com
esse tópico:

Verificar a integr idade da coluna em t odas as t abelas r elacionadas: não pode- se alt er ar o t am anho do
código do client e em apenas um a tabela, caso esse código sej a alt er ado deve- se verificar as tabelas de
cabecalho e itens das not as fiscais, de tit ulos a pagar e receber, et c. O sist em a cont a com o recurso de
gr upos de tabelas r elacionadas, que per m it e alt er ar o tam anho de diversas colunas de um a vez só ,
garant indo a int egridade das colunas

Verificar a int egridade dos cadast ros com todas as t abelas relacionadas: não pode- se excluir o código do
cliente se ex ist e um pedido de vendas em abert o par a esse client e, dev e- se v er ificar t odas as t abelas
relacionadas antes de at ualizar a base de dados.Além disso na inclusão de cadastr os dev em os utilizar as
funções ex ist chav e exist cpo par a gar ant ir que as infor m ações de chave não sej am r epet idas e que o
acesso a tabelas ext er nas sej a validado de m aneira consist ent e.

Verificar a at ualização da infor m ação em t odas as t abelas relacionadas: a int egr idade não se r esum e a
validações de cadastr os e tam anho de colunas, deve- se garant ir no ato do desenv olv im ent o que TODOS
os pontos r elacionados ao tópico envolv ido sej am analisados e se necessár io at ualizados. Por exem plo, se
será at ualizado o saldo em est oque de det er m inado produto NÃO DEVE- SE at ualizar som ente o ar quiv o de
saldos em est oque, deve- se av aliar se o produto ut iliza rast reabilidade par a nesse caso atualizar o arquivo
de saldos por lot e, dev e- se avaliar se o produto utiliza cont r ole de localização fisica par a nesse caso

98

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________99

at ualizar o ar quiv o de saldos por localização, et c. Dev e- se fazer um est udo ant es de qualquer alt er ação
em atualização de base de dados.

Utilizando Rotinas Automáticas


A cada dia estam os cr iando r ot inas com interface aut om át ica par a m elhor ar a ent r ada de dados v ia outr os
equipam ent os, tais com o coletores de dados, inter face de out r os softw ar es, et c. Porém , para nossa
pr ópria por tabilidade e ut ilização de rot inas padronizadas, tem os adotado o própr io pr ogram a standar d,
cont udo sem int er fer encia do usuár io ( digit ador ) . Par a tal, cr iam os um m ecanism o onde t odos os
pr ogram as que necessit em desta regr a devem ser capazes de “ inser ir” dados de for m a aut om át ica. Abaixo
m ost rarem os com o pr oceder :

Tom e com o exem plo o MATA250.PRX . O vetor aRotAut o é passado para o pr ogram a cit ado. Se est e v et or
cont iver elem ent os, significa que ser á ut ilizada a Rotina Aut om át ica. Est e vet or deve, quando da
ut ilização das rotinas aut om áticas, conter os dados m ínim os necessár ios par a a atualização dos arquivos.

Veja a estr ut ura do vet or a ser enviado par a a r ot ina aut om ática.

ARot Auto : = { cCam po, Cont eúdo, Validação}

Onde

CCam po - > é o cam po a ser at ualizado,

Cont eúdo - > é o conteúdo que cCam po vai r eceber

Validação - > é a v alidação que cCam po vai r eceber .

Observ ação: A Validação pode ser um a função ou um valor ‘NI L’. Se for ‘NI L’, as validações a serem
ut ilizadas par a o respectiv o cam po ser ão as ex ist entes no SX3. Se as validações não for em as do SX3,
elas devem ser passadas num a função.

Ex em plo,

ARot Auto : = { { " D3_TM" ,"001" ,NI L } , ;

{ " D3_COD" ,padr ( " 10100" ,15) ,NIL } , ;

{ " D3_UM" ," UN" ,NI L } , ;

{ " D3_QUANT" ,1 ,NIL } , ;

{ " D3_OP" ," 00000401001" ,NI L } , ;

{ " D3_LOCAL" ,"01" ,NIL } , ;

{ " D3_EMI SSAO" ,dDataBase ,NI L } }

Para o processo de inclusão sim ples, sem get dados, a v ar iáv el padrão a ser ut ilizada nos pr ogram as
cham a- se aRot Auto, e par a pr ocesso de inclusão com cabeçalho e itens, as v ar iáv eis a ser em ut ilizadas
são: aAut oCab par a o cabeçalho, e aAut oI t ens para os it ens da get dados.

Para um a inclusão sim ples, tom ar com o ex em plo o MATA250.PRX. Par a um a inclusão com cabeçalho e
ítem , t om ar com o ex em plo o CONA050.PRX.

Controle de Semáforo

99

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________100

O cont role de Sem afor o perm it e que o sist em a contr ole a Num er ação Aut om ática de Docum ent os On Line.
Tem os basicam ente 3 funções que ger enciam o cont role do m esm o.

São elas :

GETSXENUM( EXPC1) - > Obt em o núm ero sequencial do alias especificado no parâm etr o.

ROLLBACKSXE - > Descar ta o núm ero pendente do sem áfor o. É usado quando o usuár io cancela a
oper ação ( o num ero não é aproveit ado) .

CONFI RMSXE - > Confirm a o núm er o sugerido. Est a função deve ser cham ada quando da confirm ação da
gr av ação do r egist ro.

MAYI USE - > Checa fisicam ent e se um det er m inado arquivo existe. O ar quivo poderá cont er o núm ero
sequencial.

Obs : A função GETX8NUM ex ecut a a pr ópr ia GETSXENUM.

Atualização do SourceSafe
A at ualização do Sour ce Safe é a últ im a, e m ais crít ica, et apa do processo de alteração dos pr ogr am as.
Para que ela sej a feita com a m áx im a segurança algum as et apas devem ser observ adas. A seguir:

Após as alt er ações ser á necessár ia um a análise m eticulosa de t udo o que foi alter ado par a avaliar qual o
im pact o que est as poderão causar no pr ogram a em que foram executadas e nos pr ogram as
corr elacionados;

Dever ão ser efetuados o m aior núm er o de t est es onde deverão ser previst os o m aior núm ero de sit uações
possíveis e pr ov áveis. Os t estes deverão ser sim ulados em base equiv alent e à instalada no client e e para
as nov as versões, em um a nova base que poderá ser gerada at ravés do ATUSX;

Feita a análise, os t estes e ant es de at ualizar definit ivam ente o Source Safe o pr ogram a alt er ado deverá
ser com par ado com o constant e no Source Safe par a v er ificar se as alterações foram realm ent e feitas no
pr ogram a que foi reser vado e, só então o progr am a poder á ser “ Baixado” .

Após a “ Baix a” , e para gar ant ir que o atualização do Sour ce Safe foi feita cor ret am ent e, o progr am a
at ualizado deverá ser nov am ent e com par ado. E é claro que se t odas as et apas ant erior es, principalm ente
a 1 e 2 , for am cum pridas essa não passar á de um a m edida de segur ança.

Procedimentos de Localizações
A Micr osiga atua hoje em 13 países e ist o faz com que pr at icam ent e todas as alterações executadas no
sistem a r eflit am em todos os países ( excet o quando não for necessár io t al pr ocedim ent o) .

Procedimentos a serem cumpridos em alteração / desenvolvimento de


programas :

A fim de ev itar os inconvenient es cit ados no pont o ant erior , exist em pr ocedim ent os que devem ser
adot ados no nosso dia a dia e repassado para aqueles funcionár ios que se acoplam a nossa equipe. Est es
são ( ent r e parênt esis os pr oblem as que ser iam reduzidos usando os procedim ent os) :

• Quando é incluído um novo STR em um CH, ou cr iado um novo CH, ou m odificado um STR em um
CH já ex ist ente, este deve ser replicado em PORTUGUÊS par a os dem ais idiom as e
autom at icam ent e deve ser encam inha um e- m ail par a [email protected] indicando
a ver são, o STR e o CH que foi alt er ado.

100

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________101

• Quando cr iado um cam po nov o, ou m odificado o conteúdo de um j á ex ist ente, os cam pos que
devem r eflet ir est a alt er ação nos dem ais idiom as dev em ser deix ados em branco, assim é com o o
pessoal de tr aduções ident ifica os cam pos que dev em ser t r aduzidos. I st o é valido para todos os
ar quivos do dicionár io de dados.

• Quando cr iado ou alt er ado um novo HELP ( de cam po ou de pr ogram a) dev e ser infor m ado de
im ediato para t r aduções para proceder a t r adução par a os outr os idiom as.

• Para atualizar um par âm et ro deve ser sem pre usada a função PUTMV, NUNCA DEVE SER
PREENCHIDO NEM POSI CI ONADO POR FORA. Est a função at ualiza nos t r ês idiom as.

• Quando criado um cam po novo “ sim ilar ” a out r os j á exist ent es no sistem a, deve se analisar se este
deve ser r eplicado com car acterísticas difer ent es par a todos os paises localizados, ou se as
caract eríst icas devem ser igual independent em ent e da localização. Na falta de “ crit ér io” ou
infor m ação, dev e ser inform ado ao set or de localizações.

• Quando cr iado um cam po novo de uso exclusiv o de Br asil ( E1_INSS por ex em plo) deve ser
infor m ada a equipe de localizações para configur ar este cam po ( uso, br owse, et c.) de acor do com
os dem ais paises.

• Quando for m odificada a car acterística de um cam po do sist em a e est e estiv er r eplicado para o
rest o dos países, as alt er ações devem ser r eplicadas em t odos os paises. Na dúv ida da
aplicabilidade da alt er ação nos outr os paises, dev e ser inform ada a equipe de localizações.

• Os nov os cam pos tipo COMBO, devem ser cr iados com num er ação e não com siglas ( 1 par a sim e 2
para não, ao invés de S par a sim e N par a não) . Est a alt er ação o inclusão deve ser infor m ada de
im ediato para a equipe de t raduções.

• Quando for cr iado um nov o parâm etr o, ou m odificado o cont eúdo default de um já existent e, esta
m odificação dev e ser aplicada nas 3 línguas.

• Quando houv e a possibilidade de pegar um STR do dicionário ( função RETTI TLE( ) ) , est e deve ser
pego, o que evit a ter que cr iar vários STR e t rat ar m os com a variáv el cPaisLoc dentr o do
pr ogram a. Ex em plo CGC, NOTA FI SCAL, CEP, etc.

• Não deve ser usada a acent uação

• Quando criadas nov as per gunt as no SX1, ou m odificadas as ex ist entes, e o X1_GSC for igual a C,
deve ser inform ado de im ediat o para t r aduções, pois os cam pos das opções do com bo, quando
vazias, ger am err o fat al na execução.

Programando com Schedule de Relatórios


Com o o sistem a per m ite que a em issão de r elat órios possa ser progr am ada ( schedule) é fundam ent al que
se utilize as rotinas padr ões para a em issão dos m esm o. O cont role do schedule é feit o pela função
SetPrint. Sendo assim , não é suport ado int er face com dat a entr y dur ant e o processo de r elatório, visto
que ist o inviabilizar á a ut ilização do m esm o. A não ser em r elatórios específicos e que sejam inviáveis a
ut ilização de shedule ( ex . I m pr essão de Cheques) est e procedim ent o deverá ser adot ado cor retam ente.

Caso exist a algum a ent r ada de dados que sej a possível ser assum ida qualquer v alor apenas no schedule
deve- se adot ar o seguint e pr ocedim ento :

Usar a variáv el __cI nt er net , que se est iv er com v alor .T. ( Verdadeir o) est am os no pr ocesso de schedule.

Modelos de Programas Padronizados

101

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________102

Modelo 1
Este m odelo de pr ogram a ex ibe um Br owse vert ical de cam pos pr esent es no dicionár io de dados.
Gener icam ent e as v alidações são herdadas do pr ópr io dicionár io de dados.

/*/
+---------------------------------------------------------------------------+
+ Funcao | FINA010 | Autor | Wagner Xavier | Data | 28/04/92 |
+-----------+----------+-------+-----------------------+------+-------------+
| Descricao | Programa de atualizacao de Naturezas |
+-----------+---------------------------------------------------------------+
| Sintaxe | FINA010() |
+-----------+---------------------------------------------------------------+
| Uso | Generico |
+---------------------------------------------------------------------------+
| ATUALIZACOES SOFRIDAS DESDE A CONSTRUCAO NICIAL |
+-----------+--------+------+-----------------------------------------------+
|Programador| Data | BOPS | Motivo da Alteracao |
+-----------+--------+------+-----------------------------------------------+
| | | | |
+-----------+--------+------+-----------------------------------------------+
/*/

102

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________103

#INCLUDE "FINA010.CH"
#INCLUDE "PROTHEUS.CH"
FUNCTION FINA010
/*/
+----------------------------------------------------------------+
| Define Array contendo as Rotinas a executar do programa +
| ----------- Elementos contidos por dimensao ------------ +
| 1. Nome a aparecer no cabecalho +
| 2. Nome da Rotina associada +
| 3. Usado pela rotina +
| 4. Tipo de Transacao a ser efetuada +
| 1 - Pesquisa e Posiciona em um Banco de Dados +
| 2 - Simplesmente Mostra os Campos +
| 3 - Inclui registros no Bancos de Dados +
| 4 - Altera o registro corrente +
| 5 - Remove o registro corrente do Banco de Dados +
+----------------------------------------------------------------+
/*/
PRIVATE aRotina := { { OemToAnsi(STR0001) ,"AxPesqui", 0 , 1},; //"Pesquisar"
{ OemToAnsi(STR0002) ,"AxVisual", 0 , 2},; //"Visualizar"
{ OemToAnsi(STR0003) ,"AxInclui", 0 , 3},; //"Incluir"
{ OemToAnsi(STR0004) ,"AxAltera", 0 , 4},; //"Alterar"
{ OemToAnsi(STR0005) ,"FA010Del", 0 , 5, 3} } //"Excluir"
+----------------------------------------------------------------+
| Define o cabecalho da tela de atualizacoes |
+----------------------------------------------------------------+
PRIVATE cCadastro := OemToAnsi(STR0006) //"Atualizacao de Naturezas"
+----------------------------------------------------------------+
| Endereca funcao Mbrowse |
+----------------------------------------------------------------+
mBrowse( 6, 1,22,75,"SED")
Return
/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |FA010DEL | Autor | Wagner Xavier | Data | 8/04/92 |
+------------+---------+-------+-----------------------+------+----------+
| Descricao | Programa de exclusao de Naturezas |
+------------+-----------------------------------------------------------+
| Sintaxe | A010Deleta(ExpC1,ExpN1,ExpN2) |
+------------+-----------------------------------------------------------+
| Parametros | ExpC1 = Alias do arquivo |
| | ExpN1 = Numero do registro |
| | ExpN2 = Numero da opcao selecionada |
+------------+-----------------------------------------------------------+
| Uso | FINA010 |
+------------+-----------------------------------------------------------+
/*/
FUNCTION FA010DEL(cAlias,nReg,nOpc)
Local aAC := { OemToAnsi(STR0007),OemToAnsi(STR0008) } //"Abandona"###"Confirma"
Local bCampo
Local lDeleta := .T.
Local oDlg
Local nCont
Local nOpca
+----------------------------------------------------------------+
| Monta a entrada de dados do arquivo |
+----------------------------------------------------------------+
Private aTELA[0][0],aGETS[0]
+----------------------------------------------------------------+
| Verifica se o arquivo esta realmente vazio ou se esta |
| posicionado em outra filial |
+----------------------------------------------------------------+
If EOF() .or. SED->ED_FILIAL != xFilial("SED")
HELP(" " , 1 , "ARQVAZIO")
Return Nil
Endif

While .T.
+----------------------------------------------------------------+
| Envia para processamento dos Gets |
+----------------------------------------------------------------+

103

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________104

dbSelectArea( cAlias )
bCampo := {|nCPO| Field(nCPO) }
FOR nCont := 1 TO FCount()
M->&(EVAL(bCampo,nCont)) := FieldGet(nCont)
NEXT nCont
nOpca := 1
DEFINE MSDIALOG oDlg TITLE cCadastro FROM 9,0 TO 28,80 OF oMainWnd
EnChoice( cAlias, nReg, nOpc, ,"AC",OemToAnsi(STR0009) ) //"Quanto a exclusao?"
ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg, {|| nOpca := 2,oDlg:End()},;
{|| nOpca := 1,oDlg:End()})
DbSelectArea(cAlias)
dbSelectArea(cAlias)
IF nOpcA == 2
+----------------------------------------------------------------+
| Antes de deletar, verificar se existe movimentacao |
+----------------------------------------------------------------+
dbSelectArea("SE1")
dbSetOrder(3)
IF (dbSeek(cFilial+SED->ED_CODIGO))
Help(" ",1,"A010NAODEL")
lDeleta := .F.
MsUnlock()
Else
dbSelectArea("SE2")
dbSetOrder(2)
IF (dbSeek(cFilial+SED->ED_CODIGO))
Help(" ",1,"A010NAODEL")
lDeleta := .F.
MsUnlock( )
Else
dbSelectArea("SE5")
dbSetOrder(4)
IF (dbSeek(cFilial+SED->ED_CODIGO))
Help(" ",1,"A010NAODEL")
lDeleta := .F.
MsUnlock( )
Endif
Endif
Endif
If lDeleta
+----------------------------------------------------------------+
| Inicio da Protecao via TTS |
+----------------------------------------------------------------+
BEGIN TRANSACTION
dbSelectArea(cAlias)
RecLock(cAlias,.F.,.T.)
dbDelete()
END TRANSACTION
+----------------------------------------------------------------+
| Final da protecao via TTS |
+----------------------------------------------------------------+
Endif
Else
MsUnlock( )
Endif
Exit
Enddo
dbSelectArea("SE1")
dbSetOrder(1)
dbSelectArea("SE2")
dbSetOrder(1)
dbSelectArea("SE5")
dbSetOrder(1)
dbSelectArea(cAlias)
RETURN

Modelo 2

104

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________105

Este m odelo de progr am a ex ibe um cabeçalho com infor m ações pré- det er m inadas, um Br ow se hor izont al
cent r al ( dependente do dicionário de dados) e um rodapé com variáveis de m em ór ia que são at ualizadas
de acor do com os valores preenchidos no Browse horizont al.

As validações do cabeçalho são pr é- determ inadas no progr am a- font e. Já as validações do br owse


horizontal são gener icam ente her dadas do dicionár io de dados.

/*/
+---------------------------------------------------------------------------+
+ Funcao | CTBA120 | Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+-----------+----------+-------+-----------------------+------+-------------+
| Descricao | Cadastro de Criterios de Rateio Externo |
+-----------+---------------------------------------------------------------+
| Sintaxe | CTBA120() |
+-----------+---------------------------------------------------------------+
| Uso | Generico |
+---------------------------------------------------------------------------+
| ATUALIZACOES SOFRIDAS DESDE A CONSTRUCAO NICIAL |
+-----------+--------+------+-----------------------------------------------+
|Programador| Data | BOPS | Motivo da Alteracao |
+-----------+--------+------+-----------------------------------------------+
| | | | |
+-----------+--------+------+-----------------------------------------------+
/*/
#INCLUDE "CTBA120.CH"
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FONT.CH"

105

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________106

FUNCTION CTBA120()
/*/
+----------------------------------------------------------------+
| Define Array contendo as Rotinas a executar do programa +
| ----------- Elementos contidos por dimensao ------------ +
| 1. Nome a aparecer no cabecalho +
| 2. Nome da Rotina associada +
| 3. Usado pela rotina +
| 4. Tipo de Transacao a ser efetuada +
| 1 - Pesquisa e Posiciona em um Banco de Dados +
| 2 - Simplesmente Mostra os Campos +
| 3 - Inclui registros no Bancos de Dados +
| 4 - Altera o registro corrente +
| 5 - Remove o registro corrente do Banco de Dados +
+----------------------------------------------------------------+
/*/
PRIVATE aRotina := { { OemToAnsi(STR0001),"AxPesqui", 0 , 1},; //"Pesquisar"
{ OemToAnsi(STR0002),"Ctb120Cad", 0 , 2},; //"Visualizar"
{ OemToAnsi(STR0003),"Ctb120Cad", 0 , 3},; //"Incluir"
{ OemToAnsi(STR0004),"Ctb120Cad", 0 , 4},; //"Alterar"
{ OemToAnsi(STR0005),"Ctb120Cad", 0 , 5} } //"Excluir"
+----------------------------------------------------------------+
| Define o cabecalho da tela de atualizacoes |
+----------------------------------------------------------------+
Private cCadastro := OemToAnsi(STR0006) //"Criterios de Rateio
+----------------------------------------------------------------+
| Endereca funcao Mbrowse |
+----------------------------------------------------------------+
mBrowse( 6, 1,22,75,"CTJ" )
Return
/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |CTB120CAD| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+---------+-------+-----------------------+------+----------+
| Descricao | Cadastro de Rateio Externo |
+------------+-----------------------------------------------------------+
| Sintaxe | Ctb120Cad(ExpC1,ExpN1,ExpN2) |
+------------+-----------------------------------------------------------+
| Parametros | ExpC1 = Alias do arquivo |
| | ExpN1 = Numero do registro |
| | ExpN2 = Numero da opcao selecionada |
+------------+-----------------------------------------------------------+
| Uso | CTBA120 |
+------------+-----------------------------------------------------------+
/*/
Function Ctb120Cad(cAlias,nReg,nOpc)
Local aSaveArea := GetArea()
Local aCampos := {}
Local aAltera := {}
Local aTpSald := CTBCBOX("CTJ_TPSALD")
Local cArq
Local cRateio
Local cDescRat
lOCAL cMoedaLc
Local cTpSald
Local nOpca := 0
Local oGetDb
Local oDlg
Local oFnt
Local oTpSald
Private aTela := {}
Private aGets := {}
Private aHeader := {}
Private nTotalD := 0
Private nTotalC := 0
+----------------------------------------------------------------+
| Monta aHeader para uso com MSGETDB |
+----------------------------------------------------------------+
aCampos := Ctb120Head(@aAltera)
+----------------------------------------------------------------+
| Cria arquivo Temporario para uso com MSGETDB |

106

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________107

+----------------------------------------------------------------+
Ctb120Cri(aCampos,@cArq)
+----------------------------------------------------------------+
| Carrega dados para MSGETDB |
+----------------------------------------------------------------+
Ctb120Carr(nOpc)
If nOpc == 3 // Inclusao
cRateio := CriaVar("CTJ_RATEIO") // Numero do Rateio
cDescRat := CriaVar("CTJ_DESC") // Descricao do Rateio
cMoedaLC := CriaVar("CTJ_MOEDLC") // Moeda do Lancamento
cTpSald := CriaVar("CTJ_TPSALD") // Tipo do Saldo
Else // Visualizacao / Alteracao / Exclusao
cRateio := CTJ->CTJ_RATEIO
cDescRat := CTJ->CTJ_DESC
cMoedaLC := CTJ->CTJ_MOEDLC
cTpSald := CTJ->CTJ_TPSALD
EndIf
+----------------------------------------------------------------+
| Monta Tela Modelo 2 |
+----------------------------------------------------------------+
DEFINE MSDIALOG oDlg TITLE OemToAnsi(STR0006) From 9,0 To 32,80 OF oMainWnd //"Rateios
Externos"
DEFINE FONT oFnt NAME "Arial" Size 10,15
@ 18, 007 SAY OemToAnsi(STR0007) PIXEL //"Rateio: "

@ 18, 037 MSGET cRateio Picture "9999" SIZE 020,08 When (nOpc == 3);
Valid Ctb120Rat(cRateio) OF oDlg PIXEL

@ 18, 090 Say OemToAnsi(STR0008) PIXEL //"Descricao: "


@ 18, 120 MSGET cDescRat Picture "@!" SIZE 140,08 When (nOpc == 3 .Or. ;
nOpc == 4) Valid !Empty(cDescRat) OF oDlg PIXEL
@ 33, 007 Say OemToAnsi(STR0009) PIXEL // "Moeda:"
@ 32, 037 MSGET cMoedaLc Picture "@!" F3 "CTO" SIZE 020,08 When (nOpc == 3 .Or.;
nOpc == 4) Valid Ct120Moed(cMoedaLC) Of oDlg PIXEL

@ 33, 090 SAY OemToAnsi(STR0010) PIXEL // "Saldo:"


@ 32, 120 MSCOMBOBOX oTpSald VAR cTpSald ITEMS aTpSald When (nOpc == 3 .Or. ;
nOpc == 4) SIZE 45,08 OF oDlg PIXEL Valid (!Empty(cTpSald) .And.;
CtbTpSald(@cTpSald,aTpSald))
+----------------------------------------------------------------+
| Chamada da MSGETDB |
+----------------------------------------------------------------+
oGetDB := MSGetDB():New(044, 005, 120, 315, Iif(nOpc==3,4,nOpc),"CTB120LOK",;
"CTB120TOk", "+CTJ_SEQUEN",.t.,aAltera,,.t.,,"TMP")
+----------------------------------------------------------------+
| Validacao da janela |
+----------------------------------------------------------------+
ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,;
{||nOpca:=1,if(Ctb120TOK(),oDlg:End(),nOpca := 0)},;
{||nOpca:=2,oDlg:End()}) VALID nOpca != 0
IF nOpcA == 1 // Aceita operacao e grava dados
Begin Transaction
Ctb120Gra(cRateio,cDescRat,nOpc,cMoedaLC,cTpSald)
End Transaction
ENDIF
dbSelectArea(cAlias)
+----------------------------------------------------------------+
| Apaga arquivo temporario gerado para MSGETDB |
+----------------------------------------------------------------+
DbSelectArea( "TMP" )
DbCloseArea()
If Select("cArq") = 0
FErase(cArq+GetDBExtension())
EndIf
dbSelectArea("CTJ")
dbSetOrder(1)
Return nOpca
/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |CTB120RAT| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+---------+-------+-----------------------+------+----------+

107

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________108

| Descricao | Verifica existencia do Rateio |


+------------+-----------------------------------------------------------+
| Sintaxe | Ctb120Rat(ExpC1) |
+------------+-----------------------------------------------------------+
| Parametros | ExpC1 = Numero do Rateio |
+------------+-----------------------------------------------------------+
| Retorno | .T./.F. |
+------------+-----------------------------------------------------------+
| Uso | CTBA120 |
+------------+-----------------------------------------------------------+
/*/
Function Ctb120Rat(cRateio)
Local aSaveArea:= GetArea()
Local lRet := .T.
Local nReg
If Empty(cRateio)
lRet := .F.
Else
dbSelectArea("CTJ")
dbSetOrder(1)
nReg := Recno()
If dbSeek(xFilial()+cRateio)
Help(" ",1,"CTJNRATEIO")
lRet := .F.
EndIf
dbGoto(nReg)
EndIf
RestArea(aSaveArea)
Return lRet

/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |CTB120GRA| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+---------+-------+-----------------------+------+----------+
| Descricao | Grava resgistro digitados |
+------------+-----------------------------------------------------------+
| Sintaxe | Ctb120Gra(ExpC1,ExpC2,ExpN1,cExpC3,cExpC4) |
+------------+-----------------------------------------------------------+
| Parametros | ExpC1 = Numero do Rateio |
| | ExpC2 = Descricao do Rateio |
| | ExpN1 = Opcao do Menu (Inclusao / Alteracao etc) |
| | ExpC3 = Moeda do Rateio |
| | ExpC4 = Tipo de Saldo |
+------------+-----------------------------------------------------------+
| Retorno | Nenhum |
+------------+-----------------------------------------------------------+
| Uso | CTBA120 |
+------------+-----------------------------------------------------------+
Function Ctb120Gra(cRateio,cDescRat,nOpc,cMoedaLC,cTpSald)
Local aSaveArea := GetArea()
dbSelectArea("TMP")
dbgotop()
While !Eof()
If !TMP->CTJ_FLAG // Item nao deletado na MSGETDB
If nOpc == 3 .Or. nOpc == 4
dbSelectArea("CTJ")
dbSetOrder(1)
If !(dbSeek(xFilial()+cRateio+TMP->CTJ_SEQUEN))
RecLock( "CTJ", .t. )
CTJ->CTJ_FILIAL := xFilial()
CTJ->CTJ_RATEIO := cRateio
CTJ->CTJ_DESC := cDescRat
CTJ->CTJ_MOEDLC := cMoedaLC
CTJ->CTJ_TPSALD := cTpSald
Else
RecLock( "CTJ", .f. )
CTJ->CTJ_DESC := cDescRat
CTJ->CTJ_MOEDLC := cMoedaLC
CTJ->CTJ_TPSALD := cTpSald
Endif
For nCont := 1 To Len(aHeader)

108

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________109

If (aHeader[nCont][10] != "V" )
FieldPut(FieldPos(aHeader[nCont][2]),;
TMP->(FieldGet(FieldPos(aHeader[nCont][2]))))
EndIf
Next nCont
MsUnLock()
Elseif nOpc == 5 // Se for exclusao
dbSelectArea("CTJ")
dbSetOrder(1)
If dbSeek(xFilial()+cRateio+TMP->CTJ_SEQUEN)
RecLock("CTJ",.F.,.T.)
dbDelete()
MsUnlOCK()
EndIf
EndIf
Else // Item deletado na MSGETDB
dbSelectArea("CTJ")
dbSetOrder(1)
If dbSeek(xFilial()+cRateio+TMP->CTJ_SEQUEN)
RecLock( "CTJ", .f., .t. )
DbDelete()
MsUnlock()
Endif
EndIf
dbSelectArea("TMP")
dbSkip()
Enddo
RestArea(aSaveArea)
Return

/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |CTB120TOK| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+---------+-------+-----------------------+------+----------+
| Descricao | Valida MSGETDB -> Tudo OK |
+------------+-----------------------------------------------------------+
| Sintaxe | Ctb120TOK(ExpC1) |
+------------+-----------------------------------------------------------+
| Parametros | Nenhum |
+------------+-----------------------------------------------------------+
| Retorno | Nenhum |
+------------+-----------------------------------------------------------+
| Uso | CTBA120 |
+------------+-----------------------------------------------------------+
/*/
Function Ctb120TOk()
Local aSaveArea := GetArea()
Local lRet := .T.
Local nTotalD := 0
Local nTotalC := 0
dbSelectArea("TMP")
dbGotop()
While !Eof()
If !TMP->CTJ_FLAG
If !Ctb120LOK()
lRet := .F.
Exit
EndiF
If !Empty(TMP->CTJ_DEBITO)
nTotalD += TMP->CTJ_PERCEN
EndIf
If !Empty(TMP->CTJ_CREDITO)
nTotalC += TMP->CTJ_PERCEN
EndIf
EndIf
dbSkip()
EndDo
nTotalD := Round(nTotalD,2)
nTotalC := Round(nTotalC,2)
If lRet
IF (nTotalD > 0 .And. nTotalD != 100 ).Or. (nTotalC > 0 .And. nTotalC != 100)

109

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________110

Help(" ",1,"CTJ100%")
lRet := .F.
EndIF
EndIf
RestArea(aSaveArea)
Return lRet
/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |CTB120LOK| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+---------+-------+-----------------------+------+----------+
| Descricao | Valida MSGETDB -> LinhaOK |
+------------+-----------------------------------------------------------+
| Sintaxe | Ctb120LOK(ExpC1) |
+------------+-----------------------------------------------------------+
| Parametros | Nenhum |
+------------+-----------------------------------------------------------+
| Retorno | Nenhum |
+------------+-----------------------------------------------------------+
| Uso | CTBA120 |
+------------+-----------------------------------------------------------+
/*/
Function CTB120LOK()
Local lRet := .T.
Local nCont
If !TMP->CTJ_FLAG
If Empty(TMP->CTJ_PERCEN)
Help(" ",1,"CTJVLZERO")
lRet := .F.
EndIf
If lRet
ValidaConta(TMP->CTJ_DEBITO,"1",,,.t.)
EndIf
If lRet
ValidaConta(TMP->CTJ_CREDITO,"2",,,.T.)
EndIf
EndIf
Return lRet
/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |CTB120Cri| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+---------+-------+-----------------------+------+----------+
| Descricao | Cria Arquivo Temporario para MSGETDB |
+------------+-----------------------------------------------------------+
| Sintaxe | Ctb120Cri(ExpA1,ExpC1) |
+------------+-----------------------------------------------------------+
| Parametros | ExpA1 = Matriz com campos a serem criados |
| | ExpC1 = Nome do arquivo temporario |
+------------+-----------------------------------------------------------+
| Retorno | Nenhum |
+------------+-----------------------------------------------------------+
| Uso | CTBA120 |
+------------+-----------------------------------------------------------+
/*/
Function Ctb120Cria(aCampos,cArq)
Local cChave
Local aSaveArea := GetArea()
cChave := "CTJ_SEQUEN"
cArq := CriaTrab(aCampos,.t.)
dbUseArea(.t.,,cArq,"TMP",.f.,.f.)
RestArea(aSaveArea)
Return
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |CTB120Head| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+----------+-------+-----------------------+------+----------+
| Descricao | Montar aHeader para arquivo temporario da MSGETDB |
+------------+------------------------------------------------------------+
| Sintaxe | Ctb120Head(ExpA1) |
+------------+------------------------------------------------------------+
| Parametros | ExpA1 = Matriz com campos que podem ser alterados |
+------------+------------------------------------------------------------+

110

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________111

| Retorno | ExpA1 = Matriz com campos a serem criados no arq temporario|


+------------+------------------------------------------------------------+
| Uso | CTBA120 |
+------------+------------------------------------------------------------+
/*/
Function Ctb120Head(aAltera)
Local aSaveArea:= GetArea()
Local aFora := {"CTJ_RATEIO","CTJ_DESC","CTJ_MOEDLC","CTJ_TPSALD","CTJ_VALOR"}
Local aCampos := {}
Local nCriter := 0
PRIVATE nUsado := 0
// Montagem da matriz aHeader
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("CTJ")
While !EOF() .And. (x3_arquivo == "CTJ")
If Alltrim(x3_campo) == "CTJ_SEQUEN" .Or. ;
x3Uso(x3_usado) .and. cNivel >= x3_nivel
If Ascan(aFora,Trim(X3_CAMPO)) <= 0
nUsado++
AADD(aHeader,{ TRIM(X3Titulo()), x3_campo, x3_picture,;
x3_tamanho, x3_decimal, x3_valid,;
x3_usado, x3_tipo, "TMP", x3_context } )
If Alltrim(x3_campo) <> "CTJ_SEQUEN"
Aadd(aAltera,Trim(X3_CAMPO))
EndIf
EndIF
EndIF
aAdd( aCampos, { SX3->X3_CAMPO, SX3->X3_TIPO, SX3->X3_TAMANHO,;
SX3->X3_DECIMAL } )
dbSkip()
EndDO
Aadd(aCampos,{"CTJ_FLAG","L",1,0})
RestArea(aSaveArea)
Return aCampos
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |CTB120Carr| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+----------+-------+-----------------------+------+----------+
| Descricao | Carrega dados para MSGETDB |
+------------+------------------------------------------------------------+
| Sintaxe | Ctb120Carr(ExpN1) |
+------------+------------------------------------------------------------+
| Parametros | ExpN1 = Opcao do Menu -> Inclusao / Alteracao etc |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |
+------------+------------------------------------------------------------+
| Uso | CTBA120 |
+------------+------------------------------------------------------------+
/*/
Function CTB120Carr(nOpc)
Local aSaveArea:= GetArea()
Local cAlias := "CTJ"
Local nPos
If nOpc != 3 // Visualizacao / Alteracao / Exclusao
cRateio := CTJ->CTJ_RATEIO
dbSelectArea("CTJ")
dbSetOrder(1)
If dbSeek(xFilial()+cRateio)
While !Eof() .And. CTJ->CTJ_FILIAL == xFilial() .And.;
CTJ->CTJ_RATEIO == cRateio
dbSelectArea("TMP")
dbAppend()
For nCont := 1 To Len(aHeader)
nPos := FieldPos(aHeader[nCont][2])
If (aHeader[nCont][08] <> "M" .And. aHeader[nCont][10] <> "V" )
FieldPut(nPos,(cAlias)-
>(FieldGet(FieldPos(aHeader[nCont][2]))))
EndIf
Next nCont
TMP->CTJ_FLAG := .F.

111

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________112

dbSelectArea("CTJ")
dbSkip()
EndDo
EndIf
Else
dbSelectArea("TMP")
dbAppend()
For nCont := 1 To Len(aHeader)
If (aHeader[nCont][08] <> "M" .And. aHeader[nCont][10] <> "V" )
nPos := FieldPos(aHeader[nCont][2])
FieldPut(nPos,CriaVar(aHeader[nCont][2],.T.))
EndIf
Next nCont
TMP->CTJ_FLAG := .F.
TMP->CTJ_SEQUEN:= "001"
EndIf
dbSelectArea("TMP")
dbGoTop()
RestArea(aSaveArea)
Return
/*/
+------------+---------+-------+-----------------------+------+----------+
| Funcao |CT120Moed| Autor | Pilar S. Albaladejo | Data | 24/07/00 |
+------------+---------+-------+-----------------------+------+----------+
| Descricao | Valida Moeda do Lancamento |
+------------+-----------------------------------------------------------+
| Sintaxe | Ctb120Moed(ExpC1) |
+------------+-----------------------------------------------------------+
| Parametros | ExpC1 = Moeda a ser validada |
+------------+-----------------------------------------------------------+
| Retorno | .T./.F. |
+------------+-----------------------------------------------------------+
| Uso | CTBA120 |
+------------+-----------------------------------------------------------+
/*/
Function Ct120MoedLC(cMoeda)
Local aCtbMoeda:= {}
Local lRet := .T.
aCtbMoeda := CtbMoeda(cMoeda)
If Empty(aCtbMoeda[1])
Help(" ",1,"NOMOEDA")
lRet := .F.
Endif
Return lRet

Modelo 3
Este m odelo de progr am a é a j unção dos Modelos 1 e 2. Nele é exibido um Br ow se v er t ical e um Br owse
horizontal ( am bos dependentes do dicionár io de dados) . As validações são gener icam ente her dadas do
dicionário de dados.

112

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________113

/*/
+---------------------------------------------------------------------------+
+ Funcao | FATA010 | Autor | Eduardo Riera | Data | 11/01/00 |
+-----------+----------+-------+-----------------------+------+-------------+
| Descricao | Cadastro de Processo de Vendas |
+-----------+---------------------------------------------------------------+
| Sintaxe | FATA010() |
+-----------+---------------------------------------------------------------+
| Uso | Generico |
+---------------------------------------------------------------------------+
| ATUALIZACOES SOFRIDAS DESDE A CONSTRUCAO NICIAL |
+-----------+--------+------+-----------------------------------------------+
|Programador| Data | BOPS | Motivo da Alteracao |
+-----------+--------+------+-----------------------------------------------+
| | | | |
+-----------+--------+------+-----------------------------------------------+
/*/
#INCLUDE "FATA010.CH"
#INCLUDE "FIVEWIN.CH"
#DEFINE APOS { 15, 1, 70, 315 }
Function Fata010()
/*/
+----------------------------------------------------------------+
| Define Array contendo as Rotinas a executar do programa +
| ----------- Elementos contidos por dimensao ------------ +
| 1. Nome a aparecer no cabecalho +
| 2. Nome da Rotina associada +
| 3. Usado pela rotina +

113

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________114

| 4. Tipo de Transacao a ser efetuada +


| 1 - Pesquisa e Posiciona em um Banco de Dados +
| 2 - Simplesmente Mostra os Campos +
| 3 - Inclui registros no Bancos de Dados +
| 4 - Altera o registro corrente +
| 5 - Remove o registro corrente do Banco de Dados +
+----------------------------------------------------------------+
/*/
PRIVATE cCadastro := OemToAnsi(STR0001) //"Processo de Venda"
PRIVATE aRotina := { { OemToAnsi(STR0002),"AxPesqui" ,0,1},; //"Pesquisar"
{ OemToAnsi(STR0003),"Ft010Visua",0,2},; //"Visual"
{ OemToAnsi(STR0004),"Ft010Inclu",0,3},; //"Incluir"
{ OemToAnsi(STR0005),"Ft010Alter",0,4},; //"Alterar"
{ OemToAnsi(STR0006),"Ft010Exclu",0,5} } //"Exclusao"

If !Empty( Select( "AC9" ) )


AAdd( aRotina, { STR0013,"MsDocument",0,4} )
EndIf
mBrowse( 6, 1,22,75,"AC1")
Return(.T.)

/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010Visua| Autor |Eduardo Riera | Data |13.01.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de Tratamento da Visualizacao |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010Visua(ExpC1,ExpN2,ExpN3) |
+------------+------------------------------------------------------------+
| Parametros | ExpC1: Alias do arquivo |
| | ExpN2: Registro do Arquivo |
| | ExpN3: Opcao da MBrowse |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/
Function Ft010Visua(cAlias,nReg,nOpcx)
Local aArea := GetArea()
Local oGetDad
Local oDlg
Local nUsado := 0
Local nCntFor := 0
Local nOpcA := 0
Local lContinua := .T.
Local lQuery := .F.
Local cCadastro := OemToAnsi(STR0001) //"Processo de Venda"
Local cQuery := ""
Local cTrab := "AC2"
Local bWhile := {|| .T. }
Local aObjects := {}
Local aPosObj := {}
Local aSizeAut := MsAdvSize()
PRIVATE aHEADER := {}
PRIVATE aCOLS := {}
PRIVATE aGETS := {}
PRIVATE aTELA := {}
+----------------------------------------------------------------+
| Montagem de Variaveis de Memoria |
+----------------------------------------------------------------+
dbSelectArea("AC1")
dbSetOrder(1)
For nCntFor := 1 To FCount()
M->&(FieldName(nCntFor)) := FieldGet(nCntFor)
Next nCntFor
+----------------------------------------------------------------+
| Montagem do aHeader |
+----------------------------------------------------------------+
dbSelectArea("SX3")
dbSetOrder(1)

114

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________115

dbSeek("AC2")
While ( !Eof() .And. SX3->X3_ARQUIVO == "AC2" )
If ( X3USO(SX3->X3_USADO) .And. cNivel >= SX3->X3_NIVEL )
nUsado++
Aadd(aHeader,{ TRIM(X3Titulo()),;
TRIM(SX3->X3_CAMPO),;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
SX3->X3_USADO,;
SX3->X3_TIPO,;
SX3->X3_ARQUIVO,;
SX3->X3_CONTEXT } )
EndIf
dbSelectArea("SX3")
dbSkip()
EndDo
+----------------------------------------------------------------+
| Montagem do aCols |
+----------------------------------------------------------------+
dbSelectArea("AC2")
dbSetOrder(1)
#IFDEF TOP
If ( TcSrvType()!="AS/400" )
lQuery := .T.
cQuery := "SELECT *,R_E_C_N_O_ AC2RECNO "
cQuery += "FROM "+RetSqlName("AC2")+" AC2 "
cQuery += "WHERE AC2.AC2_FILIAL='"+xFilial("AC2")+"' AND "
cQuery += "AC2.AC2_PROVEN='"+AC1->AC1_PROVEN+"' AND "
cQuery += "AC2.D_E_L_E_T_<>'*' "
cQuery += "ORDER BY "+SqlOrder(AC2->(IndexKey()))

cQuery := ChangeQuery(cQuery)
cTrab := "FT010VIS"
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cTrab,.T.,.T.)
For nCntFor := 1 To Len(aHeader)
TcSetField(cTrab,AllTrim(aHeader[nCntFor][2]),aHeader[nCntFor,8],aHeader[nCnt
For,4],aHeader[nCntFor,5])
Next nCntFor
Else
#ENDIF
AC2->(dbSeek(xFilial("AC2")+AC1->AC1_PROVEN))
bWhile := {|| xFilial("AC2") == AC2->AC2_FILIAL .And.;
AC1->AC1_PROVEN == AC2->AC2_PROVEN }
#IFDEF TOP
EndIf
#ENDIF

While ( !Eof() .And. Eval(bWhile) )


aadd(aCOLS,Array(nUsado+1))
For nCntFor := 1 To nUsado
If ( aHeader[nCntFor][10] != "V" )
aCols[Len(aCols)][nCntFor] := FieldGet(FieldPos(aHeader[nCntFor][2]))
Else
If ( lQuery )
AC2->(dbGoto((cTrab)->AC2RECNO))
EndIf
aCols[Len(aCols)][nCntFor] := CriaVar(aHeader[nCntFor][2])
EndIf
Next nCntFor
aCOLS[Len(aCols)][Len(aHeader)+1] := .F.
dbSelectArea(cTrab)
dbSkip()
EndDo
If ( lQuery )
dbSelectArea(cTrab)
dbCloseArea()
dbSelectArea(cAlias)
EndIf
aObjects := {}

115

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________116

AAdd( aObjects, { 315, 50, .T., .T. } )


AAdd( aObjects, { 100, 100, .T., .T. } )
aInfo := { aSizeAut[ 1 ], aSizeAut[ 2 ], aSizeAut[ 3 ], aSizeAut[ 4 ], 3, 3 }
aPosObj := MsObjSize( aInfo, aObjects, .T. )
DEFINE MSDIALOG oDlg TITLE cCadastro From aSizeAut[7],00 To aSizeAut[6],aSizeAut[5] OF
oMainWnd PIXEL
EnChoice( cAlias ,nReg, nOpcx, , , , , aPosObj[1], , 3 )
oGetDad := MSGetDados():New (aPosObj[2,1], aPosObj[2,2], aPosObj[2,3], aPosObj[2,4],
nOpcx, "Ft010LinOk" ,"AllwaysTrue","",.F.)
ACTIVATE MSDIALOG oDlg ON INIT EnchoiceBar(oDlg,{||oDlg:End()},{||oDlg:End()})
RestArea(aArea)
Return(.T.)
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010Inclu|Autor |Eduardo Riera | Data |13.01.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de Tratamento da Inclusao |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010Inclu(ExpC1,ExpN2,ExpN3) |
+------------+------------------------------------------------------------+
| Parametros | ExpC1: Alias do arquivo |
| | ExpN2: Registro do Arquivo |
| | ExpN3: Opcao da MBrowse |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/
Function Ft010Inclu(cAlias,nReg,nOpcx)
Local aArea := GetArea()
Local cCadastro := OemToAnsi(STR0001) //"Processo de Venda"
Local oGetDad
Local oDlg
Local nUsado := 0
Local nCntFor := 0
Local nOpcA := 0
Local aObjects := {}
Local aPosObj := {}
Local aSizeAut := MsAdvSize()
PRIVATE aHEADER := {}
PRIVATE aCOLS := {}
PRIVATE aGETS := {}
PRIVATE aTELA := {}
+----------------------------------------------------------------+
| Montagem das Variaveis de Memoria |
+----------------------------------------------------------------+
dbSelectArea("AC1")
dbSetOrder(1)
For nCntFor := 1 To FCount()
M->&(FieldName(nCntFor)) := CriaVar(FieldName(nCntFor))
Next nCntFor
+----------------------------------------------------------------+
| Montagem da aHeader |
+----------------------------------------------------------------+
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("AC2")
While ( !Eof() .And. SX3->X3_ARQUIVO == "AC2" )
If ( X3USO(SX3->X3_USADO) .And. cNivel >= SX3->X3_NIVEL )
nUsado++
Aadd(aHeader,{ TRIM(X3Titulo()),;
TRIM(SX3->X3_CAMPO),;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
SX3->X3_USADO,;
SX3->X3_TIPO,;
SX3->X3_ARQUIVO,;
SX3->X3_CONTEXT } )

116

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________117

EndIf
dbSelectArea("SX3")
dbSkip()
EndDo
+----------------------------------------------------------------+
| Montagem da Acols |
+----------------------------------------------------------------+
aadd(aCOLS,Array(nUsado+1))
For nCntFor := 1 To nUsado
aCols[1][nCntFor] := CriaVar(aHeader[nCntFor][2])
Next nCntFor
aCOLS[1][Len(aHeader)+1] := .F.
aObjects := {}
AAdd( aObjects, { 315, 50, .T., .T. } )
AAdd( aObjects, { 100, 100, .T., .T. } )
aInfo := { aSizeAut[ 1 ], aSizeAut[ 2 ], aSizeAut[ 3 ], aSizeAut[ 4 ], 3, 3 }
aPosObj := MsObjSize( aInfo, aObjects, .T. )
DEFINE MSDIALOG oDlg TITLE cCadastro From aSizeAut[7],00 To aSizeAut[6],aSizeAut[5] OF
oMainWnd PIXEL
EnChoice( cAlias ,nReg, nOpcx, , , , , aPosObj[1], , 3 )
oGetDad := MSGetDados():New(aPosObj[2,1], aPosObj[2,2], aPosObj[2,3], aPosObj[2,4],
nOpcx, "Ft010LinOk", "Ft010TudOk","",.T.)
ACTIVATE MSDIALOG oDlg ;
ON INIT EnchoiceBar(oDlg, {||nOpcA:=If(oGetDad:TudoOk() .And. Obrigatorio(aGets,aTela),
1,0),If(nOpcA==1,oDlg:End(),Nil)},{||oDlg:End()})
If ( nOpcA == 1 )
Begin Transaction
Ft010Grv(1)
If ( __lSX8 )
ConfirmSX8()
EndIf
EvalTrigger()
End Transaction
Else
If ( __lSX8 )
RollBackSX8()
EndIf
EndIf
RestArea(aArea)
Return(.T.)
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010Alter| Autor |Eduardo Riera | Data |13.01.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de Tratamento da Alteracao |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010Alter(ExpC1,ExpN2,ExpN3) |
+------------+------------------------------------------------------------+
| Parametros | ExpC1: Alias do arquivo |
| | ExpN2: Registro do Arquivo |
| | ExpN3: Opcao da MBrowse |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/
Function Ft010Alter(cAlias,nReg,nOpcx)
Local aArea := GetArea()
Local cCadastro := OemToAnsi(STR0001) //"Processo de Venda"
Local oGetDad
Local oDlg
Local nUsado := 0
Local nCntFor := 0
Local nOpcA := 0
Local lContinua := .T.
Local cQuery := ""
Local cTrab := "AC2"
Local bWhile := {|| .T. }
Local aObjects := {}
Local aPosObj := {}

117

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________118

Local aSizeAut := MsAdvSize()


PRIVATE aHEADER := {}
PRIVATE aCOLS := {}
PRIVATE aGETS := {}
PRIVATE aTELA := {}
+----------------------------------------------------------------+
| Montagem das Variaveis de Memoria |
+----------------------------------------------------------------+
dbSelectArea("AC1")
dbSetOrder(1)
lContinua := SoftLock("AC1")
If ( lContinua )
For nCntFor := 1 To FCount()
M->&(FieldName(nCntFor)) := FieldGet(nCntFor)
Next nCntFor
+----------------------------------------------------------------+
| Montagem da aHeader |
+----------------------------------------------------------------+
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("AC2")
While ( !Eof() .And. SX3->X3_ARQUIVO == "AC2" )
If ( X3USO(SX3->X3_USADO) .And. cNivel >= SX3->X3_NIVEL )
nUsado++
Aadd(aHeader,{ TRIM(X3Titulo()),;
TRIM(SX3->X3_CAMPO),;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
SX3->X3_USADO,;
SX3->X3_TIPO,;
SX3->X3_ARQUIVO,;
SX3->X3_CONTEXT } )
EndIf
dbSelectArea("SX3")
dbSkip()
EndDo
+----------------------------------------------------------------+
| Montagem da aCols |
+----------------------------------------------------------------+
dbSelectArea("AC2")
dbSetOrder(1)
#IFDEF TOP
If ( TcSrvType()!="AS/400" )
lQuery := .T.
cQuery := "SELECT *,R_E_C_N_O_ AC2RECNO "
cQuery += "FROM "+RetSqlName("AC2")+" AC2 "
cQuery += "WHERE AC2.AC2_FILIAL='"+xFilial("AC2")+"' AND "
cQuery += "AC2.AC2_PROVEN='"+AC1->AC1_PROVEN+"' AND "
cQuery += "AC2.D_E_L_E_T_<>'*' "
cQuery += "ORDER BY "+SqlOrder(AC2->(IndexKey()))

cQuery := ChangeQuery(cQuery)
cTrab := "FT010VIS"
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cTrab,.T.,.T.)
For nCntFor := 1 To Len(aHeader)
TcSetField(cTrab,AllTrim(aHeader[nCntFor][2]),aHeader[nCntFor,8],;
Header[nCntFor,4],aHeader[nCntFor,5])
Next nCntFor
Else
#ENDIF
AC2->(dbSeek(xFilial("AC2")+AC1->AC1_PROVEN))
bWhile := {|| xFilial("AC2") == AC2->AC2_FILIAL .And.;
AC1->AC1_PROVEN == AC2->AC2_PROVEN }
#IFDEF TOP
EndIf
#ENDIF
While ( !Eof() .And. Eval(bWhile) )
aadd(aCOLS,Array(nUsado+1))
For nCntFor := 1 To nUsado

118

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________119

If ( aHeader[nCntFor][10] != "V" )
aCols[Len(aCols)][nCntFor] :=
FieldGet(FieldPos(aHeader[nCntFor][2]))
Else
If ( lQuery )
AC2->(dbGoto((cTrab)->AC2RECNO))
EndIf
aCols[Len(aCols)][nCntFor] := CriaVar(aHeader[nCntFor][2])
EndIf
Next nCntFor
aCOLS[Len(aCols)][Len(aHeader)+1] := .F.
dbSelectArea(cTrab)
dbSkip()
EndDo
If ( lQuery )
dbSelectArea(cTrab)
dbCloseArea()
dbSelectArea(cAlias)
EndIf
EndIf
If ( lContinua )
aObjects := {}
AAdd( aObjects, { 315, 50, .T., .T. } )
AAdd( aObjects, { 100, 100, .T., .T. } )
aInfo := { aSizeAut[ 1 ], aSizeAut[ 2 ], aSizeAut[ 3 ], aSizeAut[ 4 ], 3, 3 }
aPosObj := MsObjSize( aInfo, aObjects, .T. )
DEFINE MSDIALOG oDlg TITLE cCadastro From aSizeAut[7],00 To aSizeAut[6],aSizeAut[5]
;
OF MainWnd PIXEL
EnChoice( cAlias ,nReg, nOpcx, , , , , aPosObj[1], , 3 )
oGetDad :=
MSGetDados():New(aPosObj[2,1],aPosObj[2,2],aPosObj[2,3],aPosObj[2,4],nOpcx,;
"Ft010LinOk","Ft010TudOk","",.T.)
ACTIVATE MSDIALOG oDlg ;
ON INIT
EnchoiceBar(oDlg,{||nOpca:=If(oGetDad:TudoOk().And.Obrigatorio(aGets,aTela),1,0),;
If(nOpcA==1,oDlg:End(),Nil)},{||oDlg:End()})
If ( nOpcA == 1 )
Begin Transaction
Ft010Grv(2)
If ( __lSX8 )
ConfirmSX8()
EndIf
EvalTrigger()
End Transaction
Else
If ( __lSX8 )
RollBackSX8()
EndIf
EndIf
EndIf
Endif
RestArea(aArea)
Return(.T.)
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010Exclu| Autor |Eduardo Riera | Data |13.01.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de Tratamento da Exclusao |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010Exclu(ExpC1,ExpN2,ExpN3) |
+------------+------------------------------------------------------------+
| Parametros | ExpC1: Alias do arquivo |
| | ExpN2: Registro do Arquivo |
| | ExpN3: Opcao da MBrowse |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/

119

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________120

Function Ft010Exclu(cAlias,nReg,nOpcx)
Local aArea := GetArea()
Local cCadastro := OemToAnsi(STR0001) //"Processo de Venda"
Local oGetDad
Local oDlg
Local nUsado := 0
Local nCntFor := 0
Local nOpcA := 0
Local lContinua := .T.
Local cQuery := ""
Local cTrab := "AC2"
Local bWhile := {|| .T. }
Local aObjects := {}
Local aPosObj := {}
Local aSizeAut := MsAdvSize()
PRIVATE aHEADER := {}
PRIVATE aCOLS := {}
PRIVATE aGETS := {}
PRIVATE aTELA := {}
+----------------------------------------------------------------+
| Montagem das Variaveis de Memoria |
+----------------------------------------------------------------+
dbSelectArea("AC1")
dbSetOrder(1)
lContinua := SoftLock("AC1")
If ( lContinua )
For nCntFor := 1 To FCount()
M->&(FieldName(nCntFor)) := FieldGet(nCntFor)
Next nCntFor
+----------------------------------------------------------------+
| Montagem da aHeader |
+----------------------------------------------------------------+
dbSelectArea("SX3")
dbSetOrder(1)
dbSeek("AC2")
While ( !Eof() .And. SX3->X3_ARQUIVO == "AC2" )
If ( X3USO(SX3->X3_USADO) .And. cNivel >= SX3->X3_NIVEL )
nUsado++
Aadd(aHeader,{ TRIM(X3Titulo()),;
TRIM(SX3->X3_CAMPO),;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
SX3->X3_USADO,;
SX3->X3_TIPO,;
SX3->X3_ARQUIVO,;
SX3->X3_CONTEXT } )
EndIf
dbSelectArea("SX3")
dbSkip()
EndDo
+----------------------------------------------------------------+
| Montagek da aCols |
+----------------------------------------------------------------+
dbSelectArea("AC2")
dbSetOrder(1)
#IFDEF TOP
If ( TcSrvType()!="AS/400" )
lQuery := .T.
cQuery := "SELECT *,R_E_C_N_O_ AC2RECNO "
cQuery += "FROM "+RetSqlName("AC2")+" AC2 "
cQuery += "WHERE AC2.AC2_FILIAL='"+xFilial("AC2")+"' AND "
cQuery += "AC2.AC2_PROVEN='"+AC1->AC1_PROVEN+"' AND "
cQuery += "AC2.D_E_L_E_T_<>'*' "
cQuery += "ORDER BY "+SqlOrder(AC2->(IndexKey()))

cQuery := ChangeQuery(cQuery)
cTrab := "FT010VIS"
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),cTrab,.T.,.T.)
For nCntFor := 1 To Len(aHeader)

120

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________121

TcSetField(cTrab,AllTrim(aHeader[nCntFor][2]),aHeader[nCntFor,8],;
aHeader[nCntFor,4],aHeader[nCntFor,5])
Next nCntFor
Else
#ENDIF
AC2->(dbSeek(xFilial("AC2")+AC1->AC1_PROVEN))
bWhile := {|| xFilial("AC2") == AC2->AC2_FILIAL .And.;
AC1->AC1_PROVEN == AC2->AC2_PROVEN }
#IFDEF TOP
EndIf
#ENDIF
While ( !Eof() .And. Eval(bWhile) )
aadd(aCOLS,Array(nUsado+1))
For nCntFor := 1 To nUsado
If ( aHeader[nCntFor][10] != "V" )
aCols[Len(aCols)][nCntFor] :=
FieldGet(FieldPos(aHeader[nCntFor][2]))
Else
If ( lQuery )
AC2->(dbGoto((cTrab)->AC2RECNO))
EndIf
aCols[Len(aCols)][nCntFor] := CriaVar(aHeader[nCntFor][2])
EndIf
Next nCntFor
aCOLS[Len(aCols)][Len(aHeader)+1] := .F.
dbSelectArea(cTrab)
dbSkip()
EndDo
If ( lQuery )
dbSelectArea(cTrab)
dbCloseArea()
dbSelectArea(cAlias)
EndIf
EndIf
If ( lContinua )
aObjects := {}
AAdd( aObjects, { 315, 50, .T., .T. } )
AAdd( aObjects, { 100, 100, .T., .T. } )
aInfo := { aSizeAut[ 1 ], aSizeAut[ 2 ], aSizeAut[ 3 ], aSizeAut[ 4 ], 3, 3 }
aPosObj := MsObjSize( aInfo, aObjects, .T. )

DEFINE MSDIALOG oDlg TITLE cCadastro From aSizeAut[7],00 To ;


aSizeAut[6],aSizeAut[5] OF oMainWnd PIXEL

EnChoice( cAlias ,nReg, nOpcx, , , , , aPosObj[1], , 3 )


oGetDad :=
MSGetDados():New(aPosObj[2,1],aPosObj[2,2],aPosObj[2,3],aPosObj[2,4],nOpcx,;
"Ft010LinOk","Ft010TudOk","",.F.)
ACTIVATE MSDIALOG oDlg ;
ON INIT
EnchoiceBar(oDlg,{||nOpca:=If(oGetDad:TudoOk(),1,0),If(nOpcA==1,oDlg:End(),Nil)},;
{||oDlg:End()})
If ( nOpcA == 1 )
Begin Transaction
If Ft010DelOk()
Ft010Grv(3)
EvalTrigger()
EndIf
End Transaction
EndIf
EndIf
RestArea(aArea)
Return(.T.)

/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010LinOK| Autor |Eduardo Riera | Data |13.01.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de Validacao da linha OK |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010LinOk() |

121

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________122

+------------+------------------------------------------------------------+
| Parametros | Nennhum |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/
Function Ft010LinOk()
Local lRetorno:= .T.
Local nPStage := aScan(aHeader,{|x| AllTrim(x[2])=="AC2_STAGE"})
Local nPDescri:= aScan(aHeader,{|x| AllTrim(x[2])=="AC2_DESCRI"})
Local nCntFor := 0
Local nUsado := Len(aHeader)
If ( !aCols[n][nUsado+1] )
+----------------------------------------------------------------+
| Verifica os campos obrigatorios |
+----------------------------------------------------------------+
If ( nPStage == 0 .Or. nPDescri == 0 )
Help(" ",1,"OBRIGAT")
lRetorno := .F.
EndIf
If ( lRetorno .And. (Empty(aCols[n][nPStage]) .Or. Empty(aCols[n][nPDescri])))
Help(" ",1,"OBRIGAT")
lRetorno := .F.
EndIf
+----------------------------------------------------------------+
| Verifica se não há estagios repetidos |
+----------------------------------------------------------------+
If ( nPStage != 0 .And. lRetorno )
For nCntFor := 1 To Len(aCols)
If ( nCntFor != n .And. !aCols[nCntFor][nUsado+1])
If ( aCols[n][nPStage] == aCols[nCntFor][nPStage] )
Help(" ",1,"FT010LOK01")
lRetorno := .F.
EndIf
EndIf
Next nCntFor
EndIf
EndIf
Return(lRetorno)
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010Grv | Autor |Eduardo Riera | Data |13.01.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de Gravacao do Processe de Venda |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010Grv(ExpN1) |
+------------+------------------------------------------------------------+
| Parametros | ExpN1: Opcao do Menu (Inclusao / Alteracao / Exclusao) |
+------------+------------------------------------------------------------+
| Retorno | .T. |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/
Static Function Ft010Grv(nOpc)
Local aArea := GetArea()
Local aUsrMemo := If( ExistBlock( "FT010MEM" ), ExecBlock( "FT010MEM", .F.,.F. ), {} )
Local aMemoAC1 := {}
Local aMemoAC2 := {}
Local aRegistro := {}
Local cQuery := ""
Local lGravou := .F.
Local nCntFor := 0
Local nCntFor2 := 0
Local nUsado := Len(aHeader)
Local nPStage := aScan(aHeader,{|x| AllTrim(x[2])=="AC2_STAGE"})
Local nPMEMO := aScan(aHeader,{|x| AllTrim(x[2])=="AC2_MEMO"})

If ValType( aUsrMemo ) == "A" .And. Len( aUsrMemo ) > 0

122

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________123

For nLoop := 1 to Len( aUsrMemo )


If aUsrMemo[ nLoop, 1 ] == "AC1"
AAdd( aMemoAC1, { aUsrMemo[ nLoop, 2 ], aUsrMemo[ nLoop, 3 ] } )

ElseIf aUsrMemo[ nLoop, 1 ] == "AC2"


AAdd( aMemoAC2, { aUsrMemo[ nLoop, 2 ], aUsrMemo[ nLoop, 3 ] } )

EndIf
Next nLoop
EndIf
+----------------------------------------------------------------+
| Guarda os registros em um array para atualizacao |
+----------------------------------------------------------------+
dbSelectArea("AC2")
dbSetOrder(1)
#IFDEF TOP
If ( TcSrvType()!="AS/400" )
cQuery := "SELECT AC2.R_E_C_N_O_ AC2RECNO "
cQuery += "FROM "+RetSqlName("AC2")+" AC2 "
cQuery += "WHERE AC2.AC2_FILIAL='"+xFilial("AC2")+"' AND "
cQuery += "AC2.AC2_PROVEN='"+M->AC1_PROVEN+"' AND "
cQuery += "AC2.D_E_L_E_T_<>'*' "
cQuery += "ORDER BY "+SqlOrder(AC2->(IndexKey()))

cQuery := ChangeQuery(cQuery)
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"FT010GRV",.T.,.T.)
dbSelectArea("FT010GRV")
While ( !Eof() )
aadd(aRegistro,AC2RECNO)
dbSelectArea("FT010GRV")
dbSkip()
EndDo
dbSelectArea("FT010GRV")
dbCloseArea()
dbSelectArea("AC2")
Else
#ENDIF
dbSeek(xFilial("AC2")+M->AC1_PROVEN)
While ( !Eof() .And. xFilial("AC2") == AC2->AC2_FILIAL .And.;
M->AC1_PROVEN == AC2->AC2_PROVEN )
aadd(aRegistro,AC2->(RecNo()))
dbSelectArea("AC2")
dbSkip()
EndDo
#IFDEF TOP
EndIf
#ENDIF
Do Case
+----------------------------------------------------------------+
| Inclusao / Alteracao |
+----------------------------------------------------------------+
Case nOpc != 3
For nCntFor := 1 To Len(aCols)
If ( nCntFor > Len(aRegistro) )
If ( !aCols[nCntFor][nUsado+1] )
RecLock("AC2",.T.)
EndIf
Else
AC2->(dbGoto(aRegistro[nCntFor]))
RecLock("AC2")
EndIf
If ( !aCols[nCntFor][nUsado+1] )
lGravou := .T.
For nCntFor2 := 1 To nUsado
If ( aHeader[nCntFor2][10] != "V" )
FieldPut(FieldPos(aHeader[nCntFor2][2]),aCols[nCntFor][nCn
tFor2])
EndIf
Next nCntFor2
+----------------------------------------------------------------+
| Grava os campos obrigatorios |

123

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________124

+----------------------------------------------------------------+
AC2->AC2_FILIAL := xFilial("AC2")
AC2->AC2_PROVEN := M->AC1_PROVEN
If ( nPMemo != 0 .And. !Empty(aCols[nCntFor][nPMemo]))
MSMM(AC2-
>AC2_CODMEM,,,aCols[nCntFor][nPMemo],1,,,"AC2","AC2_CODMEM")
EndIf
+----------------------------------------------------------------+
| Grava os campos memo de usuario |
+----------------------------------------------------------------+
For nLoop := 1 To Len( aMemoAC2 )
MSMM(AC2->(FieldGet(aMemoAC2[nLoop,1])),,, ;
DFieldGet( aMemoAC2[nLoop,2], nCntFor
),1,,,"AC2",aMemoAC2[nLoop,1])
Next nLoop
Else
If ( nCntFor <= Len(aRegistro) )
dbDelete()
MSMM(AC2->AC2_CODMEM,,,,2)

+----------------------------------------------------------------
+
| Exclui os campos memo de usuario
|
+----------------------------------------------------------------
+
For nLoop := 1 To Len( aMemoAC2 )
MSMM(aMemoAC2[nLoop,1],,,,2)
Next nLoop

EndIf
EndIf
MsUnLock()
Next nCntFor
+----------------------------------------------------------------+
| Exclusao |
+----------------------------------------------------------------+
OtherWise
For nCntFor := 1 To Len(aRegistro)
AC2->(dbGoto(aRegistro[nCntFor]))
RecLock("AC2")
dbDelete()
MsUnLock()
MSMM(AC2->AC2_CODMEM,,,,2)
Next nCntFor

If !Empty( Select( "AC9" ) )


+----------------------------------------------------------------+
| Exclui a amarracao de conhecimento |
+----------------------------------------------------------------+
MsDocument( "AC1", AC1->( Recno() ), 2, , 3 )
EndIf

EndCase
+----------------------------------------------------------------+
| Atualizacao do cabecalho |
+----------------------------------------------------------------+
dbSelectArea("AC1")
dbSetOrder(1)
If ( MsSeek(xFilial("AC1")+M->AC1_PROVEN) )
RecLock("AC1")
Else
If ( lGravou )
RecLock("AC1",.T.)
EndIf
EndIf
If ( !lGravou )
dbDelete()
MSMM(AC1->AC1_CODMEM,,,,2)

+----------------------------------------------------------------+

124

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________125

| Exclui os campos memo de usuario |


+----------------------------------------------------------------+
For nLoop := 1 To Len( aMemoAC1 )
MSMM( AC1->( FieldGet( aMemoAC1[ nLoop, 1 ] ) ),,,,2)
Next nLoop
Else
For nCntFor := 1 To AC1->(FCount())
If ( FieldName(nCntFor)!="AC1_FILIAL" )
FieldPut(nCntFor,M->&(FieldName(nCntFor)))
Else
AC1->AC1_FILIAL := xFilial("AC1")
EndIf
Next nCntFor
MSMM(AC1->AC1_CODMEM,,,M->AC1_MEMO,1,,,"AC1","AC1_CODMEM")
+----------------------------------------------------------------+
| Grava os campos memo de usuario |
+----------------------------------------------------------------+
For nLoop := 1 To Len( aMemoAC1 )
MSMM( AC1->( FieldGet( aMemoAC1[nLoop,1] ) ),,,;
M->&( aMemoAC1[nLoop,2] ),1,,,"AC1",aMemoAC1[nLoop,1])
Next nLoop
EndIf
MsUnLock()
+----------------------------------------------------------------+
| Restaura integridade da rotina |
+----------------------------------------------------------------+
RestArea(aArea)
Return( .T. )
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010TudOK| Autor |Eduardo Riera | Data |13.01.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao TudoOK |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010TudOK() |
+------------+------------------------------------------------------------+
| Parametros | Nenhum |
+------------+------------------------------------------------------------+
| Retorno | .T./.F. |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/
Function Ft010TudOk()
Local lRet := .T.
Local nPosRelev := GDFieldPos( "AC2_RELEVA" )
Local nPosStage := GDFieldPos( "AC2_STAGE" )
Local nLoop := 0
Local nTotal := 0
Local nPosDel := Len( aHeader ) + 1
If !Empty( AScan( aCols, { |x| x[nPosRelev] > 0 } ) )
For nLoop := 1 To Len( aCols )
If !aCols[ nLoop, nPosDel ]
nTotal += aCols[ nLoop, nPosRelev ]
Else
+----------------------------------------------------------------+
| Permite excluir apenas se não estiver em uso por oportunidade |
+----------------------------------------------------------------+

AD1->( dbSetOrder( 5 ) )
If AD1->( dbSeek( xFilial( "AD1" ) + M->AC1_PROVEN +
aCols[nLoop,nPosStage] ) )
Aviso( STR0007, STR0011 + AllTrim( aCols[nLoop,nPosStage] ) + ;
STR0012, { STR0009 }, 2 ) ;
// Atencao // "A etapa " // " nao pode ser excluida pois esta em
uso por uma ou mais // oportunidades !"
lRet := .F.
Exit

EndIf

125

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________126

EndIf
Next nLoop

If lRet
If nTotal <> 100
Aviso( STR0007, STR0008, ;
{ STR0009 }, 2 ) //"Atencao !"###"A soma dos valores de relevancia
deve ser igual a 100% //!"###"Fechar"
lRet := .F.
EndIf
EndIf
EndIf
Return( lRet )
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Ft010DelOk| Autor |Sergio Silveira | Data |18.01.2001|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Validacao da Exclusao |
+------------+------------------------------------------------------------+
| Sintaxe | Ft010DelOk() |
+------------+------------------------------------------------------------+
| Parametros | Nenhum |
+------------+------------------------------------------------------------+
| Retorno | .T./.F. |
+------------+------------------------------------------------------------+
| Uso | FATA010 |
+------------+------------------------------------------------------------+
/*/
Static Function Ft010DelOk()
LOCAL lRet := .T.
AD1->( dbSetOrder( 5 ) )
If AD1->( dbSeek( xFilial( "AD1" ) + M->AC1_PROVEN ) )
lRet := .F.
Aviso( STR0007, STR0010, { STR0009 }, 2 ) // "Atencao"
// "Este processo de venda nao pode ser excluido pois esta sendo utilizado em uma
ou mais
// oportunidades !", "Fechar"
EndIf
Return( lRet )

Modelos de Relatórios
Ex ist em várias for m as de se gerar um r elatório no sistem a, no ent anto a form a de se elaborar o progr am a
não varia m uit o. Abaixo m ostr am os um m odelo- padr ão, que ut iliza as funções básicas na ger ação de um
relat ór io.

/*/
+---------------------------------------------------------------------------+
+ Funcao | MATR425 | Autor | Rodrigo de Sartorio | Data | 11/05/95 |
+-----------+----------+-------+-----------------------+------+-------------+
| Descricao | Relatorio de Estoque por Lote |
+-----------+---------------------------------------------------------------+
| Sintaxe | MATR425() |
+-----------+---------------------------------------------------------------+
| Uso | Generico |
+---------------------------------------------------------------------------+
| ATUALIZACOES SOFRIDAS DESDE A CONSTRUCAO NICIAL |
+-----------+--------+------+-----------------------------------------------+
|Programador| Data | BOPS | Motivo da Alteracao |
+-----------+--------+------+-----------------------------------------------+
| | | | |
+-----------+--------+------+-----------------------------------------------+
/*/
#include 'MATR425.CH'

126

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________127

#include 'FIVEWIN.CH'
Function MATR425()
+----------------------------------------------------------------+
| Define Variaveis |
+----------------------------------------------------------------+
Local cDesc1 := STR0001 //"Este programa emitira' uma relacao com a posi‡„o de "
Local cDesc2 := STR0002 //"estoque por Lote/Sub-Lote."
Local cDesc3 := ''
Local cString := 'SB8'
Local Titulo := STR0003 //"Posicao de Estoque por Lote/Sub-Lote"
Local Tamanho := 'M'
Local wnRel := 'MATR425'
+----------------------------------------------------------------+
| Variaveis Tipo Private padrao de todos os relatorios |
+----------------------------------------------------------------+
Private aOrd := {STR0004,STR0005} //" Por Produto"###" Por Lote/Sub-Lote"
Private aReturn := {STR0006,1,STR0007, 1, 2, 1, '',1 } //"Zebrado"###"Administracao"
Private cPerg := 'MR425A'
Private nLastKey := 0
Private nTipo := 0
+----------------------------------------------------------------+
| Verifica as perguntas selecionadas |
+----------------------------------------------------------------+
Pergunte('MR425A', .F.)
+----------------------------------------------------------------+
| Variaveis utilizadas para parametros |
| mv_par01 // Do Produto |
| mv_par02 // Ate Produto |
| mv_par03 // De Lote |
| mv_par04 // Ate Lote |
| mv_par05 // De Sub-Lote |
| mv_par06 // Ate Sub-Lote |
| mv_par07 // De Local |
| mv_par08 // Ate Local |
| mv_par09 // Lista Saldo Zerado ? Lista/Nao Lista |
| mv_par10 // Do Tipo |
| mv_par11 // Ate o Tipo |
| mv_par12 // Do Grupo |
| mv_par13 // Ate o Grupo |
+----------------------------------------------------------------+
+----------------------------------------------------------------+
| Envia controle para SETPRINT |
+----------------------------------------------------------------+
wnRel := SetPrint(cString,wnRel,cPerg,@Titulo,cDesc1,cDesc2,cDesc3,.F.,aOrd,,Tamanho)
nTipo := If(aReturn[4]==1,GetMv('MV_COMP'),GetMv('MV_NORM'))
If nLastKey == 27
dbClearFilter()
Return Nil
Endif
SetDefault(aReturn,cString)
If nLastKey == 27
dbClearFilter()
Return Nil
Endif
RptStatus({|lEnd| C425Imp(@lEnd,wnRel,Tamanho,Titulo)},Titulo)
Return Nil
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |C425Imp | Autor |Rodrigo Sartorio | Data | 14/11/95 |
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Chamada do Relatorio |
+------------+------------------------------------------------------------+
| Uso | MATR425 |
+------------+------------------------------------------------------------+
/*/
Static Function C425Imp(lEnd, wnRel, Tamanho, Titulo)
+----------------------------------------------------------------+
| Variaveis especificas dos relatorios |
+----------------------------------------------------------------+
Local cIndex := ''
Local cCond := ''

127

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________128

Local cLoteAnt := ''


Local cProdAnt := ''
Local cDescAnt := ''
Local cSLotAnt := ''
Local cAlmoAnt := ''
Local cSeekSB8 := ''
Local cCondSB8 := ''
Local cNomArq := ''
Local cPicSld := PesqPict('SB8', 'B8_SALDO', 12)
Local cPicEmp := PesqPict('SB8', 'B8_EMPENHO', 12)
Local dDataAnt := CtoD(' / / ')
Local dValiAnt := CtoD(' / / ')
Local nSaldo := 0
Local nEmpenho := 0
Local nSaldoT := 0
Local nEmpenhoT := 0
Local nCntImpr := 0
Local nIndSB8 := 0
Local lSubLote := .F.
+----------------------------------------------------------------+
| Variaveis utilizadas para Impressao do Cabecalho e Rodape |
+----------------------------------------------------------------+
Private aLinha := {}
Private Cabec1 := ''
Private Cabec2 := ''
Private cBTxt := Space(10)
Private cBCont := 0
Private Li := 80
Private M_PAG := 01
//-- Condicao de Filtragem da IndRegua
cCond := 'B8_FILIAL=="'+xFilial('SB8')+'".And.'
cCond += 'B8_PRODUTO>="'+mv_par01+'".And.B8_PRODUTO<="'+mv_par02+'".And.'
cCond += 'B8_LOTECTL>="'+mv_par03+'".And.B8_LOTECTL<="'+mv_par04+'".And.'
cCond += 'B8_NUMLOTE>="'+mv_par05+'".And.B8_NUMLOTE<="'+mv_par06+'".And.'
cCond += 'B8_LOCAL>="'+mv_par07+'".And.B8_LOCAL<="'+mv_par08+'"'
If aReturn[8]==1
cIndex := 'B8_FILIAL+B8_PRODUTO+B8_LOCAL+B8_LOTECTL+B8_NUMLOTE'
Titulo := STR0008 //"POSICAO DE ESTOQUE POR LOTE/SUBLOTE (POR PRODUTO)"
Cabec1 := STR0009 //"PRODUTO DESCRICAO SUB-LOTE LOTE AL SALDO EMPENHO DATA
DATA "
Cabec2 := STR0014 //"
VALIDADE "
ElseIf aReturn[8] == 2
cIndex := 'B8_FILIAL+B8_LOTECTL+B8_NUMLOTE+B8_PRODUTO+B8_LOCAL'
Titulo := STR0010 //"POSICAO DE ESTOQUE POR LOTE/SUB-LOTE (POR LOTE)"
Cabec1 := STR0011 //"SUB-LOTE LOTE PRODUTO DESCRICAO AL SALDO EMPENHO DATA
DATA "
Cabec2 := STR0014 //"

VALIDADE "
EndIf
+----------------------------------------------------------------+
| Pega o nome do arquivo de indice de trabalho |
+----------------------------------------------------------------+
cNomArq := CriaTrab('', .F.)
//-- Seta a Ordem Correta no Arquivo SB1
dbSelectArea('SB1')
dbSetOrder(1)
+----------------------------------------------------------------+
| Cria Indice de Trabalho |
+----------------------------------------------------------------+
dbSelectArea('SB8')
IndRegua('SB8', cNomArq, cIndex,, cCond, STR0017) //"Selecionando Registros..."
#IFNDEF TOP
dbSetIndex(cNomArq+OrdBagExt())
#ENDIF
dbGoTop()
SetRegua(LastRec())
+----------------------------------------------------------------+
| Processa o Laco de impressao |
+----------------------------------------------------------------+

128

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________129

Do While !Eof()
+----------------------------------------------------------------+
| Cancela a impressao |
+----------------------------------------------------------------+
If lEnd
@ PRow()+1, 001 PSay STR0012 //"CANCELADO PELO OPERADOR"
Exit
EndIf
lSubLote := Rastro(B8_PRODUTO,'S')
//-- Define a Quebra por Produto ou Lote
If aReturn[8] == 1
cSeekSB8 := B8_FILIAL+B8_PRODUTO+B8_LOCAL
cCondSB8 := 'B8_FILIAL+B8_PRODUTO+B8_LOCAL'
Else
cSeekSB8 :=
B8_FILIAL+B8_LOTECTL+If(lSubLote,B8_NUMLOTE,'')+B8_PRODUTO+B8_LOCAL
cCondSB8 :=
'B8_FILIAL+B8_LOTECTL+'+If(lSubLote,'B8_NUMLOTE+','')+'B8_PRODUTO+B8_LOCAL'
EndIf
nSaldo := 0
nEmpenho := 0
nSaldoT := 0
nEmpenhoT := 0

//-- Processa o Laco da Quebra


Do While !Eof() .And. cSeekSB8 == &(cCondSB8)

//-- Atualiza a Regua de Impressao


IncRegua()

+----------------------------------------------------------------+
| Cancela a Impressao |
+----------------------------------------------------------------+
If lEnd
@ PRow()+1, 001 PSay STR0012 //"CANCELADO PELO OPERADOR"
Exit
EndIf

//-- Saldo do Lote ou Lote/Sublote


nSaldo += B8_SALDO
nEmpenho += B8_EMPENHO

//-- Saldo Total da Quebra


nSaldoT += B8_SALDO
nEmpenhoT += B8_EMPENHO

//-- Posiciona-se na Descricao Correta do SB1


If !(cProdAnt==B8_PRODUTO)
SB1->(dbSeek(xFilial('SB1')+SB8->B8_PRODUTO, .F.))
EndIf

If SB1->B1_TIPO < mv_par10 .Or. SB1->B1_TIPO > mv_par11


dbSkip()
Loop
EndIf

If SB1->B1_GRUPO < mv_par12 .Or. SB1->B1_GRUPO > mv_par13


dbSkip()
Loop
EndIf

//-- Salva Dados do Registro Atual / Passa para o Proximo Registro


cProdAnt := B8_PRODUTO
cDescAnt := SubS(SB1->B1_DESC,1,30)
cSLotAnt := If(lSubLote,B8_NUMLOTE,Space(Len(B8_NUMLOTE)))
cLoteAnt := B8_LOTECTL
cAlmoAnt := B8_LOCAL
dDataAnt := B8_DATA
dValiAnt := B8_DTVALID
dbSkip()

129

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________130

//-- Imprime Saldo do Lote ou Lote/Sublote


If !(cSeekSB8==&(cCondSB8)) .Or. lSubLote .Or. !(cLoteAnt==B8_LOTECTL)
//-- Verifica se Lista Saldo Zerado
If mv_par09==2 .And. QtdComp(nSaldo)==QtdComp(0)
Loop
EndIf
If Li > 58
Cabec(Titulo,Cabec1,Cabec2,wnRel,Tamanho,nTipo)
EndIf
nCntImpr ++
If aReturn[8] == 1
@ Li, 000 PSay cProdAnt
@ Li, 016 PSay cDescAnt
@ Li, 047 PSay cSLotAnt
@ Li, 054 PSay cLoteAnt
ElseIf aReturn[8] == 2
@ Li, 000 PSay cSLotAnt
@ Li, 007 PSay cLoteAnt
@ Li, 018 PSay cProdAnt
@ Li, 034 PSay cDescAnt
EndIf
@ Li, 065 PSay cAlmoAnt
@ Li, 068 PSay nSaldo Picture cPicSld
@ Li, 081 PSay nEmpenho Picture cPicEmp
@ Li, 094 Psay dDataAnt
@ Li, 105 Psay dValiAnt
Li ++
nSaldo := 0
nEmpenho := 0
EndIf
EndDo

//-- Imprime Saldo Total da Quebra


If nCntImpr > 0
If Li > 58
Cabec(Titulo,Cabec1,Cabec2,wnRel,Tamanho,nTipo)
EndIf
@ Li, 000 PSay If(aReturn[8]==1,STR0013,If(lSubLote,STR0016,STR0015))
//"Total do Produto - @ Li, 068 PSay nSaldoT Picture cPicSld
@ Li, 081 PSay nEmpenhoT Picture cPicEmp
Li++
@ Li, 000 PSay __PrtThinLine()
Li++
nCntImpr := 0
nSaldoT := 0
nEmpenhoT := 0
EndIf
EndDo
If !(Li==80)
Roda(cBCont,cBTxt,Tamanho)
EndIf
//-- Restaura a Integridade do SB8
dbSelectArea('SB8')
RetIndex('SB8')
dbClearFilter()
If File(cNomArq+OrdBagExt())
fErase(cNomArq+OrdBagExt())
Endif
If aReturn[5] == 1
Set Printer To
dbCommitAll()
OurSpool(wnRel)
Endif
MS_Flush()
Return Nil

Modelos de Cálculos

130

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________131

Ex ist em diversas form as de se gerar um a r ot ina de cálculo no sist em a, no ent ant o o m odelo básico
sem pr e se m ant ém . Abaixo m ost r am os um m odelo- padr ão que utiliza as funções básicas par a tal.

/*/
+---------------------------------------------------------------------------+
+ Funcao | FINA210 | Autor | Wagner Xavier | Data | 01/12/92 |
+-----------+----------+-------+-----------------------+------+-------------+
| Descricao | Recalcula saldos bancarios dentro de um determinado periodo |
+-----------+---------------------------------------------------------------+
| Sintaxe | FINA210() |
+-----------+---------------------------------------------------------------+
| Uso | Generico |
+---------------------------------------------------------------------------+
| ATUALIZACOES SOFRIDAS DESDE A CONSTRUCAO NICIAL |
+-----------+--------+------+-----------------------------------------------+
|Programador| Data | BOPS | Motivo da Alteracao |
+-----------+--------+------+-----------------------------------------------+
| | | | |
+-----------+--------+------+-----------------------------------------------+
#INCLUDE "FINA210.CH"
#INCLUDE "PROTHEUS.CH"
Function FinA210()
LOCAL nOpca :=0
+----------------------------------------------------------------+
| Define Variaveis |
+----------------------------------------------------------------+
LOCAL oDlg, aSays:={}, aButtons:={}
Private cCadastro := OemToAnsi(STR0004) //"Reconciliacao de Saldos Bancarios"
Pergunte("FIN210",.F.)
AADD (aSays,;
OemToAnsi(STR0005))//"Este programa tem como objetivo recalcular e analisar os saldos"
AADD (aSays,;
OemToAnsi(STR0006)) //"Bancarios dia a dia de um determinado periodo ate a data base do
"
AADD (aSays,;
OemToAnsi(STR0007)) //"sistema. Utilizando no caso de haver necessidade de retroagir a
"
AADD (aSays,;
OemToAnsi(STR0008)) //"movimentacao bancaria. Use como referencia a data em que o saldo
"
AADD (aSays,;
OemToAnsi(STR0009)) //"ficou defasado. "
AADD(aButtons, { 1,.T.,{|o| nOpca:= 1,o:oWnd:End()}} )
AADD(aButtons, { 2,.T.,{|o| o:oWnd:End() }} )
AADD(aButtons, { 5,.T.,{|| Pergunte("FIN210",.T. ) } } )
FormBatch( cCadastro, aSays, aButtons )
If nOpcA == 1
#IFDEF TOP
If TcSrvType() == 'AS/400'
Processa({|lEnd| FA210Proc()}) // Chamada da funcao de reconciliacao
Else
Processa({|lEnd| FA211Proc()}) // Chamada da funcao de reconciliacao
Endif
#ELSE
Processa({|lEnd| FA210Proc()}) // Chamada da funcao de reconciliacao
#ENDIF
Endif
Return
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Fa210Proc | Autor |Wagner Xavier | Data |01.12.1992|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de recalculo dos saldos bancarios – CODEBASE |
+------------+------------------------------------------------------------+
| Sintaxe | Fa210Proc () |
+------------+------------------------------------------------------------+
| Parametros | Nenhum |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |

131

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________132

+------------+------------------------------------------------------------+
| Uso | FINA210 |
+------------+------------------------------------------------------------+
/*/
Function FA210Processa()
LOCAL nSaldoIni
LOCAL nEntradas
LOCAL nSaidas, nData, cCond
LOCAL dDataMovto
LOCAL cFil :=""
LOCAL lAllFil :=.F.
LOCAL cChave
LOCAL cIndex := ""
LOCAL lSaida :=.F.
+----------------------------------------------------------+
| Variaveis utilizadas para parametros |
| mv_par01 // Do Banco |
| mv_par02 // Ate o Banco |
| mv_par03 // Da Agencia |
| mv_par04 // Ate a Agencia |
| mv_par05 // Da Conta |
| mv_par06 // Ate a Conta |
| mv_par07 // A partir da Data |
+----------------------------------------------------------+
dbSelectArea( "SA6" )
dbSeek( cFilial+mv_par01 , .T.)
ProcRegua(RecCount())
If Empty(xFilial( "SA6")) .AND. !Empty(xFilial("SE5"))
+----------------------------------------------------------------+
| Filtra o arquivo pro tipo e vencimento |
+----------------------------------------------------------------+
dbSelectArea("SE5")
cIndex := CriaTrab(nil,.f.)
cChave := "E5_BANCO+E5_AGENCIA+E5_CONTA+DTOS(E5_DTDISPO)"
cCond := 'dtos(E5_DTDISPO)>="'+dtos(mv_par07)+'"'
IndRegua("SE5",cIndex,cChave,,cCond,OemToAnsi(STR0015)) //"Selecionando
Registros..."
nIndexSE5 := RetIndex("SE5")
#IFNDEF TOP
dbSetIndex(cIndex+OrdBagExt())
#ENDIF
dbSetOrder(nIndexSE5+1)
lSaida := .T.
dbGoTop()
lAllFil:= .T.
Else
dbSelectArea("SE5")
cIndex := CriaTrab(nil,.f.)
cChave := "E5_FILIAL+E5_BANCO+E5_AGENCIA+E5_CONTA+DTOS(E5_DTDISPO)"
cCond := 'dtos(E5_DTDISPO)>="'+dtos(mv_par07)+'" .and. E5_FILIAL ==
"'+xFilial("SE5")+'"'
IndRegua("SE5",cIndex,cChave,,cCond,OemToAnsi(STR0015)) //"Selecionando
Registros..."
nIndexSE5 := RetIndex("SE5")
#IFNDEF TOP
dbSetIndex(cIndex+OrdBagExt())
#ENDIF
dbSetOrder(nIndexSE5+1)
dbGoTop()
Endif
+----------------------------------------------------------------+
| Inicia recalculo dos saldos atraves da movimentacao bancaria |
+----------------------------------------------------------------+
dbSelectArea( "SA6" )
dbSeek( cFilial+mv_par01 , .T.)
While !Eof() .and. A6_FILIAL == cFilial .and. A6_COD <= mv_par02
IncProc()
// Alteracao para nao recalcular o saldo dos caixas do Loja, pois
// estes devem ser recalculados atraves da opcao "Recalculo de Caixa" - Adriano
dbSelectArea("SX5")
If (dbSeek(xFilial("SX5")+"23"+SA6->A6_COD)) .or. (SA6->A6_Cod == "CL1")

132

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________133

dbSelectArea("SA6")
dbSkip()
Loop
Endif
dbSelectArea("SA6")
cBanco := A6_COD
cAgencia := A6_AGENCIA
cConta := A6_NUMCON
nSaldoIni:= 0
nEntradas:= 0
nSaidas := 0
If cAgencia < mv_par03 .or. cAgencia > mv_par04 .or. cConta < mv_par05 .or. cConta
> mv_par06
dbSkip( )
Loop
Endif
+---------------------------------------------------------+
| Localiza Saldo de Partida. |
| Observe que o programa retorna um registro no banco de |
| dados, portanto a data de referencia ‚ a data em que |
| o saldo ficou errado, nao a data correta do saldo. |
+---------------------------------------------------------+
dbSelectArea( "SE8" )
dbSeek( cFilial+cBanco+cAgencia+cConta+Dtos(mv_par07),.T. )
dbSkip( -1 )
If E8_BANCO != cBanco .or. E8_AGENCIA != cAgencia .or. E8_CONTA != cConta .or.
BOF() .or. EOF()
nSaldoIni := 0
Else
nSaldoIni := E8_SALATUA
End
+----------------------------------------------------------------+
| Localiza movimentacao bancaria |
+----------------------------------------------------------------+
dbSelectArea( "SE5" )
dbSetOrder(nIndexSE5+1)
cFil := Iif(lAllFil,"",xFilial("SE5"))
dbSeek(cFil+cBanco+cAgencia+cConta+Dtos(mv_par07),.T.)
While !Eof() .and. E5_BANCO+E5_AGENCIA+E5_CONTA == cBanco+cAgencia+cConta
IF !lAllFil .and. E5_FILIAL != xFilial("SE5")
Exit
Endif
dDataMovto := E5_DTDISPO
While !Eof() .and. E5_BANCO+E5_AGENCIA+E5_CONTA+dtos(E5_DTDISPO)== ;
cBanco+cAgencia+cConta+dtos(dDataMovto)
IF !lAllFil .and. E5_FILIAL != xFilial("SE5")
Exit
Endif
IF E5_TIPODOC $ "DC/JR/MT/CM/D2/J2/M2/C2/V2/CP/TL" //Valores de Baixas
dbSkip()
Loop
Endif
If E5_VENCTO > E5_DATA // Ignora pre' datados - gerou titulo
dbSkip()
Loop
Endif
If E5_SITUACA = "C" //Cancelado
dbSkip()
Loop
Endif
If SE5->E5_MOEDA $ "C1/C2/C3/C4/C5" .and. Empty(SE5->E5_NUMCHEQ)
dbSkip()
Loop
Endif
+---------------------------------------------------------------+
| Na transferencia somente considera nestes numerarios |
| No Fina100 ‚ tratado desta forma. |
| As transferencias TR de titulos p/ Desconto/Cau‡Æo (FINA060) |
| nÆo sofrem mesmo tratamento dos TR bancarias do FINA100 |
| Aclaracao : Foi incluido o tipo $ para os movimentos en di-- |
| nheiro em QUALQUER moeda, pois o R$ nao e representativo |

133

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________134

| fora do BRASIL. |
+---------------------------------------------------------------+
If SE5->E5_TIPODOC $ "TR/TE" .and. Empty(SE5->E5_NUMERO)
If !(E5_MOEDA $ " $ /R$/DO/TB/TC/CH"+IIf(cPaisLoc=="BRA","","/$
"))
dbSkip()
Loop
Endif
Endif
If E5_TIPODOC $ "TR/TE" .and. (Substr(E5_NUMCHEQ,1,1)=="*" ;
.or. Substr(E5_DOCUMEN,1,1) == "*" )
dbSkip()
Loop
Endif
If SE5->E5_MOEDA == "CH" .and. IsCaixaLoja(SE5->E5_BANCO) //Sangria
dbSkip()
Loop
Endif
If SubStr(E5_NUMCHEQ,1,1)=="*" //cheque para juntar (PA)
dbSkip()
Loop
Endif
If !Empty(SE5->E5_MOTBX)
If !MovBcoBx(SE5->E5_MOTBX)
dbSkip()
Loop
Endif
Endif
+----------------------------------------------------------------+
| Baixa automatica |
+----------------------------------------------------------------+
IF E5_TIPODOC = "BA"
dbSkip()
Loop
Endif
dbSelectArea("SE5")
IF E5_RECPAG = "R"
nEntradas += E5_VALOR
Else
nSaidas += E5_VALOR
Endif
dbSkip()
End // Quebra da data
dbSelectArea("SE8")
dbSeek(cFilial + cBanco+cAgencia+cConta+Dtos(dDataMovto))
IF Eof()
RecLock("SE8",.t.)
Else
RecLock("SE8",.f.)
Endif
Replace E8_FILIAL With cFilial,;
E8_BANCO With cBanco,;
E8_AGENCIA With cAgencia,;
E8_CONTA With cConta,;
E8_DTSALATU With dDataMovto
Replace E8_SALATUA With nSaldoIni+nEntradas-nSaidas
MsUnlock()
dbSelectArea("SE5")
IF !(SE5->(Eof())) .and. E5_BANCO+E5_AGENCIA+E5_CONTA ==
cBanco+cAgencia+cConta
IF !lAllFil .and. E5_FILIAL != xFIlial("SE5")
Exit
Endif
For nData := dDataMovto+1 to ((SE5->E5_DTDISPO) - 1)
dbSelectArea("SE8")
If dbSeek(cFilial + cBanco+cAgencia+cConta+dtos(nData))
RecLock("SE8",.F.,.T.)
dbDelete()
MsUnlock()
SX2->(MsUnlock())
EndIf

134

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________135

dbSelectArea("SE5")
Next
Endif
IF SE5->(Eof()) .or. E5_BANCO+E5_AGENCIA+E5_CONTA != cBanco+cAgencia+cConta
dbSelectArea("SE8")
dbSeek(cFilial + cBanco+cAgencia+cConta+dtos(dDataMovto+1),.t.)
While !Eof() .and. cFilial + cBanco+cAgencia+cConta == ;
E8_FILIAL+E8_BANCO+E8_AGENCIA+E8_CONTA
RecLock("SE8",.F.,.T.)
dbDelete()
MsUnlock()
SX2->(MsUnlock())
dbselectArea("SE8")
dbSkip()
End
Endif
dbSelectArea("SE5")
End // Fecha Primeiro Loop do SE5
dbSelectArea("SA6")
RecLock("SA6")
Replace A6_SALATU With nSaldoIni+nEntradas-nSaidas
MsUnLock()
dbSkip()
End
dbSelectArea("SE5")
RetIndex( "SE5")
Set Filter To
If !Empty(cIndex)
ferase( cIndex+OrdBagExt())
EndIf
Return NIL
/*/
+------------+----------+-------+-----------------------+------+----------+
| Funcao |Fa211Proc | Autor |Wagner Xavier | Data |09.03.2000|
|------------+----------+-------+-----------------------+------+----------+
| Descricao |Funcao de recalculo dos saldos bancarios – TOP CONNECT |
+------------+------------------------------------------------------------+
| Sintaxe | Fa211Proc () |
+------------+------------------------------------------------------------+
| Parametros | Nenhum |
+------------+------------------------------------------------------------+
| Retorno | Nenhum |
+------------+------------------------------------------------------------+
| Uso | FINA210 |
+------------+------------------------------------------------------------+
/*/
#IFDEF TOP
Function FA211Proc()
LOCAL nSaldoIni, nEntradas
LOCAL nSaidas, nData
LOCAL cQuery
LOCAL dDataMovto
+----------------------------------------------------------+
| Variaveis utilizadas para parametros |
| mv_par01 // Do Banco |
| mv_par02 // Ate o Banco |
| mv_par03 // Da Agencia |
| mv_par04 // Ate a Agencia |
| mv_par05 // Da Conta |
| mv_par06 // Ate a Conta |
| mv_par07 // A partir da Data |
+----------------------------------------------------------+
+----------------------------------------------------------------+
| Inicia recalculo de saldos atraves da movimentacao bancaria |
+----------------------------------------------------------------+
cQuery := "SELECT SA6.R_E_C_N_O_ A6_RECNO,"
cQuery += " E5_BANCO, E5_AGENCIA, E5_CONTA, E5_DTDISPO, E5_TIPODOC, E5_MOEDA,"
cQuery += " E5_NUMCHEQ, E5_MOTBX, E5_NUMERO, E5_RECPAG, E5_VALOR, E5_DOCUMEN"
cQuery += " FROM " + RetSqlName("SA6") + " SA6, " + RetSqlName("SE5") + " SE5"
cQuery += " WHERE A6_FILIAL = '" + xFilial("SA6") + "'"
cQuery += " AND A6_COD between '" + mv_par01 + "' AND '" + mv_par02 + "'"

135

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________136

cQuery += " AND A6_AGENCIA between '" + mv_par03 + "' AND '" + mv_par04 + "'"
cQuery += " AND A6_NUMCON between '" + mv_par05 + "' AND '" + mv_par06 + "'"
cQuery += " AND SA6.D_E_L_E_T_ <> '*'"
cQuery += " AND E5_VENCTO <= E5_DATA"
cQuery += " AND A6_COD = E5_BANCO"
cQuery += " AND A6_AGENCIA = E5_AGENCIA"
cQuery += " AND A6_NUMCON = E5_CONTA"
cQuery += " AND E5_SITUACA <> 'C'"
cQuery += " AND E5_TIPODOC <> 'BA'"
cQuery += " AND SE5.D_E_L_E_T_ <> '*'"
If Empty(xFilial( "SA6")) .AND. !Empty(xFilial("SE5"))
cQuery += " AND E5_DTDISPO >= '" + dtos(mv_par07) + "'"
//O filtro de filial entre ' ' e 'ZZ' foi adicionado para o SQL utilizar indice
cQuery += " AND E5_FILIAL between ' ' AND 'ZZ'"
Else
cQuery += " AND E5_DTDISPO >= '" + dtos(mv_par07) + "' AND E5_FILIAL = '" +
xFilial("SE5") + "'"
Endif
cQuery += " ORDER BY E5_BANCO, E5_AGENCIA, E5_CONTA, E5_DTDISPO"

cQuery := ChangeQuery(cQuery)
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),'TRB210',.T.,.T.)
TcSetField("TRB210", "E5_DTDISPO", "D")
While !Eof()
dbSelectArea("TRB210")
cBanco := E5_BANCO
cAgencia := E5_AGENCIA
cConta := E5_CONTA
nSaldoIni:= 0
nEntradas:= 0
nSaidas := 0
+---------------------------------------------------------+
| Localiza Saldo de Partida. |
| Observe que o programa retorna um registro no banco de |
| dados, portanto a data de referencia ‚ a data em que |
| o saldo ficou errado, nao a data correta do saldo. |
+---------------------------------------------------------+
dbSelectArea( "SE8" )
dbSeek( cFilial+cBanco+cAgencia+cConta+Dtos(mv_par07),.T. )
dbSkip( -1 )
If E8_BANCO != cBanco .or. E8_AGENCIA != cAgencia .or. E8_CONTA != cConta .or.
BOF() .or. EOF()
nSaldoIni := 0
Else
nSaldoIni := E8_SALATUA
Endif
+----------------------------------------------------------------+
| Localiza movimentacao bancaria |
+----------------------------------------------------------------+
dbSelectArea("TRB210")
While !Eof() .and. E5_BANCO+E5_AGENCIA+E5_CONTA == cBanco+cAgencia+cConta
dDataMovto := E5_DTDISPO
While !Eof() .and. E5_BANCO+E5_AGENCIA+E5_CONTA+DTOS(E5_DTDISPO) == ;
cBanco+cAgencia+cConta+dtos(dDataMovto)
IF E5_TIPODOC $ "DC/JR/MT/CM/D2/J2/M2/C2/V2/CP/TL" //Valores de Baixas
dbSkip()
Loop
Endif
If E5_MOEDA $ "C1/C2/C3/C4/C5" .and. Empty(E5_NUMCHEQ)
dbSkip()
Loop
Endif
+---------------------------------------------------------------+
| Na transferencia somente considera nestes numerarios |
| No Fina100 ‚ tratado desta forma. |
| As transferencias TR de titulos p/ Desconto/Cau‡Æo (FINA060) |
| nÆo sofrem mesmo tratamento dos TR bancarias do FINA100 |
+---------------------------------------------------------------+
If E5_TIPODOC $ "TR/TE" .and. Empty(E5_NUMERO)
If !(E5_MOEDA $ "R$/DO/TB/TC/CH")
dbSkip()

136

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________137

Loop
Endif
Endif
If E5_TIPODOC $ "TR/TE" .and. (Substr(E5_NUMCHEQ,1,1)=="*" ;
.or. Substr(E5_DOCUMEN,1,1) == "*" )
dbSkip()
Loop
Endif
If E5_MOEDA == "CH" .and. IsCaixaLoja(E5_BANCO) //Sangria
dbSkip()
Loop
Endif
If SubStr(E5_NUMCHEQ,1,1)=="*" //cheque para juntar (PA)
dbSkip()
Loop
Endif
If !Empty(E5_MOTBX)
If !MovBcoBx(E5_MOTBX)
dbSkip()
Loop
Endif
Endif
If E5_RECPAG = "R"
nEntradas += E5_VALOR
Else
nSaidas += E5_VALOR
Endif
dbSkip()
End // Quebra da data
dbSelectArea("SE8")
dbSeek(cFilial+cBanco+cAgencia+cConta+Dtos(dDataMovto))
IF Eof()
RecLock("SE8",.t.)
Else
RecLock("SE8",.f.)
Endif
Replace E8_FILIAL With cFilial,;
E8_BANCO With cBanco,;
E8_AGENCIA With cAgencia,;
E8_CONTA With cConta,;
E8_DTSALATU With dDataMovto
Replace E8_SALATUA With nSaldoIni+nEntradas-nSaidas
MsUnlock()
dbSelectArea("TRB210")
IF !(TRB210->(Eof())) .and. E5_BANCO+E5_AGENCIA+E5_CONTA ==
cBanco+cAgencia+cConta
For nData := dDataMovto+1 to ((E5_DTDISPO) - 1)
dbSelectArea("SE8")
If dbSeek(cFilial + cBanco+cAgencia+cConta+dtos(nData))
RecLock("SE8",.F.,.T.)
dbDelete()
MsUnlock()
SX2->(MsUnlock())
EndIf
dbSelectArea("TRB210")
Next
Endif
If TRB210->(Eof()) .or. E5_BANCO+E5_AGENCIA+E5_CONTA !=
cBanco+cAgencia+cConta
dbSelectArea("SE8")
dbSeek(cFilial+cBanco+cAgencia+cConta+dtos(dDataMovto+1),.t.)
While !Eof() .and. cFilial+cBanco+cAgencia+cConta == ;
E8_FILIAL+E8_BANCO+E8_AGENCIA+E8_CONTA
RecLock("SE8",.F.,.T.)
dbDelete()
MsUnlock()
SX2->(MsUnlock())
dbselectArea("SE8")
dbSkip()
Enddo
Endif

137

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________138

dbSelectArea("TRB210")
Enddo // Fecha Primeiro Loop do SE5
dbSelectArea("SA6")
If dbSeek( xFilial("SA6")+cBanco+cAgencia+cConta)
RecLock("SA6")
Replace A6_SALATU With nSaldoIni+nEntradas-nSaidas
MsUnLock()
EndIf
dbSelectArea("TRB210")
dbSkip()
Enddo
dbSelectArea("TRB210")
dbCloseArea()
Return NIL
#ENDIF

138

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________139

Funções básicas da Linguagem

AAdd
Adiciona um novo elem ent o ao final do arr ay .

Sin t ax e

AADD( aAlv o, expValor ) - - > Valor

Ar gum ento Obrigat . Tipo Descr ição

aAlv o Sim A É o ar r ay ao qual o novo elem ent o ser á adicionado.

ex pValor Sim Todos É um a expressão válida que será o valor do novo elem ent o.

Retorno Descr ição

avalia expValue e r etorna seu Valor. Se ex pValue não for especificado, AADD( ) r etorna
AADD( )
NIL.

D escr içã o

AADD( ) é um a função de ar ray que incr em enta o t am anho r eal do arr ay aAlvo em um . O elem ent o de
ar r ay r ecentem ent e cr iado é at r ibuído o Valor especificado por ex pValue.

AADD( ) é usado para aum ent ar dinâm icam ent e um a arr ay. É út il par a listas ou filas criadas
dinam icam ent e.

Um ex em plo bom dest e é o GetList , arr ay usada pelo sist em a par a arm azenar obj et os do t ipo Get. Depois
que um READ ou CLEAR GETS é executado, a GetList ficará v azia. Cada v ez que você executa um
com ando @...GET, o sistem a usa AADD( ) para adicionar um novo elem ent o à ar ray Get List , e at ribui
então um nov o objet o GET ao nov o elem ento.

AADD( ) é sim ilar a ASI ZE( ) , m as apenas adiciona um elem ent o por vez; ASI ZE( ) pode incr em entar ou
decr em ent ar um a arr ay a um det er m inado t am anho. AADD( ) , entr et ant o, t êm a vant agem de poder
at r ibuir um v alor ao elem ent o recent em ent e adicionado, enquant o que ASIZ E( ) não pode. AADD( ) pode
tam bém parecer sim ilar a AINS( ) , m as é diferent e: AINS( ) m ove elem entos dent r o de um a disposição,
m as os ele não m uda o t am anho.

139

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________140

Se ex pValue for um a outr a ar r ay, o nov o elem ento em aAlvo cont er á um a r efer ência à arr ay
especificada por ex pValue.

Ex em plo s

aArray := {} // Resultado: aArray is an empty array


AADD(aArray, 5) // Resultado: aArray is { 5 }
AADD(aArray, 10) // Resultado: aArray is { 5, 10 }
AADD(aArray, { 12, 10 }) // Resultado: aArray is
// { 5, 10, { 12, 10 } }

ACopy

Copia os elem ent os de um a arr ay par a out ra.

Sin t ax e

ACOPY( aOr igem , aDestino , [ nInicio ] , [ nQt de ] , [ nPosDest ino ] ) - - > aDestino

Ar gum ento Obrigat . Tipo Descr ição

é o arr ay que cont ém os elem ent os a serem


aOrigem Sim A
copiados.

é o ar r ay que r eceber á a cópia dos


aDestino Sim A
elem entos.

indica qual o índice do pr im eiro elem ent o de


nI nicio Não N aOrigem que ser á copiado. Se não for
especificado, o v alor assum ido ser á 01.

indica a quantidade de elem ent os a serem


copiados a par tir do ar ray aOrigem .
iniciando- se a contagem a par t ir da posição
nQtde Não N
nI nicio. Se nQtde não for especificado, t odos
os elem entos do arr ay aOrigem ser ão
copiados, iniciando- se a par tir da posição
nI nicio.

é a posição do elem ento inicial no arr ay


nPosDest ino
aDestino que receberá os elem ent os de
N
aOrigem . Se não especificado, será
assum ido 01.

Retorno Descrição

ACOPY( ) r et or na um a r eferência ao arr ay aDest ino.

140

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________141

D escr içã o

ACOPY( ) é um a função de ar r ay que copia elem entos do ar ray aOr igem par a ar r ay aDestino. O arr ay
dest ino aDestino já dev e ter sido declar ado e gr ande o bastant e para conter os elem ent os que ser ão
copiados.

Se o ar ray aOr igem cont iv er m ais elem ent os, alguns dos elem entos não ser ão copiados. ACOPY( ) copia os
valor es de t odos os dados, incluindo v alores nulos ( NI L) e códigos de bloco.

Se um elem ento for um subar r ay , o elem ent o cor respondent e no ar ray aDestino, cont erá o m esm o
subarr ay . Por tant o, ACOPY( ) não produzirá um a cópia com plet a de arr ay m ultidim ensionais, Par a fazer
isso, uso a função aClone( ) .

Ex em plo s

Este exemplo cria dois arrays, com um conteúdo cada. Os dois primeiros elementos do array
fonte são então copiados no array destino:
LOCAL nCount := 2, nStart := 1, aOne, aTwo
aOne := { 1, 1, 1 }
aTwo := { 2, 2, 2 }
ACOPY(aOne, aTwo, nStart, nCount)
// Result: aTwo is now { 1, 1, 2 }

AClone
Duplica arr ay s aninhadas ou m ult i- dim ensionais.

Sin t ax e

ACLONE( aOr igem ) - - > aDuplicado

Ar gum ento Obrigat . Tipo Descr ição

aOrigem Sim A É o arr ay or iginal que ser á duplicado.

Retorno Descr ição

aDuplicado Arr ay idênt ico ao aOr igem , por em sem nenhum a r eferência.

D escr içã o

ACLONE( ) é um a função de ar ray, que cr ia duplicat as com plet as do arr ay aSour ce. Se aSour ce contiv er
ar r ays aninhadas, ACLONE( ) cr iar á o m esm o padrão de aninham ento preenchendo com cópias dos valor es
cont idos em aSource.

141

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________142

ACLONE( ) é sim ilar a ACOPY( ) , ex ceto que ACOPY( ) não duplica arr ay s aninhadas.

Ao igualarm os dois arr ay s, eles ficam associados por r efer ência, utilizando aClone( ) não existe referência.

Ex em plo s

LOCAL aOne, aTwo, aThree


aOne := { 1, 2, 3 } // Resultado: aOne is {1, 2, 3}
aTwo := ACLONE(aOne) // Resultado: aTwo is {1, 2, 3}
aThree := aOne // Resultado: aThree is {1, 2, 3}
aOne[1] := 99 // Result: aOne is {99, 2, 3}
// aTwo continua {1, 2, 3} mais o aThree fica { 99, 2, 3 }

ADel
Ex clui um elem ent o de um ar ray.

Sin t ax e

ADEL( aOrigem , nPos) - - > aOrigem

Ar gum ento Obrigat . Tipo Descr ição

aOrigem Sim A É o arr ay de onde será ex cluído um item

É a posição a par tir da 1, do qual será


nPos Sim A
ex cluído um elem ent o

Retorno Descrição

ADEL( ) Retorna um a refer ência ao aOr igem .

D escr içã o

ADEL( ) é um a função de m anipulação que elim ina um a posição do arr ay , deslocando as posições
post er ior es. A últim a posição do arr ay passa a t er o cont eúdo NIL.

Caso a posição a ser elim inada sej a um arr ay , est e ser á elim inado.

Ex em plo s

LOCAL aArray
aArray := { 1, 2, 3 } // Resultado: { 1, 2, 3 }
ADEL(aArray, 2) // Resultado: { 1, 3, NIL }

ADir

142

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________143

Pr eenche v ár ios ar rays com inform ações de arquivos e dir etórios.

Sin t ax e

ADIR( [ cAr qEspec ] , [ aNom eAr q ] , [ aTam anho ] , [ aData ] , [ aHor a ] , [ aAt ribut o ] ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

Cam inho dos ar quivos a ser em incluídos na busca de inform ações.


Segue o padr ão par a especificação de ar quivos, aceitando ar quiv os
cArqEspec Não C no serv idor Pr ot heus e no Client e. Car acter es com o * e ? são aceit os
nor m alm ent e. Caso sej a om it ido, serão aceit os t odos os arquivos do
dir etório default ( * .* ) .

Arr ay de Car acteres. É o arr ay com os nom es dos ar quiv os


aNom eAr q Não A
encontr ados na busca. O cont eúdo anterior do ar ray é apagado.

Arr ay Num érico. São os tam anhos dos ar quiv os encont r ados na
aTam anho Não A
busca.

Arr ay de Datas. São as dat as de m odificação dos ar quiv os


aDat a Não A
encontr ados na busca.

A Arr ay de Car act er es. São os hor ár ios de m odificação dos ar quiv os
aHor a Não
encontr ados. Cada elem ent o contém horário no for m at o: hh: m m : ss.

Arr ay de Car acteres. São os at ribut os dos ar quiv os, caso esse ar ray
aAtr ibutos Não A sej a passado com o par âm et ros, ser ão incluídos os ar quiv os com
atr ibutos de Sist em a, Ocultos.

Retorno Descrição

> = 0 Quantidade de arquivos encont r ados

D escr içã o

ADir ( ) preenche os ar r ay s passados com os dados dos arquivos encont rados, atr av és da m áscara
infor m ada. Tant o ar quiv os locais ( Rem ot e) com o do ser vidor podem ser infor m ados. ADir é um a função
obsolet a, ut ilize sem pr e Dir ectory ( ) .

Ex em plo s

LOCAL aFiles[ADIR("*.TXT")]
ADIR("*.TXT", aFiles)
AEVAL(aFiles, { |element| QOUT(element) })

AEval

143

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________144

Ex ecut a um code block par a cada elem ent o de um arr ay .

Sin t ax e

AEVAL( aAr ray, bBloco, [ nI nicio ] , [ nQt de] ) - - > aArr ay

Ar gum ento Obrigat . Tipo Descr ição

É o ar ray que ser á at ravessado pelo


aArr ay Sim A
bloco

Bloco de É o bloco que ser á execut ado par a cada


bBlock Sim
código elem ento do Arr ay .

É a posição inicial. Se não for


nI nicio Não N
especificada o inicio ser á a part ir do 1° .

É o num ero de elem ent os que dev em


ser processados a part ir de nI nicio. O
nQtde Não N
Valor padrão são t odos os elem ent os do
nI nicio at é o final.

Retorno Descr ição

AEVAL( ) Ret or na um a r efer ência de aArr ay .

D escr içã o

AEVAL( ) ex ecut a um code block para cada elem ento de um arr ay , passando cada um com o o par âm et ro
do bloco. É m uit o sem elhante ao DBEVAL( ) .

AEVAL( ) passa cada elem ent o de um arr ay par a o code block sem se pr eocupar com o t ipo.

Ex em plo s

// Exemplo 1
#include "Directry.ch"
//
LOCAL aFiles := DIRECTORY("*.dbf"), nTotal := 0
AEVAL(aFiles,{ | aDbfFile | QOUT(PADR(aDbfFile[F_NAME], 10), aDbfFile[F_SIZE]),;
nTotal += aDbfFile[F_SIZE]);
} )
//
?
? "Total Bytes:", nTotal
// Exemplo 2
#include "Directry.ch"
//
LOCAL aFiles := DIRECTORY("*.dbf"), aNames := {}
AEVAL(aFiles, { | file | AADD(aNames, file[F_NAME]) } )
//Exemplo 3
LOCAL aArray[6]
AFILL(aArray,"old")
AEVAL(aArray,;
{|cValue,nIndex| IF(cValue == "old",;
aArray[nIndex] := "new",)})

144

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________145

EVAL( )

DBEVAL( )

AFill
Pr eenche um ar ray com um det er m inado v alor .

Sin t ax e

AFILL( aDest ino , ex pValor , [ nI nicio ] , [ nQuantidade ] ) - - > aDestino

Ar gum ento Obrigat . Tipo Descr ição

aDestino Sim A É o onde os dados serão pr eenchidos.

É o dado que ser á preenchido em t odas


ex pValor Sim Todos as posições inform adas, não é perm it ida
a utilização de arr ays.

É a posição inicial de onde os dados


[ nInicio] Não N
ser ão preenchidos, o valor padr ão é 1.

Quantidade de elem ent os a par t ir de


[ nI nicio] que ser ão preenchidos com
[ nCount] Não N < expValor> , caso não sej a infor m ado o
valor será a quant idade de elem entos
at é o final do ar r ay .

Retorno Descr ição

AFILL( ) Ret or na um a r efer ência par a aDestino.

D escr içã o

AFILL( ) é função de m anipulação de ar rays, que pr eenche os elem entos do arr ay com qualquer t ipo de
dado. I ncluindo code block .

Afill( ) não dev e ser usado par a pr eencher um arr ay com out r o ar r ay .

Ex em plo s

LOCAL aLogic[3]
// Resultado: aLogic é { NIL, NIL, NIL }
AFILL(aLogic, .F.)
// Resultado: aLogic é { .F., .F., .F. }
AFILL(aLogic, .T., 2, 2)
// Resultado: aLogic é { .F., .T., .T. }

145

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________146

AI ns
Inser e um elem ento com cont eúdo NI L em um ar r ay .

Sin t ax e

AI NS( aOrigem , nPos ) - - > aI ns

Ar gum ento Obrigat . Tipo Descr ição

aOrigem Sim A É o ar ray de onde ser á inser ido um it em .

É a posição a part ir da 1, do qual será inser ido um


nPos Sim A
elem ent o

Retorno Descrição

AI NS( ) Retorna um a refer ência ao aOr igem .

D escr içã o

AI NS( ) é um função de m anipulação de ar r ay que insere um elem ent o na posição det er m inada por nPos.

O novo elem ent o possui cont eúdo igual a NIL. Após a inser ção, o últ im o elem ent o ser á ex cluído.

Para alterar o t am anho de um arr ay , utilize aSize( ) .

Ex em plo s

LOCAL aArray
aArray := { 1, 2, 3 } // Resultado: { 1, 2, 3 }
AINS(aArray, 2) // Resultado: { 1, NIL, 2 }

Alias
Verifica qual é o Alias.

Sin t ax e

ALIAS( [ nAr eaTr ab ] ) - - > Car acter

146

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________147

Ar gum ento Obrigat . Tipo Descr ição

nAreaTrab Não N Núm ero da área de t r abalho a ser ver ificada.

Retorno Descrição

"" Não ex ist e t abela em uso na área de t r abalho v er ificada.

cAlias St r ing cont endo o Alias da ár ea de t r abalho v er ificada ( em m aiúsculo) .

D escr içã o

Verifica qual é o Alias de det er m inada área de t r abalho; se ela não foi especificada, ser á v er ificado qual o
Alias da ár ea de tr abalho cor r ente. O Alias é definido quando a t abela é abert a at r avés do par âm et ro
corr espondente ( DBUSEAREA( ) ) .

Esta função é o inv er so da função SELECT() , pois nest a é r et or nado o núm ero da ár ea de t rabalho do
Alias cor r espondent e.

Ex em plo

// Este exemplo mostra como o Alias corrente pode ser apresentado para o usuário.
dbUseArea( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
MessageBox("O Alias corrente é: " + Alias(), "Alias", 0) // Resultado: "O Alias
corrente é: SSS"

Append From
Im por t a r egistr os de out r a tabela ou arquiv o text o.

Sin t ax e

APPEND FROM Ar quivo [ FI ELDS Cam pos] [ FOR CondFor ] [ WHI LE CondWhile] [ NEXT nRecs] [ RECORD
nRecno] [ REST] [ ALL] [ VIA RDD] [ SDF | DELI MITED [ WI TH BLANK | cDelim it ador ] ]

Ar gum ento Obr igat . Tipo Descr ição

Nom e do arquivo cuj os registr os ser ão im por t ados,


Ar quiv o Sim pode ser apenas o nom e ou na for m a de um a
st ring.

List a dos cam pos a ser em copiados, se om it ido


Cam pos Não
serão copiados todos os cam pos.

Ex pr essão em ADVPL a ser r esolvida par a que o


CondFor Não
regist r o sej a copiado.

CondWhile Não Ex pr essão em ADVPL que deter m ina quando a


cópia deve par ar ( quando a expr essão r et or nar

147

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________148

.F.) .

Não
nRecs N Quant os regist r os dev em ser copiados.

nRecno Não N Núm er o do r ecno do r egist ro a ser copiado.

Nom e do RDD ut ilizado na im por tação ( ent r e aspas


RDD Não sim ples ou dupla) , se om itido será utilizado o RDD
corr ente.
Especifica qual caract er foi ut ilizado com o
cDelim itador Não C
delim it ador par a ger ar o ar quiv o do t ipo text o.

D escr içã o

Este com ando é ut ilizado par a copiar alguns registr os do ar quiv o especificado por "FROM cAr quiv o"
ut ilizando- se o dr iver especificado por "VIA RDD" se especificado.

Se for em especificados os cam pos de interesse atr av és de " FI ELDS Cam pos" , apenas eles serão copiados,
caso contr ário t odos cam pos o ser ão. Se não forem especificadas as condições para que o r egist r o seja
copiado, copia t oda a t abela com o se est iv esse especificada a opção " ALL" .

Pode- se especificar um escopo par a que os registr os sejam copiados atr avés das opções " FOR CondFor " e
"WHILE CondWhile" . Pode- se t am bém lim it ar o núm er o de r egist r os a ser em copiados at ravés da opção
"NEXT nRecs" e det er m inar que a cópia dos registr os dev e- se iniciar a part ir do registr o at ual com " REST",
m as caso contr ár io o com ando executa um DBGOTOP() ant es de iniciar a cópia. Se é desej ado copiar
apenas det er m inado r egist ro pode- se defini- lo at r av és da especificação do r ecno com "RECORD nRecno".

Além de copiar r egistr os de um a t abela norm al, pode- se copiar r egist ros de um arquivo t ex t o que
cont enha os dados desej ados. Ex ist em duas for m as de gerar est es arquivos text os com COPY TO,
ut ilizando- se o SDF que tr abalha com t am anhos de r egistr os e cam pos fix os ( preenchendo com espaços)
ou atr av és de um delim it ador que separa os cam pos" ,". Dev e- se especificar na cópia qual o t ipo do
ar quivo t ex to at ravés das opções "SDF" ou "DELI MI TED" .

Pode- se ainda especificar qual o delim itador ut ilizado nas str ings da seguinte form a:

• " DELIMITED WI TH BLANK" - as st r ings não possuem delim itador;


• " DELIMITED WI TH cDelim it ador " - as str ings são delim it adas com o caract er especificado;

Caso sej a om itido o delim it ador será consider ado o delim it ador padr ão ( " ").

Ex em plo

// Este exemplo demonstra como utilizar o comando APPEND FROM para acrescentar alguns
campos de registros (apenas 10 registros) de outra tabela pertencentes a um escopo
definido a partir do registro atual para a tabela corrente:
USE Cliente VIA "CTREECDX" NEW

148

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________149

APPEND FROM Amigos FIELDS Nome,Nascimento,End,Tel FOR Idade>20 WHILE Nome<"VVV" NEXT 10
REST
// Este exemplo demonstra como se pode utilizar o comando <@>COPY TO para gravar os dados
de uma tabela em um arquivo do tipo texto (DELIMITED) e incluí-los a outra tabela com o
comando APPEND FROM:
USE Amigos NEW
COPY TO temp DELIMITED // Registro: "Jose",19751108,69411233,12.00
COPY TO temp1 DELIMITED WITH BLANK // Registro: Jose 19751108 69411233 12.00
COPY TO temp2 DELIMITED WITH "@" // Registro: @Jose@,19751108,69411233,12.00
USE Cliente NEW
APPEND FROM temp DELIMITED
USE Cliente1 NEW
APPEND FROM temp1 DELIMITED WITH BLANK
USE Cliente2 NEW
APPEND FROM temp2 DELIMITED WITH "@"
// Este exemplo demonstra como se pode utilizar o comando <@>COPY TO para gravar os dados
de uma tabela em um arquivo do tipo texto (SDF) e incluí-los a outra tabela com o comando
APPEND FROM:
USE Amigos NEW
COPY TO temp3 SDF // Registro: Jose 1975110869411233 12.00
USE Cliente3 NEW
APPEND FROM temp3 SDF

Array
Cr ia um ar r ay com dados não inicializados.

Sin t ax e

ARRAY( nQt dElem entos1 , [ nQt dElem entosn ] ...) - - > aArr ay

Ar gum ento Obr igat. Tipo Descrição

nQtdElem ent os1 Sim N Quantidade de Elem ent os da 1ª dim ensão do ar ray.

Quantidade de Elem entos das dem ais dim ensões do


[ nQt dElem ent osN] Não N
ar r ay .

Retorno Descrição

ARRAY( ) Retorna um arr ay com as dim ensões especificadas.

D escr içã o

Ar ray( ) é um a função que r et or na um ar ray não inicializado com m últ iplas dim ensões.

Se m ais de um ar gum ent o for especificado, ser á r et or nado um ar ray m ult idim ensional

A vant agem de ut ilizar ARRAY( ) , ao inv és de out ras opções, é a possibilidade de usá- la em code blocks e
ex pr essões.

149

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________150

Ex em plo

// Exemplo 1 - Dois métodos idênticos.


aArray := ARRAY(5)
aArray := { NIL, NIL, NIL, NIL, NIL }
// Métodos equivalentes.
aArray := ARRAY(3, 2)
aArray := { {NIL, NIL}, {NIL, NIL}, {NIL, NIL} }
aArray := { ARRAY(2), ARRAY(2), ARRAY(2) }

AScan
Busca em um ar ray at é que o bloco ret or ne v er dadeir o .T.

Sin t ax e

ASCAN( aOrigem , expSear ch, [ nSt ar t ] , [ nCount ] ) - - > nSt oppedAt

Ar gum ento Obr igat. Tipo Descr ição

aOrigem Sim A É o ar ray onde será executada a ex pr essão.

É a posição a part ir da 1, do qual será inserido um


< expSearch> Sim Todos
elem ent o

Ar gum ento Descr ição

< aOrigem > Obr igat ór io, Ar ray. É o ar r ay onde será ex ecut ada a ex pr essão.

< expSearch> Obr igat ório, Qualquer Tipo. Casis either a sim ple v alue to scan for , or a code block .

If < expSearch> is a sim ple v alue it can be char acter, date, logical, or

num er ic t ype.

< nSt ar t> is t he st ar t ing elem ent of the scan. I f this ar gum ent is

not specified, the default st ar ting posit ion is one.

< nCount > is t he num ber of elem ent s t o scan fr om t he st ar ting

posit ion. If this ar gum ent is not specified, all elem ents fr om t he

st ar t ing elem ent t o t he end of t he ar ray ar e scanned.

Returns

ASCAN( ) r et ur ns a num er ic value repr esenting t he ar r ay posit ion of t helast elem ent scanned. I f
< expSearch> is a sim ple value, ASCAN( ) r et ur nst he posit ion of t he fir st m at ching elem ent , or zero if a
m at ch is notfound. I f < expSear ch> is a code block , ASCAN( ) r et ur ns t he posit ion oft he elem ent w her e t he
block r et ur ned t rue ( .T.) .

Descript ion

150

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________151

ASCAN( ) is an arr ay function t hat scans an arr ay for a specified v alueand oper at es like SEEK when
sear ching for a sim ple v alue. The< ex pSear ch> value is com par ed t o t he t ar get ar r ay elem ent beginning
witht he left m ost charact er in t he t arget elem ent and proceeding unt il ther eare no m ore charact ers left in
< expSearch> . I f ther e is no m atch,ASCAN( ) pr oceeds t o t he next elem ent in t he arr ay .Since ASCAN( )
uses t he equal oper at or ( = ) for com parisons, it issensit ive t o t he status of EXACT. I f EXACT is ON, t he
tar get ar rayelem ent m ust be ex act ly equal t o t he r esult of < expSear ch> t o m atch.I f the < expSear ch>
ar gum ent is a code block , ASCAN( ) scans the < aTar get &gt ar r ay executing t he block for each elem ent
accessed. As each elem ent isencountered, ASCAN( ) passes t he elem ent 's value as an argum ent t o t hecode
block, and t hen perform s an EVAL( ) on the block. The scanningoperation st ops when the code block
ret ur ns t r ue ( .T.) , or ASCAN( ) r eaches the last elem ent in t he arr ay.

Ex am ples

This ex am ple dem onst rat es scanning a t hr ee- elem ent ar ray using

sim ple values and a code block as sear ch crit er ia. The code block

cr iteria shows how t o per form a case- insensit iv e search:

aArr ay : = { " Tom " , " Mar y" , " Sue" }

? ASCAN( aAr r ay , " Mar y" ) / / Result: 2

? ASCAN( aAr r ay , " m ar y" ) / / Result: 0

//

? ASCAN( aAr r ay , { | x| UPPER( x ) ;

= = " MARY" } ) / / Result: 2

This ex am ple dem onst rat es scanning for m ult iple inst ances of a

sear ch ar gum ent aft er a m at ch is found:

LOCAL aAr r ay : = { " Tom ", "Mar y" , " Sue" ,;

"Mar y" } , nSt ar t : = 1

//

/ / Get last ar r ay elem ent position

nAtEnd : = LEN( aArr ay )

DO WHILE ( nPos : = ASCAN( aAr ray, "Mar y" , ;

nStart ) ) > 0

? nPos, aAr ray[ nPos]

//

/ / Get new st ar t ing posit ion and t est

/ / boundar y condition

IF ( nSt ar t : = + + nPos) > nAt End

EXIT

ENDI F

ENDDO

This ex am ple scans a t wo- dim ensional ar ray using a code block .

151

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________152

Note t hat t he param et er aVal in t he code block is an arr ay :

LOCAL aAr r : = { }

CLS

AADD( aArr ,{ " one" ," t wo" } )

AADD( aArr ,{ " three" ,"four" } )

AADD( aArr ,{ " fiv e" ," six "} )

? ASCAN( aAr r , { | aVal| aVal[ 2] = = " four " } ) / / Ret ur ns 2

See Also

AEVAL( )

EVAL( )

ASize
Acrescenta ou r eduz elem ent os de um ar ray.

Sin t ax e

ASIZ E( aOr igem , nNovoTam anho ) - - > aOrigem

Ar gum ento Obrigat. Tipo Descr ição

aOrigem Sim A É o ar ray que ser á m odificado.

É o novo t am anho do Arr ay . Caso sej a m aior do


nNovoTam anho Sim N que t am anho atual, os nov os elem ent os ficar ão
com conteúdo NI L.

Retorno Descrição

ASIZ E( ) Retorna um a refer ência ao ar ray aOrigem .

D escr içã o

ASIZ E( ) é um a função de m anipulação de ar r ay que aum ent a ou dim inui o t am anho de um arr ay .

No caso de dim inuição, os últ im os elem ent os ser ão apagados, em caso de aum ent o de t am anho, os nov os
elem entos t er ão conteúdo NI L.

Ex em plo s

aArray := { 1 } // Resultado: aArray is { 1 }

152

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________153

ASIZE(aArray, 3) // Resultado: aArray is { 1, NIL, NIL }


ASIZE(aArray, 1) // Resultado: aArray is { 1 }

ASort
Or dena um ar ray.

Sin t ax e

ASORT( aOrigem , [ nI nicio ] , [ nQtde ] , [ bOr dem ] ) - - > aOr igem

Ar gum ento Obrigat . Tipo Descr ição

aOrigem Sim A É o ar ray que ser á classificado.

Onde ser á o inicio da ordenação. Caso


nI nicio Nâo N sej a om it ido, ser á considerado o 1°
elem ent o do arr ay.

Quantidade de elem entos que ser ão


ordenados a par tir do nI nicio. Caso sej a
nQtde Não N
om itido, ser ão considerados t odos
elem ent os até o final do Arr ay .

É um bloco de código ( code block )


opcional que indicará a or dem corr et a
Bloco de dos elem ent os. Caso ele não sej a
bOrder Não
código inform ado, o arr ay será classificado em
ordem crescente desde que não seja
m ultidim ensional.

Retorno Descr ição

ASORT( ) Ret or na um a r eferência ao arr ay aOr igem .

D escr içã o

ASORT( ) é um a função de m anipulação de arr ay que classifica t odo ou par cialm ent e um ar r ay de t ipo
sim ples. Os t ipos que podem ser classificados aut om at icam ent e são: car acter, data, lógico e num ér ico.

Caso bOr der seja especificado, o code block ser á usado para or der nar o arr ay , neste caso, pode- se usar
dados de qualquer t ipo. Cada vez que o bloco for av aliado, serão passados dois elem ent os do ar r ay, caso
eles estej am em ordem , deve- se r et or nar .T.

Ex em plo s

// Exemplo 1
aArray := { 3, 5, 1, 2, 4 }
ASORT(aArray)

153

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________154

// Resultado: { 1, 2, 3, 4, 5 }
ASORT(aArray,,, { |x, y| x > y })
// Resultado: { 5, 4, 3, 2, 1 }
//Exemplo 2
aArray := { "Fred", Kate", "ALVIN", "friend" }
ASORT(aArray,,, { |x, y| UPPER(x) < UPPER(y) })
//Exemplo 3
aKids := { {"Mary", 14}, {"Joe", 23}, {"Art", 16} }
aSortKids := ASORT(aKids,,, { |x, y| x[2] < y[2] })
Resultado:
{ {"Mary", 14}, {"Art", 16}, {"Joe", 23} }

ATail
Retorna o últ im o elem ent o de um ar ray

Sin t ax e

ATAI L( aAr r ay ) - - > Elem ent

Ar gum ento Obrigat . Tipo Descr ição

É o arr ay de onde ser á r et ornado o últ im o


aArr ay Sim A
elem ent o.

Retorno Descr ição

ATAI L( ) Ret or na o últ im o elem ent o de um arr ay .

D escr içã o.

ATAI L( ) é um a função de m anipulação de ar ray que ret or na o últ im o elem ent o de um arr ay. Ela deve ser
usada em subst ituição da seguint e const rução: aAr r ay [ LEN( aAr r ay ) ]

Ex em plo s

aArray := {"a", "b", "c", "d"}


? ATAIL(aArray) // Resultado: d

BTVCanOpen
Verifica se a t abela BTr ieve pode ser abert a.

Sin t ax e

BTVCanOpen( cNom e , [ cI ndice ] ) - > Lógico

154

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________155

Ar gum ento Obr igat . Tipo Descr ição

cNom e Sim C Nom e da t abela a ser t est ada.

cI ndice Não C Nom e do ar quiv o de índice da t abela a ser


t est ada.

Retorno Descr ição

Não é possível abr ir a t abela test ada. Pr incipais m ot iv os: Não ex ist e o arquivo da
.F. t abela ou do índice fisicam ent e, ou as definições da t abela ou índice em questão
não for am encontr adas.

.T. A t abela t est ada pode ser aber ta.

D escr içã o

Esta função v er ifica se a t abela definida pelo par âm etr o cNom e pode ser abert a e, se ex ist ir , o par âm et ro
cI ndice v er ifica, t am bém , se o índice pode ser aber to. Para t ant o, é t est ado se os ar quiv os env olv idos
ex ist em fisicam ent e, caso afir m at ivo, é v er ificado se as definições envolvidas são encontr adas nos
ar quivos do DDF's.

Ex em plo

// Este exemplo demonstra o uso típico de BTVCanOpen(). Se não falhar, a tabela e o


índice testados serão abertos. Se falhar, uma mensagem é apresentada.
IF !BTVCanOpen("\dadosadv\aa1990.dat", "\dadosadv\ind1.ind")
Messagebox("Não é possível abrir a tabela testada","Erro", 0)
BREAK
ELSE
Use "\dadosadv\aa1990.dat" SHARED NEW
OrdListAdd("\dadosadv\ind1.ind")
ENDIF

BTVCreateDDFs
Gera os ar quiv os de definições ( DDF´ s) com patíveis com out r as fer r am ent as que m anipulam ar quiv os
Bt rieve ( Cr yst al Repor t s) .

Sin t ax e

BTVCr eat eDDFs ( aTabelas , [ cDir et or io ] ) - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

aTabelas Sim A Nom es das t abelas e os respectivos dir et órios ( opcional) .

cDir et orio Não C Nom e do diretório ( abaixo do r oot ) onde serão cr iados os nov os
DDF's.

155

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________156

Retorno Descr ição

Não conseguiu ger ar os novos ar quivos de definição. Pr incipais er r os: RDD


não é Btr iev e; dir etório não est á dent ro do Protheus; não pode carr egar as
.F.
inform ações de definição ou não pode gravar os novos arquiv os de
definição.

.T.
Transfor m ação de definições ocorr ida com sucesso.

D escr içã o

Esta função tr ansform a as infor m ações ar m azenadas nos arquiv os DDF's para o padrão ut ilizado por
outr as ferr am entas, pr incipalm ent e para ger ação de r elat ór ios. Sendo que podem ser selecionadas apenas
as tabelas de inter esse atr avés do par âm et ro aTabelas.

Ex : aTabelas : = { { " AA3990" , " C: \ DADOS" } ,{ " AA4990", "C: \ DADOS1"} ,{ " AA5990" } }

Se o dir et ório não for especificado, será ut ilizado o dir et ór io definido no ar quiv o FI LE.BTV.

Os novos ar quiv os de definição, FI LE.DDF, FI ELD.DDF e INDEX.DDF, são gerados no diretór io


especificado pelo parâm etr o cDiretório, se ele for om itido, serão gerados no m esm o dir et ór io dos SXs.

Ex em plo

// Este exemplo demonstra o uso típico de BTVCreateDDFs(). Se não falhar, serão gerados
os novos arquivos de definição. Se falhar, uma mensagem é apresentada.
b:= {{"AA3990"}, {"SA1990", "c:\protheus507\dadosadv"}}
IF !BTVCreateDDFs(b, "\temp") // Será concatenado com o RootPath
Messagebox("Não foi possível montar o array com os nomes das tabelas","Erro", 0)
BREAK
ENDIF

BTVDropI dxs
Apaga os índices da tabela corr ente.

Sin t ax e

BTVDr opI dxs ( ) - > Lógico

Retor no Descr ição

Não conseguiu apagar os índices. Pr incipais er r os: RDD não é Bt riev e, não achou as definições
.F.
no DDF, o ar quiv o não est á ex clusivo

156

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________157

.T. Deleção de índices ocor r ida com sucesso

D escr içã o

A função BTVDropI dx s apaga os índices da t abela corr ent e, com exceção do índice int er no, apenas se
o m esm o for Bt rieve e est iver aber t o ex clusivo. Par a t anto ela ex ecut a os seguintes passos:

1. Fecha t odos os índices;

2. Apaga as definições dos índices nos ar quivos do diretório DDF;

3. Apaga os índices do ar quivo da tabela cor r ent e. Todos os índices cr iados de for m a per m anente
ficam guardados na estr ut ur a da t abela. Quando a t abela for aber t a, t odos os índices cr iados de
for m a per m anente e o índice interno ser ão aber t os t am bém . Por isso, é recom endada a cr iação de
índices de form a t em porária.

Ex em plo

// Este exemplo demonstra o uso típico de BTVDropIdxs(). Se não falhar, os índices são
apagados e o processo continua. Se falhar, uma mensagem é apresentada.
USE Clientes SHARED NEW
IF !BTVDropIdxs()
Messagebox("Não foi possível deletar os índices da tabela corrente","Erro", 0)
BREAK
ENDIF

BTVTables
Retorna ar r ay com post o por nom es das t abelas definidas no DDF do Protheus ( FI LE.BTV) .

Sin t ax e

BTVTables ( ) - - > Ar ray

Retorno Descr ição

NI L Não conseguiu m ont ar o ar r ay . Pr incipais er ros: RDD não é Btr iev e ou


não conseguiu recuperar as inform ações cor r et am ent e do arquivo
FILE.BTV do DDFs.

Ar ray List a com os nom es das t abelas ex t raídas do DDF.

D escr içã o

Verifica t odos os nom es das t abelas ar m azenados no ar quivo FILE.BTV do DDF e r et or na um ar ray com
todos eles. Toda t abela criada possui o nom e acrescentado neste ar quiv o de definições.

Ex em plo

// Este exemplo demonstra o uso típico de BTVTables(). Se não falhar, é montado um array
com os nomes das tabelas e esses nomes são mostrados no servidor. Se falhar, uma mensagem
é apresentada.

157

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________158

a:= BTVTables()
IF a=Nil
Messagebox("Não foi possível montar o array com os nomes das tabelas","Erro", 0)
BREAK
ELSE
FOR i:= 1 to LEN(a)
ConOut(a[i])
NEXT
ENDIF

CDow
Conv er te um a dat a para um a cadeia de car acteres cont endo o dia da sem ana.

Sin t ax e

CDOW( dEx p ) - - > Car acter

Ar gum ento Obrigat . Tipo Descrição

dExp Sim D É a dat a a conv er t er .

Retorno Descr ição

Nom e do dia da sem ana com o um a cadeia de


Caract er car acter es. A pr im eira letr a é m aiúscula e as dem ais
m inúsculas.

"" Caso a data seja inválida ou nula

D escr içã o

CDOW( ) é um a função que conver te um a dat a para um a cadeia de caract eres.

Ex em plo s

dData := DATE() // Resultado: 09/01/90


cDiaDaSemana := CDOW(DATE()) // Resultado: Friday
cDiaDaSemana := CDOW(DATE() + 7) // Resultado: Friday
cDiaDaSemana := CDOW(CTOD("06/12/90")) // Resultado: Tuesday

CMonth
Conv er te um a dat a para um a cadeia de car acteres cont ent o o nom e do m ês.

Sin t ax e

158

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________159

CMONTH( dDat a ) - - > Caract er

Ar gum ento Obr igat . Tipo Descr ição

dDat a S D É a data a conver ter.

Retorno Descrição

Caract er Retor na o nom e do m ês em um a cadeia de car act er es. A prim eir a


let ra do r et orno em m aiúscula e o rest ante do nom e, em
m inúsculas.

"" Caso a data sej a inválida ou nula.

D escr içã o

CMONTH( ) é um a função de conversão de datas que r et or na um a cadeia de car acteres com o nom e do
m ês em inglês.

Ex em plo s

Estes exem plos ilust ram CMONTH( ) :

cMes := CMONTH(DATE()) // Resultado: September


cMes := CMONTH(DATE() + 45) // Resultado: October
cMes := CMONTH(CTOD("12/01/94")) // Resultado: December
cMes := SUBSTR(CMONTH(DATE()), 1, 3) + STR(DAY(DATE())) // Resultado: Sep 1

Commit
Salv a em disco as m odificações de t odas as t abelas.

Sin t ax e

COMMI T

D escr içã o

Este com ando salv a em disco t odas as at ualizações pendent es em t odas as áreas de t rabalho.

Ex em plo

// Este exemplo demonstra como se pode utilizar o COMMIT para salvar todas as alterações
realizadas nas áreas de trabalho abertas no momento.
USE Clientes NEW
DBGOTO(100)
Nome := "Jose"
USE Fornecedores NEW
DBGOTO(168)
Nome := "Joao"
COMMIT// Salva em disco as alterações realizadas nas tabelas Clientes e Fornecedores

159

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________160

Copy To
Copia r egist ros da t abela cor r ente par a um a nova t abela.

Sin t ax e

COPY TO Arquivo [ FIELDS Cam pos] [ FOR CondFor ] [ WHI LE CondWhile] [ NEXT nRecs] [ RECORD nRecno]
[ REST] [ ALL] [ VIA RDD] [ SDF | DELIMITED [ WI TH BLANK | cDelim itador ] ]

Ar gum ento Obr igat . Tipo Descr ição

Nom e do arquivo cuj os regist r os ser ão expor t ados,


Ar quiv o Sim
pode ser apenas o nom e ou na form a de um a str ing

List a dos cam pos a ser em copiados, se om it ido


Cam pos Não
serão copiados todos os cam pos.

Ex pr essão em ADVPL a ser r esolvida par a que o


CondFor Não
regist r o sej a copiado.

Ex pr essão em ADVPL que det er m ina quando a


CondWhile Não
cópia dev e parar ( quando a expr essão r et or nar
.F.) .
nRecs Não N Quando registr os devem ser copiados.

nRecno Não N Núm er o do r ecno do r egist ro a ser copiado.

Nom e do RDD ut ilizado na im por t ação ( ent re aspas


RDD Não sim ples ou dupla) , se om it ido ser á ut ilizado o RDD
corr ente.

Especifica qual caract er foi ut ilizado com o


cDelim itador Não C
delim it ador par a ger ar o ar quiv o do t ipo text o.

D escr içã o

Este com ando é ut ilizado para copiar alguns r egist ros da t abela cor rent e par a o ar quivo especificado por
"TO cArquivo" utilizando- se o driv er especificado por "VIA RDD" se especificado. Se for em especificados os
cam pos de int er esse at ravés de " FI ELDS Cam pos" apenas eles ser ão copiados, caso cont rár io t odos
cam pos o ser ão. Se não for em especificadas as condições par a que o regist r o sej a copiado, copia toda a
tabela com o se estiv esse especificada a opção " ALL" .

Pode- se especificar um escopo par a que os registr os sejam copiados atr avés das opções " FOR CondFor " e
"WHILE CondWhile" . Pode- se t am bém lim it ar o núm er o de r egist r os a ser em copiados at ravés da opção
"NEXT nRecs" e det er m inar que a cópia dos registr os dev e- se iniciar a part ir do registr o at ual com " REST",
m as caso contr ár io o com ando executa um DBGOTOP() ant es de iniciar a cópia. Se é desej ado copiar
apenas det er m inado r egist r o pode- se defini- lo at r av és da especificação do r ecno com "RECORD nRecno".

160

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________161

Além de copiar r egist ros para um a t abela norm al, pode- se copiar registr os par a um ar quivo t ex to que
cont enha os dados desej ados. Ex ist em duas for m as de gerar est es arquivos text os com COPY TO,
ut ilizando- se o SDF que tr abalha com t am anhos de r egistr os e cam pos fix os ( preenchendo com espaços)
ou atr av és de um delim it ador que separa os cam pos" ,". Dev e- se especificar na cópia qual o t ipo do
ar quivo t ex to atr av és das opções "SDF" ou " DELI MITED". Pode- se ainda especificar qual o delim it ador
ut ilizado nas st r ings da seguint e for m a:

• " DELIMITED WI TH BLANK" - as st r ings não possuem delim itador;

• " DELIMITED WI TH cDelim it ador " - as str ings são delim it adas com o caract er especificado;

Caso sej a om itido, o delim itador ser á considerado o delim itador padrão ( " ").

Ex em plo

// Este exemplo demonstra como utilizar o comando COPY TO criar nova tabela com alguns
campos escolhidos e alguns registros (apenas 10) da tabela atual pertencentes a um escopo
definido a partir do registro atual para determinada tabela:
USE Cliente VIA "CTREECDX" NEW
COPY TO Amigos FIELDS Nome,Nascimento,End,Tel FOR Idade>20 WHILE Nome<"VVV" NEXT 10 REST
// Este exemplo demonstra como se pode utilizar o comando COPY TO para gravar os dados de
uma tabela em um arquivo do tipo texto (DELIMITED) e incluí-los a outra tabela com o
comando APPEND FROM:
USE Amigos NEW
COPY TO temp DELIMITED // Registro: "Jose",19751108,69411233,12.00
COPY TO temp1 DELIMITED WITH BLANK // Registro: Jose 19751108 69411233 12.00
COPY TO temp2 DELIMITED WITH "@" // Registro: @Jose@,19751108,69411233,12.00
USE Cliente NEW
APPEND FROM temp DELIMITED
USE Cliente1 NEW
APPEND FROM temp1 DELIMITED WITH BLANK
USE Cliente2 NEW
APPEND FROM temp2 DELIMITED WITH "@"
// Este exemplo demonstra como se pode utilizar o comando <@>COPY TO para gravar os dados
de uma tabela em um arquivo do tipo texto (SDF) e incluí-los a outra tabela com o comando
APPEND FROM:
USE Amigos NEW
COPY TO temp3 SDF // Registro: Jose 1975110869411233 12.00
USE Cliente3 NEW
APPEND FROM temp3 SDF

Copy File
Copia Ar quivos.

Sin t ax e

Copy File( cOr igem , cDest ino) - - > NI L

Ar gum ento Obrigat . Tipo Descr ição

cOrigem Sim C Nom es dos ar quivos a ser em copiados, aceit a t anto


arquivos locais ( Client e ) , com o ar quiv os que est ão

161

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________162

no Serv idor. WildCar ds são aceit os nor m alm ente.

Dir et ório com o dest ino dos ar quiv os a serem


cDestino Sim C copiados, podendo t am bém ser no serv idor ou no
client e ( est ação local ) .

Retorno Descrição

NI L Sem retorno.

D escr içã o

Copia um arquivo, da or igem par a o dest ino, os car act er es * e ?, são aceit os nor m alm ent e.

Caso a origem est eja no cliente e o dest ino no serv idor os ar quivos são copiados par a o serv idor, o
cont r ár io tam bém é valido.

Ex em plo

_ _ Copy File( " C: \ TEMP\ * .DBF" , " \ BKP\ * .DBF" ) / / Copia arquivos do cliente par a o Ser vidor

_ _ Cop yFile( "\ TEMP\ * .DBF" , " \ BKP\ * .DBF" ) / / Copia ar quiv os no ser vidor

Copy Structure
Copia a est rut ur a da t abela cor r ente par a um a nova t abela.

Sin t ax e

COPY STRUCTURE [ FIELDS Cam pos] TO Ar quiv o

Ar gum ento Obrigat . Tipo Descr ição

List a dos cam pos a serem incluídos na nova t abela,


Cam pos Não
se om itido serão incluídos todos os cam pos.

Ar quiv o Sim C Nom e do arquivo da nov a tabela a ser criada.

D escr içã o

Este com ando é utilizado par a cr iar nov a tabela copiando a est r ut ur a da t abela atual, sendo que pode- se
selecionar apenas os cam pos de int er esse atr avés da opção " FI ELD Cam pos" que se om it ida, deixa que o
com ando copie t oda a estr ut ura.

Sem elhant e ao funcionam ent o da função DBCREATE com a passagem de par âm et ro DBSTRUCT.

162

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________163

Ex em plo

// Este exemplo demonstra como utilizar o comando COPY STRUCTURE no seu modo mais usual:
USE Cliente NEW
COPY STRUCTURE FIELDS Nome,Idade TO NovoCliente
// Este exemplo demonstra como o comando COPY STRUCTURE pode substituir o DBCREATE:
USE Cliente NEW
COPY STRUCTURE TO NovoCliente
// *** é semelhante a ***
USE Cliente NEW
DBCREATE("NovoCliente",DBSTRUCT())

CPYS2T
Copia ar quivos do serv idor para o client e ( Rem ot e ) .

Sin t ax e

CpyS2T( cOrigem , cDest ino, [ lCom pacta] ) - - > NI L

Ar gum ento Obrigat . Tipo Descr ição

Nom es dos arquivos a ser em copiados, aceita


cOrigem Sim C apenas ar quiv os no ser vidor, WildCards são aceit os
nor m alm ent e.

Dir et ório com o destino dos arquivos no r em ote


cDestino Sim C
( Cliente) .

I ndica se a cópia dev e ser feit a com pactando o


lCom pact a Não L
arquivo antes.

Retorno Descrição

.T. Ar quivo foi copiado par a o client e com sucesso

.F. Er r o na cópia do Arquiv o.

D escr içã o

Copia um arquiv o, do ser vidor par a o client e ( Rem ote ) , os car acteres * e ?, são aceit os nor m alm ent e.

Caso a com pact ação sej a habilitada ( lCom pacta ) , os dados ser ão t r ansm it idos de m aneir a com pactada e
descom pact ados ant es do uso.

Ex em plo

CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP", .T. ) // Copia arquivos do servidor para o remote


local, compactando antes de transmitir

163

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________164

CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP", .F. ) // Copia arquivos do servidor para o remote


local, sem compactar antes de transmitir

CPYT2S
Copia Ar quivos entr e o Client e ( Ter m inal ) par a o ser vidor .

Sin t ax e

CpyT2S( cOrigem , cDest ino, [ lCom pact a ] ) - - > NIL

Ar gum ento Obrigat . Tipo Descr ição

Nom es dos arquivos a ser em copiados, aceita


cOrigem Sim C apenas ar quiv os locais ( Client e ) , WildCar ds são
aceitos norm alm ent e.

Dir et ório com o dest ino dos ar quivos no r em ote (


cDestino Sim C
Client e ) .

I ndica se a cópia dev e ser feit a com pactando o


lCom pact a Não L
arquivo antes.

Retorno Descrição

.T. Ar quivo foi copiado par a o client e com sucesso.

.F. Er r o na cópia do Arquiv o.

D escr içã o

Copia um arquiv o, do client e ( Rem ote ) par a o ser vidor , os caract eres * e ?, são aceitos norm alm ent e.

Caso a com pactação sej a habilit ada ( lCom pact a ) , os dados ser ão t r ansm it idos de m aneir a com pacta e
descom pact ados ant es do uso.

Ex em plo

CpyT2S( "C:\TEMP\MANUAL.DOC", "\BKP", .T. ) // Copia arquivos do cliente( remote ) para o


Servidor compactando antes de transmitir
CpyT2S( "C:\TEMP\MANUAL.DOC", "\BKP" ) // Copia arquivos do cliente( remote ) para o
Servidor sem compactar.

CTreeDelI dxs

164

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________165

Deleta os índices da tabela corr ente.

Sin t ax e

CTreeDelIdxs( ) - > Lógico

Retorno Descr ição

.F. Não conseguiu delet ar os índices. Principais er ros: RDD não é Ctr e; não
fechou a t abela; não apagou o arquivo de índice; não at ualizou as
inform ações da t abela; não abriu a t abela nov am ent e.

.T. Deleção de índices ocor rida com sucesso.

D escr içã o

A função Ctr eeDelI dxs apaga os índices da t abela cor rent e, com exceção do índice int er no, apenas se
o m esm o for CTree e est iv er ex clusiva. Par a tant o, ela executa os seguint es passos:

1. Fecha os índices abert os;

2. Fecha a t abela;

3. Delet a os ar quiv os de índice fisicam ent e;

4. At ualiza as infor m ações da tabela, r em ov endo os índices de sua est r ut ur a;

5. Abre nov am ent e a t abela.

Todos os índices cr iados de form a per m anente ficam guardados na estr ut ura da tabela. Por tant o, não
adiant a delet ar os arquivos de índices, pois quando a t abela for abert a, t odos os índices cr iados de form a
perm anent e e o índice interno ser ão r ecriados fisicam ente ( se não ex istir em ) ; caso cont r ár io, a t abela não
será aber ta. Por isso, é r ecom endada a criação de índices de form a tem por ár ia.

Ex em plo

/ / Est e exem plo dem onst r a o uso típico de Ctr eeDelI dxs( ) . Se não falhar , os índices são apagados e o
pr ocesso cont inua. Se falhar, um a m ensagem é apr esentada.

USE Clientes SHARED NEW


IF !CtreeDelIdxs()
Messagebox("Não foi possível deletar os índices da tabela corrente","Erro", 0)
BREAK
ENDIF

CTreeDellnt
Deleta índice int er no da t abela CTree.

Sin t ax e

CTreeDelInt ( cNom e ) - > Lógico

165

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________166

Ar gum ento Obrigat . Tipo Descr ição

cNom e Sim C Especifica o nom e da tabela cuj o índice int er no deve ser
delet ado.

Retorno Descr ição

Não conseguiu delet ar o índice int er no. Principais er ros: tabela não está
.F. dentr o do dir etório do Pr ot heus; não abr iu a tabela ou não delet ou o
arquivo de índice interno.

.T. Deleção do índice int er no ocor rida com sucesso.

D escr içã o

A função Ctr eeDelI nt apaga o índice inter no de tabela Ctr ee, est ando a m esm a fechada. Para t ant o,
são ex ecut ados os seguint es pr ocedim ent os:

1. Abre a tabela especificada pelo parâm et r o cNom e;

2. Verifica o nom e do arquiv o do índice interno na tabela;

3. Fecha a t abela;

4. Delet a fisicam ente o ar quiv o do índice int er no.


A t abela deve ser apagada após a cham ada desta função, pois a t abela CTree não pode ser aber t a sem
índice int er no.

Ex em plo

// Este exemplo demonstra o uso típico de CtreeDelInt(). Sendo que a tabela


"\DADOSADV\SA1990.DTC" deve estar fechada. Se não falhar, o índice interno é apagado e o
processo continua. Se falhar, uma mensagem é apresentada.
IF !CtreeDelInt("\dadosadv\sa1990.dtc")
Messagebox("Não foi possível deletar o índice da tabela","Erro", 0)
BREAK
ENDIF
fErase("\dadosadv\sa1990.dtc")

CurDir
Retorna o dir et ório cor rent e.

Sin t ax e

CURDI R( [ cNovoDir ] ) - - > cDirAtual

Ar gum ento Obrigat . Tipo Descr ição

Cam inho com o nov o diret ór io que ser á aj ust ado


cNov oDir Não C
com o corr ente.

166

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________167

Retorno Descr ição

cDir At ual Dir et ór io cor rent e, sem a últ im a bar r a.

D escr içã o

Retorna o dir et ór io corr ent e do ser vidor, caso sej a passado um cam inho com o par âm et ro, esse diretór io
passar á a ser o default .

Ex em plo

? CURDIR("C:\TEMP")

Date
Retorna a dat a do sist em a.

Sin t ax e

DATE( ) - - > Dat a

Retorno Descr ição

Data Dat a do sistem a.

D escr içã o

DATE( ) é a função que ret or na a dat a do atual sist em a. O for m ato de saída é contr olado pelo com ando
SET DATE. O for m at o padr ão é m m / dd/ y y.

Ex em plo s

Estes exem plos m ostr am com o usar a função DATE( ) :

dData := DATE() // Resultado: 09/01/01


dData := DATE() + 30 // Resultado: 10/01/01
dData := DATE() - 30 // Resultado: 08/02/90
dData := DATE()
cMes := CMONTH(dData) // Resultado: September

Day
Retorna o dia do m ês com o v alor num ér ico.

Sin t ax e

167

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________168

DAY( dDat a ) - - > Num érico

Ar gum ento Obr igat. Tipo Descr ição

dDat a Sim D É a data a conv er ter .

Retorno Descr ição

>=0 e Se o m ês do argum ent o dDat a for fevereir o, anos bissex tos são
< = 31 consider ados.

Se a data do argum ent o dDat a for 29 de fev er eir o e o ano não


0
for bissext o, ou se o argum ent o dDat a for vazio.

D escr içã o

DAY( ) é um a função de conv er são de dat as usada par a convert er o valor dat a em um núm ero inteiro que
repr esent a o dia do m ês.

Esta função pode ser usada em conjunt o com CMONTH() e YEAR() par a for m at ar datas. Pode ser usada
tam bém em div er sos cálculos env olvendo dat as.

Ex em plo s

Estes exem plos m ostr am a função DAY( ) de div er sas m aneir as:

dData := DATE() // Resultado: 09/01/01


nDia := DAY(DATE()) // Resultado: 1
nDia := DAY(DATE()) + 1 // Resultado: 2
nDia := DAY(CTOD("12/01/94")) // Resultado: 1
Este exemplo mostra a função DAY() usada em conjunto com CMONTH() e
YEAR() para formatar o valor da data:
dData := Date()
cData := CMONTH(dData) + STR(DAY(dData)) + "," + STR(YEAR(dData)) // Resultado: June 15,
2001

DBAppend
Acrescenta um novo r egist r o na t abela cor r ente.

Sin t ax e

DBAppend ( [ lLiberaBloqueios ] ) - > Nil

Ar gum ento Obr igat. Tipo Descrição

lLiberaBloqueios Não L Liber a t odos os r egistr os bloqueados ( locks) , valor padrão é .T.

168

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________169

D escr içã o

Esta função acr escent a m ais um registr o em branco no final da tabela corr ente, sem pre é acrescentado e
bloqueado. Se o par âm etr o est iv er com v alor .T., t odos os bloqueios de registr os ant erior es são liber ados
para que o nov o registr o sej a acrescentado, caso cont rário, se for .F., t odos os bloqueios ant er ior es são
m antidos.

Se est e par âm etr o não for especificado, o valor padrão é .T..

Ex em plo

// Este exemplo demonstra como se pode utilizar o dbappend liberando e mantendo bloqueios
anteriores.
USE Clientes NEW
FOR i:=1 to 5
DBAPPEND(.F.)
NOME := "XXX"
END : "YYY"
NEXT
// Os 5 registros incluídos permanecem bloqueados
DBAPPEND()
// Todos os bloqueios anteriores são liberados

DBClearAllFilter
Lim pa a condição de filtr o de todas as or dem as ordens da lista.

Sin t ax e

DBClearAllFilt er ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função salva as atualizações r ealizadas e pendent es de t odas as t abelas e depois lim pa as condições
de filtr o de todas as or dens inclusas na list a. Seu funcionam ent o é opost o ao com ando SET FILTER.

Ex em plo

// Este exemplo demonstra como se pode utilizar DBCLEARALLFILTER para limpar a expressão
de filtro.
USE Clientes NEW
DBSETFILTER( {|| Idade < 40}, "Idade < 40" ) // Seta a expressão de filtro
...
DBCLEARALLFILTER() // Limpa a expressão de filtro de todas as ordens

169

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________170

DBClearFilter
Lim pa a condição de filtr o.

Sin t ax e

DBClearFilt er ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função salva as at ualizações realizadas e pendent es na tabela cor r ente e depois lim pa todas as
condições de filt ro da ordem at iva no m om ento. Seu funcionam ento é opost o ao com ando SET FILTER.

Ex em plo

// Este exemplo demonstra como se pode utilizar DBCLEARFILTER para limpar a expressão de
filtro.
USE Clientes NEW
DBSETFILTER( {|| Idade < 40}, "Idade < 40" ) // Seta a expressão de filtro
...
DBCLEARFILTER() // Limpa a expressão de filtro

DBCloseAll
Fecha t odas as t abelas abert as.

Sin t ax e

DBCloseAll ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função salv a as atualizações pendent es, libera t odos os r egist ros bloqueados e fecha t odas as t abelas
aber tas ( ár eas de tr abalho) com o se cham asse DBCLOSEAREA para cada área de tr abalho.

Ex em plo

170

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________171

// Este exemplo demonstra como se pode utilizar o DBCLOSEALL para fechar a área de
trabalho atual.
USE Clientes NEW
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome"
USE Fornecedores NEW
DBSETINDEX("Idade") // Abre o arquivo de índice "Idade"
...
DBCLOSEALL() // Fecha todas as áreas de trabalho, todos os indices e ordens

DBCloseArea
Fecha a área de t r abalho.

Sin t ax e

DBCloseArea ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função salva as at ualizações pendentes na t abela cor rent e, libera todos os r egist ros bloqueados e
fecha a tabela corr ente ( ár ea de tr abalho) . Seu funcionam ent o é sem elhant e ao com ando CLOSE e é
oposto à função DBUSEAREA e ao com ando USE.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBCLOSEAREA para fechar a área de
trabalho atual.
USE Clientes NEW
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome"
...
DBCLOSEAREA() // Fecha a área de trabalho atual, todos os indices e ordens

DBClearI ndex
Fecha t odos os ar quivos de índice da área de tr abalho.

Sin t ax e

DBClearI ndex ( ) - > Nil

Retorno Descrição

NI L Nenhum

171

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________172

D escr içã o

Esta função salva as at ualizações pendentes na t abela cor rent e e fecha t odos os ar quiv os de índice da
ár ea de tr abalho, por conseqüência lim pa t odas as or dens da lista. Seu funcionam ent o é opost o ao
com ando < @> SET I NDEX.

Ex em plo

// Este exemplo demonstra como se pode utilizar a função DBCLEARINDEX para fechar os
índices.
USE Clientes NEW
DBSETINDEX("Nome") // Abre o arquivo de índice "Nome"
...
DBCLEARINDEX() // Fecha todos os arquivos de índices

DBCommit
Salv a em disco todas as m odificações da t abela cor r ente.

Sin t ax e

DBCom m it ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função salv a em disco todas as at ualizações pendentes na ár ea de t rabalho cor rent e.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBCOMMIT para salvar todas as
alterações realizadas na área de trabalho atual.
USE Clientes NEW
DBGOTO(100)
Nome := "Jose"
USE Fornecedores NEW
DBGOTO(168)
Nome := "Joao"
DBCOMMIT() // Salva em disco apenas as alterações realizadas na tabela Fornecedores

DBCommitAll
Salv a em disco todas as m odificações.

Sin t ax e

172

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________173

DBCom m it All ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função salv a em disco todas as at ualizações pendentes em t odas as áreas de t rabalho.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBCOMMITALL para salvar todas as
alterações realizadas nas áreas de trabalho abertas no momento.
USE Clientes NEW
DBGOTO(100)
Nome := "Jose"
USE Fornecedores NEW
DBGOTO(168)
Nome := "Joao"
DBCOMMITALL() // Salva em disco as alterações realizadas nas tabelas Clientes e
Fornecedores

DBCreate
Cr ia nova t abela.

Sin t ax e

DBCREATE( cNom e , aEstr ut ur a , [ cDriv er ] ) - - > Nil

Ar gum ento Obrigat . Tipo Descrição

cNom e S C Nom e do ar quiv o da tabela a ser criada ( abaixo do " Root Pat h") .

aEst r ut ur a S Arr ay Lista com as infor m ações dos cam pos para ser cr iada a t abela.

Nom e do RDD a ser utilizado par a a cr iação da tabela. Se for om it ido


cDriver N C
será cr iada com o corr ente.

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função é ut ilizada par a criar um novo ar quivo de tabela cuj o nom e est á especificado at ravés do
pr im eir o parâm et r o ( cNom e) e est rutura at ravés do segundo ( aEst r ut ur a) .

173

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________174

A estr ut ur a é especificada atr av és de um ar ray com t odos os cam pos, onde cada cam po é ex pr esso
at r avés de um arr ay cont endo { Nom e, Tipo, Tam anho, Decim ais} , com o v ist o no exem plo a seguir .

Ex em plo

// Este exemplo mostra como se pode criar novo arquivo de tabela através da função
DBCREATE:
LOCAL aEstrutura := {{Cod,N,3,0},{Nome,C,10,0},{Idade,N,3,0},{Nasc,D,8,0},{Pagto, N,7,2}}
DBCREATE("\teste\amigos.xxx",aEstrutura) // Cria a tabela com o RDD corrente
USE "\teste\amigos.xxx" VIA "DBFCDX" NEW

DBCreateI ndex
Cr ia um ar quivo de índice.

Sin t ax e

DBCREATEI NDEX( cNom e , cExpChave , [ bExpChav e ] , [ lUnico ] ) - - > Nil

Ar gum ento Obrigat. Tipo Descr ição

cNom e S C Nom e do arquivo de índice a ser cr iado.

Expressão das chaves do índice a ser cr iado na for m a de


cExpChave S C
st ring.

Bloco de Expressão das chav es do índice a ser cr iado na for m a


bExpChave N
Código executável.

lUnico N L Cria índice com o único ( o padr ão é .F.) .

Retorno
Descr ição

Não há tabela corr ent e ou a posição do cam po especificado está inválida.


I nfor m ação do cam po I nform ação r equisit ada pelo usuár io ( pode ser de t ipo num érico se for
Nil
t am anho ou casas decim ais, t ipo car act er se for nom e ou tipo) .

D escr içã o

Esta função é utilizada par a cr iar um novo arquivo de índice com o nom e especificado at ravés do pr im eiro
parâm et r o, sendo que se o m esm o ex istir é delet ado e cr iado o novo. Para t anto são executados os
passos a seguir :

1. Salva fisicam ent e as alter ações ocor ridas na t abela cor rent e;

2. Fecha t odos os arquivos de índice aber tos;

3. Cr ia o novo índice;

174

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________175

4. Seta o novo índice com o a or dem corr ent e;

5. Posiciona a tabela corr ente no prim eir o r egist ro do índice.

Com exceção do RDD Ct ree, a tabela corr ente não pr ecisa est ar abert a em m odo ex clusivo par a a cr iação
de índice, pois na criação de índices no Ct ree é alt er ada a estr ut ura da tabela, precisando para isto a
tabela estar abert a em m odo ex clusivo.

Ex em plo

// Este exemplo mostra como se pode criar novo arquivo de índice criando a ordem sobre os
campos Nome e End e não aceitará duplicação:
USE Cliente VIA "DBFCDX" NEW
DBCREATEINDEX ("\teste\ind2.cdx","Nome+End",{ || Nome+End },.T.)

DBDelete
Marca o ar quivo cor r ente com o delet ado.

Sin t ax e

DBDelete ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função m arca o ar quiv o cor rent e com o delet ado de m odo sem elhante ao com ando DELETE. Para
filt rar os ar quiv os m ar cados pode- se ut ilizar o com ando SET DELETED e para deletá- los fisicam ente pode-
se ut ilizar o com ando PACK.

Ex em plo

// Este exemplo demonstra como se pode utilizar a função DBDELETE() para marcar alguns
registros como deletados e o PACK para deletá-los fisicamente.
USE Clientes NEW
DBGOTO(100)
DBDELETE()
DBGOTO(105)
DBDELETE()
DBGOTO(110)
DBDELETE()
PACK

DBEval
Ex ecut a um a ex pr essão para os r egist ros dentr o das condições especificadas.

175

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________176

Sin t ax e

DBEVAL( bBloco, [ bForCond ] , [ bWhileCond ] , [ nProxRegs ] , [ nRecno ] , [ lRest ante ] ) - - > Nil

Ar gum ento Obr igat. Tipo Descrição

Bloco de Ex pr essão na form a executável a ser r esolv ida par a cada


bBloco S
Código registr o processado.

Bloco de Ex pr essão na for m a executável a ser r esolv ida par a verificar se


bFor Cond N
Código o r egistr o em quest ão está dent ro do escopo definido.

Bloco de Ex pr essão na form a executável a ser resolvida par a ver ificar até
bWhileCond N
Código qual regist r o ser á pr ocessado ( at é o bloco r et or nar .F.) .

Núm er o de registr os a ser pr ocessado a par tir do r egist ro


nProxRegs N N
corr ent e.

Identificação de det erm inado regist r o a ser r esolv ida a


nRecno N N
ex pr essão ( recno) .

lRest ante N L Pr ocessa o rest ant e dos r egistr o.

D escr içã o

Esta função é utilizada par a ex ecut ar um a expressão definida pelo bloco de código do pr im eiro par âm et ro
para cada r egist ro que est á dentr o do escopo definido at ravés dos blocos de condição de " for " e " while" .

O núm er o de registr os a ser executado ser á definido com o parâm et r o nPr ox Regs ou se set ado o
parâm et r o lRest ante ser ão executados t odos os r egistr os a part ir do regist r o cor rent e at é o final da tabela
corr ent e. Se for especificado o par âm et ro nRecno apenas o r egist ro com o recno especificado será
pr ocessado.

Se for em om it idos os blocos de "for " e " while" , os m esm os serão consider ados .T. com o padr ão, est ão
assim t odos os r egistr os dent ro do escopo.

Se o par âm etr o lRest ante for om it ido a t abela inicia o processam ent o dos r egistr os a part ir do t opo da
tabela, caso contr ár io ser ão processados os r egist ros a par tir do posicionam ent o corr ent e da t abela.

Ex em plo

// Este exemplo mostra como se pode usar o DBEVAL para contar quantos registros estão
dentro do escopo especificado em toda a tabela, pois como o parâmetro lRestante foi
omitido a tabela irá para o topo antes de iniciar a processar os registros. Supondo que a
tabela está sobre um índice no campo idade, serão processados registros com o Nome cuja
ordem alfabética é maior que "FFFFF" e até encontrar algum registro de idade igual a 40:
USE Cliente VIA "DBFCDX" NEW
LOCAL nCount := 0;
DBGOTO(100)
DBEVAL( {|| nCount++}, {|| Nome > "FFFFF"}, {|| Idade < 40})
// Este exemplo mostra como se pode usar o DBEVAL para contar quantos registros estão
dentro do escopo especificado (como o exemplo anterior) a partir do registro atual (100):
USE Cliente VIA "DBFCDX" NEW
LOCAL nCount := 0;

176

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________177

DBGOTO(100)
DBEVAL( {|| nCount++}, {|| Nome > "FFFFF"}, {|| Idade < 40},,,.T.)
// Este exemplo mostra como se pode usar o DBEVAL para colocar numa variável um nome
inicial que está definido em um registro de recno definido (100):
USE Cliente VIA "DBFCDX" NEW
LOCAL cNomeIni := "";
DBEVAL( {|| cNomeIni := Nome},,,,100)
// Este exemplo mostra como se pode usar o DBEVAL para verificar qual é o recno do décimo
registro a partir do corrente dentro do escopo definido:
USE Cliente VIA "DBFCDX" NEW
LOCAL nRecno := 0;
DBGOTO(100)
DBEVAL( {|| nRecno := RECNO()}, {|| Nome > "FFFFF"}, {|| Idade < 40},10,,.T.)

DBF
Verifica qual é o Alias cor rent e.

Sin t ax e

DBF( ) - - > Car acter

Retorno Descr ição

"" Não exist e t abela em uso.

cAlias St r ing contendo o Alias corr ente.

D escr içã o

Verifica qual é o Alias da área de tr abalho corr ente. O Alias é definido quando a tabela é aber ta at ravés do
parâm et r o corr espondente ( DBUSEAREA( ) ) .

Esta função é o inv er so da função SELECT() , pois nest a é r et or nado o núm ero da ár ea de t rabalho do
Alias cor r espondent e.

Ex em plo

// Este exemplo mostra como o DBF corrente pode ser mostrado para o usuário.
dbUseArea( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
MessageBox("O Alias corrente é: " + DBF(), "Alias", 0) // Resultado: "O Alias
corrente é: SSS"

DBFieldI nfo
Verifica inform ações sobr e um cam po.

177

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________178

Sin t ax e

DBFieldI nfo ( nI nfoTipo , nCam po ) - > Infor m ação do Cam po

Ar gum ento Obr igat. Tipo Descr ição

nI nfoTipo S N Tipo de infor m ação a ser v er ificada.

nCam po S N Posição do cam po a ser verificado.

Retorno Descr ição

Não há tabela corr ent e ou a posição do cam po especificado está inválida.


Nil
I nfor m ação do cam po Inform ação r equisit ada pelo usuár io ( pode ser de tipo num ér ico se for
t am anho ou casas decim ais, t ipo car act er se for nom e ou tipo) .

D escr içã o

Esta função é ut ilizada para obt er infor m ações sobr e det er m inado cam po da t abela cor rent e. O t ipo
de inform ação ( pr im eiro ar gum ento) é escolhido de acordo com as constant es abaixo:

DBS_DEC Núm ero de casas decim ais ( t ipo num ér ico)

DBS_LEN Tam anho ( tipo num ér ico)

DBS_TYPE Tipo ( tipo caract er)

A posição do cam po não lev a em consideração os cam pos int er nos do Pr ot heus ( r ecno e deleted) .

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBFIELDINFO para obter as informações
do primeiro campo da tabela Clientes.
USE Clientes NEW
DBFIELDINFO(DBS_NAME, 1) // Retorno: Nome
DBFIELDINFO(DBS_TYPE, 1) // Retorno: C
DBFIELDINFO(DBS_LEN, 1) // Retorno: 10
DBFIELDINFO(DBS_DEC, 1) // Retorno: 0

DBFilter
Verifica a expressão de filt r o cor rent e.

Sin t ax e

DBFilter ( ) - - > Car acter

178

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________179

Retorno Descr ição

"" Não ex iste filt ro ativ o na ár ea de tr abalho at ual.

cExpFiltr o Ex pr essão do filtr o ativo na área de tr abalho at ual.

D escr içã o

Esta função é ut ilizada par a v er ificar a expr essão de filtr o ativo na área de tr abalho corr ente.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBFILTER para verificar a expressão do
filtro corrente.
USE Cliente INDEX Ind1 NEW
SET FILTER TO Nome > "Jose"
DBFILTER() // retorna: Nome > "Jose"
SET FILTER TO Num < 1000
DBFILTER() // retorna: Num < 1000

DBGoBottom
Posiciona no últ im o r egistr o lógico.

Sin t ax e

DBGoBot tom ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função é ut ilizada para posicionar a t abela corr ent e no últ im o registr o lógico. A seqüência lógica
depende da ordem e do filtr o ativ o sobr e a t abela corr ent e, por t anto o últim o r egist ro lógico pode não ser
o últ im o r egistr o físico.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBGOBOTTOM para posicionar no último
registro físico.
USE Cliente
DBGOBOTTOM() // Posiciona no último registro físico, pois não há ordem ativa
// Este exemplo demonstra como se pode utilizar o DBGOBOTTOM para posicionar no último
registro lógico.
USE Cliente INDEX Ind1 NEW
DBGOBOTTOM() // Posiciona no último registro lógico (último registro na seqüência gerada
pelo índice)

179

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________180

DBGoTo
Posiciona em determ inado registr o.

Sin t ax e

DBGoTo( nRegistr o ) - > Nil

Ar gum ento Obrigat . Tipo Descr ição

nRegistr o S N Núm ero do r egist ro a ser posicionado.

D escr içã o

Esta função é utilizada par a posicionar a t abela cor rent e em det er m inado r egist ro, segundo a ordem física
( seqüência sobr e o r ecno) .

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBGOTO para posicionar a tabela
corrente em determinado registro.
USE Cliente INDEX Ind1 NEW
DBGOTO(100) // Posiciona no registro de recno 100

DBGoTop
Posiciona no pr im eir o r egistr o lógico.

Sin t ax e

DBGoTop( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função é utilizada para posicionar a tabela cor r ente no pr im eiro r egist r o lógico. A seqüência lógica
depende da ordem e do filtr o at ivo sobre a tabela cor r ente, por tant o o pr im eir o registr o lógico pode não
ser o prim eiro r egist ro físico.

Ex em plo

180

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________181

// Este exemplo demonstra como se pode utilizar o DBGOBOTOP para posicionar no primeiro
registro físico.
USE Cliente
DBGOTOP() // Posiciona no primeiro registro físico, pois não há ordem ativa
// Este exemplo demonstra como se pode utilizar o DBGOTOP para posicionar no primeiro
registro lógico.
USE Cliente INDEX Ind1 NEW
DBGOTOP() // Posiciona no primeiro registro lógico (primeiro registro na següência gerada
pelo índice)

DBI nfo
Verifica inform ações sobr e a t abela cor rent e.

Sin t ax e

DBInfo ( nI nfoTipo ) - > I nform ação da Tabela

Ar gum ento Obr igat. Tipo Descr ição

Tipo de inform ação a


nInfoTipo S N
ser v er ificada.

Ret or no Descrição

Não há t abela cor rent e.

Nil Infor m ação da Tabela Infor m ação r equisit ada


pelo usuár io ( o tipo depende da inform ação
requisitada) .

D escr içã o

Esta função é ut ilizada para obt er inform ações sobr e a tabela corr ente. O t ipo de inform ação ( pr im eiro
ar gum ento) é escolhido de acor do com as const ant es abaixo:

DBI _GETRECSI ZE Tam anho do r egist r o em núm er o de by tes sim ilar a RECSIZE ( t ipo
num ér ico)

DBI _TABLEEXT Ext ensão do ar quiv o da t abela cor r ente ( t ipo car acter)
Nom e da tabela corr ent e com cam inho com plet o ( tipo caract er)
DBI _FULLPATH

DBI _BOF Ver ifica se est á posicionada no início da t abela sim ilar a BOF ( tipo lógico)
DBI _EOF Ver ifica se est á posicionada no final da tabela sim ilar a EOF ( t ipo lógico)
Ver ifica se a t abela est á posicionada após um a pesquisa sim ilar a FOUND ( t ipo
DBI _FOUND
lógico)
DBI _FCOUNT Núm ero de cam pos na estr utura da tabela cor r ent e sim ilar a FCOUNT ( t ipo

181

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________182

num érico)
DBI _ALI AS Nom e do Alias da área de t r abalho corr ente sim ilar a ALI AS ( tipo caract er)
DBI _LASTUPDATE Ver ifica a data da últ im a m odificação sim ilar a LUPDATE ( t ipo dat a)

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBINFO para obter as informações da
tabela corrente (Clientes).
USE Clientes NEW
DBINFO(DBI_FULLPATH) // Retorno: C:\Teste\Clientes.dbf
DBINFO(DBI_FCOUNT) // Retorno: 12
DBGOTOP()
DBINFO(DBI_BOF) // Retorno: .F.
DBSKIP(-1)
DBINFO(DBI_BOF) // Retorno: .T.

DBOrderI nfo
Verifica inform ações sobr e um a or dem .

Sin t ax e

DBOrder I nfo ( nInfoTipo , [ cI ndice ] , [ cOr dem | nPosicao ] ) - > Infor m ação da Or dem

Ar gum ento Obr igat . Tipo Descrição

nI nfoTipo S N Nom e do arquiv o de índice.

cOrdem N C Nom e da ordem .

nPosição N N Posição da or dem na list a de or dens ativ as.

Retorno Descr ição

Não há or dem corr ente ou a posição da ordem especificada está inválida.


Nil I nfor m ação da Ordem I nfor m ação requisit ada pelo usuár io ( pode ser de t ipo num érico se for
núm ero de ordens no índice, t ipo car act er se for nom e do arquiv o de índice) .

D escr içã o

Esta função é utilizada par a obter infor m ações sobre det er m inada ordem . A especificação da ordem pode
ser realizada atr av és de seu nom e ou sua posição dent ro da list a de ordens, m as se ela não for
especificada ser ão obt idas infor m ações da or dem corr ent e.

O tipo de inform ação ( pr im eir o ar gum ent o) é escolhido de acor do com as const antes abaixo:

182

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________183

DBOI_BAGNAME Nom e do arquivo de índice ao qual a or dem pert ence ( t ipo car act er ) .
Nom e do ar quiv o de índice ( com seu dir et ór io) ao qual a ordem pert ence ( t ipo
DBOI_FULLPATH
car act er )
DBOI_ORDERCOUNT Núm ero de ordens ex ist entes no ar quiv o de índice especificado

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBORDERINFO para obter informações
sobre o nome do arquivo de índice da ordem corrente.
DBORDERINFO(DBOI_BAGNAME) // retorna: Ind
DBORDERINFO(DBOI_FULLPATH) // retorna: C:\AP6\Teste\Ind.cdx
// Este exemplo demonstra como se pode utilizar o DBORDERINFO para obter informações
sobre o nome do arquivo de índice de uma ordem especificada.
DBORDERINFO(DBOI_BAGNAME,,3) // retorna: Ind2
DBORDERINFO(DBOI_FULLPATH,,"Nome") // retorna: C:\AP6\Teste\Ind2.cdx
// Este exemplo demonstra como se pode utilizar o DBORDERINFO para obter o número de
ordens de determinado arquivo de índice.
DBORDERINFO(DBOI_ ORDERCOUNT,"\Teste\Ind2.cdx") // retorna: 3

DBOrderNickName
Torna at iva a or dem com o det erm inado apelido.

Sin t ax e

DBOrder NickNam e( cApelido ) - > Lógico

Ar gum ento Obrigat . Tipo Descrição

cApelido S C Nom e do apelido da or dem a ser set ada.

Retorno Descrição

Não conseguiu t or nar a ordem at iva.


.F.
Pr incipais err os: Não existe t abela ativ a ou não foi encontr ada a ordem com o apelido.

.T. A or dem foi set ada com sucesso.

D escr içã o

Esta função é utilizada par a selecionar a ordem at iva atr avés de seu apelido. Est a ordem é a r esponsáv el
seqüência lógica dos r egist ros da tabela corr ent e.

Ex em plo

//Este exemplo demonstra como se pode utilizar o DBORDERNICKNAME para setar nova ordem.
USE Cliente NEW
SET INDEX TO Nome, Idade

183

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________184

IF !DBORDERNICKNAME("IndNome")
Messagebox("Registro não encontrado","Erro", 0)
BREAK
ENDIF

DBRecall
Alt er a o est ado delet ado do r egist ro at ual.

Sin t ax e

DBRecall( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Esta função é utilizada par a retir ar a m ar ca de registr o delet ado do r egist ro at ual. Par a ser executada o
registr o at ual dev e est ar bloqueado ou a t abela deve est ar aber ta em m odo ex clusivo. Se o registr o at ual
não estiv er deletado, est a função não faz nada. Ela é o oposto da função DBDELETE que m arca o r egist ro
at ual com o deletado.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBRECALL para retornar o estado do
registro atual para normal.
USE Cliente
DBGOTO(100)
DBDELETE()
DELETED() // Retorna: .T.
DBRECALL()
DELETED() // Retorna: .F.
// Este exemplo demonstra como se pode utilizar o DBRECALL para desfazer todas as
deleções da tabela corrente.
USE Cliente
DBGOTOP()
WHILE !EOF()
DBRECALL()
DBSKIP()
ENDDO

DBRecordI nfo
Verifica inform ações sobr e um r egist ro.

Sin t ax e

DBRecor dI nfo ( nI nfoTipo ,[ nRegist r o ] ) - > I nform ação do Regist ro

184

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________185

Ar gum ento Obr igat. Tipo Descr ição

nI nfoTipo S N Tipo de infor m ação a ser v er ificada.

nRegistr o Opcional N Núm ero do r egist ro a ser ver ificado.

Retorno Descr ição

Não há tabela corr ent e ou r egist ro inválido.


Nil
I nfor m ação do Registr o. I nform ação r equisit ada pelo usuár io ( o tipo depende da infor m ação
r equisit ada) .

D escr içã o

Esta função é ut ilizada par a obt er inform ações sobre o r egist ro especificado pelo segundo ar gum ento
( r ecno) da tabela cor r ente, se est a infor m ação for om itida ser á v er ificado o r egist r o corr ente. O t ipo de
infor m ação ( prim eir o argum ent o) é escolhido de acordo com as const ant es abaix o:

DBRI_DELETED Est ado de delet ado. Sim ilar a DELETED ( tipo lógico)

DBRI_RECSI ZE Tam anho do regist r o. Sim ilar a RECSIZE ( t ipo num érico)

Ver ifica se o registr o foi alt er ado e ainda não foi at ualizado fisicam ent e. Sim ilar a
DBRI_UPDATED
UPDATED ( t ipo lógico) .

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBRECORDINFO para se obter as


informações sobre registros da tabela corrente.
USE Clientes NEW
DBGOTO(100)
DBRECORDINFO(DBRI_DELETED) // Retorno: .F.
DBDELETE()
DBRECORDINFO(DBRI_DELETED) // Retorno: .F.
DBRECALL()
DBRECORDINFO(DBRI_RECSIZE) // Retorno: 230
NOME := "JOAO"
DBGOTO(200)
DBRECORDINFO(DBRI_UPDATED) // Retorno: .F.
DBRECORDINFO(DBRI_UPDATED,100) // Retorno: .T.

DBReindex
Reconstr ói t odos os índices da área de t r abalho.

Sin t ax e

185

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________186

DBReindex ( ) - > Nil

Retorno Descrição

NI L Nenhum

D escr içã o

Reconstr ói t odos os índices da área de t r abalho corr ente e posiciona as t abelas no prim eir o r egist ro lógico.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBREINDEX para reconstruir os índices
depois que um novo índice foi gerado.
USE Clientes NEW
DBSETINDEX("IndNome")
DBREINDEX()

DBRLock
Bloqueia determ inado registr o.

Sin t ax e

DBRLOCK( [ nRegistr o ] ) - - > Lógico

Ar gum ento Obr igat. Tipo Descr ição

nRegistr o Opcional N Núm er o do r egist r o a ser bloqueado.

Retorno Descrição

Não conseguiu bloquear o r egist ro.


.F.
Pr incipal m ot ivo: o r egist ro já foi bloqueado por out r o usuário.

.T. O r egistr o foi bloqueado com sucesso

D escr içã o

Esta função é ut ilizada quando se t em um a t abela aber t a e com part ilhada e se desej a bloquear um
registr o par a que out r os usuár ios não possam alterá- lo. Se a tabela j á est á aber t a em m odo exclusiv o, a
função não alt er a seu est ado.

O usuário pode escolher o registr o a ser bloqueado at ravés do par âm et ro ( r ecno) , m as se est e for om it ido
será bloqueado o registr o cor rent e com o na função RLOCK() .

186

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________187

Esta função é o oposto à DBRUNLOCK, que liber a r egistr os bloqueados.

Ex em plo

// Este exemplo mostra duas variações do uso de DBRLOCK.


DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOTO(100)
DBRLOCK() // Bloqueia o registro atual (100)
DBRLOCK(110) // Bloqueia o registro de número 110

DBRLockList
Retorna um a lista com todos os regist r os locados na t abela cor r ente.

Sin t ax e

DBRLOCKLI ST( ) - - > Ar ray

Retorno Descr ição

Nil Não existe t abela cor r ente ou não exist e nenhum r egist ro locado.

ListaLock List a com os recnos dos regist r os locados na t abela cor r ente.

D escr içã o

Esta função é ut ilizada par a verificar quais r egistr os est ão locados na t abela corr ente. Par a tant o, é
ret or nada um a t abela unidim ensional com os núm er os dos r egist r os.

Ex em plo

// Este exemplo mostra como é utilizada a função DBRLOCKLIST para verificar quais
registros estão bloqueados na tabela corrente
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOTOP()
DBRLOCK() // Bloqueia o primeiro registro
DBRLOCK(110) // Bloqueia o registro de número 110
DBRLOCK(100) // Bloqueia o registro de número 100
DBRLOCKLIST() // Retorna: {1,100,110}

DBRunLock
Desbloqueia det er m inado r egist ro.

Sin t ax e

187

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________188

DBRUNLOCK( [ nRegist ro ] ) - - > Nil

Ar gum ento Obrigat . Tipo Descr ição

nRegistr o Não N Núm ero do r egist ro a ser desbloqueado.

Retorno Descr ição

NI L Sem retor no.

D escr içã o

Esta função é ut ilizada par a liberar det er m inado r egist ro bloqueado.

O usuário pode escolher o r egist ro a ser desbloqueado at ravés do par âm et ro ( recno) , m as se est e for
om it ido ser á desbloqueado o registr o cor rent e com o na função DBUNLOCK() .

Esta função é o oposto à DBRLOCK, que bloquea os r egist ros.

Ex em plo

// Este exemplo mostra duas variações do uso de DBRUNLOCK.


DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOTO(100)
DBRUNLOCK() // Desbloqueia o registro atual (100)
DBRUNLOCK(110) // Desbloqueia o registro de número 110

DbSeek
Encont ra um registr o com det er m inado v alor da chave do índice.

Sin t ax e

DBSeek ( cEx p | nEx p, [ lSoft Seek ] , [ lUlt im o ] ) - - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

Valor de chav e a ser encontr ado do t ipo car acter ( todos os t ipos de
cExp Sim C expressão de índice com ex ceção do índice com apenas um cam po do
t ipo num érico) .

Valor de chave a ser encontr ado do tipo num ér ico ( apenas quando a
nExp Sim N
expressão do índice possui apenas um a cam po do tipo num ér ico) .

188

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________189

Posiciona no prim eir o r egist ro com ex pr essão de chave m aior que o


lSoft Seek Não L
v alor pr ocur ado. O padr ão é .F.

lUltim o Não L Procura a últ im a ocor rência do v alor pr ocur ado. O padr ão é .F.

Retorno Descr ição

.F. Não foi encont r ado nenhum registr o com o v alor especificado

.T. Foi encont rado um registr o com o v alor especificado

D escr içã o

Esta função é ut ilizada par a encont r ar um r egist ro com det er m inado valor da ex pr essão de chav e de
índice.

Antes da cham ada do DBSEEK deve- se cer tificar de que ex ist e um a ordem at iva no m om ent o com os
cam pos que se desej a pesquisar o v alor .

Se a expressão possuir apenas um a cam po num érico, o pr im eiro par âm et ro dev e ser do t ipo num érico,
m as nos dem ais casos deve- se utilizar um valor do tipo caract er par a est e parâm et r o ( m esm o se forem
apenas dois cam pos num ér icos ou do t ipo dat a) .

Quando o segundo parâm et r o for especificado com o .T. ( soft seek ) , m esm o que a ex pr essão pesquisada
não encont rar nenhum r egistr o com est e valor, a tabela será posicionada no pr óxim o valor m aior que o
especificado no pr im eiro par âm et ro, m as m esm o posicionando no pr óx im o valor est a função r etornar á .F.
( pois não encontr ou) .

Quando não for especificado este v alor ou est iver .F. e falhar o valor de pesquisa, a t abela será
posicionada em LASTREC + 1 e será set ada a flag de EOF.

Se o t er ceiro par âm et ro for especificado com valor .T. a função posiciona a t abela no últim o r egist r o com
o valor pr ocur ado, caso não sej a especificado ou for .F., será posicionada na pr im eir a ocor rência.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBSEEK para busca de valores numéricos.
USE Clientes NEW
ORDLISTADD ("/teste/ind1.cdx") // Expressão é Num (campo numérico)
DBSEEK(100) // Retorna: .F.
EOF() // Retorna: .T.
DBSEEK(100,.T.) // Retorna: .F.
EOF() // Retorna: .F. (pois o softseek posicionou no próximo registro)
// Este exemplo demonstra como se pode utilizar o DBSEEK para percorrer todos os
registros de Clientes com o nome joao e vencimentos a partir de janeiro de 2001.
USE Clientes NEW
ORDLISTADD ("/teste/ind2.cdx") // Expressão é Nome+Venc (campo caracter + data)
DBSEEK("joao200101",.T.) // Procura a primeira ocorrência de Nome "joao" e vencimento
maior que Janeiro de 2001

189

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________190

WHILE !EOF() .AND. Nome == " joao"


DBSKIP()
ENDDO

DBSetDriver
Modifica ou v er ifica o RDD padr ão.

Sin t ax e

DBSet Dr iver ( [ cNov oRddPadr ão ] ) - - > Car acter

Ar gum ento Obrigat. Tipo Descrição

Novo nom e do RDD a ser definido


cNov oRddPadrão Não C
com o padrão.

Retorno Descrição

cAnt igoRddPadr ão Nom e do RDD padrão cor rent e

D escr içã o

Esta função pode ser ut ilizada apenas par a v er ificar qual o RDD que está definido com o padr ão quando for
om it ido seu par âm et ro.

Ela t am bém pode ser ut ilizada par a especificar outr o RDD com o padrão, especificando- o at r avés do
parâm et r o.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBSETDRIVER para alterar o valor do RDD
padrão.
DBSETDRIVER("CTREECDX") // Retorna: DBFCDX
DBSETDRIVER() // Retorna: CTREECDX

DBSetFilter
Seta um a condição de filt ro.

Sin t ax e

DBSet Filt er ( bCondição, cCondição ) - - > Nil

190

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________191

Ar gum ento Obr igat . Tipo Descr ição

Bloco de Ex pr essão do filt ro na for m a


bCondição Sim
Código ex ecut ável.

Ex pr essão do filtr o na form a de


cCondição Sim C
str ing.

Retorno 3Descr ição

NI L Sem retor no.

D escr içã o

Esta função é utilizada par a setar um filt r o nos r egistr os da t abela cor rent e especificado atr av és do bloco
de código no pr im eir o parâm et r o.

Quando um regist r o não est á dent ro do filtr o setado ele continua ex ist indo fisicam ente, m as não
logicam ent e ( nas funções de m anipulação de banco de dados com o DBGOTOP, DBSEEK, DBSKI P, et c) .

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBSETFILTER para filtrar todos os
clientes com menos de 40 anos.
USE Cliente NEW
DBSETFILTER( {|| Idade < 40}, "Idade < 40" )
DBGOTOP()

DBSetI ndex
Acrescenta todas as or dens de det er m inado índice à list a.

Sin t ax e

DBSet I ndex ( cArqIndice ) - - > Nil


Ar gum ento Obrigat . Tipo Descr ição

cArqIndice Sim C Nom e do ar quivo de índice, com ou sem dir et ório e ext ensão.

Retorno Descr ição

191

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________192

NI L Sem retor no.

D escr içã o

Esta função é ut ilizada para acr escent ar um a ou m ais ordens de det er m inado índice na lista de or dens
at ivas da ár ea de tr abalho.

Quando o arquivo de índice possui apenas um a or dem , a m esm a é acr escent ada à list a e t or na- se at iva.

Quando o índice possui m ais de um a ordem , todas são acr escent adas à lista e a pr im eir a t or na- se at iva.

Para se utilizar ar quiv os de ext ensão padr ão do RDD, est e dado pode ser om it ido no pr im eir o parâm et r o,
m as caso contr ário dev e ser especificado.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBSETINDEX para acrescentar novos
índices à lista de ordens.
USE Cliente NEW
DBSETINDEX("Ind1")
DBSETINDEX("\teste\Ind2.cdx")

DBSetNickName
Seta um apelido par a det er m inada ordem ou ver ifica qual é o apelido corr ent e.

Sin t ax e

DBSet NickNam e( cOrdem ,[ cApelido ] ) - - > Car act er

Ar gum ento Obrigat . Tipo Descr ição

cI ndice Sim C Nom e da or dem que deve r eceber o apelido.

cApelido Não C Nom e do apelido da ordem a ser setada.

Retorno Descr ição

"" Não conseguiu encont r ar a or dem especificada, não conseguiu set ar o apelido ou não havia
apelido corr ente

cApelido Apelido cor r ente

192

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________193

D escr içã o

Esta função é ut ilizada par a colocar um apelido em determ inada or dem especificada pelo pr im eiro
parâm et r o.

Caso sej a om itido o nom e do apelido a ser dado, a função apenas v er ifica o apelido corr ente.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBSETNICKNAME para setar um novo
apelido e verificar qual o apelido atual.
USE Cliente NEW
DBSETNICKNAME("IndNome") // retorna: ""
DBSETNICKNAME("IndNome","NOME") // retorna: ""
DBSETNICKNAME("IndNome") // retorna: "NOME"

DBSetOrder
Seleciona a or dem ativ a da ár ea de tr abalho.

Sin t ax e

DBSet Or der ( nPosição ) - - > Nil

Ar gum ento Obrigat . Tipo Descr ição

nPosição Sim N Posição da ordem na list a de ordens at ivas

Retorno Descrição

NI L Sem r etorno

D escr içã o

Esta função é ut ilizada par a selecionar a or dem at iv a da ár ea de t rabalho.

Esta or dem é a responsável seqüência lógica dos registr os da t abela cor rent e.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBSETORDER para selecionar a ordem
corrente.

193

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________194

USE Cliente NEW


SET INDEX TO Nome, Idade
DBSETORDER(2)

DBSkip
Desloca par a outr o r egist ro na t abela cor rent e.

Sin t ax e

DBSkip( [ nRegistr os ] ) - - > Nil

Ar gum ento Obrigat . Tipo Descr ição

nRegistr os Não N Núm er o de r egist ros a ser deslocado.

Retorno Descr ição

NI L Sem retor no.

D escr içã o

Esta função é ut ilizada par a deslocar par a out ro r egist ro a part ir do registr o at ual.

O parâm et r o especifica quant os r egist ros lógicos devem ser deslocados a par t ir do cor r ente, se for posit ivo
desloca em dir eção ao final da t abela, se for negativo ao início da tabela e caso sej a om it ido ir á para o
pr óx im o registr o ( o padr ão é 1) .

Caso passe do início da tabela, posiciona no prim eir o r egistr o e set a BOF, caso passe do final da tabela,
posiciona no r egistr o LASTREC + 1 e set a EOF.

Ex em plo

// Este exemplo mostra como o DBSKIP pode passar do final da tabela e do início da tabela
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOBOTTOM()
EOF() // retorna .F.
DBSKIP()
EOF() // retorna .T.
DBGOTOP()
BOF() // retorna .F.
DBSKIP(-1)
BOF() // retorna .T.
// Este exemplo mostra como o DBSKIP pode deslocar 10 registro em relação ao registro
corrente
DBUSEAREA(.T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOTO(100)
DBSKIP(10)
RECNO() // retorna 110

194

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________195

DBSKIP(-10)
RECNO() // retorna 100

DBStruct
Retorna a est rut ur a da t abela cor r ente.

Sin t ax e

DBSt ruct ( ) - - > Ar r ay

Retorno Descr ição

{} Não exist e t abela cor rent e.

aEst r ut ur a Ar r ay com t odos os cam pos, onde cada elem ento é um subarr ay cont endo Nom e,
Tipo, Tam anho e Decim ais.

D escr içã o

Esta função é utilizada par a verificar a est rutura da t abela cor rent e da m esm a for m a que é ut ilizada para
cr iar a tabela com a função DBCREATE.

Para isto ela cria um ar ray para gr av ar as infor m ações e as r et or na.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBSTRUCT para recuperar a estrutura da
tabela corrente.
USE Cliente NEW
DBSTRUCT()
//Retorna:{{Cod,N,3,0},{Nome,C,10,0},{Idade,N,3,0},{Nasc,D,8,0},{Pagto,N,7,2}}

DBUnlock
Desbloqueia t odos os r egist ros da tabela cor r ente.

Sin t ax e

DBUNLOCK( ) - - > Nil

Retorno Descrição

195

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________196

NI L Sem r et orno.

D escr içã o

Esta função é ut ilizada par a liber ar t odos os registr os bloqueados e é equivalent e a executar DBRUNLOCK
para t odos os r egist r os da list a DBRLOCKLI ST .

Ex em plo

// Este exemplo mostra como liberar todos os registros bloqueados da tabela corrente.
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBUNLOCK()

DBUnlockAll
Desbloqueia t odos os r egist ros de todas as tabelas aber t as.

Sin t ax e

DBUNLOCKALL( ) - - > Nil

Retorno Descr ição

NI L Sem retor no.

D escr içã o

Esta função é utilizada par a liber ar todos os r egist r os bloqueados e é equiv alente a ex ecut ar DBUNLOCK
para t odos os r egist r os da list a DBRLOCKLI ST de t odas as áreas de t rabalho.

Ex em plo

// Este exemplo mostra como liberar todos os registros bloqueados da tabela corrente.
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBUNLOCKALL()

Delete
Marca registr os com o delet ados.

Sin t ax e

DELETE [ FOR CondFor ] [ WHI LE CondWhile] [ NEXT nRecs] [ RECORD nRecno] [ REST] [ ALL]

196

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________197

Ar gum ento Obr igat. Tipo Descr ição

Ex pr essão em ADVPL a ser r esolvida par a que o


CondFor Não
r egist ro sej a m arcado com o deletado.

Ex pr essão em ADVPL que det er m ina quando a


CondWhile Não " deleção" dev e parar ( quando a ex pr essão retor nar
.F.

Quando r egist r os dev em ser m ar cados com o


nRecs Não N
delet ados.

nRecno Não N
Núm er o do recno do registr o a ser deletado.

Retorno Descr ição

NI L Sem retor no.

D escr içã o

Este com ando é ut ilizado par a m arcar alguns regist r os da t abela cor rent e com o delet ados.

Se não for em especificadas as condições para que o r egist r o seja m ar cado com o deletado, m ar ca toda a
tabela com o se estiv esse especificada a opção " ALL" .

Pode- se especificar um escopo para que os r egist ros sej am m ar cados atr av és das opções " FOR CondFor " e
"WHILE CondWhile" .

Pode- se tam bém lim it ar o núm er o de r egist r os a ser em m ar cados at r av és da opção " NEXT nRecs" e
determ inar que a " deleção" dos r egistr os deve- se iniciar a part ir do r egist r o at ual com "REST" , m as caso
cont r ár io o com ando executa um DBGOTOP() antes de iniciar a "deleção" .

Se é desej ado m ar car apenas det er m inado r egist ro pode- se defini- lo atr avés da especificação do r ecno
com "RECORD nRecno" .

Ex em plo

// Este exemplo demonstra como utilizar o comando DELETE para marcar alguns registros
dentro de determinado escopo como deletado. Este escopo é definido por Idade > 20, até
que o nome seja maior ou igual a "VVV", começa a deleção a partir do registro atual e
marca apenas 10 registros:
USE Cliente VIA "CTREECDX" NEW
DELETE FOR Idade>20 WHILE Nome<"VVV" NEXT 10 REST

197

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________198

Deleted
Verifica se o r egist ro foi delet ado.

Sin t ax e

DELETED( ) - - > Lógico

Retorno Descr ição

.F. O r egist ro não foi delet ado

.T. O r egist ro foi delet ado

D escr içã o

Quando o r egist ro é delet ado, perm anece fisicam ent e na tabela, m as fica m arcado com o " deletado". Esta
função v er ifica este est ado. Quando é execut ada a função DBPACK todos os r egist ros m arcados com o
delet ados são apagados fisicam ent e enquant o a função DBRECALL m arca todos os r egist r os delet ados
com o não- delet ados.

Ex em plo

/ / Este exem plo v er ifica se determ inado registr o est á delet ado, caso posit ivo, m ost r a um a m ensagem :

USE "\DADOSADV\AA1990.DBF" SHARED NEW


DBGOTO(100)
IF DELETED()
Messagebox("O registro atual foi deletado","Erro", 0)
BREAK
ENDIF

DevOutPict
Im pr im e o cont eúdo na posição corr ente form at ando a saída.

Sin t ax e

DEVOUTPICT ( x Val, cPict ur e ) - - > NIL

Ar gum ento Obrigat . Tipo Descrição

xVal Sim C, N Infor m ar valor a ser im pr esso.


ou D

198

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________199

cPict ur e Sim C Infor m ar a m áscar a de form at ação do dado.

Retorno Descrição

NI L Nenhum

D escr içã o

DEVOUTPI CT( ) im prim e cont eúdo na posição cor rent e de PROW( ) e PCOL( ) , aplicando a m áscara
cPict ur e.

Ex em plo

nVal:= 100.89
DevPos( 10,10 ) // configura linha 0, coluna 0 para impressão
//@ Prow(),Pcol() PSAY "Minha linha e "+str( Prow() )
DevOutPict( nVal, "@E 999,999.99" ) // imprime 100,89

DevPos
Posiciona linha e coluna de im pr essão.

Sin t ax e

DEVPOS( nLin, nCol ) - - > NIL

Ar gum ento Obrigat . Tipo Descr ição

nLin Sim N I nform ar nova linha de im pr essão.

nCol Sim N I nform ar nova coluna de im pr essão.

Retorno Descrição

NI L Nenhum

D escr içã o

DEVPOS( ) m odifica a linha e coluna cor r ente de im pr essão. Modifica os retor nos de PROW() e PCOL( ) .

Ex em plo

DevPos( 10,10 ) // configura linha 0, coluna 0 para impressao


@ Prow(),Pcol() PSAY "Minha linha e "+str( Prow() )

199

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________200

Directory
Cr ia um ar r ay com dados dos diretór ios e dos arquiv os.

Sin t ax e

DI RECTORY( cDirSpec , [ cAt r ibut os ] ) - - > Ar r ay

Ar gum ento Obrigat . Tipo Descr ição

I dent ifica o dr ive, o cam inho de onde as infor m ações ser ão


cDir Spec Sim C
buscadas. O Cam inho pode est ar no ser vidor ou no local ( Rem ot e) .

Especifica os at r ibut os especiais de ar quiv os/ diretórios que dev em


ser incluídos na busca por inform ações. Abaix o estão os at ribut os
aceitos. Not e que o at ribut o norm al é sem pre consider ado, desde
que não sej a inform ado.

Atr ibuto Descrição


cAtr ibutos Não C
H Incluir ar quiv os ocultos ( Hidden)

S Incluir ar quiv os de sist em a.

Incluir diret ór ios


D

V Pr ocur ar o nom e do disco ( label)

Retorno Descrição

Ar ray Retor na um arr ay de subarr ay s onde cada


subarr ay cont ém infor m ações sobr e um ar quiv o
ou diret ór io que corr espondem a cDirSpec.
Os subar r ay s possuem a seguint e estr ut ura,
definida em direct r y.ch:

F_NAME Car acter , Nom e do ar quiv o

F_SI ZE Num érico, Tam anho do ar quiv o

F_DATE Dat a, Dat a de m odificação do ar quivo

F_TI ME Car acter , Hora de m odificação do


arquiv o

F_ATTR Car acter , At r ibut os do arquivo.

D escr içã o

200

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________201

DI RECTORY( ) é função que r et or na inform ações de arquivos/ dir et ór ios que cor r espondam a um a m áscara
especifica.

Tant o ar quivos no serv idor com o no cliente ( Rem ot e) são aceit os. Os at r ibut os são sem pr e adit iv os.

Ut ilize Directory ( ) ao inv és de ADI R( ) .

Ex em plo s

# include "Dir ect ry .ch"

//
aDirectory := DIRECTORY("*.*", "D")
AEVAL( aDirectory, {|aFile| QOUT(aFile[F_NAME])} )

DirRemove
Elim ina um diretór io.

Sin t ax e

DI RREMOVE( cDir Nom e ) - - > lSuccesso

Ar gum ento Obrigat . Tipo Descr ição

Nom e do dir et ór io a ser rem ov ido, opcionalm ente incluindo o


cDir Nom e Sim C
cam inho. O dir et ór io ser á rem ov ido no ser vidor.

Retorno Descr ição

.T. O dir et ór io foi elim inado.

.F. Não foi possiv el elim inar o dir et ório.

D escr içã o

DI RREMOVE( ) elim ina um dir et ór io especifico.

Note que é necessário t er direitos suficientes para r em ov er um diret ór io, e o diretório par a ser elim inado
pr ecisa est ar vazio, sem subdir et órios e ar quivos.

Ex em plo

DIRREMOVE("c:\teste\um\dois") // Eliminando um diretório, sem testar o retorno

201

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________202

bResult := DIRREMOVE("c:\teste\um") // Elimina e testa o retorno


IF bResult
? "Impossivel excluir o diretório"
ENDIF

DiskSpace
Retorna o espaço disponível em um disco específico.

Sin t ax e

DI SKSPACE( [ nDr ive ] ) - - > nBy tes

Ar gum ento Obrigat . Tipo Descr ição

Núm ero do dr ive, onde 0 é o espaço do dir et ór io corr ent e, e 1 é o A:


nDrive Não N
do client e, B: é o 2 do client e, et c.

Retorno Descr ição

nByt es Núm ero de byt es disponív eis no disco inform ado.

D escr içã o

DI SKSPACE( ) é um a função de am biente que det erm ina quant os byt es est ão disponíveis em um
determ inado disco.

Ao ser ut ilizado zero e o diretór io cor r ente for local, ser á r et or nado o espaço disponível no client e ( r em ote
) , caso o dir et ór io corr ente esteja no ser vidor , ser á r et or nado o espaço disponível no ser vidor.

Ex em plo s

CURDIR( "\SIGAADV" ) // Posiciona no diretorio SIGAADV do servidor


? DISKSPACE( 0 ) // Retorna o espaço disponivel no servidor.
? DISKSPACE( 1 ) // Retorna o espaço disponivel no drive a: local ( remote ).
CURDIR( "C:\WINDOWS" ) // Posiciona no diretorio SIGAADV do servidor
? DISKSPACE( 0 ) // Retorna o espaço disponivel na estação.

Dow
Conv er te um a dat a para o valor num érico do dia da sem ana.

Sin t ax e

202

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________203

DOW( dDat a ) - - > Num érico

Ar gum ento Obrigat . Tipo Descr ição

dDat a Sim D É o valor da data a conv er ter.

Retorno Descrição

>=0 e Retorna um núm ero ent re zero e set e, r epr esent ando o dia da sem ana. O
<=7 pr im eiro dia da sem ana é 1 ( Dom ingo) e o últ im o é 7 ( Sábado) . Se a
data for vazia ou inv álida, DOW( ) retorna zer o.

D escr içã o

DOW( ) é um a função que conv er te um a dat a para o valor num érico que repr esenta o dia da sem ana. Útil
quando se deseja fazer cálculos sem anais. DOW( ) é sim ilar a CDOW( ) , que retorna o dia da sem ana com o
um a cadeia de car acteres.

Ex em plo s

Estes exem plos m ostr am com o usar CDOW( ) e o seu r elacionam ent o com DOW( ) :

dData := DATE() // Resultado: 09/01/01


nDiaDaSemana := DOW(DATE()) // Resultado: 3
cDiaDaSemana := CDOW(DATE()) // Resultado: Tuesday
nDiaDaSemana := DOW(DATE() - 2) // Resultado: 1
cDiaDaSemana := CDOW(DATE() - 2) // Resultado: Sunday

Esta função de usuár io ut iliza DOW( ) par a calcular a dat a da últ im a segunda- feir a da data infor m ada.

FUNCTION LastMonday(dData)
RETURN (dData - DOW(dData) + 2)

Dtoc
Conv er te um a dat a para cadeia de car acter es.

Sin t ax e

DTOC( dData ) - - > Car acter

Ar gum ento Obr igat . Tipo Descr ição

DDat a Sim D É o v alor a conv er t er .

203

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________204

Retorno Descr ição

Caract er É um a cadeia de caract er es r epr esent ando o v alor da dat a. O r et or no é


for m atado utilizando- se o form ato corr ente definido pelo com ando SET DATE
FORMAT. O for m at o padr ão é m m / dd/ yy . Par a um a dat a nula ou inv álida, o
r et or no ser á um a cadeia de car act er es com espaços e tam anho igual ao
for m ato at ual.

D escr içã o

DTOC( ) conver t e um a dat a par a um a cadeia de car acteres for m at ada segundo o padr ão corr ent e, definido
pelo com ando SET DATE. Se for necessária a ut ilização de for m at ação especial, use a função
TRANSFORM( ) < a> .

Em expr essões de índices de ar quiv o, use DTOS( ) no lugar de DTOC( ) para conv er ter dat as par a cadeia de
caract eres.

Ex em plo s

cData := DATE() // Resultado: 09/01/90


cData := DTOC(DATE()) // Resultado: 09/01/90
cData := "Today is " + DTOC(DATE()) // Resultado: Today is 09/01/90

Dtos
Conv er te um a dat a para um a cadeia de car acteres no form at o yy yy m m dd.

Sin t ax e

DTOS( dData ) - - > Car acter

Ar gum ento Obrigat . Tipo Descr ição

dDat a Sim D É o valor da data a conv er ter.

Retorno Descrição

Caract er Retor na um a cadeia de car act er es com oit o byt e de t am anho no form at o yy yy m m dd. Quando
dDat a é nulo ou invalido, DTOS( ) r et orna um a cadeia de car act er es com oit o espaços. O
valor r etornado não é afetado pela for m ato da dat a cor rent e.

D escr içã o

DTOS( ) é um a função de conversão de dat a que pode ser usada par a cr iar expr essões de índice. O
resultado é estr ut ur ado v isando m ant er a ordem cor reta do índice ( ano, m ês, dia) .

204

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________205

Ex em plo s

cData := DATE() // Resultado: 09/01/90


cData := DTOS(DATE()) // Resultado: 19900901
nLen := LEN(DTOS(CTOD(""))) // Resultado: 8

Este ex em plo m ostr a com o é cr iado um índice com posto usando DTOS( ) :

USE Vendas NEW


INDEX ON DTOS(Data) + Vendedor TO DataNome

Eject
Força a im pressão de nova página no r elat ór io.

Sin t ax e

EJECT( ) - - > NI L

Retorno Descrição

NI L Sem retorno

D escr içã o

EJECT( ) efet ua o salto de página na im pressão de r elat ório configur ando o PROW( ) par a 0.

Ex em plo

SETPRC(0,0) // inicia impressao na linha 0 coluna 0


PCOL( 10 ) //muda para coluna 10
@ ROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PRNFLUSH( ) // Forca impressao antes do termino da pagina.
PROW( PROW( )+2 ) // Pula 2 linhas
PCOL( 10 )
@ PROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
//PROW( 0 ) // Salta a pagina
EJECT( ) // Salta de pagina
FECHAREL( ) // Fecha impressao

ElapTime
Retorna o t em po decor rido entr e duas hor as.

Sin t ax e

ElapTim e( cHor aInicial , cHor aFinal ) - - > Car act er

205

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________206

Ar gum ento Obr igat. Tipo Descr ição

cHor aI nicial Sim C I nform e a hora inicial no form at o


hh: m m : ss, onde hh é a hora ( 1 a 24 ) ,
m m os m inutos e ss os segundos

cHor aFinal Sim C I nform e a hor a final no form at o


hh: m m : ss, onde hh é a hora ( 1 a 24 ) ,
m m os m inutos e ss os segundos.

Retorno Descr ição

Caract er A difer ença de t em po no for m ato hh: m m : ss, onde hh é a


hor a ( 1 a 24 ) , m m os m inutos e ss os segundos

D escr içã o

ElapTim e( ) retorna um a cadeia de car acteres cont endo a difer ença de tem po no for m at o hh: m m : ss, onde
hh é a hora ( 1 a 24 ) , m m os m inut os e ss os segundos.

Ex em plo s

Este ex em plo com para ELAPTIME( ) :

cHoraInicio := TIME() // Resultado: 10:00:00


.
. <instrucoes>
.
cElapsed := ELAPTIME(TIME(), cHoraInicio)

FClose
Fecha um arquivo binário e gr ava os buffer s no disco.

Sin t ax e

FCLOSE( nHandle ) - - > Lógico

Ar gum ento Obr igat. Tipo Descrição

nHandle Sim N Handle a ser fechado

Retorno Descr ição

206

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________207

.F. nHandle infor m ado não cor responde a um ar quivo aber to


pr ev iam ent e, ou er r o na gravação dos buffers pendentes,
verifique at ravés de FERROR( ) m aiores det alhes sobr e o err o.

.T. Ar quiv o foi fechado com sucesso.

D escr içã o

Fecha um m anipulador ( handle ) de um ar quiv o binár io. Est e m anipulador deve t er sido abert o atr av és
das funções FOPEN() , FOPENPORT() , FCREATE() .

Ex em plo

O ex em plo abaixo ut iliza o CLOSE par a fechar um ar quiv o.

#include "Fileio.ch"
//
nHandle := FCREATE("Testfile", FC_NORMAL)
IF !FCLOSE(nHandle)
conout ("Erro fechando arquivo:" + Str(FError( 0 )
ENDIF

FCreate
Cr ia um ar quivo, ou elim ina o conteúdo de um ar quivo.

Sin t ax e

FCREATE( cAr q, [ nAtr ibuto ] ) - - > nHandle

Ar gum ento Obrigat . Tipo Descr ição

Nom e do ar quiv o a ser cr iado, o cam inho pode ser incluído. São válidos
cArq S C
cam inhos no local ( rem ot e) e no ser v idor .

nAtr ibuto Opcional N At r ibut os no qual o arquiv o será cr iado.

Retorno Descr ição

>0 Num ér ico. O Handle do ar quivo par a ser usado nas dem ais funções de arquivo.

-1
Er ro na criação do arquivo, v er ifique FERROR( ) par a obt er m aior es detalhes do err o.

D escr içã o

FCREATE( ) é um a função de baix o- nív el que per m ite a m anipulação dir et a dos ar quivos t ext os com o
binár ios.

207

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________208

Ao ser ex ecut ada FCREATE( ) cr ia um ar quivo ou elim ina o seu conteúdo, e ret or na o handle ( Manipulador)
do arquiv o, par a ser usado nas dem ais funções.

O Ar quiv o deve ser fechado atr av és da função FCLOSE( ) .

Os Atr ibutos par a cr iação do ar quivo est ão abaixo, e est ão definidos no header fileio.ch.

FC_NORMAL Criação norm al do Arquivo ( default / padr ão) .

FC_READONLY Cria o ar quiv o pr ot egido par a gravação.

FC_HI DDEN Cria o ar quiv o com o oculto.

FC_SYSTEM Cria o ar quiv o com o sist em a.

Note que se o arquiv o ex ist ir , o cont eúdo ser á t runcado para zero byt es.

Ex em plo

#include "Fileio.ch"
IF (nHandle := FCREATE("Testfile", FC_NORMAL)) == -1
? "Arquivo não pode ser criado", FERROR()
BREAK
ELSE
FWRITE(nHandle, "ola!!!")
FCLOSE(nHandle)
ENDIF

FErase
Apaga um ar quivo do disco.

Sin t ax e

FERASE( cArq ) - - > nSucesso

Ar gum ento Obrigat . Tipo Descr ição

Apaga um ar quiv o do disco, aceita cam inhos locais ( Rem ot e) , ou


cArg S C
cam inhos no ser v idor Adv anced Pr ot heus.

208

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________209

Retorno Descr ição

Ar quivo foi apagado com sucesso.

-1 O Ar quivo não foi apagado, verifique FERROR( ) para obt er m aiores det alhes.

D escr içã o

Elim ina um ar quiv o. O Ar quiv o pode est ar no serv idor ou no local ( Rem ote) .

O Ar quiv o par a ser apagado deve est ar fechado. Não é per m it ido a ut ilização de car acter es cor inga
( w ildcards) .

Ex em plo s

// Este exemplo apaga todos os arquivos .BAK do diretório corrente.


#include "Directry.ch"
AEVAL(DIRECTORY("*.BAK"), { |aFile| FERASE(aFile[F_NAME]) })
/// Este exemplo apaga um arquivo no cliente ( Remote ) e imprime uma mensagem caso //
ele apresente erro.
IF FERASE("AFile.txt") == -1
? "File erase error:", FERROR()
BREAK
ENDIF

FError
Verifica se houv e er r os após um a oper ação com arquivos binár ios.

Sin t ax e

FERROR( ) - - > Num érico

Retorno Descr ição

0 Oper ação realizada com sucesso. Sem er r os

2 Arquivo não encont rado

3 Cam inho não encont r ado

4 Muitos ar quivos aber t os

5 Acessso negado

6 Manipulador I nvalido ( Handle )

8 Mem ór ia I nsuficiente

209

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________210

15 Dr ive inválido especificado

19 Tentativ a de gravar em disco pr ot egido contr a- gravação


21 Dr ive Não est a pront o

23 Dados com er r o de CRC


29 Err o de gr av ação

30 Err o de leitura

32 Violação de com part ilham ento

33 Err o de Lock

D escr içã o

FERROR( ) é a função que r et or na o código de er ro m ais específico, após a ex ecução de funções com
ar quivos binários, tais com o: FOPEN() , FCLOSE() , FWRI TE() , FREAD() .

Se FERROR( ) retor nar zero, indica sucesso na últ im a operação.

FERROR( ) sem pre retorna o est ado da ultim a operação.

Ex em plo

# include "Fileio.ch"

//
nHandle := FCREATE("Temp.txt", FC_NORMAL)
IF FERROR() != 0
conout ("Erro ao criar o arquivo, Erro:" Str(FError())
ENDIF

FieldBlock
Retorna um bloco de código par a um cam po deter m inado da tabela corr ente.

Sin t ax e

FI ELDBLOCK( cCam po ) - - > Bloco de Código

Ar gum ento Obr igat . Tipo Descr ição

cCam po S C Nom e do cam po a ser r etornado o bloco de código.

Retorno Descr ição

210

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________211

bBloco Bloco de código. Bloco de código par a o cam po especificado na t abela cor rent e.

D escr içã o

Esta função é utilizada par a r et or nar um bloco de código ex ecut ável com o cam po especificado. Sendo que
quando o bloco r esult ante é executado sem v alor r ecuper a o v alor ar m azenado no cam po, m as quando
ex ecut ado com um v alor , set a est e valor no det er m inado cam po.

Port ant o, o bloco r et or nado é sim ilar a: &( " { | Valor| IF( Valor = = NI L, Cam po, Cam po: = Valor) } " )

Sendo: Cam po = parâm etr o da função FI ELDBLOCK( )

Valor = v alor ex ecut ado no bloco de código

Ex em plo

// Este exemplo mostra como se pode usar o FIELDBLOCK para criar o bloco de código para o
campo Nome da tabela corrente na variável bBloco:
USE Cliente VIA "DBFCDX" NEW
bBloco := FIELDBLOCK("Nome")

FieldWbl
Retorna um bloco de código par a um cam po deter m inado especificando a ár ea de t r abalho.

Sin t ax e

FI ELDWBLOCK( < cCam po> ,< nArea> ) - - > Bloco de Código

Ar gum ent o Obrigat . Tipo Descr ição

cCam po S C Nom e do cam po a ser r et or nado o bloco de código.

cArea S N Núm ero da ár ea de t r abalho a ser cr iado o bloco de código.

Retor no Descrição

bWBloco Bloco de código. Bloco de código par a o cam po especificado na ár ea de t rabalho det er m inada.

D escr içã o

Esta função é ut ilizada par a ret or nar um bloco de código execut ável com o cam po especificado em
determ inada ár ea de tr abalho. Sendo que quando o bloco r esult ant e é ex ecut ado sem v alor recupera o
valor ar m azenado no cam po, m as quando execut ado com um v alor seta est a valor no det er m inado
cam po.

Port ant o o bloco r et ornado é sim ilar a:

211

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________212

&( "{ | Valor | I F( Valor = = NIL, nAr ea- > Cam po, nArea- > Cam po: = Valor ) } ")

Sendo: Cam po = parâm etr o da função FI ELDBLOCK( )

nArea = núm er o da ár ea de t rabalho especificada no função FI ELDWBLOCK( )

Valor = v alor ex ecut ado no bloco de código

Ex em plo

// Este exemplo mostra como se pode usar o FIELDWBLOCK para criar o bloco de código para
o campo Nome da área de trabalho 3 na variável bBloco:
USE Cliente VIA "DBFCDX" NEW
bBloco := FIELDBLOCK("Nome",3)

File
Verifica se um arquivo ou m áscar a de ar quivos ex ist em .

Sin t ax e

FI LE( cAr quiv o ) - - > lExiste

Ar gum ento Obrigat . Tipo Descr ição

Nom e do ar quiv o podendo incluir cam inhos. Cam inhos locais ( Rem ot e)
cArquivo S C
ou cam inhos de ser vidor são aceitos.

Retorno Descrição

.F. O Ar quiv o ou padr ão de busca ex ist em .

.T. O Ar quiv o ou padr ão não existem .

D escr içã o

Verifica se ex ist e um arquivo ou um padr ão de ar quivos, no dir et ór io. Os car act er es * e ?. são aceit os.

Cam inhos de serv idor e locais são aceitos.

Ex em plo s

FILE("teste.dbf") // Verifica no diretório corrente se existe o arquivo teste.dbf


FILE("\SIGAADV\TESTE.dbf") // // Verifica no diretório Sigaadv do servidor se corrente e
se existe o arquivo teste.dbf
FILE("C:\TEMP\TESTE.dbf") // // Verifica no diretório Temp do cliente (Remote) se existe
o arquivo teste.dbf

212

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________213

FOpen
Abre um ar quiv o binár io.

Sin t ax e

FOPEN( cAr q , nModo ] ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

cArq Sim C Nom e do Ar quivo a ser aber to em m odo binár io.

Modo com o o ar quiv o deverá ser aber to. O Modo


de aber tura é um m odo com posto ent re m odo de
nModo Não N acesso e m odo de com par t ilham ent o. O m odo
padrão de aber tura é zer o, o que indica sem
com par t ilham ent o e som ent e leit ur a.

Retorno Descr ição

-1 Err o na aber t ur a do ar quiv o. Ver ifique FERROR( ) para m aiores


det alhes do er r o

>0 Handle do ar quiv o, a ser usado com as dem ais funções de arquiv o

D escr içã o

FOPEN( ) abr e um ar quiv o de m odo binár io, perm it indo a leit ur a ou gr avação atr áves das funções
FREAD() , FWRITE() .

Todo arquiv o aber to at ravés da FOPEN( ) , dev e ser fechado atr avés da FCLOSE() .

O m odo de abert ur a é com posto de m odo de acesso e m odo de com par t ilham ent o, esses m odos est ão
descrit os em fileio.ch.

Modos de Acesso

FO_READ Apenas Leit ur a

FO_WRI TE Apenas Gr av ação

FO_READWRI TE Leit ur a e Gr av ação

213

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________214

Modos de Com par tilham ento

FO_COMPAT Modo de com pat ibilidade ( Padr ão )

FO_EXCLUSI VE Exclusiv o

FO_DENYWRI TE Não per m ite que out r os abr am o arquiv o para


gravação

FO_DENYREAD Não per m ite que out r os abr am o arquiv o para


leit ur a

FO_DENYNONE per m ite leit ur a e gravação

FO_SHARED I gual ao FO_DENYNONE

O m odo de acesso em com binação ( + ) com o m odo de com par t ilham ent o deter m ina a m aneir a com o o
ar quivo ser á aber t o e sua acessibilidade em um am bient e de r ede.

Serão aceit os tant os cam inhos baseados no ser vidor, com o cam inhos locais ( r em ot e ) .

Ex em plo

Este exem plo usa o FOPEN( ) para abr ir um ar quivo par a leitura/ gravação de m aneira com par tilhada e
m ost ra um a m ensagem de er ro caso a abert ur a falhe:

#include "Fileio.ch"
//
nHandle := FOPEN("Temp.txt", FO_READWRITE + FO_SHARED)
IF FERROR() != 0
? "Impossivel abrir o arquivo, Erro : ", FERROR()
BREAK
ENDIF

FOpenPort
Abre um a por ta par alela ou ser ial.

Sin t ax e

FOPENPORT( cPor t a , [ cPar m ] , [ nModo ] ) - - > Num érico

Ar gum ento Obr igat . Tipo Descr ição

cArq Sim C Nom e do Dispositiv o a ser usado.

cPar m Sim C Car acterísticas do disposit ivo, apenas válido


par a por tas ser iais. Os parâm etr os são:
Velocidade ( BPS) , Paridade, DataBit s,
StopBit s, Tim eout de leitura ( Opcional ) .

214

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________215

nModo Não N Modo com o o dispositivo dev er á ser abert o. O


Modo de aber t ur a é um m odo com posto ent re
m odo de acesso e m odo de com par t ilham ent o.
O m odo padr ão de abert ur a é zero, o que
indica sem com part ilham ent o e som ente
leit ur a.

Retorno Descr ição

-1 Err o na aber tura do arquivo. Ver ifique FERROR( ) par a m aior es det alhes
do er r o

>0 Handle do disposit ivo, a ser usado com as dem ais funções de ar quivo.

D escr içã o

FOPENPORT( ) abr e um disposit ivo, perm it indo a leit ur a ou gravação at ráves das funções FREAD() ,
FWRI TE() .

Todo arquiv o aber to at ravés da FOPENPORT( ) , deve ser fechado at r av és da função FCLOSE() .

O m odo de aber t ur a é com post o de m odo de acesso e m odo de com part ilham ent o, esses m odos est ão
descr it os em fileio.ch.
Modos de Acesso

FO_READ Apenas Leitura

FO_WRI TE Apenas Gr av ação

FO_READWRI TE Leit ur a e Gravação

Modos de Com par tilham ento

FO_COMPAT Modo de com pat ibilidade ( Padrão )

FO_EXCLUSI VE Exclusiv o

FO_DENYWRI TE Não per m ite que outr os abr am o ar quiv o


par a gr avação

FO_DENYREAD Não per m ite que outr os abr am o ar quiv o


par a leit ur a

FO_DENYNONE per m ite leitura e gr av ação.

FO_SHARED I gual ao FO_DENYNONE

O m odo de acesso em com binação ( + ) com o m odo de com par t ilham ent o deter m ina a m aneir a com o o
ar quivo ser á aber t o e sua acessibilidade em um am bient e de r ede.

215

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________216

O dispositiv o será abert o no diretório cor r ent e, ou sej a, caso o diretório est ej a posicionado no client e, o
dispositiv o será aber to no client e ( Rem ote ) , caso contr ár io ser á aber to no ser vidor .

Os par âm et ros das por tas ser iais ser vem par a configurar a com unicação ser ial e podem ser os seguintes:

Velocidade 9600 ( Default ) ,19200,38400,57600,115200.


( BaudRate)
Paridade N ( Default, Sem Par idade ) , E ( Par ) , O ( I m par ) .

Dat aBits 6,7 ou 8 ( Default ) Bits.

St opBits 1 ( default ) ou 2 Bits.

Tim eout de leit ur a 1000 ( Default ) , Valores acim a de zero. Tem po em m ilisegundos de
esper a por dados a ser em lidos.

Ex em plo

Este exem plo usa o FOPENPORT( ) par a abr ir um a por t a de im pr essão para gravação e m ostr a um a
m ensagem de err o caso a aber t ur a falhe:

#include "Fileio.ch"
//
nHandle := FOPENPORT("LPT1:", "", FO_WRITE)
IF FERROR() != 0
? "Impossivel abrir a impressora LPT1, Erro : ", FERROR()
BREAK
ENDIF
Este ex em plo abr e um a por ta ser ial e espera par a obt er um a leit ur a da port a.

#include "Fileio.ch"
//
CURDIR( "C:\TEMP" ) // Posicionando no diretório cliente ( Remote )
nHandle := FOPENPORT("COM1:", "9600,N,8,1,10000", FO_WRITE)
IF FERROR() != 0
? "Impossivel abrir a impressora LPT1, Erro : ", FERROR()
BREAK
ENDIF
FREAD(

FRead
Lê car act er es binários de um ar quiv o.

Sin t ax e

FREAD( nHandle , @cBuffer , nQt dBy t es ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

nHandle Sim N É o m anipulador r et or nado pelas funções FOPEN( ) , FCREATE( ) ,


FOPENPORT( )

216

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________217

FOPENPORT( )

cBuffer Var Sim C É o nom e de um buffer onde os dados lidos dever ão ser
arm azenados. O t am anho desta v ar iável dev e ser m aior ou igual ao
t am anho infor m ado em nQtdByt es. Est a variável deve ser sem pre
passada por referência. ( @ antes do nom e da v ar iáv el )

nQtdByt es Sim N Núm ero m áx im o de byt es que dev em ser lidos.

Retorno Descrição

Num ér ico Quant idades de by tes lidos. Caso a quant idade sej a m enor que a
solicitada, indicar á er ro ou final de ar quiv o. Ver ifique FERROR( ) par a
obter m aior es det alhes

D escr içã o

FREAD( ) lê a par t ir um ar quivo aber t o, at ravés de FCLOSE() , FCREATE() , FOPENPORT() , os dados e


ar m azena no buffer infor m ado. FREAD( ) lê norm alm ente car act er es de contr ole ( ASC 128, ASC 0, etc.) .

FREAD( ) lerá at é o núm er o de byt es inform ado em nQt dByt es; caso acont eça algum er r o ou o arquivo
chegue ao final, FREAD( ) r et ornar á um núm ero m enor que o nQt dByt es.

O buffer passado para leit ur a dev e ser sem pr e pré- alocado e passado com o r efer ência. Caso cont rário, os
dados não poderão ser r et ornados.

FREAD( ) lê a part ir da posição at ual do pont eiro, que pode ser aj ust ado pelo FSEEK() ou por FWRITE() ,
FREADSTR() .

Ex em plo s

Este ex em plo lê 128 byt es em um buffer .

#define F_BLOCK 128


//
cBuffer := SPACE(F_BLOCK)
nHandle := FOPEN("Temp.txt")
//
IF FERROR() != 0
? "Abertura de arquivos com erro: ", FERROR()
ELSE
IF FREAD(nHandle, @cBuffer, F_BLOCK) <> F_BLOCK
? "Erro lendo arquivo"
ENDIF
FCLOSE(nHandle)
ENDIF

FReadStr

217

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________218

Lê car act er es de um ar quiv o binár io.

Sin t ax e

FREADSTR( nHandle , nQt dByt es ) - - > Car acter

Ar gum ento Obrigat . Tipo Descr ição

nHandle Sim N É o m anipulador r et or nado pelas funções FOPEN( ) , FCREATE( ) ,


FOPENPORT( ) .

nQtdByt es Sim N Núm ero m áx im o de byt es que dev em ser lidos.

Retorno Descr ição

Retorno var iável Ret or na um a st ring cont endo os car acteres lidos.

D escr içã o

FREADSTR( ) lê de um ar quivo abert o, at ravés de FCLOSE() , FCREATE() , FOPENPORT() .

FREAD( ) ler á at é o núm ero de by tes infor m ado em nQt dByt es ou até encontr ar um CHR( 0) . Caso aconteça
algum er ro ou o arquivo chegue ao final, FREAD( ) ret or nará um a st ring m enor do que nQdByt es e
colocar á o er r o em FERROR( ) .

FREADSTR( ) lê a part ir da posição at ual do pont eir o, que pode ser ajust ado pelo FSEEK( ) ou por FWRITE(
) , FREAD( ) .

Ex em plo s

Este ex em plo lê os 16 caract eres de um ar quivo e im prim e o seu cont eúdo.

#include "Fileio.ch"
//
nHandle := FOPEN("New.txt", FC_NORMAL)
IF FERROR() != 0
? "Erro abrindo o arquivo", FERROR()
ELSE
cString := FREADSTR(nHandle, 16)
? cString
FCLOSE(nHandle)
ENDIF

Frename
Muda o nom e de um arquiv o.

218

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________219

Sin t ax e

FRENAME( cNom eAnt igo, cNov oNom e) - - > nSucesso

Ar gum ent o Obrigat . Tipo Descr ição

Nom e do arquivo ser á renom eado, aceit a cam inhos do serv idor e
cOldFile S C
cam inhos do cliente.

Nov o nom e do arquiv o, aceita t am bém cam inho do serv idor , e cam inho
cNew File S C
do client e.

Retor no Descr ição

A m udança foi ex ecut ada com sucesso.

Ocor reu algum er ro na m udança de nom e, v er ifique se os dois cam inhos estão no
-1 m esm o am bient e. ( Local/ Local, Ser vidor/ Serv idor) . Verifique FERROR( ) para
detalhes do err o.

D escr içã o

FRENAME( ) r enom eia um ar quivo par a outr o nom e, t ant o no serv idor com o na est ação. Ao r enom ear um
ar quivo não esqueça que est a arquivo dev er á est ar fechado.

Ex em plo s

// Renomeando arquivos no cliente.


IF FRENAME("C:\TEMP\ArqAntigo.txt", "C:\TEMP\ArqNovo.txt") == -1
? "Erro ao renomear ", FERROR()
ENDIF
// Renomeando arquivos no Servidor.
IF FRENAME("\SIGAADV\ArqAntigo.txt", "\SIGAADV\ArqNovo.txt") == -1
? "Erro ao renomear ", FERROR()
ENDIF

FSeek
Posiciona o ar quiv o binár io.

Sin t ax e

FSEEK( nHandle , nOffset , [ nOrigem ] ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

nHandle Sim N Manipulador obtido at ravés das funções FOPEN, FCREATE.

nOffset Sim N Núm ero de by tes que o ponteir o do ar quiv o deve ser m ov ido a par tir
da or igem infor m ada em nOrigem . O núm ero pode ser posit iv o ou

219

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________220

negat ivo. O dest ino não precisa ex ist ir no ar quiv o.

nOrigem Não N I ndica a par tir de qual posição do ar quiv o, o nOffset será
consider ado.

Retorno Descrição

Num ér ico A nova posição do ar quiv o.

D escr içã o

FSEEK( ) posiciona o ponteiro do arquivo par a as pr óx im as oper ações de leit ur a ou gr av ação. As


m ov im entações de pont eir os são r elat ivas à nOr igem que pode t er os seguint es v alores definidos em
fileio.ch:

FS_SET Ajust a a par t ir do inicio do ar quiv o.

FS_RELATI VE Ajust e r elativ o a posição atual do ar quiv o.

FS_END Ajust e a par t ir do final do ar quivo

Ex em plo

// Exemplo calcula o tamanho do arquivo.


#include "Fileio.ch"
//
// Abre o arquivo apenas para leitura
IF (nHandle := FOPEN("Temp.txt")) >= 0
//
// Pega o tamanho do arquivo
nLength := FSEEK(nHandle, 0, FS_END)
//
FCLOSE(nHandle)
ELSE
? "Erro na abertura do arquivo", FERROR()
ENDIF

FWrite
Gr av a em um ar quiv o binár io.

Sin t ax e

FWRI TE( nHandle , cBuffer , [ nQt dByt es ] ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

220

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________221

nHandle Sim N É o m anipulador r et or nado pelas funções FOPEN( ) , FCREATE( ) ,


FOPENPORT( ) .

cBuffer Sim C É o nom e de um buffer de onde os dados ser ão gravados. O tam anho
desta v ar iável dev e ser m aior ou igual ao tam anho inform ado em
nQt dBy t es ( caso seja infor m ado o t am anho) .

nQtdByt es Não N Quant idade de byt es a ser em gr av ados.

Ret or no Descr ição

Num ér ico Quantidade de by t es efet iv am ent e gr avados. Se o r et or no for m enor que o nQtdByt es,
houv e um err o na gr av ação. Ver ifique FERROR( ) par a m ais det alhes.

D escr içã o

FWRITE( ) grava em um ar quivo abert o, at ravés de FCLOSE() , FCREATE() , FOPENPORT() , os dados do


buffer infor m ado. FWRITE( ) grava nor m alm ent e car act er es de cont r ole ( ASC 128, ASC 0, et c. ) .

FWRITE( ) gravará até o núm er o de byt es inform ado em nQt dByt es; caso aconteça algum er ro, r et or nará
um núm ero m enor que o nQt dByt es.

FWRITE( ) gr av a a part ir da posição atual do pont eir o, que pode ser ajust ado pelo FSEEK() ou por
FREAD() , FREADSTR() .

Ex em plo s

Este ex em plo copia um arquivo par a out ro.

#include "Fileio.ch"
#define F_BLOCK 512
//
cBuffer := SPACE(F_BLOCK)
nInfile := FOPEN("Temp.txt", FO_READ)
nOutfile := FCREATE("Newfile.txt", FC_NORMAL)
lDone := .F.
//
DO WHILE !lDone
nBytesRead := FREAD(nInfile, @cBuffer, F_BLOCK)
IF FWRITE(nOutfile, cBuffer, nBytesRead) < ;
nBytesRead
? "Erro gravando: ", FERROR()
lDone := .T.
ELSE
lDone := (nBytesRead == 0)
ENDIF
ENDDO
//
FCLOSE(nInfile)
FCLOSE(nOutfile)

221

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________222

GetI mpWindow s
Retorna list a de im pressoras disponíveis para im pressão.

Sin t ax e

GETI MPWINDOWS( lServ er ) - - > Ar r ay

Ar gum ento Obrigat . Tipo Descr ição

lSer ver Sim L I nform ar .T. se desej ar list a de im pr essor as do Ser ver e .F. se
desej ar lista de im pressor as do Rem ote.

Retorno Descr ição

Ar ray Arr ay com nom e das im pr essoras disponíveis.

D escr içã o

GETI MPWI NDOWS( ) ret or na um a lista de im pr essor as disponíveis no spool do Serv er ou Rem ote. Se o
Serv er est á em am bient e Unix , a GETI MPWI NDOWS( ) retor nar á a list a com os nom es de im pressor as
cadast r adas na chav e PRINTERSNAME do AP6SRV.I NI ( v er PREPAREPRI NT( ) ) .

Ex em plo

aImpressoras:= GetImpWindows(.F.) // retorna lista de impressoras do Windows do remote.

GetPortActive
Retorna list a de por t as de im pr essão disponív eis.

Sin t ax e

GETPORTACTIVE ( lSer ver ) - - > Arr ay

Ar gum ento Obr igat. Tipo Descr ição

lSer ver Sim L I nform ar .T. se desej ar list a de im pressor as


do Ser ver e .F. se desej ar list a de
im pressor as do Rem ote.

Retorno Descr ição

222

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________223

Ar ray Arr ay com nom e das im pr essoras disponíveis

D escr içã o

GETPORTACTIVE( ) r et orna um a list a de por tas de im pressão disponív eis do Ser ver ou Rem ote. Se o
Serv er est á em am biente Unix, a GETPORTACTI VE( ) ret or nará um a lista com os nom es de devices
possíveis par a im pressão.

Ex em plo

aPortas:= GetPortActive(.F.) // retorna lista de portas de impressao do remote.

GetClientDir
Retorna o dir et ório onde está inst alado o Rem ote.

Sin t ax e

GetClient Dir( ) - - > cDir

Retorno Descr ição

cDir Car act er , dir et ór io aonde est á instalado o rem ot e.

D escr içã o

Retorna o dir et ório onde o Rem ot e est á instalado.

Ex em plo

? GetClientDir() // Imprime o diretório onde está instalado o remote


// Exemplo de saída
// c:\ap6\bin\remote

Header
Verifica o t am anho do cabeçalho da tabela corr ente.

Sin t ax e

HEADER( ) - - > Num érico

Retorno Descr ição

223

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________224

0 Não há t abela cor rent e

nByt es Tam anho do cabeçalho da tabela cor r ente em núm er o de by tes

D escr içã o

Esta função pode ser ut ilizada em conj unt o com as funções RecSize e RecCount para calcular o tam anho
ocupado no disco pela tabela corr ente. Pois, o t am anho ser á Header + RecSize* RecCount .

Ex em plo

// Este exemplo calcula o tamanho ocupado pela tabela "AA1990.DBF" no disco (número de
bytes):
USE "\DADOSADV\AA1990.DBF" SHARED NEW
nCabecalho := HEADER()
nDados := RecSize() * RecCount()
nTamanhoTotal := nCabecalho + nDados

I ndexKey
Verifica qual a expressão de chav e de um índice.

Sin t ax e

INDEXKEY( nOr dem ) - - > Car acter

Ar gum ento Obrigat . Tipo Descrição

nOrdem S N Posição do índice na lista.

Retorno Descrição

"" Não ex ist e índice par a o parâm et r o nOrdem cor rent e.

cExpOr dem Ex pr essão de chav e da ordem ativ a ou especificada pelos par âm etr os.

D escr içã o

Esta função é utilizada par a ver ificar qual é a expressão de chav e de det erm inado índice, especificado pela
posição do índice na lista pelo prim eir o par âm et ro.

Se for passado parâm etr o igual a 0, será r et ornada a ex pr essão de chav e do índice at ual.

Ex em plo

// Este exemplo mostra como o INDEXKEY() pode recuperar a expressão do índice atual:

224

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________225

USE Cliente NEW


INDEX ON Nome+Cod TO Ind1 FOR Nome+Cod > "AZZZZZZZ"
INDEX ON Nome TO Ind2 FOR Nome > "CCCCCCC"
INDEXKEY(1) // Retorna: Nome+Cod
INDEXKEY(2) // Retorna: Nome
INDEXKEY(0) // Retorna: Nome - expressão corrente

I ndexOrd
Verifica a posição do índice corr ente.

Sin t ax e

INDEXORD( ) - - > Num ér ico

Retorno Descrição

0 Não ex ist e índice ou tabela corr ente

nOrd Posição do índice cor rent e na lista

D escr içã o

Esta função retorna a posição ocupada pelo índice corrente dentro da lista de índices.

Ex em plo

// Este exemplo verifica qual a posição do índice corrente dentro da lista


USE Cliente NEW
SET INDEX TO Nome, End, Cep
INDEXORD() // Returns: 1 - é o primeiro índice da lista

I nitPrint
Inicializa parâm et r os de im pr essão de relat ór io.

Sin t ax e

INITPRINT( [ nOut Put ] , [ cNam eRel ] , [ cTy pe ] ,[ lPor t ] ,[ cPat hAtu ] ) - - > NI L

Ar gum ento Obrigat . Tipo Descr ição

nOut Put Não N Dir ecionam ent o da saída de im pressão. 1= via Client ( padr ão) e 2= v ia
Ser ver

cNam eRel Não C Nom e do r elat ór io que ser á ex ibido no spool de im pr essão

cType Não C Tipo do relat ór io. "220" = 220 colunas, " 132L" = 132 colunas
landscape ( Padr ão) , " 132P"= 132 colunas por tr ait , "080" = 80

225

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________226

colunas port rait

lPor t Não L Não utilizado

cPat hAtu Não L Não utilizado

Retorno Descr ição

NI L Sem r et or no

D escr içã o

INITPRINT( ) inicializa parâm etr os de im pr essão de relat ór io. Define onde será a saída de im pressão e qual
vai ser a for m at ação de saída.

Ex em plo

/* Inicializa relatório para imprimir via Client "Meu relatório" em formulário de 132
colunas
em Landscape */
InitPrint( 1,"Meu relatório", "132L" )

I sPrinter
Verifica se im pr essor a está disponív el.

Sin t ax e

ISPRINTER( [ xPor ta ] , [ lSet a ] , [ nWher e ] , [ @nEr rorCode ] ) - - > Lógico

Ar gum ento Obr igat. Tipo Descr ição

xPor ta Não C ou I nform ar a por t a que desej am os verificar


N " LPT1" ( padrão) , " LPT2" , " COM1" , "COM2"
ou 1= LPT1, 2= LPT2.

lSet a Não L Não utilizado

nWher e Não N 1= t est a im pr essora no Rem ot e ( default ) ,


2= test a im pressor a no Serv er .

nErr or Code Não N Ret or na o código de err o da im pr essora

Retorno Descr ição

.T. I m pr essor a at iva

.F. I m pr essor a inativa

226

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________227

D escr içã o

ISPRINTER( ) t est a a disponibilidade de im pr essor as conectadas fisicam ente à m áquina onde está sendo
ex ecut ado o Ser ver ou Rem ote Prot heus. Dependendo do sistem a oper acional, o test e pode ser um
Assem bler em Window s 95 ou 98, ou a criação de um ar quiv o em Windows NT,2000 e Unix.

Nos casos onde o test e é efet uado por cr iação de ar quiv o, o nErr orCode não será infor m ado.

Ex em plo

If !isPrinter(1,,1,@nErr) // testa se impressora esta conectada na lpt1 no Remote.


MsgBox("Impressora não conectada! Erro: "+Str(nErr))
endif

I sCisaSyncOn
Verifica se o uso do CisaSy nc está habilit ado.

Sin t ax e

IsCisaSyncON( ) - > Lógico

Retorno Descrição

.F. Não está habilit ado.

.T. Está habilit ado.

D escr içã o

Esta função é ut ilizada par a v er ificar se o uso do CisaSync está habilit ado ou não.

Ex em plo

// Este exemplo demonstra como se pode utilizar IsCisaSyncOn verificar se o CisaSync está
habilitado.
USE Cliente NEW
IF (ISCISASYNCON())
QOUT("CisaSync habilitado")
ELSE
QOUT("CisaSync desabilitado")
ENDIF

Locate
Pesquisa um r egistr o segundo um det er m inado escopo.

Sin t ax e

227

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________228

LOCATE FOR CondFor [ WHI LE CondWhile] [ NEXT nRecs] [ RECORD nRecno] [ REST] [ ALL]

Ar gum ent o Obrigat . Tipo Descr ição

Expressão Expr essão em ADVPL a ser r esolv ida para o r egist ro a ser
CondFor S
Adv Pl aceit o.

Expressão Expr essão em ADVPL que det er m ina quando a busca deve
CondWhile N
Adv Pl par ar ( quando a ex pr essão ret or nar .F.)

nRecs N N Quando r egist ros dev em ser v er ificados.

nRecno N N Núm er o do r ecno do registr o a ser verificado.

D escr içã o

Este com ando é ut ilizado par a encont rar um regist r o com det er m inado valor dent r o de um escopo
especificado na tabela corr ent e.

Se a pesquisa obteve êxit o, a flag FOUND retor na .T. e a t abela é posicionada no r egist ro encontr ado;
caso FOUND r et or ne .F., a tabela é posicionada em EOF.

Se as opções do escopo forem om it idas ( CondWhile, nRecs e nRecno) , todos os regist r os são pesquisados,
desde o pr im eir o com o a opção "ALL".

Caso contr ár io, a opção "WHILE CondWhile" det er m ina quando a busca deve par ar ( a expressão r etornar
.F.) ; " NEXT nRecs" det er m ina quant os r egist ros devem ser pesquisados na busca; " RECORD nRecno"
determ ina o recno do r egist ro a ser verificado na busca; "REST" significa que a busca dev e com eçar a
part ir do pr óx im o registr o.

Ex em plo

// Este exemplo demonstra como utilizar o comando LOCATE no seu modo mais usual:
USE Cliente NEW
LOCATE FOR Nome="Jose"
FOUND() // Retorna: .T.
EOF() // Retorna: .F.
RECNO() // Retorna: 5
LOCATE FOR Nome="DDDDD"
FOUND() // Retorna: .F.
EOF() // Retorna: .T.
RECNO() // Retorna: 85
// Este exemplo demonstra como se pode utilizar o comando LOCATE para lista todos os
Cliente de nome "Jose" com idade 20 anos:
USE Cliente NEW
DBGOTOP()
LOCATE FOR Idade=20 WHILE Nome="Jose"
DO WHILE FOUND()
DBSKIP()
LOCATE REST FOR Idade=20 WHILE Nome="Jose"
ENDDO

228

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________229

LUpdate
Verifica a dat a da últ im a m odificação da tabela corr ent e.

Sin t ax e

LUpdat e( ) - - > Dat a

Retorno Descr ição

Data em br anco Não há t abela cor rent e

Data Dat a da últ im a m odificação da tabela corr ent e ( dia, m ês e ano)

D escr içã o

Esta função v er ifica qual a dat a da últ im a m odificação e fecham ent o da t abela cor r ent e, caso não exista
tabela corr ent e é r et or nada um a dat a em branco.

Ex em plo

// Mostra a data da última modificação da tabela corrente, caso não exista tabela
corrente mostra uma mensagem de erro:
dModificacao := LUpdate()
IF (EMPTY(dModificacao))
Messagebox("Não há tabela corrente","Erro", 0)
BREAK
ELSE
CONOUT ("A data da ultima modificacao e: " + DTOS(dModificacao))
ENDIF

MakeDir

Cr ia um dir et ór io.

Sin t ax e

MAKEDIR( cNov oDir ) - - > Num érico

Ar gum ento Obrigat . Tipo Descr ição

CNovoDir Sim C Nom e do dir et ór io a ser cr iado, incluindo opcionalm ent e o cam inho.

Retorno Descr ição

229

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________230

0 Dir et ór io foi cr iado com sucesso

- 1 Err o na cr iação do dir et ór io

D escr içã o

Cr ia um dir et ór io na estação ou no ser vidor Adv anced Pr ot heus.

Ex em plo

MAKEDIR("c:\teste\um") // Cria um diretório na estacao


nResult := MAKEDIR("\teste\um") // Cria o diretorio no servidor Advanced protheus
IF nResult != 0
conout("Impossivel criar o diretório no servidor Protheus" + Str(nResult))
ENDIF
MAKEDIR( "teste" ) // Exemplo também válido ( Criando o diretório no servidor)

MemoLine
Ex tr ai um a linha de um a st ring ou de um cam po m em o.

Sin t ax e

MEMOLINE( cSt r ing, [ nLineLengt h ] , [ nLineNum ber ] , [ nTabSize ] , [ lWr ap ] ) - - > Caract er

Ar gum ento Obrigat . Tipo Descr ição

cStr ing Sim C É a st ring or iginal de onde ser á ext raída a linha.

nLineLengt h Não N Núm ero de car acteres por linha. Caso não especificado, assum e 79.

nLineNum ber Não N Núm ero da linha a ser r et or nada. Caso não especificado, assum e 1.

nTabSize Não N Define o núm ero de caract eres para o Tab. Caso não especificado,
assum e 4.

lWrap Não L Habilita a quebra de linhas de acor do com as palav ras. Caso não
especificada, fica habilit ado.

Retorno Descrição

Caract er Caract er. Ret orna a linha solicit ada, caso não ex ist a o núm er o de linhas, retorna um a st r ing
em branco.

D escr içã o

Mem oLine( ) é um a função que retorna um a linha específica. Caso não ex ista a linha especificada, r et or na
um str ing em br anco.

230

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________231

Caso a quebr a de linhas esteja habilit ada ( lWr ap igual .T.) e a palav ra esteja no m eio da quebr a de linha,
esta será colocada na pr óx im a linha.

Mem oLine( ) é usada em conj unto com MLCOUNT( ) par a ex tr air t odas as linhas de um text o.

Ex em plo s

LOCAL nLineLength := 40, nTabSize := 3, lWrap := .T.


LOCAL nLines, nCurrentLine
//
LOCAL cTexto := MEMOREAD( "Texto.TXT" )
nLines := MLCOUNT(cTexto, nLineLength, nTabSize, lWrap)
//
FOR nCurrentLine := 1 TO nLines
conout (MEMOLINE(CustNotes, nLineLength, nCurrentLine, nTabSize, lWrap))
NEXT

MemoRead
Lê um ar quivo t ex to e retor na um a st r ing.

Sin t ax e

MEMOREAD( cFile ) - - > Car acter

Ar gum ento Obrigat . Tipo Descr ição

cFile Sim C Nom e do ar quiv o text o que dev er á ser lido. Cam inhos podem ser
incluídos.

Retorno Descr ição

variável Car acter. MEMOREAD( ) retorna um a str ing com no m áxim o 65.535 byt es do arquivo
inform ado.

D escr içã o

Mem oRead( ) lê um ar quiv o t ex to e arm azena o cont eúdo em um a v ar iável str ing. O ar quivo pode cont er
no m áxim o 65.535 byt es.

Mem oRead( ) tent ar á abr ir o arquivo com part ilhado e som ent e para leitura.

Caso o ar quiv o não possa ser aber to, Mem oRead ret or nará um a str ing v azia ( " " ) .

Ex em plo s

cString = MEMOREAD("Temp.txt")
if empty( cString )

231

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________232

conout("Erro lendo arquivo")


endif

MemoWrite
Gr av a um a st ring para um ar quiv o em disco.

Sin t ax e

MEMOWRITE( cAr quivo , cStr ing ) - - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

cArquivo Sim C É o nom e do ar quiv o onde ser á gr av ado, incluindo a ex tensão e o


cam inho.

cStr ing Sim C É a st ring que será gr av ada no arquiv o.

Retorno Descr ição

.T. O Arquivo foi gravado com sucesso

.F. Houv e falha na criação e gr avação do arquivo, v er ifique FERROR( ) par a obt er det alhes o er ro.

D escr içã o

MEMOWRITE( ) é um a função que gr av a o conteúdo de um a str ing em um ar quivo em disco.

Podem ser usados cam inhos t anto no local ( Rem ot e ) com o no serv idor .

Ex em plo s

LOCAL cString := "Teste de gravação…"


IF MEMOWRITE("teste.txt", cString)
conout("Erro gravando teste.txt")
ENDIF

MLCount
Cont a o núm ero de linhas de um a St ring.

Sin t ax e

MLCOUNT( cStr ing , [ nLineLength ] , [ nTabSize ] , [ lWr ap ] ) - - > Num ér ico

232

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________233

Ar gum ento Obr igat . Tipo Descrição

cStr ing Sim C É a str ing original de onde será ex tr aída a linha.

nLineLengt h Não N Núm er o de caract er es por linha. Caso não especificado, assum e 79.

nTabSize Não N Define o núm er o de car acteres par a o Tab. Caso não especificado,
assum e 4.

lWrap Não L Habilit a a quebr a de linhas de acordo com as palavr as. Se não
especificado, fica habilitado.

Retorno Descr ição

>=0 Num érico. Núm ero de linhas que a st ring possui.

D escr içã o

MLCOUNT( ) r et or na o núm er o de linhas de um a str ing baseado nos parâm et r os inform ados.

Ex em plo s

LOCAL nLineLength := 40, nTabSize := 3, lWrap := .T.


LOCAL nLines, nCurrentLine
//
LOCAL cTexto := MEMOREAD( "Texto.TXT" )
nLines := MLCOUNT(cTexto, nLineLength, nTabSize, lWrap)
//
FOR nCurrentLine := 1 TO nLines
conout(MEMOLINE(CustNotes, nLineLength, nCurrentLine, nTabSize, lWrap))
NEXT

Month
Conv er te o valor da data par a o núm ero do m ês.

Sin t ax e

MONTH( dDat a ) - - > Num érico

Ar gum ento Obr igat. Tipo Descr ição

dDat a Sim D É o valor da data a ser conv er t ido

Retorno Descr ição

> = 0 e < = 12 Par a um a dat a v álida.

233

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________234

0 Se a data for nula ou inválida

D escr içã o

MONTH( ) é um a função de conv er são que ex t rai da data o valor num érico do m ês.

CMONTH( ) é um a função sem elhant e que r et or na o nom e do m ês a par t ir do v alor de dData.

Ex em plo s

Estes exem plos retornam o m ês da data do sist em a:

dData := DATE() // Resultado: 09/01/01


nMes := MONTH(DATE()) // Resultado: 9
nMes := MONTH(DATE()) + 1 // Resultado: 10

MsCompress
Com pact a um ou vários ar quivos em um único ar quivo com ext ensão .MZP.

Sin t ax e

MSCOMPRESS( cAr q, [ cDest ino ] , [ cSenha ] ) - - > lSucesso

Ou

MSCOMPRESS( aAr quivos, [ cDestino ] , [ cSenha ] ) - - > lSucesso

Ar gum ento Obrigat . Tipo Descr ição

cArq Sim C Nom e do Ar quivo a ser com pact ado.

aArquivos Sim A Nom es dos arquivos a ser em com pactados.

Nom e do Ar quivo dest ino, caso a ext ensão sej a om it ida será
assum ido .MZ P, se não for infor m ado assum ir á o m esm o nom e do
cDestino Não C
cAr q com ex t ensão .MZ P ou o nom e do 1º . Arquivo no Arr ay
aAr quiv os.

cSenha Não C Senha a ser ut ilizada para cr iptogr afar o arquivo.

Retorno Descr ição

.T. A com pact ação foi executada com sucesso.


.F. Er ro na com pactação, verifique o espaço disponív el par a com pact ação.

234

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________235

D escr içã o

MSCOMPRESS( ) com pacta os ar quivos infor m ados em um único ar quiv o com ext ensão default .MZ P. O
for m at o é propr iet ár io e m ult iplat aform a.

Caso a senha seja inform ada apenas com a senha poder em os descom pact ar os arquiv os.

A função para descom pact ação é a MSDECOMP( ) .

Tant o ar quivos no local ( Rem ot e ) com o no Ser vidor são aceit os.

Ex em plo s

// Exemplo 1 à Compacta apenas um arquivo


lRes := MSCOMPRESS( "AP6SRV.EXE", "AP6SRV.MZP" )
// Exemplo 2 à Compacta um diretório com senha
aNome := {}
ADIR( "*.DBF", aNome )
lRes := MSCOMPRESS( aNome, "ArqComp.MZP", "SENHA" )

MsCRC32
Calcula um CRC de um a st r ing.

Sin t ax e

MSCRC32( cStr ing ) - - > nCRC

Ar gum ento Obrigat . Tipo Descr ição

Str ing de onde será calculado um CRC32, é garant ido que para a
m esm a st ring sem pr e se obt er á um m esm o núm ero, por ém , não é
cStr ing Sim C
gar antido que par a st rings difer entes, os núm er os sej am sem pre
diferent es.

Retorno Descr ição

nCRC Um núm er o indicando o CRC da str ing inform ada.

D escr içã o

MSCRC32( ) calcula um CRC de um a st ring infor m ada e r et or na um núm er o com esse cálculo.

Note que st r ings iguais r et or nam CRC iguais, por ém , nem sem pre str ings diferent es r et ornam CRC
difer entes.

235

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________236

Ex em plo

cString := MEMOREAD( "ARQ.TXT" )


? MSCRC32( cString )

MsCRC32Str
Calcula um CRC de um a st r ing, retor nando em for m at o St r ing.

Sin t ax e

MSCRC32STR( cSt ring ) - - > cCRC.

Ar gum ento Obrigat . Tipo Descr ição

Str ing de onde será calculado um CRC32, é garant ido que para a
m esm a str ing sem pre obterá um m esm o núm er o, m as não é
cStr ing Sim C
gar antido que par a st rings difer entes os núm er os sej am sem pre
diferent es

Retorno Descrição

nCRC Um a st ring com o CRC da str ing inform ada

D escr içã o

MSCRC32STR( ) calcula um CRC de um a st r ing infor m ada e r et ornando um a st r ing com esse cálculo.

Note que st r ings iguais r et or nam CRC iguais, por ém nem sem pre str ings diferent es r et ornam CRC
difer entes.

Ex em plo

cString := MEMOREAD( "ARQ.TXT" )


? MSCRC32STR( cString )

MsDecomp
Descom pacta ar quiv os no for m at o .MZ P ( Micr osiga Zip) .

236

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________237

Sin t ax e

MSDECOMP( cArqZip, cPat hDestino, [ cSenha ] ) - - > lSucesso.

Ar gum ento Obrigat . Tipo Descr ição

cArq Sim C Nom e do Arquivo a ser descom pact ado.

Dir etório onde os arquivos deverão ser descom pact ados. Note que
cPat hDestino Não C podem ser incluídos cam inhos do serv idor com o cam inhos locais (
Rem ot e ) .

cSenha Não C Senha a ser ut ilizada para descript ogr afar o ar quiv o.

Retorno Descr ição

.T. A descom pactação foi execut ada com sucesso.

.F. Err o na com pact ação, v er ifique o espaço disponível par a descom pact ação.

D escr içã o

MSDECOMP( ) descom pact a o ar quiv o infor m ado em um dir et ór io. O For m at o é pr opriet ário, e m ulti-
plat aform a, supor t a apenas arquivos com pactados pela função MSCOMPRESS( ) .

Caso o ar quiv o sej a pr ot egido por senha, apenas com a senha poderem os descom pactá- lo.

A função para com pact ação é a MSCOMPRESS( ) .

Tant o ar quivos no local ( Rem ot e ) com o no Ser vidor são aceit os.

Ex em plo

// Exemplo 1 à Descompacta no servidor


lRes := MSDECOMP( "AP6SRV.MZP", "TEMP" )
// Exemplo 2 à Descompacta no local ( Remote )
lRes := MSCOMPRESS( "c:\ArqComp.MZP", "SENHA" )

OrdCondSet
Seta a condição e o escopo par a a ordem cor rent e.

237

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________238

Sin t ax e

ORDCONDSET( [ cFor Cond ] ,,,,[ bEv al ] ,,,,,, [ lDescendent e ] ,,,,) - - > Lógico

Ar gum ento Obrigat. Tipo Descrição

Ex pr essão na form a t ext ual a ser


r esolvida para verificar se o
cFor Cond Não C
r egistr o em quest ão est á dent ro
do escopo definido

Ex pr essão na form a executável a


ser r esolvida par a cada r egist ro
bEval Não Bloco de Código
pr ocessado. Est e bloco deve
r et or nar t ipo lógico

Especifica se a ordem deve ser


lDescendente Não L
crescente ou decrescente

Retorno Descr ição

.F. Não conseguiu setar o filt r o

.T. Filt r o set ado com sucesso

D escr içã o

Esta função é ut ilizada para set ar um a or dem de r egist ro que est ej a dent ro de um escopo e de um a
condição especificada. Se t odos os par âm etr os for em om it idos serão aceit os todos os registr os da ordem .

At ravés do prim eir o parâm et r o ( cForCond) é possível especificar o escopo ao qual o r egistr o deve
pert encer par a estar dentr o do filtr o. At r avés do parâm et r o bEval, pode- se definir um bloco de código que
deve r et ornar .T. para que o registr o per tença ao filtr o a ser setado.

Se o parâm et r o lDescendent e for om it ido, a or dem est ar á cr escent e, m as se t iver v alor .T. será
decr escent e.

Ex em plo

// Este exemplo mostra como se pode usar o ORDCONDSET para executar um filtro com idade
entre 20 e 30 anos e nome Joao:
USE Cliente VIA "DBFCDX" NEW
ORDCONDSET("Idade>20 .AND. Idade<30",,,,{||Nome = "Joao"})

OrdCreate
Cr ia um a or dem em determ inado ar quiv o de índice.

238

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________239

Sin t ax e

ORDCREATE( [ cIndice ] ,[ cOr dem ] , cExpChave, [ bEx pChave ] , [ lUnico ] ) - - > Nil

Ar gum ento Obrigat. Tipo Descr ição

cI ndice Não * C Nom e do arquivo de índice a ser cr iada a ordem .

cOrdem Não * C Nom e da ordem a ser cr iada.

Expr essão das chaves da or dem a ser cr iada na for m a de


cExpChave Sim C
st ring.

Bloco de Expr essão das chaves da or dem a ser cr iada na form a


bExpChave Não
Código execut áv el.

L
lUnico Não Cr ia índice com o único ( o padr ão é .F.) .

* Obs: Os dois prim eiros parâm et r os são opcionais, m as pelo m enos um deles t em que est ar especificado.

Retorno Descrição

NI L Sem r etorno

D escr içã o

Esta função é ut ilizada par a cr iar um a nova or dem em determ inado ar quiv o de índice com o nom e
especificado at r av és do pr im eiro par âm et ro, sendo que, se o m esm o ex ist ir, é apenas acrescentada a
or dem , m as, caso cont rário, é criado o arquiv o.

Para tant o, são ex ecut ados os passos a seguir:

1- Salv a fisicam ente as alt er ações ocorr idas na tabela corr ente;

2- Fecha todos os ar quiv os de índice abert os;

3- Cr ia o novo arquivo de índice se não exist ir;

4- Cr ia a nova ordem ;

5- Set a a nov a or dem com o a ordem cor rent e;

6- Posiciona a t abela cor r ent e no pr im eir o registr o do índice.

239

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________240

Com exceção do RDD Ct ree, a tabela corr ente não pr ecisa est ar abert a em m odo ex clusivo par a a cr iação
da ordem , pois na cr iação de índices no Ct r ee é alt er ada a est rutur a da t abela, sendo necessár io que a
tabela estej a aber ta em m odo exclusiv o.

Ex em plo

// Este exemplo mostra como se pode criar novo arquivo de índice criando a ordem sobre os
campos Nome e End e não aceitará duplicação:
USE Cliente VIA "DBFCDX" NEW
ORDCREATE ("\teste\ind2.cdx",,"Nome+End",{ || Nome+End },.T.)
// Este exemplo mostra como se pode criar nova ordem (Tag2) sobre o campo End que
aceitará duplicação e no arquivo de índice já existente:
USE Cliente VIA "DBFCDX" NEW
ORDCREATE ("\teste\ind2.cdx","Tag2","End",{ || End })

OrdDescend
Verifica ou alt er a a condição ( cr escent e/ decr escent e) de um a ordem .

Sin t ax e

ORDDESCEND( [ cOr dem | nPosicao ] ,[ cAr qI ndice ] , [ lDecrescente ] ) - - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

cOrdem Não C Nom e da ordem a ser alt er ada

nPosicao Não N Posição da or dem na list a a ser alterada

cArqIndice Não C Nom e do arquivo de índice

lDecrescent e Não L
Det er m ina se a or dem ser á decrescente ( .T.) ou cr escent e ( .F.)

Retorno Descrição

.F. A or dem do par âm et ro est á na for m a crescente

.T. A or dem do par âm et ro est á na for m a decr escente

D escr içã o

Esta função pode ser ut ilizada par a apenas v er ificar o est ado da or dem atual, se não for especificado o
parâm et r o lDecr escent e.

240

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________241

Quando é especificado o parâm et r o lDescend, o est ado da ordem é m odificado, sendo que a função
ret or na ao est ado anterior da or dem em questão.

Para evit ar conflito, no caso de haver m ais de um a ordem com o m esm o nom e, pode- se passar o
parâm et r o com o nom e do índice ao qual a or dem per t ence.

A or dem passada no pr im eir o parâm etr o pode ser especificada at ravés da sua posição na lista de or dens
at ivas ( atr avés do ORDLI STADD) ou atr av és do nom e dado à or dem , a função v er ifica aut om at icam ente
se o parâm et r o é num ér ico ou car acter .

Ex em plo

// Este exemplo mostra como o ORDBAGNAME pode encontrar o nome de diferentes índices
através da posição da ordem na lista:
USE Cliente VIA "DBFCDX" NEW
ORDLISTADD ("\teste\ind1.cdx","NOME") // A ordem é criada na forma crescente
ORDDESCEND() // Retorna: .F.
ORDDESCEND(,,.T.) // Retorna: .F., mas seta a ordem atual (NOME) como decrescente
ORDDESCEND() // Retorna: .T.
ORDLISTADD ("\teste\ind2.cdx","NOME")
ORDDESCEND("NOME","ind1",.F.) // Retorna: .T.
ORDDESCEND("NOME","ind1",) // Retorna: .F.

OrdKey
Verifica qual a expressão de chav e da or dem .

Sin t ax e

ORDKEY( [ cOr dem | nPosicao ] ,[ cAr qI ndice ] ) - - > Car acter

Ar gum ento Obrigat . Tipo Descr ição

cOrdem Não C Nom e da or dem a ser alterada

nPosicao Não N Posição da ordem na list a

cArqIndice Não C Nom e do índice

Retorno Descrição

"" Não ex ist e or dem corr ente.

cExpOr dem Ex pr essão de chave da ordem at iva ou especificada pelos


parâm et r os.

D escr içã o

241

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________242

Esta função é ut ilizada par a v er ificar qual é a expr essão de chave de det er m inada ordem .

Caso não sej am especificados os par âm etr os de ident ificação da ordem , é verificada a ordem cor r ent e.

Para evit ar conflito, no caso de haver m ais de um a or dem com o m esm o nom e, pode- se passar o
parâm et r o com o nom e do índice ao qual a or dem per t ence.

A or dem passada no pr im eir o parâm etr o pode ser especificada at ravés da sua posição na lista de or dens
at ivas ( atr avés do ORDLI STADD) ou atr av és do nom e dado à or dem , a função v er ifica aut om at icam ente
se o parâm et r o é num ér ico ou car acter .

Ex em plo

// Este exemplo mostra como o ORDKEY() pode recuperar a expressão da ordem atual:
USE Cliente NEW
INDEX ON Nome+Cod TO Ind1 FOR Nome+Cod > "AZZZZZZZ"
ORDKEY("Ind1") // Retorna: Nome+Cod

OrdListAdd
Acrescenta um a ou m ais or dens à lista.

Sin t ax e

ORDLI STADD( cAr qI ndice, [ cOr dem ] ) - - > Nil

Ar gum ento Obrigat . Tipo Descr ição

cArqIndice Sim C Nom e do índice a ser acrescentado, com ou sem diretór io e ex tensão

cOrdem Não C Nom e da or dem a ser acr escent ada

Retorno Descrição

NI L Sem r etorno

D escr içã o

Esta função é ut ilizada para acr escentar um a ou m ais ordens de det er m inado índice na lista de or dens
at ivas da ár ea de tr abalho.

242

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________243

Quando são especificados os dois ar gum entos ( índice e or dem ) , é acr escent ada apenas a or dem
especificada nos par âm et ros à list a e a m esm a tor na- se at iva.

Quando é especificado apenas o pr im eir o parâm et r o, são acr escent adas t odas as or dens contidas no
ar quivo de índice especificado neste par âm et ro à lista, e a pr im eira or dem torna- se at iv a.

Para se utilizar ar quiv os de ext ensão padr ão do RDD, est e dado pode ser om it ido no pr im eir o parâm et r o,
m as, caso contr ár io, dev e ser especificado.

Ex em plo

// Este exemplo mostra como se pode acrescentar uma ordem específica ou todas as ordens
de determinado arquivo de índice à lista:
USE Cliente VIA "DBFCDX" NEW
OrdListAdd ("\teste\ind1.cdx","NOME") // Acrescenta apenas a ordem NOME
OrdListAdd ("\teste\ind2.cdx") // Acrescenta todas as ordens do arquivo ind2.cdx

PRow
Infor m a ou m uda a linha corr ente de im pressão.

Sin t ax e

PROW( [ nNewLine ] ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

nNewLine Não N Inform ar a nova linha de im pressão.

Retorno Descr ição

N Núm ero da linha corr ente de im pressão

D escr içã o

PROW( ) pode ser ut ilizado para inform ar a linha corr ent e de im pr essão ou par a m odificá- la. Se a nova
linha inform ada for m enor que a cor rent e, ist o pr ovocar á um salt o de página na im pr essão.

Ex em plo

@ PROW( ), 10 PSAY "Minha Linha nesta pagina e " + str( PROW( ) )


PROW( PROW( )+2 ) // Pula 2 linhas
@ PROW( ), 10 PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PROW( 0 ) // Salta a pagina

243

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________244

Pack
Rem ov e t odos os r egistr os delet ados da tabela.

Sin t ax e

PACK

D escr içã o

Este com ando apaga ( fisicam ente) t odos os r egist ros delet ados da t abela cor rent e.

Ex em plo

// Este exemplo demonstra como se pode utilizar a função DBDELETE() para marcar alguns
registros como deletados e o comando PACK para deletá-los fisicamente.
USE Clientes NEW
DBGOTO(100)
DBDELETE()
DBGOTO(105)
DBDELETE()
DBGOTO(110)
DBDELETE()
PACK

PCol
Infor m a ou m uda a coluna corr ent e de im pressão.

Sin t ax e

PCOL( [ nNew Col ] ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

nNewCol Não N I nform ar a nov a coluna de im pressão.

Retorno Descr ição

N Núm ero da coluna cor rent e de im pressão.

D escr içã o

PCOL( ) pode ser ut ilizado para inform ar a coluna cor r ente de im pressão ou para m odificá- la. Se for
infor m ada um a coluna m enor que a cor r ent e, serão im pr essos caract eres de BACKSPACE chr ( 8) para
for çar o r et or no do car ro de im pressão em im pr essoras m atr iciais.

244

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________245

Ex em plo

PCOL( 10 )
@ ROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PROW( PROW( )+2 ) // Pula 2 linhas
PCOL( 10 )
@ PROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PROW( 0 ) // Salta a pagina

PreparePrint
Pr epar a o r elatório par a o inicio da im pressão.

Sin t ax e

PREPAREPRINT( lWindow s, cPrint erNam e, lDisco, cFile, l_Lpd, nLeft Margin ) - - > NIL

Ar gum ento Obr igat. Tipo Descr ição

lWindows Sim L Define se a im pressão será v ia spool do Window s ou dir et am ente


em por t a de im pressão.

cPrinterNam e Sim C I nfor m a o nom e da im pr essor a que ser á acionada. Se


lWindows= .T., dev e- se inform ar o nom e da im pressor a Window s.
Se lWindow= .F., dev e- se inform ar o nom e da port a de im pressão
" LPT1"," LPT2" .

lDisco Sim L I nfor m a se a im pr essão ser á dir ecionada para gr avação em


arquivo. Se lDisco= .T., lWindow s e cPrinterNam e, não t er ão efeito
ent ão dev e- se infor m ar o nom e do ar quiv o de saída em cFile.

cFile Sim C I nfor m a o nom e de ar quiv o que ser á gerado se lDisco= .T..

l_lpd Não L Aplicável som ent e para Ser v er executando em am bient e Unix .
I nfor m a que a im pr essão será direcionada par a disco e logo em
seguida direcionada par a o LPD ( daem on de im pressão do Unix) .

nLeft Mar gin Não N Mar gem esquerda do relat ór io par a ajust e par a encadernação em
cm .

Retorno Descr ição

NI L Sem r et or no.

D escr içã o

PREPAREPRINT( ) aj ust a a im pressão do relat ór io propr iam ent e dit a, define se utilizará o spool do
Windows ou se o relat ór io será direcionado par a ar quiv o. Pode- se aj ust ar a m ar gem esquerda do r elatór io
para encader nações.

245

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________246

Quando est am os ut ilizando um ser vidor em am bient e Unix , pode- se configurar a saída do r elat ór io para
ut ilizar o LPD ( Line Pr int er Daem on) do Unix . At ive o parâm et r o l_lpd par a .T., e no ar quivo de
configuração do Ser ver ( AP6SRV.I NI ) , cr ie a entr ada abaix o:

[ SERVERPRINTERS]

PRINTERSNAME= lp1,lp2[ ...,lp3]

Onde PRI NTERSNAME é um a list a com os nom es das im pressor as cadast r adas no \ etc\ pr intcap. Par a m ais
infor m ações veja m anual do Unix par a configuração de im pr essor as. Lem br ando que o Unix é case-
sensitive quando t rata nom es e ar quiv os.

Ex em plo

// Envia a impressao para a impressora "LaserJet4.." e configura a margem esquerda para 1


cm para direita
PreparePrint( .T., "LaserJet4 in //advpr1",.F.,"",.F.,1 )

PrnFlush
Força envio do buffer de im pr essão para a im pr essora.

Sin t ax e

PRNFLUSH( ) - - > NI L

Retorno Descr ição

NI L Sem r et or no

D escr içã o

Nas im pressões, o Pr ot heus bufferiza a im pressão em páginas par a enviar t odo o cont eúdo para a
im pr essora de for m a otim izada. PRNFLUSH( ) for ça o envio do buffer de dados par a a im pr essora antes do
pr ev ist o pela ot im ização de im pressão.

Ex em plo

SETPRC(0,0) // inicia impressão na linha 0 coluna 0


PCOL( 10 ) //muda para coluna 10
@ ROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PRNFLUSH( ) // Forca impressão antes do termino da pagina.
PROW( PROW( )+2 ) // Pula 2 linhas
PCOL( 10 )
@ PROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PROW( 0 ) // Salta a pagina
FECHAREL( ) // Fecha impressão

246

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________247

RDDSetDefault
Modifica ou ver ifica o RDD padr ão.

Sin t ax e

RDDSetDefault ( [ cNov oRddPadrão ] ) - - > Car acter

Ar gum ento Obrigat . Tipo Descr ição

cNovoRddPadrão Não C Nov o nom e do RDD a ser definido com o padr ão.

Retorno Descrição

cAnt igoRddPadr ão Nom e do RDD padr ão corr ent e

D escr içã o

Esta função pode ser ut ilizada apenas par a v er ificar qual o RDD que está definido com o padr ão quando for
om it ido seu par âm et ro.

Ela t am bém pode ser ut ilizada par a especificar outr o RDD com o padrão, especificando- o at r avés do
parâm et r o.

Ex em plo

// Este exemplo demonstra como se pode utilizar o RDDSETDEFAULT para alterar o valor do
RDD padrão.
RDDSETDEFAULT("CTREECDX") // Retorna: DBFCDX
RDDSETDEFAULT() // Retorna: CTREECDX

RealRDD
Retorna qual é o driver que r ealm ente está sendo ut ilizado par a aber t ur a dos arquivos locais.

Sin t ax e

REALRDD( ) - - > Caract er

Retorno Descr ição

247

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________248

"ADS" Adv antage Local Serv er

"ADSSERVER" Adv antage Dat abase Ser ver

"CTREE" Ct ree - Fair com

"CODEBASE" Codebase

D escr içã o

O dr iver "DBFCDX" pode ser ut ilizado para a abert ura de ar quivos Codebase, Adv ant age Dat abase Ser ver ,
Advant age Local Serv er ou Ct r ee. Depende do que est á especificado na chave LOCALFI LES do am biente
ut ilizado, no arquivo de inicialização do ser vidor .

REALRDD( ) r et or na o nom e do driv er que r ealm ent e est á sendo ut ilizado par a aber t ur a dos ar quiv os
locais.

Ex em plo

if RealRdd()="CODEBASE"
conout("Mudar abertura dos arquivos para ADS.")
endif

Recall
Alt er a o est ado delet ado de alguns r egist ros.

Sin t ax e

RECALL [ FOR CondFor ] [ WHI LE CondWhile] [ NEXT nRecs] [ RECORD nRecno] [ REST] [ ALL]

Ar gum ento Obrigat . Tipo Descr ição

Expressão em ADVPL a ser r esolvida par a o r egist ro ser


CondFor Sim
aceit o.

Expressão em ADVPL que det er m ina quando a busca deve


CondWhile Não
par ar ( quando a ex pr essão r et or nar .F..

nRecs Não N Quando r egist r os dev em ser v er ificados.

nRecno Não N Núm ero do r ecno do r egistr o a ser verificado.

Retorno Descrição

NI L Sem r etorno

248

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________249

D escr içã o

Este com ando é ut ilizado par a r et irar a m ar ca de registr o delet ado de alguns r egist r os.

Para ser ex ecut ado, os registr os em questão devem est ar bloqueados ou a tabela deve est ar abert a em
m odo ex clusivo. Se o r egist ro não est iver delet ado, este com ando não faz nada.

Ele é o opost o da função DBDELETE, que m ar ca o registr o atual com o delet ado.

A seleção dos r egist r os a ser em alterados é feit a da seguinte form a:

• se todas as opções for em om itidas ele é ex ecut ado apenas par a o r egist r o at ual;

• se for especificada um a condição de "FOR" , o escopo abr ange t odos os arquiv os ( "ALL") ;

• o escopo vai até quando a condição de " WHI LE" r etorna .F.;

• o par âm etr o " NEXT nRecs" determ ina quantos r egist ros devem ser alt er ados;

• o par âm etr o " RECORD nRecno" especifica qual r ecno do registr o deve ser alt er ado;

• a opção " REST" det er m ina que ser ão pr ocessados os r egist r os a par tir do r egistr o atual. Caso sej a
om itida, o com ando com eça a pr ocessar a par tir do prim eir o r egist ro.

Ex em plo

// Este exemplo demonstra como se pode utilizar o RECALL para retornar o estado do
registro atual para normal.
USE Cliente
DBGOTO(100)
DBDELETE()
DELETED() // Retorna: .T.
RECALL
DELETED() // Retorna: .F.
// Este exemplo demonstra como se pode utilizar o RECALL para retornar o estado de todos
os registros que apresentam idade>30.
USE Cliente
RECALL FOR Idade>30
// Este exemplo demonstra como se pode utilizar o RECALL para retornar o estado de todos
os registros com idade maior que 30 e Nome = Joao a partir do registro atual.
USE Cliente
RECALL FOR Idade>30 WHILE Nome="Joao" REST

RecSize
Verifica o t am anho do registr o da tabela corr ente.

Sin t ax e

RECSI ZE( ) - - > Num ér ico

249

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________250

Retorno Descr ição

nByt es Tam anho do r egist ro da t abela corr ent e em núm er o de


byt es.

0 Não há t abela cor rent e.

D escr içã o

Esta função calcula o tam anho do r egist ro da tabela corr ent e som ando os t am anhos de cada cam po m ais
um byt e da flag de r egist ro deletado m ais quat r o by tes do cam po r ecno.

Ela pode ser ut ilizada em conj unt o com as funções Header e RecCount para calcular o tam anho ocupado
no disco pela tabela corr ente, pois o t am anho ser á Header + RecSize* RecCount .

Ex em plo

// Este exemplo calcula o tamanho ocupado pela tabela "AA1990.DBF" no disco (número de
bytes):
USE "\DADOSADV\AA1990.DBF" SHARED NEW
nCabecalho := HEADER()
nDados := RECSIZE() * RECCOUNT()
nTamanhoTotal := nCabecalho + nDados

ReI ndex
Reconstr ói t odos os índices aber tos da ár ea de t rabalho cor rent e.

Sin t ax e

REINDEX

D escr içã o

Este com ando r econst rói t odos os índices da área de t r abalho cor r ente e posiciona as tabelas no pr im eiro
registr o lógico.

Ex em plo

// Este exemplo demonstra como se pode utilizar o DBREINDEX para reconstruir os índices
depois que um novo índice foi gerado.
USE Clientes NEW
DBSETINDEX("IndNome")
REINDEX

Replace

250

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________251

Modifica o v alor de alguns cam pos e r egist r os da t abela cor rent e.

Sin t ax e

REPLACE Cam po WITH Ex p [ , Cam po2 WI TH Ex p2 …] [ FOR CondFor] [ WHI LE CondWhile] [ NEXT
nRecs] [ RECORD nRecno] [ REST] [ ALL]

Ar gum ento Obrigat . Tipo Descr ição

Cam po Sim Nom e do cam po a ser alterado

Ex p Sim Expressão em ADVPL com v alor a ser colocado no cam po especificado

CondFor Não Expressão em ADVPL a ser r esolvida para que o registr o sej a alt er ado

Expressão em ADVPL que det er m ina quando a alt eração deve par ar
CondWhile Não
( quando a expressão retor nar .F.)

N
nRecs Não Quando regist r os dev em ser alterados

nRecno Não N Núm ero do r ecno do r egistr o a ser alt er ado

D escr içã o

Este com ando é ut ilizado par a alt er ar o v alor de determ inado cam po em alguns regist r os da tabela
corr ent e, onde o cam po escolhido r ecebe o v alor da ex pr essão para os r egist r os dent r o do escopo
definido.

Se não for em especificadas as condições para que o r egist r o seja alterado, m odifica t oda a tabela, com o
se estivesse especificada a opção "ALL".

Pode- se especificar um escopo par a que os registr os sejam alt er ados atr av és das opções " FOR CondFor " e
"WHILE CondWhile" .

Pode- se tam bém lim it ar o núm er o de r egist ros a serem alterados at r av és da opção " NEXT nRecs" e
determ inar que a alteração dos r egist ros deve- se iniciar a par tir do registr o at ual com " REST" , m as, caso
cont r ár io, o com ando execut a um DBGOTOP() ant es de iniciar a alteração.

Se é desej ado alt er ar apenas determ inado r egist r o pode- se defini- lo at ravés da especificação do r ecno
com "RECORD nRecno" .

Ex em plo

// Este exemplo demonstra como utilizar o comando REPLACE alterar todos os registros
dentro do escopo, onde o campo "Valor" receberá "Valor1+Valor2-Valor3*0.1" e o campo
"DiaTran" receberá a data atual. Este escopo é definido por Idade > 20, até que o nome
seja maior ou igual a "VVV", começa a deleção a partir do registro atual e marca apenas
10 registros:

251

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________252

USE Cliente VIA "CTREECDX" NEW


REPLACE Valor WITH Valor1+Valor2-Valor3*0.1, DiaTran WITH Date() FOR Idade>20 WHILE
Nome<"VVV" NEXT 10 REST

RLock
Bloqueia o registr o cor rent e da tabela at iva.

Sin t ax e

RLOCK( ) - - > Lógico

Retorno Descr ição

.F. Não conseguiu bloquear o registr o. Pr incipal m ot iv o: o regist r o já est á bloqueado por out ro
usuár io.

.T. O r egist ro foi bloqueado com sucesso.

D escr içã o

Esta função é ut ilizada quando se t em um a t abela abert a e com part ilhada, e se desej a bloquear um
registr o par a que out r os usuár ios não possam alterá- lo. Se a tabela j á est á aber t a em m odo exclusiv o, a
função não alt er a seu est ado.

Ex em plo

/ / Est e ex em plo ut iliza a função RLOCK( ) par a delet ar o r egist ro com o nom e "Joao" da t abela de Client es
indexada por Nom e:

USE Clientes INDEX Nome SHARED NEW


SEEK "Joao"
IF FOUND()
IF RLOCK()
DELETE
Messagebox("Joao deletado","OK", 0)
ELSE
Messagebox("Registro utilizado por outro usuário","Erro", 0)
ENDIF
ELSE
Messagebox("Registro não encontrado","Erro", 0)
ENDIF
CLOSE
//Este exemplo mostra como se pode bloquear um registro sem que ele esteja na tabela
corrente
USE VENDAS NEW
USE CLIENTES NEW
//
IF !VENDAS->(RLOCK())
Messagebox("Registro utilizado por outro usuário","Erro", 0)
BREAK
ENDIF

252

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________253

Seconds
Retorna o núm ero de segundos decor r idos desde a m eia- noit e.

Sin t ax e

SECONDS( ) - - > Num ér ico

Retorno Descr ição

> = 0 e < = 86399 Ret or na a hor a do sistem a em segundos. O v alor num érico
r epresent a o núm er o de segundos decor r idos desde a m eia- noit e,
baseado no relógio de 24 horas e var ia de 0 a 86399.

D escr içã o

Esta função r et or na o núm ero de segundos decor ridos desde a m eia- noit e, segundo a hor a do sist em a.
Está r elacionada à função TIME( ) que r et orna a hor a do sist em a com o um a cadeia de car acteres no
for m at o hh: m m : ss.

Ex em plo s

Este ex em plo com para TIME( ) e SECONDS( ) :

cHora := TIME() // Resultado: 10:00:00


cSegundos := SECONDS() // Resultado: 36000.00
Este exemplo usa a função SECONDS() para cronometrar o tempo decorrido:
LOCAL nStart, nElapsed
nStart:= SECONDS()
.
. <statements>
.
nElapsed:= SECONDS() - nStart
cElapsed := LTRIM(STR(nElapsed)) + " seconds"

Seek
Encont ra um registr o com det er m inado v alor da chave do índice.

Sin t ax e

SEEK Exp [ SOFTSEEK]

Ar gum ento Obrigat . Tipo Descr ição

Expr essão em ADVPL a ser r esolv ida para o r egist r o ser


Ex p Sim
encont rado

253

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________254

Retorno Descrição

NI L Sem r etorno

D escr içã o

Este com ando é ut ilizado para encontr ar um registr o com determ inado valor da expressão de chav e de
índice.

Antes da cham ada do SEEK deve- se cer tificar de que existe um a ordem ativa no m om ento com os cam pos
que se desej a pesquisar o valor .

Caso a expressão possua apenas um cam po num érico, o prim eir o par âm etr o dev e ser do t ipo num érico,
m as nos dem ais casos deve- se utilizar um valor do tipo caract er par a est e parâm et r o ( m esm o se forem
apenas dois cam pos num ér icos ou do t ipo dat a) .

Quando for especificada a opção "SOFTSEEK", m esm o que a expressão pesquisada não encont r ar nenhum
registr o com este v alor, a tabela ser á posicionada no próxim o v alor m aior que o especificado no pr im eiro
parâm et r o, m as m esm o posicionando no pr óxim o valor, esta função r et ornar á .F. ( pois não encont r ou) .

Quando não for especificado este v alor ou est iver .F. e falhar o valor de pesquisa, a t abela será
posicionada em LASTREC + 1 e será set ada a flag de EOF.

Ex em plo

// Este exemplo demonstra como se pode utilizar o SEEK para busca de valores numéricos.
USE Clientes NEW
ORDLISTADD ("/teste/ind1.cdx") // Expressão é Num (campo numérico)
SEEK 100 // Retorna: .F.
EOF() // Retorna: .T.
SEEK 100 SOFTSEEK // Retorna: .F.
EOF() // Retorna: .F. (pois o softseek posicionou no próximo registro)
// Este exemplo demonstra como se pode utilizar o SEEK para percorrer todos os registros
de Clientes com o nome joao e vencimentos a partir de janeiro de 2001.
USE Clientes NEW
ORDLISTADD ("/teste/ind2.cdx") // Expressão é Nome+Venc (campo caracter + data)
SEEK " joao200101" SOFTSEEK // Procura a primeira ocorrência de Nome "joao" e
vencimento maior que Janeiro de 2001
WHILE !EOF() .AND. Nome == " joao"
DBSKIP()
ENDDO

Select
Seleciona nov a ár ea de t rabalho.

Sin t ax e

254

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________255

SELECT nAr ea | Alias

Ar gum ento Obrigat . Tipo Descr ição

nArea Sim N Núm ero da área de t r abalho a ser selecionada.

Alias Sim Nom e da ident ificação da ár ea de t rabalho a ser selecionada ( Alias) .

D escr içã o

Este com ando é ut ilizado par a selecionar um a nov a ár ea de t rabalho par a deix á- la at iva.

Ex em plo

// Este exemplo demonstra como se pode utilizar o SELECT alterar a área corrente.
USE Clientes ALIAS a1
USE Clientes2 ALIAS a2
SELECT a1 // ou SELECT 1

Set Filter
Seta ou cancela um a condição de filt ro.

Sin t ax e

SET FI LTER TO [ Condição ]

Ar gum ento Obrigat . Tipo Descr ição

Condição Não Expressão em ADVPL a ser set ada com o filt r o na or dem cor r ent e

Retorno Descrição

NI L Sem r etorno

D escr içã o

Este com ando é ut ilizado para set ar um filtr o nos r egistr os da t abela corr ent e especificado at ravés da
condição especificada.

Quando um regist r o não est á dent ro do filtr o setado ele continua ex ist indo fisicam ente, m as não
logicam ent e ( nas funções de m anipulação de banco de dados com o DBGOTOP, DBSEEK, DBSKI P, et c) .

255

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________256

Se o com ando é cham ado com condição em v azio, ser á cancelado o filtr o exist ent e.

Ex em plo

// Este exemplo demonstra como utilizar o comando SET FILTER para setar novas expressões
de filtro e retirá-las:
USE Cliente VIA "CTREECDX" NEW
SET ORDER TO 2 // Seta a ordem de nome Nome do índice Ind1
SET FILTER TO Idade>30 // Filtra os registros com Idade menor que 30
SET FILTER TO

Set I ndex
Acrescenta todas as or dens de um ou m ais ar quiv os de índice à list a.

Sin t ax e

SET INDEX TO [ ArqI ndices ] [ ADDI TI VE ]

Ar gum ento Obrigat . Tipo Descr ição

Nom e dos arquiv os de índice a ser em acr escent ados à list a de


Ar qI ndices Não
or dens.

Retorno Descrição

NI L Sem r etorno

D escr içã o

Este com ando é utilizado par a acrescentar um a ou m ais or dens de deter m inado índice na lista de or dens
at ivas da ár ea de tr abalho quando se especifica " ADDI TI VE".

Quando o m esm o é om itido, a list a de ordens é esvaziada par a depois ser acrescentada às or dens dos
índices.

Quando o arquivo de índice possui apenas um a or dem , a m esm a é acr escent ada à list a e t or na- se at iva.

Quando o índice possui m ais de um a ordem , todas são acr escent adas à list a e a pr im eir a t or na- se at iva.

Quando m ais de um arquivo de índice é selecionado, a ordem que t or na- se at iva é a prim eir a ordem do
pr im eir o ar quivo.

256

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________257

Quando o com ando é utilizado sem nenhum par âm etr o, todas as or dens da list a são apagadas.

Ex em plo

// Este exemplo demonstra como utilizar o comando SET INDEX para acrescentar novas ordens
a lista e retirá-las depois:
USE Cliente VIA "CTREECDX" NEW
SET INDEX TO ind1 // Inicializa a lista com as ordens do arquivo de índice "ind1"
SET INDEX TO ind2 ADDITIVE // Acrescenta as ordens do arquivo de índice "ind2" na lista
SET INDEX TO ind3 // Limpa a lista e inicializa com as ordens do arquivo "ind3"
SET INDEX TO // Limpa a lista de ordens

Set Order
Seleciona um a or dem at iva da ár ea de t r abalho.

Sin t ax e

SET ORDER TO [ nPosição | [ TAG cOr dem ] [ I N cIndice ] ]

Ar gum ento Obrigat . Tipo Descr ição

nPosição Não N Posição da ordem na list a de ordens at ivas

cOrdem Não Nom e da or dem a ser set ada

Nom e do ar quiv o de índice a ser ao qual pert ence a or dem a ser


cI ndice Não
set ada

Retorno Descrição

NI L Sem r etorno

D escr içã o

Este com ando pode ser ut ilizado apenas par a retornar a tabela corr ente à or dem original ( r ecno) , se não
for especificado nenhum parâm et r o.

Tam bém pode ser utilizado par a selecionar um a nova ordem par a a tabela corr ent e at ravés da posição da
or dem na list a de or dens at iv as com o prim eir o parâm etr o ou atr avés do nom e da or dem especificado
"TAG cOr dem ".

Para evit ar nom es de or dens duplicados, pode- se especificar a qual arquivo de índice pert ence com " IN
cI ndice".

257

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________258

Ex em plo

// Este exemplo demonstra como utilizar o comando SET ORDER para setar novas ordens e
retirá-las:
USE Cliente VIA "CTREECDX" NEW
SET ORDER TO TAG Nome IN Ind1 // Seta a ordem de nome Nome do índice Ind1
SET ORDER TO 3 // Seta a terceira ordem da lista
SET ORDER TO // Retira as ordens, setando a ordem natural da tabela

SetPrc
Configur a a linha e coluna cor rent es de im pr essão.

Sin t ax e

SETPRC( nLin, nCol ) - - > NIL

Ar gum ento Obrigat . Tipo Descr ição

nLin Sim N I nform ar a nov a linha de im pr essão

nCol Sim N I nform ar a nov a coluna de im pressão

Retorno Descrição

NI L Sem retorno.

D escr içã o

SETPRC( ) m odifica a linha e coluna at uais de im pr essão assim com o PCOL( ) e PROW( ) cham ados
separadam ente.

Ex em plo

SETPRC(0,0) // inicia impressão na linha 0 coluna 0


PCOL( 10 ) //muda para coluna 10
@ ROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PROW( PROW( )+2 ) // Pula 2 linhas
PCOL( 10 )
@ PROW( ), PCOL( ) PSAY "Minha Linha nesta pagina e " + str( PROW( ) )
PROW( 0 ) // Salta a pagina

Skip
Desloca a t abela par a outr o r egist ro.

258

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________259

Sin t ax e

SKIP [ nRegist ros] [ nAr ea | ALIAS Alias]

Ar gum ento Obrigat . Tipo Descrição

nRegistr os Não N Núm er o de regist r os a ser deslocados

nArea Não N Núm er o da ár ea de t rabalho

Alias Não Nom e da identificação da área de tr abalho

Retorno Descrição

NI L Sem r etorno

D escr içã o

Este com ando é ut ilizado par a deslocar par a outr o r egist ro a part ir do regist r o at ual.

O par âm et ro especifica quant os r egist ros lógicos devem ser deslocados a par tir do cor r ent e. Se for
posit iv o desloca em direção ao final da tabela, se for negat ivo ao início da tabela e, caso sej a om it ido, irá
para o próxim o r egist ro ( o padr ão é 1) . Caso passe do início da tabela, posiciona no prim eir o r egist ro e
seta BOF, caso passe do final da t abela, posiciona no r egist ro LASTREC + 1 e set a EOF.

O padr ão é ser utilizado par a a tabela corr ente, m as pode ser especificada outr a ár ea de t rabalho para
ex ecut á- lo at r avés do núm er o " nArea" ou nom e " ALIAS Alias".

Ex em plo

// Este exemplo mostra como o SKIP pode passar do final da tabela e do início da tabela
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOBOTTOM()
EOF() // retorna .F.
SKIP
EOF() // retorna .T.
DBGOTOP()
BOF() // retorna .F.
SKIP -1
BOF() // retorna .T.
// Este exemplo mostra como o SKIP pode deslocar 10 registro em relação ao registro
corrente
DBUSEAREA(.T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOTO(100)
SKIP 10
RECNO() // retorna 110
SKIP -10
RECNO() // retorna 100
// Este exemplo mostra como o SKIP pode ser executado em outra area de trabalho.
DBUSEAREA(.T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )

259

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________260

DBGOTO(100)
DBUSEAREA(.T.,"dbfcdxads", "\dadosadv609\sa1110.dbf","XXX", .T., .F. )
SKIP 10 ALIAS "SSS"
SSS->RECNO() // retorna 110
SKIP -10 ALIAS "SSS"
SSS->RECNO() // retorna 100

SplitPath
Quebr a em diversas par t es um ar quivo.

Sin t ax e

SPLI TPATH( cAr q, @[ cDr ive] , @[ cCam inho] , @[ cNom e] , @[ cEx t] ) - - > NIL

Ar gum ento Obrigat . Tipo Descr ição

Nom e do Ar quivo a ser quebr ado. Opcionalm ent e, pode incluir


cArq Sim C
cam inho e driv e.

Nom e do Dr ive. Ex em plo ( C: ) . Caso o Arquivo infor m ado não possua


cDrive Não C driv e ou o cam inho r efira- se ao serv idor , r et or no será um a str ing em
branco.

Nom e do Cam inho. Caso o Arquivo inform ado não possua cam inho,
cCam inho Não C
ser á um a st r ing em branco.

Nom e do Ar quiv o sem a ext ensão, caso em cAr q não seja


cNom e Não C
especificado um nom e do Arquiv o retor nar á um a str ing em br anco.

Nom e do Ar quiv o sem a ext ensão, caso em cAr q não seja


C
cExt Não especificado um Ar quivo com ext ensão retor nar á um a st ring em
branco

Retorno Descrição

NI L Sem r etorno

D escr içã o

Split Path( ) divide um cam inho com plet o em t odas as suas subpar tes; cArq não necessit a cont er todas as
part es.

Tant o ar quivos locais ( Rem ot e ) quanto ar quiv os no ser vidor , podem ser infor m ados.

260

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________261

O cam inho, caso inform ado, incluirá um a bar r a com o últ im o car acter.

A ex tensão inclui sem pre o pont o ( . ) antes da ext ensão.

Todos os par âm et ros quando passados dev em ser por r eferência.

Ex em plo

Local cArq := "C:\TEMP\TESTE.EXE"


Local cDrive, cDir, cNome, cExt
SplitPath( cArq, @cDrive, @cDir, @cNome, @cExt )
? cDrive // Resultado : C:
? cDir // Resultado : \TEMP\
? cNome // Resultado : TESTE
? cExt // Resultado: .EXE

TCConType
Define o tipo de conex ão que será utilizada ent r e o Pr ot heus e o TopConnect .

Sin t ax e

TCCONTYPE ( cTipo ) - - > NIL

Ar gum ento Obrigat . Tipo Descr ição

cTipo Sim C Tipo da conexão. Pode ser : " TCPIP" ou "NPI PE"

Retorno Descr ição

NI L Sem r et or no

D escr içã o

Determ ina o tipo de conexão que ser á ut ilizada ent r e o Pr ot heus e o TopConnect. O valor é guar dado e
ut ilizado nas cham adas seguint es de TCLink.

Ex em plo

TCConType("NPIPE")
_nCon := TCLink("MSSQL7/TOPSQL", "TOPSERVER1")
If (_nCon < 0)
CONOUT("Falha Conexao TOPCONN - Erro: "+ str(nCon, 10, 0))
EndIf

261

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________262

TCDelFile
Apaga um ar quivo de um banco de dados.

Sin t ax e

TCDELFI LE ( cTabela ) - - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

cTabela Sim C Nom e da t abela que deve ser apagada.

Retorno Descr ição

.T. Tabela foi ex cluída com sucesso

.F. Err o. Geralm ent e é por que a t abela est á sendo utilizada por out ro pr ocesso.

D escr içã o

Apaga um ar quivo de um banco de dados r elacional v ia TopConnect .

Ex em plo

If TcCanOpen("TRB"+SM0->M0_CODIGO+"0")
TcDelFile("TRB"+SM0->M0_CODIGO+"0")
Endif

TCGenQry
Define a ex ecução de um a Quer y.

Sin t ax e

TCGENQRY ( [ xPar 1, xPar 2, ] , cQuer y) - - > car acter

Ar gum ento Obrigat . Tipo Descr ição

xPar 1, xPar 2 Não Qualquer Par âm et ros apenas par a com pat ibilização. Não t em função.

cQuery Sim C Contém a ex pr essão da quer y que se desej a executar.

Retorno Descr ição

262

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________263

"" Sem pre r etorna um a st ring vazia.

D escr içã o

Esta função det er m ina que a pr óx im a cham ada à DBUseArea será a abert ur a de um a Quer y e não de
tabela.

Ex em plo

cQuery := 'SELECT X2_CHAVE CHAVE, R_E_C_N_O_ RECNO from SX2990'


dbUseArea(.T., 'TOPCONN', TCGenQry(,,cQuery), 'TRB', .F., .T.)
while !Eof()
// Processa
conout(TRB->CHAVE)
dbSkip()
enddo
dbCloseArea()

TCI svLock
Verifica se o ser vidor possui sist em a de locks virt uais.

Sin t ax e

TCISVLOCK ( ) - - > Lógico

Retorno Descrição

.T. O ser vidor possui sist em as de lock s vir tuais.

.F. O ser vidor não possui locks virt uais.

D escr içã o

At ravés de locks v irt uais, é possív el bloquear um a st ring. A função TCI SVLOCK verifica se o ser v idor
TopConnect possui t rat am ent o para lock s v ir t uais.

Ex em plo

#ifdef TOP
If TCIsVLock()
TCVUnLock()
EndIf
#endif

TCRefresh
Faz r efresh em um a tabela.

263

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________264

Sin t ax e

TCREFRESH ( cTabela ) - - > NIL

Ar gum ento Obrigat . Tipo Descr ição

cTabela Sim Lógico I ndica nom e da t abela que dev e ser feit o refresh.

Retorno Descr ição

NI L Não existe retorno.

D escr içã o

Faz o refresh de um a t abela, at r avés de um a leit ur a for çada da tabela no banco de dados. É út il após
alt er ações dir et as no banco ( delet e, insert ) .

Ex em plo

cTabela:= "SA1990"
cComando := "Delete "+ cTabela +" Where R_E_C_N_O_ > 50000 "
TCSqlExec(cComando)
TCRefresh(cTabela)

TCSetBuff
Esta função foi m ant ida apenas para com pat ilização, não sendo utilizada no AP6.

TCSetConn
Alt er a a conexão cor rent e.

Sin t ax e

TCSETCONN( nConexaoCor rent e ) - - > Lógico

Ar gum ento Obr igat. Tipo Descr ição

Indica o núm er o da conexão que dev e se tor nar a


nConexaoCor rent e Sim Num ér ico
corr ente. Est e núm ero foi r et or nada pela função TCLI NK.

Retorno Descr ição

264

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________265

.T. Conexão cor rent e t rocada com sucesso

.F. Conexão não encontr ada

D escr içã o

Alt er a a conex ão cor rent e. Nov as t abelas abert as ou cr iadas utilizarão esta conexão para r ealizar a
oper ação. É útil quando se tem m ais de um a conexão com o TopConnect.

Ex em plo

_nCon1 := TCLink("MSSQL7/TOPSQL1", "TOPSERVER1")


If (_nCon1 < 0)
CONOUT("Falha Conexao TOPCONN 1 - Erro: "+ str(_nCon1, 10, 0))
return .F.
EndIf
_nCon2 := TCLink("MSSQL7/TOPSQL2", "TOPSERVER2")
If (_nCon2 < 0)
CONOUT("Falha Conexao TOPCONN 2 - Erro: "+ str(_nCon2, 10, 0))
return .F.
EndIf
USE CLIENTES VIA "TOPCONN" NEW // Tabela de clientes será aberto em _nCon2
TCSETCONN(_nCon1)
USE PEDIDOS VIA "TOPCONN" NEW // Tabela de pedidos será aberto em _nCon2
.
.
.
TCQUIT()
RETURN .T.

TCSetDummy
Alt er a o status do m odo "dum m y"

Sin t ax e

TCSETDUMMY ( [ lSt at us ] ) - - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

lSt at us Sim Lógico I ndica se deve ligar ( .T.) ou desligar ( .F.) o m odo " dum m y" .

Retorno Descr ição

.T. Oper ação com sucesso

.F. Err o na oper ação.

D escr içã o

265

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________266

No m odo " dum m y ", o TopConnect faz apenas a aber tur a dos ar quiv os, sem ex ecut ar nenhum a função de
posicionam ento. É ut ilizado para fazer um a abert ur a m ais r ápida dos arquivos. Passando .T., ent ra em
m odo " Dum m y" , .F. volt a ao norm al.

Ex em plo

TCSetDummy(.t.)
For ni:= 1 to NroTabelas
cTabela:= "TABELA"+TRIM(STR(NI, 10, 0))
dbUseArea( .T.,"TOPCONN", cTabela, cTabela, .T., .F. )
next
TCSetDummy(.F.)
dbselectarea("TABELA1")
DBGOTOP()
.......

TCSetField
Alt er a o t ipo de um cam po.

Sin t ax e

TCSETFI ELD ( cAlias, cCam po, cTipo [ , nTam anho, nDecim ais] ) - - > nil

Ar gum ento Obrigat . Tipo Descr ição

cAlias Sim C Alias da Tabela

cCam po Sim C Nom e do Cam po

Nov o t ipo do cam po. Pode ser : 'N' ( num ér ico) , 'D' ( dat a) ou 'L'
cTipo Sim C
( lógico) .

Tam anho do cam po. Só é ut ilizado se o cam po for car acter ou


nTam anho Não N
num érico.

N
nDecim ais Não Decim ais do cam po. Só é ut ilizado se o cam po for num ér ico.

Retorno Descr ição

NI L Sem r et or no

D escr içã o

Quando se faz a aber tur a de um a tabela via TCquer y, t odos os cam pos aparecem com o t ipo Caract er . É
necessár io em seguida acer tar o t ipo do cam po, se ele não for car acter.

Ex em plo

aStru := CT2->(dbStruct())

266

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________267

cCond := ".T."
cQuery := "SELECT * FROM " + RetSqlName("CT2") + " WHERE"
cQuery := 'CT2_FILIAL = "' + xFilial("CT2") EndIf

cQuery := ChangeQuery(cQuery)
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), 'NovoCT2', .F., .T.)

For ni := 1 to Len(aStru)
If aStru[ni,2] != 'C'
TCSetField('NovoCT2', aStru[ni,1], aStru[ni,2],aStru[ni,3],aStru[ni,4])
Endif
Next

TCSpExec
Ex ecut a um a St or ed Pr ocedur e.

Sin t ax e

TCSPEXEC ( cSProc [ , xPar am 1,...,x Param N] ) - - > [ arr ay]

Ar gum ento Obrigat . Tipo Descr ição

cSPr oc Sim C Nom e da St or ed Pr ocedur e.

xPar am X Não Qualquer Par âm etr o( s) da St or ed Procedure

Retorno Descr ição

NI L Nenhum v alor é ret or nado pela St ored Pr ocedur e ou ocor reu um err o.

ar r ay Arr ay cont endo os valor es de r et or no da St ored Pr ocedur e.

D escr içã o

Ex ecut a um a St or ed Pr ocedur e, no banco de dados, com núm ero variáv el de par âm et ros.

Ex em plo

A St or ed Pr ocedur e abaixo retorna " Test e" e o parâm etr o num ér ico + 3:

Create Procedure teste1( @IN_VALUE int,


@OUT_STR char(255), @OUT_VALUE int)
WITH RECOMPILE
As
Begin
Select @OUT_STR = "Teste", @OUT_VALUE = @IN_VALUE + 3
End
GO

267

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________268

Para execut ar :

aResult := TCSPEXEC(xProcedures ('teste1'), 100 )


IF Len(aResult) = 0
conout("Erro na execução da Stored Procedure.")
Endif
Else
conout(aResult[1] + str(aResult[2]))
Endif

TCSpExist
Verifica se um a St or ed Pr ocedur e ex ist e.

Sin t ax e

TCSPEXI ST ( cStor edPr oc ) - - > Lógico

Ar gum ento Obr igat . Tipo Descrição

cStoredProc Sim C Nom e da St or ed Procedure.

Retorno Descr ição

.T. Stored Pr ocedur e exist e.

.F. Stored Pr ocedur e não existe.

D escr içã o

Verifica a existência de um a St ored Pr ocedur e no Banco de dados atual.

Ex em plo

if TCSPExist("SP000001")
cStr := "DROP PROCEDURE "+ "SP000001 "
TCSqlExec(cStr)
endif

268

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________269

TCSqlError
Retorna o últ im o err o pr oduzido em com andos SQL.

Sin t ax e

TCSQLERROR ( ) - > Caract er

Retorno Descrição

Caract er Text o com descr ição do err o. Se não houve er ro, r et or na t ext o vazio.

D escr içã o

Esta função obt ém as m ensagens de er r os em or dem inversa. Por t anto, às vezes é necessár io fazer v ár ias
cham adas a est a função para obt er t odos os er r os, caso eles sejam m últ iplos.

Ex em plo

nRet = TCSQLEXEC("INSERT INTO SALES/CUSTOMER(NAME) VALUES('JOHN DOE')")


If nRet == 0
conout("Inserção executada")
Else
conout( "Inserção com erro (s) : ")
cRet = TCSQLERROR()
Do While !Empty(cRet)
conout(cRet)
cRet = TCSQLERROR()
EndDo
EndIf

TCSrvType
Retorna o t ipo de serv idor.

Sin t ax e

TCSRVTYPE ( ) - - > Car act er

Retorno Descr ição

"" Str ing v azia se o dr iv er TopConnect não est iver inicializado.

< > "" Str ing contendo o t ipo do serv idor . Pode ser : " AS/ 400" , " WinNT" , " AI X" , " HPUX" ," Linux "

269

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________270

D escr içã o

Retorna o t ipo de serv idor onde est á o banco de dados.

Ex em plo

// É utilizado para testar se o ambiente é AS/400, pois alguns comandos são diferentes
nesta plataforma.
Ex: Chamada da funcao de reconciliação
If TcSrvType() == 'AS/400'
Processa({|lEnd| FA210Processa()})
Else
Processa({|lEnd| FA211Processa()})
Endif

TCSysExe
Ex ecut a um com ando do sist em a oper acional no ser vidor TopConnect .

Sin t ax e

TCSYSEXE ( cCom ando ) - - > Num ér ico

Ar gum ento Obrigat . Tipo Descr ição

cCom ando Sim C Com ando do Sist em a Oper acional.

Retorno Descr ição

0 Com ando ex ecut ado com sucesso.

<>0 Err o na ex ecução do com ando.

Ex em plo

// Copia arquivo no AS400


cAntigo:= "ANTIGO"
cNovo:= "NOVO"
cExpres := "CPYF FROMFILE("+AllTrim(cAntigo)+") TOFILE("
cExpres += AllTrim(cNovo)+") MBROPT(*ADD) FMTOPT(*MAP *DROP)"
if TCSysExe(cExpres) <> 0
conout("Erro na execução do comando")
endif

270

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________271

;TCUnLink
Finaliza um a conexão com o TopConnect .

Sin t ax e

TCUNLI NK( [ nNr oConexao ] ) - - > Lógico

Ar gum ento Obrigat. Tipo Descr ição

I ndica qual é o núm ero da conexão que deve ser finalizada. Se não
nNroConex ao Não N
for passada, a conexão corr ent e é finalizada.

Retorno Descr ição

.T. Execução com sucesso.

.F. Err o. Geralm ente é porque a conex ão não é válida.

D escr içã o

Finaliza a conex ão especificada com o TopConnect . Se não passar par âm et ro, finaliza a conexão corr ent e.
O núm er o da conexão é a r et or nada pela função < @> TCLink .

Ex em plo

_nCon1 : = TCLink ( " MSSQL7/ TOPSQL1", "TOPSERVER1" )

_nCon2 : = TCLink ( " MSSQL7/ TOPSQL2", "TOPSERVER2" )

TCUN LI N K( _ n Co n 1 ) / / Finaliza a conex ão _nCon1

TCVUnLock
Liber a o bloqueio vir tual de um a str ing.

Sin t ax e

271

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________272

TCVUNLOCK ( [ cPalavr a ] ) - - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

Str ing que deve ser liberada. Se não for passada, TODOS os locks
cPalav r a Não C
v irt uais dest a conexão são liberados.

Retorno Descrição

.T. A palavr a foi bloqueada.

Não foi possível desbloquear a palav ra, pr ov av elm ent e porque ela
.F.
não est ava bloqueada.

D escr içã o

Retir a o bloqueio vir tual de um a str ing ou de todas da conex ão.

Ex em plo

#ifdef TOP
If TCIsVLock()
if !TCVLock("Processo1")
messagebox("Nao foi possivel bloquear o processo1", "", 0)
return
endif

...... // Processa

TCVUnlock("Processo1")
EndIf
#endif

TCVLock
Bloqueia um a st ring at ravés de lock virt ual.

Sin t ax e

TCVLOCK ( cPalav r a ) - - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

cPalav r a Sim C Str ing que dev e ser bloqueada.

272

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________273

Retorno Descrição

.T. A palavr a foi bloqueada.

Não foi possív el bloquear a palav r a, provavelm ente por que ela j á foi
.F.
bloqueada por out ra est ação.

D escr içã o

A função TCVLOCK bloqueia um a st r ing atr av és de lock vir t ual no serv idor .

Ex em plo

#ifdef TOP
If TCIsVLock()
if !TCVLock("Processo1")
messagebox("Nao foi possivel bloquear o processo1", "", 0)
endif
EndIf
#endif

Time
Retorna a hor a do sist em a

Sin t ax e

TI ME( ) - - > cHor a

Retorno Descrição

A hor a do sist em a com o um a cadeia de car act er es no form ato


cHor a hh: m m : ss onde hh é a hor a ( 1 a 24 ) , m m os m inut os e ss os
segundos.

D escr içã o

TI ME( ) é um a função que retorna a hora do sist em a com o um a cadeia de caract eres. TIME( ) está
relacionada com SECONDS() que retor na o v alor inteiro r epresent ando o núm ero de segundos desde a
m eia- noit e.

SECONDS( ) é ger alm ent e usada no lugar de TI ME( ) par a cálculos.

Ex em plo s

Estes ex em plos m ost r am a função TIME( ) ut ilizada em conj unt o com SUBSTR( ) par a ex t rair a hor a, os
m inutos e os segundos:

cTime := TIME() // Resultado: 10:37:17


cHora := SUBSTR(cTime, 1, 2) // Resultado: 10

273

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________274

cMinutos := SUBSTR(cTime, 4, 2) // Resultado: 37


cSegundos := SUBSTR(cTime, 7, 2) // Resultado: 17

UnLock
Desbloqueia os registr os da t abela cor rent e.

Sin t ax e

UnLock [ ALL]

D escr içã o

Este com ando é utilizado par a liber ar regist r os da tabela corr ent e. Se for passada a opção " ALL" todos os
registr os da t abela cor rent e são liberados. Caso contr ário, só é liber ado o r egistr o cor r ent e.

Ex em plo

// Este exemplo mostra como liberar todos os registros bloqueados da tabela corrente.
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
UNLOCK ALL
// Este exemplo mostra uma variação do uso de UNLOCK para liberar apenas o registro
corrente.
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
DBGOTO(100)
UNLOCK // Desbloqueia o registro atual (100)

UpdateI ntName
At ualiza o nom e do índice int er no da t abela CTr ee.

Sin t ax e

UpdateIntNam e ( cNom e ) - > Lógico

Ar gum ento Obrigat . Tipo Descr ição

Especifica o nom e da tabela cuj o índice inter no deve t er o nom e


cNom e Não C
atualizado.

Retorno Descrição

Não conseguiu at ualizar o nom e do índice interno. O arquiv o não


.F.
pode ser aber to em m odo ex clusivo.

274

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________275

.T. At ualização do nom e de índice int er no ocor rida com sucesso

D escr içã o

A função Updat eI nt Nam e m uda o nom e do arquivo de índice interno de um a tabela Ct ree, est ando a
m esm a fechada. Par a t ant o ela ex ecut a os seguintes passos:

1- Abr e a t abela;

2- Ver ifica as infor m ações da tabela;

3- Fecha a tabela;

4- Recalcula o nom e do índice int er no;

5- Grava o novo nom e do índice int erno na t abela;

O nom e do índice int er no, que é arm azenado no diret ór io "\ CTREEINT\ " acim a da t abela equiv alent e, é
calculado da seguint e for m a:

x xx xx xxx eeeYYYYMMDDhhm m ss.int , sendo:

• xx xx xx xx - nom e do arquivo da t abela

• eee - ext ensão da tabela

• YYYYMMDD - data at ual

• hhm m ss - hor ár io corr ent e

Na pr óxim a v ez em que a t abela é aber t a, o ar quiv o dest e nov o índice ser á cr iado autom at icam ent e.

Ex em plo

// Este exemplo demonstra o uso típico de UpdateIntName(). Se não falhar, o nome do


índice interno será atualizado e o processo continua quando ao abrir a tabela o novo
arquivo de índice interno é criado. Se falhar, uma mensagem é apresentada.
IF !UpdateIntName("\dadosadv\sa1990.dtc")
Messagebox("Não foi possível atualizar o nome do índice interno da tabela","Erro", 0)
BREAK
ENDIF
USE "\dadosadv\sa1990.dtc" SHARED NEW

Use

275

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________276

Abre um a t abela na ár ea de t rabalho atual e os ar quiv os r elacionados a ela.

Sin t ax e

USE Tabela [ I NDEX I ndices] [ ALIAS Alias] [ EXCLUSI VE | SHARED] [ NEW] [ READONLY] [ VI A Dr iv er ] ]

Ar gum ento Obrigat . Tipo Descr ição

Tabela Nom e do ar quivo da t abela a ser abert a

Indices Nom es dos índices a ser em aber t os j unt o com a tabela

Alias Alias da tabela a ser aber t a

Dr iv er Nom e do RDD a ser utilizado na aber t ur a da t abela

Retorno Descrição

NI L Sem r etorno

D escr içã o

Este com ando associa um a t abela especificada pelo pr im eir o parâm etr o ( Tabela) à ár ea de t rabalho at ual
at r avés de um driver especificado at ravés do par âm et ro Dr iv er .

Tam bém pode abr ir os ar quiv os de índices relacionados com a t abela.

No caso do Ctr ee os ar quivos de índices perm anent es já são abert os autom at icam ente, m as nos dem ais
RDDs deve especificar os arquiv os de índices que se desej a abr ir at r avés do parâm et r o Indices.

O Alias pode ser especificado atr av és do parâm et r o Alias. Pode- se especificar se a tabela será abert a em
m odo ex clusivo ou com par t ilhado ( atr av és das opções " EXCLUSIV" e " SHARED") .

O usuário pode opt ar por abr ir a t abela em m odo som ent e leit ur a at ravés da opção " READONLY" , onde
nenhum a alt er ação será efet iv ada na t abela. A opção " NEW" deter m ina que a tabela especificada será
aber ta na próxim a área de tr abalho disponível e ser á set ada com o a área de t r abalho corr ente.

Ex em plo

// Este exemplo demonstra como utilizar o comando USE para associar uma tabela (do tipo
Ctree) a próxima área de trabalho disponível e torná-la ativa em modo compartilhado e
somente leitura:
USE Cliente VIA "CTREECDX" NEW SHARED READONLY

276

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________277

Used
Verifica se ex ist e um a tabela corr ent e

Sin t ax e

Used( ) - - > Lógico

Retorno Descrição

.F. Não ex ist e tabela corr ent e

.T. Ex ist e tabela corr ent e

D escr içã o

Esta função é ut ilizada par a v er ificar se exist e algum a tabela aber ta no m om ento.

Ex em plo

//Este exemplo utiliza a função USED()para verificar quando a tabela está ativa:
USE Clientes NEW
Result := USED() // Result: .T.
CLOSE
Result := USED() // Result: .F.

Year
Conv er te o valor da data no v alor num ér ico do ano.

Sin t ax e

YEAR( dDat a ) - - > nAno

Ar gum ento Obrigat . Tipo Descr ição

dDat a Sim D É o valor da data a ser conv er t ido.

Retorno Descrição

277

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________278

Valor num érico do ano da dat a especificada em dData incluindo os


nAno dígit os do século. O valor r et or nado não é afetado pelos v alor es
especificados pelos com andos SET DATE ou SET CENTURY.

0 Para um a dat a inv álida ou nula.

D escr içã o

YEAR( ) é um a função de conversão de dat a que ex tr ai o valor num érico do ano. YEAR( ) é m em br o de um
gr upo de funções que r etornam valor es num éricos de um a dat a. O gr upo inclui DAY() e MONTH() que
ret or nam o dia e o m ês com o v alores num ér icos.

Ex em plo s

Estes exem plos m ostr am YEAR( ) usando a data do sistem a:

dData := DATE() // Resultado: 09/20/01


dAno := YEAR(dData) // Resultado: 2001
dAno := YEAR(dData) + 11 // Resultado: 2012

Este ex em plo cr ia um a função de usuário que usa a função YEAR( ) para form at ar o valor da data:

cData := Mdy(DATE()) // Result: September 20, 1990


FUNCTION Mdy( dDate )
RETURN CMONTH(dDate) + " " + LTRIM(STR(DAY(dDate))) + "," + STR(YEAR(dDate))

ZAP
Rem ov e t odos os r egistr os da t abela.

Sin t ax e

ZAP

D escr içã o

Este com ando apaga ( fisicam ente) t odos os r egist ro da t abela cor rent e.

Ex em plo

// Este exemplo mostra como o ZAP pode se utilizado.


dbUseArea( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS", .T., .F. )
ZAP

278

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________279

Classes de I nterface Visual

tSrvObject
Classe m ãe de t odas as classes de int erface.

Características

Classe abst rat a inicial de todas as classes de int er face do Advpl. Não deve ser instanciada diret am ent e.

Propriedades

Nleft Num ér ico. Coor denada hor izont al em pix els.

Nt op Num ér ico. Coor denada ver t ical em pix els.

nWidth Num ér ico. Lar gura em pixels.

nHeight Num ér ico. Alt ur a em pixels.

cCaption Caract ere. Tít ulo ou cont eúdo do obj et o.

cTooltip Caract ere. Mensagem ex ibida quando objet o ex ibe seu t ooltip.

lShowHint Lógico. Flag que at iv a .T. ou desat iv a .F. a ex ibição do toolt ip do obj et o.

Caract ere. Mensagem ex ibida na bar r a de stat us da janela pr incipal quando o objeto ganha
cMsg
foco.

nClr Text Num ér ico. Cor do t ex to do obj et o.

nClr Pane Num ér ico. Cor do fundo do objeto.

Bloco de código. Executado quando há m ov im ent ação de foco na j anela.


bWhen
Se retornar .T. o obj et o continua habilitado, se r et or nar .F. o objeto será desabilit ado.
Bloco de código. Executado quando o cont eúdo do obj et o é m odificado e deverá ser validado.
bValid
Deve r et ornar .T. se o cont eúdo é válido e .F. se conteúdo inv álido.
blClicked Bloco de código. Ex ecut ado quando acionado click do bot ão esquer do do m ouse sobre o
obj et o.
br Click ed Bloco de código. Executado quando acionado click do bot ão dir eit o do m ouse sobr e o obj et o.
Bloco de código. Executado quando acionado duplo click do bot ão esquerdo do m ouse sobre o
blDblClick
obj et o.
oWnd Objet o. Janela onde o obj et o foi cr iado.
lVisible Booleano. Se .T. o obj eto é visív el, se .F. o objeto é invisív el.
Cargo Objet o ou v ar iáv el. Cont eúdo associado ao objeto.

279

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________280

bLost Focus Bloco de código. Executado quando obj et o perde foco.


bGot Focus Bloco de código. Executado quando obj et o ganha foco.

Métodos

SetFocus

Sintaxe

SetFocus( )

Descrição

Força o foco de entr ada de dados m udar par a o obj eto.

Retorno

NI L

Hide

Sintaxe

Hide( )

Descrição

Torna obj et o inv isível.

Retorno

NI L

Show

Sintaxe

Show( )

Descrição

Torna obj et o visív el.

Retorno

NI L

Enable

Sintaxe

Enable( )

280

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________281

Descrição

Habilit a o obj et o.

Retorno

NI L

Disable

Sintaxe

Disable( )

Descrição

Desabilit a o obj et o.

Retorno

NI L

Refresh

Sintaxe

Refr esh( )

Descrição

Força atualização ( sincronia) de pr opr iedades ent r e o pr ogram a e o Pr ot heus Rem ot e.

Classes de Janelas

tWindow
Classe de j anela principal de pr ogram a.

Hierarquia

tSrvObject -> t Window

Características

281

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________282

Classe de j anela pr incipal de pr ogr am a, dev er á ex ist ir apenas um a instância dest e obj et o na execução do
pr ogram a.

Propriedades

Binit Bloco de código. Executado quando a j anela est á sendo ex ibida.

lEscClose Lógico. Se .T. habilit a o < ESC> cancelar a ex ecução da j anela.

oCt lFocus Objeto. Obj et o contido na j anela que est á com foco de ent r ada de dados.

Métodos

New

Descrição

Método const r ut or da j anela.

Sintaxe

New( [ anTop] , [ anLeft] ,[ anBot tom ] , [ anRight ] , [ acTit le] , [ nPar 6] , [ oPar7] ,[ oPar8] ,[ oPar 9] , [ aoPar ent ] ,
[ lPar 11] , [ lPar12] , [ anClr For e] , [ anClr Back] , [ oPar15] , [ cPar 16] , [ lPar 17] , [ lPar 18] , [ lPar 19] , [ lPar 20] ,
[ alPixel] ) ;

Parâmetros

AnTop Num ér ico, opcional. Coor denada vert ical super ior em pixels ou car act er es.

AnLeft Num ér ico, opcional. Coor denada hor izontal esquerda em pix els ou car acteres.

AnBott om Num ér ico, opcional. Coor denada ver tical inferior em pixels ou car acteres.

AnRight Num ér ico, opcional. Coor denada hor izontal inferior em pix els ou car acteres.

acTit le Caract er e, opcional. Título da j anela.

nPar 6 Reserv ado.

oPar 7 Reserv ado.

oPar 8 Reserv ado.


Reserv ado.
oPar 9

AoPar ent Obj eto, opcional. Janela m ãe da j anela cor rent e.


lPar11 Reserv ado.
lPar12 Reserv ado.
anClr Fore Num ér ico, opcional. Cor de fundo da j anela.
anClr Text Num ér ico, opcional. Cor do t ext o da j anela.
oPar 15 Reserv ado.

282

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________283

cPar16 Reserv ado.


lPar17 Reserv ado.
lPar18
Reserv ado.

lPar19 Reserv ado.


lPar20 Reserv ado.
Lógico, opcional. Se .T. ( padr ão) considera coordenadas passadas em pixels, se .F.
AlPix el
consider a car acter es.

Retorno

Objeto. A j anela const r uída.

Activate

Descrição

At iva ( ex ibe) a j anela. Cham ar esse m ét odo apenas um a v ez.

Sintaxe

Activ at e( [ acShow] , [ bPar2] , [ bPar 3] , [ bPar 4] , [ bPar 5] , [ bPar6] , [ abInit ] , [ bPar 8] , [ bPar 9] , [ bPar 10] ,
[ bPar11] , [ bPar 12] ,[ bPar13] , [ bPar 14] , [ bPar15] , [ abValid] , [ bPar 17] , [ bPar18] ) .

Parâmetros

Caract er , opcional. “ ICONI ZED” par a j anela iconizada ou “ MAXI MIZ ED” para janela
AcShow
m ax im izada.

bPar2 Reserv ado.

bPar3 Reserv ado.

bPar4 Reserv ado.

bPar5 Reserv ado.

bPar6
Reserv ado.

AbI nit Bloco de código. Execut ado quando janela está sendo exibida.
bPar8 Reserv ado.
bPar9 Reserv ado.
bPar10 Reserv ado.
bPar11 Reserv ado.
bPar12 Reserv ado.
bPar13 Reserv ado.
bPar14 Reserv ado.
bPar15 Reserv ado.
Bloco de código. Ex ecut ado quando a j anela for solicit ada de fechar . Dever á retor nar .T.
AbValid se o conteúdo da j anela for v álido, ou .F. se não. Se o bloco ret or nar .F. a j anela não
fechar á.

283

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________284

bPar17 Reserv ado.


bPar18 Reserv ado.

Retorno

NI L

End

Descrição

Solicit a encer ram ent o da j anela.

Sintaxe

End( )

Retorno

Lógico. .T. se encerr ou a janela e .F. se não.

Center

Descrição

Cent raliza a j anela.

Sintaxe

Cent er ( )

Retorno

NI L

Exemplo

#include “protheus.ch”

USER FUNCTION MyProg()

Local oWindow
Local abInit:= {||msgstop(“ativando!”)}
Local abValid:= {|| msgstop(“encerrando!”),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, “Meu programa”;
,,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. )
oWindow:Activate(“MAXIMIZED”,,,,,,abInit,,,,,,,,,abValid,,)

Return nil

TDialog

284

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________285

Classe de j anela de diálogo.

Hierarquia

tSrvObject -> tWindow -> t Dialog

Características

Classe de j anela de diálogo de ent r ada de dados, uso r eser vado, r ecom enda- se utilizar a classe MSDialog
que é her dada desta classe.

Propriedades

Vide classes ancestr ais.

Métodos

New

Descrição

Método const r ut or da classe.

Sintaxe

New( [ anTop] , [ anLeft] , [ anBot tom ] , [ anRight] , [ acCaption] , [ cPar 6] , [ nPar7] , [ lPar 8] , [ nPar 9] ,
[ anClr Text ] , [ anClr Back ] , [ oPar 12] , [ aoWnd] , [ alPixel] , [ oPar 15] , [ oPar16] , [ nPar17] , [ anWidt h] ,
[ anHeight] )

Parâmetros

AnTop Num ér ico, opcional. Coor denada ver tical super ior em pix els ou caract er es.

anLeft Num ér ico, opcional. Coor denada hor izontal esquerda em pix els ou car acteres.

anBot om Num ér ico, opcional. Coor denada vert ical inferior em pix els ou caract eres.

anRight Num ér ico, opcional. Coor denada hor izontal direit a em pixels ou car act er es.

acCaption Caract er e, opcional. Título da j anela.

cPar6 Reserv ado.

nPar7 Reserv ado.

lPar 8 Reserv ado.

nPar9 Reserv ado.

anClr Text Num ér ico,opcional. Cor do text o.

285

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________286

anClr Back Num ér ico,opcional. Cor de fundo.

oPar12 Reserv ado.

Obj eto, opcional. Janela m ãe da j anela a ser cr iada, padrão é a j anela principal do
AoWnd
pr ogram a.

Lógico, opcional. Se .T. considera as coordenadas passadas em pixels, se .F. consider a


AlPixel
caract er es.

oPar15 Reserv ado.

oPar16 Reserv ado.

nPar17 Reserv ado.

anWidt h Num ér ico, opcional. Largur a da janela em pix els.

anHeight Num ér ico, opcional. Altura da j anela em pixels.

Retorno

O Diálogo criado.

Activate

Descrição

At iva ( ex ibe) o diálogo. Cham ar som ent e um a vez est e m étodo.

Sintaxe

Activ at e( [ bPar1] , [ bPar2] , [ bPar3] , [ alCent er ed] , [ abValid] , [ lPar 6] , [ abInit] , [ bPar 8] , [ bPar 9] )

Parâmetros

bPar1 Reser vado.


bPar2
Reser vado.

bPar3 Reser vado.


alCenter ed Lógico, opcional. Se .T. ex ibe a j anela centr alizada, .F. é padr ão.
Bloco de código, opcional. Dev e retornar .T. se cont eúdo do diálogo é válido, se
AbValid
r etornar .F. o diálogo não fechará quando solicitada de encerr ar.
lPar 6 Reser vado.
AbI nit Bloco de código, opcional. Ex ecut ado quando o diálogo inicia exibição.
bPar8 Reser vado.
bPar9 Reser vado.

Retorno

NI L.

286

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________287

End

Descrição

Encerr a ( fecha) o diálogo.

Sintaxe

End( )

Retorno

Lógico .T. se o diálogo foi encer rado.

MSDialog
Classe de diálogo de ent r ada de dados.

Hierarquia

tSrvObject -> tWindow -> tDialog -> MSDialog

Características

MSDialog dev e ser ut ilizada com o padrão de j anela par a entr ada de dados. MSDialog é um t ipo de janela
diálogo m odal, ist o é, não per m it e que out r a janela at iva r eceba dados enquanto esta est iver ativa.

Propriedades

Vide classes ancestr ais.

Métodos

New

Descrição

Método const r ut or da classe.

Sintaxe

New( [ anTop] , [ anLeft ] , [ anBott om ] , [ anRight ] , [ acCaption] , [ cPar 6] , [ nPar 7] , [ lPar8] , [ nPar 9] ,
[ anClr Text ] , [ anClrBack] , [ oPar 12] , [ aoWnd] , [ alPix el] , [ oPar 15] , [ oPar16] , [ lPar 17] )

Parâmetros

287

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________288

AnTop Num ér ico, opcional. Coor denada v er tical superior em pix els ou caract eres.

anLeft Num ér ico, opcional. Coor denada hor izont al esquer da em pixels ou car act er es.

anBot tom Num ér ico, opcional. Coor denada v er tical infer ior em pixels ou car act er es.

anRight Num ér ico, opcional Coor denada hor izont al dir eit a em pix els ou caract eres.

acCaption Caract ere, opcional. Tít ulo do diálogo.

cPar 6 Reserv ado.

nPar7 Reserv ado.

lPar 8 Reserv ado.

nPar9 Reserv ado.

anClr Text Cor do text o.

anClr Back
Cor do fundo.

oPar12 Reserv ado.


AoWnd
Objeto, opcional. Janela pai do diálogo, ger alm ent e a j anela pr incipal do pr ogram a.

Se .T. consider a as coor denadas infor m adas em pix els, se .F. considera as coor denadas
AlPixel
em car act er es.
oPar15 Reserv ado.
oPar16 Reserv ado.
lPar 17 Reserv ado.

Retorno

O diálogo const r uído.

Exemplo

#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

288

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________289

Classes Auxiliares

tFont
Classe que encapsula fonte de edição.

Hierarquia

tFont Abs -> t Font

Descrição

Ut ilize objet o tFont par a m odificar a font e padr ão de contr oles visuais.

Métodos

New

Descrição

Constr ut or do obj et o.

Sintaxe

New( [ acNam e] , [ nPar 2] , [ anHeight ] , [ lPar 4] , [ alBold] , [ nPar 6] , [ lPar7] , [ nPar8] , [ alIt alic] , [ alUnder line] )

Parâmetros

acNam e Car act er e, opcional. Nom e da fonte, o padrão é “ Ar ial” .

nPar2 Reser vado.

anHeight Num ér ico, opcional. Tam anho da font e. O padr ão é - 11.

lPar 4 Reser vado.

AlBold Lógico, opcional. Se .T. o est ilo da fonte será negrit o.

nPar6 Reser vado.

lPar 7 Reser vado.

nPar8 Reser vado.

alI t alic Lógico, opcional. Se .T. o est ilo da fonte será it álico.

289

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________290

alUnder line Lógico, opcional. Se .T. o est ilo da fonte será sublinhado.

Retorno

O objet o cr iado.

Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oSay, oFont:= TFont():New(“Courier New”,,-14,.T.)


DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE “My dialog” PIXEL
// apresenta o tSay com a fonte Courier New //
oSay:= tSay():New(10,10,{||”para exibir”},oDlg,,oFont,,;
,,.T.,CLR_WHITE,CLR_RED,100,20)
oSay:lTransparent:= .T.
ACTIVATE MSDIALOG oDlg CENTERED

Return

Classes de Componentes

tControl
Classe abst rat a m ãe de t odos os contr oles edit áveis.

Hierarquia

tSrvObject -> t Contr ol

Características

tContr ol é a classe com um entr e t odos os com ponentes visuais edit áv eis.

Propriedades

Num érico. Alinham ento do cont r ole no espaço disponibilizado pelo seu obj et o parent e. 0
Align = Nenhum ( padr ão) , 1= no t opo, 2 = no r odapé, 3= a esquer da, 4 = a direit a e 5 = em
t odo o par ente.

290

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________291

lModified Lógico. Se .T. indica que o conteúdo da v ar iáv el associada ao cont role foi m odificado.

Lógico. Se .T. o conteúdo da v ar iável associada ao cont r ole perm anecer á apenas par a
lReadOnly
leit ur a.

hPar ent Num érico. Handle ( identificador) do obj et o sobr e o qual o contr ole foi criado.

Bloco de código. Executado quando o estado ou cont eúdo do cont r ole é m odificado pela
bChange
ação sobr e o contr ole.

Métodos

SetFocus

Descrição

Força m udança do foco de entr ada de dados para o cont role.

Sintaxe

SetFocus( )

Retorno

NI L

Classes de Componentes Visuais

tButton
Classe de bot ão.

Hierarquia

tSrvObject -> tControl -> t Butt on

Descrição

Ut ilize a classe t But t on par a criar um contr ole v isual do t ipo bot ão.

Propriedades

291

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________292

lPr ocessing Lógico. Se .T. indica o botão est á efet uando um a ação.

bAct ion Bloco de código. Executado quando o botão é pressionado.

Metodos

New

Descrição

Constr ut or da classe.

Sintaxe

New( [ anRow] , [ anCol] , [ acCapt ion] , [ aoWnd] , [ abAction] , [ anWidt h] , [ anHeight ] , [ nPar 8] , [ aoFont ] ,
[ lPar 10] , [ alPixel] ,[ lPar 12] ,[ cPar13] , [ lPar14] , [ abWhen] , [ bPar 16] , [ lPar17] )

Parâmetros

anRow Num ér ico, opcional. Coor denada v er tical em pix els ou carater es.

anCol Num ér ico, opcional. Coor denada hor izont al em pix els ou caract er es.

acCaption Caract ere, opcional. Tit ulo do botão.

aoWnd Objet o, opcional. Janela ou cont role onde o bot ão deverá ser cr iado.

Bloco de código, opcional. Bloco que deverá ser acionado quando o botão for
abAct ion
pr essionado.

anWidth Num ér ico, opcional. Largur a do botão em pixels.

anHeight Num ér ico, opcional. Alt ur a do bot ão em pix els.

nPar8 Reserv ado.

Objet o, opcional. Objet o tipo tFont com pr opriedades da fonte ut ilizada par a o t ít ulo do
aoFont
bot ão.
Reserv ado.
lPar 10

Lógico, opcional. Se .T. consider a as coor denadas passadas em pixels, se .F. ( padr ão)
alPixel
considera em caract eres.
lPar 12 Reserv ado.
cPar13 Reserv ado.
lPar 14 Reserv ado.
Bloco de código, opcional. Executado quando m udança de foco de ent r ada de dados
abWhen est á sendo efet uada na j anela onde o cont role foi criado. O bloco dev e retor nar .T. se o
cont r ole deve perm anecer habilitado ou .F. se não.
bPar16 Reserv ado.
lPar 17 Reserv ado.

292

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________293

Exemplo
#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

tCheckBox
Classe de caix a checkbox .

Hierarquia

tSrvObject -> tControl -> t CheckBox

Descrição

Ut ilize a classe t Checkbox quando desej ar cr iar um cont r ole que possua dois estados .T. ou .F..

Métodos

New

Descrição

Constr ut or da classe

Sintaxe

New( [ anRow] , [ anCol] , [ acCapt ion] , [ abSetGet ] , [ aoWnd] , [ anWidt h] , [ anHeight ] , [ nPar 8] , [ abClick ] ,
[ aoFont] , [ abValid] , [ anClr For e] , [ anClrBack] , [ lPar 14] , [ alPixel] , [ cPar16] , [ lPar17] , [ abWhen] )

Parâmetros

AnRow Num ér ico, opcional. Coor denada v er tical em pix els ou carateres.

anCol Num ér ico, opcional. Coor denada hor izontal em pixels ou car act er es.

293

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________294

acCaption Caract er e, opcional. Text o ex ibido pelo contr ole.

Bloco de código, opcional. Bloco de código no for m at o { | u| if( Pcount ( ) > 0, < var> : = u,
abSet Get < v ar > ) } que o cont role ut iliza para atualizar a v ar iável < var > . < var> dev e ser t ipo
lógico, se < var> = .T. então o cont r ole aparecerá checado.

aoWnd Objeto, opcional. Janela ou cont role onde o contr ole dev er á ser cr iado.

anWidth Num ér ico, opcional. Largur a do cont role em pix els.

anHeight Num ér ico, opcional. Altur a do contr ole em pixels.

nPar8 Reserv ado.

Bloco de código, opcional. Execut ado quando o contr ole click do bot ão esquer do do
abClick
m ouse é acionado sobr e o cont r ole.

Objeto, opcional. Objeto t ipo t Font com pr opriedades da fonte utilizada par a o t ex to do
aoFont
cont r ole.

Bloco de código, opcional. Ex ecut ado quando o conteúdo do cont role deve ser v alidado,
abValid
deve r et ornar .T. se o cont eúdo for válido e .F. quando o conteúdo for inválido.

anClr For e Num ér ico, opcional. Cor de fundo do contr ole.

anClr Back Num ér ico, opcional. Cor do t ext o do cont role.

lPar 14 Reserv ado.

Lógico, opcional. Se .T. as coor denadas infor m adas são em pix els, se .F. são em
alPixel
caract eres.

cPar16 Reserv ado.

lPar 17 Reserv ado.

Bloco de código, opcional. Ex ecut ado quando m udança de foco de ent rada de dados
abWhen está sendo efet uada na j anela onde o cont r ole foi cr iado. O bloco deve r et or nar .T. se o
cont r ole deve per m anecer habilit ado ou .F. se não.

Retorno

O objet o constr uído.

Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oButton, oCheck, lCheck:=.F.


DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu programa”
oCheck:= tCheckBox():New(10,10,”funcionou?”,;
{|u|if( pcount()>0,lCheck:=u,lCheck)};
,oDlg,100,20,,,,,,,,.T.)
oButton:=tButton():New(30,10,”fechar”,oDlg,{||oDlg:End()},;

294

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________295

100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
If lCheck
MsgStop( “Funcionou!” )
endif

Return nil

tComboBox
Classe de com bobox .

Hierarquia

tSrvObject -> tControl -> t Com boBox

Descrição

Ut ilize a classe tCom boBox par a cr ia um a ent rada de dados com m últ ipla escolha com it em definido em
um a list a ver tical, acionada por F4 ou pelo botão esquer do localizado na part e dir eita do cont r ole. A
variável associada ao contr ole t er á o v alor de um dos it ens selecionados ou no caso de um a lista
indexada, o v alor de seu índice.

Propriedades

Arr ay. List a de itens, car acteres, a ser em exibidos. Pode t er os seguintes for m at os: a)
aI tem s Seqüencial, ex em plo: { “ it em 1” ,” it em 2” ,...,” item N” } ou b) I ndex ada, exem plo:
{ “ a= it em 1” ,” b= it em 2” , ..., “ n= it em N” } .

nAt Num érico. Posição do it em selecionado.

Métodos

New

Descrição

Constr ut or da classe.

Sintaxe

New( [ anRow] , [ anCol] , [ abSet Get ] , [ anI t em s] , [ anWidt h] , [ anHeight ] , [ aoWnd] , [ nPar8] , [ abChange] ,
[ abValid] , [ anClrTex t] , [ anClr Back] , [ alPix el] , [ aoFont ] , [ cPar 15] , [ lPar 16] , [ abWhen] , [ lPar18] , [ aPar 19] ,
[ bPar20] , [ cPar 21] , [ acReadVar ] )

Parâmetros

295

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________296

AnRow Num ér ico, opcional. Coordenada vert ical em pixels ou car act er es.

anCol Num ér ico, opcional. Coordenada horizontal em pixels ou car act er es.

Bloco de código, opcional. Bloco de código no for m at o { | u| if( Pcount ( ) > 0, < var> : =
u, < v ar > ) } que o cont r ole ut iliza para at ualizar a v ar iável < var > . < var> dev e ser
abSet Get tipo car act er . Se a lista for seqüencial, o cont r ole at ualizar á < v ar > com o cont eúdo do
it em selecionado, se a list a for index ada, < var> ser á at ualizada com o valor do índice
do it em selecionado.

Ar ray, opcional. Lista de it em s, caract er es, a ser em ex ibidos. Pode ter os seguintes
anI tem s form at os: a) Seqüencial, ex em plo: { “ it em 1” ,” it em 2” ,...,” it em N” } ou b) Indexada,
exem plo: { “ a= item 1” ,” b= item 2” , ..., “ n= it em N” } .

anWidth Num ér ico, opcional. Lar gur a do contr ole em pixels.

anHeight Num ér ico, opcional. Altura do contr ole em pixels.

aoWnd Obj et o, opcional. Janela ou contr ole onde o cont r ole ser á criado.

nPar8 Reser vado.

abChange Bloco de código, opcional. Ex ecut ado quando o contr ole m odifica o it em selecionado.
Bloco de código, opcional. Ex ecut ado quando o cont eúdo do cont r ole deve ser
validado, deve r et or nar .T. se o cont eúdo for v álido e .F. quando o conteúdo for
abValid
inválido.

anClr Back Num ér ico, opcional. Cor de fundo do contr ole.


anClr Text Num ér ico, opcional. Cor do t ex to do contr ole.
Lógico, opcional. Se .T. as coordenadas infor m adas são em pixels, se .F. são em
alPixel
caract er es.
Obj et o, opcional. Obj et o tipo tFont ut ilizado par a definir as car acterísticas da font e
aoFont
ut ilizada par a exibir o cont eúdo do cont r ole.
cPar15 Reser vado.
lPar 16 Reser vado.
Bloco de código, opcional. Execut ado quando m udança de foco de ent r ada de dados
abWhen está sendo efet uada na janela onde o cont r ole foi cr iado. O bloco dev e r et or nar .T. se
o cont role deve per m anecer habilit ado ou .F. se não.
lPar 18 Reser vado.
aPar19
Reser vado.

bPar20 Reser vado.


cPar21 Reser vado.
Car act er e, opcional. Nom e da variáv el que o cont role deverá m anipular , dever á ser a
acReadVar m esm a variáv el inform ada no par âm et ro abSet Get , e será o r et or no da função
ReadVar ( ) .

Retorno

O objet o cr iado.

Select

Descrição

296

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________297

Muda o it em selecionado no com bobox .

Sintaxe

Select ( [ anI tem ] )

Parâmetros

anI tem Num érico, opcional. Posição do it em a ser selecionado.

Retorno

NI L

Exemplo
#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
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( “O valor é ”+cCombo )

Return nil

tGet
Classe de contr ole par a ent rada de dados editáveis.

Hierarquia

tSrvObject -> tControl -> t Get

Descrição

Use tGet par a criar um contr ole que arm azene ou alt er e o conteúdo de um a v ar iável atr av és de digitação.
O cont eúdo da v ar iável só é m odicado quando o contr ole per de o foco de edição para outr o cont r ole.

Propriedades

297

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________298

Lógico. Se .T. o cont role se com port a com o ent rada de dados de senha, exibindo
lPassword
asteriscos ‘* ’ par a esconder o cont eúdo digit ado.

Pict ur e Caract er e. Máscar a de form at ação do cont eúdo a ser ex ibido.

Métodos

New

Descrição

Método const r ut or do cont r ole.

Sintaxe

New( [ anRow] , [ anCol] , [ abSetGet ] , [ aoWnd] , [ anWidth] , [ anHeight ] , [ acPict ] , [ abValid] , [ anClrFor e] ,
[ anClr Back ] , [ aoFont] , [ lPar 12] , [ oPar 13] , [ alPixel] , [ cPar 15] , [ lPar 16] , [ abWhen] , [ lPar18] , [ lPar 19] ,
[ abChange] , [ alReadOnly] , [ alPassw or d] , [ cPar 23] , [ acReadVar ] , [ cPar25] , [ lPar 26] , [ nPar27] , [ lPar28] )

Parâmetros

anRow Num érico, opcional. Coor denada v er t ical em pix els ou car acteres.

anCol Num érico, opcional. Coor denada hor izont al em pix els ou caracteres.

Bloco de código, opcional. Bloco de código no for m at o { | u| if( Pcount ( ) > 0, < var> : =
abSet Get u, < v ar > ) } que o cont role ut iliza para atualizar a v ar iável < var > . < var > dev e ser
t ipo car acter , num ér ico ou dat a.

aoWnd Obj et o, opcional. Janela ou cont r ole onde o cont role será cr iado.

anWidt h Num érico, opcional. Lar gura do cont r ole em pixels.

anHeight Num érico, opcional. Alt ur a do cont role em pix els.

acPict Car actere, opcional. Máscar a de form at ação do cont eúdo a ser exibido.

Bloco de código, opcional. Ex ecut ado quando o cont eúdo do cont r ole deve ser
abValid v alidado, dev e r et or nar .T. se o cont eúdo for v álido e .F. quando o conteúdo for
inv álido.

anClr For e Num érico, opcional. Cor de fundo do cont role.


Num érico, opcional. Cor do t ext o do cont r ole.
anClr Back

Obj et o, opcional. Objeto t ipo t Font ut ilizado par a definir as car acter ísticas da font e
aoFont
utilizada par a ex ibir o conteúdo do cont role.
lPar 12 Reser vado.
oPar13 Reser vado.
Lógico, opcional. Se .T. as coordenadas infor m adas são em pixels, se .F. são em
alPixel
car acter es.
cPar15 Reser vado.
lPar 16 Reser vado.

298

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________299

Bloco de código, opcional. Ex ecut ado quando m udança de foco de ent r ada de dados
abWhen est á sendo efetuada na j anela onde o cont r ole foi cr iado. O bloco dev e r et or nar .T. se
o contr ole dev e per m anecer habilit ado ou .F. se não.
lPar 18 Reser vado.
lPar 19
Reser vado.

Bloco de código, opcional. Ex ecut ado quando o contr ole m odifica o v alor da var iável
abChange
associada.
alReadOnly Lógico, opcional. Se .T. o cont role não poderá ser editado.
Lógico, opcional. Se .T. o contr ole exibir á asteriscos “ * ” no lugar dos car acteres
alPassw or d
exibidos pelo contr ole par a sim ular ent r ada de senha.
cPar23 Reser vado.
Car actere, opcional. Nom e da v ar iáv el que o cont role dever á m anipular , dever á ser a
acReadVar m esm a v ar iáv el inform ada no par âm et ro abSetGet , e será o r et or no da função
ReadVar( ) .
cPar25 Reser vado.
lPar 26 Reser vado.
nPar27 Reser vado.
lPar 18 Reser vado.

Retorno

O cont r ole const ruído.

Exemplo
#include “protheus.ch”

User Function TesteGet()

Local oDlg, oGet1, oButton, 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”)
/* Tem o mesmo efeito
@ 10,10 MSGET oGet1 VAR nGet1 SIZE 100,20 OF oDlg PIXEL PICTURE “@E 999,999.99” VALID
nGet1>1000.00
*/
// Botão para fechar a janela
@ 40,10 BUTTON oButton PROMPT “Fechar” OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( “O valor é ”+Transform(nGet1,”@E 999,999.00”) )

Return nil

tGroup
Classe de painel de gr upo de cont roles.

Hierarquia

299

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________300

tSrvObject -> tControl -> t Gr oup

Descrição

Ut ilize a classe tGroup par a cr iar um painel onde cont r oles visuais podem ser agr upados ou classificados.
É cr iada um a borda com tít ulo em v olt a dos contr oles agrupados.

Métodos

New

Descrição

Constr ut or da classe.

Sintaxe

New( [ anTop] , [ anLeft ] , [ anBot t om ] , [ anRight] , [ acCapt ion] , [ aoWnd] , [ anClr Text ] , [ anClr Pane] , [ alPixel] ,
[ lPar 10] )

Parâmetros

anTop Num ér ico, opcional. Coor denada ver tical super ior em pix els ou caract er es.

anLeft Num ér ico, opcional. Coor denada hor izontal esquerda em pix els ou car acteres.

anBot tom Num ér ico, opcional. Coor denada ver tical inferior em pix els ou car acteres.

anRight Num ér ico, opcional. Coor denada hor izontal direit a em pixels ou car act er es.

acCaption Caract er e, opcional. Título do grupo.

aoWnd Obj eto, opcional. Janela ou cont role onde o contr ole ser á criado.

anClr Text Num ér ico, opcional. Cor do t ext o.

anClr Pane Num ér ico, opcional. Cor do fundo.

Lógico, opcional. Se .T. as coordenadas inform adas são em pixels, se .F. são em
alPixel
caract er es.

lPar 10 Reserv ado.

Retorno

O objet o cr iado.

Exemplo
#include “protheus.ch”

User function teste()

300

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________301

Local oDlg, oGroup, oGet1, oGet2, cGet1:=Space(10),;


cGet2:= Space(10)
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE “My test” PIXEL
oGroup:= tGroup():New(10,10,200,200,”grupo de gets”,oDlg,,,.T.)
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
@ 30,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oGroup PIXEL
ACTIVATE MSDIALOG oDlg CENTERED

Return nil

tListbox
Classe de list a de item s.

Hierarquia

tSrvObject -> tControl -> t Listbox

Descrição

Ut ilize a classe tList box para criar um a j anela com it ens selecionáveis e bar r a de r olagem . Ao selecionar
um item , um a v ar iáv el é at ualizada com o cont eúdo do item selecionado.

Parâmetros

NAt Num ér ico. Indica ou m odifica o it em selecionado.

aIt em s Ar ray de it em s caract er es. List a do itens selecionáv eis.

Métodos

New

Descrição

Cont rutor da classe

Sintaxe

New( [ anRow] , [ anCol] , [ abSet Get] , [ aaIt em s] , [ anWidth] , [ anHeigt h] , [ abChange] , [ aoWnd] , [ abValid] ,
[ anClr For e] , [ anClr Back ] , [ alPix el] , [ lPar 13] , [ abLDBLClick] , [ aoFont] , [ cPar 16] , [ lPar 17] , [ abWhen] ,
[ aPar19] , [ bPar 20] , [ lPar 21] , [ lPar22] , [ abRight Click] )

Parâmetros

anRow Num ér ico, opcional. Coor denada ver tical em pixels ou caract er es.

301

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________302

anCol Num ér ico, opcional. Coor denada horizontal em pixels ou car act er es.

Bloco de código, opcional. Bloco de código no for m at o { | u| if( Pcount( ) > 0, < var> : =
abSet Get u, < var> ) } que o cont role ut iliza para atualizar a v ar iável < v ar > . < var> dev e ser
tipo caract er ou num ér ica.

aaI tem s Ar ray de it em s caract eres, opcional. List a de it em s selecionáveis.

anWidt h Num ér ico, opcional. Largur a do cont role em pix els.

anHeight Num ér ico, opcional. Altura do contr ole em pixels.

abChange Bloco de código, opcional. Ex ecut ado quando o it em selecionado é alt er ado.

aoWnd Obj eto, opcional. Janela ou contr ole onde o contr ole ser á criado.

Bloco de código, opcional. Executado quando o conteúdo do cont role dev e ser
abValid validado, deve r etornar .T. se o conteúdo for válido e .F. quando o conteúdo for
inválido.
Num ér ico, opcional. Cor de fundo do contr ole.
anClr For e

anClr Back Num ér ico, opcional. Cor do t ex t o do contr ole.


Lógico, opcional. Se .T. as coor denadas infor m adas são em pix els, se .F. são em
alPixel
caract er es.
lPar 13 Reserv ado.
Bloco de código, opcional. Ex ecut ado quando acionado duplo click do bot ão esquer do
abLDBLClick
do m ouse sobr e o cont role.
Obj eto, opcional. Obj et o t ipo t Font utilizado par a definir as car acterísticas da font e
aoFont
ut ilizada para exibir o cont eúdo do cont r ole.
cPar16 Reserv ado.
lPar 17 Reserv ado.
Bloco de código, opcional. Execut ado quando m udança de foco de ent rada de dados
abWhen está sendo efet uada na j anela onde o cont r ole foi cr iado. O bloco dev e retor nar .T.
se o cont role deve per m anecer habilit ado ou .F. se não.
aPar19
Reserv ado.

bPar20 Reserv ado.


lPar 21 Reserv ado.
lPar 22 Reserv ado.
Bloco de código, opcional. Ex ecut ado quando acionado click do bot ão dir eit o do
abRight Click
m ouse sobr e o cont r ole.

Select

Descrição

Força a seleção de um it em .

Sintaxe

Select ( [ nI t em ] )

Parâmetros

302

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________303

nIt em Num ér ico, opcional. It em a ser selecionado.

Retorno

NI L

Add

Descrição

Inser e ou adiciona nov o item .

Sintaxe

Add( cText , nPos )

Parâmetros

cText Caract ere, obrigat ór io. Tex t o do it em .


Num ér ico, obr igat ór io. Se 0 ou m aior que o núm er o de it ens, inser e o item no final da lista.
nPos Se v alor entr e 1 e núm ero de it ens, insere o it em na posição infor m ada, em pur r ando o it em
anter ior par a baix o.

Retorno

NI L

Modify

Descrição

Modifica o t ex to de um it em .

Sintaxe

Modify ( cText , nPos )

Parâmetros

cText Caract ere, obr igat ór io. Tex t o novo.


Num ér ico, obr igat ór io. Posição a ser m odificada deve ser m aior que 0 e m enor ou igual que
nPos
o núm ero de itens.

Retorno

NI L

Del

Descrição

303

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________304

Apaga um item .

Sintaxe

Del( nPos )

Parâmetros

Num ér ico, obr igat ório. Posição a ser excluida, deve ser m aior que 0 e m enor ou igual que o
nPos
núm ero de itens.

Retorno

NI L

Len

Descrição

Retorna o núm ero de itens.

Sintaxe

Len( )

Retorno

Num ér ico. Núm er o de it ens.

Reset

Descrição

Apaga todos os it ens.

Sintaxe

Reset( )

Retorno

NI L

Exemplo
#include “protheus.ch”

User Funcion Teste()


Local oDlg, oList, nList:= 1, 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)};

304

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________305

,aItems,100,100,,oDlg,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED

Return nil

tMeter
Classe de r égua de pr ocessam ent o.

Hierarquia

tSrvObject -> tControl -> t Meter

Descrição

Ut ilize a classe tMet er par a cr iar um cont role que ex ibe um a r égua ( gauge) de pr ocessam ent o,
descrevendo o andam ent o de um pr ocesso at raves da exibição de um a barr a hor izont al.

Parâmetros

nTotal Num érico. Núm er o tot al de passos at é o preenchim ento da r égua de pr ocesso.

lPer cent age Lógico. Se .T. considera o passo de m ov im ent ação em por cent agem .

nClrBar Num érico. Cor da bar r a de andam ent o.

Métodos

New

Descrição

Cont rutor da classe.

Sintaxe

New( [ anRow] , [ anCol] , [ abSet Get ] , [ anTot al] , [ aoWnd] , [ anWidt h] , [ anHeight ] , [ lPar 8] , [ alPixel] ,
[ oPar10] , [ cPar 11] , [ alNoPer c] , [ anClr Pane] , [ nPar14] , [ anClrBar ] , [ nPar16] , [ lPar17] )

Parâmetros

anRow Num ér ico, opcional. Coor denada ver tical em pixels ou caract er es.

anCol Num ér ico, opcional. Coor denada hor izontal em pixels ou car act er es.

305

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________306

Bloco de código, opcional. Bloco de código no for m ato { | u| if( Pcount ( ) > 0, < var> : =
abSet Get u, < var> ) } que o contr ole utiliza par a at ualizar a v ar iáv el < var> . < var > dev e ser
tipo num ér ico.

Num ér ico, opcional. Num er o total de passos até o pr eenchim ent o da régua de
anTot al
pr ocesso.

aoWnd Obj eto, opcional. Janela ou cont role onde o contr ole ser a criado.

anWidt h Num ér ico, opcional. Largur a do cont role em pix els.

anHeight Num ér ico, opcional. Altura do contr ole em pixels.

lPar 8 Reserv ado.


Lógico, opcional. Se .T. as coordenadas infor m adas são em pixels, se .F. são em
alPixel caract er es.

oPar10 Reserv ado.


cPar11 Reserv ado.
Lógico, opcional. Se .T. ( padr ão) não considera os passos de at ualização em
alNoPer c
porcentagem .
anClr Pane Num ér ico, opcional. Cor de fundo do contr ole.
nPar14 Reserv ado.
anClr Bar Num ér ico, opcional. Cor da bar r a de andam ent o.
nPar16 Reserv ado.
lPar 17 Reserv ado.

Retorno

O objet o constr uído.

Set

Descrição

At ualiza a posição da r égua de pr ocessam ent o.

Sintaxe

Set( [ nVal] )

Parâmetros

nVal Num ér ico, opcional. Novo v alor da posição da régua de processam ento.

Retorno

NI L

Exemplo

306

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________307

#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”
// cria a régua
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)};
,100,oDlg,100,20,,.T.)
// 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.
// inicia a régua
oMeter:Set(0)
While .T. .and. !lStop
// pára 1 segundo
Sleep(1000)
// atualiza a pintura da janela, processa mensagens do windows
ProcessMessages()
// pega valor corrente da régua
nCurrent:= Eval(oMeter:bSetGet)
nCurrent+=10
// atualiza régua
oMeter:Set(nCurrent)
if nCurrent==oMeter:nTotal
Return
endif
Enddo
lRunning:= .F.
lStop:= .F.

Return

tMultiget
Classe de cam po Mem o de edição.

Hierarquia

tSrvObject -> tControl -> t Mult iGet

Descrição

Ut ilize a classe t Mult iget para cr iar contr ole de edição de t ext o de m últiplas linhas.

Propriedades

307

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________308

lWor dWrap Lógico. Se .T., faz quebr a aut om ática de linhas.

Métodos

New

Descrição

Constr ut or da classe.

Sintaxe

New( [ anRow] , [ anCol] , [ abSet Get] , [ aoWnd] , [ anWidt h] , [ anHeight] , [ aoFont ] , [ alHScroll] , [ anClrFor e] ,
[ anClr Back ] , [ oPar 11] , [ alPix el] , [ cPar 13] , [ lPar 14] , [ abWhen] , [ lPar 16] , [ lPar 17] , [ alReadOnly ] ,
[ abValid] , [ bPar 20] , [ lPar21] , [ alNoBorder ] , [ alNoVScr oll] )

Parâmetros

anRow Num ér ico, opcional. Coor denada v er t ical em pix els ou car acteres.

AnCol Num ér ico, opcional. Coor denada hor izont al em pix els ou caract eres.

Bloco de código, opcional. Bloco de código no for m at o { | u| if( Pcount ( ) > 0, < var> : =
abSet Get u, < v ar > ) } que o cont role ut iliza para atualizar a v ar iável < var> . < var > dev e ser
t ipo car acter .

aoWnd Obj et o, opcional. Janela ou cont r ole onde o cont role será cr iado.

anWidt h Num ér ico, opcional. Lar gur a do cont r ole em pixels.

anHeight Num ér ico, opcional. Alt ur a do cont role em pix els.

Obj et o, opcional. Objeto t ipo t Font ut ilizado par a definir as car acter ísticas da font e
aoFont
utilizada par a ex ibir o conteúdo do cont role.

alHScroll Lógico, opcional. Se .T., habilita barr a de rolagem horizont al.

anClr Fore Num ér ico, opcional. Cor de fundo do cont role.

anClr Back Num ér ico, opcional. Cor do text o do cont r ole.


Reser vado.
oPar11

Lógico, opcional. Se .T. as coor denadas infor m adas são em pixels, se .F. são em
alPixel
car acteres.
cPar13 Reser vado.
lPar14 Reser vado.
Bloco de código, opcional. Ex ecut ado quando m udança de foco de ent r ada de dados
abWhen est á sendo efetuada na j anela onde o cont role foi cr iado. O bloco dev e r et or nar .T. se
o contr ole dev e perm anecer habilit ado ou .F. se não.
lPar16 Reser vado.
lPar17 Reser vado.

308

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________309

alReadOnly Lógico, opcional. Se .T. o cont role so per m it ir a leit ur a.


Bloco de código, opcional. Ex ecut ado quando o conteúdo do cont r ole deve ser
abValid v alidado, dev e ret or nar .T. se o conteúdo for válido e .F. quando o conteúdo for
inv álido.
bPar20
Reser vado.

lPar21 Reser vado.


alNoBor der Lógico, opcional. Se .T. cr ia cont role sem bor da.
alNoVScroll Lógico, opcional. Se .T., habilita barr a de rolagem vert ical.

Retorno

O objet o constr uído.

EnableVScroll

Descrição

Habilit a a bar ra de r olagem v er t ical.

Sintaxe

EnableVScr oll( lEnable )

Parâmetros

lEnable Lógico, obr igatório. Se .T. habilita se .F. desabilit a a bar ra de r olagem .

Retorno

NI L

EnableHScroll

Descrição

Habilit a a bar ra de r olagem hor izont al.

Sintaxe

EnableHScr oll( lEnable )

Parâmetros

lEnable Lógico, obr igatório. Se .T. habilita se .F. desabilit a a bar r a de r olagem .

Retorno

NI L

309

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________310

Exemplo
#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

tPanel
Classe de painel est át ico.

Hierarquia

tSrvObject -> tControl -> t Panel

Descrição

Ut ilize a classe tPanel quando desejar criar um painel estático, onde podem ser cr iados out ros cont r oles
com o objet iv o de or ganizar ou agrupar com ponent es visuais.

Métodos

New

Descrição

Constr ut or da classe.

Sintaxe

New( [ anRow] , [ anCol] , [ acText ] , [ aoWnd] , [ aoFont] , [ alCent er ed] , [ lPar6] , [ anClr Text ] , [ anClr Back ] ,
[ anWidth] , [ anHeight] , [ alLowered] , [ alRaised] )

Parâmetros

anRow Num érico, opcional. Coordenada ver t ical em pixels.

anCol Num érico, opcional. Coordenada hor izont al em pix els.

acText Car acter e, opcional. Text o a ser ex ibido ao fundo.

310

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________311

aoWnd Obj et o, opcional. Janela ou cont r ole onde será cr iado o objeto.

alCentered Lógico, opcional. Se .T. ex ibe o t ex to de t ítulo ao centr o do cont r ole.

lPar6 Reser vado.

anClr Text Num érico, opcional. Cor do t ex to do cont r ole.

anClr Back Num érico, opcional. Cor do fundo do cont r ole.

anWidt h Num érico, opcional. Lar gura do contr ole em pixels.

anHeight Num érico, opcional. Alt ur a do cont r ole em pix els.

alLow er ed Lógico, opcional. Se .T. ex ibe o painel r ebaixado em relação ao cont r ole de fundo.

Lógico, opcional. Se .T. ex ibe a bor da do cont r ole r ebaixada em relação ao cont r ole
alRaised
de fundo.

Retorno

O objet o constr uído.

Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oPanel, oBtn1, oBtn2


DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE “My test”
// cria o painel
oPanel:= tPanel():New(10,10,””,oDlg,,,,,CLR_BLUE,100,100)
// cria botão sobre o painel
@ 10,10 BUTTON oBtn1 PROMPT “hide” OF oPanel ACTION oPanel:Hide()
// cria botão fora o painel
@ 200,10 BUTTON oBtn2 PROMPT “show” OF oDlg ACTION oPanel:Show()
ACTIVATE MSDIALOG oDlg CENTERED

Return

tRadMenu
Classe de r adio gr oup.

Hierarquia

tSrvObject -> tControl -> t RadMenu

Descrição

Ut ilize a classe t RadMenu par a cr iar um cont r ole que possibilita escolha de it em atr av és de um a list a.

311

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________312

Propriedades

nOption Num érico. It em selecionado.

aIt em s Arr ay de car act er es. List a de it em s selecionáveis.

Métodos

New

Descrição

Constr ut or do obj et o.

Sintaxe

New( [ anRow] , [ anCol] , [ aacI tem s] , [ abSetGet ] , [ aoWnd] , [ aPar6] , [ abChange] , [ anClr Text ] , [ anClr Pan] ,
[ cPar10] , [ lPar11] , [ abWhen] , [ anWidt h] , [ anHeight ] , [ abValid] , [ lPar 16] , [ lPar 17] , [ alPixel] )

Parâmetros

anRow Num ér ico, opcional. Coor denada vert ical em pixels ou car act er es.

anCol Num ér ico, opcional. Coor denada horizontal em pixels ou car act er es.

aacIt em s Ar ray de caract er es, opcional. List a de opções.

Bloco de código, opcional. Bloco de código no for m ato { | u| if( Pcount ( ) > 0, < var> : =
abSet Get u, < var> ) } que o contr ole utiliza par a at ualizar a v ar iáv el < var> . < v ar > dev e ser
tipo num ér ico.

aoWnd Obj eto, opcional. Janela ou contr ole onde o contr ole ser á criado.

aPar 6 Reserv ado.

abChange Bloco de código, opcional. Ex ecut ado quando o it em selecionado é alt er ado.

anClr Text Num ér ico, opcional. Cor do t ex t o do contr ole

anClr Pan Num ér ico, opcional. Cor de fundo do contr ole.


Reserv ado.
cPar10

lPar11 Reserv ado.


Bloco de código, opcional. Executado quando m udança de foco de ent r ada de dados
abWhen está sendo efet uada na j anela onde o cont role foi cr iado. O bloco dev e ret or nar .T.
para que o cont role perm aneça habilit ado, ou .F. se não.
anWidt h Num ér ico, opcional. Largur a do cont role em pix els.
anHeight Num ér ico, opcional. Altura do contr ole em pixels.
Bloco de código, opcional. Execut ado quando o cont eúdo do cont r ole deva ser
abValid
validado, r et ornando .T. se o cont eúdo for válido, e .F. quando inválido.
lPar16 Reserv ado.

312

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________313

Lpar17 Reserv ado.


Lógico, opcional. Se .T. as coordenadas inform adas são em pixels, se .F. são em
alPixel
caract er es.

Retorno

O objet o constr uído.

EnableI tem

Descrição

Habilit a ou desabilit a it em .

Sintaxe

EnableIt em ( [ nI tem ] , [ lEnable] )

Parâmetros

nIt em Num ér ico, opcional. I tem selecionado.

lEnable Lógico, opcional. Se .T. habilit a o item se .F. desabilita o it em .

Retorno

NI L

Exemplo
#include “protheus.ch”

User Function Teste()


Local oDlg, oButton, oRadio, nRadio:=1,;
aOptions:={“escolha1”,”escolha2”}
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE “Meu Get”
oRadio:= tRadMenu():New(10,10,aOptions,;
{|u|if(PCount()>0,nRadio:=u,nRadio)},;
oDlg,,,,,,,,100,20,,,,.T.)
@ 40,10 BUTTON oButton PROMPT “7Fechar” OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop(“Escolheu “+aOptions[nRadio] )

Return nil

tSay
Classe de label.

Hierarquia

313

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________314

tSrvObject -> tControl -> t Say

Descrição

O objet o tipo tSay exibe o cont eúdo de t ex to estático sobr e um a j anela ou cont role.

Parâmetros

Lógico. Se .T. quebra o t ext o em vár ias linhas de m aneira a enquadr ar o cont eúdo
lWordWrap
na área det er m inada par a o cont r ole, sendo o padr ão .F.

Lógico. Se .T. a cor de fundo do contr ole é ignor ada assum indo o cont eúdo ou cor
lTr anspar ent
do contr ole ou j anela ao fundo, sendo o padr ão .T.

Métodos

New

Descrição

Método const r ut or do cont r ole.

Sintaxe

New( [ anRow] , [ anCol] , [ abText ] , [ aoWnd] , [ acPict ur e] , [ aoFont ] , [ lPar7] , [ lPar8] , [ lPar9] , [ alPix els] ,
[ anClr Text ] , [ anClrBack] , [ anWidt h] , [ anHeight ] , [ lPar 15] , [ lPar16] , [ lPar17] , [ lPar 18] , [ lPar 19] )

Parâmetros

anRow Num ér ico, opcional. Coor denada ver tical em pixels ou caract er es.

anCol Num ér ico, opcional. Coor denada hor izontal em pixels ou car act er es.

Codeblock, opcional. Quando executado dev e retor nar um a cadeia de caract er es a ser
abText
ex ibida.

aoWnd Obj eto, opcional. Janela ou diálogo onde o cont role será cr iado.

acPict ur e Caract er e, opcional. Pict ur e de for m at ação do conteúdo a ser exibido.

Obj eto, opcional. Obj et o tipo t Font par a configur ação do tipo de font e que ser á
aoFont
ut ilizado para exibir o cont eúdo.

lPar7 Reserv ado.

lPar8 Reserv ado.

lPar9 Reserv ado.


Lógico, opcional. Se .T. considera coordenadas passadas em pixels se .F., padr ão,
alPixels consider a as coor denadas passadas em car acteres.

314

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________315

anClr Text Num ér ico, opcional. Cor do cont eúdo do cont role.
anClr Back Num ér ico, opcional. Cor do fundo do contr ole.
anWidt h Num ér ico, opcional. Largur a do cont role em pix els.
anHeight Num ér ico, opcional. Altura do contr ole em pixels.
lPar15 Reserv ado.
lPar16 Reserv ado.
lPar17 Reserv ado.
lPar18 Reserv ado.
lPar19
Reserv ado.

Retorno

O cont r ole cr iado.

SetText

Descrição

Modifica o conteúdo a ser exibido pelo cont role.

Sintaxe

SetTex t( [ x Val] )

Parâmetros

x Val Car acter / Num érico / Dat a, Opcional. Valor a ser ex ibido.

Retorno

NI L

Exemplo
#include “protheus.ch”

User Function Teste()

Local oDlg, oSay


DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE “My dialog” PIXEL
oSay:= tSay():New(10,10,{||”para exibir”},oDlg,,,,;
,,.T.,CLR_WHITE,CLR_RED,100,20)
ACTIVATE MSDIALOG oDlg CENTERED

Return

315

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________316

tScrollbox
Classe de área de scroll.

Hierarquia

tSrvObject -> tControl -> t Scrollbox

Descrição

Ut ilize a classe t Scrollbox par a criar um painel com scr oll deslizantes nas laterais do contr ole.

Métodos

New

Descrção

Constr ut or da classe

Sintaxe

New( [ aoWnd] , [ anTop] , [ anLeft ] , [ anHeight] , [ anWidt h] , [ alVert ical] , [ alHor izont al] , [ alBorder ] )

Parâmetros

aoWnd Obj et o, opcional. Janela ou cont r ole onde o cont role será cr iado.

anTop Num ér ico, opcional. Coor denada v er t ical em pix els.

anLeft Num ér ico, opcional. Coor denada hor izont al em pix els.

anHeight Num ér ico, opcional. Alt ur a do cont role em pix els.

anWidt h Num ér ico, opcional. Lar gur a do cont r ole em pixels.

alVer t ical Lógico, opcional. Se .T. exibe a barr a de scr oll v er t ical.

alHor izont al Lógico, opcional. Se .T. exibe a barr a de scr oll hor izont al.

alBor der Lógico, opcional. Se .T. exibe a borda do cont role.

Retorno

O objet o cr iado.

Exemplo

316

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________317

#include “protheus.ch”

User Function Teste()

Local oDlg, oScr, oGet1, oGet2, oGet3


Local cGet1, cGet2, cGet3
cGet1:= Space(10)
cGet2:= Space(10)
cGet3:= Space(10)
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL “My test”
oScr:= TScrollBox():New(oDlg,10,10,200,200,.T.,.T.,.T.)
// cria controles dentro do scrollbox
@ 10,10 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oScr PIXEL
@ 50,10 MSGET oGet2 VAR cGet2 SIZE 100,10 OF oScr PIXEL
@ 150,100 MSGET oGet3 VAR cGet3 SIZE 100,10 OF oScr PIXEL
ACTIVATE MSDIALOG oDlg CENTERED

Return nil

317

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________318

I nfra- estrutura

Bem - v indo à docum ent ação das funções genér icas e obj etos disponíveis no RPO padrão do Advanced
Pr ot heus.

Esta docum entação abor da os seguint es tópicos:

• Funções de I nfra-Estrutura

• Objetos de I nfra- Estrutura

MsGetDados
Objeto tipo lista com um a ou m ais colunas para cadast ram ento de dados baseado em um vetor.

Ca ra ct er íst icas

A MsGet Dados pr ecisa que sejam declar adas as v ar iáv eis abaix o sendo t ipo Pr ivate:

aRot ina.

Vet or com as r ot inas que serão execut adas na MBr owse e que definira o tipo de operação que est a sendo
ex ecut ada ( inclusão, alteração, ex clusão, v isualização, pesquisa, ...) no for m at o:

Elem ento Cont eúdo

1 Título
2 Rotina
3 Reservado
Operação (1 - pesquisa; 2 - visualização; 3 - inclusão; 4 - alteração;
4
5 - exclusão)
Acesso relacionado a rotina, se esta posição não for informada
5
nenhum acesso será validado

318

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________319

aHeader

Vetor com infor m ações das colunas no form at o:

Elem ento Conteúdo

1 Título
2 Campo
3 Máscara
4 Tamanho
5 Decimal
6 Validação
7 Reservado
8 Tipo
9 Reservado
10 Reservado

aCols
Vetor com as linhas a serem edit adas. As colunas devem ser constr uídas com base no aHeader m ais um a
ult im a com valor lógico que det er m ina se a linha foi excluída.

lRefr esh
Variáv el t ipo lógica par a uso r eser vado.

A MsGet Dados cria a v ar iáv el publica n que indica qual a linha posicionada do aCols.

As funções passadas com o par âm et ro par a a MsGet Dados ( cLinhaOk, cTudoOk, ...) não poder ão ser
declar adas com o St atic Funct ion.

A consult a padr ão, validação do usuário e gat ilhos est ar ão habilit ados se o cam po estiver cadastr ado no
Dicionário de Dados ( SX3/ SX7) e apresent ar estas opções disponíveis.

M ét od os

New

D escr ição

Cr ia o obj et o MsGetDados.

Sin t a xe

MSGETDADOS( ) : NEW( nSuper ior , nEsquer da, nI nferior, nDir eit a, nOpc, [ cLinhaOk ] , [ cTudoOk ] , [
cI niCpos ] , [ lApagar ] , [ aAlt er ] , [ uPar 1 ] , [ lVazio ] , [ nMax ] , [ cCam poOk ] , [ cSuper Apagar ] , [ uPar2
] , [ cApagaOk ] , [ oWnd ] ) - > obj et o

319

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________320

Argum ent os Descrição

Distancia entre a MsGetDados e o extremidade superior do


nSuperior
objeto que a contém.
Distancia entre a MsGetDados e o extremidade esquerda do
nEsquerda
objeto que a contém.
Distancia entre a MsGetDados e o extremidade inferior do objeto
nInferior
que a contém.
Distancia entre a MsGetDados e o extremidade direita do objeto
nDireita
que a contém.
Posição do elemento do vetor aRotina que a MsGetDados usará
nOpc
como referencia.
Função executada para validar o contexto da linha atual do
cLinhaOk
aCols.
Função executada para validar o contexto geral da MsGetDados
cTudoOk
(todo aCols).
Nome dos campos do tipo caracter que utilizarão incremento
cIniCpos automático. Este parâmetro deve ser no formato “+<nome do
primeiro campo>+<nome do segundo campo>+...”.
lApagar Habilita deletar linhas do aCols. Valor padrão falso.
aAlter Vetor com os campos que poderão ser alterados.
uPar1 Parâmetro reservado.
Habilita validação da primeira coluna do aCols para esta não
lVazio
poder estar vazia. Valor padrão falso.
nMax Número máximo de linhas permitidas. Valor padrão 99.
cCampoOk Função executada na validação do campo.
Função executada quando pressionada as teclas
cSuperApagar
<Ctrl>+<Delete>.
uPar2 Parâmetro reservado.
cApagaOk Função executada para validar a exclusão de uma linha do aCols.
oWnd Objeto no qual a MsGetDados será criada.

Ret or n o

Objeto.

ForceRefr esh

D escr ição

At ualiza a MsGetDados com o aCols e posiciona na prim eir a linha.

320

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________321

Sin t ax e

oObj et o: For ceRefr esh( )

Hide

D escr ição

Esconde a MsGetDados.

Sint axe

oObj et o: Hide( )

Show

D escr ição

Most ra a MsGet Dados.

Sint ax e

oObj et o: Show( )

Ex em plo

User Function Exemplo()


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")
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,;
"",;
"" })

321

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________322

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.
DEFINE MSDIALOG oDlg TITLE "Exemplo" FROM 00,00 TO 300,400 PIXEL
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)
ACTIVATE MSDIALOG oDlg CENTERED
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.

MsGetDb
Objeto t ipo list a com um a ou m ais colunas par a cadast ram ento de dados baseado em um a tabela
tem por ár ia.

Ca ra ct er íst icas

A MsGet DB pr ecisa que sej am declaradas as variáveis abaixo sendo t ipo Pr iv at e:

aRot ina.

Vet or com as r ot inas que serão execut adas na MBr owse e que definira o tipo de operação que est a sendo
ex ecut ada ( inclusão, alteração, ex clusão, v isualização, pesquisa, ...) no form at o:

Elem ento Cont eúdo

1 Título
2 Rotina
3 Reservado
Operação (1 - pesquisa; 2 - visualização; 3 - inclusão; 4 - alteração;
4
5 - exclusão)

322

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________323

Acesso relacionado a rotina, se esta posição não for informada


5
nenhum acesso será validado

aHeader

Vetor com infor m ações das colunas no form at o:

Elem ento Conteúdo

1 Título
2 Campo
3 Máscara
4 Tamanho
5 Decimal
6 Validação
7 Reservado
8 Tipo
9 Reservado
10 Reservado

lRefr esh

Variáv el t ipo lógica par a uso r eser vado.

A tabela t em porária ut ilizada pela MsGet DB deverá ser criada com base no aHeader m ais um últim o
cam po tipo lógico que determ ina se a linha foi excluída.

A MsGet DB cr ia a variável publica nBr Lin que indica qual a linha posicionada do aCols.

As funções passadas com o par âm etr o para a MsGet DB ( cLinhaOk , cTudoOk , ...) não poder ão ser
declar adas com o St atic Funct ion.

A consult a padr ão, validação do usuário e gat ilhos est ar ão habilit ados se o cam po estiver cadastr ado no
Dicionário de Dados ( SX3/ SX7) e apresent ar estas opções disponív eis.

M ét od os

New

D escr ição

Cr ia o obj et o MsGet DB.

Sin t a xe

MSGETDB( ) : NEW( nSuperior , nEsquer da, nI nferior, nDir eita, nOpc, [ cLinhaOk ] , [ cTudoOk ] , [ cI niCpos ] , [
lApagar ] , [ aAlt er ] , [ nCongelar ] , [ lVazio ] , [ uPar 1 ] , cTRB, [ cCam poOk ] , [ lCondicional ] , [ lAdicionar ] ,
[ oWnd ] , [ lDispar os ] , [ uPar 2 ] , [ cApagarOk ] , [ cSuper Apagar ] ) - > objet o

323

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________324

Argum ent os Descrição

Distancia entre a MsGetDB e o extremidade superior do objeto


nSuperior
que a contém.
Distancia entre a MsGetDB e o extremidade esquerda do objeto
nEsquerda
que a contém.
Distancia entre a MsGetDB e o extremidade inferior do objeto
nInferior
que a contém.
Distancia entre a MsGetDB e o extremidade direita do objeto que
nDireita
a contém.
Posição do elemento do vetor aRotina que a MsGetDB usará
nOpc
como referência.
Função executada para validar o contexto da linha atual do
cLinhaOk
aCols.
Função executada para validar o contexto geral da MsGetDB
cTudoOk
(todo aCols).
Nome dos campos do tipo caracter que utilizarão incremento
cIniCpos automático. Este parâmetro deve ser no formato “+<nome do
primeiro campo>+<nome do segundo campo>+...”.
lApagar Habilita a opção de deletar linhas do aCols. Valor padrão falso.
aAlter Vetor com os campos que poderão ser alterados.
nCongelar Indica qual coluna não ficara congelada na exibição.
Habilita validação da primeira coluna do aCols para esta não
lVazio
poder estar vazia. Valor padrão falso.
uPar1 Parâmetro reservado.
cTRB Alias da tabela temporária.
cCampoOk Função executada na validação do campo.
lConditional Reservado
Indica se a MsGet DB ir a cr iar um a linha em branco autom at icam ent e
lAdacionar
quando for inclusão.

oWnd Objeto no qual a MsGetDB será criada.


Indica se será utilizado o Dicionário de Dados para consulta
lDisparos
padrão, inicialização padrão e gatilhos.
uPar2 Parâmetro reservado.
cApagarOk Função executada para validar a exclusão de uma linha do aCols.
-Função executada quando pressionada as teclas
cSuperApagar
<Ctrl>+<Delete>.

Ret or n o

324

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________325

Objeto.

Fo rceRe fr esh

D escr ição

At ualiza a MsGetDB com a t abela e posiciona na prim eir a linha.

Sin t a xe

ForceRefr esh( )

Ex em plo

User Function Exemplo()


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},;
{"Excluit", "AxDeleta", 0, 5}}
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")
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.)
DEFINE MSDIALOG oDlg TITLE "Exemplo" FROM 00,00 TO 300,400 PIXEL
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")
ACTIVATE MSDIALOG oDlg CENTERED
DbSelectArea(cCriaTrab)
DbCloseArea()
Return

User Function LINHAOK()


ApMsgStop("LINHAOK")

325

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________326

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.

MsmGet
Conj unto de obj et os tipo MsGet / MsCom bo para cadast ram ento de dados baseado no Dicionário de Dados.

Ca ra ct er íst icas

A MsMGet tam bém poder cr iada a par tir da função Enchoice a qual recebe os m esm os par âm et ros do
m ét odo New porém não ret or na o obj eto cr iado.

A MsMGet se baseia no Dicionário de Dados para v er ificar cam pos obr igat órios, v alidações, gat ilhos,
consult a padr ão et c. assim com o par a a cr iação das Past as de Cadast r o.

A MsMGet pode usar t anto v ar iáv eis de m em ória do t ipo Pr ivate com o dir et am ent e os cam pos da t abela a
que se refere.

M ét od os

New

D escr ição

Cr ia o objet o MsMGet.

Sin t a xe

MSMGET( ) : NEW( cAlias, nReg, nOpc, [ uPar 1 ] , [ uPar 2 ] , [ uPar3 ] , [ aACho ] , [ aPos ] , [ aCpos ] , [
uPar4 ] , [ uPar 5 ] , [ uPar6 ] , [ uPar 7 ] , [ oWnd ] , [ uPar8 ] , [ lMem or ia ] , [ lColuna ] , [ uPar 9 ] , [
lSem Pastas ] ) - > obj et o

Argum ent os Descr ição

cAlias Alias do dados a serem cadastrados.


nReg Número do registro da tabela a ser editado.

326

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________327

uPar1 Parâmetro reservado.


uPar2 Parâmetro reservado.
uPar3 Parâmetro reservado.
aAcho Vetor com os campos que serão apresentados pela MsMGet.
Vetor com as coordenadas onde a MsMGet será criada no
formato {coord. superior, coord. esquerda, coord. direita,
aPos
coord. inferior}.Função executada para validar o contexto
da linha atual do aCols.
aCpos Vetor com os campos que poderão ser alterados.
Parâmetro reservado. Nome dos campos do tipo caracter
que utilizarão incremento automático. Este parâmetro deve
uPar4
ser no formato “+<nome do primeiro campo>+<nome do
segundo campo>+...”.
uPar5 Parâmetro reservado.
uPar6 Parâmetro reservado.
uPar7 Parâmetro reservado.
oWnd Objeto no qual a MsMGet será criada.
uPar8 Parâmetro reservado.
Indica se será usado variáveis de memória ou os campos da
lMemoria
tabela para cadastramento dos dados. Valor padrão falso.
Indica se a MsMGet sera apresentada com um objeto por
lColuna linha (uma coluna). Valor padrão falso. Parâmetro
reservado.
uPar9 Parâmetro reservado.
Indica se não será usado as Pastas de Cadastro na MsMGet.
lSemPastas Função executada para validar a exclusão de uma linha do
aCols.

Ret or n o

Obj et o.

Refr esh

D escr ição

At ualiza os objet os contidos na MsMGet.

Sin t a xe

Refr esh( )

327

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________328

Hide

D escr ição

Esconde a MsMGet.

Sin t a xe

Hide( )

Show

D escr ição

Most ra a MsMGet.

Sin t a xe

Show( )

Ex em plo

User Function Exemplo()


Local i
Local oDlg
Local oMsMGet
Local lInit
Local cCampo
DbSelectArea("SA1")
For i := 1 To FCount()
cCampo := Field(i)
lInit := .F.
If ExistIni(cCampo)
lInit := .t.
M->&(cCampo) := InitPad(SX3->X3_RELACAO)
If ValType(M->&(cCampo)) = "C"
M->&(cCampo) := Padr(M->&(cCampo),SX3->X3_TAMANHO)
EndIf
If M->&(cCampo) == NIL
lInit := .F.
EndIf
EndIf
If !lInit
M->&(cCampo) := FieldGet(i)
If ValType(M->&(cCampo)) = "C"
M->&(cCampo) := Space(Len(M->&(cCampo)))
ElseIf ValType(M->&(cCampo)) = "N"
M->&(cCampo) := 0
ElseIf ValType(M->&(cCampo)) = "D"
M->&(cCampo) := CtoD(" / / ")
ElseIf ValType(M->&(cCampo)) = "L"
M->&(cCampo) := .F.
EndIf
EndIf
Next
DEFINE MSDIALOG oDlg TITLE "Exemplo" FROM 00,00 TO 19,80
MSMGET():NEW("SA1",0,3,,,,,,,,,,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED ON INIT EnchoiceBar(oDlg,{|| oDlg:End()},{|| oDlg:End()})

328

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________329

Return

MBrow se
Mont a um Br owse com m enu de opções.

Sin t ax e

MBROWSE( [ uPar 1 ] , [ uPar 2 ] , [ uPar3 ] , [ uPar4 ] , cAlias, [ aFix os ] , [ cCpo ] , [ uPar5 ] , [ cFun ] , [
nPadrao ] , [ aCores ] , [ cEx pI ni ] , [ cExpFim ] , [ nCongela ] ) - > nil

Ar gum ento Obr igat. Tipo Descr ição

uPar 1 Não N Par âm etr o r eser vado.

uPar 2 Não N Par âm etr o r eser vado.

uPar 3 Não N Par âm etr o r eser vado.

uPar 4 Não N Par âm etr o r eser vado.

CAlias Sim C Alias do arquiv o a ser v isualizado no br owse.

Cont endo os nom es dos cam pos fixos pré- definidos pelo
AFixos Não A
progr am ador, obrigando a exibição de um a ou m ais colunas.

Cam po a ser v alidado se est á vazio ou não para ex ibição do bit m ap


CCpo Não C
de st at us.

uPar 5 Não N Par âm etr o r eser vado.

Função que retor nar á um valor lógico par a ex ibição do bitm ap de


cFun Não C
status.

Núm er o da rot ina a execut ada quando for efetuado um duplo


nPadrao Não N clique em um registr os do browse. Caso não sej a infor m ado o
padr ão será executada visualização ou pesquisa.

Est e vetor possui duas dim ensões, a pr im eira é a função de


aCor es Não A validação par a exibição do bit m ap de status, e a segunda o bitm ap
a ser exibido.

Função que retorna o conteúdo inicial do filt ro baseada na chav e


cExpIni Não C
de índice selecionada.

Função que retorna o conteúdo final do filtr o baseada na chav e de


cExpFim Não C
índice selecionada.

nCongela Não N Coluna a ser congelado no br owse.

D escr içã o

329

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________330

As v ar iáv eis cCadast ro e aRot ina ( * ) precisam ser declar ados com o pr iv at e acim a da cham ada da função.

Apenas um dos parâm et r os ( cCpo, cFun, aColors ) deve ser infor m ado.

( * ) vet or com as r ot inas que serão ex ecut adas, nele será definido o t ipo de oper ação a ser executada
( inclusão, alt er ação, ex clusão, visualização, pesquisa, ...) sua est rutura é com posta de 5 ( cinco)
dim ensões: 1º - Tít ulo; 2º – Rot ina; 3º – Reser vado; 4º – Operação ( 1 - pesquisa; 2 - v isualização; 3 -
inclusão; 4 - alt er ação; 5 - exclusão) ; 5 – Acesso relacionado a r otina, se esta posição não for inform ada
não validar á os acessos.

Ex em plo

Private cCadastro := 'Cadastro de Clientes'


Private aRotina := { { 'Pesquisar' , 'AxPesqui' , 0, 1 },;
{ 'Visualizar' , 'AxVisual' , 0, 2 },;
{ 'Incluir' , 'AxInclui' , 0, 3 },;
{ 'Alterar' , 'AxAltera' , 0, 4 },;
{ 'Excluir' , 'AxExcluir', 0, 5 }}
MBROWSE( ,,,, 'SA1',, '!A1_COD',,, 4 )

Funções

AllGroups
Retorna vet or contendo infor m ações dos gr upos de usuários.

Sin t ax e

ALLGROUPS( ) - > ar r ay

D escr içã o

A função AllGroups( ) r et or na um vetor principal onde cada elem ent o refer e- se a um gr upo de usuár ios
do sistem a, est es elem ent os são com post os de um vetor m ult idim ensional subdividindo as
infor m ações dos grupos. Sua estr ut ura é com post a de:

Elem ento D e scriçã o Tipo Qt d.

1 ID C 6

2 Nom e C 20

3 Vet or com hor ários de acesso A

4 Dat a de validade D 8

5 Quant as v ezes par a expir ar N 4

330

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________331

6 Aut or izado a alterar a senha L 1

7 I diom a N 1

8 Dir etório C 100

9 I m pressor a C

10 Acessos C 512

11 Vet or com em presas A

12 Dat a da últim a alteração D 8

13 Tipo de im pr essão N 1
14 For m ato N 1
15 Am bient e N 1
16 Opção de im pr essão L 1

17 Acesso a outros Dir de impressão L 1


2
1 Módulo+nível+menu C

Ex em plo

Local aGrupos:= {}
aGrupos:= ALLGROUPS()

AllUsers
Retorna vet or contendo infor m ações dos usuár ios do sist em a.

Sin t ax e

ALLUSERS( ) - > ar ray

D escr içã o

A função AllUser s( ) r et or na um vet or pr incipal onde cada elem ento r efere- se a um usuár io do sist em a,
est es elem entos são com post os de um v et or m ultidim ensional subdividindo as inform ações dos
usuários. Sua estr ut ur a é com post a de:

Elem ento Descr ição Tipo Qt d.

331

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________332

1 ID C 6

2 Nom e C 15

3 Senha C 6

4 Nom e Com plet o C 30

5 Vet or com nº últim as senhas A --

6 Dat a de validade D 8

7 Quant as vezes para expirar N 4

8 Aut orizado a alt er ar a senha L 1

9 Alterar a senha no próxim o logon L 1

10 Vet or com os gr upos A --

11 ID do superior C 6

12 Depar t am ent o C 30

13 Car go C 30
14 E- Mail C 130
15 Núm er o de acessos sim ult âneos N 4
16 Dat a da últ im a alt er ação D 8
17 Usuár io bloqueado L 1
18 Núm er o de dígitos par a o ano N 1
19 List ner de ligações L 1
20 Ram al C 4
2
1 Vet or com horários de acesso A --
2 Idiom a N 1
3 Diretór io C 100
4 Im pressor a C --
5 Acessos C 512
6 Vet or com em presas A --
7 Pont o de ent r ada C 10
8 Tipo de im pr essão N 1
9 Form ato N 1
10 Am bient e N 1
11 Pr ior idade p/ config. do gr upo L 1
12 Opção de im pr essão C 50
13 Acesso a out r os dir de im pressão L 1
3
1 Módulo+ nível+ m enu C

332

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________333

Ex em plo

Local aUsuario:= {}
aUsuario:= ALLUSERS()

APMsgAlert
Ex ibe um a m ensagem em um diálogo

Sin t ax e

APMSGALERT( cMsg, [ cTit ulo ] ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

cMsg Sim C Mensagem a ser ex ibida.

cTitulo Não C Tít ulo do diálogo.

D escr içã o

Esta função exibe um a m ensagem em um diálogo par a alert ar o usuário com um bot ão par a confirm ar e
um ícone de m ensagem de aviso.

Ex em plo

APMSGALERT(“Atenção”)

APMsgI nfo
Ex ibe um a m ensagem em um diálogo

Sin t ax e

APMSGINFO( cMsg, [ cTit ulo ] ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

cMsg Sim C Mensagem a ser ex ibida.

cTitulo Não C Tít ulo do diálogo.

D escr içã o

Esta função exibe um a m ensagem em um diálogo par a alert ar o usuário com um bot ão par a confirm ar e
um ícone de m ensagem de aviso.

333

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________334

Ex em plo

APMSGINFO(“Atenção”)

APMsgNoYes
Ex ibe um a m ensagem em um diálogo

Sin t ax e

APMSGNOYES( cMsg, [ cTit ulo ] ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

cMsg Sim C Mensagem a ser ex ibida.

cTit ulo Não C Tít ulo do diálogo.

D escr içã o

Esta função exibe um a m ensagem em um diálogo para o usuário com um bot ão par a confirm ar e um para
cancelar . Caso cancele a função r etornar á ver dadeir o, senão retor nar á falso.

Ex em plo

If !APMSGNOYES(“Abandonar?”)
Return
EndIf

APMsgStop
Ex ibe um a m ensagem em um diálogo

Sin t ax e

APMSGSTOP( cMsg , [ cTitulo ] ) - > nil

Ar gum ento Obrigat. Tipo Descr ição

cMsg Sim C Mensagem a ser ex ibida.

Ct itulo Não C Tít ulo do diálogo.

D escr içã o

Esta função exibe um a m ensagem em um diálogo par a alert ar o usuário com um bot ão par a confirm ar e
um ícone de m ensagem cr ít ica.

334

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________335

Ex em plo

APMSGSTOP(“Atenção”)

APMsgYesNo
Ex ibe um a m ensagem em um diálogo

Sin t ax e

APMSGYESNO( cMsg , [ cTitulo ] ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

cMsg Sim C Mensagem a ser ex ibida

cTitulo Não C Tít ulo do diálogo.

D escr içã o

Esta função exibe um a m ensagem em um diálogo para o usuário com um bot ão par a confirm ar e um para
cancelar . Caso confir m e a função r et or nará v er dadeiro, senão r et or nar á falso.

Ex em plo

If APMSGYESNO(“Abandonar ?”)
Return
EndIf

APMsgYesNo
Ex ibe um a m ensagem em um diálogo

Sin t ax e

APMSGYESNO( cMsg , [ cTitulo ] ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

cMsg Sim C Mensagem a ser ex ibida

cTitulo Não C Tít ulo do diálogo.

D escr içã o

Esta função exibe um a m ensagem em um diálogo para o usuário com um bot ão par a confir m ar e um para
cancelar . Caso confir m e a função r et or nará v er dadeiro, senão r et or nar á falso.

335

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________336

Ex em plo

If APMSGYESNO(“Abandonar ?”)
Return
EndIf

Cabec
Im pr im e cabeçalho per sonalizado nos relat ór ios.

Sin t ax e

CABEC( cTit ulo, cCabec1, cCabec2, cPr ogram a, cTam anho, [ nFor m at o ] , [ uPar ] , [ lPer g ] ) - > nil

Ar gum ento Obrigat. Tipo Descr ição

cTit ulo Sim C Tít ulo do r elat ór io.

cCabec1 Sim C Prim eir a linha do cabeçalho.

cCabec2 Sim C Segunda linha do cabeçalho.

cProgr am a Sim C Nom e do r elat ór io.

cTam anho Sim C Tam anho da página P,M,G.

nFor m at o Não N Par a im pr im ir com prim ido inform e 15

uPar Não U Reser vado

lPer g Não L Se verdadeir o, ( .T.) im pr im e as perguntas no início do relat ór io.

D escr içã o

A função Cabec( ) im pr im e o cabeçalho personalizado de acor do com o conteúdo dos parâm etr os cCabec1
e cCabec2. O logo im pr esso no cabeçalho é um a im agem de ex tensão “ .bm p” , cuj o nom e est á associado
com o em pr esa corr ent e. Ex: ‘LGRL01.BMP’, ‘01’ é a em pr esa.

Ex em plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }

336

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________337

Local lCompres :=.F.


Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administração", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )

wrel := SetPrint ( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf

SetDefault ( aReturn, cAlias )


If nLastKey == 27
Set Filter To
Return
EndIf

RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )


Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'
Local cCabec2 := 'Cabecalho 2'
dbSelectArea( cAlias )

SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
CABEC( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
IncRegua()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
CABEC( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif

337

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________338

@ nLin,000 PSAY __PrtThinLine()


Roda(,, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1

Set Printer TO
dbCommitAll()

OurSpool( wrel )
Endif

MS_FLUSH()
Return

Capital
Corr ige m aiúsculas e m inúsculas de um a fr ase.

Sin t ax e

CAPI TAL( cText o ) - > car acter

Ar gum ento Obrigat. Tipo Descr ição

cTex to Sim C Tex to a ser cor rigido.

D escr içã o

Esta função coloca a pr im eir a let ra de cada palavr a em m aiúscula e o r est ant e em m inúscula em toda a
fr ase.

Ex em plo

APMsgI nfo( CAPITAL(“FrAsE InCoRrEtA”) )

CloseBrowse
Fecha a MBrowse ou a Mar kBrow.

Sin t ax e

CLOSEBROWSE( ) - > lógico

D escr içã o

Esta função fecha a MBrowse ou Mar kBr ow dependendo de qual est iver at iva.

338

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________339

Conpad1
Ex ibe a t ela de consult a padr ão.

Sin t ax e

CONPAD1( [ uPar 1 ] , [ uPar 2 ] , [ uPar 3 ] , cAlias, [ cCam poRet ] , [ uPar4 ] , [ lVisual ] ) - > lógico

Ar gum ento Obr igat. Tipo Descr ição

uPar Não U Par âm etr o r eser vado.

uPar 2 Não U Par âm etr o r eser vado.

uPar 3 Não U Par âm etr o r eser vado.

Consult a padrão cadast rada no Dicionár io de Dados ( SXB) a ser


cAlias Sim C
utilizada.

cCam poRet Não C Nom e da variável ou cam po que r eceber á o r etorno da consulta padr ão.

uPar 4 Não U Par âm etr o Reser vado.

lVisual Não L I ndica se será som ente par a v isualização.

D escr içã o

Esta função exibe a t ela de consulta padr ão baseada no Dicionário de Dados ( SXB) .

Ex em plo

CONPAD1(,,,”SA1”,,,.F.)

Enchoicebar
Cr ia barr a de botões padrão na janela

Sin t ax e

ENCHOICEBAR( oDlg, bOk, bCancelar, [ lMensApag ] , [ aBot oes ] ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

339

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________340

oDlg Sim O Janela onde a bar ra ser á criada.

bOk Sim B Bloco ex ecut ado quando clicado bot ão Ok .

bCancelar Sim B Bloco ex ecut ado quando clicado.

I ndica se ao clicar no bot ão Ok apar ecerá um a t ela de confir m ação de


lMensApag Não L
exclusão. Valor padrão falso

Vet or com infor m ações para cr iação de botões adicionais na bar r a no


aBot oes Não A
form ato { bit m ap, bloco de código, m ensagem } .

D escr ição

Esta função cr ia um a bar r a com bot ões padr ão e out ros passados com o par âm et ro na janela t am bem
passada por par âm etr o. A EnchoiceBar dev er ser cham ada ant es do ACTIVATE da j anela.

Ex em plo

User Function <nome-do-programa>()


Local oDlg
DEFINE MSDIALOG oDlg TITLE "Exemplo" FROM 00,00 TO 300,400 PIXEL
ACTIVATE MSDIALOG oDlg CENTERED ON INIT,;
ENCHOICEBAR(oDlg,{|| APMsgI nfo(“Ok”)}, {|| ApMsgInfo(“Cancelar”)}, , {{“BMPINCLUIR”,{||
APMsgInfo(“Teste”)},”Teste”}})
Return

FileNoExt
Retorna o nom e de um arquivo sem a ex tensão.

Sin t ax e

FI LENOEXT( cText o ) - > caract er

Ar gum ento Obr igat . Tipo Descrição

cTex to Sim C Text o contendo o nom e do ar quiv o

D escr içã o

A função FileNoEx t ( ) r etorna o nom e de um arquivo cont ido em um a str ing, ignor ando a ext ensão.

Ex em plo

Local cString := '\SIGAADV\ARQZZZ.DBF'

340

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________341

cString := FileNoExt( cString )


// retorno ‘\SIGAADV\ARQZZZ’

Final
Ut ilizada para finalizar o sistem a.

Sin t ax e

FI NAL( [ cMensagem 1 ] , [ cMensagem 2 ] ) - > lógico

Ar gu m en t o Ob riga t . Tip o D e scr içã o

cMensagem 1 Não C Pr im eir a m ensagem .

cMensagem 2 Não C Segunda m ensagem .

D escr içã o

Esta função ex ecut a oper ações básicas que garant em a int egridade dos dados ao finalizar o sist em a
desm ont ando as t ransações ( se houver) , desbloqueando os sem áforos e fechando as t abelas aber t as.

Ex em plo

User Function <nome-do-programa>( cUsuario, cSenha )


Local cMensag1 := “Usuário inválido!”
Local cMensag2 := “Opção disponível para usuários Administradores!”
If !PswAdmin ( cUsuario, cSenha )
FINAL( cMensag1, cMensag2 )
EndIf
Return

FTPConnect
Cr ia conexão com serv idor FTP.

Sin t ax e

FTPCONNECT( cSer vidor , nPor t a, cUsuar io, cSenha ) - > lógico

D escr içã o

A função FTPConnect( ) r et or na v er dadeir o se a oper ação for r ealizada com sucesso. Se ex ist ir um a
conexão at iva e for solicit ada um a nov a, retornar á falso.

341

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________342

Arg u m e n t o Obr iga t . Tipo D escr ição

cServ idor Sim C Ender eço do serv idor

Núm er o da por ta utilizada par a conect ar no serv idor , por default


nPort a Não N
ut iliza a port a padrão de FTP.

Nom e do usuár io utilizado par a conect ar no ser vidor. Por default


cUsuario Não C
ut iliza o usuário " Anonym ous".

Senha do usuários ut ilizado par a conectar no serv idor . Por default


cSenha Não C
ut iliza o usuário " Anonym ous".

Ex em plo

Local cServidor
Local cCurDir
cServidor := 'ftp.caminhodoservidor.com.br'
If !FTPCONNECT( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf

FTPDirChange
Alt er a o dir et ór io cor rent e do FTP.

Sin t ax e

FTPDIRCHANGE( cDiret or io ) - > lógico

Ar gum ento Obr igat . Tipo Descrição

cDir etorio Sim C Nom e do dir et ór io.

D escr içã o

A função FTPDir Change ( ) r et or nará verdadeiro ( .T.) se a oper ação for r ealizada com sucesso.

Ex em plo

Local cServidor
Local aArqs
Local aDirs
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDisconnect ()
If !FTPConnect ( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf
If FTPDirChange('diretorio')
aDirs := FTPDirectory( '*.*', 'D' )
aArqs := FTPDirectory( '*.*' )

342

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________343

EndIf

FTPDirectory
Cr ia um vet or com inform ações de dir etórios e ar quivos do FTP.

Sin t ax e

FTPDIRECTORY( cMascar a, [ cAt ributo ] ) - > ar ray

Ar gum ento Obrigat . Tipo Descr ição

cMascara Sim C Máscara dos ar quiv os a serem pesquisados.

Se for infor m ado “ D” a função retor nar á som ent e dir et ór ios, se não
cAtr ibuto Não C
for infor m ado r et or nar á som ente ar quiv os.

D escr içã o

A função FTPDir ector y( ) r et or na um vetor cont endo infor m ações dos dir et órios e ar quivos cont idos no FTP.

Ex em plo

Local cServidor
Local aArqs
Local aDirs
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDisconnect ()
If !FTPConnect ( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf
If FTPDirChange('diretorio')
aDirs := FTPDIRECTORY( '*.*', 'D' )
aArqs := FTPDIRECTORY( '*.*' )
EndIf

FTPDisconnect
Elim ina conex ão atual.

Sin t ax e

FTPDISCONNECT( ) - > lógico

D escr ição

A função FTPDisconnect ( ) r etornar á verdadeir o ( .T.) se a operação for r ealizada com sucesso. Se não
ex ist ir um a conexão a função r etornar á falso ( .F.) . Se a oper ação for realizada com sucesso a função
ret or na v er dadeir o ( .T.) .

343

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________344

Ex em plo

Local cServidor
Local aArqs
Local aDirs
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDISCONNECT()
If !FTPConnect ( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf
FTPDirChange ('diretorio')
aDirs := FTPDirectory( '*.*', 'D' )
aArqs := FTPDirectory( '*.*' )

FTPDow nload
Copia um arquiv o no ser vidor FTP par a o ser v idor local.

Sin t ax e

FTPDOWNLOAD( cAr qDest, cArqOr ig ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

cArqDest Sim C Cam inho e nom e do arquivo a ser gravado na m áquina.

CArqOr ig Sim C Arquiv o no ser vidor a ser copiado.

D escr içã o

A função FTPDow nload( ) copia um arquivo no serv idor FTP par a um a m áquina local em um diretór io
( inform ado no par âm etr o cAr qDest) abaixo do Root Pat h do Protheus.

Ex em plo

Local cServidor
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDisconnect ()
If !FTPConnect ( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf
If FTPDirChange('diretorio')
If !FTPDOWNLOAD( '\DIRETORIO\ARQ00001.ARQ', 'ARQ00001.ARQ' )
APMsgInfo ( 'Problemas ao copiar arquivo!' )
EndIf
EndIf

FTPErase
Apaga ar quiv o no serv idor FTP.

344

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________345

Sin t ax e

FTPERASE( cArquivo ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

cArquiv o Sim C Nom e do arquivo

D escr içã o

A função FTPEr ase( ) apaga arquivo no dir et ór io cor rent e do FTP. Se a oper ação for realizada com sucesso
a função retor nar á v er dadeir o ( .T.) .

Ex em plo

Local cServidor
Local aArqs
Local aDirs
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDisconnect ()
If !FTPConnect ( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf
If FTPDirChange('diretorio')
If !FTPERASE( ‘Arquivo.ext’ )
APMsgI nfo(‘Problemas ao apagar o arquivo!’ )
EndIf
EndIf

FTPGetCurDir
Retorna o dir et ório cor rent e no FTP.

Sin t ax e

FTPGETCURDIR( ) - > car act er

Ex em plo

Local cServidor
Local cCurDir
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDisconnect ()
If !FTPConnect ( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf
cCurDir := FTPGETCURDIR()

FTPRenameFile

345

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________346

Renom eia arquivo no ser vidor FTP.

Sin t ax e

FTPRENAMEFI LE( cAr qAt ual, cAr qNovo ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

Sim C Nom e do ar quivo a ser renom eado.


cArqAt ual

cArqDest Sim C Novo nom e do ar quiv o.

D escr içã o

A função FTPRenam eFile( ) renom eia um arquivo no dir et ór io corr ent e do ser vidor FTP. Se a operação for
realizada com sucesso a função retornar á v er dadeir o ( .T.) .

Ex em plo

Local cServidor
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDisconnect ()
If !FTPConnect ( cServidor )
APMsgI nfo( 'Falha na conexão!' )
EndIf
If FTPDirChange('diretorio')
If !FTPRENAMEFI LE( 'ARQ00001.ARQ', 'ARQ00002.ARQ' )
APMsgInfo( 'Problemas ao renomear arquivo!' )
EndIf
EndIf

FTPUpload
Copia um arquiv o na m áquina local para o serv idor FTP.

Sin t ax e

FTPUPLOAD( cAr qOr ig, cAr qDest ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

Cam inho e nom e do arquivo na m áquina a ser copiado par a o ser vidor
cArqOr i Sim C
FTP.

cArqDest Sim C Nom e do arquivo a ser gr avado no serv idor FTP.

D escr içã o

346

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________347

A função FTPUpload( ) copia um ar quiv o na m áquina local par a o dir et ór io corr ent e no ser vidor FTP. O
ar quivo a ser copiado deve est ar abaixo do RootPat h do Pr otheus. Se a oper ação for r ealizada com
sucesso a função r et or nará ver dadeiro ( .T.) .

Ex em plo

Local cServidor
cServidor := 'ftp.caminhodoserivor.com.br'
FTPDisconnect()
If !FTPConnect( cServidor )
APMsgInfo( 'Falha na conexão!' )
EndIf
If FTPDirChange('diretorio')
If !FTPUPLOAD( '\DIRETORIO\ARQ00001.ARQ', 'ARQ00001.ARQ' )
APMsgInfo( 'Problemas ao copiar arquivo!' )
EndIf
EndIf

FunDesc
Retorna descr ição de um a opção do m enu.

Sin t ax e

FUNDESC( ) - > car acter

D escr içã o

A função FunNam e( ) r et ornar á a descr ição de um a opção selecionada no m enu do Siga.

Ex em plo

Local cDescr
cDescr := FUNDESC()

FunName
Retorna nom e de um a função do m enu.

Sin t ax e

FUNNAME( ) - > car acter

D escr içã o

A função FunNam e( ) r et ornar á o nom e de um a função execut ada a part ir de um m enu do Siga

Ex em plo

Local cFunction
cFunction := FUNNAME()

347

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________348

GetCountryList
Retorna vet or contendo infor m ações dos países localizados.

Sin t ax e

GETCOUNTRYLI ST( ) - > arr ay

D escr içã o

O vetor r et or nado possui t rês dim ensões, a pr im eira r efere- se a sigla dos países, o segundo ao nom e do
país e o t er ceiro a identificação do país com dois dígit os.

Ex em plo

Local aArray := GETCOUNTRYLIST()


Local cSigla := GetMv( “MV_PAISLOC” )
Local nPos
nPos := Ascan( aArray, {|d| d[1] == Upper(cSigla) } )
If nPos > 0
APMsgI nfo( “País de localização ” + aArray[nPos,2] )
EndIf

GetMark
Retorna str ing de caract eres aleat ór ios.

Sin t ax e

GETMARK( [ lMaiusc ] ) - > caract er

Ar gum ento Obrigat . Tipo Descr ição

lMaiusc Não L Se ver dadeir o ( .T.) retorna som ent e car acteres em m aiúsculos.

D escr içã o

A Get Mark ( ) é ut ilizada junt o a função Mar kBrow( ) onde são utilizados com binações de caract eres para
cont r ole de m ar cas.

Ex em plo

Function <nome-da-função>( )
Local aCampos := {{'CB_OK' ,,''},;
{'CB_USERLIB' ,,'Usuário'},;

348

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________349

{'CB_TABHORA' ,,'Hora'},;
{'CB_DTTAB' ,,'Data'}}
Private cMarca := GETMARK()
Private cCadastro := 'Cadastro de Contrato'
Private aRotina := { { 'Pesquisar' , 'AxPesqui' , 0, 1 }}
MarkBrow ( 'SCB', 'CB_OK','!CB_USERLIB',aCampos,, cMarca,'MarkAll()',,,,'Mark()' )
Return

GetMv
Retorna o conteúdo de um parâm et r o cadast r ado no SX6.

Sin t ax e

GETMV( cPar01, [ lPar 02 ] , [ uPar 03 ] ) - > variáv el

Ar gum ento Obrigat . Tipo Descr ição

cPar 1 Sim C Nom e do par âm etr o a ser pesquisado

Define se a Get Mv deve r et ornar o conteúdo do par âm et ro, .F. (


lPar02 Não L Falso ) ou apenas ver ificar se o parâm et r o existe, .T. ( Verdadeiro ) .
Valor default .F. ( Falso ) .

Valor default que deve ser ret or nado pela GetMv quando os
uPar 03 Não U par âm et ro solicit ado não ex ist ir . O valor desse parâm et r o pode ser
car act er , num érico, lógico ou dat a.

D escr içã o

O r et orno da função depende do t ipo infor m ado na cadast r o do parâm et r o e da configur ação dos
ar gum entos lPar 02 e uPar03.

Se lPar 02 for passado com o .T. ( Ver dadeir o ) , o retor no da função ser á um valor lógico indicando se o
parâm et r o ex ist e.

Quando uPar 03 for infor m ado, caso o parâm et r o infor m ado em cPar 01 não exista, o r et or no da função
será o v alor inform ado em uPar03 caso contr ár io retorna o cont eúdo do par âm et ro. Se uPar 03 for
infor m ado o conteúdo de lPar 02 ser á desconsider ado.

Ex em plo

Local cValor := ""


// Retorna o conteúdo do parâmetro
cValor := GETMV( "MV_ESTADO" )
// Verifica se o parâmetro existe
If ( GETMV( "MV_ESTADO", .T. ) )
ApMsgI nfo( "O Parâmetro MV_ESTADO existe !" )
Else
ApMsgStop( "O Parâmetro MV_ESTADO não existe !" )
EndIf
// Retorna o conteúdo do parâmetro
// se não encontrar retorna o valor default passado
cValor := GETMV( "MV_ESTADO", , "SP" )

349

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________350

I ncProc
Incr em enta r égua de progr essão.

Sin t ax e

INCPROC( ) - > nil

D escr içã o

Para incr em ent ar a r égua criada pela função Pr ocessa( ) , ut ilizam os a função IncProc( )

Ex em plo

User Function <nome-da-função>( )


Local bAcao := {|lFim| Exemplo(@lFim) }
Local cTitulo := ''
Local cMsg := 'Processando'
Local lAborta := .T.
Processa( bAcao, cTitulo, cMsg, lAborta )
Return

Static Function Exemplo(lFim)


Local nI
ProcRegua(10000)
For nI := 1 To 10000
If lFim
Exit
EndIf
INCPROC()
Next nI
Return

I ncRegua
Incr em enta v alores na régua de progr essão criada pela função RptStatus( ) .

Sin t ax e

INCREGUA( ) - > nil

D escr içã o

Após execut ar as funções Rpt St at us( ) e Set Regua( ) , par a increm entar valor es na r égua utilizam os a
função IncRegua( ) .

Ex em plo

350

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________351

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administração", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SetPrint ( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SetDefault ( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf
RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )
Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'
Local cCabec2 := 'Cabecalho 2'
dbSelectArea( cAlias )
SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
INCREGUA()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
Roda( 0, cTitulo, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer TO
dbCommitAll()
OurSpool( wrel )
Endif
MS_FLUSH()

351

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________352

Return

I ndRegua
Cr ia índice t em por ár io com expr essão de filtr o.

Sin t ax e

INDREGUA( cAlias, cIndice, cEx pr ess, [ x Or dem ] , [ cFor ] , [ cMens ] , [ lEx ibir ] ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

cAlias Não C Alias da tabela que o índice ser á cr iado.

cI ndece Sim C Nom e do arquivo par a criação do índice.

cExpress Sim C Expressão do índice.

xOrdem Não C I ndica se a ordem ser á crescente ou decrescente.

lEx ibir Não L I ndica se exibir á o diálogo de progr essão.

cFor Não C Expressão de filt r o.

cMens Não C Mensagem do diálogo de progr essão.

D escr içã o

Esta função cria um índice t em por ár io para o alias especificado podendo ou não t er um filt ro e t am bem
podendo ser decr escent e se o parâm et r o xOr dem for especificado com o “ D” . Dur ante a cr iação do índice
um diálogo com um a bar ra de progr essão ser á cr iada podendo esta ser om it ida.

Ex em plo

User Function Exemplo()


Local cArquivo
Local cChave
Local cFor
Local nIndex
DbSelectArea("SA1")
cArquivo := CriaTrab(,.F.)
cChave := "A1_NOME"
cFor := "!Empty(A1_NOME)"
INDREGUA("SA1",cArquivo,cChave,,cFor)
DbSelectArea("SA1")
nIndex := RetIndex("SA1")
#IFNDEF TOP
DbSetIndex(cArquivo+OrdBagExt())
#ENDIF
DbSetOrder(nIndex+1)
.
.
.
DbSelectArea("SA1")
RetIndex("SA1")

352

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________353

FErase(cArquivo+OrdBagExt())
Return

MarkBRefresh
At ualiza a Mark Br ow .

Sin t ax e

MARKBREFRESH( ) - > nil

D escr içã o

Esta função atualiza o br ow se da Mark Br ow .

MarkBrow
Mont a um Br owse onde as linhas podem ser m arcadas ou desm ar cadas.

Sin t ax e

MARKBROW( cAlias, cCam po, [ cCpo ] , [ aCam pos ] , [ lI nv er te ] , cMar ca, [ cCt r lM ] , [ uPar ] , [
cExpIni ] , [ cExpFim ] , [ cAval ] ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

cAlias Sim C Alias do ar quiv o a ser exibido no br owse.

cCam po Sim C Cam po do ar quiv o onde será feit o o contr ole ( gr avação) da m ar ca.

Cam po onde será feit a a validação para m arcação e exibição do


cCpo Não C
bitm ap de st at us.

aCam pos Não A Colunas a serem ex ibidas.

lInvert Não L I nv er t e a m arcação.

cMar ca Sim C Str ing a ser gr av ada no cam po especificado para m ar cação.

cCtr lM Não C Função a ser execut ada caso desej e m arcar todos elem entos.

uPar Não L Par âm et ro r eserv ado.

Função que r et or na o cont eúdo inicial do filt r o baseada na chave de


cExpIni Não C
índice selecionada.

Função que r et or na o cont eúdo final do filt ro baseada na chav e de


cExpFim Não C
índice selecionada.

353

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________354

cAval Não C Função a ser execut ada no duplo clique em um elem ent o no browse.

D escr içã o

A função Mar kBrow( ) per m ite que os elem ent os de um browse sejam m ar cados ou desm arcados.

As v ar iáv eis cCadast ro e aRot ina ( * ) precisam ser declar ados com o pr iv at e acim a da cham ada da função.

O vetor infor m ado no parâm et r o aCam pos dev e cont er as seguint es dim ensões: 1º – nom e do cam po; 2º
- Nada ( Nil) ; 3º - Tít ulo do cam po; 4º - Máscar a ( pict ure) .

( * ) vet or com as r ot inas que serão ex ecut adas, nele será definido o t ipo de oper ação a ser executada
( inclusão, alt er ação, ex clusão, visualização, pesquisa, ...) sua est rutura é com posta de 5 ( cinco)
dim ensões: 1º - Tít ulo; 2º – Rot ina; 3º – Reser vado; 4º – Operação ( 1 - pesquisa; 2 - v isualização; 3 -
inclusão; 4 - alt er ação; 5 - exclusão) ; 5 – Acesso relacionado a r otina, se esta posição não for inform ada
nenhum acesso será v alidado.

Ex em plo

Function <nome-da-função>( )
Local aCampos := { {'CB_OK' ,,''},;
{'CB_USERLIB' ,,'Usuário'},;
{'CB_TABHORA' ,,'Hora'},;
{'CB_DTTAB' ,,'Data'}}
Private cMarca := GetMark()
Private cCadastro := 'Cadastro de Contrato'
Private aRotina := { { 'Pesquisar' , 'AxPesqui' , 0, 1 }}
MARKBROW( 'SCB', 'CB_OK','!CB_USERLIB',aCampos,, cMarca,'MarkAll()',,,,'Mark()' )
Return

// Grava marca no campo


Function Mark()
If IsMark( 'CB_OK', cMarca )
RecLock( 'SCB', .F. )
Replace CB_OK With Space(2)
MsUnLock()
Else
RecLock( 'SCB', .F. )
Replace CB_OK With cMarca
MsUnLock()
EndIf
Return

// Grava marca em todos os registros validos


Function MarkAll()
Local nRecno := Recno()
dbSelectArea('SCB')
dbGotop()
While !Eof()
Mark()
dbSkip()
End
dbGoto( nRecno )
Return

Ms_Flush
Descar rega spool de im pressão.

354

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________355

Sin t ax e

MS_FLUSH( ) - > nil

D escr içã o

Após os com andos de im pressão as infor m ações ficam arm azenadas no spool e são descar r ega em seus
dest inos at r avés da função Ms_Flush( ) .

Exe m plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SetPrint( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SetDefault ( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf
RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )
Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'
Local cCabec2 := 'Cabecalho 2'
dbSelectArea( cAlias )
SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
I ncRegua ()
dbSkip()
End
IF nLin != 80

355

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________356

nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
Roda( 0, cTitulo, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer TO
dbCommitAll()
OurSpool( wrel )
Endif
MS_FLUSH ()
Return

MsAppend
Adiciona registr os de um ar quiv o para out r o.

Sin t ax e

MSAPPEND( [ cAr qDest ] , cAr qOr ig ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

Se o RDD cor r ent e for DBFCDX os r egistr os serão adicionados na ár ea


cArqDest Não C
selecionada, caso contr ár io o arquivo dest ino t er á que ser inform ado.

cArqOr ig Não C Nom e do ar quivo origem cont endo os r egist ros a ser em adicionados.

D escr içã o

A função MsAppend( ) adiciona registr os de um ar quiv o para out r o, r espeitando a est rutur a das tabelas. Se
a oper ação for r ealizada com sucesso o função r et or nará v er dadeiro ( .T.) .

Ex em plo

dbSelectArea(‘XXX’)
MSAPPEND(,‘ARQ00001’)

MsCopyFile
Ex ecut a copia binár ia de um ar quivo.

Sin t ax e

MSCOPYFILE( cAr qOrig, cAr qDest ) - > lógico

356

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________357

Ar gum ento Obrigat. Tipo Descr ição

cArqOr ig Sim C Nom e do ar quivo origem e a ext ensão.

cArqDest Sim C Nom e do ar quivo destino e a ext ensão.

D escr içã o

Se a copia for r ealizada com sucesso a função r et or nar á verdadeir o ( .T.) .

Ex em plo

Local cArqOrig := 'ARQ00001.DBF'


Local cArqDest := 'ARQ00002.XXX'
If MSCOPYFILE( cArqOrig, cArqDest )
APMsgI nfo('Copia realizada com sucesso!')
EndIf

MsCopyTo
Realiza copia de um ar quiv o de dados.

Sin t ax e

MSCOPYTO( [ cAr qOrig ] , cAr qDest ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

Nom e do arquivo origem e a ex tensão se o am bient e for Top o


cArqOr ig Não C
par âm etr o passará a ser obr igat ór io.

cArqDest Sim C Nom e do ar quivo destino e a ext ensão.

D escr içã o

A função MsCopy To( ) copia os r egist r os de um a base de dados par a outr a, cr iando o arquivo dest ino de
acor do com a estr ut ur a da base de dados origem .

Se a oper ação for realizada com sucesso o função r etornar á ver dadeir o ( .T.)

Ex em plo

Local cArqDest := 'SX2ZZZ.DBF'


DbSelectArea('SX2')
If MSCOPYTO( , cArqDest )
APMsgI nfo('Copia realizada com sucesso!')
Else
APMsgInfo('Problemas ao copiar o arquivo SX2!')
EndIf

357

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________358

MsCreate
Cr ia ar quiv o de dados.

Sin t ax e

MSCREATE( cAr quiv o, aEst r ut ,[ cDr iver ] ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

cArquivo Não C Nom e do ar quivo.

aEst rut Sim A Est rut ur a do ar quiv o.

cDriver Não C RDD do ar quiv o.

D escr içã o

A função MsCreat e( ) cria um arquivo ( t abela) de acordo com a est r ut ur a infor m ada no parâm et r o aSt r ut
( * ) . Se o par âm etr o cDr iv er não for infor m ado o RDD corr ent e será assum ido com o padr ão. Par a cr iação
de t abelas no TopConnect é necessário est ar conect ado ao banco e o envir onm ent do Pr ot heus ser TOP.

Se o ar quiv o for cr iado com sucesso a função r etornar á v er dadeir o ( .T.) .

( * ) v et or contendo a est rutura da t abela: 1º - caract er , nom e do cam po; 2º - car act er , t ipo do cam po; 3º
- num érico, t am anho do cam po; 4º - num érico, decim ais.

Ex em plo

Local cTarget := '\sigaadv\'


Local aStrut
aStrut := { { 'Campo', 'C', 40, 0 } }
If MSCREATE( cTarget+'ARQ1001', aStrut )
APMsgI nfo('Criado com sucesso!')
Else
APMsgInfo('Problemas ao criar o arquivo!')
EndIf

MsErase
Deleta ar quiv o.

Sin t ax e

MSERASE( cArquivo, [ cI ndice ] , [ cDr iv er ] ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

358

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________359

cArquivo Sim C Nom e do ar quivo e a ex tensão.

cI ndice Não C Nom e do ar quivo de índice e a ext ensão.

RDD do arquivo, se não for infor m ado assum ir á o RDD cor r ent e com o
cDriver Não C
padrão.

D escr içã o

A função MsEr ase( ) r et or nará v er dadeiro ( .T.) se a oper ação for r ealizada com sucesso.

Ex em plo

Local cArquivo := 'SX2ZZZ.DBF'


Local cIndice := 'SX2ZZZ'+ OrdBagExt()
If MSERASE( cArquivo, cIndice )
APMsgI nfo( 'Arquivo deletado com sucesso!' )
Else
APMsgInfo( 'Problemas ao deletar arquivo!' )
EndIf

MsFile
Verifica existência de um arquivo.

Sin t ax e

MSFILE( cArquivo, [ cIndice ], [ cDriver ] ) -> lógico

Ar gum ento Obrigat. Tipo Descr ição

cArquivo Sim C Nom e do ar quivo origem e a ext ensão.

cI ndice Não C Nom e do ar quivo de índice e a ext ensão.

RDD do arquivo, se não for infor m ado assum ir á o RDD cor r ent e com o
cDriver Não C
padrão.

D escr içã o

A função MsFile() retornará verdadeiro (.T.) se a operação for realizada com sucesso.

Ex em plo

Local cArquivo := 'SX2ZZZ.DBF'


Local cIndice := 'SX2ZZZ'+ OrdBagExt()
If !MSFILE( cArquivo, cIndice )

359

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________360

APMsgI nfo( 'Arquivo não encontrado!' )


EndIf

MsRename
Renom eia arquivo de acordo com RDD cor r ente.

Sin t ax e

MSRENAME( cAr qOr ig, cArqDest ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

cArqOr ig Sim C Nom e do ar quivo origem e a ext ensão.

cArqDest Sim C Nom e do ar quivo destino e a ext ensão.

D escr ição

A função MsRenam e( ) retor nar á v er dadeir o ( .T.) se efet uar a operação com sucesso.

Ex em plo

Local cTarget := '\sigaadv\'


Local cArqOrig := 'ARQ00001.DBF'
Local cArqDest := 'ARQ00002.DBF'
If MSRENAME( cTarget + cArqOrig, cTarget + cArqDest )
APMsgI nfo('Arquivo renomeado com sucesso!')
Else
APMsgInfo('Problemas ao renomear o arquivo ' + cArqOrig + '!')
EndIf

MsUnlock
Liber a lock de r egist ro.

Sin t ax e

MSUNLOCK( ) - > nil

D escr içã o

A função MsUnlock( ) libera os r egist ros bloqueados pela função RecLock ( ) .

Não ret or na v alor es.

Ex em plo

360

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________361

RecLock( 'XXX' ,.F. )


Replace Campo With '000001'
MSUNLOCK()

OurSpool
Gerenciador de im pr essão.

Sin t ax e

OURSPOOL( [ cAr quivo ] ) - > nil

Ar gum ento Obrigat. Tipo Descr ição

cArquivo Sim C Relat ór io ger ado em disco

D escr içã o

A função Our Spool( ) ex ecut a o gerenciador de im pr essão do Siga, car r egando os relatór ios gerados no
dir et ór io configur ado at r av és par âm etr o MV_RELT no dicionário SX6. Caso quiser visualizar um relatór io
específico, infor m e o nom e no par âm etr o cAr quiv o.

Ex em plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SetPrint ( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SetDefault ( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf
RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )
Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'

361

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________362

Local cCabec2 := 'Cabecalho 2'


dbSelectArea( cAlias )
SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
IncRegua()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
Roda( 0, cTitulo, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer To
dbCommitAll()
OURSPOOL( wrel )
Endif
MS_FLUSH()
Return

Pergunte
Inicializa as v ar iáv eis de pergunta ( m v _par ??) .

Sin t ax e

PERGUNTE( cPergunta , [ lPer g ] , [ cTitulo ] ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

cPer gunt a Sim C Per gunt a cadastr ada no dicionár io de dados ( SX1) a ser ut ilizada.

lPerg Não L I ndica se exibir á a t ela par a edição.

cTitulo Não C Título do diálogo.

D escr içã o

Esta função inicializa as variáv eis de per gunt a ( m v _par 01,...) baseado na per gunt a cadast rado no
Dicionário de Dados ( SX1) . Se o parâm et r o lAsk não for especificado ou for v er dadeir o ser á ex ibida a t ela

362

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________363

para edição da per gunt a e se o usuár io confirm ar as var iáv eis ser ão atualizadas e a pergunta no SX1
tam bém será at ualizada.

Ex em plo

PERGUNTE(“CON010”)

Processa
Cr ia diálogo com um a régua de pr ogressão.

Sin t ax e

PROCESSA( bAcao, [ cTit ulo ] , [ cMsg ] , [ lAbor ta] ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

bAcao Sim C Função a ser execut ada.

cMsg Não C Mensagem a ser ex ibida a baix o da r égua de progr essão

cTitulo Não C Título de j anela

lAbor ta Não L Habilit a botão cancelar.

D escr içã o

A função Pr ocessa( ) cr ia um diálogo onde a execução de um determ inada função pode ser acom panhada
at r avés de um a r égua de pr ogr essão. Par a at r ibuir o valor t ot al da r égua utilizam os a função ProcRegua( )
e para incr em entar a r égua utilizam os a função IncProc( ) .

Exe m plo

User Function <nome-da-função>( )


Local bAcao := {|lFim| Exemplo(@lFim) }
Local cTitulo := ''
Local cMsg := 'Processando'
Local lAborta := .T.
PROCESSA( bAcao, cTitulo, cMsg, lAborta )
Return

Static Function Exemplo(lFim)


Local nI
ProcRegua(10000)
For nI := 1 To 10000
If lFim
Exit
EndIf
I ncProc()
Next nI

363

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________364

Return

ProcRegua
At ribui o valor t ot al da régua de progr essão cria pela pela função Pr ocessa( ) .

Sin t ax e

PROCREGUA( nTot al ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

nTot al Sim N Valor tot al da r égua.

D escr içã o

Após atr ibuir o valor t otal da régua, para incr em ent ar ut ilizam os a função I ncPr oc( ) .

Exe m plo

User Function <nome-da-função>( )


Local bAcao := {|lFim| Exemplo(@lFim) }
Local cTitulo := ''
Local cMsg := 'Processando'
Local lAborta := .T.
Processa( bAcao, cTitulo, cMsg, lAborta )
Return

Static Function Exemplo(lFim)


Local nI
PROCREGUA(10000)
For nI := 1 To 10000
If lFim
Exit
EndIf
IncProc()
Next nI
Return

Psw Admin
Verifica se um usuár io pert ence ao grupo de adm inist r ador es.

Sin t ax e

PSWADMIN( cUsuar io, cSenha ) - > num érico

Ar gum ento Obrigat. Tipo Descr ição

cUsuar io Sim C Nom e do usuário.

364

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________365

cSenha Sim C Senha do usuário.

D escr içã o

A função PswAdm in( ) ret or na 0 ( zero) se o usuário for do grupo de adm inist r ador es, 1 ( um ) par a usuár io
não adm inist r ador e 2 ( dois) se for senha inv álida.

Ex em plo

User Function <nome-da-função>( cUsuario, cSenha )


Local lAdminst := .F.
Local nRet
nRet := PSWADMIN( cUsuario, cSenha )
If nRet == 0
lAdminst := .T.
ElseIf nRet == 1
APMsgInfo( “Usuário não é Administrador !” )
ElseIf nRet == 2
APMsgInfo( “Senha invalida !” )
EndIf
Return lAdminst

Psw I D
Retorna o I D do usuár io ou do grupo de usuário.

Sin t ax e

PSWID( ) - > car act er

D escr içã o

Ut ilizada para r et or nar o I D do usuár io ou do gr upo de usuár ios após ter posicionado o ar quiv o de senha
com a função PswSeek ( ) .

Ex em plo

User Function <nome-da-função>( cUsuario )


Local cUserID
PswOrder (2)
If PswSeek ( cUsuario, .T. )
cUserId := PSWID() // Retorna o ID do usuário
EndIf
Return

PswName
Verifica senha de usuário.

Sin t ax e

365

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________366

PSWNAME( cSenha ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

cSenha Sim C Senha do usuário.

D escr içã o

A função PswNam e( ) v er ifica se a senha inform ada no parâm et r o cSenha per tence ao usuário posicionado
no arquiv o de senha, se pert encer r et ornar á verdadeir o( .T.) .

Ex em plo

User Function <nome-da-função>( cUsuario, cSenha )


Local lOk
PswOrder (2)
If PswSeek ( cUsuario, .T. )
lOk := PSWNAME( cSenha )
EndIf
Return lOk

PswOrder
Posiciona a or dem de index ação do ar quivo de senhas.

Sin t ax e

PSWORDER( nOrdem ) - > nil

Ar gum ento Obrigat . Tipo Descr ição

nOrdem Sim N Ordem de indexação.

D escr içã o

A função PswOr der( ) posiciona a ordem de indexação de acor do com o par am etr o nOr dem , onde:

1 – I D;

2 – usuário;

3 – senha; e

4 – e- m ail.

Ex em plo

User Function <nome-da-função>( cUsuario )


Local cUserID
PSWORDER(2)

366

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________367

If PswSeek( cUsuario, .T. )


cUserId := PswID() // Retorna o ID do usuário
EndIf
Return

PswRet
Retorna vet or contendo infor m ações do Usuário ou do Gr upo de Usuár ios.

Sin t ax e

PSWRET( ) - > ar ray

D escr içã o

A função PswRet( ) r et or na dois t ipos de v et or es dist int os, de acor do com o posicionam ent o do ar quiv o de
senha. Se no segundo par âm etr o da função PswSeek( ) for inform ado .T. a PswRet ( ) r etornar á um v et or
com infor m ações do Usuár ios, caso cont r ár io retor nar á inform ações do Grupo de Usuários.

Ex em plo

// Exemplo 1
User Function <nome-da-função>( cUsuario )
Local aArray := {}
PswOrder (2)
If PswSeek ( cUsuario, .T. )
aArray := PSWRET() // Retorna vetor com informações do usuário
EndIf
Return
// Exemplo 2
User Function <nome-da-função>( cGrupoID )
Local cGrupo
PswOrder(1)
If PswSeek( cGrupoId, .F. )
cGrupo := PSWRET()[1][2] // Retorna nome do Grupo de Usuário
EndIf
Return

PswSeek
Pesquisa e posiciona o ar quiv o de senhas.

Sin t ax e

PSWSEEK( cI D, [ lUsuario ] ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

cI D Sim C Str ing cont endo o I D do usuár io ou do grupo de usuários.

lUsuar io Não L
Se verdadeir o ( .T.) pesquisa por usuár ios, se falso ( .F.) pesquisa por
grupo de usuár ios. O valor assum ido com o padrão é .T.

367

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________368

grupo de usuár ios. O valor assum ido com o padrão é .T.

D escr içã o

A função PswSeek( ) pesquisa e posiciona o ar quiv o de senhas confor m e a or dem de indexação e o


parâm et r o lUsuar io, se encontr ar o usuár io ou grupo de usuários ret or na v er dadeir o ( .T.) .

Ex em plo

User Function <nome-da-função>( cUsuario )


Local cUserID
PswOrder (2)// seleciona ordem de indexação
If PSWSEEK( cUsuario, .T. )
cUserId := PswID() // Retorna o ID do usuário
EndIf
Return

ReadVar
Retorna o nom e da var iável que est a sendo editada.

Sin t ax e

READVAR( ) - > car acter

D escr içã o

Retorna o nom e da variável que est a sendo editada pela MsGetDados, MsGet DB e MsMGet ( Enchoice) para
ser usada na validação de um cam po por exem plo.

Ex em plo

cVar := READVAR()
If Type(cVar) == “C”
APMsgI nfo(“Opção escolhida: ”+&cVar)
EndIf

RetAcsName
Retorna a ext ensão do ar quiv o de acessos corr ent e.

Sin t ax e

RETACSNAME( ) - > car acter

D escr içã o

A função RetAscNam e ret or na a ext ensão do ar quiv o de acessos de acor do com idiom a cor rent e.

368

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________369

Ex em plo

Local cExt
cExt := RETACSNAME()
If ‘ACS’ $ cExt
APMsgI nfo( ‘Menu Português’ )
ElseIf ‘ACE’ $ cExt
APMsgInfo( ‘Menu Espanhol' )
ElseIf ‘ACI’ $ cExt
APMsgInfo( ‘Menu Inglês’ )
EndIf

RetExtHlp
Retorna a ext ensão do help de cam po.

Sin t ax e

RETEXTHLP( ) - > car acter

D escr içã o

Esta função r et orna um a st ring cont endo a ext ensão do help de cam pos de acordo com idiom a corr ente.

Ex em plo

Local cExt
cExt := RETEXTHLP()
If ‘HLP’ $ cExt
APMsgI nfo( ‘Help de Campos em Português’ )
ElseIf ‘HLE’ $ cExt
APMsgInfo( ‘Help de Campos em Espanhol' )
ElseIf ‘HLI’ $ cExt
APMsgInfo( ‘Help de Campos em Inglês’ )
EndIf

RetExtHls
Retorna a ext ensão do help de soluções.

Sin t ax e

RETEXTHLS( ) - > car acter

D escr içã o

Esta função r et orna um a st ring cont endo a ext ensão do help de soluções de acor do com idiom a cor rent e.

Ex em plo

Local cExt

369

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________370

cExt := RETEXTHLS()
If ‘HLS’ $ cExt
APMsgI nfo( ‘Help de Soluções em Português’ )
ElseIf ‘HSE’ $ cExt
APMsgInfo( ‘Help de Soluções em Espanhol' )
ElseIf ‘HSI’ $ cExt
APMsgInfo( ‘Help de Soluções em Inglês’ )
EndIf

RetExtHpr
Retorna a ext ensão do help do pr ogram a.

Sin t ax e

RETEXTHPR( ) - > car acter

D escr içã o

Esta função retor na um a st ring contendo a ext ensão do help de pr ogram as de acor do com idiom a
corr ent e.

Ex em plo

Local cExt
cExt := RETEXTHPR()
If ‘HPR’ $ cExt
APMsgI nfo( ‘Help de Programas em Português’ )
ElseIf ‘HPE’ $ cExt
APMsgInfo( ‘Help de Programas em Espanhol' )
ElseIf ‘HPI’ $ cExt
APMsgInfo( ‘Help de Programas em Inglês’ )
EndIf

RetExtMnu
Retorna a ext ensão do m enu corr ente.

Sin t ax e

RETEXTMNU( ) - > caract er

D escr içã o

Esta função r et orna um a st ring cont endo a ext ensão do m enu de acor do com idiom a cor rent e.

Ex em plo

Local cExt
cExt := RETEXTMNU()
If ‘MNU’ $ cExt

370

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________371

APMsgI nfo( ‘Menu Português’ )


ElseIf ‘MNS’ $ cExt
APMsgInfo( ‘Menu Espanhol’ )
ElseIf ‘MNE’ $ cExt
APMsgInfo( ‘Menu Inglês’ )
EndIf

RetFileName
Retorna o nom e de um arquiv o sem o cam inho e sem a ex tensão.

Sin t ax e

RETFILENAME( cAr quiv o ) - > car act er

Ar gum ento Obrigat. Tipo Descr ição

cArquivo Sim C Str ing contendo o nom e do ar quivo

D escr içã o

A função Ret FileNam e( ) retor na o nom e de um ar quivo contido em um a st ring, ignor ando o cam inho e a
ex tensão.

Ex em plo

Local cArquivo := '\SIGAADV\ARQZZZ.DBF'


cArquivo := RETFILENAME( cArquivo )
// retorno ‘ARQZZZ’

Roda
Im pr im e rodapé no r elat ór io.

Sin t ax e

RODA( [ uPar 1 ] , [ uPar2 ] , [ cTam anho ] ) - > nil

Ar gum ento Obrigat. Tipo Descr ição

uPar1 Não U Par âm et ro r eser v ado

uPar 2 Não U Par âm et ro r eser v ado

Tam anho do r odapé "P", " M" , " G" . Se o par âm et ro não for infor m ado,
cTam anho Não C
" M" ser á assum ido com o padr ão.

371

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________372

Ex em plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SetPrint ( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SetDefault ( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf
RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )
Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'
Local cCabec2 := 'Cabecalho 2'
dbSelectArea( cAlias )
SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
I ncRegua ()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
RODA( ,, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer TO
dbCommitAll()
OurSpool( wrel )

372

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________373

Endif
MS_FLUSH()
Return

RptStatus
Cr ia um diálogo com r égua de progr essão.

Sin t ax e

RPTSTATUS( bAcao, [ cTitulo ] , [ cMsg ] ) - > nil

Ar gum ento Obrigat. Tipo Descr ição

bAcao Sim C Contendo a função a ser executada.

cTit ulo Não C Tit ulo da j anela.

cMsg Não C Mensagem a ser ex ibida a baixo da r égua de pr ogr essão.

D escr içã o

A função Rpt St at us( ) ex ibe um diálogo onde a ex ecução da função de relat ór io pode ser acom panhada
at r avés de um a régua de pr ogr essão. Par a cont rolar a r égua ut ilizam os as funções Set Regua( ) para
at r ibuir o valor t ot al da r égua, e a função I ncRegua( ) par a increm entar. Caso o pr ocessam ent o seja
int er rom pido at r avés do botão cancelar, um valor lógico é ret or nado no parâm et r o do código de bloco.

Exe m plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SetPrint ( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SetDefault ( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf

373

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________374

RPTSTATUS( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )


Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'
Local cCabec2 := 'Cabecalho 2'
dbSelectArea( cAlias )
SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
I ncRegua ()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
Roda( 0, cTitulo, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer TO
dbCommitAll()
OurSpool( wrel )
Endif
MS_FLUSH()
Return

SetDefault
Pr epar a am biente de im pressão.

Sin t ax e

SETDEFAULT( aReturno, [ cAlias ] , [ uPar 1 ] , [ uPar 2 ] , [ cTam anho ] , [ nFor m ato ] ) - > nil

Ar gu m e n t o Ob riga t . Tip o D e scriçã o

aRet ur no Sim A Configurações de im pr essão.

cAlias Não C Alias do arquivo a ser im pr esso.

uPar 1 Não U Par âm etr o r eser vado.

374

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________375

uPar 2 Não U Par âm etr o r eser vado.

cTam anho Não C Tam anho da página "P" ," M" ou " G"

nFor m at o Não N For m at o da página, 1 r et r at o e 2 paisagem .

D escr içã o

Após ex ecut ar a função Set Pr int ( ) o v et or aRet ur n cont er á as infor m ações necessár ias par a que
SetDefault ( ) pr epar e o am bient e de im pr essão.

Ex em plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SetPrint ( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SETDEFAULT( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf
RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )
Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'
Local cCabec2 := 'Cabecalho 2'
dbSelectArea( cAlias )
SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...

375

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________376

@ nLin,000 PSAY __PrtThinLine()


I ncRegua ()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
Roda( 0, cTitulo, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer TO
dbCommitAll()
OurSpool( wrel )
Endif
MS_FLUSH()
Return

SetPrint
Int er face onde são configur adas as opções de im pressão.

Sin t ax e

SETPRI NT( cAlias, cPr ogr am a, [ cPerg ] , [ cTit ulo ] , [ cDesc1 ] , [ cDesc2 ] , [ cDesc3 ] , [ lDic ] , [ aOrd
] , [ lCom pr es ] , [ cTam ] , [ uPar 1 ] , lFiltr o, [ lCr ystal ] , [ cNom eDr v ] , [ uPar 2 ] , [ lSer v idor ] , [
cPor t aI m pr ] ) - > car acter

Ar gum ento Obr igat. Tipo Descr ição

cAlias Sim C Alias do ar quiv o a ser im presso.

cProgr am a Sim C Nom e do ar quivo a ser gerado em disco

cPer g Não C Grupo de perguntas cadastr ado no dicionár io SX1.

cTit ulo Não C Tít ulo do r elat ór io

cDesc1 Não C Descr ição do r elatório.

cDesc2 Não C Continuação da descr ição do r elatório.

cDesc3 Não C Continuação da descr ição do r elatório.

Par a im pr essão de cadast ro genér ico per m it e a escolha dos cam pos a
lDic Não L
ser em im pressos.

aOr d Não A Ordem ( s) de im pressão.

lCom pr es Não L Se verdadeir o ( .T.) habilit a escolha o form at o da im pressão.

cTam Não C Tam anho do r elatório " P" ,"M" ou "G" .

376

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________377

uPar 1 Não U Par âm et ro r eser v ado

lFiltr o Não L Se verdadeir o ( .T.) per m it e a ut ilização do assist ent e de filt ro.

lCry stal Não L Se verdadeir o ( .T.) per m it e int egr ação com Cr ystal Repor t.

cNom eDr v Não


C Nom e de um driv er de im pr essão.

uPar 2 Não U Par âm et ro r eser v ado.


lSer vidor Não L Se verdadeir o ( .T.) força im pr essão no serv idor .
cPor taI m pr Não C Define um a port a de im pr essão padr ão.

D escr içã o

A função Set Pr int ( ) cr ia a interface ( diálogo) onde as opções de im pressão de um relat ór io podem ser
configuradas. Basicam ent e duas v ar iáveis m _pag ( * ) e aRet ur n ( * * ) precisam ser declar adas com o
pr ivadas ( privat e) ant es de ex ecut ar a Set Print ( ) . Após confirm ada, os dados são ar m azenados no v et or
aRet ur n que ser á passado com o par âm etr o par a função SetDefault ( ) .

( * ) contr ola o núm er o de páginas.

( * * ) v et or cont endo as opções de im pr essão, sua est r ut ur a é com post a de 8 ( oit o) elem ent os: 1º -
caract er, t ipo do for m ulário; 2º - num ér ico, opção de m ar gem ; 3º - caract er , destinat ár io; 4º - num érico,
for m at o da im pressão; 5º - num érico, disposit ivo de im pr essão; 6º - reserv ado; 7º - r eser vado; 8º -
num ér ico, ordem .

Ex em plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório
Local cAlias := 'XXX' // alias do arquivo
Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SETPRINT( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SetDefault ( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf
RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )
Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'

377

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________378

Local cCabec2 := 'Cabecalho 2'


dbSelectArea( cAlias )
SetRegua( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
I ncRegua ()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
Roda( 0, cTitulo, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer TO
dbCommitAll()
OurSpool( wrel )
Endif
MS_FLUSH()
Return

SetRegua
At ribui valor t ot al da r égua de progr essão.

Sin t ax e

SETREGUA( nTotal ) - > nil

Ar gum ento Obrigat. Tipo Descr ição

nTot al Sim N Valor total da r égua.

D escr içã o

Após executar a função RptStat us( ) é necessár io at ribuir o v alor t otal da sua régua, isso será feit o atr av és
da função Set Regua( ) .

Ex em plo

User Function <nome-da-função>( )


Local cProgram := 'Exemplo' // nome do relatório

378

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________379

Local cAlias := 'XXX' // alias do arquivo


Local cPerg := 'XXXXXX' // grupo de perguntas
Local cTitulo := 'Titulo do relatório'
Local cDesc1 := 'Descrição'
Local cDesc2 := 'continuação da descrição'
Local cDesc3 := 'continuação da descrição'
Local lDic := .F. // não utiliza dicionário
Local aOrd := { '1º Ordem', '2º ordem', '3º ordem' }
Local lCompres :=.F.
Local cTam := "G"
Private m_pag := 1
Private aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
Private wrel
Pergunte( cPerg, .F. )
wrel := SetPrint ( cAlias, cProgram, cPerg, @cTitulo, cDesc1, cDesc2, cDesc3, lDic, aOrd ,
lCompres, cTam )
If nLastKey == 27
Set Filter To
Return
EndIf
SetDefault ( aReturn, cAlias )
If nLastKey == 27
Set Filter To
Return
EndIf
RptStatus( {|lFim| Imprime( @lFim, cAlias, cTitulo, cProgram, cTamanho ) }, cTitulo )
Return

// rotina de impressão
Static Function Imprime( lFim, cAlias, cTitulo, cProgram, cTamanho )
Local nLin := 80
Local cCabec1 := 'Cabecalho 1'
Local cCabec2 := 'Cabecalho 2'
dbSelectArea( cAlias )
SETREGUA( RecCount() )
While !Eof() .And. ( XX_COD >= MV_PAR01 .And. XX_COD <= MV_PAR02 )
If lFim
@Prow()+1,001 PSAY "CANCELADO PELO OPERADOR"
Exit
EndIf
If nLin > 58
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
nLin := 8
EndIf
@ nLin,000 PSAY __PrtFatLine()
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin++,001 PSAY ...
@ nLin,000 PSAY __PrtThinLine()
I ncRegua ()
dbSkip()
End
IF nLin != 80
nLin++
If nLin > 60
Cabec( cTitulo, cCabec1, cCabec2, cProgram, cTamanho, 15 ) // cabeçalho
Endif
@ nLin,000 PSAY __PrtThinLine()
Roda( 0, cTitulo, cTamanho ) // Rodapé
EndIf
If aReturn[5] = 1
Set Printer TO
dbCommitAll()
OurSpool( wrel )
Endif
MS_FLUSH()
Return

379

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________380

SixDescricao
Retorna descr ição de um a chav e de índice.

Sin t ax e

SI XDESCRI CAO( ) - > car act er

D escr içã o

Esta função r et or na a descrição da chav e de índice, de acor do com o r egist ro posicionado no SI X e idiom a
corr ent e.

Ex em plo

User Function <nome-da-função>( cChave, cOrdem )


Local cSixDesc := “”
dbSelectArea(“SIX”)
dbSetOrder(1)
If dbSeek(cChave+cOrdem)
cSixDescr := SIXDESCRICAO()
EndIf
Return

VerSenha
Verifica se o usuár io tem acesso a det er m inada opção.

Sin t ax e

VERSENHA( nOpc ) - > lógico

Ar gum ento Obrigat . Tipo Descr ição

nOpc Sim N Núm ero da opção.

D escr içã o

Esta função verifica se o usuár io cor rent e t em acesso a determ inada opção que foi cadastr ada no
Configur ador nas pr opr iedades do usuár io ( “ Excluir pr odut o” ,” Alt erar pr odut o” ,...) .

Ex em plo

If !VERSENHA(36) //verifica se o usuário pode alterar a data base do sistema.


Return
EndIf

380

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________381

X1Def01
Retorna o conteúdo da prim eira definição da pergunta ( caso sej a com bo) .

Sin t ax e

X1DEF01( ) - > car act er

D escr içã o

O cont eúdo r etornado pela função ser á de acor do com o regist r o posicionado no SX1 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cGrupo, cPerg )


Local cDef01
Local cDef02
Local cDef03
Local cDef04
Local cDef05
dbSelectArea(“SX1”)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDef01 := X1DEF01()
cDef02 := X1Def02()
cDef03 := X1Def03()
cDef04 := X1Def04()
cDef05 := X1Def05()
EndIf
Return

X1Def02
Retorna o conteúdo da segunda definição da pergunta ( caso seja com bo) .

Sin t ax e

X1DEF02( ) - > car act er

D escr içã o

O cont eúdo r etornado pela função ser á de acor do com o regist r o posicionado no SX1 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cGrupo, cPerg )


Local cDef01

381

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________382

Local cDef02
Local cDef03
Local cDef04
Local cDef05
dbSelectArea(“SX1”)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDef01 := X1Def01()
cDef02 := X1DEF02()
cDef03 := X1Def03()
cDef04 := X1Def04()
cDef05 := X1Def05()
EndIf
Return

X1Def03
Retorna o conteúdo da t erceir a definição da per gunt a ( caso sej a com bo) .

Sin t ax e

X1DEF03( ) - > car act er

D escr içã o

O cont eúdo r etornado pela função ser á de acor do com o regist r o posicionado no SX1 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cGrupo, cPerg )


Local cDef01
Local cDef02
Local cDef03
Local cDef04
Local cDef05
dbSelectArea(“SX1”)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDef01 := X1Def01()
cDef02 := X1Def02()
cDef03 := X1DEF03()
cDef04 := X1Def04()
cDef05 := X1Def05()
EndIf
Return

X1Def04
Retorna o conteúdo da quart a definição da per gunt a ( caso seja com bo) .

Sin t ax e

X1DEF04( ) - > car act er

382

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________383

D escr içã o

O cont eúdo r etornado pela função ser á de acor do com o regist r o posicionado no SX1 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cGrupo, cPerg )


Local cDef01
Local cDef02
Local cDef03
Local cDef04
Local cDef05
dbSelectArea(“SX1”)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDef01 := X1Def01()
cDef02 := X1Def02()
cDef03 := X1Def03()
cDef04 := X1DEF04()
cDef05 := X1Def05()
EndIf
Return

X1Def05
Retorna o conteúdo da quint a definição da pergunta ( caso seja com bo) .

Sin t ax e

X1DEF05( ) - > car act er

D escr içã o

O cont eúdo r etornado pela função ser á de acor do com o regist r o posicionado no SX1 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cGrupo, cPerg )


Local cDef01
Local cDef02
Local cDef03
Local cDef04
Local cDef05
dbSelectArea(“SX1”)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDef01 := X1Def01()
cDef02 := X1Def02()
cDef03 := X1Def03()
cDef04 := X1Def04()
cDef05 := X1DEF05()
EndIf
Return

X1Pergunt

383

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________384

Retorna descr ição de um a pergunta cont ida no dicionário de dados SX1.

Sin t ax e

X1PERGUNT( ) - > caract er

D escr içã o

O cont eúdo r etornado pela função ser á de acor do com o regist r o posicionado no SX1 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cGrupo, cPerg )


Local cDescr
dbSelectArea(“SX1”)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDescr := X1PERGUNT()
EndIf
Return

X2Nome
Retorna o descr ição de um a t abela contida no dicionár io de dados SX2.

Sin t ax e

X2NOME( ) - > car act er

D escr içã o

O cont eúdo r etornado pela função ser á de acor do com o regist r o posicionado no SX2 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( )


Local cTabela
dbSelectArea(“SX2”)
dbSetOrder(1)
If dbSeek( “SA1” )
cTabela := X2NOME()
EndIf
Return

384

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________385

X3CBox
Retorna o conteúdo de um cam po t ipo com bo contido no dicionár io de dados SX3

Sin t ax e

X3CBOX( ) - > variáv el

D escr içã o

Esta função r et or na cont eúdo do cam po com bo de acordo com o registr o posicionado no SX3 e o idiom a
corr ent e.

Ex em plo

User Function <nome-da-função>( )


Local cTitulo
Local cDescri
Local cCombo
dbSelectArea(“SX3”)
dbSetOrder(2)
If dbSeek( cCampo )
cTitulo := X3Titulo()
cDescri := X3Descri()
cCombo := X3CBOX()
EndIf
Return

X3Descric
Retorna o descr ição de um cam po cont ido no dicionár io de dados SX3

Sin t ax e

X3DESCRIC( ) - > car acter

D escr içã o

Esta função r et or na a descr ição do cam po de acor do com o r egistr o posicionando no SX3 e o idiom a
corr ent e.

Ex em plo

User Function <nome-da-função>( )


Local cTitulo
Local cDescri
Local cCombo
dbSelectArea(“SX3”)
dbSetOrder(2)
If dbSeek( cCampo )
cTitulo := X3Titulo()
cDescri := X3DESCRIC()
cCombo := X3Cbox()

385

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________386

EndIf
Return

X3Picture
Retorna a m ascar a de um cam po do dicionár io de dados SX3.

Sin t ax e

X3PI CTURE( cCam po ) - > car act er

Ar gum ento Obr igat . Tipo Descr ição

cCam po Sim C Nom e de um cam po cadastr ado no SX3

Ex em plo

User Function <nome-da-função>( cCampo )


Local cPicture
cPicture := X3PICTURE( cCampo )
Return cPicture

X3Titulo
Retorna o t ítulo de um cam po contido no dicionár io de dados SX3

Sin t ax e

X3TI TULO( ) - > caract er

D escr içã o

Esta função r et orna o t ít ulo do cam po de acor do com o r egist ro posicionado no SX3 e o idiom a corr ente.

Ex em plo

User Function <nome-da-função>( )


Local cTitulo
dbSelectArea(“SX3”)
dbSetOrder(2)
If dbSeek( “A1_COD” )
cTitulo := X3TITULO()
EndIf
Return

X3Uso

386

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________387

Verifica se o cam po est á disponível par a uso.

Sin t ax e

X3USO( cUsado, [ nModulo ] ) - > lógico

Ar gum ento Obrigat. Tipo Descr ição

Conteúdo do cam po X3_USADO a ser


cUsado Sim C
pesquisado

Num ero do m ódulo, caso não seja


nModulo Não N inform ado ser á assum ido com o
padrão o núm er o do m ódulo cor r ente.

D escr içã o

Esta função r et ornar á um v alor lógico, se for um a cam po usado v er dadeir o ( .T.) , caso cont rário falso ( .F.) .

Ex em plo

User Function <nome-da-função>()


Local lUsado := .F.
DbSelectArea(“SX3”)
DbSetOrder(2)
DbSeek(“A1_COD”)
If X3USO( SX3->X3_USADO )
lUsado := .T.
EndIf
Return lUsado

X5Descri
Retorna a descr ição de um a t abela cadastr ada no dicionár io de dados SX5

Sin t ax e

X5DESCRI( ) - > caract er

D escr içã o

Esta função ret or na a descr ição da tabela de acor do com o regist r o posicionado no SX5 e o idiom a
corr ent e.

Ex em plo

User Function <nome-da-função>( cFilial, cTabela, cChave )


Local cDescr
dbSelectArea(“SX5”)
dbSetOrder(1)
If dbSeek( cFilial+cTabela+cChave )
cDescr := X5DESCRI()
EndIf
Return

387

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________388

X6Conteud
Retorna o conteúdo do par âm et ro cadast rado no dicionário de dados SX6.

Sin t ax e

X6CONTEUD( ) - > caract er

D escr içã o

Esta função r et or na o cont eúdo de um parâm et r o de acordo com o registr o posicionado no SX6 e idiom a
corr ent e.

Ex em plo

User Function <nome-da-função>( cFilial, cParam )


Local cDescr
Local cConteud
dbSelectArea(“SX6”)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6Descric()
cDescr += X6Desc1()
cDescr += X6Desc2()
cConteud := X6CONTEUD()
EndIf
Return

X6Desc1
Retorna o prim eir o com plem ent o da descr ição de um parâm etr o cadast r ado no dicionár io de dados SX6.

Sin t ax e

X6DESC1( ) - > car acter

D escr içã o

Esta função r et or na o cont eúdo do pr im eir o com plem ento da descr ição de um par am et ro de acor do com o
registr o posicionado no SX6 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cFilial, cParam )


Local cDescr
Local cConteud

388

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________389

dbSelectArea(“SX6”)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6Descric()
cDescr += X6DESC1()
cDescr += X6Desc2()
cConteud := X6Conteud()
EndIf
Return

X6Desc2
Retorna o segundo com plem ent o da descr ição de um parâm etr o cadast r ado no dicionár io de dados SX6.

Sin t ax e

X6DESC2( ) - > caract er

D escr içã o

Esta função r et or na o cont eúdo do segundo com plem ento da descr ição de um par âm et ro de acor do com o
registr o posicionado no SX6 e o idiom a cor rent e.

Ex em plo

User Function <nome-da-função>( cFilial, cParam )


Local cDescr
Local cConteud
dbSelectArea(“SX6”)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6Descric()
cDescr += X6Desc1()
cDescr += X6DESC2()
cConteud := X6Conteud()
EndIf
Return

X6Descric
Retorna a descr ição de um parâm et r o cadast rado no dicionár io de dados SX6.

Sin t ax e

X6DESCRIC( ) - > car acter

D escr içã o

Esta função r et or na o cont eúdo da descr ição de um par âm et ro de acor do com o r egist ro posicionado no
SX6 e o idiom a corr ent e.

Ex em plo

389

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________390

User Function <nome-da-função>( cFilial, cParam )


Local cDescr
Local cConteud
dbSelectArea(“SX6”)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6DESCRIC()
cDescr += X6Desc1()
cDescr += X6Desc2()
cConteud := X6Conteud()
EndIf
Return

XADescric
Retorna a descr ição dos folders ( pastas) cadast rados no dicionário de dados SXA.

Sin t ax e

XADESCRI C( ) - > car acter

D escr içã o

Esta função r et or na o cont eúdo da descrição dos folder s de acor do com o r egist ro posicionado no SXA e o
idiom a corr ente.

Ex em plo

User Function <nome-da-função>( cFolder, cNumero )


Local cDescr
dbSelectArea(“SXA”)
dbSetOrder(1)
If dbSeek( cFolder+cNumero ) // alias do folder + numero do folder
cDescr := XADESCRIC()
EndIf
Return

XBDescri
Retorna descr ição de um a consult a SXB.

Sin t ax e

XBDESCRI ( ) - > caract er

D escr içã o

Esta função r et or na o conteúdo da descr ição de um a consult a de acordo com o r egist ro posicionado no
SXB e o idiom a corr ent e.

390

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________391

Ex em plo

User Function <nome-da-função>( cAlias )


Local cDescr
dbSelectArea(“SXB”)
dbSetOrder(1)
If dbSeek( cAlias + “1” )
cDescr := XBDESCRI()
EndIf
Return

I nstalação de Serviços AP6 e AP5 no mesmo Servido

1- Tir e do ar o AP5 Ser ver que est á com o console ( CTRL- BREAK) ;

2- Pare o serv iço do AP6 Ser ver que está autom át ico no Win2000 Serv er ;

3- Rem ov a o ser viço do AP6 Ser ver cham ado pelo iniciar / ex ecut ar o AP6SVR com a cláusula
"- r em ove"

4- I nclua no INI do AP5SVR a cláusula

[ Ser vice]
nam e= AP5
Display nam e= AP5

5- I nclua no INI do AP6SVR a cláusula

[ Ser vice]
nam e= AP6
Display nam e= AP6

391

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________392

6- Suba o serv iço do AP6SVR a par tir de iniciar / executar com a cláusula " - inst all"

7- Suba o serv iço do AP5SVR a par tir de iniciar / executar com a cláusula " - inst all"

Se subir legal os dois, confirm e pelo serv ice do Win2000 que am bos est ão no ar, st art ados e com o
autom áticos.

Se não der cert o, volte à sit uação or iginal, ou sej a, AP6SVR aut om ático com o ser viço e AP5SVR com o
console.

I ntegração Siga Advanced - Office

At r av és do Office Kit, encontr ado no CD de instalação da ver são 407 em diant e, o Siga oferece
int egração com os aplicat ivos do pacot e Office da Micr osoft. É im por t ante lem br ar que o Sig a Adv an ced
po ssu í in t eg ra çã o so m en t e co m o Excel e que a int egr ação com o Wor d est á disponív el som ent e para o
m ódulo de Cont r ole de Docum ent os do Siga Quality Celerina.

I nstalação
Para inst alar o SIGA Advanced for Windows com Microsoft Ex cel, o usuár io deve possuir :
H a rd w ar e – Con fig u r açã o m ín im a: Pentium 133 com 16 MB RAM, r ecom endado Pent ium 166 com 32
MB RAM.
M icr osof t Ex ce l – A v er são m ínim a é 7.0 ( 95) , r ecom endado o uso da v er são 8.0 ( 97)

1. Ex ecu t e o pr ogr am a de in st a la çã o do SI GA Adv an ced .


2. I n st ale o SI GA Off ice Kit n as e st açõe s.

Observações
1. A inst alação do Office Kit dev e ser feit a em t odas as est ações que ir ão utilizar a int egração.
2. A MICROSIGA envia dois ar quiv os exem plos de Planilha Excel, ADVDEMO e ADVDEMO7, para
serem utilizados nas v er sões Excel 97 e Excel 95, r espect ivam ente. Estes ar quiv os são
inst alados no dir et ório X: \ Ar quiv os de Pr ogram a \ SIGA Adv anced Office Kit \ Sam ples ( onde
X: é dr iv e onde est á inst alado o SIGA Adv anced) .

Utilizando a I ntegração

Pode- se acessar o Microsoft Ex cel a part ir de qualquer Módulo SI GA Advanced, com exceção do SI GACFG
( Configur ador ) .

1. Escolha a opção “ Planilha Excel” no m enu Miscelânea.


Se for o pr im eir o acesso ao Micr osoft Excel at ravés do Siga Advanced, ser á solicit ado o dir et ório onde
est á o ex ecut áv el do Micr osoft Excel, essa configuração ser á gr av ada no ar quiv o “ ADV97BRW.I NI ” .
Esse pr ocesso dev e ser r ealizado em cada est ação que for ut ilizar o SI GA Advanced for Windows com o
Micr osoft Ex cel.
2. Clique sobr e o bot ão "OK" para iniciar o Microsoft . Excel. Após a inicialização do Microsoft Excel, a
conexão pode ser cancelada at ravés do SIGA Adv anced, clicando no botão “ Cancelar ” , ou fechando o
Micr osoft Ex cel.

392

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________393

OBS: A int egração som ent e funcionar á se o Ex cel for aber to a part ir do Siga Adv anced.

Usando as funções do Siga no Excel

Ex ist em 4 for m as de se utilizar as funções do SI GA Advanced em um a planilha Ex cel. Veja a seguir :

1. Est e pr ocedim ent o é r ecom endado par a usuár ios m enos exper ientes, pois o Micr osoft Ex cel abr e um a
j anela assistent e para que sej am infor m ados os par âm etr os, facilit ando o uso de referência a outr as
células.
• Clique na célula que dev e receber o r esult ado da função SI GA Advanced e selecione a opção " Funções"
no m enu Inserir .
• No lado esquer do da j anela são r elacionadas as cat egor ias de funções disponíveis. Selecione a cat egor ia
de funções "D ef in id as p elo u su á rio" .
• Na caix a de list agem “ Nom e da Função” , selecione a função que será ut ilizada. Ser á apresent ada um a
j anela Assistent e, onde devem ser infor m ados os par âm etr os da função, confor m e solicitado e definido
pela sua sintaxe.
• I nfor m e os parâm et r os da função e clique no botão " OK" par a finalizar .

2. Outr a for m a de se utilizar as funções SI GA, é digit ando a função dir et am ente na célula. Esta form a não
cont a com o assist ente, e port anto, o usuário deve conhecer a sint ax e da função par a infor m ar
cor retam ente seus par âm et ros ( r ecom endada apenas par a usuár ios m ais ex perient es) . Par a a
infor m ação de um a fór m ula no Ex cel, deve- se digitar o sinal de igual “ = ” .

3. A ter ceir a for m a é ut ilizar a função SI GA( ) para ident ificar o início da infor m ação de funções SI GA
Advanced. Par a tant o, deve ser usada a seguint e sintaxe:
SI GA( " n om e d a fu n ção" ; 1 º pa râ m et ro d a fu n ção; 2 º p ar âm e t r o da f u n çã o;...)
Por exem plo, infor m ando:
= SI GA( " M esExt e n so " ;2 ) Desta form a, ser á r et or nado o m ês “ Fev er eir o” .
Observ e que o nom e da função SI GA Adv anced é infor m ado ent re aspas. ( " " ) .

4. A quar t a form a, t am bém é iniciar a infor m ação com a função Siga( ) , por ém as funções SI GA Adv anced,
j unt am ente com seus parâm et r os, devem ser digit ados ent re aspas, obedecendo a sint ax e padr ão que
ut iliza os sinais de par ênt eses. Por exem plo:
= SI GA( “ M esExt en so ( 2 ) ” )

Cuidados com a utilização de funções

O Micr osoft Excel ut iliza um padr ão de data diferent e do SI GA Advanced, por esse m ot ivo qualquer função
de planilha do Adv anced ut ilizada a par tir do m enu “ I nser ir Fórm ula” do Micr osoft Excel ou da sintaxe
= Siga( “ nom efunção” ; Par01; Par02) que ut ilize data com o parâm et r o ou r et or ne um a dat a, deve obedecer as
r egr as abaixo:

For m at ar a célula com o dat a, para as funções que r etornem dat a.


Ut ilizar com o par âm et ro das funções do SI GA Advanced um a r efer ência de célula cuj o conteúdo seja
um a data, ou digit ar a data no for m at o do Micr osoft Ex cel “ 00: 00 10/ 05/ 98” .

Toda função do SI GA Advanced utilizada a par t ir do m enu “ I nser ir Fórm ula” do Micr osoft Excel ou da sintaxe
“ = Siga( “ nom efunção” ; Par01; Par02) ” que ut iliza v alor lógico ( .T./ .F.) com o par âm et ro, deve obedecer o
padr ão do Microsoft Ex cel ( at enção! com o idiom a do Microsoft Ex cel) :

.T. - VERDADEI RO/ TRUE


.F. - FALSO/ FALSE

Se ao ex ecut ar um a função SI GA Adv anced, o Excel retor nar o er ro "# VALOR" ou a m ensagem “ As funções
do SIGA Adv anced não constam na list a de funções definidas pelo usuário” , v er ifique os seguintes t ópicos
para solucionar:
Tenha cer teza de que o Excel foi iniciado a part ir do SI GA Advanced.

393

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________394

At r av és da opção " Suplem ent os" do Menu " Ferr am entas" do Excel, utilize o bot ão "Pr ocur ar " para
localizar o " Add I n" do SIGA Adv anced ( Adv Xla80.XLA para a ver são 8.0 ou AdvXla par a v er são 7.0 do
Ex cel, que est ão no dir et ór io de Bibliot ecas do Office) .

ExecBlocks
Pode- se utilizar Ex ecblock nas células do Micr osoft Excel com algum as r est rições:

Não devem ser ut ilizadas ent r adas de dados ou qualquer out r o tipo de “ Tela” .
O Ex ecblock dev e obrigat or iam ent e ret or nar um v alor .
O Ex ecblock dev e ser pequeno par a ev it ar a per da da conexão do SIGA Advanced com o Microsoft Ex cel.
A variável que recebe o par âm et ro passado pelo Ex cel é sem pre a PARAMI XB, que dev e ser t ratada
dent r o do execblock . Caso sej a necessário utilizar m ais de um par âm etr o no pr ogr am a, ele já dev e vir
do Excel concat enado em um a única Str ing.
Sint axe: = EXECBLOCK( “ Nom e da função” ,PAR1)
O Rdm ak e ut ilizado no ExecBlock dev e estar dent r o do dir et ór io Sigaadv da base que est á sendo
ut ilizada para cham ar o Excel e já estar com pilado.

Funções Genéricas

POSICI ONE
Posiciona o ar quiv o em um determ inado registr o.
Sint axe: Posicione( ExpC1, Ex pN1, ExpC2, Ex pC3)

394

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________395

onde:
Ex pC1 - Alias do arquivo
Ex pN1 - Or dem ut ilizada
Ex pC2 - Chav e pesquisa
Ex pC3 - Cam po a ser r et or nado
Ex .: Posicione( “ SA1” ,1,xFilial( “ SA1” ) + 001,“ A1_NOME” )

MEDI A
Calcula a taxa m édia de um a determ inada m oeda em um m ês específico.
Sint axe: Media ( ExpN1, Ex pN2, ExpN3)
onde:
Ex pN1 - Moeda a ser calculada a m édia
Ex pN2 - Mês a ser calculado
Ex pN3 - Ano a ser calculado
Ex .:
Media ( 2,10,94)
Caso o m ês e o ano não sej am passados com o par âm etr os serão assum idos o m ês
e ano da database.

SOMAR
Faz o som at ór io de um ar quiv o, retornando o valor acum ulado de um cam po
deter m inado.
Sint axe: Som ar ( ExpC1, ExpC2, Ex pC3)
onde:
Ex pC1 - Alias do arquivo
Ex pC2 - Condição para som a
Ex pC3 - Cam po a ser som ado
Ex .:
Som ar ( “ SI1” " ,“ I 1_CLASSE= 'S' ” ,“ I 1_SALANT” )
Caso o usuário não desej e definir nenhum a condição, a ExpC2 deve ser “ .T.” .

GRUPO
Retor na o som at ór io das células per t encent es a um determ inado gr upo.
Sint axe: Gr upo( Ex pC1)
onde:
Ex pC1 - Gr upo a ser som ado
Ex .: Gr upo( 1)

CONTAR
Cont a o núm ero de r egist ros de acor do com a condição det er m inada.
Sint axe: Cont ar ( ExpC1, Ex pC2)
onde:
Ex pC1 - Alias do arquivo
Ex pC2 - Condição para a cont agem
Ex :
Cont ar ( “ SC1” ,“ C1_DATPRF < dDat aBase” )

Funções Contábeis

SALDO
Devolv e o saldo de um a det er m inada cont a.
Sint axe: Saldo( Ex pC1, ExpN1,ExpN2)
onde:
Ex pC1 - Código da Conta
Ex pN1 - Per íodo do saldo desej ado
Ex pN2 - Moeda desejada par a obt enção do saldo.
Ex .: Saldo( “ 11101” ,12,1)

MOVI MENTO

395

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________396

Devolv e o m ovim ent o ( débito- crédit o) de um a deter m inada cont a.


Sint axe: Movim ent o( ExpC1,ExpN1,ExpN2,Ex pD1)
onde:
Ex pC1 - Código da conta
Ex pN1 - Mês do m ov im ent o desej ado
Ex pN2 - Moeda desejada par a obt enção do m ov im ent o
Ex pD1 - Data do exercício desej ado
Ex .:
Movim ent o( “ 43” ,1,1, CTOD ( " 01/ 01/ 95") :
r et or na o 1º per íodo
Movim ent o( ` 43” ,1,1,CTOD( “ 01/ 01/ 96” ) :
r et or na o 13º período

DEBI TO
Devolv e o v alor a débit o de um a det er m inada conta.
Sint axe: Debito( ExpC1, ExpN1, Ex pN2)
onde:
Ex pC1 - Código da Conta
Ex pN! - Mês do m ov im ento desej ado
Ex pN2 - Moeda desejada par a obt enção do v alor a débit o
Ex .: Debito( “ 11103” ,03,1)

CREDI TO
Devolv e o v alor a cr édito de um a cont a.
Sint axe: Cr edito( ExpC1, Ex pN1, ExpN2)
onde:
Ex pC1 - Código da Conta
Ex pN1 - Mês do m ov im ent o desej ado
Ex pN2 - Moeda desejada par a obt enção do v alor a crédit o
Ex .: Cr edit o( “ 11103” ,03,1)

SOMAMOVI M
Retorna o movimento dentro de um intervalo de contas analíticas
Sintaxe: SomaMovim(ExpC1, ExpC2, ExpN1, ExpN2)
onde:
ExpC1 - Código da conta De
ExpC2 - Código da conta Até
ExpN1 - Referente ao mês
Exp N2 - Moeda desejada para obtenção do valor
Ex.: SomaMovim(“41304”,“41305”,12,1)

SOMASALDO
Retor na o saldo at ual ent re um int er valo de contas.
Sint axe Som aSaldo( Ex pC1, ExpC2, Ex pN1, ExpN2)
onde:
Ex pC1 - Código da conta De
Ex pC2 - Código da conta At é
Ex pN1 - Refer ente ao per íodo
Ex pN2 - Moeda desejada par a obt enção do v alor
Ex .: Som aSaldo( “ 31001” ,“ 31010” ,12,1)

ORÇADO
Retor na o v alor or çado de um a cont a..
Sint axe Orcado( Ex pC1, ExpN1, Ex pN2, ExpD1)
onde:
Ex pC1 - Código da conta De
Ex pN1 - Refer ente ao per íodo
Ex pN2 - Moeda desejada par a obt enção do v alor
Ex pD1 - Data par a conversão ( em form ato data ou car acter) , caso não inform a- da,
ser á ut ilizada a DataBase do sistem a.
Ex .: Or cado( “ 11102001” ,1,1)

396

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________397

MESEXTENSO
Devolv e o nom e do m ês por ext enso.
Sint axe: MesExt enso( ExpX1)
onde:
Ex pX1 - Poder á ser enviado o núm er o de um m ês, t anto do t ipo car act er com o
num ér ico, ou poderá ser enviada um a data. Caso nada sej a inform ado,
ser á devolv ido o nom e do m ês r efer ente a Data Base.
Ex .: MesEx t enso( 01)

VARI AÇÃO
Retor na a v ar iação em per centual entr e dois valor es.
Sint axe: Variação( Ex pN1, ExpN2)
onde:
Ex pN1 - Pr im eir o fat or com parativ o
Ex pN2 - Segundo fat or com par ativo
Ex .: Variacao( 100000,50000)

MOVI MCC
Retor na o m ovim ent o de um cent r o de cust o m ais cont a cont ábil ( ext r acontábil) .
Sint axe: Movim CC( ExpC1, Ex pC2, ExpN1, Ex pN2)
onde:
Ex pC1 - Código do centr o de cust o
Ex pC2 - Código da conta cont ábil
Ex pN1 - Refer ente ao m ês
Ex pN2 - Moeda desejada par a obt enção do v alor
Ex .:
Movim CC( “ 3001” , 111001” ,Month( Ddatabase) ,1)

ORCADOCC
Recupera o valor orçado da Conta x Cent ro de Cust o par a ut ilização na planilha.
Sint axe: Or cadoCC( ExpC1,Ex pC2,Ex pN1,ExpN2,ExpD1) ,
onde:
Ex pC1 - Cont a
Ex pC2 - Cent r o de Custo
Ex pN1 - Per íodo ( default m ês da dat abase)
Ex pN2 - Moeda ( default 1)
Ex pD1 - Data par a conversão se m oeda de 2 a 5 - ( default dDataBase) .
Ex .: Or cadoCC( “ 111001” ,“ 3001” ,3,2)
SUMMOVI MCC
Retor na o m ovim ent o de um int er valo de centr o de cust os ex tr acont ábeis. Poder á ser
param etr izados tam bém um gr upo de cont as.
Sint axe:
Sum Movim CC( ExpC1,ExpC2,Ex pC3,Ex pC4,Ex pN1,ExpN2)
onde:
Ex pC1 - do Cent ro de Cust o
Ex pC2 - até Centr o de Cust o
Ex pC3 - da Cont a
Ex pC4 - até a Conta
Ex pN1 - Mês ( default m ês da database)
Ex pN2 - Moeda ( default 1)
Ex .:
Sum Movim CC( 3001” ,“ 3100“ ,“ 31001” ,“ 31010” ,12,1)

GRAVAORCADO
Perm it e que um det erm inado valor calculado pela planilha sej a gr av ado no Arquiv o
de Orçam entos.
Sint axe:
Gr av aOrcado( Ex pC1,ExpN1,ExpN2,ExpN3)
onde:
Ex pC1 - Cont a Cont ábil a ser or çada
Ex pN1 - Núm er o da célula onde o valor est ar á contido
Ex pN2 - Mês a ser or çado ( se nulo, ser á m ês corr ent e)

397

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________398

Ex pN3 - Moeda a ser orçada ( se nula, será m oeda nacional)


Por exem plo: Obt ém - se um valor na célula “ 022” r efer ente à cont a “ 11102001” , sendo que est e dever á ser
or çado na cont abilidade par a o m ês “ 07” e na m oeda “ 1” . Par a tant o, cr ia- se em out r a célula a seguinte
fór m ula:
Gr av aOrcado( “ 11102001” ,# 022,7,1)
Um a gr ande v ant agem deste recurso é que caso a planilha sej a r ecalculada e o valor alterado, o v alor or çado
ser á autom at icam ente at ualizado. Est a função irá devolv er à planilha o conteúdo “ < < < Or çado > > > ”
Para inibir a im pressão dest as células, bast a acessar as suas pr opriedades e desabilit ar a v isibilidade.

SALDOCUSTO
Calcula o saldo dos centr o de cust os ex tr acontábeis.
Sint axe:
SaldoCusto( ExpC1,ExpC2,ExpC3,Ex pC4,Ex pN1,Ex pN2)
onde:
Ex pC1 - Cent r o de Custo Inicial
Ex pC2 - Cent r o de Custo Final
Ex pC3 - Cont a I nicial
Ex pC4 - Cont a Final
Ex pN1 - Mês ( se nula, assum e o m ês de refer ência da database)
Ex pN2 - Moeda ( se nula, será assum ido 1 )
Ex .: SaldoCusto( “ 1007” , “ 1099” , “ 3” , “ 4” , “ 10, 1)

SOMACONTAS
Retor na o saldo acum ulado de um grupo de contas, de acordo com a sint ax e apr esent ada. Est a função
considera som ent e contas de classe “ A” – analít ica
Sint axe: Som aContas( Ex pC1,Ex pN1,ExpN2)
onde:
Ex pC1 - List a de contas, cercada por aspas ( “ ” ) .
O Separ ador “ : ” ( dois pont os) for m a int er valo de cont as De - At é. O separ ador “ ,” ( vír gula) , inform a
separação de cont as.
Ex pN1 - Mês ( default m ês da database)
Ex pN2 - Moeda ( default 1)
Ex em plos:
Som aContas( “ 11101001” ,3,1)
Devolv e o saldo da conta em questão no m ês 3 na m oeda 1.
Som aContas( “ 11101001,11101002,11102237” )
Devolv e a som a dos saldos das cont as em questão.
Som aContas( “ 11101001: 11102,31101001” )
Devolv e a som a dos saldos das cont as 11101001 at é 11102 m ais o saldo da cont a 31101001.

Funções Financeiras

SLDBCO
Retor na o saldo bancár io em um a data.
Sint axe: SldBco( ExpC1,ExpC2,ExpC3,Ex pD1,Ex pN1)
onde:
Ex pC1 - Código do Banco
Ex pC2 - Agência Bancária
Ex pC3 - Cont a Bancár ia
Ex pD1 - Data do Saldo
Ex pN1 - Moeda do Saldo Bancár io
Ex .: SldBco( “ 409” ,” 00198” ,” 011122” , dDat aBase,1)

SLDRECEBER
Retor na o saldo a receber em um a dat a.
Sint axe: SldReceber ( ExpD1,ExpN1,Ex pL1)
onde:
Ex pD1 - Data do Movim ent o a Receber .
Ex pN1 - Moeda - Default 1
Ex pL1 - Se .T. Até a Dat a, .F. Som ent e Dat a ( o padr ão é .T.)

398

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________399

Ex .: SldReceber ( Dat a,1,.T.)

SLDPAGAR
Retor na o saldo a pagar em um a det er m inada dat a.
Sint axe: SldPagar ( ExpD1,ExpN1,ExpL1)
onde:
Ex pD1 - Data do Movim ent o a Pagar
( padrão é dDat aBase)
Ex pN1 - Moeda ( padrão é 1)
Ex pL1 - Se .T. Até a Dat a, .F. Som ent e Dat a ( padrão é .T.)
Ex .: SldPagar ( dDataBase,1,.T.)

SLDCLI ENTE
Retor na o saldo a receber do cliente em um a determ inada data.
Sint axe: SldClient e( Ex pC1,Ex pD1,Ex pN1,ExpL1)
onde:
Ex pC1 - Client e+ Loj a
Ex pD1 - Data do Movim ent o a Receber
( padrão é dDataBase)
Ex pN1 - Moeda
Ex pL1 - Se .T. consider a o saldo do SE5
( padrão é .T.)
Ex .: SldClient e( “ 00000101” ,dDataBase)

SLDFORNECE
Retor na o saldo a pagar do fornecedor em um a data
Sint axe: SldFor nece( ExpC1,ExpD1,ExpN1,Ex pL1)
onde:
Ex pC1 - For necedor + Loj a
Ex pD1 - Data do Movim ent o a Pagar ( padr ão é dDat aBase)
Ex pN1 - Moeda - ( padr ão é 1)
Ex pL1 - Se .T. consider a o saldo do SE5
( padrão é .T.)
Ex .: SldFor nece( “ 00000101")

FI NNATPRV
Retor na o v alor pr ev ist o de cada nat ur eza.
Sint axe: Finat Pr v( Ex pC1,Ex pD1,ExpD2,ExpN1)
onde:
Ex pC1 - Nat ur eza a ser Pesquisada
Ex pD1 - Data Inicial para cálculo
Ex pD2 - Data Final de cálculo
Ex pN1 - Moeda de Saída
Ex .:
FinNat Prv ( “ R001” ,Ct oD( “ 01/ 01/ 98” ) ,dDataBase,1)

FI NNATREA
Retor na o v alor realizado da Nat ur eza.
Sint axeFinNat Rea( Ex pC1,ExpD1,ExpD2,Ex pN1)
onde:
Ex pC1 - Nat ur eza a ser Pesquisada
Ex pD1 - Data Inicial para cálculo
Ex pD2 - Data Final de cálculo
Ex pN1 - Moeda de Saída
Ex .: FinNat Rea( “ R001” ,Ct oD( “ 01/ 01/ 98” ) ,dDat aBase,1)

FI NNATORC

399

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________400

Retor na o v alor or çado da nat ur eza.


Sint axe: FinNat Or c( ExpC1,Ex pN1,Ex pN2)
onde:
Ex pC1 - Nat ur eza a ser Pesquisada
Ex pN1 - Mês para cálculo
Ex pN2 - Moeda de Saída
Ex .: FinNat Or c( “ R001” ,10,1)

ROTEI RO PARA I N STALAÇÃO D O TOPCON N ECT COM SQL/ SERVER 7 .0 M I CROSOFT :

• O Windows NT 4.0 deve ser da versão em inglês e Ter o serv ice Pack at ualizado( caso possua estações
Wor k st at ion as r ecom endações de ser vice pack at ualizado deve ser aplicado na est ação) .
• Na inst alação do SQL de ser selecionada a opção Custom Char acter Set / sort order / Unicode
Collation/ Char acter Set: 1252/ I SO CHARACTER SET ( DEFAULT)
• SORT ORDER: BINARY ORDER E UNI CODE COLLATI ON/ LOCALE I DENTIFIER: BI NARY ORDER
• No " Quer y Analyzer "( Fer ram enta do SQL/ Ser ver 7.0) ex ecut ar SP_HELPSORT, par a ver ificar se o SQL,
est á Configur ado com o Binar y Or der ( “ Sor t Or der = 50, bin_iso_” ) , caso não estej a DEVERÁ SER REFEI TA
A I NSTALAÇÃO DO SQL SERVER.
• Acessar a Fer ram ent a Enterprise Manager do Micr osoft SQL/ Ser ver 7.0, no ser v idor SQL destinado para o
Siga, abr ir a árv or e indicada pelo sinal de " + " ao lado esquer do deste Ser v er .
• Abrir a pasta Dat abases, clique com o botão direito sobre qualquer Dat abase e escolha New Dat abase.
Onde o Nom e dest e Dat abase, por exem plo, será DADOSADV, cr ia- lo com o t am anho pr ev iam ente
definido e dem ais par am et ros default , e em TRANSACTI O LOG ser á definido a área dest inada a Log e o
ideal que sej a em out r o disco ( NÃO OUTRA PARTIÇÃO) difer ente do que est iv er ar m azenado o DATABASE,

400

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________401

o tam anho t am bém dev er á ser pr eviam ent e definido. Ex .: DATABASE 500MB e em TRANSACTI ON LOG
150MB.
• Em PROPERTI ES/ OPT I ON S do D AT ABASE a opção "Tr uncat Log on Checkpoint " , tem a função de
est ratégia de Back up, se a em presa opt ar por efet uar Back up` s de Log, tal opção poder á ficar
desm ar cada.
• Ag ora en t re e m Secu r it y e em Login s, e com o bot ão direit o sobre qualquer out ro login, escolha New
Login, seguindo o exem plo, Nom e = SI GA, at ivar o SQL Ser v er aut hent ication Passw or d = SI GA, Serv er
Roles m arcar a opção SYSTEM ADMI NSTRATORS e em DATABASE ACCESS at ribuir perm issões ( per m it)
para o database cr iado, no caso DADOSADV.
• A part e do SQL Serv er está pront a. Agora r est a apenas a configuração do TOPConnect Manager e do
SigaAdv.
• I n st alar o T OPCon n ect , e a pós o t er m in o do I n st all, en ce rr ar t od os os ser viço e r ein iciar o
Se rv id or , Caso o pr ocesso sej a de At ualização do TOPConnect _1 par a TOPConnect _2, deve ser efet uada a
rem oção do TOPConnect_1( e o que for r efer ente ao t opconnect ) at ravés de Adicionar e Rem ov er
Pr ogram as que est á no Painel de Cont r ole do Windows NT, ant es de I nst alar o TOPConnect_2.
• To pco n n ect _ 2 / Em Pr opriedades de Am bient e. Configur ação do OD BC SQL Ser ve r Set u p : Nam e =
TOPSQL, SERV ER= ( nom e do serv idor ) [ Ca so o TOPco n n e ct e st ej a n o m esm o ser vid or qu e o
SQL/ Ser ver dev e- se m a n t er a o pçã o LOCAL – Dest a for m a a conex ão ent re o TOPConnect e o SQL
não est ar á t rafegando na Rede] , N EX T> .
• Marcar a opções ( ) Wit h SQL Ser v er aut hent ication using a login I D .... e [ ] Connect to SQL Ser ver to
obtain default set ings .... Login ID : SI GA , Passw or d .: SI GA. N EXT >
• Marcar .: [ ] Change t he default database t o: ( Selecionar o Dat abase cr iado para o Siga) e desm ar car as
opções [ ] Use ANSI quot ed e [ ] Use ANSI nulls, paddings and war nings . N EX T> .
• Pr óx im a tela m ar car [ ] Perform Tr anslation for char act er dat a, e os dem ais par am et ros ser ão m arcados
deacor do com a polít ica de adm inist r ação do Banco.
• Selecionar na Bar r a de Fer ram ent as do Topconnect o ícone = a um a Chave ( ou Edit ar Licenças) , para que
possa ser detectado o nº de sér ie, da m áquina e assim ent rar em cont at o com o suport e Topconnect
( CLI EN T E D EV ERÁ EN TRAR EM CON TATO COM O AT EN D I M EN TO D O D I SK- SI GA.: ( 0 xx 1 1 ) 3 9 8 1 -
7 1 0 0 ) para obt er a chave de acesso confor m e a quant idade de usuários adquir idos.
• SI GA AD V AN CED 4 .0 7 : No dir et ório Sigaadv\ WI NSQL, ex ist e um ar quivo cham ado ADV97.I NI . Edit e- o,
os par âm et ros cor retos para o SigaAdv com SQL Serv er são: D a t a ba se = M SSQL7 , Alias = T OPSQL,
Co n t ype = NPI PE, Ser ver = NOME do ser vidor NT com o TOPConnect .
• AP5 : Localizar em AP5\ BI N o arquiv o AP5SRV.ini e edit a- lo, neste arquivo dev er á ser configurado a
clausula [ TOPCONNECT] com o segue o exem plo confor m o o padr ão adot ado nest e r ot eir o:
[ TopConnect ]
DataBase= MSSQL7
Serv er = * nom e do ser vidor ou o endereço IP do ser vidor
ALIAS= TOPSQL
Cont ype= NPI PE ou Cont y pe= TCPI P * dependendo da opção do Ser ver .
• Ca so se ja n e ce ssár io a m igr ação de ba se D BF p ar a o Ba n co v er ifique, antes de ex ecut ar o
DBF2SQL, o DBF2SQL.INI. O Alias t em que ser igual à MSSQL7/ TOPSQL, neste ex em plo.
• Está pr onta t oda sua configur ação.
• CASO sej a necessár io que o" SQL SERVER deva estar em UM SERVIDOR NT E TOPCONNECT EM OUTRO
NT".

401

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________402

• No 1º I nstalar o SQL SERVER. No 2º instalar o client do SQL e o t opconnect, e apont ar o client par a a 1ª
m áquina, o TOPCONNECT deve apont ar par a o SQL Serv er ( 1ª m áquina) o ADV97.I NI dever á indicar o
nom e do serv idor da 2ª m áquina, aonde o Topconnect est á inst alado.

• ftp: / / ft p.m icr osiga.com .br/ t opconnect / nt - Download I nst alador do TOPConnect _2.

1 .1 . Am b ie n t e D e sej áv el pa ra u m a in st alação d e 2 5 u su á rio s:

Se rv id or W in dow s N T 4 .0 com Top Co n n e ct , Ba n co de da do s


M sSql/ Ora cle/ I n fo rm ix/ ..., Sig aAd van ce d/ AP5 .

- Mem ória = 512 MB ou m ais


- Discos = 2 discos SCSI com 9GB de 80m bit / s com dois adapt ador es para
garant ir acesso sim ult aneo dos discos. Para base de dados gr andes
( com m ais de 1GB de dados) recom endam os um Disk Ar ray do tipo Raid-
5 de 4 Discos de 9GB com m em ór ia de 256 a 512 par a cache de leitur a.
- Processador = 2 processador Pent ium II I Xeon 500m hz com 512 de cache.
- Rede = Adapt ador de 100 m bit s, ut ilizar swit e( não cascatear Hubs)

ROTEI RO PARA I N STALAÇÃO D O TOPCON N ECT


M SSQL 2 0 0 0

• Pr ocesso de inst alação do SQL 2000 – Cr iação de Inst ance.


1. SQL SERVER 2000 COMPONENTS
2. I NSTALL DATABASE SERVER
• Locall Ser ver
• Cr eat e a New Inst ance of SQL Ser ver or I nstall Client Tools
• Serv er and Client Tools
• A pr ox im a opção irá definir a criação de um a Inst ance para isto desm ar que a opção Default ., caso
pem aneça m arcado, será cr iado um a inst ace com o er á no SQL 7.0.
• Na proxim a opção selecionar a form a Cust om , que perm it irar selecionar o local para a inst alação do
banci e m ar car os com ponent es a serem inst alados.
• SERVICES ACCOUNTS
Selecionar a for m a que o Sql ira Star tar.

402

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________403

Ex: Ser vice Sett ings


Use The Local Syst em Account
• AUTHEMTICATI ON MODE
Windows Authenticat ion Mode
• COLLATI ON SETTI NGS
Sql collat ions
Binar y or der , for use with t he 437 ( U.S.English) Char acter Set.
• NETWORK LIBARI ES < next > START COPYI NG FILES < next >
• Segue o r esultado do Quer y Analyzer ao ex ecut ar o sp_helpsor t : La t in 1 - Gen er al, bin a ry sor t f or
Un icode D at a, SQL Ser ve r So rt Ord er 3 0 on Code Pag e 4 3 7 fo r n o n - Un ico de D at a
• Acessar a Fer ram ent a Enterprise Manager do Micr osoft SQL/ Ser ver 2000, no serv idor SQL dest inado para
o Siga, abr ir a árv or e indicada pelo sinal de " + " ao lado esquer do dest e Serv er .
• Abrir a pasta Dat abases, clique com o botão direito sobre qualquer Dat abase e escolha New Dat abase.
Onde o Nom e dest e Dat abase, por exem plo, será DADOSADV, cr ia- lo com o t am anho pr ev iam ente
definido e dem ais par am et ros default , e em TRANSACTI O LOG ser á definido a área dest inada a Log e o
ideal que sej a em out r o disco ( NÃO OUTRA PARTIÇÃO) difer ente do que est iv er ar m azenado o DATABASE,
o tam anho t am bém dev er á ser pr eviam ent e definido. Ex .: DATABASE 500MB e em TRANSACTI ON LOG
150MB.
• Em PROPERTI ES/ OPT I ON S do D ATABASE a opção "Tr uncat Log on Checkpoint " , tem a função de
est ratégia de Back up, se a em presa opt ar por efet uar Back up` s de Log, tal opção poder á ficar
desm ar cada.
• Ag ora en t re e m Secu r it y e em Login s, e com o bot ão direit o sobre qualquer out ro login, escolha New
Login, seguindo o exem plo, Nom e = SI GA, at ivar o SQL Ser v er aut hent ication Passw or d = SI GA, Serv er
Roles m arcar a opção SYSTEM ADMI NSTRATORS e em DATABASE ACCESS at ribuir perm issões ( per m it)
para o database cr iado, no caso DADOSADV.
• A part e do SQL Serv er está pront a. Agora r est a apenas a configuração do TOPConnect Manager e do
SigaAdv.
• I n st alar o T OPCon n ect , e a pós o t er m in o do I n st all, en ce rr ar t od os os ser viço e r ein iciar o
Se rv id or , Caso o pr ocesso sej a de At ualização do TOPConnect _1 par a TOPConnect _2, deve ser efet uada a
rem oção do TOPConnect_1( e o que for r efer ente ao t opconnect ) at ravés de Adicionar e Rem ov er
Pr ogram as que est á no Painel de Cont r ole do Windows NT, ant es de I nst alar o TOPConnect_2.
• To pco n n ect _ 2 / Em Pr opriedades de Am bient e. Configur ação do OD BC SQL Ser ve r Set u p : Nam e =
TOPSQL, SERV ER= ( nom e do serv idor ) [ Ca so o TOPco n n e ct e st ej a n o m esm o ser vid or qu e o
SQL/ Ser ver dev e- se m a n t er a o pçã o LOCAL – Dest a for m a a conex ão ent re o TOPConnect e o SQL
não est ar á t rafegando na Rede] , N EX T> .
• Marcar a opções ( ) Wit h SQL Ser v er aut hent ication using a login I D .... e [ ] Connect to SQL Ser ver to
obtain default set ings .... Login ID : SI GA , Passw or d .: SI GA. N EXT >
• Marcar .: [ ] Change t he default database t o: ( Selecionar o Dat abase cr iado para o Siga) e desm ar car as
opções [ ] Use ANSI quot ed e [ ] Use ANSI nulls, paddings and war nings . N EX T> .
• Pr óx im a tela m ar car [ ] Perform Tr anslation for char act er dat a, e os dem ais par am et ros ser ão m arcados
deacor do com a polít ica de adm inist r ação do Banco.
• Selecionar na Bar r a de Fer ram ent as do Topconnect o ícone = a um a Chave ( ou Edit ar Licenças) , para que
possa ser detectado o nº de sér ie, da m áquina e assim ent rar em cont at o com o suport e Topconnect

403

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________404

( CLI EN T E D EV ERÁ EN TRAR EM CON TATO COM O AT EN D I M EN TO D O D I SK- SI GA.: ( 0 xx 1 1 ) 3 9 8 1 -


7 1 0 0 ) para obt er a chave de acesso confor m e a quant idade de usuários adquir idos.

• CLI EN T E SI GAAD VAN CED

• No dir et ório AP5\ BI N, existe um arquiv o cham ado AP5SRV.I NI . Edite- o, os parâm et r os cor retos par a O
PROTHEUS com SQL Serv er são: Database = M SSQL7 , Alias = TOPSQL, Cont ype = NPI PE, Ser ver =
NOME do serv idor NT com o TOPConnect .

• ftp: / / ft p.m icr osiga.com .br/ t opconnect / nt - Download de executáveis par a TOPConnect e das
at ualizações do TOPConnect_2.

MsExecAuto

Obj et iv o

Fazer m anu tenção au tom ática ( inclu são, alt er ação e ex clusão) das rotinas de
m anipu lação de dados d o sist em a, autom at izando o pr ocesso de ent r ada de dados
sem a necessidad e de desen volver rot inas especificas.

Aplicação

Est a tecnica é aplicada em tod as as versões Prot heus, p orém esta


docum en tação baseou- se na versões superior es a AP6.09 .

Van tag ens

1) I nterface : Os d ados d e ent rad a são en viados a r ot in a em for m a d e cam pos e


conteudos ( ar ray ) e dest a for m a n ão é necessar io a apr esent ação de nenhu m a
in teface ao usuár io.

2) Segur ança : A ut ilização de r ot in as aut om át icas aum ent a con sider av elm ent e a
segur ança d o sistem a, um a vez qu e ut iliza as validações padr ões e dim inui os
pr oblem as causados p or at ualização de versão ou in clusão d e custom izações nas
rotinas p adr ões do sist em a.

3) Ag ilidad e no pr ocesso : Aum ent a consideravem en te o t em po de d esenvolv im ent o


das cust om izações que necessitam de entr ada d e d ados. Ex em plo: I m por tação de
ped id o de ven da.

Pr ocedim ent os

Exist em duas m aneir as de u tilizar a r otina aut om at ica, send o elas:

404

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________405

1. Sem Interface
2. Com Interface

Par a a ut ilizacao da r ot ina aut om at ica sem interface dev e- se, configur ar o am b iente
ut ilizan do- se o com ando PREPARE ENVI RONMENT e cham ar dir etam ent e o nom e da
fu nção.

Exem plo:

User Fun ct ion I ncPr od( )

Local aRot Aut o : = { }


Local n Opc : = 3 / / inclusao
Pr iv at e lMsHelpAu to : = .t. / / se .t . dir ecion a as m en sag ens d e help par a o ar q. d e log
Pr iv at e lMsErr oAu to : = .f. / / necessar io a criacao, pois sera / / at ualizad o quando
hou ver
/ / algum a incosist encia nos param etr os

PREPARE ENVI RONMENT EMPRESA '99 ' FI LI AL '01' MODULO 'FAT'

Beg in Tran saction


aRotAu to: = { { 'B1_ COD' ,'101 0' ,Nil} ,;
{ 'B1_ DESC' ,'Pr odu to t este',Nil} ,;
{ 'B1_ TI PO' ,'PA' ,Nil} ,;
{ 'B1_ UM' ,'UN' ,Nil} ,;
{ 'B1_ LOCPAD' ,'01' ,Nil} ,;
{ 'B1_ PI CM' ,0 ,Nil} ,;
{ 'B1_ I PI ' ,0 ,Nil} ,;
{ 'B1_ PRV1 ' ,100 ,Nil} ,;
{ 'B1_ LOCALI Z' ,'N' ,Nil} ,;
{ 'B1_ CODBAR' ,'7 8988 880 0001 ' ,Nil} }

MSEx ecAuto( { | x,y| m ata0 10( x,y) } ,aPr odut o,nOp c)


I f lMsErr oAuto
Disar m Tr ansact ion( )
br eak
End I f
End Tran saction
I f lMsErr oAuto
/*
Se estiver em um a aplicao n orm al e ocor rer alg um a incosist encia n os param etr os
passados,m ostr ar n a t ela o log inform an do qu al coluna t eve a incosist en cia.
*/
Mostr aer ro( )
Ret ur n .f.
End I f
Ret ur n .t .

Ja para r ot in as que p ossuem int erface, d evem os usar a MSEx ecAut o, pois a m esm a
tem a função de g uar dar o am bient e , ex ecu tar a fun ção autom at ica e ret or nar de
ond e par ou.

Exem plo:
User Fun ct ion I ncPr od( )

405

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________406

Local aRot Aut o : = { }


Local n Opc : = 3 / / inclusao
Pr iv at e lMsHelpAu to : = .t. / / se .t . dir ecion a as m en sag ens d e help par a o ar q. d e log
Pr iv at e lMsErr oAu to : = .f. / / necessar io a criacao, pois sera / / at ualizad o quando
hou ver
/ / algum a incosist encia nos param etr os
Beg in Tran saction
aRotAu to: = { { 'B1_ COD' ,'101 0' ,Nil} ,;
{ 'B1_ DESC' ,'Pr odu to t este',Nil} ,;
{ 'B1_ TI PO' ,'PA' ,Nil} ,;
{ 'B1_ UM' ,'UN' ,Nil} ,;
{ 'B1_ LOCPAD' ,'01' ,Nil} ,;
{ 'B1_ PI CM' ,0 ,Nil} ,;
{ 'B1_ I PI ' ,0 ,Nil} ,;
{ 'B1_ PRV1 ' ,100 ,Nil} ,;
{ 'B1_ LOCALI Z' ,'N' ,Nil} ,;
{ 'B1_ CODBAR' ,'7 8988 880 0001 ' ,Nil} }

MSEx ecAuto( { | x,y| m ata0 10( x,y) } ,aPr odut o,nOp c)


I f lMsErr oAuto
Disar m Tr ansact ion( )
br eak
End I f
End Tran saction
I f lMsErr oAuto
/*
Se estiver em um a aplicao n orm al e ocor rer alg um a incosist encia n os param etr os
passados,m ostr ar n a t ela o log inform an do qual coluna t eve a incosist en cia.
*/
Mostr aer ro( )
Ret ur n .f.
End I f
Ret ur n .t .

RELAÇÃO DE ERROS DO TOPCONNECT

Constant Nam e: TCF_NoEr r or

Value: 0

Meaning: A Cham ada da Função não foi com pletada com o desej ada.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_NoRout er I nstalled

Value: - 1

Meaning: Você est á t ent ado executar a função TC_Connect sem t er um a cam ada de com unicação.

Recovery : Você necessit a t er um Appc ou TCP/ I P r out er disponível

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_NoConnection

406

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________407

Value: - 2

Meaning: Você est á t ent ado executar um a função sem est abelecer conexão previa.

Recovery : Execut e a função do TC_Connect

- -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TC_NoUserSecur ity

Value: - 4

Meaning: Você necessita fornecer um user + passw or d válido com o TC_Set user

Recovery :

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --
Constant Nam e: TCF_No_Mor e_Connect ions

Value: - 6

Meaning: Não Há m ais conexões disponíveis.

Recovery : Feche um a das conex ões e t ent e nov a conexão.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - --

Constant Nam e: TCF_ScanTableEr ror

Value: - 7

Meaning: Há um a difer ença ent re o form ato do r egist ro cor r ente que o AS/ 400 ar quiv a e o for m ato digitado
na PC Table.

Recovery : Obtenha o r egistr o do form at o AS/ 400 par a o ar quivo usando no progr am a do TClient , e check a
t abela

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_I nv alidFile

Value: - 10

Meaning: Você est á t ent ando abrir um ar quiv o que não podê ser encont r ado

Recovery : Ver ifique se o ar quiv o est á na bibliot eca indicada sobre abert ur a

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_Unknow nFile

Value: - 11

Meaning: Você est á t entando abr ir um ar quiv o que não est á associado com um pr ocesso no AS/ 400.

Recovery : Ver ifique o ident ifier de t abela utilizado em aber tura.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_I nv alidProgr am

Value: - 12

Meaning: O progr am a especificado na função do TC_Call não pode ser encont r ado.

407

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________408

Recovery : Ver ifique a localização do Nom e do progr am a.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_I nv alidOper at ion

Value: - 13

Meaning: O pr ogr am a est á ut ilizando um a função invalida.

Recovery : Cheque a ex ist ência da função.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_I nv alidKeyNum

Value: - 14

Meaning: Você tem especificado um núm er o de cam po chav e m aior que o ar quiv o, com o um a função de
acesso chav e.

Recovery : Vej a o valor de par âm etr o do n_keys


- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_TooManyFiles

Value: - 16

Meaning: Você est á tent ando abr ir um arquivo, m as o núm er o de m áx im o de arquiv os ao serv idor ex cedeu.

Recovery : Feche um dos ar quiv os aber tos e t ente abr ir o arquiv o outr a v ez.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - --

Constant Nam e: TCF_I nv alidNum Recs

Value: - 17

Meaning: Um núm er o negat ivo est á especificado no parâm et r o do lock _or _count da operação m ult iple- read

Recovery : Ver ifique o v alor de par âm etr o do Lock _or_count da oper ação m ultiple- r ead.

- -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_CallFailed

Value: - 18

Meaning: O pr ogr am a que cham ou a função do TC_Call falhou.

Recovery : Consult e no AS/ 400 as m ensagens de er r o.

- -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_Com m andFailed

Value: - 19

Meaning: O com ando do OS/ 400 cham ado na função do TC_Call Falhou.

Recovery : Consult e no AS/ 400 as m ensagens de er r o.

408

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________409

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_Ov er r ideFailed

Value: - 20

Meaning: O OVRDBF com ando de OS/ 400 est á falhando na abert ura o ar quiv o.

Recovery : Consult e no AS/ 400 as m ensagens de er r o.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_Quer yFailed

Value: - 21

Meaning: Um er ro foi produzido no OPNQRYF ou no com ando SELECT do AS/ 400

Recovery : Consult e no AS/ 400 as m ensagens de er r o.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_OpenFailed

Value: - 23

Meaning: O ar quiv o não pode ser aber to.

Recovery : Consult e no AS/ 400 as m ensagens de er r o.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_Not Opened

Value: - 24

Meaning: Você est á t ent ando um a operação com um arquivo que não está aber to.

Recovery : Ver ifique se o ar quiv o foi aber to apropr iadam ent e.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_NoRecordFound

Value: - 25

Meaning: O r egistr o solicitado não pode ser encontr ado com o um a função de acesso ao cam po chav e.

Recovery : Ver ifique os valores do cam po chave no r egist ro.

- -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_EndOfrecords

Value: - 26

Meaning: Você chegou no fim do arquivo ou o fim de r egist ros que est ão em Read_Mult iple.

Recovery : Est a é um a m ensagem consult iv a

- -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_NoWr it ePossible

Value: - 27

409

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________410

Meaning: Você não pode incluir um novo regist r o no ar quiv o.

Recovery : Verifique o valor da chave de índice em r egist ro. Você pode estar t entado escrever um r egist ro
com um a chave duplicada ou database est á cheio.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_NoRecordEqual

Value: - 28

Meaning: Não Há r egistr o per tencendo à chav e especificada na função do TCF_ReadE.

Recovery : Ver ifique o v alor das chav es de índice em r egist r o.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_Updat eFailed

Value: - 29

Meaning: Você não pode cr iar r egist ro no arquivo.

Recovery : Ver ifique a chav e utilizada na cr iação, e assegur e que o r egist ro não esteja Locado.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_Delet eFailed

Value: - 30

Meaning: Você não pode deletar o r egist r o no arquiv o.

Recovery : Ver ifique a chav e utilizada, e assegur e que o r egistr o não est á Locado.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_Recor dLocked

Value: - 31

Meaning: O r egist r o está locado por outr a t ar efa.

Recovery : Ver ifique qual a t ar efa que não est á liber ando o registr o

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_NoAuthor ization

Value: - 33

Meaning: O uso do TOPconnect não está autorizado.

Recovery : I st o indica que a conex ão com o AS/ 400 não pode ser com plet ada porque a chave do TOPConnect
é inv álida ou est á ex pir ada.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - --

Constant Nam e: TCF_TooManyUsers

Value: - 34

Meaning: O núm er o de m áxim o de usuár ios conectados foi alcançado.

410

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________411

Recovery : Alguns usuários deverão desconect ar ou m ais licenças serão necessitadas.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Constant Nam e: TCF_NoDBConnect ion

Value: - 35

Meaning: O Database não pode ser acessado.

Recovery :

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Value: - 58

Meaning: " Não Há Mem ór ia Do DOS"

Recovery : I ndica que não pode ter o desem penhado necessar io devido insuficiência de m em ór ia corr ente
para a sit uação.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

Value: - 90

Meaning: " Mem ór ia Insuficient e"

Recovery : I ndica que o t r abalho não pode ser feito dev ido a insuficiência de Mem ória do PC . Corr ija a
sit uação.

Hardlock
1- ) Qual o obj et ivo do” Hardlock ” ?

Junt am ente com a ver são 7.10 a Microsiga disponibiliza um hardware de pr ot eção que t em por obj et ivo a
segurança das inform ações usando algor it m os de criptogr afia ( r ecur so par a proteção de m ensagens
eletr ônicas) baseados em chav es de 128 bit s, liber ando m ecanism os m ais eficient es para proteger o sist em a
cont r a acessos indevidos. Aliado a isso, m ais agilidade no pr ocesso de liber ação de senhas e ganho de
perform ance nos processos de contr ole aos acessos sim ult âneos ( sem aforização) são obtidos.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

2- ) O client e recebeu a v er são 7.10 m as ainda não recebeu o “ Hardlock” o que dev e- se fazer ?

I st o não irá ocor rer, pois o "pacot e" da v er são AP7 contem pla:
- 1 CD Inst alaçãoAP7 Window s
- 1 CD Inst alação AP7 Linux
- 1 “ Hardlock” – Par alela
- 1 “ Bott om ” AP7
- 1 Recibo de entr ega da versão, a ser assinado pelo client e

Port ant o, tendo o r ecibo assinado, com pr ov a o r ecebim ent o de todos os it ens acim a !

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

3- ) Com quem devo falar na Microsiga par a solicit ar a cont ra senha do “ Hardlock” ?

O pr óprio Depar tam ento de Senhas é o responsável pela liber ação e env io das cont r a- senhas do “ Har dlock” .

411

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________412

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

4- ) Continua ex ist indo a necessidade de liber ação de senha do sigam at.em p ?

Sim . O Obj et iv o da liberação de senhas no Sigam at é de cont r olar o núm er o de em pr esas usuár ias do
sistem a, enquant o o “ Har dlock” é r esponsáv el pela cr ipt ografia dos dados, assim com o o contr ole de
usuários sim ultâneos.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

5- ) Com o r ealizar test es em client es sem utilizar as licenças oficiais ?

Os t est es a part ir da v er são 7.10 ficam sendo possíveis, sem consum o de licenças do am bient e oficial,
som ent e na em pr esa " 99 – Test e / Mat riz " , ou ut ilizando- se da senha de em er gência.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

6- ) Com o fica a em presa test e ?

A em pr esa "99 - Teste" não r equer a ut ilização nem a aut enticação atr av és do “ Har dlock ” , port anto, seu uso
est á liber ado. O núm er o de r egist ros que antes er a lim it ado a 50 passa a não ex ist ir m ais, sendo este
subst it uído pelo cont role de uso por no m áxim o 2 usuários sim ult âneos.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

7- ) Com o ficam as liber ações no caso em que o “ Hardlock ” , depois de colocado em uso, falhar?

Para este caso exist e o procedim ent o de liberação da senha de em er gência, que neste caso, irá liberar o uso
do sist em a at é que a subst it uição ou m anut enção sej a r ealizada. Em caso de falha const atada no dispositiv o,
est e será subst ituído gratuitam ente no 1º ano e ao cust o de tabela da St ore ( Hoje em US$ 43,55) a part ir de
então.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

8- ) Quant os “ Hardlock ” o client e precisa ut ilizar em seus am bient es ?

Som ente um , pois o client e ir á eleger qual " ser vidor" Pr ot heus tam bém será o ser v idor de licenças,e est e por
sua v ez poder á autent icar t odos os dem ais serv idor es da em pr esa.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

9- ) O client e per deu o “ Har dlock” , e agor a?

Caso o cliente t enha per dido ou t enha furt ado o “ Har dlock ” ele dev er á pr ovidenciar um Boletim de ocor rência
e com prar a nov a chav e de segur ança pelo valor de US$ 43,55

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

10- ) O client e m odificou seu am bient e de har dw ar e, ou seja, a m áquina quebr ou inst alou nov am ent e,
m udou par a um a m áquina nova, etc. O m esm o “ Har dlock” funcionar á?

I rá funcionar norm alm ente desde que seja inst alado novam ent e, e reconfigur ado o AP7SRV.I NI , caso o nom e
/ I P da m áquina tenha sido alter ado.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

11- ) Onde e com o dev e ser inst alado o “ Hardlock” ?

Na por ta par alela ou USB, de acor do com a disponibilidade do Serv idor do client e. O própr io inst alador do
AP7 ir á solicitar infor m ações quant o a por t a e o nom e do ser vidor em que será inst alado o “ Har dlock” .

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

12- ) Possuo um am biente com t rês " sit es" dist int os, onde dois deles estão cent ralizados e o terceir o esta
t rabalhando de for m a independente ? Com o est e am biente dev er á ser com a ut ilização do “ Har dlock” ?

412

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________413

Cont rat ualm ent e a Microsiga ex ige um contr at o par a cada localidade ( física ) , por tant o, ex ist indo est e caso,
o client e receberá 2 “ Hardlock” 's, 1 par a ser usado nos que são cent ralizados, e um adicional par a que seja
usado na localidade independent e. Cabe salient ar que a Micr osiga for nece gr at uit am ent e 1 “ Har dlock ” para
cada contr ato de m anut enção vigent e e caso ex ista apenas um cont r at o de m anutenção, o client e deverá
adquir ir m ais um “ Har dlock ” pelo pr eço de US$ 43,55

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

13- ) O Client e r ecebeu o “ Har dlock” paralelo e som ent e t em saída USB ?

O m esm o dev e ent r ar em cont at o com a unidade de At endim ent o e r elacionam ent o da Micr osiga para que
sej a pr ov idenciada a sua substit uição.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

14- ) Ex ist e vant agem de per for m ance entr e o “ Hardlock ” par alelo e ou USB ?

Tecnicam ente sim , pois as por tas USB's são em m édia 5x m ais rápidas que as par alelas, porém isto não
im plicara em m aior ou m enor per form ance do sistem a, pois a com unicação com a chave de segur ança se dá
em r ar as ocasiões.

- -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

15- ) Quando devo ut ilizar a senha em ergencial ?

Quando por algum m ot ivo qualquer o” Hardlock ” , ou a por t a em que ele está inst alado venha a falhar,
port ant o, at é sua m anut enção, o client e deverá ut ilizar a senha em ergencial.

No caso da necessidade de se m ont ar um am bient e test e ex at am ent e com as car acter íst icas do cliente
t am bém deve ser solicitada a senha de em er gência.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - --

16- ) O “ Har dlock” não funciona m esm o com a contr a senha cor ret a, o que devo fazer ?

Verifique a configur ação da por ta ( par alela ou USB ) . Realize t estes ut ilizando um out ro serv idor par a t er
cer teza se o pr oblem a é ou não no Har klock . Cabe salient ar que todos os “ Har dLock s” são t estados na
Micr osiga no m om ento da liberação.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

17- ) Caso o client e sej a um “ DataCent er “ e tenha um núm ero de licenças que dev a ser dist ribuído par a cada
um de seus client es, o que fazer ?

Ex ist em duas alt er nativas par a r esolver est e pr oblem a :

17.1 - > Distr ibuir o licenciam ento em “ n” “ HardLock s” e “ n” ser vidor es

17.2 - > Ter um único “ HardLock ” e contr olar os acessos at ravés do ponto de entr ada “ CHKEXEC” além da
ut ilização da chave “ SEMAFOROKEY” no am biente ( “ Env ir onm ent ” corr ente) que est á configurado no
AP7SRV.I NI

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

18- ) Com o configurar o ser vidor de licenças ?

O pr ópr io inst alador do AP7 solicit a as infor m ações necessárias durant e est e pr ocesso para se ut ilizar o
“ Har dlock ” . No arquivo .I NI do Ser vidor do AP7, hav er ão duas sessões confor m e abaix o:

[ LI CENSESERVER]
enable= 1
port = por t a- do- license- serv er

[ LI CENSECLIENT]
ser ver = nom e- do- ser vidor

413

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________414

port = por t a- do- license- serv er

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- --

19- ) Pr eciso um serv idor de licença para cada ser vidor de pr ocessam ent o do Pr ot heus?

Não. O cliente t endo 2 ou m ais ser vidores de aplicação, o m esm o ir á eleger um deles para ser o ser vidor de
licenças, onde ent ão será inst alado o “ Hardlock ” , e a par tir dest e m om ento, os dem ais passarão a pedir
autent icação par a ele.

- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - -- -- - --

20- ) Podem os t er m ais de um “ HardLock ” no m esm o ser vidor ?

Sim , m as apenas um da Micr osiga.

16 Programando com Schedule de Relatorios


Abrangência

Com o o sist em a per m ite que a em issão de r elatórios possa ser progr am ada ( schedule) é fundam ent al que se
ut ilize as r otinas padr ões par a a em issão dos m esm o. O cont role do schedule é feito pela função SetPrint .
Sendo assim , não é suport ado int er face com dat a entr y durant e o pr ocesso de relat ór io, v ist o que isto
inv iabilizará a utilização do m esm o. A não ser em r elat ór ios específicos e que sejam inviáv eis a utilização de
shedule ( ex . I m pr essão de Cheques) est e procedim ent o deverá ser adot ado corr etam ente.

Caso exista algum a ent r ada de dados que seja possív el ser assum ida qualquer valor apenas no schedule
deve- se adot ar o seguint e pr ocedim ento :

Usar a variável __cI nt ernet , que se est iv er com valor .T. ( Ver dadeir o) estam os no processo de schedule.

I nst r uções para in st alação das St or eds Pr ocedu res

1. Ar quiv os anex ados:


a. .sps - Ar quivo encriptado com as St oreds Procedures.
b. .tx t - Arquivo que docum enta o cont eúdo dos ar quiv os .sps.
c. .pat - Pat ch do Pr otheus. ( é necessár io solicitar )

2. Inst alando o .pat ( se h ou v er ) .

Abra o IDE do Pr ot heus, selecione o m enu Fe rr am e n t as - > Ap lica çã o de Pat ch s. Escolha o


ar quivo .pat e clique em Ok . Est e ar quivo dev e estar dentr o do sever do pr ot heus, pr eferencialm ente dent ro
da past a Sigaadv.

Obs.: Par a baixar o pat ch, pode acessar :


ftp.m icrosiga.com .br / Ap7/ Procedures

Est e patch cont êm os seguint es ar quiv os:


CFGX051.PRW, MATA280.PRX, MATA300.PRX
Cada solicit ant e t em a r esponsabilidade de validar os Pat ches ant es de aplicá- lo na ár ea de
pr odução do client e. Com o pr ocedim ent o obr igat ór io, deve- se efet uar um backup da situação at ual, antes da
aplicação do Pat ch.
Devem os est ar cient e que o Pat ch com plet o que esta no nosso site FTP, contém t odas as alterações
efetuadas até a dat a especificada pelo labor atório de pr odut os da Microsiga, por tant o devem os observ ar que
a at ualização do RPO ou Patch com pleto deste site, não garant e que os Pat ches em er genciais aplicados
est ar ão contem plados. Recom endam os que em caso de dúv ida,v er ifiquem nos docum ent os ex ist ent es no FTP

414

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________415

de sua v er são as datas e alt er ações das r ot inas realizadas junt o com o ar quivo t ex t o anexo, se as m esm as
não ex ist irem , r eapliquem os Patches em er genciais ou façam nov a solicit ação dos m esm os.
Som ent e at ender em os as solicit ações or iginadas de e- m ails com dom ínio @m icr osiga.com .br, e
far em os o envio par a esta m esm a cont a, o solicit ante dev er á ser sem pre o canal de r edir ecionam ent o ao
client e.

3. Inst alando o arquivo .sps.

Ent re no m óldulo configur ador e selecione a opção do instalador de pr ocedur es, nor m alm ent e
encont ada no m enu Am b ie n t e - > Cada st ro s - > St or ed Pr oced u r es.
Apar ecer á um a t ela para que sejam selecionadas as filias par a as quais as St or ed Pr ocedur es ser ão
instaladas. Selecione as filiais desej adas e clique em ok.

Caso não exista o m enu, cr ie. A função que cham a o configur ador é a CFGX0 5 1 ( ) .

V a riá ve is Públic a s Disponíve is no Prot he us

• dDataBase (D, 8) Contém a data selecionada na entrada do sistema.


• cUsuario (C, 533) Contém informações do usuário:
o De 001 a 006 – Senha do Usuário (6 dígitos)
o De 007 a 021 – Nome do Usuário (15 dígitos)
o De 0 2 2 a 5 3 3 – Pe rmissõe s de Ac e sso (5 1 2 dígit os)

• cSenha (C, 6) Senha do Usuário.


• cUserName (C, 15) Nome do Usuário sem brancos a direita.
• cAcesso (C, 128) Permissões de Acesso do Usuário.
• __UserID (C, 6) Número de identificação do usuário no cadastro de
usuários. Ex.: “000006”.
• cNivel (N, 1) Nível de Acesso do Usuário podendo variar de 0 a 9
sendo que 9 indica um Administrador.
• cModulo (C, 3) Sigla do Módulo que está em uso no momento. Ex.:
“EST” para o Módulo de Estoque.
• nModulo (N, 1) Número do Módulo que está em uso no momento. Ex.:
4 para o Módulo de Estoque.
• aEmpresas (A) Array contendo tantos elementos quanto forem as
empresas e filiais cadastradas no sistema sendo que cada elemento se
encontra no formato “EEFF” (Empresa + Filial) Ex.: “5501”.
• cNumEmp (C, 4) Número da Empresa + Filial que está em uso no
momento. Ex.: “9901”.
• cEmpAnt (C, 2) Número da Empresa que está em uso no momento. Ex.:
“55”.

415

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________416

• cFilAnt (C, 2) Número da Filial que está em uso no momento. Ex.:


“01”.
• cArqEmp (C, 12) Nome do arquivo de empresas com sua extensão.
Ex.: “SIGAMAT.EMP”.
• cArqMnu (C, 12) Nome do arquivo de menu que está em uso no
momento + a sua extensão. Ex.: “SIGAEST.MNU”.
• _NomeExec (C, 12) Nome do arquivo executável que está em uso no
momento + a sua extensão. Ex.: “SIGAEST.EXE”.
• cFOpened (C) String com os Alias de todos os arquivos que estão
abertos no momento.
• cVersao (C) Versão do Sistema.
• tInicio (C, 8) Horário em que foi iniciado o sistema no formato
“HH:MM:SS”.
• __Language (C) Língua atual do Sistema. Ex.: “PORTUGUESE”.
• cPaisLoc (C, 3) Sigla do Pais para qual está configurado o
Sistema. Ex.: “BRA”.
• __TTSinUse (L) Indica se o controle de transações está ativo no
sistema. Retorna .T. se MV_TTS = “S” e .F. se for igual a “N”.
• __lSX8 (L) Usada em conjunto com as funções GetSX8Num() e
ConfirmSX8(). Provavelmente para controlar se o número já está
reservado para outro usuário.

416

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com


AdvPl________________________________________________________________417

Este Manual foi elaborado com base na Documentação Eletrônica Microsiga e


outros materiais que foram disponibilizados do grupo de discusao Siga-br.
Esta documentação não se restrige apenas as funções de Programação abrange
outros assuntos em menor escala.
O indece foi colaboração de um outro colega que não quis se identificar no
momento.
Esta e’ a primeira versão oficial deste manual, caso algum colega tenha
documentação e queira compartilha e’ so nos envia, pode também contribui com
sugestões para a melhoria desta documentação.

Autor :Waterloo Ferreira da Silva


[email protected]

Site Interessantes sobre o assunto:


http://www.microsiga.com.br/
http://www.clipx.net/ng/fivewin/index.php
Este site contem help das funções do fivewin que em muitos casos são idênticas
as utilizadas em advpl.
http://mateus.kicks-ass.net/advpl/index.php/Guia_de_Funções
http://www.helpfacil.com.br/

417

PDF Creator - PDF4Free v2.0 http://www.pdf4free.com

Você também pode gostar