Escolar Documentos
Profissional Documentos
Cultura Documentos
AMM - ADVPL Avançado-Rev01
AMM - ADVPL Avançado-Rev01
ADVPL Avanado
(Capacitao Interna)
OBJETIVOS DO CURSO............................................................................................................................... 11
MDULO 05: Introduo orientao objetos ........................................................................................ 12
1. Conceitos de orientao objetos..................................................................................................... 12
1.1. Definies ................................................................................................................................. 12
1.2. Conceitos Bsicos ..................................................................................................................... 15
1.3. O Modelo de Objetos (OMT) ...................................................................................................... 16
1.3.1. Objetos e Classes ..................................................................................................................... 16
1.3.2. Atributos ................................................................................................................................. 17
1.3.3. Operaes e Mtodos ................................................................................................................ 18
1.3.4. Sugestes de desenvolvimento................................................................................................... 19
2. Orientao a objetos em ADVPL ........................................................................................................ 20
2.1. Sintaxe e operadores para orientao a objetos ....................................................................... 20
2.2. Estrutura de uma classe de objetos em ADVPL ......................................................................... 23
2.3. Implementao dos mtodos de uma classe em ADVPL ............................................................ 24
3. Regras adicionais da linguagem ADVPL............................................................................................. 28
3.1. Palavras reservadas.................................................................................................................. 28
3.2. Pictures de formatao disponveis .......................................................................................... 29
MDULO 07: ADVPL Orientado objetos II ............................................................................................... 30
4. Componentes da interface visual do ADVPL ...................................................................................... 30
TSRVOBJECT().............................................................................................................................. 32
TFONT() ...................................................................................................................................... 35
MSDIALOG() ................................................................................................................................ 36
TDIALOG() ................................................................................................................................... 37
TWINDOW() ................................................................................................................................. 40
TCONTROL() ................................................................................................................................ 43
BRGETDDB() ................................................................................................................................ 44
MSCALEND() ................................................................................................................................ 47
MSCALENDGRID()......................................................................................................................... 49
MSSELBR() .................................................................................................................................. 51
MSWORKTIME()............................................................................................................................ 54
SBUTTON() .................................................................................................................................. 57
TBAR() ........................................................................................................................................ 59
TBITMAP() ................................................................................................................................... 61
TBROWSEBUTTON() ...................................................................................................................... 63
TBTNBMP() .................................................................................................................................. 65
TBTNBMP2()................................................................................................................................. 67
TBUTTON() .................................................................................................................................. 69
TCBROWSE()................................................................................................................................ 71
TCHECKBOX() .............................................................................................................................. 75
TCOLORTRIANGLE() ...................................................................................................................... 77
TCOMBOBOX() ............................................................................................................................. 79
TFOLDER() ................................................................................................................................... 82
TGET() ........................................................................................................................................ 84
TGROUP() .................................................................................................................................... 86
THBUTTON() ................................................................................................................................ 88
TIBROWSER() .............................................................................................................................. 89
TLISTBOX().................................................................................................................................. 91
TMENU()...................................................................................................................................... 95
TMENUBAR() ................................................................................................................................ 96
TMETER() .................................................................................................................................... 97
TMSGRAPHIC() ........................................................................................................................... 100
TMSGBAR() ................................................................................................................................ 106
TMSGITEM()............................................................................................................................... 108
TMULTIBTN() ............................................................................................................................. 109
TMULTIGET().............................................................................................................................. 112
TOLECONTAINER()...................................................................................................................... 114
-2-
ADVPL Avanado
TPAGEVIEW() ............................................................................................................................. 116
TPANEL() ................................................................................................................................... 118
TRADMENU() .............................................................................................................................. 119
TSBROWSE().............................................................................................................................. 123
TSAY() ...................................................................................................................................... 127
TSCROLLBOX() ........................................................................................................................... 129
TSIMPLEEDITOR()....................................................................................................................... 130
TSLIDER().................................................................................................................................. 135
TSPLITTER()............................................................................................................................... 138
TTABS()..................................................................................................................................... 142
TTOOLBOX() .............................................................................................................................. 144
TWBROWSE() ............................................................................................................................. 147
VCBROWSE() ............................................................................................................................. 151
4.1. Particularidades dos componentes visuais.............................................................................. 157
4.1.1. Configurando as cores para os componentes .............................................................................. 157
5. Aplicaes com a interface visual do ADVPL.................................................................................... 159
5.1. Captura de informaes simples (Multi-Gets) ......................................................................... 159
5.1.1. Enchoice() ............................................................................................................................. 160
5.1.2. MsMGet()............................................................................................................................... 162
5.2. Captura de mltiplas informaes (Multi-Lines) ..................................................................... 164
5.2.1. MsGetDB() ............................................................................................................................. 165
5.2.2. MsGetDados() ........................................................................................................................ 169
5.2.3. MsNewGetDados() .................................................................................................................. 173
5.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados() .......................................... 178
5.3. Barras de botes..................................................................................................................... 183
5.3.1. EnchoiceBar()......................................................................................................................... 183
5.3.2. TBar() ................................................................................................................................... 185
5.3.3. ButtonBar .............................................................................................................................. 186
5.3.4. Imagens pr-definidas para as barras de botes ......................................................................... 189
6. Outras aplicaes da interface visual do ADVPL .............................................................................. 190
6.1. MaWndBrowse() ..................................................................................................................... 190
6.1.1. Enchoice para Arquivos Temporrios ......................................................................................... 193
6.2. DbTree() ................................................................................................................................. 203
6.3. MsSelect() .............................................................................................................................. 208
7. Introduo relatrios grficos ...................................................................................................... 211
7.1. TReport()................................................................................................................................ 211
7.1.1. Introduo ............................................................................................................................. 211
Finalidade .................................................................................................................................. 211
Descrio................................................................................................................................... 212
Pr-Requisitos ............................................................................................................................ 212
7.1.2. Impresso do relatrio personalizvel........................................................................................ 213
7.1.2.1. Parmetros de impresso ................................................................................................ 213
Impresso.................................................................................................................................. 213
Arquivo...................................................................................................................................... 213
Spool ........................................................................................................................................ 214
E-mail ....................................................................................................................................... 214
Papel......................................................................................................................................... 215
Tamanho do papel ...................................................................................................................... 215
Formato da impresso ................................................................................................................. 215
Configuraes............................................................................................................................. 215
Ttulo ........................................................................................................................................ 215
Ordem....................................................................................................................................... 215
Layout ....................................................................................................................................... 215
Preview ..................................................................................................................................... 215
Executar em segundo plano ......................................................................................................... 216
7.1.3. Personalizao........................................................................................................................ 216
7.1.3.1. Editando o layout do relatrio .......................................................................................... 216
Nova estrutura do relatrio TReport: ............................................................................................. 217
7.1.4. Definindo a Funo ReportDef()................................................................................................ 217
DEFINE REPORT.......................................................................................................................... 218
DEFINE SECTION ........................................................................................................................ 218
DEFINE CELL .............................................................................................................................. 218
-3-
ADVPL Avanado
MDULO 08: Aplicaes ADVPL para o ERP ............................................................................................. 219
8. Protheus e o TOPCONNECT / TOTVS DbAccess ................................................................................ 219
8.1. Caractersticas tcnicas com o uso do TOTVS DbAccess ......................................................... 220
Comportamento de Queries Colunas Calculadas ........................................................................... 220
Comportamento diferenciado com Bandos de Dados PostGres .......................................................... 222
Conceito de ndices Permanentes e Diferenas das RDDs ................................................................. 223
Funcionamento Interno................................................................................................................ 223
Quebra de Compatibilidade com CodeBase/DBF .............................................................................. 224
Lista dos cdigos de erro do TOPConnect / DbAccess....................................................................... 225
8.2. Funes ADVPL para TOPCONNECT / TOTVS DbAccess ........................................................... 226
Lista das funes de interao com a aplicao TopConnect / DbAccess:............................................ 226
Lista das funes acessrias utilizadas nos fontes como facilitadoras:................................................ 226
Funes de interao com o TopConnect / DbAccess ....................................................................... 227
TCCANOPEN () ........................................................................................................................... 227
TCCONTYPE() ............................................................................................................................. 227
TCDELFILE()............................................................................................................................... 228
TCGENQRY() .............................................................................................................................. 229
TCGETDB() ................................................................................................................................ 229
TCLINK() ................................................................................................................................... 230
TCQUERY() ................................................................................................................................ 232
TCQUIT() ................................................................................................................................... 233
TCSETCONN() ............................................................................................................................ 233
TCSETFIELD() ............................................................................................................................ 234
TCSPEXEC() ............................................................................................................................... 236
TCSPEXIST() .............................................................................................................................. 238
TCSQLERROR()........................................................................................................................... 238
TCSQLEXEC() ............................................................................................................................. 239
TCSRVTYPE() ............................................................................................................................. 239
TCUNLINK() ............................................................................................................................... 240
TCCHKOBJ()............................................................................................................................... 241
TCEXEERROR() ........................................................................................................................... 241
TCPGMEXE() .............................................................................................................................. 242
TCSYSEXE() ............................................................................................................................... 242
Funes acessrias para uso em fontes com interao com o TOTVS DbAccess................................... 243
CHANGEQUERY() ........................................................................................................................ 243
RETFULLNAME().......................................................................................................................... 244
RETSQLCOND() .......................................................................................................................... 245
RETSQLNAME()........................................................................................................................... 245
RETSQLTABLE() .......................................................................................................................... 246
SQLCOPY()................................................................................................................................. 246
SQLORDER() .............................................................................................................................. 247
SQLTOTRB()............................................................................................................................... 248
8.3. Aplicaes com controle de comunio com o Banco de Dados ............................................... 249
8.3.1. MaWndBrowse com Alias Temporrio gerado por Query............................................................... 249
Exemplo: MaWndBrowse com Alias Temporrio gerado por Query..................................................... 250
8.3.2. Banco de dados de interface .................................................................................................... 261
Consideraes relevantes sobre as funes TCLink() e TCSetConn().................................................. 261
Consideraes complementares sobre o conceito de Banco de Dados de Interface .............................. 263
8.4. Embedded SQL Facilitador de Querys .................................................................................. 264
Disponibilidade do Recurso........................................................................................................... 264
Caractersticas operacionais - Sintaxe............................................................................................ 265
Limitao:.................................................................................................................................. 265
Erros de Compilao.................................................................................................................... 266
Erros de Execuo....................................................................................................................... 266
Caractersticas operacionais - depurao........................................................................................ 267
Funo auxiliar - GETLastQuery().................................................................................................. 267
9. Funcionalidade MsExecAuto ............................................................................................................ 269
Sobre a MsExecAuto e Rotinas Automticas.................................................................................... 269
Quando utilizar a funcionalidade MsExecAuto ? ............................................................................... 270
Processos da aplicao ERP com tratamentos para execuo por MsExecAuto..................................... 270
Quando no utilizar a funcionalidade MsExecAuto ........................................................................... 271
9.1. Desenvolvendo aplicaes com MsExecAuto ........................................................................... 272
Estrutura de uma rotina com execuo de MsExecAuto .................................................................... 272
Variveis de controle ................................................................................................................... 272
Montagem dos arrays de parmetros............................................................................................. 272
Definio dos parmetros especficos da rotina que ser executada................................................... 276
-4-
ADVPL Avanado
Controle de transao ................................................................................................................. 277
Tratamento de mensagens de erro................................................................................................ 279
Aplicao completa de importao utilizando MsExecAuto: Carga de imobilizado ................................. 282
10. Recursos de envio de e-mail ....................................................................................................... 295
Funes para manipulao de e-mails ........................................................................................... 295
Detalhamento das funes de manipulao de e-mails..................................................................... 295
CALLPROC() ............................................................................................................................... 295
MAILSMTPON() ........................................................................................................................... 296
MAILPOPON() ............................................................................................................................. 296
MAILSMTPOFF().......................................................................................................................... 297
MAILPOPOFF() ............................................................................................................................ 297
MAILRECEIVE()........................................................................................................................... 298
MAILAUTH() ............................................................................................................................... 299
POPMSGCOUNT() ........................................................................................................................ 300
MAILSEND() ............................................................................................................................... 300
MAILGETERR()............................................................................................................................ 301
Exemplos de utilizao das funcionalidades de envio e recebimento de e-mail .................................... 301
Envio de mensagens utilizando sintaxe clssica .............................................................................. 301
Envio de mensagens utilizando funes ......................................................................................... 304
Recebimento de mensagens utilizando funes ............................................................................... 307
11. Integrao bsica com MsOffice.................................................................................................. 309
11.1. Exportao para EXCEL ........................................................................................................... 309
DLGTOEXCEL() ........................................................................................................................... 309
Exemplo de exportao para o Microsoft Excel utilizando a funo DlgToExcel().................................. 310
APNDICES.............................................................................................................................................. 312
Relao de imagens para aplicaes visuais........................................................................................ 312
LISTAS DE EXERCCIOS ........................................................................................................................... 320
Projeto: Avaliao prtica do treinamento de ADVPL Avanado .......................................................... 325
REFERNCIAS BIBLIOGRFICAS.............................................................................................................. 326
GUIA DE REFERNCIA RPIDA: Funes e Comandos ADVPL .................................................................. 328
Converso entre tipos de dados........................................................................................................... 328
CTOD()...................................................................................................................................... 328
CVALTOCHAR()........................................................................................................................... 328
DTOC()...................................................................................................................................... 329
DTOS()...................................................................................................................................... 329
STOD()...................................................................................................................................... 329
STR() ........................................................................................................................................ 330
STRZERO() ................................................................................................................................ 330
VAL() ........................................................................................................................................ 331
Matemticas ........................................................................................................................................ 332
ACOS()...................................................................................................................................... 332
CEILING() .................................................................................................................................. 332
COS()........................................................................................................................................ 332
LOG10() .................................................................................................................................... 333
SIN()......................................................................................................................................... 333
SQRT() ...................................................................................................................................... 334
TAN() ........................................................................................................................................ 334
Anlise de variveis............................................................................................................................. 335
TYPE() ....................................................................................................................................... 335
VALTYPE().................................................................................................................................. 335
Manipulao de arrays......................................................................................................................... 336
AADD()...................................................................................................................................... 336
ACLONE() .................................................................................................................................. 337
ACOPY() .................................................................................................................................... 337
ADEL() ...................................................................................................................................... 338
ADIR()....................................................................................................................................... 339
AFILL() ...................................................................................................................................... 340
AINS()....................................................................................................................................... 340
ARRAY() .................................................................................................................................... 341
ASCAN() .................................................................................................................................... 341
ASCANX() .................................................................................................................................. 342
ASIZE() ..................................................................................................................................... 343
-5-
ADVPL Avanado
ASORT() .................................................................................................................................... 344
ATAIL() ..................................................................................................................................... 345
Manipulao de blocos de cdigo......................................................................................................... 346
EVAL()....................................................................................................................................... 346
DBEVAL()................................................................................................................................... 346
AEVAL()..................................................................................................................................... 348
Manipulao de strings........................................................................................................................ 349
ALLTRIM().................................................................................................................................. 349
ASC() ........................................................................................................................................ 349
AT() .......................................................................................................................................... 350
BITON()..................................................................................................................................... 351
CAPITAL() .................................................................................................................................. 351
CHR()........................................................................................................................................ 351
DESCEND() ................................................................................................................................ 352
GETDTOVAL()............................................................................................................................. 352
ISALPHA().................................................................................................................................. 353
ISDIGIT() .................................................................................................................................. 353
ISLOWER() ................................................................................................................................ 354
ISUPPER().................................................................................................................................. 354
LEN() ........................................................................................................................................ 354
LOWER().................................................................................................................................... 355
LTRIM() ..................................................................................................................................... 355
MATHC().................................................................................................................................... 356
OEMTOANSI() ............................................................................................................................ 356
PADL() / PADR() / PADC()............................................................................................................ 357
RAT() ........................................................................................................................................ 357
REPLICATE() .............................................................................................................................. 358
RETASC()................................................................................................................................... 358
RTRIM()..................................................................................................................................... 359
SPACE()..................................................................................................................................... 359
STRTOKARR()............................................................................................................................. 360
STRTRAN()................................................................................................................................. 360
STUFF() ..................................................................................................................................... 361
SUBSTR() .................................................................................................................................. 361
TRANSFORM() ............................................................................................................................ 362
UPPER()..................................................................................................................................... 362
Manipulao de data / hora................................................................................................................. 363
CDOW()..................................................................................................................................... 363
CMONTH() ................................................................................................................................. 363
DATE() ...................................................................................................................................... 364
DAY() ........................................................................................................................................ 364
DOW()....................................................................................................................................... 365
DTOC()...................................................................................................................................... 365
DTOS()...................................................................................................................................... 366
ELAPTIME() ................................................................................................................................ 366
MONTH() ................................................................................................................................... 367
SECONDS() ................................................................................................................................ 367
TIME()....................................................................................................................................... 368
YEAR() ...................................................................................................................................... 368
Manipulao de variveis numricas ................................................................................................... 369
ABS() ........................................................................................................................................ 369
ALEATORIO() ............................................................................................................................. 369
INT()......................................................................................................................................... 370
NOROUND() ............................................................................................................................... 370
RANDOMIZE() ............................................................................................................................ 371
ROUND() ................................................................................................................................... 371
Manipulao de arquivos ..................................................................................................................... 372
ADIR()....................................................................................................................................... 372
CGETFILE() ................................................................................................................................ 373
CPYS2T() ................................................................................................................................... 379
CPYT2S() ................................................................................................................................... 379
CURDIR()................................................................................................................................... 380
DIRECTORY() ............................................................................................................................. 381
DIRREMOVE()............................................................................................................................. 382
DISKSPACE() ............................................................................................................................. 383
EXISTDIR() ................................................................................................................................ 384
FCLOSE()................................................................................................................................... 384
-6-
ADVPL Avanado
FCREATE() ................................................................................................................................. 385
FERASE() ................................................................................................................................... 386
FILE()........................................................................................................................................ 386
FILENOEXT() .............................................................................................................................. 387
FOPEN() .................................................................................................................................... 388
FREAD() .................................................................................................................................... 390
FREADSTR () .............................................................................................................................. 390
FRENAME() ................................................................................................................................ 391
FSEEK()..................................................................................................................................... 392
FT_FEOF() ................................................................................................................................. 392
FT_FGOTO()............................................................................................................................... 393
FT_FGOTOP() ............................................................................................................................. 393
FT_FLASTREC() .......................................................................................................................... 393
FT_FREADLN()............................................................................................................................ 394
FT_FRECNO() ............................................................................................................................. 395
FT_FSKIP() ................................................................................................................................ 395
FT_FUSE() ................................................................................................................................. 395
FWRITE() ................................................................................................................................... 396
MSCOPYFILE() ............................................................................................................................ 398
MSCOPYTO() .............................................................................................................................. 399
MSCREATE() .............................................................................................................................. 399
MSERASE() ................................................................................................................................ 400
MSRENAME().............................................................................................................................. 401
RETFILENAME() .......................................................................................................................... 401
Manipulao de arquivos e ndices temporrios .................................................................................. 402
CRIATRAB() ............................................................................................................................... 402
Manipulao de bases de dados........................................................................................................... 403
ALIAS() ..................................................................................................................................... 403
BOF() / EOF()............................................................................................................................. 403
COPY() ...................................................................................................................................... 404
COPY STRUCTURE() .................................................................................................................... 407
DBAPPEND() .............................................................................................................................. 407
DBCLEARALLFILTER() .................................................................................................................. 408
DBCLEARFILTER() ....................................................................................................................... 409
DBCLEARINDEX()........................................................................................................................ 409
DBCLOSEALL() ........................................................................................................................... 410
DBCLOSEAREA() ......................................................................................................................... 410
DBCOMMIT() .............................................................................................................................. 411
DBCOMMITALL() ......................................................................................................................... 411
DBCREATE()............................................................................................................................... 412
DBCREATEINDEX()...................................................................................................................... 413
DBDELETE() ............................................................................................................................... 414
DBF() ........................................................................................................................................ 415
DBFIELDINFO() .......................................................................................................................... 415
DBFILTER() ................................................................................................................................ 416
DBGOTO() ................................................................................................................................. 417
DBGOTOP()................................................................................................................................ 417
DBGOBOTTON().......................................................................................................................... 418
DBINFO()................................................................................................................................... 418
DBNICKINDEXKEY() .................................................................................................................... 419
DBORDERINFO()......................................................................................................................... 420
DBORDERNICKNAME()................................................................................................................. 421
DBPACK() .................................................................................................................................. 421
DBRECALL() ............................................................................................................................... 422
DBRECORDINFO()....................................................................................................................... 422
DBREINDEX() ............................................................................................................................. 423
DBRLOCK() ................................................................................................................................ 424
DBRLOCKLIST().......................................................................................................................... 424
DBRUNLOCK() ............................................................................................................................ 425
DBSETDRIVER() ......................................................................................................................... 425
DBSETINDEX() ........................................................................................................................... 426
DBSETNICKNAME() ..................................................................................................................... 427
DBSELECTAREA()........................................................................................................................ 427
DBSETORDER() .......................................................................................................................... 428
DBSEEK() E MSSEEK()................................................................................................................. 429
DBSKIP() ................................................................................................................................... 430
DBSETFILTER()........................................................................................................................... 431
DBSTRUCT() .............................................................................................................................. 432
DBUNLOCK() .............................................................................................................................. 432
-7-
ADVPL Avanado
DBUNLOCKALL() ......................................................................................................................... 433
DBUSEAREA() ............................................................................................................................ 433
DELETED() ................................................................................................................................. 434
FCOUNT() .................................................................................................................................. 434
FOUND().................................................................................................................................... 435
INDEXKEY() ............................................................................................................................... 435
INDEXORD() .............................................................................................................................. 436
LUPDATE() ................................................................................................................................. 436
MSAPPEND() .............................................................................................................................. 437
MSUNLOCK().............................................................................................................................. 437
ORDBAGEXT() ............................................................................................................................ 438
ORDKEY() .................................................................................................................................. 438
RECLOCK() ................................................................................................................................ 439
RECNO().................................................................................................................................... 440
SELECT() ................................................................................................................................... 440
SET FILTER TO ........................................................................................................................... 441
SOFTLOCK()............................................................................................................................... 442
USED() ...................................................................................................................................... 443
ZAP........................................................................................................................................... 443
Controle de numerao seqencial ...................................................................................................... 444
GETSXENUM() ............................................................................................................................ 444
CONFIRMSXE() ........................................................................................................................... 444
ROLLBACKSXE() ......................................................................................................................... 444
Validao............................................................................................................................................. 445
ALLWAYSFALSE()........................................................................................................................ 445
ALLWAYSTRUE() ......................................................................................................................... 445
EXISTCHAV() ............................................................................................................................. 445
EXISTCPO() ............................................................................................................................... 446
LETTERORNUM()......................................................................................................................... 446
NAOVAZIO() .............................................................................................................................. 446
NEGATIVO() ............................................................................................................................... 446
PERTENCE() ............................................................................................................................... 447
POSITIVO() ................................................................................................................................ 447
TEXTO() .................................................................................................................................... 447
VAZIO()..................................................................................................................................... 447
Manipulao de parmetros do sistema............................................................................................... 448
GETMV() .................................................................................................................................... 448
GETNEWPAR() ............................................................................................................................ 448
PUTMV() .................................................................................................................................... 449
SUPERGETMV()........................................................................................................................... 449
Controle de impresso......................................................................................................................... 450
AVALIMP() ................................................................................................................................. 450
CABEC() .................................................................................................................................... 451
IMPCADAST() ............................................................................................................................. 454
MS_FLUSH()............................................................................................................................... 454
OURSPOOL() .............................................................................................................................. 456
RODA()...................................................................................................................................... 457
SETDEFAULT()............................................................................................................................ 459
SETPRC() ................................................................................................................................... 460
SETPRINT()................................................................................................................................ 460
Controle de processamentos ............................................................................................................... 462
ABREEXCL() ............................................................................................................................... 462
CLOSEOPEN()............................................................................................................................. 462
CLOSESFILE() ............................................................................................................................ 462
CHKFILE().................................................................................................................................. 463
CONOUT().................................................................................................................................. 464
CRIAVAR() ................................................................................................................................. 464
DISARMTRANSACTION() .............................................................................................................. 465
EXECBLOCK() ............................................................................................................................. 466
EXISTBLOCK()............................................................................................................................ 466
ERRORBLOCK() .......................................................................................................................... 467
FINAL() ..................................................................................................................................... 469
FINDFUNCTION() ........................................................................................................................ 469
FUNDESC() ................................................................................................................................ 470
FUNNAME() ................................................................................................................................ 470
GETAREA()................................................................................................................................. 470
GETCOUNTRYLIST() .................................................................................................................... 471
-8-
ADVPL Avanado
ISINCALLSTACK() ....................................................................................................................... 471
REGTOMEMORY()........................................................................................................................ 472
RESTAREA() ............................................................................................................................... 473
USEREXCEPTION() ...................................................................................................................... 473
Utilizao de recursos do ambiente ERP .............................................................................................. 475
AJUSTASX1() ............................................................................................................................. 475
ALLUSERS() ............................................................................................................................... 477
ALLGROUPS() ............................................................................................................................. 479
CGC()........................................................................................................................................ 480
CONPAD1() ................................................................................................................................ 480
DATAVALIDA()............................................................................................................................ 481
EXISTINI() ................................................................................................................................. 481
EXTENSO() ................................................................................................................................ 482
FORMULA() ................................................................................................................................ 482
GETADVFVAL() ........................................................................................................................... 482
HELP()....................................................................................................................................... 483
MESEXTENSO() .......................................................................................................................... 484
OBRIGATORIO() ......................................................................................................................... 484
OPENFILE() ................................................................................................................................ 487
PERGUNTE()............................................................................................................................... 488
PESQPICT()................................................................................................................................ 488
PESQPICTQT() ............................................................................................................................ 489
POSICIONE().............................................................................................................................. 489
PUTSX1()................................................................................................................................... 490
RETINDEX() ............................................................................................................................... 491
SIXDESCRICAO() ........................................................................................................................ 491
TABELA() ................................................................................................................................... 492
TAMSX3() .................................................................................................................................. 492
TM().......................................................................................................................................... 493
X1DEF01() ................................................................................................................................. 494
X1PERGUNT()............................................................................................................................. 495
X2NOME().................................................................................................................................. 495
X3CBOX() .................................................................................................................................. 496
X3DESCRIC() ............................................................................................................................. 496
X3PICTURE() .............................................................................................................................. 497
X3TITULO()................................................................................................................................ 498
X3USO() .................................................................................................................................... 498
X5DESCRI() ............................................................................................................................... 499
X6CONTEUD() ............................................................................................................................ 500
X6DESCRIC() ............................................................................................................................. 501
XADESCRIC() ............................................................................................................................. 502
XBDESCRI() ............................................................................................................................... 502
XFILIAL() ................................................................................................................................... 503
Interfaces de cadastro ........................................................................................................................ 504
AXCADASTRO() .......................................................................................................................... 504
AXPESQUI() ............................................................................................................................... 506
AXVISUAL() ............................................................................................................................... 506
AXINCLUI() ................................................................................................................................ 507
AXALTERA() ............................................................................................................................... 508
AXDELETA() ............................................................................................................................... 508
BRWLEGENDA().......................................................................................................................... 509
ENDFILBRW() ............................................................................................................................. 509
FILBROWSE() ............................................................................................................................. 510
PESQBRW()................................................................................................................................ 510
MARKBROW() ............................................................................................................................. 511
MBROWSE() ............................................................................................................................... 515
MODELO2()................................................................................................................................ 523
MODELO3()................................................................................................................................ 526
Interfaces visuais para aplicaes....................................................................................................... 529
ALERT() ..................................................................................................................................... 529
AVISO()..................................................................................................................................... 530
FORMBACTH() ............................................................................................................................ 530
MSGFUNCTIONS()....................................................................................................................... 531
Recursos das interfaces visuais........................................................................................................... 532
GDFIELDGET()............................................................................................................................ 532
GDFIELDPOS() ........................................................................................................................... 532
GDFIELDPUT()............................................................................................................................ 532
-9-
ADVPL Avanado
GETMARK() ................................................................................................................................ 533
ISMARK()................................................................................................................................... 534
MARKBREFRESH()....................................................................................................................... 534
READVAR() ................................................................................................................................ 535
THISINV().................................................................................................................................. 535
THISMARK()............................................................................................................................... 535
- 10 -
ADVPL Avanado
OBJETIVOS DO CURSO
Objetivos especficos do curso:
- 11 -
ADVPL Avanado
MDULO 05: Introduo orientao objetos
Neste tpico sero os conceitos de programao orientada a objetos listados abaixo. Esta
breve viso geral do paradigma permitir entender melhor os conceitos associados
programao orientada a objetos e, em particular, s construes implementadas atravs da
linguagem ADVPL.
Objetos
Herana
Atributos
Mtodos
Classes
Abstrao
Generalizao
Encapsulamento
Polimorfismo
1.1. Definies
Objeto
Um objeto uma entidade do mundo real que tem uma identidade. Objetos podem
representar entidades concretas (um arquivo no meu computador, uma bicicleta) ou entidades
conceituais (uma estratgia de jogo, uma poltica de escalonamento em um sistema
operacional). Cada objeto ter sua identidade significa que dois objetos so distintos mesmo
que eles apresentem exatamente as mesmas caractersticas.
- 12 -
ADVPL Avanado
Classe
Cada classe descreve um conjunto (possivelmente infinito) de objetos individuais. Cada objeto
dito ser uma instncia de uma classe. Assim, cada instncia de uma classe tem seus prprios
valores para cada atributo, mas dividem os nomes dos atributos e mtodos com as outras
instncias da classe. Implicitamente, cada objeto contm uma referncia para sua prpria
classe, em outras palavras, ele sabe o que ele .
- 13 -
ADVPL Avanado
Polimorfismo
Polimorfismo tambm implica que uma operao de uma mesma classe pode ser
implementada por mais de um mtodo. O usurio no precisa saber quantas implementaes
existem para uma operao, ou explicitar qual mtodo deve ser utilizado: a linguagem de
programao deve ser capaz de selecionar o mtodo correto a partir do nome da operao,
classe do objeto e argumentos para a operao. Desta forma, novas classes podem ser
adicionadas sem necessidade de modificao de cdigo j existente, pois cada classe apenas
define os seus mtodos e atributos.
No mundo real, alguns objetos e classes podem ser descritos como casos especiais, ou
especializaes, de outros objetos e classes. Por exemplo, a classe de computadores pessoais
com processador da linha 80x86 uma especializao de computadores pessoais, que por sua
vez uma especializao de computadores. No desejvel que tudo que j foi descrito para
computadores tenha de ser repetido para computadores pessoais ou para computadores
pessoais com processador da linha 80x86.
Herana
- 14 -
ADVPL Avanado
1.2. Conceitos Bsicos
Abstrao
Abstrao consiste de focalizar nos aspectos essenciais inerentes a uma entidade e ignorar
propriedades acidentais. Em termos de desenvolvimento de sistemas, isto significa
concentrar-se no que um objeto e faz antes de se decidir como ele ser implementado. O
uso de abstrao preserva a liberdade para tomar decises de desenvolvimento ou de
implementao apenas quando h um melhor entendimento do problema a ser resolvido.
Encapsulamento
Compartilhamento
- 15 -
ADVPL Avanado
O desenvolvimento orientado a objetos no apenas permite que a informao dentro de um
projeto seja compartilhada como tambm oferece a possibilidade de reaproveitar projetos e
cdigo em projetos futuros. As ferramentas para alcanar este compartilhamento, tais como
abstrao, Encapsulamento e herana, esto presentes na metodologia; uma estratgia de
reuso entre projetos a definio de bibliotecas de elementos reusveis. Entretanto,
orientao a objetos no uma frmula mgica para alcanar reusabilidade; para tanto,
preciso planejamento e disciplina para pensar em termos genricos, no voltados
simplesmente para a aplicao corrente.
Uma vez que as principais definies e conceitos da abordagem de orientao a objetos esto
definidos, possvel introduzir o modelo de objetos que ser adotado ao longo deste texto. O
modelo apresentado um subconjunto do modelo OMT (Object Modeling Technique), proposto
por Rumbaugh entre outros. Este modelo tambm introduz uma representao diagramtica
para este modelo, a qual ser tambm apresentada aqui.
Objeto definido neste modelo como um conceito, abstrao ou coisa com limites e
significados bem definidos para a aplicao em questo. Objetos tm dois propsitos:
promover o entendimento do mundo real e suportar uma base prtica para uma
implementao computacional. No existe uma maneira correta de decompor um problema
em objetos; esta decomposio depende do julgamento do projetista e da natureza do
problema. Todos os objetos tm identidade prpria e so distinguveis.
Uma classe de objetos descreve um grupo de objetos com propriedades (atributos) similares,
comportamentos (operaes) similares, relacionamentos comuns com outros objetos e uma
semntica comum. Por exemplo, Pessoa e Companhia so classes de objetos. Cada pessoa
tem um nome e uma idade; estes seriam os atributos comuns da classe. Companhias tambm
podem ter os mesmos atributos nome e idade definidos. Entretanto, devido distino
semntica elas provavelmente estariam agrupados em outra classe que no Pessoa. Como se
pode observar, o agrupamento em classes no leva em conta apenas o compartilhamento de
propriedades.
Todo objeto sabe a que classe ele pertence, ou seja, a classe de um objeto um atributo
implcito do objeto. Este conceito suportado na maior parte das linguagens de programao
orientada a objetos, inclusive em ADVPL.
- 16 -
ADVPL Avanado
Figura: Representao diagramtica de OMT para classes e objetos
1.3.2. Atributos
Um atributo um valor de dado assumido pelos objetos de uma classe. Nome, idade e peso
so exemplos de atributos de objetos Pessoa. Cor, peso e modelo so possveis atributos de
objetos Carro. Cada atributo tem um valor para cada instncia de objeto. Por exemplo, o
atributo idade tem valor ``29'' no objeto Pedro Y. Em outras palavras, Pedro Y tem 29 anos de
idade. Diferentes instncias de objetos podem ter o mesmo valor para um dado atributo.
Cada nome de atributo nico para uma dada classe, mas no necessariamente nico entre
todas as classes. Por exemplo, ambos Pessoa e Companhia podem ter um atributo chamado
endereo.
- 17 -
ADVPL Avanado
1.3.3. Operaes e Mtodos
Uma operao uma funo ou transformao que pode ser aplicada a ou por objetos em uma
classe. Por exemplo, abrir, salvar e imprimir so operaes que podem ser aplicadas a objetos
da classe Arquivo. Todos os objetos em uma classe compartilham as mesmas operaes.
Uma mesma operao pode se aplicar a diversas classes diferentes. Uma operao como esta
dita ser polimrfica, ou seja, ela pode assumir distintas formas em classes diferentes.
Um mtodo a implementao de uma operao para uma classe. Por exemplo, a operao
imprimir pode ser implementada de forma distinta, dependendo se o arquivo a ser impresso
contm apenas texto ASCII, um arquivo de um processador de texto ou binrio. Todos estes
mtodos executam a mesma operao: imprimir o arquivo; porm, cada mtodo ser
implementado por um diferente cdigo.
- 18 -
ADVPL Avanado
1.3.4. Sugestes de desenvolvimento
- 19 -
ADVPL Avanado
2. Orientao a objetos em ADVPL
Neste tpico ser detalhada a forma com a qual a linguagem ADVPL implementa os conceitos
de orientao a objetos e a sintaxe utilizada no desenvolvimento de aplicaes.
Palavras reservadas
CLASS
CLASSDATA
CONSTRUCTOR
DATA
ENDCLASS
EXPORT
FROM
HIDDEN
METHOD
PROTECTED
SELF
CLASS
CLASSDATA
CONSTRUCTOR
- 20 -
ADVPL Avanado
DATA
ENDCLASS
Sintaxe ENDCLASS
EXPORT
FROM
HIDDEN
METHOD
- 21 -
ADVPL Avanado
PROTECTED
SELF
Operadores especficos
Local nPosCurso := 0
Local nNota := 0
nNota := ::aCursos[nPosCurso][2]
ENDIF
Return nNota
- 22 -
ADVPL Avanado
2.2. Estrutura de uma classe de objetos em ADVPL
Declarao da classe
Exemplo:
#include protheus.ch
CLASS Pessoa()
Desta forma recomendado o uso da notao Hngara tambm para a definio dos atributos
de forma a facilitar a anlise, interpretao e utilizao da classe e seus objetos instanciados.
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
A prototipao dos mtodos uma regra utilizada pelas linguagens orientadas a objetos,
atravs da qual so especificadas as operaes que podem ser realizadas pelo objeto,
diferenciando os mtodos de outras funes internas de uso da classe, e para especificar quais
so os mtodos construtores.
- 23 -
ADVPL Avanado
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
ENDCLASS
Mtodo Construtor
O mtodo construtor possui a caracterstica de retornar um objeto com o tipo da classe da qual
o mesmo foi instanciado. Por esta razo diz-se que o tipo do objeto instanciado a classe
daquele objeto.
Para produzir este efeito, o mtodo construtor utiliza a palavra reservada SELF, a qual
utilizada pela linguagem ADVPL para referncia a prpria classe daquele objeto.
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
ENDCLASS
::cNome := cNome
::nIdade := nIdade
Return SELF
- 24 -
ADVPL Avanado
Manipulao de atributos
Os atributos definidos para uma classe com a utilizao da palavra reservada DATA em sua
declarao podem ser manipulados por seus mtodos utilizando o operador ::.
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
::cNome := cNome
::nIdade := nIdade
Return SELF
#include protheus.ch
Local oPessoa
Local cNome :=
Local dNascimento:= CTOD()
Local aDados := {}
aDados := GetDados()
oPessoa := Pessoa():Create(cNome,dNascimento)
Return
- 25 -
ADVPL Avanado
Exemplo parte 02: Classe Pessoa
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
DATA dNascimento
ENDCLASS
Seguindo o principio da orientao a objetos, a linguagem ADVPL permite que uma classe
receba por herana os mtodos e atributos definidos em uma outra classe, a qual tornasse a
superclasse desta instncia.
Para utilizar este recurso deve ser utilizada a palavra reservada FROM na declarao da
classe, especificando a superclasse que ser referenciada.
Em ADVPL o exemplo prtico desta situao a superclasse TSrvObject, a qual utilizada pela
maioria das classes e componentes da interface visual, como demonstrado no mdulo 06.
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
DATA dNascimento
ENDCLASS
- 26 -
ADVPL Avanado
Exemplo parte 02: Declarao da classe Aluno
#include protheus.ch
CLASS Aluno() FROM Pessoa
DATA nID
DATA aCursos
ENDCLASS
Quanto utilizado o recurso de herana entre classes, o construtor da classe instanciada deve
receber um tratamento adicional, para que o objeto instanciado seja criado com os atributos e
mtodos definidos na superclasse.
Nestes casos, logo aps a definio do mtodo construtor da classe, dever ser executado o
mtodo construtor da superclasse.
METHOD Create(cNome,dNascimento,nID)
:Create(cNome,dNascimento) // Chamada do mtodo construtor da classe Pessoa.
::nID := ID
Return SELF
- 27 -
ADVPL Avanado
3. Regras adicionais da linguagem ADVPL
- 28 -
ADVPL Avanado
3.2. Pictures de formatao disponveis
Funes
Contedo Funcionalidade
A Permite apenas caracteres alfabticos.
C Exibe CR depois de nmeros positivos.
E Exibe numrico com o ponto e vrgula invertidos (formato Europeu).
R Insere caracteres diferentes dos caracteres de template na exibio, mas no os
insere na varivel do GET.
S<n> Permite rolamento horizontal do texto dentro do GET, <n> um nmero inteiro
que identifica o tamanho da regio.
X Exibe DB depois de nmeros negativos.
Z Exibe zeros como brancos.
( Exibe nmeros negativos entre parnteses com os espaos em branco iniciais.
) Exibe nmeros negativos entre parnteses sem os espaos em branco iniciais.
! Converte caracteres alfabticos para maisculo.
Templates
Contedo Funcionalidade
X Permite qualquer caractere.
9 Permite apenas dgitos para qualquer tipo de dado, incluindo o sinal para
numricos.
# Permite dgitos, sinais e espaos em branco para qualquer tipo de dado.
! Converte caracteres alfabticos para maisculo.
* Exibe um asterisco no lugar dos espaos em branco iniciais em nmeros.
. Exibe o ponto decimal.
, Exibe a posio do milhar.
A1_NOME Caracter - 40
Picture: @!
- 29 -
ADVPL Avanado
MDULO 07: ADVPL Orientado objetos II
Neste mdulo sero tratados os componentes e objetos da interface visual da linguagem
ADVPL, permitindo o desenvolvimento de aplicaes com interfaces grficas com sintaxe
orientada a objetos.
A linguagem ADVPL possui diversos componentes visuais e auxiliares, os quais podem ser
representados utilizando a estrutura abaixo:
Classes de Janelas
Msdialog
Tdialog
Twindow
Classes de Componentes
Tcontrol
Classes de Componentes
Visuais
Brgetddb
Mscalend
Mscalendgrid
Msselbr
Msworktime
Sbutton
Tbar
Tbitmap
Tbrowsebutton
Tbtnbmp
Tbtnbmp2
Tbutton
Tcbrowse
Tcheckbox
Tcolortriangle
Tcombobox
Tfolder
Tfont
Tget
Tgroup
Thbutton
Tibrowser
Tlistbox
Tmenu
Tmenubar
Tmeter
Tmsgraphic
Tmsgbar
Tmultibtn
Tmultiget
Tolecontainer
Tpageview
Tpanel
Tradmenu
Tsbrowse
Tsay
Tscrollbox
Tsimpleeditor
- 30 -
ADVPL Avanado
Tslider
Classes de Componentes
Visuais
Tsplitter
Ttabs
Ttoolbox
Twbrowse
Vcbrowse
- 31 -
ADVPL Avanado
objeto ser desabilitado.
TSRVOBJECT()
Propriedades:
Parmetros:
Nenhum -
- 32 -
ADVPL Avanado
Mtodos auxiliares:
SetFocus
Nenhum -
Retorno:
Nil
Hide
Nenhum -
Retorno:
Nil
Show
Nenhum -
Retorno:
Nil
Enable
Nenhum -
Retorno:
Nil
- 33 -
ADVPL Avanado
Disable
Nenhum -
Retorno:
Nil
Refresh
Nenhum -
Retorno:
Nil
Exemplo:
- 34 -
ADVPL Avanado
Classes auxiliares
TFONT()
Descrio: Classe de objetos que define a fonte do texto utilizado nos controles
visuais.
Propriedades:
Parmetros:
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg, oSay
DEFINE MSDIALOG oDlg FROM 0,0 TO 200,200 TITLE 'My dialog' PIXEL
// Cria font para uso
oFont:= TFont():New('Courier New',,-14,.T.)
// Apresenta o tSay com a fonte Courier New
oSay := TSay():New( 10, 10, {|| 'Mensagem'},oDlg,, oFont,,,, .T.,
CLR_WHITE,CLR_RED )
oSay:lTransparent:= .F.
ACTIVATE MSDIALOG oDlg CENTERED
Return
- 35 -
ADVPL Avanado
Classes de janelas
MSDIALOG()
Descrio: Classe de objetos que deve ser utilizada como padro de janela para
entrada de dados. MSDialog um tipo de janela dilogo modal, isto
, no permite que outra janela ativa receba dados enquanto esta
estiver ativa.
Propriedades:
Parmetros:
- 36 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
// cria dilogo
Local oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
TDIALOG()
Propriedades:
Parmetros:
- 37 -
ADVPL Avanado
ou caracteres.
acCaption Caractere, opcional. Ttulo da janela.
cPar6 Reservado.
nPar7 Reservado.
lPar8 Reservado.
nPar9 Reservado.
anClrText Numrico,opcional. Cor do texto.
anClrBack Numrico,opcional. Cor de fundo.
oPar12 Reservado.
Objeto, opcional. Janela me da janela a ser criada, padro
aoWnd
a janela principal do programa.
Lgico, opcional. Se .T. considera as coordenadas passadas
alPixel
em pixels, se .F. considera caracteres.
oPar15 Reservado.
oPar16 Reservado.
nPar17 Reservado.
anWidth Numrico, opcional. Largura da janela em pixels.
anHeight Numrico, opcional. Altura da janela em pixels.
Mtodos auxiliares:
Activate
bPar1 Reservado.
bPar2 Reservado.
bPar3 Reservado.
Lgico, opcional. Se .T. exibe a janela centralizada, .F.
alCentered
padro.
Bloco de cdigo, opcional. Deve retornar .T. se contedo
abValid do dilogo vlido, se retornar .F. o dilogo no fechar
quando solicitada de encerrar.
lPar6 Reservado.
Bloco de cdigo, opcional. Executado quando o dilogo
abInit
inicia exibio.
bPar8 Reservado.
bPar9 Reservado.
Retorno:
Nenhum -
- 38 -
ADVPL Avanado
End
Nenhum -
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
// cria dilogo
oDlg := MSDialog():New(10,10,300,300,'Meu
dialogo',,,,,CLR_BLACK,CLR_WHITE,,,.T.)
// ativa dilogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando..
.')} )
- 39 -
ADVPL Avanado
TWINDOW()
Propriedades:
Parmetros:
- 40 -
ADVPL Avanado
Mtodos auxiliares:
Activate
Descrio: Ativa (exibe) a janela. Chamar esse mtodo apenas uma vez.
Sintaxe: Activate([acShow], [bPar2], [bPar3], [bPar4], [bPar5], [bPar6],
[ abInit ], [bPar8], [bPar9], [bPar10], [bPar11], [bPar12] ,[bPar13],
[bPar14], [bPar15], [abValid], [bPar17], [bPar18] ).
Parmetros:
Retorno:
Nenhum -
End
Nenhum -
- 41 -
ADVPL Avanado
Center
Nenhum -
Nenhum -
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oWindow
Local abInit:= {||conout('ativando!')}
Local abValid:= {||conout('encerrando!'),.T.}
oWindow:= tWindow():New( 10, 10, 200, 200, 'Meu
programa',,,,,,,,CLR_WHITE,CLR_BLACK,,,,,,,.T. )
oWindow:Activate('MAXIMIZED',,,,,,abInit,,,,,,,,,abValid,,)
- 42 -
ADVPL Avanado
Classes de componentes
TCONTROL()
Propriedades:
Parmetros:
Nenhum -
Mtodos auxiliares:
SetFocus
Nenhum -
Retorno:
Nil
Exemplo:
- 43 -
ADVPL Avanado
Classes de componentes visuais
BRGETDDB()
Propriedades:
Parmetros:
- 44 -
ADVPL Avanado
Bloco de cdigo, opcional. Executado quando o contedo do
bValid controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
aAlter No Utilizado
oMother No Utilizado
Mtodos auxiliares:
GoUp
Nenhum -
Retorno:
Nil
GoDown
Nenhum -
Retorno:
Nil
GoTop
Nenhum -
Retorno:
Nil
GoBottom
Nenhum -
Retorno:
- 45 -
ADVPL Avanado
Nil
RowCount
Nenhum -
Retorno:
Nil
Aparncia:
- 46 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'
DbSelectArea('SA1')
oBrowse := BrGetDDB():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))
// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
MSCALEND()
Propriedades:
- 47 -
ADVPL Avanado
Parmetros:
Aparncia:
Exemplo:
#include 'protheus.ch'
user function Calend_Ex()
DEFINE MSDIALOG oDlg FROM 0,0 TO 1000,1000 PIXEL TITLE 'Exemplo de
MsCalend'
// Cria objeto
oCalend:=MsCalend():New(01,01,oDlg,.T.)
// Code-Block para mudana de Dia
oCalend:bChange := {|| Alert('Dia Selecionado: ' +
dtoc(oCalend:dDiaAtu)) }
// Code-Block para mudana de mes
oCalend:bChangeMes := {|| alert('Mes alterado') }
ACTIVATE MSDIALOG oDlg CENTERED
Return
- 48 -
ADVPL Avanado
MSCALENDGRID()
Propriedades:
Parmetros:
Mtodos auxiliares:
Add
- 49 -
ADVPL Avanado
nColor Numerico. Cor que destacara o item
cDescri Caracter, Opicional. Descrio do tipo tooltip(hint) do item
Retorno:
Nil
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
nResolution := 1
oMsCalendGrid := MsCalendGrid():New( oDlg, 01, 01, 500,300,;
date(), nResolution, ,{|x,y| Alert(x) },;
RGB(255,255,196), {|x,y|Alert(x,y)}, .T.
)
oMsCalendGrid:Add('caption 01', 1, 10, 20, RGB(255,000,0),
'Descricao 01')
oMsCalendGrid:Add('caption 02', 2, 20, 30, RGB(255,255,0),
'Descricao 02')
oMsCalendGrid:Add('caption 03', 3, 01, 05, RGB(255,0,255),
'Descricao 03')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
- 50 -
ADVPL Avanado
MSSELBR()
Propriedades:
Parmetros:
- 51 -
ADVPL Avanado
Mtodos auxiliares:
GoUp
Nenhum -
Retorno:
Nil
GoDown
Nenhum -
Retorno:
Nil
GoTop
Nenhum -
Retorno:
Nil
GoBottom
Nenhum -
Retorno:
Nil
- 52 -
ADVPL Avanado
RowCount
Nenhum -
Retorno:
Nil
Aparncia:
- 53 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'
DbSelectArea('SA1')
oBrowse := MsSelBr():New(
1,1,200,150,,,,oDlg,,,,,,,,,,,,.F.,'SA1',.T.,,.F.,,, )
oBrowse:AddColumn(TCColumn():New('Codigo',{||SA1->A1_COD
},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Loja' ,{||SA1-
>A1_LOJA},,,,'LEFT',,.F.,.F.,,,,.F.,))
oBrowse:AddColumn(TCColumn():New('Nome' ,{||SA1-
>A1_NOME},,,,'LEFT',,.F.,.F.,,,,.F.,))
// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,{||
Alert(oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
MSWORKTIME()
Propriedades:
Parmetros:
- 54 -
ADVPL Avanado
Numrico, opcional. Coordenada horizontal em pixels ou
anCol
caracteres.
anHeight Numrico, opcional. Altura do boto em pixels.
anWidth Numrico, opcional. Largura do boto em pixels.
nResolution Numrico, Resoluo a ser aplicada na grid do Calendrio
cValue Caracter, opcional. Descritivo
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
abWhen
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
Bloco de cdigo, opcional. Bloco que dever ser acionado
abChange
quando o boto for pressionado.
Mtodos auxiliares:
GetValue
Nenhum -
Retorno:
GetInterTime
Nenhum -
Retorno:
SetResol
nResolution Resoluo
Retorno:
Nil
- 55 -
ADVPL Avanado
SetValue
Retorno:
Nenhum
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMsWorkTime := MsWorkTime():New(oDlg,04,04,280,133,0,'',{||.T.},;
{|oWorkTime|Alert('GetValue():
'+oWorkTime:GetValue()+chr(13)+;
'GetInterTime():
'+oWorkTime:GetInterTime())} )
oMsWorkTime:SetValue('X X XX X')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
- 56 -
ADVPL Avanado
SBUTTON()
Propriedades:
Parmetros:
Mtodos auxiliares:
Create
Nenhum -
Retorno:
- 57 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oSButton1 := SButton():New( 01,01,1,{||Alert('SButton
01')},oDlg,.T.,,)
oSButton2 := SButton():New( 21,01,2,{||Alert('SButton
02')},oDlg,.T.,,)
oSButton3 := SButton():New( 41,01,3,{||Alert('SButton
03')},oDlg,.T.,,)
oSButton4 := SButton():New( 61,01,4,{||Alert('SButton
04')},oDlg,.T.,,)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
- 58 -
ADVPL Avanado
TBAR()
Propriedades:
Construtor:
Parmetros:
Aparncia:
- 59 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
/*/
+------------------------------------------------------------------------
| Funo | TSTBAR | Autor | MICROSIGA |Data | |
+------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------
/*/
Exemplo (continuao):
oDlg:lCentered := .T.
oDlg:Activate()
Return
- 60 -
ADVPL Avanado
TBITMAP()
Propriedades:
Parmetros:
- 61 -
ADVPL Avanado
Mtodos auxiliares:
Create
Nenhum -
Retorno:
SetBmp
Retorno:
Nenhum -
Load
Retorno:
Nenhum -
Aparncia:
- 62 -
ADVPL Avanado
Exemplo:
#include protheus.ch
Return
TBROWSEBUTTON()
Propriedades:
Parmetros:
nHelpId Reservado
Objeto, opcional. Objeto tipo tFont com propriedades da
oFont
fonte utilizada para o ttulo do boto.
lDefault Reservado
Lgico, opcional. Se .T. considera as coordenadas passadas
lPixel
em pixels, se .F. (padro) considera em caracteres.
- 63 -
ADVPL Avanado
lDesign Reservado
cMsg Reservado
lUpdate Reservado
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
bWhen
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
bValid Reservado
lCancel Reservado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBrowseButton := TBrowseButton():New( 01,01,'TBrowseButton',oDlg,;
{||Alert('TBrowseButton')},40,10,,,.F.,.T.,.F.,,.F.,,,)
- 64 -
ADVPL Avanado
TBTNBMP()
Descrio: Classe de objetos visuais do tipo boto, o qual permite que seja
vinculada uma imagem ao controle.
Propriedades:
Parmetros:
- 65 -
ADVPL Avanado
Mtodos auxiliares:
LoadBitmaps
Parmetros:
Retorno:
Nenhum
SetPopUpMenu
Nenhum -
Retorno:
Nenhum -
Aparncia:
- 66 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. ) // Orig: 25,45
oTBtnBmp1 := TBtnBmp() :NewBar('RPMNEW',,,,'Msg 01',;
{||Alert('TBtnBmp
01')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
oTBtnBmp2 := TBtnBmp() :NewBar('copyuser',,,,'Msg 02',;
{||Alert('TBtnBmp
02')},.F.,oTBar,.T.,{||.T.},,.F.,,,1,,,,,.T. )
TBTNBMP2()
Propriedades:
Parmetros:
Mtodos auxiliares:
- 67 -
ADVPL Avanado
LoadBitmaps
Parmetros:
Retorno:
Nenhum
SetPopUpMenu
Nenhum -
Retorno:
Nenhum -
Aparncia:
- 68 -
ADVPL Avanado
Exemplo:
/**************************/
Static Function TShowMenu()
Local oMenu
oMenu := TMenu():New(0,0,0,0,.T.)
oMenu:Add(TMenuItem():New(,'Detalhes', 'Detalhes',,, ,,,,,,,,,.T.))
oMenu:Add(TMenuItem():New(,'Add Info', 'Add Info',,, ,,,,,,,,,.T.))
Return oMenu
TBUTTON()
Propriedades:
Parmetros:
- 69 -
ADVPL Avanado
lPar10 Reservado.
Lgico, opcional. Se .T. considera as coordenadas passadas
alPixel
em pixels, se .F. (padro) considera em caracteres.
lPar12 Reservado.
cPar13 Reservado.
lPar14 Reservado.
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
abWhen
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
bPar16 Reservado.
lPar17 Reservado.
Aparncia:
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')
- 70 -
ADVPL Avanado
TCBROWSE()
Propriedades:
Parmetros:
- 71 -
ADVPL Avanado
controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
Lgico, opcional. Se .T., habilita barra de rolagem
lHScroll
horizontal.
lVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.
Mtodos auxiliares:
GoUp
Nenhum -
Retorno:
Nil
GoDown
Nenhum -
Retorno:
Nil
GoTop
Nenhum -
Retorno:
Nil
GoBottom
Nenhum -
Retorno:
- 72 -
ADVPL Avanado
Nil
RowCount
Nenhum -
Retorno:
Nil
Aparncia:
- 73 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
user function TcBrowse_EX()
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
Local aList := {} // Vetor com elementos do Browse
Local nX
// Cria Vetor para teste
for nX := 1 to 100
aListAux := {.T., strzero(nX,10), 'Descrio do Produto '+;
strzero(nX,3), 1000.22+nX}
aadd(aList, aListAux)
next
DEFINE MSDIALOG oDlg FROM 0,0 TO 520,600 PIXEL TITLE 'Exemplo da TCBrowse'
// Cria objeto de fonte que sera usado na Browse
Define Font oFont Name 'Courier New' Size 0, -12
// Cria Browse
oList := TCBrowse():New( 01 , 01, 300, 200,,;
'','Codigo','Descrio','Valor'},{20,50,50,50},;
oDlg,,,,,{||},,oFont,,,,,.F.,,.T.,,.F.,,, )
// Seta o vetor a ser utilizado
oList:SetArray(aList)
// Monta a linha a ser exibina no Browse
oList:bLine := {||{ If(aList[oList:nAt,01],oOK,oNO),;
aList[oList:nAt,02],;
aList[oList:nAt,03],;
Transform(aList[oList:nAT,04],'@E 99,999,999,999.99') } }
// Evento de DuploClick (troca o valor do primeiro elemento do Vetor)
oList:bLDblClick := {|| aList[oList:nAt][1] :=;
!aList[oList:nAt][1],oList:DrawSelect() }
// Principais commandos
oBtn := TButton():New( 210, 001,'GoUp()' , oDlg,{||oList:GoUp()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 001,'GoDown()', oDlg,{||oList:GoDown()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 230, 001,'GoTop()' , oDlg,{||oList:GoTop()}, ;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 001,'GoBottom()', oDlg,{||oList:GoBottom()},;
40, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 210, 060, 'nAt (Linha selecionada)' ,;
oDlg,{|| Alert(oList:nAt)},;
90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 220, 060, 'nRowCount (Nr de linhas visiveis)',
oDlg,;{|| Alert(oList:nRowCount()) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
- 74 -
ADVPL Avanado
TCHECKBOX()
Propriedades:
Parmetros:
- 75 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
user function TCheckBox()
DEFINE MSDIALOG oDlg FROM 0,0 TO 270,400 PIXEL TITLE 'Exemplo da
TCBrowse'
lCheck1 := .T.
oCheck1 := TCheckBox():New(01,01,'CheckBox 001',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck2 := TCheckBox():New(11,01,'CheckBox 002',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck3 := TCheckBox():New(21,01,'CheckBox 003',,oDlg,
100,210,,,,,,,,.T.,,,)
- 76 -
ADVPL Avanado
TCOLORTRIANGLE()
Propriedades:
Parmetros:
Mtodos auxiliares:
Create
Retorno:
RetColor
Nenhum -
Retorno:
- 77 -
ADVPL Avanado
SetColorIni
Retorno:
Nenhum -
SetColor
Retorno:
Nenhum -
SetSizeTriangule
Retorno:
Nenhum -
Aparncia:
- 78 -
ADVPL Avanado
Exemplo:
#include protheus.ch
TCOMBOBOX()
Propriedades:
Parmetros:
Parmetro
Numrico, opcional. Coordenada vertical em pixels ou
anRow
caracteres.
Numrico, opcional. Coordenada horizontal em pixels ou
anCol
caracteres.
Bloco de cdigo, opcional. Bloco de cdigo no formato {|u|
if( Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza
para atualizar a varivel <var>. <var> deve ser tipo
abSetGet caracter. Se a lista for seqencial, o controle atualizar
<var> com o contedo do item selecionado, se a lista for
indexada, <var> ser atualizada com o valor do ndice do
item selecionado.
Array, opcional. Lista de items, caracteres, a serem exibidos.
Pode ter os seguintes formatos: a) Seqencial, exemplo:
anItems
{item1,item2,...,itemN} ou b) Indexada, exemplo:
{a=item1,b=item2, ..., n=itemN}.
anWidth Numrico, opcional. Largura do controle em pixels.
- 79 -
ADVPL Avanado
anHeight Numrico, opcional. Altura do controle em pixels.
Objeto, opcional. Janela ou controle onde o controle ser
aoWnd
criado.
nPar8 Reservado.
Bloco de cdigo, opcional. Executado quando o controle
abChange
modifica o item selecionado.
Bloco de cdigo, opcional. Executado quando o contedo do
abValid controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
anClrBack Numrico, opcional. Cor de fundo do controle.
anClrText Numrico, opcional. Cor do texto do controle.
Lgico, opcional. Se .T. as coordenadas informadas so em
alPixel
pixels, se .F. so em caracteres.
Objeto, opcional. Objeto tipo tFont utilizado para definir as
aoFont caractersticas da fonte utilizada para exibir o contedo do
controle.
cPar15 Reservado.
lPar16 Reservado.
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
abWhen
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lPar18 Reservado.
aPar19 Reservado.
bPar20 Reservado.
cPar21 Reservado.
Caractere, opcional. Nome da varivel que o controle dever
acReadVar manipular, dever ser a mesma varivel informada no
parmetro abSetGet, e ser o retorno da funo ReadVar( ).
Mtodos auxiliares:
Select
Retorno:
Nenhum -
- 80 -
ADVPL Avanado
Aparncia:
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')
- 81 -
ADVPL Avanado
TFOLDER()
Propriedades:
Parmetros:
Mtodos auxiliares:
SetOption
Retorno:
Nenhum -
- 82 -
ADVPL Avanado
AddItem
Retorno:
Nenhum -
aEnable
Retorno:
Nenhum -
Aparncia:
- 83 -
ADVPL Avanado
Exemplo:
Local oFolder
Local aFolder := { 'Folder 1', 'Folder 2', 'Folder 3' }
TGET()
Propriedades:
Parmetros:
- 84 -
ADVPL Avanado
controle.
lPar12 Reservado.
oPar13 Reservado.
Lgico, opcional. Se .T. as coordenadas informadas so em
alPixel
pixels, se .F. so em caracteres.
cPar15 Reservado.
lPar16 Reservado.
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
abWhen
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lPar18 Reservado.
lPar19 Reservado.
Bloco de cdigo, opcional. Executado quando o controle
abChange
modifica o valor da varivel associada.
alReadOnly Lgico, opcional. Se .T. o controle no poder ser editado.
Lgico, opcional. Se .T. o controle exibir asteriscos * no
alPassword lugar dos caracteres exibidos pelo controle para simular
entrada de senha.
cPar23 Reservado.
Caractere, opcional. Nome da varivel que o controle dever
acReadVar manipular, dever ser a mesma varivel informada no
parmetro abSetGet, e ser o retorno da funo ReadVar( ).
cPar25 Reservado.
lPar26 Reservado.
nPar27 Reservado.
lPar28 Reservado.
Aparncia:
- 85 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function TesteGet()
Local oDlg, oButton, oCombo, cCombo, nGet1:=0
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu Get'
oGet1:= TGet():New(10,10,{|u| if(PCount()>0,nGet1:=u,nGet1)}, oDlg,;
100,20,'@E 999,999.99',;
{|o|nGet1>1000.00},,,,,,.T.,,,,,,,,,,'nGet1')
Return NIL
TGROUP()
Propriedades:
Parmetros:
- 86 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oGroup:= tGroup():New(10,10,130,130,'grupo de gets',oDlg,,,.T.)
@ 18,16 MSGET oGet1 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
@ 38,16 MSGET oGet2 VAR cGet1 SIZE 100,10 OF oGroup PIXEL
ACTIVATE MSDIALOG oDlg CENTERED
- 87 -
ADVPL Avanado
THBUTTON()
Propriedades:
Parmetros:
Mtodos auxiliares:
Create
Retorno:
- 88 -
ADVPL Avanado
Aparncia:
Exemplo:
#include protheus.ch
#include hbutton.ch
User Function MyhBtn()
Local oDlg, ohBtn
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu hButton
// Usando o mtodo create
ohBtn:= tHButton():Create( oDlg )
ohBtn:nTop := 100
ohBtn:nLeft := 10
ohBtn:nWidth := 100
ohBtn:nHeight := 30
ohBtn:cCaption := 'hButton'
ohBtn:blClicked := { || MsgStop( 'Cliquei' ) }
// Usando o command
@ 200,100 HBUTTON ohBtn PROMPT 'Exemplo hButton' SIZE 100,30 ACTION
MsgStop('Cliquei') OF oDlg MESSAGE 'hButton'
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil
TIBROWSER()
Propriedades:
Parmetros:
Aparncia:
- 89 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
- 90 -
ADVPL Avanado
TLISTBOX()
Descrio: Classe de objetos visuais do tipo controle tListbox, a qual cria uma
janela com itens selecionveis e barra de rolagem. Ao selecionar um
item, uma varivel atualizada com o contedo do item selecionado.
Propriedades:
Parmetros:
- 91 -
ADVPL Avanado
aPar19 Reservado.
bPar20 Reservado.
lPar21 Reservado.
lPar22 Reservado.
Bloco de cdigo, opcional. Executado quando acionado click
abRightClick
do boto direito do mouse sobre o controle.
Mtodos auxiliares:
Select
Retorno:
Nenhum -
Add
Retorno:
Nenhum -
Modify
Retorno:
Nenhum -
- 92 -
ADVPL Avanado
Del
Retorno:
Nenhum -
Len
Nenhum -
Retorno:
Reset
Nenhum -
Retorno:
Nenhum -
- 93 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg, oList, nList:= 1
Local aItems:={}
Aadd(aItems,'Item 1')
Aadd(aItems,'Item 2')
Aadd(aItems,'Item 3')
Aadd(aItems,'Item 4')
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE 'Teste'
oList:= tListBox():New(10,10,{|u|if(Pcount()>0,nList:=u,nList)};
,aItems,100,100,,oDlg,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
- 94 -
ADVPL Avanado
TMENU()
Propriedades:
Parmetros:
Aparncia:
- 95 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oMenu := TMenu():New( 0,0,0,0,.F.,'',oDlg,CLR_WHITE,CLR_BLACK)
// Adiciona Item ao Menu Principal
oMenuItem1 := TMenuItem():New2( oMenu:Owner(),'Item 001','Item
001',,,)
oMenu:Add( oMenuItem1 )
// Adiciona sub-Itens
oMenuItem2 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
001',,,{||Alert('TMenuItem')})
oMenuItem3 := TMenuItem():New2( oMenu:Owner(),'Sub-Item
002',,,{||Alert('TMenuItem')})
oMenuItem1:Add( oMenuItem2 )
oMenuItem1:Add( oMenuItem3 )
TMENUBAR()
Propriedades:
Construtor: New([oWnd])
Parmetros:
Aparncia:
- 96 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// Monta um Menu Suspenso
TMenuBar := TMenuBar():New(oDlg)
TMenuBar:nClrPane := RGB(183,208,248) // Cor de fundo do Menu
oTMenu1 := TMenu():New(0,0,0,0,.T.,,oDlg)
oTMenu2 := TMenu():New(0,0,0,0,.T.,,oDlg)
TMenuBar:AddItem('Arquivo' , oTMenu1, .T.)
TMenuBar:AddItem('Relatorio', oTMenu2, .T.)
TMETER()
Descrio: Classe de objetos visuais do tipo controle tMeter, a qual exibe uma
rgua (gauge) de processamento, descrevendo o andamento de um
processo atravs da exibio de uma barra horizontal.
Propriedades:
Parmetros:
- 97 -
ADVPL Avanado
Objeto, opcional. Janela ou controle onde o controle sera
aoWnd
criado.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
lPar8 Reservado.
Lgico, opcional. Se .T. as coordenadas informadas so em
alPixel
pixels, se .F. so em caracteres.
oPar10 Reservado.
cPar11 Reservado.
Lgico, opcional. Se .T. (padro) no considera os passos de
alNoPerc
atualizao em porcentagem.
anClrPane Numrico, opcional. Cor de fundo do controle.
nPar14 Reservado.
anClrBar Numrico, opcional. Cor da barra de andamento.
nPar16 Reservado.
lPar17 Reservado.
Mtodos auxiliares:
Set
Retorno:
Nenhum -
Aparncia:
- 98 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
STATIC lRunning:=.F., lStop:=.F.
User Function Teste()
Local oDlg, oMeter, nMeter:=0, oBtn1, oBtn2
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 TITLE 'Teste' Pixel
oMeter:= tMeter():New(10,10,{|u|if(Pcount()>0,nMeter:=u,nMeter)};
,100,oDlg,100,16,,.T.) // cria a rgua
// boto para ativar andamento da rgua
@ 30,10 BUTTON oBtn1 PROMPT 'Run ' OF oDlg PIXEL ACTION RunMeter(oMeter)
@ 50,10 BUTTON oBtn2 PROMPT 'Stop' OF oDlg PIXEL ACTION lStop:=.T.
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
STATIC Function RunMeter(oMeter)
If lRunning
Return
Endif
lRunning:= .T.
oMeter:Set(0)
// inicia a rgua
While .T. .and. !lStop
Sleep(1000) // pra 1 segundo
ProcessMessages() // atualiza a pintura da janela, processa mensagens do
windows
nCurrent:= Eval(oMeter:bSetGet) // pega valor corrente da rgua
nCurrent+=10 // atualiza rgua
oMeter:Set(nCurrent)
if nCurrent==oMeter:nTotal
Return
endif
Enddo
lRunning:= .F.
lStop:= .F.
Return
- 99 -
ADVPL Avanado
TMSGRAPHIC()
Propriedades:
Parmetros:
Mtodos auxiliares:
CreateSerie
Retorno:
- 100 -
ADVPL Avanado
Add
Retorno:
Nenhum -
SetGradiente
Descrio: Mtodo para setar o fundo do grfico com uma cor gradiente
em determinada direo.
Sintaxe: SetGradient(nDirection, StartColor, EndColor )
Parmetros:
Retorno:
Nenhum -
SetTitle
Retorno:
Nenhum -
- 101 -
ADVPL Avanado
SetLegenProp
Retorno:
Nenhum -
SetMargins
Retorno:
Nenhum -
SetRangeY
Retorno:
Nenhum -
- 102 -
ADVPL Avanado
SaveToBMP
Retorno:
SaveToImage
Retorno:
DelSerie
Retorno:
ZoomIn
Nenhum -
Retorno:
Nenhum -
- 103 -
ADVPL Avanado
ZoomOut
Nenhum -
Retorno:
Nenhum -
Aparncia:
- 104 -
ADVPL Avanado
Exemplo:
#include 'MSGRAPHI.CH'
User Function tMsGraphicTst()
nSerie := oGraphic:CreateSerie( 10 )
oGraphic:l3D := .T. // Grafico em 3D
oGraphic:lAxisVisib := .T. // Mostra os eixos
// Itens do Grafico
oGraphic:Add(nSerie, 200, 'Item01', CLR_BLUE )
oGraphic:Add(nSerie, 180, 'Item02', CLR_RED )
oGraphic:Add(nSerie, 210, 'Item03', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item04', CLR_BLUE )
oGraphic:Add(nSerie, 100, 'Item05', CLR_BLUE )
oGraphic:Add(nSerie, 080, 'Item06', CLR_BLUE )
oGraphic:Add(nSerie, 110, 'Item07', CLR_BLUE )
@ 001, 124 BUTTON 'Salva Grafico' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:SaveToBMP('Exemplo.bmp','\web\')
@ 020, 124 BUTTON 'Zoom IN' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomIn()
@ 040, 124 BUTTON 'Zoom OUT' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:ZoomOut()
@ 060, 124 BUTTON 'Deleta Serie' SIZE 40,14 OF oDlg PIXEL ACTION
oGraphic:DelSerie(nSerie)
Return
- 105 -
ADVPL Avanado
TMSGBAR()
Propriedades:
Parmetros:
Mtodos auxiliares:
AddItem
Retorno:
Nenhum -
- 106 -
ADVPL Avanado
SetMsg
Retorno:
Nenhum -
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )
- 107 -
ADVPL Avanado
TMSGITEM()
Propriedades:
Parmetros:
Aparncia:
- 108 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTMsgBar := TMsgBar():New(oDlg, 'MP10 | Totvs/Software',
.F.,.F.,.F.,.F., RGB(116,116,116),,,.F.)
oTMsgItem1 := TMsgItem():New( oTMsgBar,'oTMsgItem1', 204,,,, .T.,
{||})
oTMsgItem2 := TMsgItem():New( oTMsgBar,'oTMsgItem2', 040,,,, .T.,
{||Alert('Item da Barra Acionado')} )
TMULTIBTN()
Propriedades:
Parmetros:
- 109 -
ADVPL Avanado
Mtodos auxiliares:
LoadImage
Descrio: Muda a figura a esquerda do componente
Sintaxe: LoadImage(cImagem)
Parmetros:
Retorno:
Nenhum -
AddButton
Descrio: Insere um boto
Sintaxe: AddButton(cTexto)
Parmetros:
Retorno:
Nenhum -
SetTitle
Descrio: Muda o titulo e o numero de botes por linha
Sintaxe: SetTitle(cTexto, nBotoes)
Parmetros:
Retorno:
Nenhum -
SetFonts
Descrio: Muda a font do titulo e dos botes
Sintaxe: SetTitle(cFontTit, nSizeTit, nFontBut, nSizeBut)
Parmetros:
Retorno:
Nenhum -
- 110 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
otMultiBtn:SetFonts('Tahoma',16,'Tahoma',10)
otMultiBtn:AddButton('btn01')
otMultiBtn:AddButton('btn02')
otMultiBtn:AddButton('btn04')
otMultiBtn:AddButton('btn05')
- 111 -
ADVPL Avanado
TMULTIGET()
Propriedades:
Parmetros:
Parmetro
Numrico, opcional. Coordenada vertical em pixels ou
anRow
caracteres.
Numrico, opcional. Coordenada horizontal em pixels ou
anCol
caracteres.
Bloco de cdigo, opcional. Bloco de cdigo no formato {|u|
if( Pcount( )>0, <var>:= u, <var> ) } que o controle utiliza
abSetGet
para atualizar a varivel <var>. <var> deve ser tipo
caracter.
Objeto, opcional. Janela ou controle onde o controle ser
aoWnd
criado.
anWidth Numrico, opcional. Largura do controle em pixels.
anHeight Numrico, opcional. Altura do controle em pixels.
Objeto, opcional. Objeto tipo tFont utilizado para definir as
aoFont caractersticas da fonte utilizada para exibir o contedo do
controle.
Lgico, opcional. Se .T., habilita barra de rolagem
alHScroll
horizontal.
anClrFore Numrico, opcional. Cor de fundo do controle.
anClrBack Numrico, opcional. Cor do texto do controle.
oPar11 Reservado.
Lgico, opcional. Se .T. as coordenadas informadas so em
alPixel
pixels, se .F. so em caracteres.
cPar13 Reservado.
lPar14 Reservado.
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
abWhen
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
lPar16 Reservado.
lPar17 Reservado.
alReadOnly Lgico, opcional. Se .T. o controle so permitira leitura.
Bloco de cdigo, opcional. Executado quando o contedo do
abValid controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
bPar20 Reservado.
lPar21 Reservado.
- 112 -
ADVPL Avanado
alNoBorder Lgico, opcional. Se .T. cria controle sem borda.
alNoVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.
Mtodos auxiliares:
EnableVScroll
Retorno:
Nenhum -
EnableHScroll
Retorno:
Nenhum -
Aparncia:
- 113 -
ADVPL Avanado
Exemplo:
#include protheus.ch
User Function Teste()
oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)};
,oDlg,100,100,,,,,,.T.)
MsgStop(cMemo)
Return NIL
TOLECONTAINER()
Propriedades:
Parmetros:
- 114 -
ADVPL Avanado
Mtodos auxiliares:
OpenFromFile
Retorno:
Nenhum -
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// TOleContainer
oTOleContainer := TOleContainer():New(
05,05,306,134,oDlg,.T.,'C:\Lixo\TesteRemote.doc' )
- 115 -
ADVPL Avanado
TPAGEVIEW()
Propriedades:
Parmetros:
Mtodos auxiliares:
PageSize
Retorno:
Nenhum -
PrintPage
Retorno:
Nenhum -
- 116 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
// TPageView
__RelDir := WSPLRelDir()
oPrinter := TMsPrinter():New()
oPrinter:SetFile(__RELDIR + 'matr020.prt',.F.)
oTPageView := TPageView():New(
0,0,500,300,oPrinter,oTFolder2:aDialogs[07],550,350 )
oTPageView:Reset(400,400)
oTPageView:PrintPage(1)
oTPageView:Show()
oTPageView:nZoom := 150
- 117 -
ADVPL Avanado
TPANEL()
Propriedades:
Parmetros:
Aparncia:
- 118 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oPanel:= tPanel():New(10,10,,oDlg,,,,,CLR_BLUE,100,100) // cria o
painel
@ 10,10 BUTTON oBtn1 PROMPT 'hide' OF oPanel ACTION oPanel:Hide() // cria
boto sobre o painel
@ 200,10 BUTTON oBtn2 PROMPT 'show' OF oDlg ACTION oPanel:Show() // cria
boto fora o painel
ACTIVATE MSDIALOG oDlg CENTERED
Return
TRADMENU()
Propriedades:
Parmetros:
- 119 -
ADVPL Avanado
controle deve permanecer habilitado ou .F. se no.
nWidth Numrico, opcional. Largura do objeto
nHeight Numrico, opcional. Altura do objeto
Bloco de cdigo, opcional. Executado quando o contedo do
bValid controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
lDesign No utilizado
l3d No utilizado
Lgico, opcional. Se .T. as coordenadas informadas so em
lPixel
pixels, se .F. so em caracteres.
Mtodos auxiliares:
SetOption
Retorno:
Nenhum -
EnableItem
Retorno:
Nenhum -
Enable
Retorno:
Nenhum -
- 120 -
ADVPL Avanado
Disable
Retorno:
Nenhum -
Aparncia:
- 121 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
user function TRadMenu()
DEFINE MSDIALOG oDlg FROM 0,0 TO 270,400 PIXEL TITLE 'Exemplo da
TCBrowse'
// Variavel numerica que guarda o item selecionado do Radio
nRadio := 1
// Cria o Objeto
oRadio := TRadMenu():New
(01,01,{'Item01','Item02','Item03','Item04','Item05'},;
,oDlg,,,,,,,,200,200,,,,.T.)
// Seta Eventos
oRadio:bchange := {|| Alert('bChange') }
oRadio:bSetGet := {|u|Iif (PCount()==0,nRadio,nRadio:=u)}
oRadio:bWhen := {|| .T. }
oRadio:bValid := {|| Alert('bValid') }
// Principais comandos
oBtn := TButton():New( 060, 001, 'Retorna item selecionado',;
oDlg,{|| Alert(nRadio) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 070, 001, 'SetOption(2) (Seta um
item)',;
oDlg,{|| oRadio:SetOption(2) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 080, 001, 'EnableItem(2,.T.) (Habilita
item)',;
oDlg,{|| oRadio:EnableItem(2,.T.) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 090, 001, 'EnableItem(2,.F.)
(Desabilita item)',;
oDlg,{|| oRadio:EnableItem(2,.F.) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 100, 001, 'Enable(3) (Habilita
item)',;
oDlg,{|| oRadio:Enable(3) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 110, 001, 'Disable(3) (Desabilita
item)',;
oDlg,{|| oRadio:Disable(3) }, 120,
010,,,.F.,.T.,.F.,,.F.,,,.F. )
- 122 -
ADVPL Avanado
TSBROWSE()
Propriedades:
Parmetros:
Mtodos auxiliares:
GoUp
Nenhum -
Retorno:
Nil
GoDown
Nenhum -
Retorno:
Nil
- 123 -
ADVPL Avanado
GoTop
Nenhum -
Retorno:
Nil
GoBottom
Nenhum -
Retorno:
Nil
RowCount
Nenhum -
Retorno:
Nil
LEditCell
Retorno:
Nil
- 124 -
ADVPL Avanado
Aparncia:
- 125 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'
// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
TButton():New( 190, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},40,10,,,,.T.)
- 126 -
ADVPL Avanado
TSAY()
Propriedades:
Parmetros:
- 127 -
ADVPL Avanado
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg, oButton, oCombo, cCombo, cGet1:='Teste'
DEFINE MSDIALOG oDlg FROM 0,0 TO 300,300 PIXEL TITLE 'Meu test'
oSay:= tSay():New(01,01,{||'para exibir'},oDlg,,,,;
,,.T.,CLR_RED,CLR_WHITE,100,20)
ACTIVATE MSDIALOG oDlg CENTERED
Return
- 128 -
ADVPL Avanado
TSCROLLBOX()
Propriedades:
Parmetros:
Aparncia:
- 129 -
ADVPL Avanado
Exemplo:
#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 220,220 PIXEL TITLE 'Meu test'
oScr:= TScrollBox():New(oDlg,10,10,100,100,.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
TSIMPLEEDITOR()
Propriedades:
Parmetros:
Mtodos auxiliares:
Create
- 130 -
ADVPL Avanado
Retorno:
Load
Retorno:
Nenhum -
TextBold
Retorno:
Nenhum -
TextUnderline
Retorno:
Nenhum -
TextItalic
Retorno:
Nenhum -
- 131 -
ADVPL Avanado
TextFamily
Retorno:
Nenhum -
TextSize
Retorno:
Nenhum -
TextStyle
1 Normal
2 Disco (Bullet)
anStyle
3 Circulo (Bullet)
4 Quadrado (Bullet)
5 Ordem decimal
6 Ordem alfanumrica minsculo
7 Ordem alfanumrica maisculo
Retorno:
Nenhum -
- 132 -
ADVPL Avanado
TextAlign
Retorno:
Nenhum -
TextFormat
Retorno:
Nenhum -
RetText
Retorno:
Nenhum -
RetTextSel
Nenhum -
Retorno:
- 133 -
ADVPL Avanado
TextStatus
Nenhum -
Retorno:
1 Lgico Negrito
2 Lgico Itlico
Array
3 Lgico Sublinhado
4 Caracter RGB da cor
5 Caracter Tamanho da fonte
6 Caracter Fonte
Aparncia:
- 134 -
ADVPL Avanado
Exemplo:
#include protheus.ch
TSLIDER()
Propriedades:
Parmetros:
Mtodos auxiliares:
- 135 -
ADVPL Avanado
Create
Retorno:
setRange
Retorno:
Nenhum -
setMarks
Retorno:
Nenhum -
- 136 -
ADVPL Avanado
setInterval
Retorno:
Nenhum -
setValue
Retorno:
Nenhum -
setStep
Retorno:
Nenhum -
setOrient
Retorno:
Nenhum -
- 137 -
ADVPL Avanado
Aparncia:
Exemplo:
#include protheus.ch
#include hbutton.ch
User Function MytSlider()
Local oDlg, oSlider
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu tSlider
// Usando o mtodo create
oSlider:= tSlider():Create( oDlg )
oSlider:nTop := 100
oSlider:nLeft := 10
oSlider:nWidth := 100
oSlider:nHeight := 30
// Usando o command
@ 100, 10 SLIDER oSlider SIZE 30, 100 OF oDlg MESSAGE 'tSlider'
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil
TSPLITTER()
Propriedades:
Parmetros:
- 138 -
ADVPL Avanado
Mtodos auxiliares:
Create
Retorno:
setOrient
Retorno:
Nenhum -
setChildCollapse
Retorno:
Nenhum -
- 139 -
ADVPL Avanado
setCollapse
Retorno:
Nenhum -
movToLast
Retorno:
Nenhum -
movToFirst
Retorno:
Nenhum -
setOpaqueResize
Retorno:
Nenhum -
- 140 -
ADVPL Avanado
setResizeMode
Retorno:
Nenhum -
Aparncia:
- 141 -
ADVPL Avanado
Exemplo:
#include protheus.ch
#include hbutton.ch
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu tSplitter
// Usando o command
@ 1, 1 SPLITTER oSplitter SIZE 100, 100 OF oDlg
@ 1, 1 MSPANEL oPanel1 OF oSplitter
@ 1, 2 MSPANEL oPanel2 OF oSplitter
@ 1, 3 MSPANEL oPanel3 OF oSplitter
Return Nil
TTABS()
Propriedades:
Parmetros:
- 142 -
ADVPL Avanado
lPixel Lgico, opcional. Utiliza coordenadas em pixel
lDesign Lgico, opcional. NO USADO
nWidth Numrico, opcional. Largura em pixels
nHeigth Numrico, opcional. Altura em pixels.
cMsg Caractere, Mensagem de Hint
Mtodos auxiliares:
AddItem
Retorno:
Nenhum -
SetOption
Retorno:
Nenhum -
Aparncia:
- 143 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
oTTabs := TTabs():New(01,01,{'Aba01','Aba02','Aba03'},;
{||oPanel01:LVISIBLECONTROL:=(oTTabs:nOption==1)},;
oDlg,,RGB(255,0,0),RGB(255,255,0),.T.,,120,120,)
oPanel01 := TPanel():New( 000, 000,'',oTTabs,,,,,,100,100,,.T. )
oPanel01:lVisibleControl := .T.
oBtn01 := TButton():New( 01,01,'TButton01',oPanel01,;
{||oTTabs:SetOption(2)}, 037,
012,,,.F.,.T.,.F.,,.F.,,,.F. )
TTOOLBOX()
Propriedades:
Parmetros:
- 144 -
ADVPL Avanado
Mtodos auxiliares:
Create
Retorno:
addGroup
Retorno:
Nenhum -
removeGroup
Retorno:
Nenhum -
setCurrentGroup
aoObj Objeto. Objeto Pai que ser definido como grupo corrente.
Retorno:
Nenhum -
- 145 -
ADVPL Avanado
Aparncia:
Exemplo:
#include protheus.ch
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu Toolbox
// Usando o command
@ 200,100 TOOLBOX oTb SIZE 100,30 OF oDlg
Return Nil
- 146 -
ADVPL Avanado
TWBROWSE()
Propriedades:
Parmetros:
- 147 -
ADVPL Avanado
Bloco de cdigo, opcional. Executado quando o contedo do
bValid controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
Lgico, opcional. Se .T., habilita barra de rolagem
lHScroll
horizontal.
lVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.
Mtodos auxiliares:
GoUp
Nenhum -
Retorno:
Nil
GoDown
Nenhum -
Retorno:
Nil
GoTop
Nenhum -
Retorno:
Nil
GoBottom
Nenhum -
Retorno:
- 148 -
ADVPL Avanado
Nil
RowCount
Nenhum -
Retorno:
Nil
LEditCell
Retorno:
Nil
Aparncia:
- 149 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
oBrowse:SetArray(aBrowse)
oBrowse:bLine := {||{;
If(aBrowse[oBrowse:nAt,01],oOK,oNO),;
aBrowse[oBrowse:nAt,02],;
aBrowse[oBrowse:nAt,03],;
aBrowse[oBrowse:nAt,04] } }
oBrowse:bLDblClick := ;
{|| aBrowse[oBrowse:nAt][1] :=
!aBrowse[oBrowse:nAt][1],oBrowse:DrawSelect()}
// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
TButton():New(190,060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},80,10,,,,.T.)
- 150 -
ADVPL Avanado
VCBROWSE()
Propriedades:
Parmetros:
- 151 -
ADVPL Avanado
lDesign No Utilizado
Bloco de cdigo, opcional. Executado quando o contedo do
bValid controle deve ser validado, deve retornar .T. se o contedo
for vlido e .F. quando o contedo for invlido.
Lgico, opcional. Se .T., habilita barra de rolagem
lHScroll
horizontal.
lVScroll Lgico, opcional. Se .T., habilita barra de rolagem vertical.
Mtodos auxiliares:
GoUp
Nenhum -
Retorno:
Nil
GoDown
Nenhum -
Retorno:
Nil
GoTop
Nenhum -
Retorno:
Nil
- 152 -
ADVPL Avanado
GoBottom
Nenhum -
Retorno:
Nil
RowCount
Nenhum -
Retorno:
Nil
LEditCell
Retorno:
Nil
- 153 -
ADVPL Avanado
Aparncia:
- 154 -
ADVPL Avanado
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
Local oOK := LoadBitmap(GetResources(),'br_verde')
Local oNO := LoadBitmap(GetResources(),'br_vermelho')
DEFINE MSDIALOG oDlg FROM 0,0 TO 402,402 PIXEL TITLE 'Exemplo'
oBrowse:SetArray(aBrowse)
oBrowse:bLine := {||{;
If(aBrowse[oBrowse:nAt,01],oOK,oNO),;
aBrowse[oBrowse:nAt,02],;
aBrowse[oBrowse:nAt,03],;
aBrowse[oBrowse:nAt,04] } }
oBrowse:bLDblClick :=;
{|| aBrowse[oBrowse:nAt][1] :=
!aBrowse[oBrowse:nAt][1],oBrowse:DrawSelect()}
// Principais commandos
TButton():New(160,001,'GoUp()',oDlg,{|| oBrowse:GoUp()
},40,10,,,,.T.)
TButton():New(170,001,'GoDown()',oDlg,{|| oBrowse:GoDown()
},40,10,,,,.T.)
TButton():New(180,001,'GoTop()',oDlg,{|| oBrowse:GoTop()
},40,10,,,,.T.)
TButton():New(190,001,'GoBottom()' , oDlg,{|| oBrowse:GoBottom()
},40,10,,,,.T.)
TButton():New(160,060,'nAt (Linha selecionada)',oDlg,;
{|| Alert (oBrowse:nAt)},80,10,,,,.T.)
TButton():New(170,060,'nRowCount (Nr de linhas visiveis)',oDlg,;
{|| Alert(oBrowse:nRowCount()) },80,10,,,,.T.)
TButton():New(180,060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oBrowse:nLen) },80,10,,,,.T.)
TButton():New(190,060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aBrowse,oBrowse,'@!',3)
},40,10,,,,.T.)
- 155 -
ADVPL Avanado
Documentao dos componentes da interface visual
- 156 -
ADVPL Avanado
4.1. Particularidades dos componentes visuais
As cores deste padro so definidas pela seguinte frmula, a qual deve ser avaliada tendo
como base a paleta de cores no formato RGB:
Com base nesta paleta, podemos definir os valores das seguintes cores bsicas:
Cor R G B Valor
Preto 0 0 0 0
Azul 0 0 255 16711680
Verde 0 255 0 65280
Ciano 0 255 255 16776960
Vermelho 255 0 0 255
Rosa 255 0 255 16711935
Amarelo 255 255 0 65535
Branco 255 255 255 16777215
- 157 -
ADVPL Avanado
Para atribuir as cores aos objetos visuais devem ser observados os atributos utilizados para
estes fins em cada objeto, como por exemplo:
MSDIALOG()
TSAY()
Funo RGB()
A linguagem ADVPL possui a funo RGB() a qual retorna o valor da cor a ser definido, de
acordo com a parametrizao de cada um dos elementos da paleta RGB.
- 158 -
ADVPL Avanado
5. Aplicaes com a interface visual do ADVPL
Um Enchoice pode ser facilmente entendida como diversos conjuntos de objetos TSay e TGet
alinhados de forma a visualizar ou capturar informaes, normalmente vinculadas a arquivos
de cadastros ou movimentaes simples.
Abaixo temos a visualizao de uma Enchoice para o arquivo padro do ERP Protheus de
Cadastro de Clientes (SA1):
- 159 -
ADVPL Avanado
A linguagem ADVPL permite a implementao da Enchoice de duas formas similares:
5.1.1. Enchoice()
Sintaxe: Enchoice( cAlias, nReg, nOpc, aCRA, cLetra, cTexto, aAcho, aPos,
aCpos, nModelo, nColMens, cMensagem, cTudoOk, oWnd, lF3,
lMemoria, lColumn, caTela, lNoFolder, lProperty)
Retorno: Nil
Parmetros:
- 160 -
ADVPL Avanado
Exemplo: Utilizao da funo Enchoice()
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | MBRWENCH | Autor | ARNALDO RAYMUNDO JR.|Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo Enchoice() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
DbSelectArea("SA1")
DbSetOrder(1)
MBrowse(6,1,22,75,"SA1")
Return
Local aCpoEnch := {}
Local aAlter := {}
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
- 161 -
ADVPL Avanado
Exemplo (continuao):
aAlterEnch := aClone(aCpoEnch)
Return
5.1.2. MsMGet()
- 162 -
ADVPL Avanado
lMemoria Indica se a enchoice utilizar variveis de memria ou os
campos da tabela na edio
lColumn Indica se a apresentao dos campos ser em forma de
coluna
caTela Nome da varivel tipo "private" que a enchoice utilizar no
lugar da propriedade aTela
lNoFolder Indica se a enchoice no ir utilizar as Pastas de Cadastro
(SXA)
lProperty Indica se a enchoice no utilizar as variveis aTela e aGets,
somente suas propriedades com os mesmos nomes
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsMget() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
DbSelectArea("SA1")
DbSetOrder(1)
MBrowse(6,1,22,75,"SA1")
Return
- 163 -
ADVPL Avanado
Exemplo (continuao):
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
aAlterEnch := aClone(aCpoEnch)
oDlg := MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)
RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))
oDlg:lCentered := .T.
oDlg:Activate()
Return
A linguagem ADVPL permite a utilizao de basicamente dois tipos de objetos do tipo grid, ou
como tambm so conhecidos: multi-line:
MSGETDB()
MSGETDADOS()
MSNEWGETDADOS()
TWBROWSE()
MAWNDBROWSE()
MBROWSE()
Neste tpico sero tratadas as grids digitveis disponveis na linguagem ADVPL para o
desenvolvimento de interfaces de cadastros e manuteno de informaes.
- 164 -
ADVPL Avanado
5.2.1. MsGetDB()
A classe de objetos visuais MsGetDB() permite a criao de um grid digitvel com uma ou mais
colunas, baseado em uma tabela temporria.
Retorno: oMsGetDB
objeto do tipo MsGetDB()
Parmetros:
- 165 -
ADVPL Avanado
Aparncia:
Variveis private:
1- Pesquisar
2- Visualizar
3- Incluir
4- Alterar
5- Excluir
- 166 -
ADVPL Avanado
Variveis pblicas:
Funes de validao:
Mtodos adicionais:
#include protheus.ch
/*/
+-----------------------------------------------------------------------------
| Funo | GETDBSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MsGetDB() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
Local nI
Local oDlg
Local oGetDB
Local nUsado := 0
Local aStruct := {}
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")
- 167 -
ADVPL Avanado
Exemplo (continuao):
AADD(aStruct,{"FLAG","L",1,0})
cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)
oDlg:lCentered := .T.
oDlg:Activate()
DbSelectArea(cCriaTrab)
DbCloseArea()
Return
- 168 -
ADVPL Avanado
5.2.2. MsGetDados()
A classe de objetos visuais MsGetDados() permite a criao de um grid digitvel com uma ou
mais colunas, baseado em um array.
Parmetros:
- 169 -
ADVPL Avanado
Aparncia:
Variveis private:
6- Pesquisar
7- Visualizar
8- Incluir
9- Alterar
10- Excluir
- 170 -
ADVPL Avanado
Variveis pblicas:
Funes de validao:
Mtodos adicionais:
#include protheus.ch
/*/
+-----------------------------------------------------------------------------
| Funo | GETDADOSA1 | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto MSGETADOS() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")
- 171 -
ADVPL Avanado
Exemplo (continuao):
AADD(aCols,Array(nUsado+1))
For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next
aCols[1][nUsado+1] := .F.
oDlg:lCentered := .T.
oDlg:Activate()
Return
- 172 -
ADVPL Avanado
5.2.3. MsNewGetDados()
A classe de objetos visuais MsNewGetDados() permite a criao de um grid digitvel com uma
ou mais colunas, baseado em um array.
Parmetros:
- 173 -
ADVPL Avanado
Aparncia:
Variveis private:
1- Pesquisar
2- Visualizar
3- Incluir
4- Alterar
5- Excluir
- 174 -
ADVPL Avanado
Variveis pblicas:
Funes de validao:
Mtodos adicionais:
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | MBRWGETD | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
DbSelectArea("SC5")
DbSetOrder(1)
MBrowse(6,1,22,75,"SC5")
Return
Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
- 175 -
ADVPL Avanado
Exemplo (continuao):
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
aAlterEnch := aClone(aCpoEnch)
DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)
- 176 -
ADVPL Avanado
Exemplo (continuao):
aAlterGDa := aClone(aCpoGDa)
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,x3_tamanho,;
x3_decimal,"AllwaysTrue()",x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End
If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif
oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)
- 177 -
ADVPL Avanado
5.2.3.1. Definindo cores personalizadas para o objeto MsNewGetDados()
Conforme visto no tpico sobre definio das propriedades de cores para os componentes
visuais, cada objeto possui caractersticas que devem ser respeitadas para correta utilizao
deste recurso.
Atributos adicionais:
lUseDefaultColors Atributo que dever ser definido como .F. para que as
alteraes nas cores sejam permitidas.
Mtodos adicionais:
SetBlkBackColor Mtodo que define a cor que ser utilizada para cada linha do
grid. No necessrio utilizar o mtodo Refresh() aps a
definio da cor por este mtodo.
Aparncia:
- 178 -
ADVPL Avanado
Exemplo: Definindo cores personalizadas para o objeto MsNewGetDados()
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | MRBWGTCL | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao dos objetos |
| | MsNewGetDados() e MsMGet() combinados e tratamento de cores |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
DbSelectArea("SC5")
DbSetOrder(1)
MBrowse(6,1,22,75,"SC5")
Return
Local nX := 0
Local nUsado := 0
Local aButtons := {}
Local aCpoEnch := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {000,000,080,400}
Local nModelo := 3
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
Local aCpoGDa := {}
Local cAliasGD := "SC6"
Local nSuperior := 081
Local nEsquerda := 000
Local nInferior := 250
Local nDireita := 400
Local cLinOk := "AllwaysTrue"
Local cTudoOk := "AllwaysTrue"
Local cIniCpos := "C6_ITEM"
Local nFreeze := 000
Local nMax := 999
- 179 -
ADVPL Avanado
Exemplo (continuao):
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
aAlterEnch := aClone(aCpoEnch)
DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)
aAlterGDa := aClone(aCpoGDa)
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End
- 180 -
ADVPL Avanado
Exemplo (continuao):
If nOpc==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
IF aHeader[nX,2] == "C6_ITEM"
aCols[1,nX]:= "0001"
ELSE
aCols[1,nX]:=CriaVar(aHeader[nX,2])
ENDIF
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif
RegToMemory("SC5", If(nOpc==3,.T.,.F.))
oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})
Return
- 181 -
ADVPL Avanado
Exemplo (continuao):
Return nRet
- 182 -
ADVPL Avanado
5.3. Barras de botes
5.3.1. EnchoiceBar()
Funo que cria uma barra de botes no formato padro utilizado pelas interfaces de cadastro
da aplicao Protheus.
Esta barra possui os botes padres para confirmar ou cancelar a interface e ainda permite a
adio de botes adicionais com a utilizao do parmetro aButtons.
Sintaxe:
Parmetros:
Aparncia:
- 183 -
ADVPL Avanado
Exemplo: Utilizao da funo EnchoiceBar()
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | DENCHBAR | Autor | ARNALDO RAYMUNDO JR. |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao da funo |
| | EnchoiceBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd
Return
- 184 -
ADVPL Avanado
5.3.2. TBar()
Parmetros:
Aparncia:
#include 'protheus.ch'
/*/
+-----------------------------------------------------------------------------
| Funo | TSTBAR | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
- 185 -
ADVPL Avanado
Exemplo (continuao):
oDlg:lCentered := .T.
oDlg:Activate()
Return
5.3.3. ButtonBar
Sintaxe:
Retorno: ().
Parmetros:
- 186 -
ADVPL Avanado
A sintaxe ButtonBar requer a adio dos botes como recursos adicionais da barra
previamente definida utilizando a sintaxe abaixo:
Sintaxe adicional:
Parmetros:
Aparncia:
#include 'protheus.ch'
/*/
+-----------------------------------------------------------------------
| Funo | TstBBar | Autor | MICROSIGA |Data | |
+-----------------------------------------------------------------------
| Descrio | Programa que demonstra a utilizao do objeto TBar() |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
Local oDlg
Local oBtn1
Local oBtn2
- 187 -
ADVPL Avanado
Exemplo (continuao):
oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N" OF oBar ACTION Agenda() TOOLTIP "Agenda"
DEFINE BUTTON RESOURCE "S4WB010N" OF oBar ACTION OurSpool() TOOLTIP "Spool"
DEFINE BUTTON RESOURCE "S4WB016N" OF oBar GROUP;
ACTION HelProg() TOOLTIP "Ajuda"
oBtn2:cTitle:="Param."
Return
- 188 -
ADVPL Avanado
5.3.4. Imagens pr-definidas para as barras de botes
Conforme mencionado nos tpicos anteriores, os botes visuais do tipo barra de botes
permitem a definio de itens com aes e imagens vinculadas.
Dentre os objetos e funes mencionados, foi citada a EnchoiceBar(), a qual permite a adio
de botes adicionais atravs do parmetro aButton, sendo que os itens deste array devem
possuir o seguinte formato:
Estrutura:
DESTINOS DISCAGEM
EDIT EDITABLE
EXCLUIR FORM
GRAF2D GRAF3D
LINE NOTE
OBJETIVO OK
PENDENTE PRECO
PRODUTO S4SB014N
S4WB001N S4WB005N
S4WB006N S4WB007N
S4WB008N S4WB009N
S4WB010N S4WB011N
S4WB013N S4WB014A
S4WB016N SIMULACA
VENDEDOR USER
Exemplo:
AADD(aButtons,{"USER",{||AllwaysTrue()},"Usurio"})
- 189 -
ADVPL Avanado
6. Outras aplicaes da interface visual do ADVPL
6.1. MaWndBrowse()
Descrio: Browse que permite a visualizao de registros para arquivos / tabelas que
no possuem estrutura definida no Dicionrio de Dados do sistema.
Sintaxe: MaWndBrowse (nLin1, nCol1, nLin2, nCol2, cTitle, cAlias, aCampos, aRotina,
cFunLeg, cTopFun, cBotFun, lCentered, aResource, nMod, aPesqui, cSeek,
lDic, lSavOrd)
Parmetros:
aAdd(aCampo,{X3_CAMPO,X3_PICTURE,X3_TITULO,X3_TAMANHO})
- 190 -
ADVPL Avanado
Aparncia:
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------
| Funo | WndBrwTRB | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Demonstra a utilizao da MaWndBrowse com Temporrio |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
- 191 -
ADVPL Avanado
// Variaveis para a MsAdvSize
Local lEnchBar := .F. // Se a janela de dilogo possuir enchoicebar (.T.)
Local lPadrao := .F. // Se a janela deve respeitar as medidas padres do
//Protheus (.T.) ou usar o mximo disponvel (.F.)
Local nMinY := 400 // Altura mnima da janela
aAdd(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
aAdd(aRotina,{"Visualizar","U_TVisual",0,2})
aAdd(aRotina,{"Incluir" ,"U_TInclui",0,3})
aAdd(aRotina,{"Alterar" ,"U_TAltera",0,4})
aAdd(aRotina,{"Excluir" ,"U_TExclui",0,5})
//
// Crio arq. de trab. p/ gravar as inconsistencias.
//
cArqTrb := CriaTrab(aStruTRB,.t.)
dbUseArea(.T.,,cArqTrb,"TRB",.T.,.F.)
cChave := "TRB_FILIAL+TRB_ID"
IndRegua("TRB",cArqTrb,cChave,,,"Selecionando Registros...")
- 192 -
ADVPL Avanado
dbSelectArea( "TRB" )
MaWndBrowse(aSize[7],aSize[2],aSize[6],aSize[5],cTitulo,cAlias,aCampos,aRotina,,
cTopFun,cBotFun,lCentered,,nModelo,,cSeek,lDic,lSavOrd)
Return
Com foco nesta necessidade, foi desenvolvida para o curso de ADVPL a funo
TEnchoice.
Parmetros:
- 193 -
ADVPL Avanado
"<lWhen>" Se o campo est editvel.
<Tamanho> Tamanho do campo para visualizao.
Aparncia:
- 194 -
ADVPL Avanado
/*/
+-----------------------------------------------------------------------
| Funo | TEnchoice | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
Local aSays := {}
Local aGets := {}
Local cCaption := ""
Local cPict := ""
Local cValid := ""
Local cF3 := ""
Local cWhen := ""
Local cBlKSay := ""
Local cBlkGet := ""
Local cBlKVld := ""
Local cBlKWhen := ""
Local nLeft := 0
Local nTop := 0
Local nI := 0
If Len(aCampos) > 0
If Len(aCampos[nI])==8
cCampo := aCampos[nI,1]
nLeft := aCampos[nI,2,1]-13
nTop := aCampos[nI,2,2]
cCaption:= Iif(Empty(aCampos[nI,3]), " " ,aCampos[nI,3])
cPict := Iif(Empty(aCampos[nI,4]), Nil ,aCampos[nI,4])
cValid := Iif(Empty(aCampos[nI,5]), ".t." ,aCampos[nI,5])
cF3 := Iif(Empty(aCampos[nI,6]), NIL ,aCampos[nI,6])
cWhen := Iif(Empty(aCampos[nI,7]), ".T." ,aCampos[nI,7])
- 195 -
ADVPL Avanado
cBlKSay := "{|| OemToAnsi('"+cCaption+"')}"
cBlkGet := "{ | u | If( PCount() == 0,;
"+cCampo+","+cCampo+":= u ) }"
cBlKVld := "{|| "+cValid+"}"
cBlKWhen := "{|| "+cWhen+"}"
AADD(aSays,Array(1))
aSays[nI] := TSay():New(nLeft+1, nTop, &(cBlkSay), oScroll,,,;
.F., .F., .F., .T.,,, 50, 8, .F., .F., .F., .F.,;
.F. )
AADD(aGets,Array(1))
EndIf
Next
Endif
Return
- 196 -
ADVPL Avanado
Exemplo: Funo TVisual ( MaWndBrowse com TEnchoice)
/*/
+-----------------------------------------------------------------------
| Funo | TVisual | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk := {||oDlg:End()}
LOCAL bCancel := {||oDlg:End()}
LOCAL nX
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
- 197 -
ADVPL Avanado
Exemplo: Funo TInclui ( MaWndBrowse com TEnchoice)
/*/
+-----------------------------------------------------------------------
| Funo | TInclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".T.",aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
Do Case
Case aCampos[nX][5] == "C"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
Case aCampos[nX][5] == "N"
&("_"+aCampos[nX][1]) := 0
Case aCampos[nX][5] == "D"
&("_"+aCampos[nX][1]) := CTOD("")
Case aCampos[nX][5] == "L"
&("_"+aCampos[nX][1]) := .F.
Case aCampos[nX][5] == "M"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
EndCase
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
- 198 -
ADVPL Avanado
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
/*/
+-----------------------------------------------------------------------
| Funo | TAltera | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",aCampos[nX][6],aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
- 199 -
ADVPL Avanado
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
/*/
+-----------------------------------------------------------------------
| Funo | TExclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL nX
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
- 200 -
ADVPL Avanado
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
/*/
+-----------------------------------------------------------------------
| Funo | TValid | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
For nX := 1 to Len(aCampos)
IF aCampos[nX,nPosObrig] == .T.
IF !(lRet := !Empty(&("_"+aCampos[nX,1])))
Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos
obrigatorios nao preenchidos",1,0)
RETURN lRet // EXIT
ENDIF
ENDIF
Next nX
IF nOpc == 3
IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))))
Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta
chave",1,0)
ENDIF
ELSE
IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))
Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com
esta chave",1,0)
ENDIF
ENDIF
RETURN lRet
- 201 -
ADVPL Avanado
Exemplo: Funo TGravar ( MaWndBrowse com TEnchoice)
/*/
+-----------------------------------------------------------------------
| Funo | TGravar | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
RecLock(cAlias,nOpc==3)
IF nOpc == 5
DbDelete()
ELSE
For nX := 1 to Len(aCampos)
(cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1])
Next nX
ENDIF
Msunlock()
RETURN
- 202 -
ADVPL Avanado
6.2. DbTree()
Descrio: Classe Advpl que permite a criao de um objeto visual do tipo Tree.
Propriedades:
Mtodos principais:
Aparncia:
- 203 -
ADVPL Avanado
Mtodo: New()
Parmetros:
Retorno:
Mtodo: AddTree()
Parmetros:
- 204 -
ADVPL Avanado
parmetros cResOpen e cResClose no forem
especificados.
String com valor nico, fornecido para identificar o n
cCargo atual. Pode ser recuperado posteriormente durante a
navegao.
Retorno:
Nenhum -
Mtodo: AddTreeItem()
Parmetros:
Retorno:
Nenhum -
Mtodo: EndTree()
Sintaxe: oObj:EndTree ( )
Parmetros:
Nenhum
Retorno:
Nenhum
- 205 -
ADVPL Avanado
Exemplo:
#include "Protheus.ch"
/*/
+-----------------------------------------------------------------------
| Funo | TDBTree | Autor | MICROSIGA | Data | |
+-----------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo DbTree |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
oDBTree:AddTree("Pentium 4"+Space(24),.T.,cBmp1,cBmp1,,,"1.0")
oDBTree:AddTreeItem("Gabinete",cBmp2,,"1.1")
oDBTree:AddTreeItem("Monitor" ,cBmp2,,"1.2")
oDBTree:AddTreeItem("Teclado" ,cBmp2,,"1.3")
oDBTree:AddTreeItem("Mouse",cBmp2,,"1.4")
oDBTree:AddTreeItem("Som",cBmp2,,"1.5")
oDBTree:AddTree("Placa Me",.T.,cBmp1,cBmp1,,,"2.0")
oDBTree:AddTreeItem("Processador",cBmp2,,"2.1")
oDBTree:AddTreeItem("Memria" ,cBmp2,,"2.2")
oDBTree:AddTreeItem("Vdeo",cBmp2,,"2.3")
oDBTree:AddTreeItem("Fonte",cBmp2,,"2.4")
oDBTree:EndTree()
oDBTree:EndTree()
Return
- 206 -
ADVPL Avanado
User Function Proc(cCargo)
Local cRet := ""
If cCargo == "1.1"
MsgInfo("Gabinete Torre com 4 baias - Preto, com unidade de leitura e+;
gravao de CD/DVD",cCadastro)
Elseif cCargo == "1.2"
MsgInfo("Monitor LCD 17' - LG",cCadastro)
Elseif cCargo == "1.3"
MsgInfo("Teclado multimdia com funes de internet e e-mail",cCadastro)
Elseif cCargo == "1.4"
MsgInfo("Mouse Optico sem fio",cCadastro)
Elseif cCargo == "1.5"
MsgInfo("2 Caixas de Som - 50W RMS Cada",cCadastro)
Elseif cCargo == "2.1"
MsgInfo("Processador Pentium 4 - 3.8 Ghz",cCadastro)
Elseif cCargo == "2.2"
MsgInfo("1 Pente de Memria de 1Gb - DDR 500",cCadastro)
Elseif cCargo == "2.3"
MsgInfo("Placa de Vdeo GeoForce 5000 com 256Mb",cCadastro)
Elseif cCargo == "2.4"
MsgInfo("Fonte de Alimentao de 500W",cCadastro)
Endif
Return
- 207 -
ADVPL Avanado
6.3. MsSelect()
Descrio: A classe MsSelect cria um objeto browse (ou grid), com a primeira coluna
sendo do tipo marcao.
Propriedades:
Mtodos principais:
Aparncia:
- 208 -
ADVPL Avanado
Mtodo: New()
- 209 -
ADVPL Avanado
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARROM
BR_PINK
BR_PRETO
BR_VERDE
BR_VERMELHO
Retorno:
Exemplo:
DEFINE MSDIALOG oDlg1 TITLE "Selecao para Transferencia" From 9,0 To 32,80;
OF oMainWnd
@1.4,.8 Say "Valor Total:"
@1.4, 7 Say oValor VAR nValor Picture "@E 999,999,999,999.99"
@1.9,.8 Say "Quantidade:"
@1.9, 9 Say oQtda VAR nQtdBem Picture "@E 99999" SIZE 50,10
@1.4,15 Say Iif(MVParBox01==1,;
"Somente grupos de ["+MVParBox02+"] ate ["+MVParBox03+"]","")
If cTipoDet == "D"
@12.4,01 Say "Qtde. a Detalhar"
@158,60 MSGET nQtde Picture "@E 999" SIZE 036, 10 OF oDlg PIXEL;
VALID nQtde > 0
ElseIf cTipoDet == "P"
@12.4,01 Say oLabel Var cLabel := "Tipo de Projeto"
oRad := TRadMenu():New(169,005,{"Industrial","Florestal"},;
bSetGet(nOpcRad),oDlg,,{|| AF250RAD(nOpcRad)},,,,,,100,12,,,,.T.)
@15.5,01 Say oLabel2 Var cLabel2 := "Detalhamento:"
oRad2 := TRadMenu():New(210,005,{"Manter","Alterar"},;
bSetGet(nOpcRad2),oDlg,,{|| AF250RAD2(nOpcRad2)},,,,,,;
100,12,,,,.T.)
@16.4,01 Say oLabel3 Var cLabel3 := "Percentual"
oGet := TGet():New(210,043,bSetGet(nPerc),oDlg,030,010,;
"@E 999.99",,,,,,,.T.)
@18.2,01 Say oLabel4 Var cLabel4 := "Qtde. Det."
oGet2 := TGet():New(235,040,bSetGet(nQtde),oDlg,030,010,;
"@E 999",,,,,,,.T.)
oGet:Hide()
oGet2:Hide()
oLabel3:Hide()
oLabel4:Hide()
EndIf
oMark := MsSelect():New("SN3","N3_OK","!N3_BAIXA",,@lInverte,;
@cMarca,{35,1,143,315})
oMark:bMark := {| | a250Display(cMarca,lInverte,oValor,oQtda)}
- 210 -
ADVPL Avanado
7. Introduo relatrios grficos
7.1. TReport()
7.1.1. Introduo
Finalidade
Vale lembrar que nem todos os relatrios so personalizveis. Por exemplo, relatrios que
tenham layout pr-definidos por lei e formulrios (boletos, notas-fiscais, etc) no podero ser
alterados.
Os relatrios personalizados so gravados com extenso .PRT, diferenciando-se dos relatrios
padres que recebem a extenso .##R.
- 211 -
ADVPL Avanado
Descrio
A classe TReport permite que o usurio personalize as informaes que sero apresentadas no
relatrio, alterando fonte (tipo, tamanho, etc), cor, tipo de linhas, cabealho, rodap, etc.
Pr-Requisitos
Para utilizar o TReport, verifique se o seu repositrio est com o Release 4 do Protheus-8, ou
verso superior.
#include "protheus.ch"
oReport := ReportDef()
oReport:PrintDialog()
EndIf
Return
- 212 -
ADVPL Avanado
7.1.2. Impresso do relatrio personalizvel
Cada componente da tela de impresso do TReport, deve ser configurado no programa, para
que o usurio tenha acesso s personalizaes:
A caixa de listagem apresentada deve ser utilizada conforme o meio de sada do relatrio. Veja
a seguir.
Impresso
Arquivo
O relatrio ser gravado em disco com o nome apresentado. Caso seja escolhida a opo
"Servidor" ele ser gravado no diretrio determinado na senha do usurio, atravs do
configurador, sendo este sempre no servidor (padro \SPOOL\). Na escolha da opo "Local"
ser aberta uma janela para que seja escolhido o local onde o relatrio ser gravado na
mquina do usurio.
O relatrio gerado a partir desta opo pode ser impresso ou enviado por e-mail aps ser
apresentado na tela.
- 213 -
ADVPL Avanado
Spool
Envia o relatrio por e-mail (Internet). Para isto, devem ser configurados os seguintes
parmetros no Ambiente Configurador:
MV_RELACNT
Define a conta de e-mail para identificar a provenincia dos relatrios.
Exemplo: relprotheus@microsiga.com.br
MV_RELPSW
Define a senha da conta de e-mail para envio dos relatrios.
MV_RELSERV
Define o servidor da conta de e-mail para o envio do relatrio.
Exemplo: smtp.microsiga.com.br
Quando selecionada esta opo, deve-se informar, no campo em destaque na figura abaixo, o
e-mail para o qual o relatrio deve ser remetido.
- 214 -
ADVPL Avanado
O Protheus Server pode tambm ser executado como um servidor Web, respondendo a
requisies HTTP. No momento destas requisies, pode executar rotinas escritas em ADVPL
como processos individuais, enviando o resultado das funes como retorno das requisies
para o cliente HTTP (como por exemplo, um Browser de Internet). Qualquer rotina escrita em
ADVPL que no contenha comandos de interface pode ser executada atravs de requisies
HTTP. O Protheus permite a compilao de arquivos HTML contendo cdigo ADVPL embutido.
So os chamados arquivos ADVPL ASP, para a criao de pginas dinmicas.
Programao TelNet
TelNet parte da gama de protocolos TCP/IP que permite a conexo a um computador remoto
atravs de uma aplicao cliente deste protocolo. O PROTHEUS Server pode emular um
terminal TelNet, atravs da execuo de rotinas escritas em ADVPL. Ou seja, pode-se escrever
rotinas ADVPL cuja interface final ser um terminal TelNet ou um coletor de dados mvel.
Papel
Tamanho do papel
Configuraes
Ttulo
Caso queira alterar a opo sugerida pelo sistema, digite o cabealho do relatrio.
Ordem
Escolha a ordem em que as informaes sero apresentadas no relatrio, clicando em uma das
chaves disponveis.
Layout
Permite selecionar o modelo de relatrio para impresso, medida que novos leiautes forem
gravados para um relatrio, seus nomes sero listados nessa caixa.
Preview
Faz a exibio do relatrio gerado na tela, possibilitando, na seqncia, o seu envio para
impressora ou a cancelamento da impresso.
- 215 -
ADVPL Avanado
Executar em segundo plano
Essa opo permite que o relatrio seja gerado e enviado para a fila de impresso, enquanto o
usurio pode executar outras tarefas no sistema.
7.1.3. Personalizao
O primeiro passo entender a nova estrutura dos relatrios desenvolvidos com a ferramenta
TReport.
O Relatrio possui Sees e Clulas. chamada de Seo, cada um dos grupos de
informaes, e de Clula, cada um dos campos que sero impressos.
- 216 -
ADVPL Avanado
Nova estrutura do relatrio TReport:
1. DEFINE REPORT
2. DEFINE SECTION
3. DEFINE CELL
- 217 -
ADVPL Avanado
DEFINE REPORT
A funo DEFINE REPORT responsvel pela criao do objeto Report, ou seja, o relatrio.
Internamente, o DEFINE REPORT ir executar o mtodo TReport():New().
Estrutura do componente TReport:
DEFINE SECTION
DEFINE CELL
Para cada seo, devem ser definidas as clulas. Clula cada informao que dever ser
impressa. Pode ser um campo do cadastro, ou um resultado de uma operao. uma Clula
de impresso de uma seo (TRSection) de um relatrio que utiliza a classe TReport
Internamente, o DEFINE CELL ir executar o mtodo TRCell():New ().
- 218 -
ADVPL Avanado
MDULO 08: Aplicaes ADVPL para o ERP
- 219 -
ADVPL Avanado
8.1. Caractersticas tcnicas com o uso do TOTVS DbAccess
Aps enviar ao Banco de Dados uma solicitao de abertura de Query, em caso de sucesso na
operao, o TOPConnect obtm do Banco de Dados a quantidade de colunas que sero
retornadas, e qual o tamanho e tipo e especificaes de cada uma das colunas, para retornar
ao Protheus uma estrutura definida de informaes, e o cursor aberto lido conforme so
solicitados os prximos registros ( DBSkip() no Advpl ), e a cada requisio, uma linha do
cursor retornada, at no haver mais linhas no cursor, atingindo o final do arquivo no Advpl (
EOF() ).
Quando especificamos uma coluna de retorno na Query, que corresponde a informaes lidas
diretamente de uma ou mais coluna(s) da tabela, cada coluna retornada pela Query contm
uma definio de tipo e tamanho correspondente ao campo de origem do dado de retorno.
Deste modo, se considerarmos, por exemplo, a Query : SELECT A1_FILIAL FROM SA1990 ,
onde o campo A1_FILIAL na tabela SA1990 um campo do tipo varchar, com 2 bytes de
tamanho, quando o cursor for aberto no Banco de Dados, o TOPConnect ir obter do banco
que o result-set gerado possui apenas uma coluna, e esta coluna do tipo varchar, com no
mximo 2 bytes de tamanho.
Este comportamento pode variar de acordo com o Banco de Dados, a expresso e/ou funes
utilizadas para gerar a coluna de retorno, e inclusive podem ter diferenas entre verses e
Builds do mesmo Banco de Dados e/ou parametrizaes especficas do Banco de Dados e/ou
da aplicao Client / ODBC / API utilizada para acesso ao Banco.
Para ilustrar melhor estas diferenas, vejamos abaixo os resultados obtidos com queries, em
bancos distintos, onde foi criada uma tabela com a mesma estrutura, e 10 linhas de dados, e
nela foram executadas algumas querys, onde temos como retorno uma coluna calculada. A
tabela possui os campos CPOC, tipo Caractere, tamanho 10 bytes, numerados de 0000000001
a 0000000010 e um campo numrico CPON, alimentado com valores positivos. Para cada
Query, mostramos o valor retornado ao Advpl, contendo o tipo de dado retornado e o tamanho
(len) da coluna, no formato . ( Tipo ( tamanho ) ).
Bancos:
- 220 -
ADVPL Avanado
Query: SELECT MIN(CPOC) CPOTESTE FROM TESTRET WHERE CPON < 0
Bancos:
Retorno: Todos os bancos que suportam a funo LEFT() retornaram uma coluna
de informaes, onde os 5 primeiros bytes eram '00000'.
Bancos:
Bancos:
- 221 -
ADVPL Avanado
Devido a estas diferenas de comportamento, devemos tomar alguns cuidados ao desenvolver
aplicaes que utilizam colunas calculadas em queries. Nestes casos, deve ser utilizada uma
funo do banco de dados, para assegurar que o banco de dados retorne o tamanho de coluna
adequado ao TOPConnect / TotvsDBAccess.
Vale a pena salientar que, cada banco de dados possui, com pequenas variaes, uma sintaxe
para permitir o CAST de um retorno. Para maiores detalhes, a documentao do banco deve
ser consultada.
Quando foram homologados os Bancos Postgres para uso com o ERP Microsiga e TOPConnect
4, praticamente no eram utilizadas queries com colunas calculadas nas aplicaes Advpl, e
este comportamento diferenciado no foi percebido. Conforme as rotinas foram evoluindo,
buscando mais performance atravs do uso de Queries, tornou-se perceptvel estas diferenas
operacionais.
- 222 -
ADVPL Avanado
Algumas destas diferenas operacionais foram assimiladas pelas funes do ERP, por exemplo
a ChangeQuery, que em verso atualizada (** Protheus 8 e P10, fonte aplib070.prw com data
igual ou superior a 08/03/2008) , aplicam o CAST() automaticamente para SELECT
MAX(CAMPO), quando o banco Postgres, e o campo selecionado for um campo da base de
dados, presente no Dicionrio de Campos ( SX3 ).
Para todos os efeitos, para utilizao com as verses homologadas de Postgres inferiores a
8.x, necessrio alterar a configurao de ODBC do Postgres, para limitar o retorno do tipo
VarChar para 2000 Bytes, pois o retorno do valor default ( 65536 bytes ) no suportado pelo
TOPConnect / TOTVSDBAccess. Alteramos esta configurao no arquivo .odbc.ini no linux, e/ou
no arquivo de configurao do ODBC do Postgres utilizado, inserindo na seo da conexo /
identificao do banco a chave abaixo :
MaxLongVarcharSize=2000
Funcionamento Interno
A expresso utilizada para a criao de um ndice permanente em Advpl, por exemplo : CPOC
+ DTOS(CPOD) + STR( CPON,10 ), quando utilizamos o RDD TOPCONN, ser ajustada para o
Banco de Dados relacional utilizado para uma expresso contendo apenas a lista de campos
desejada, na sequncia em que foi especificada, e as funes DTOS() e STR() nao so
passadas ao banco de dados, pois no existe a necessidade de converso de dados para o
Banco.
Um campo do tipo 'D' Data tratado pelo TOPConnect e gravado na tabela em questo como
um campo 'C' Caractere, de 10 bytes, no formato AAAAMMDD, e os nmeros so gravados em
um campo DOUBLE*.
- 223 -
ADVPL Avanado
Quebra de Compatibilidade com CodeBase/DBF
Os Bancos relacionais, em sua grande maioria, seno todos, suportam apenas a criao de
ndices onde sejam especificados campos fsicos da base de dados. No so suportadas
funes de converso ou transformao de dados na criao de ndices, como por exemplo
substring(), left(), entre outras. Embora alguns bancos permitam a criao de colunas
calculadas, as mesmas so 'virtuais', isto , no existem fisicamente na tabela, e tambm no
permitido o uso de colunas virtuais para a criao de ndices.
Entendemos que o RDD CodeBase / DBF, onde originalmente foi desenvolvido o ERP, nos dava
certa flexibilidade ao permitir operaes como estas, porm a um custo de processamento
mais alto, pois para cada insero ou alterao, o RDD tem que executar funes de conversao
e concatenao de strings para atualizao dos ndices que usam este recurso.
Partindo da premissa que, se uma determinada informao deve ser indexada para busca, ela
deve ser uma informao que ocupa exclusivamente um campo fsico da base de dados, so
evitadas as operaes constantes de concatenao e desmembramento de uma informao
agrupada, colocando cada parte da informao em seu devido espao ( campo )
definido, mesmo com o impacto gerado para alterar as aplicaes que usavam estes tipos
de ndices, os ganhos obtidos em organizao e performance foram muito significativos.
- 224 -
ADVPL Avanado
Lista dos cdigos de erro do TOPConnect / DbAccess
Quanto utilizado o TOPConnect / DbAccess para conexo e operaes com Bancos de Dados,
as ocorrncias de erro so reportadas ao Protheus informando em conjunto com o erro um
nmero menor que zero, correspondendo a um tipo de erro.
Para a maioria das ocorrncias, relacionadas ao Banco de Dados, deve-se olhar o log de erro
gravado pelo TOPConnect / DbAccess ( arquivo topconn.log ) para obter maiores detalhes
sobre a ocorrncia.
- 225 -
ADVPL Avanado
8.2. Funes ADVPL para TOPCONNECT / TOTVS DbAccess
Neste tpico sero descritas as funes da linguagem ADVPL que permitem a interao
com a aplicao TopConnect / DbAccess.
TCCANOPEN
TCCONTYPE
TCDELFILE
TCGENQRY
TCGETDB
TCLINK
TCQUERY
TCQUIT
TCSETCONN
TCSETFIELD
TCSPEXEC
TCSPEXIST
TCSQLERROR
TCSQLEXEC
TCSRVTYPE
TCUNLINK
TCCHKOBJ
TCEXEERROR
TCPGMEXE
TCSYSEXE
Lista das funes acessrias utilizadas nos fontes como facilitadoras:
CHANGEQUERY
RETFULLNAME
RETSQLCOND
RETSQLNAME
RETSQLTABLE
SQLCOPY
SQLORDER
SQLTOTRB
- 226 -
ADVPL Avanado
Funes de interao com o TopConnect / DbAccess
TCCANOPEN ()
Parmetros:
Retorno:
Exemplo:
TCCONTYPE()
Sintaxe: TCConType(cType)
Parmetros:
- 227 -
ADVPL Avanado
Retorno:
Nenhum .
Exemplo:
#INCLUDE "TOPCONN.CH"
//Especifica conexo TCP/IP
TCConType("TCPIP")
TCDELFILE()
Sintaxe: TCDelFile(cTable)
Parmetros:
Retorno:
Nenhum .
Exemplo:
TCDelFile("CUSTOMER")
- 228 -
ADVPL Avanado
TCGENQRY()
Permite a execuo de uma query de seleo no banco de dados e retorna um recordset com o
resultado.
Sintaxe: TCGENQRY(xParam1,xParam2,cQuery)
Parmetros:
Retorno:
Exemplo:
TCGETDB()
Sintaxe: TCGETDB()
Parmetros:
Nenhum .
- 229 -
ADVPL Avanado
Retorno:
Exemplo:
TCLINK()
Sintaxe: TCLink(cConectString,cServer)
Parmetros:
Observaes:
- 230 -
ADVPL Avanado
Para informaes sobre a criao de ambientes consulte o manual de instalao do
TOPConnect.
Retorno:
Exemplo:
nCon := TCLink("MSSQL/SIGAADV","TOPSRV")
if nCon < 0 //Conexes com retorno < 0 significam erro
Alert("Falha de conexo com o TOPConnect")
endif
//Protocolo TCP/IP
TCConType("TCPIP")
//Conecta-se ao Oracle no ambiente TESTES
nCon := TCLink("ORACLE/TESTES",172.16.1.2)
//Protocolo APPC
//Conecta-se ao AS/400 no ambiente PRODUCAO
nCon := TCLink("PRODUCAO","TOP400")
- 231 -
ADVPL Avanado
TCQUERY()
Parmetros:
Observaes:
o GO TOP - DbGoTop()
o GO BOTTOM - DbGoBottom()
o SKIP - DbSkip()
o Eof()
o Bof()
Ao executar uma Query que retorne um ou mais valores calculados, o nome dos
campos da WorkArea sero COLUMN1, COLUMN2... COLUMNn.
Retorno:
Nenhum .
- 232 -
ADVPL Avanado
Exemplo:
While !Eof()
ALERT(CODIGO+"|"+NOME)
dbSkip()
end
TCQUIT()
Sintaxe: TCQuit()
Parmetros:
Nenhum .
Retorno:
Nenhum .
TCSETCONN()
Sintaxe: TCSETCONN(nConn)
Parmetros:
Retorno:
Nenhum .
- 233 -
ADVPL Avanado
Exemplo:
TCSetConn(nCon1)
TCSetConn(nCon2)
TCSETFIELD()
Esta funo serve como apoio ao comando TCQUERY, na recuperao de campos tipo
NUMERIC, DATE e LOGICAL, pois os mesmos so gravados fisicamente no Banco de Dados
como caracteres, e no caso dos numricos como float.
Parmetros:
Retorno:
Nenhum .
- 234 -
ADVPL Avanado
Exemplo 01:
TCQUERY "SELECT NOME, DATA, MARRIED, VALOR FROM CUSTOMER" ALIAS QUERY VIA
"TOPCONN"
TCSetField("QUERY","DATA","D")
TCSetField("QUERY","VALOR","N",12,2)
Exemplo 02:
If Select("SA1SQL") <> 0
DbSelectArea("SA1SQL")
DbCloseArea()
Endif
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery),"SA1SQL",.T.,.F.)
- 235 -
ADVPL Avanado
Continuao:
For nX := 1 to Len(aStruSA1)
IF !( aStrutSA1[nX][2] $ "C/M")
TCSetField( cAlias,aStruSA1[nX][1],aStruSA1[nX][2],;
aStruSA1[nX][3],aStruSA1[nX][4])
ENDIF
Next nX
TCSPEXEC()
Sintaxe: TCSPExec(cSPName,xParam1,xParam2...xParamN)
Parmetros:
- 236 -
ADVPL Avanado
Retorno:
Exemplo:
cRetorno := ""
For i:= 1 to Len(aRet)
cRetorno += "|"+ IIF(ValType(aRet[i]) == "C", aRet[i],;
IIF(ValType(aRet[i]) == "N", CValToChar(aRet[i]), "U"))
Next
Else
ALERT("Erro executando Stored Procedure"+CRLF+"Mensagem: "+TCSQLError())
Endif
EndIf
- 237 -
ADVPL Avanado
TCSPEXIST()
Sintaxe: TCSPExist(cSPName)
Parmetros:
Retorno:
Exemplo:
If TCSPExist("MAT001_01")
TCSPExec("MAT001_01",...)
Endif
TCSQLERROR()
Retorna o ltimo erro registrado pelo TOPConnect durante a execuo de uma Query.
Sintaxe: TCSQLError()
Parmetros:
Nenhum .
Retorno:
Exemplo:
- 238 -
ADVPL Avanado
Esta a mesma mensagem que esta registrada no log de eventos do
TopConnect / TOTVS DbAccess Manager.
TCSQLEXEC()
Sintaxe: TCSQLExec(cCommand)
Parmetros:
Retorno:
Exemplo:
TCSRVTYPE()
Sintaxe: TCSrvType()
Parmetros:
Nenhum .
Retorno:
Exemplo:
TCLink("MSSQL/TESTE","TOPSRV")
ALERT(TCSrvtype())
- 239 -
ADVPL Avanado
Devido aos tratamentos especficos necessrios nas queries que sero
executadas em bancos de dados DB2 com sistemas operacionais AS/400
normal a seguinte verificao:
#IFDEF TOP
If TcSrvType() != "AS/400"
Else
#ENDIF
#IFDEF TOP
Endif
#ENDIF
TCUNLINK()
Sintaxe: TCUnlink(nConn)
Parmetros:
Retorno:
Nenhum .
Exemplo:
TCConType("NPIPE")
nConn := TCLink("MSSQL/TOPCONN","TOPSRV")
TCUnLink(nConn)
- 240 -
ADVPL Avanado
TCCHKOBJ()
Sintaxe: TCChkObj(cObj,cLibrary,cType)
Parmetros:
Retorno:
Exemplo:
nError := TCChkObj("CALCCUST","PRODUCAO","*PGM")
TCEXEERROR()
Retorna uma string com a mensagem de erro retornada pela execuo das funes
TCPGMEXE() e TCSYSEXE().
Sintaxe: TCExeError()
Parmetros:
Nenhum .
Retorno:
Exemplo:
If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif
- 241 -
ADVPL Avanado
Funo para uso apenas com o TOPConnect em servidores AS/400.
TCPGMEXE()
Sintaxe: TCPGMEXE(cProgram)
Parmetros:
Retorno:
Exemplo:
If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif
TCSYSEXE()
Sintaxe: TCSysExe(cCommand)
Parmetros:
Retorno:
- 242 -
ADVPL Avanado
Exemplo:
Funes acessrias para uso em fontes com interao com o TOTVS DbAccess
CHANGEQUERY()
Funo que efetua as adequaes necessrias a query para que a mesma possa ser executada
adequadamente no banco de dados em uso pela aplicao ERP atravs do TopConnect.
Esta funo necessria pois a aplicao ERP Protheus pode ser utilizada com diversos bancos
de dados, e cada banco possui particularidades em sua sintaxe, de forma que mesmo uma
query escrita respeitando o padro SQL ANSI pode necessitar de adequaes.
Sintaxe: ChangeQuery(cQuery)
Parmetros:
Retorno:
String
Query adequada em funo do banco em uso pela conexo ativa com a
aplicao TopConnect.
Exemplo:
- 243 -
ADVPL Avanado
A funo ChangeQuery() deve obrigatoriamente ser utilizada pelos fontes da
aplicao ERP, pois a mesma pode ser instalada em diversos ambientes,
utilizando os vrios bancos de dados homologados, mas para
desenvolvimentos especficos de clientes, o analista pode optar por no
utilizar a funo ChangeQuery().
RETFULLNAME()
Retorna o nome real da tabela no banco de dados para utilizao desta na seleo da query.
Parmetros:
Retorno:
Exemplo:
SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())
cRealName := RetFullName("TRBSQL")
- 244 -
ADVPL Avanado
RETSQLCOND()
Sintaxe: RetSqlCond(cAlias)
Parmetros:
Retorno:
String
Condies de seleo padres para o alias indicado.
As condies padres so:
ALIAS_FILIAL = xFilial(ALIAS) .AND.
ALIAS.D_E_L_E_T_ = .
Exemplo:
RETSQLNAME()
Retorna o nome padro da tabela para seleo no banco de dados atravs da query.
Sintaxe: RetSqlName(cAlias)
Parmetros:
Retorno:
Exemplo:
- 245 -
ADVPL Avanado
RETSQLTABLE()
Retorna o nome real da tabela para seleo no banco de dados atravs da query.
Sintaxe: RetSqlTable(cAlias)
Parmetros:
Retorno:
Exemplo:
SQLCOPY()
Parmetros:
Retorno:
Nenhum .
- 246 -
ADVPL Avanado
SQLORDER()
Converte a sintaxe de um indce em formato ISAM (CODEBASE) para o formato SQL ANSI
Sintaxe: SqlOrdem(cOrder)
Parmetros:
Retorno:
Exemplo:
SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())
cRealName := RetFullName("TRBSQL")
- 247 -
ADVPL Avanado
SQLTOTRB()
Parmetros:
Retorno:
Nenhum .
Exemplo:
cCampos:= ""
nX := 0
nMax := Len(aStruSQL)
cArqTrb := CriaTrab(aStruSQL,.T.)
dbUseArea(.T.,__LOCALDRIVER,cArqTrb,cAlias,.T.,.F.)
cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")+" (NOLOCK) "
SqlToTrb(cQuery,aStruSQL,cAlias)
cArqInd := CriaTrab(Nil,.F.)
cChave := "A1_FILIAL+A1_COD+A1_LOJA"
IndRegua(cAlias,cArqInd,cChave,,,"Indexando Registros...")
dbSelectArea( cAlias )
dbGotop()
- 248 -
ADVPL Avanado
8.3. Aplicaes com controle de comunio com o Banco de Dados
Em resumo, qualquer aplicao do ambiente ERP pode ser escrita utilizando os recursos de
interao com a aplicao TopConnect / TOTVS DbAccess, para obter, manipular e atualizar os
dados do banco do banco de dados.
Neste tpico sero detalhadas duas aplicaes utilizando estas funes, cujo grau de
complexidade ilustra bem o potencial desta ferramenta.
Consulta Kardex em tela, pois este relatrio combina dados das tabelas de
itens dos documentos de entrada (SD1), itens dos documentos de sada
(SD2) e movimentaes internas (SD3).
- 249 -
ADVPL Avanado
Exemplo: MaWndBrowse com Alias Temporrio gerado por Query
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------
| Funo | WndSQLTRB | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Demonstra a utilizao da MaWndBrowse com SQL |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
- 250 -
ADVPL Avanado
Continuao:
cCampos:= ""
nX := 0
nMax := Len(aStruSQL)
aEval( aStruSQL,{|aCampo| nX++, cCampos += aCampo[1] +;
IIF(nX == nMax,' ',', ')})
cArqTrb := CriaTrab(aStruSQL,.T.)
dbUseArea(.T.,__LOCALDRIVER,cArqTrb,cAlias,.T.,.F.)
cQuery := "SELECT "+cCampos+" FROM "+RetSqlName("SA1")+" (NOLOCK) "
SqlToTrb(cQuery,aStruSQL,cAlias)
- 251 -
ADVPL Avanado
Continuao:
cArqInd := CriaTrab(Nil,.F.)
cChave := "A1_FILIAL+A1_COD+A1_LOJA"
IndRegua(cAlias,cArqInd,cChave,,,"Indexando Registros...")
dbSelectArea( cAlias )
dbGotop()
MaWndBrowse(aSize[7],aSize[2],aSize[6],aSize[5],cTitulo,cAlias,/*aCampos*/,;
aRotina,,cTopFun,cBotFun,lCentered,,nModelo,,cSeek,lDic,lSavOrd)
If File(cArqInd+OrdBagExt())
FErase(cArqInd+OrdBagExt())
ENDIF
DbSelectArea("SA1")
DbSetOrder(1)
Return
/*/
+-----------------------------------------------------------------------
| Funo | TcVisual | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk := {||oDlg:End()}
LOCAL bCancel := {||oDlg:End()}
LOCAL nX
Continuao:
- 252 -
ADVPL Avanado
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
/*/
+-----------------------------------------------------------------------
| Funo | TcInclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX
Continuao:
- 253 -
ADVPL Avanado
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".T.",aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
Do Case
Case aCampos[nX][5] == "C"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
Case aCampos[nX][5] == "N"
&("_"+aCampos[nX][1]) := 0
Case aCampos[nX][5] == "D"
&("_"+aCampos[nX][1]) := CTOD("")
Case aCampos[nX][5] == "L"
&("_"+aCampos[nX][1]) := .F.
Case aCampos[nX][5] == "M"
&("_"+aCampos[nX][1]) := Space(aCampos[nX][4])
EndCase
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
- 254 -
ADVPL Avanado
Continuao:
/*/
+-----------------------------------------------------------------------
| Funo | TcAltera | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL aArea := GetArea()
LOCAL nX
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",aCampos[nX][6],aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
- 255 -
ADVPL Avanado
Continuao:
/*/
+-----------------------------------------------------------------------
| Funo | TcExclui | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aCposEnch := {}
LOCAL nLinha := 15
LOCAL nColuna := 10
LOCAL nOpcE := aRotina[nOpc][4] // Opcao de verdade
LOCAL bOk
LOCAL bCancel := {||oDlg:End()}
LOCAL nX
For nX := 1 to Len(aCampos)
If nX > 1
nLinha := IIF(nX%2 > 0 ,nLinha := nLinha +015,nLinha) // Impar
nColuna := IIF(nX%2 == 0,nColuna := nColuna+170,10)// Par
Endif
AADD(aCposEnch,{"_"+aCampos[nX][1],{nLinha,nColuna} ,;
aCampos[nX][3],aCampos[nX][2],"AllwaysTrue()",;
"",".F.",aCampos[nX][4]})
SetPrvt("_"+aCampos[nX][1])
&("_"+aCampos[nX][1]) := (cAlias)->&(aCampos[nX][1])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
TEnchoice(oDlg, aCposEnch,,,,,.T.)
RETURN
Continuao:
- 256 -
ADVPL Avanado
/*/
+-----------------------------------------------------------------------
| Funo | TcValid | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
For nX := 1 to Len(aCampos)
IF aCampos[nX,nPosObrig] == .T.
IF !(lRet := !Empty(&("_"+aCampos[nX,1])))
Help("TEnchoice",1,"HELP","OBRIGATORIO","Existem campos
obrigatorios nao preenchidos",1,0)
RETURN lRet // EXIT
ENDIF
ENDIF
Next nX
IF nOpc == 3
IF !(lRet := !((cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID))))
Help("TEnchoice",1,"HELP","INCLUSAO","Ja existe um registro com esta
chave",1,0)
ENDIF
ELSE
IF !(lRet := (cAlias)->(dbSeek(_TRB_FILIAL+_TRB_ID)))
Help("TEnchoice",1,"HELP","ALTERACAO","Nao existe um registro com
esta chave",1,0)
ENDIF
ENDIF
RETURN lRet
- 257 -
ADVPL Avanado
Continuao:
/*/
+-----------------------------------------------------------------------
| Funo | TcGravar | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
RecLock(cAlias,nOpc==3)
IF nOpc == 5
DbDelete()
ELSE
For nX := 1 to Len(aCampos)
(cAlias)->&(aCampos[nX][1]) := &("_"+aCampos[nX][1])
Next nX
ENDIF
Msunlock()
RETURN
- 258 -
ADVPL Avanado
Continuao:
/*/
+-----------------------------------------------------------------------
| Funo | TEnchoice | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | Enchoice para arquivos temporarios |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
Local aSays := {}
Local aGets := {}
Local cCaption := ""
Local cPict := ""
Local cValid := ""
Local cF3 := ""
Local cWhen := ""
Local cBlKSay := ""
Local cBlkGet := ""
Local cBlKVld := ""
Local cBlKWhen := ""
Local nLeft := 0
Local nTop := 0
Local nI := 0
If Len(aCampos) > 0
If Len(aCampos[nI])==8
cCampo := aCampos[nI,1]
nLeft := aCampos[nI,2,1]-13
nTop := aCampos[nI,2,2]
cCaption:= Iif(Empty(aCampos[nI,3]), " " ,aCampos[nI,3])
cPict := Iif(Empty(aCampos[nI,4]), Nil ,aCampos[nI,4])
cValid := Iif(Empty(aCampos[nI,5]), ".t." ,aCampos[nI,5])
cF3 := Iif(Empty(aCampos[nI,6]), NIL ,aCampos[nI,6])
- 259 -
ADVPL Avanado
Continuao:
AADD(aSays,Array(1))
aSays[nI] := TSay():New(nLeft+1, nTop, &(cBlkSay), oScroll,,,;
.F., .F., .F., .T.,,, 50, 8, .F., .F., .F., .F.,;
.F. )
AADD(aGets,Array(1))
EndIf
Next
Endif
Return
- 260 -
ADVPL Avanado
8.3.2. Banco de dados de interface
O termo Banco de dados de interface utilizado para classificar uma aplicao ADVPL escrita
com funes de interao com a aplicao TopConnect / TOTVS DbAccess para realizar a
integrao entre a aplicao ERP Protheus e outro sistema, utilizando como meio de
comunicao um banco de dados e no mais importao de arquivos em N formatos, tais
como .TXT, .DBF e similares.
- 261 -
ADVPL Avanado
A figura abaixo ilustra a estrutura tpica de uma aplicao utilizando o conceito de Banco de
Dados de Interface, com foco na aplicao ERP Protheus e seus recursos pr-disponveis:
- 262 -
ADVPL Avanado
Consideraes complementares sobre o conceito de Banco de Dados de Interface
- 263 -
ADVPL Avanado
8.4. Embedded SQL Facilitador de Querys
O objetivo do Embedded SQL facilitar a escrita e leitura de query's. Foi definida uma sintaxe
para que se possa escrever a query diretamente no cdigo ADVPL, sem a necessidade de ficar
concatenando pedaos de string para compor a string final.
Disponibilidade do Recurso
Este recurso est disponvel apenas no Protheus 8. A utilizao do Embedded SQL divide-se
em : compilao do fonte, e execuo do fonte. Para ser possvel compilar um fonte com o
cdigo escrito no formato Embedded, deve ser utilizado um Protheus, com Build igual ou
superior a 7.00.050721p, em um ambiente com repositrio para TopConnect ( RPODB=TOP ).
A utiliao deste recurso tambm depende da atualizao da LIB 811, superior a 'Lib
20050902 - 811'.
- 264 -
ADVPL Avanado
Caractersticas operacionais - Sintaxe
O bloco onde ser escrito o Select deve sempre ser iniciado com 'BeginSql alias' e finalizado
com 'EndSql'.
Partes do cdigo que devem ser substitudas aparecem entre os sinais de %. Estas expresses
possuem tratamento especial em momento de execuo.
Qualquer instruo colocada entre BEGINSQL... ENDSQL, que no seja uma expresso %...% ,
ser inserida na query a ser enviada para o banco, de forma literal.
Em column, especificar campos da query que so do tipo data, lgico ou numrico (DATE,
LOGIC, NUMBER). Esta linha trocada por chamadas funo TCSetField.
%noparser% indica que a query no deve passar pela funo 'ChangeQuery' antes de ser
enviada ao banco de dados. Caso no especificado, o default a string da query ser passada
automaticamente pela funo ChangeQuery.
Limitao:
No permitido incluir funes no meio do cdigo 'embedded'. Se precisar, o valor deve ser
guardado em uma varivel antes do incio do BeginSql.
tam_cp := GetE2ValorSize()
- 265 -
ADVPL Avanado
Erros de Compilao
Caso seja utilizado algum argumento invlido para especificar as colunas, ou erros de sintaxe
nas expresses a serem transformadas para a montagem da query, a compilao do fonte
interrompida com a ocorrncia 'Syntax Error', informando a linha onde a primeira ocorrncia
foi encontrada.
Caso a ocorrncia de compilao aponte diretamente para a linha do cdigo-fonte, onde est
escrita a instruo EndSql, verifique se existe algum espao em branco ou tabulao, a partir
do incio da linha, antes da instruo EndSql. A verso atual desde ambiente no suporta esta
declarao, exigindo que a instruo EndSql seja alinhada esquerda do fonte, sem espaos
ou tabulaes.
Erros de Execuo
Caso a instruo BeginSQL especifique um alias que j esteja aberto (em uso), a aplicao
abortada com a ocorrncia de erro fatal acima, informando em XXX o alias utilizado.
Caso alguma expresso informada na Query, atravs da tag %exp: ... %, retorne um valor de
tipo diferente de 'C' Catacter, 'D' Data, 'N' Numrico, ou 'L' Lgico, a aplicao abortada com
a ocorrncia de erro acima, onde o tipo do argumento inesperado mostrado em [X].
Caso um fonte com o Embedded SQL seja executado em um repositrio que no tenha sido
atualizado, OU que no seja um Repositrio para o ambiente TOPConnect ( RPODB=TOP), a
aplicao exibir a ocorrncia acima, indicando que a funo interna de execuo da Query
no est presente no ambiente. Verifique se a lib est atualizada, e se o RPO em uso de um
ambiente TOPConnect.
- 266 -
ADVPL Avanado
Caractersticas operacionais - depurao
%noparser%
- 267 -
ADVPL Avanado
Exemplo mais completo: Fonte gerado pelo pr-compilador (PPO)
__execSql(
'E2TEMP',
' SELECT SE2.E2_PREFIXO,SE2.E2_NUM, SE2.E2_FORNECE, SE2.E2_LOJA,SE2.E2_VALOR,
SE2.D_E_L_E_T_ DEL1, QEK.D_E_L_E_T_ DEL2 , QEK.QEK_SKLDOC, SE2.R_E_C_N_O_
SE2RECNO FROM '+RetSqlName('SE2')+' SE2, '+RetSqlName('QEK')+' QEK WHERE
SE2.E2_FILIAL= '' +xFilial('SE2')+'' AND qek.D_E_L_E_T_= ' ' AND
SE2.E2_PREFIXO<> '+___SQLGetValue(CPREFIXO)+' AND SE2.E2_NUM <> '+
___SQLGetValue((CALIAS)->M0_CODIGO)+' AND SE2.E2_NUM<>45 AND SE2.E2_FORNECE= '+
___SQLGetValue(SPACE(LEN(SE2->E2_FORNECE)))+' AND SE2.E2_EMISSAO<> '+
___SQLGetValue(MV_PAR06)+' AND SE2.E2_LOJA<> '+___SQLGetValue(MV_PAR05) +' AND
SE2.E2_VALOR<> '+___SQLGetValue(MV_PAR04)+' AND qek.QEK_SKLDOC<> '+
___SQLGetValue(MV_PAR03)+' And SE2.D_E_L_E_T_= ' ' ORDER BY '+
SqlOrder(SE2->(IndexKey(1))), {{'E2_EMISSAO','D',8,0}, {'E2_VALOR','N',tam_cp,2},
{'QEK_SKLDOC','L',1,0}},.T.)
)
- 268 -
ADVPL Avanado
9. Funcionalidade MsExecAuto
Avaliando esta funcionalidade apenas pelo pargrafo acima, tem-se a impresso de ser um
recurso simples e at mesmo desnecessrio, pois um desenvolvedor experiente poderia
reproduzir todas as validaes e tratamentos existentes em sua rotina, ento porque ter de
tratar a rotina padro?
- 269 -
ADVPL Avanado
Quando utilizar a funcionalidade MsExecAuto ?
Tendo em vista este cenrio fica a pergunta: Quando utilizar a funcionalidade MsExecAuto ?
A resposta pode ser bvia e at conservadora, mas Sempre que a funcionalidade estiver
disponvel naquele processo.
Pode-se dizer que as principais rotinas de atualizao do ERP Protheus atualmente possuem o
tratamento necessrio para sua execuo por MsExecAuto, e com base nas necessidades de
desenvolvimento internas da TOTVS e nas melhorias solicitadas por clientes e analistas de
implantao as demais rotinas necessrias so atualizadas para contemplar este tratamento.
O quadro abaixo ilustra um dos ltimos cenrios de tratamento de MsExecAuto pelas rotinas
da aplicao ERP Protheus.
Rotina Parmetros
ATFA010 (xAutoCab, xAutoItens, nOpcAuto)
ATFA030 (xAutoCab, nOpc)
ATFA035 (xAutoCab, nOpc)
CFGX016 (xAutoCab, xAutoItens)
CTBA015 (nOpcAuto, aAuto)
CTBA016 (nOpcAuto, aAuto)
CTBA020 (aRotAuto, nOpcAuto, aRotItem)
CTBA102 (xAutoCab, xAutoItens, nOpcAuto)
CTBA270 (xAutoCab, xAutoItens, nOpcAuto)
FATA140 (nOpcAuto, aAuto)
FATA220 (nOpcAuto, aAutoCab)
FATA300 (nOpcAuto, xAutoCab, xAutoAD2, xAutoAD3, xAutoAD4, xAutoAD9)
FATA310 (xAutoCab, xAutoItens, nOpcAuto)
FATA320 (xAutoVend, xAutoTask, xAutoCalend)
FINA010 (aRotAuto, nOpcAuto)
FINA040 (aRotAuto, nOpcAuto)
FINA050 (aRotAuto, nOpcion, nOpcAuto)
FINA070 (xAutoCab, nOpc)
FINA080 (xAutoCab, nOpc)
FINA390 (nPosArotina, xAutoCab, nOpcAuto)
MATA040 (aAuto, nOpcAuto)
MATA080 (aRotauto, nOpcAuto)
MATA103 (xAutoCab, xAutoItens, nOpcAuto, lWhenGet, xAutoImp)
MATA105 (xReservCab, xReservItens, nOpcAuto)
MATA110 (xAutoCab, xAutoItens, nOpcAuto)
MATA116A (xAutoCab, xAutoItens, lInclui)
MATA120 (nFuncao, xAutoCab, xAutoItens, nOpcAuto, )
MATA125 (xAutoCab, xAutoItens, nOpcAuto)
MATA140 (xAutoCab, xAutoItens, nOpcAuto)
MATA145 (xAutoCab, xAutoIt, xAutoIt2, nOpcAuto)
MATA150 (xAutoCab, xAutoItens, nOpcAuto)
- 270 -
ADVPL Avanado
Rotina Parmetros
MATA175 (xRotAuto, xOpcAuto)
MATA185 (xAutoSCP, xAutoSD3, nOpcAuto, xPerg)
MATA200 (xAutoCab, xAutoItens, nOpcAuto)
MATA230 (aAuto, nOpcAuto)
MATA241 (xAutoCab, xAutoItens, nCallOpcx)
MATA242 (xAutoCab, xAutoItens, nOpcAuto)
MATA261 (aAutoItens, nOpcAuto)
MATA265 (xAutoCab, xAutoItens, nOpcAuto)
MATA266 (aAutoItens)
MATA267 (aAutoItens)
MATA360 (xAutoCab, xAutoItens, nOpcAuto)
MATA410 (xAutoCab, xAutoItens, nOpcAuto)
MATA415 (xAutoCab, xAutoItens, nOpcAuto)
MATA416 (xAutoCab, xAutoItens)
MATA490 (xAuto, nOpcAuto)
MATA685 (xAutoCab, xAutoItens, nOpcAuto)
MATA700 (xAuto, nOpcAuto)
MATA920 (xAutoCab, xAutoItens, nOpcAuto)
TMKA061 (xAutoCab, xAutoItens, nOpcAuto)
TMKA062 (xAutoCab, xAutoItens, nOpcAuto)
TMKA271 (xAutoCab, xAutoItens, nOpcAuto)
TMSA040 (xAutoCab, xAutoItens, nOpcAuto)
TMSA050 (xAutoCab, xAutoItens, xItensPesM3, xItensEnder, nOpcAuto)
TMSA170 (xAutoCab, nOpcAuto)
TMSA360 (xAutoCab, xAutoItens, xAutoNFAva, nOpcAuto)
TMSA430 (cAlias, xAutoCab, xAutoVei, xAutoMot, nOpcAuto)
TMSA440 (xAutoCab, xAutoItens, nOpcAuto)
Apesar de todas as orientaes dos tpicos anteriores existem situaes nas quais no
recomendado utilizar a funcionalidade MsExecAuto, no caso, em situaes para as quais
existem rotinas padres da aplicao ERP para processamentos de integraes e atualizaes
que possuem tratamento para execuo direta ou execuo via Job.
Para estes casos a rotina j est pr-disposta a execuo direta, no havendo a necessidade
de tratamento via MsExecAuto, ou o tratamento realizado pela rotina o mais adequado para
aquele volume de dados.
- 271 -
ADVPL Avanado
9.1. Desenvolvendo aplicaes com MsExecAuto
Variveis de controle
Private lMsErroAuto
Indica de se houve erro no fatal durante a execuo.
Private lMsHelpAuto
Habilita a captura das mensagens de erro.
Private lAutoErrNoFile
Desabilita a gerao do arquivo de log padro do sistema.
Os exemplos a seguir visam ilustrar a utilizao de cada uma dos tipos de arrays:
- 272 -
ADVPL Avanado
Estrutura dos arrays de parmetros:
Cada item deste array um dos campos da tabela de cabealho das informaes
que sero processadas pela MsExecAuto. Com base nos exemplos anteriores, a
MsExecAuto da MATA030 possui apenas um array de parmetros no formato
xAutoCab, sendo que a MATA103 utilizar o xAutoCab para a tabela SF1 e a
MATA145 para a tabela DB1.
Sintaxe:
Exemplo:
O array contendo os dados dos itens tambm composto por: Campo, Contedo
e Validao; sendo que a diferena est no fato de que para cada item a ser
tratado pela MsExecAuto dever ser repetida e preenchida a estrutura do array
com as informaes do mesmo.
Sintaxe:
xAutoItem := {}
AADD(xAutoItens, xAutoItem)
</Estrutura>
- 273 -
ADVPL Avanado
Exemplo:
For nX := 1 to 2
xAutoItem := {}
AADD(xAutoItens, xAutoItem)
Next nX
Este mtodo o mais comum de ser utilizado dado sua praticidade, e pela possibilidade
do desenvolvedor especificar somente os campos obrigatrios para a tabela e aqueles
que contero as informaes geradas por sua aplicao.
Exemplo:
- 274 -
ADVPL Avanado
Mtodo de atribuio de contedo pela estrutura:
O mtodo de atribuio pela estrutura recomendvel em rotinas que efetuam a
importao das informaes atravs da leitura de arquivos de dados, sejam eles
CODEBASE ou via banco de dados.
Exemplo:
FOR nX := 1 TO LEN(aStruSN1)
IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0
DO CASE
CASE EMPTY(SN1IMP->&(aStruSN1[nX][1]))
AADD(xAutoCab,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})
- 275 -
ADVPL Avanado
OTHERWISE
AADD(xAutoCab,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]), NIL})
ENDCASE
ELSE
AADD(xAutoCab,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})
ENDIF
NEXT nX
...
END
Utilizando o mesmo exemplo anterior da ATFA010 Cadastro de Ativos podemos citar dois
tratamentos especficos necessrios para a correta execuo da MsExecAuto:
- 276 -
ADVPL Avanado
Controle de transao
Para utilizao do controle de transao na aplicao podem ser utilizados os seguintes blocos
de controle:
Um bloco de cdigo determinado pelos comandos Begin Transaction ... End Transaction
ter suas informaes atualizadas somente se antes do execuo do comando End
Transaction no for executada a funo DisarmTransaction().
Desta forma pode-se implementar um controle de transao por item processado, sendo
executado o DisarmTransaction() para aquele elemento em que houve algum problema
de processamento.
Seguindo este mesmo raciocnio, caso ocorra um erro fatal na aplicao, somente o item
que est em processamento ser desconsiderado, pois a aplicao ERP efetua um
DisarTransaction() automaticamente, fechamento as transaes pendentes e
restaurando as situaes anteriores, mas apenas para aqueles processamento protegidos
pelo bloco de controle de transao.
Exemplo:
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
DisarmTransaction()
ENDIF
END TRANSACTION
- 277 -
ADVPL Avanado
BeginTran() ... DisarmTransaction() ... EndTran()
Exemplo:
BeginTran()
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
DisarmTransaction()
ELSE
EndTran()
ENDIF
MsUnlockAll()
- 278 -
ADVPL Avanado
Tratamento de mensagens de erro
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
MostraErro()
DisarmTransaction()
ENDIF
END TRANSACTION
- 279 -
ADVPL Avanado
Gravao do evento de erro em arquivo texto
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
MostraErro(\system\)
DisarmTransaction()
ENDIF
END TRANSACTION
- 280 -
ADVPL Avanado
Personalizao da gravao do evento de erro
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
// Funo que retorna o evento de erro na forma de um array
aAutoErro := GETAUTOGRLOG()
DisarmTransaction()
ENDIF
END TRANSACTION
- 281 -
ADVPL Avanado
Aplicao completa de importao utilizando MsExecAuto: Carga de imobilizado
#INCLUDE "PROTHEUS.CH"
/*/
+-----------------------------------------------------------------------
| Funo | IATF001 | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | IMPORTACAO DO CADASTRO DE ATIVO IMOBILIZADO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL oProcess
PRIVATE oMainWnd
RpcSetType(3)
RpcSetEnv("99", "01",,,,,
{"CT1","SF9","SN1","SN2","SN3","SN4","SN5","SNG","SM2"})
RpcClearEnv()
RETURN
- 282 -
ADVPL Avanado
Continuao:
/*/
+-----------------------------------------------------------------------
| Funo | PROCATIVO | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | PROCESSAMENTO DA IMPORTACAO DO CADASTRO DE IMOBILIZADO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
- 283 -
ADVPL Avanado
Continuao:
DbSelectArea("SM2")
DbSetOrder(1)
DbSelectArea("SN1")
DbSetOrder(1)
aStruSN1 := SN1->(DbStruct())
DbSelectArea("SN2")
DbSetOrder(1)
aStruSN2 := SN2->(DbStruct())
DbSelectArea("SN3")
DbSetOrder(1)
aStruSN3 := SN3->(DbStruct())
DbSelectArea("SF9")
DbSetOrder(1)
aStruSF9 := SF9->(DbStruct())
DbSelectArea("SNG")
cIndSNG := CRIATRAB(Nil,.F.)
IndRegua("SNG",cIndSNG,"NG_FILIAL+NG_CCONTAB",,,"Selecionando Registros...")
nIndex := RetIndex()
#IFNDEF TOP
DbSetIndex(cIndSNG+OrdBagExt())
#ENDIF
DbSetOrder(nIndex)
PERGUNTE("ATF010",.F.)
MV_PAR02 := 1 // Permite repetir chapa definido como sim
IF Select("SN1IMP") > 0
DbSelectArea("SN1IMP")
DbCloseArea()
ENDIF
IF Select("SN2IMP") > 0
DbSelectArea("SN2IMP")
DbCloseArea()
ENDIF
IF Select("SN3IMP") > 0
DbSelectArea("SN3IMP")
DbCloseArea()
ENDIF
IF Select("SF9IMP") > 0
DbSelectArea("SF9IMP")
DbCloseArea()
ENDIF
- 284 -
ADVPL Avanado
Continuao:
IF Select("CTAIMP") > 0
DbSelectArea("CTAIMP")
DbCloseArea()
ENDIF
cArqSN1:= cDirArq+"SN1IMP"
IF File(cArqSN1+cFileExt)
dbUseArea(.T.,,cArqSN1+cFileExt,"SN1IMP",.F.,.F.)
IndRegua("SN1IMP",cArqSN1+OrdBagExt(),"N1_FILIAL+N1_CBASE+N1_ITEM",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN1IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF
cArqSN2:= cDirArq+"SN2IMP"
IF File(cArqSN2+cFileExt )
dbUseArea(.T.,,cArqSN2+cFileExt,"SN2IMP",.F.,.F.)
IndRegua("SN2IMP",cArqSN2+OrdBagExt(),;
"N2_FILIAL+N2_CBASE+N2_ITEM+N2_TIPO+N2_SEQ",,,"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN2IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF
cArqSN3:= cDirArq+"SN3IMP"
IF File(cArqSN3+cFileExt)
dbUseArea(.T.,,cArqSN3+cFileExt,"SN3IMP",.F.,.F.)
IndRegua("SN3IMP",cArqSN3+OrdBagExt(),"N3_FILIAL+N3_CBASE+N3_ITEM",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SN3IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF
IF lImpSF9
cArqSF9:= cDirArq+"SF9IMP"
IF File(cArqSF9+cFileExt )
dbUseArea(.T.,,cArqSF9+cFileExt,"SF9IMP",.F.,.F.)
IndRegua("SF9IMP",cArqSF9+OrdBagExt(),"F9_FILIAL+F9_CODIGO",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SF9IMP no existe."+;
CRLF+"Verifique caminho informado.",1,0)
RETURN
ENDIF
ENDIF
- 285 -
ADVPL Avanado
Continuao:
cArqCTA:= cDirArq+"CTAIMP"
IF File(cArqCTA+cFileExt)
dbUseArea(.T.,,cArqCTA+cFileExt,"CTAIMP",.F.,.F.)
IndRegua("CTAIMP",cArqCTA+OrdBagExt(),"CODIGO_CON",,,;
"Selecionando Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO CTAIMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF
cArqSM2:= cDirArq+"SM2IMP"
IF File(cArqSM2+cFileExt)
dbUseArea(.T.,,cArqSM2+cFileExt,"SM2IMP",.F.,.F.)
IndRegua("SM2IMP",cArqSM2+OrdBagExt(),"DTOS(BTN_DATA)",,,"Selecionando
Registros...")
ELSE
HELP("IATF001",1,"HELP","NO_FILE","ARQUIVO SM2IMP no existe."+CRLF+;
"Verifique caminho informado.",1,0)
RETURN
ENDIF
lMSHelpAuto := .T.
DbSelectArea("SN1IMP")
DbGotop()
//
// Preparao para inicio do processamento
//
cKeyImp := DTOS(dDatabase)+StrZero(HoraToInt(Time()),6)
// Identidficador dos registros do log de erros
ConOut("Processando importao:")
ConOut("Inicio: "+Time())
ConOut("Registros SN1IMP: "+CValToChar(SN1IMP->(RecCount())))
ConOut("Registros SN2IMP: "+CValToChar(SN2IMP->(RecCount())))
ConOut("Registros SN3IMP: "+CValToChar(SN3IMP->(RecCount())))
DbSelectArea("SN1IMP")
DbGotop()
- 286 -
ADVPL Avanado
Continuao:
While SN1IMP->(!Eof())
nProcRegs++
oProcess:IncRegua1("Processando item: "+CValToChar(nProcRegs)+" / "+;
CValToChar(nTotRegs))
oProcess:IncRegua2("Ficha de Ativo: ")
aDadosSN1 := {}
aDadosSN3 := {}
FOR nX := 1 TO LEN(aStruSN1)
IF SN1IMP->(FieldPos(aStruSN1[nX][1]))>0
DO CASE
CASE EMPTY(SN1IMP->&(aStruSN1[nX][1]))
AADD(aDadosSN1,{aStruSN1[nX][1],;
CRIAVAR(aStruSN1[nX][1]), NIL})
CASE aStruSN1[nX][2] == "C"
AADD(aDadosSN1,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]),;
"",aStruSN1[nX][3]), NIL})
CASE aStruSN1[nX][2] == "N"
AADD(aDadosSN1,{aStruSN1[nX][1],;
ABS(SN1IMP->&(aStruSN1[nX][1])), NIL})
OTHERWISE
AADD(aDadosSN1,{aStruSN1[nX][1],;
SN1IMP->&(aStruSN1[nX][1]), NIL})
ENDCASE
ELSE
AADD(aDadosSN1,{aStruSN1[nX][1], CRIAVAR(aStruSN1[nX][1]),;
NIL})
ENDIF
NEXT nX
For nX := 1 TO LEN(aDadosTN1)
IF (nPosField := aScan(aDadosSN1,{|aDadoSN1| aDadosSN1[1] ==;
aDadosTN1[nX][1]})) > 0
aDadosSN1[nPosField][2] := aDadosTN1[nX][2]
aDadosSN1[nPosField][3] := aDadosTN1[nX][3]
ENDIF
Next nX
- 287 -
ADVPL Avanado
Continuao:
IF SN1->(DbSeek(aDadosSN1[1][2]+aDadosSN1[2][2]+aDadosSN1[3][2]))
ConOut("Registro j importado: "+;
aDadosSN1[1][2]+"/"+aDadosSN1[2][2]+"/"+aDadosSN1[3][2])
ConOut("Registros importados com sucesso: "+CValToChar(nProcRegs))
SN1IMP->(dbSkip())
Loop
ENDIF
SN3IMP->(DbSeek(SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)))
While SN3IMP->(!Eof()) .AND. SN3IMP->(N3_FILIAL+N3_CBASE+N3_ITEM) ==;
SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM)
aItensSN3 := {}
FOR nX := 1 TO LEN(aStruSN3)
IF SN3IMP->(FieldPos(aStruSN3[nX][1]))>0
DO CASE
CASE EMPTY(SN3IMP->&(aStruSN3[nX][1]))
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), NIL})
CASE aStruSN3[nX][2] == "C"
AADD(aItensSN3,{aStruSN3[nX][1],;
SN3IMP->&(aStruSN3[nX][1]),;
aStruSN3[nX][3]), NIL})
CASE aStruSN3[nX][2] == "N"
AADD(aItensSN3,{aStruSN3[nX][1],;
ABS(SN3IMP->&(aStruSN3[nX][1])),;
".T."})
OTHERWISE
AADD(aItensSN3,{aStruSN3[nX][1],;
SN3IMP->&(aStruSN3[nX][1]), NIL})
ENDCASE
ELSEIF aStruSN3[nX][2] == "N"
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), ".T."})
ELSE
AADD(aItensSN3,{aStruSN3[nX][1],;
CRIAVAR(aStruSN3[nX][1]), NIL})
ENDIF
NEXT nX
For nX := 1 TO LEN(aDadosTN3)
IF (nPosField := aScan(aItensSN3,{|aItenSN3| aItenSN3[1] ==;
aDadosTN3[nX][1]})) > 0
aItensSN3[nPosField][2] := aDadosTN3[nX][2]
aItensSN3[nPosField][3] := aDadosTN3[nX][3]
- 288 -
ADVPL Avanado
Continuao:
ENDIF
Next nX
AADD(aDadosSN3,aItensSN3)
SN3IMP->(DbSkip())
Enddo
Begin Transaction
cFilAnt := SN1IMP->N1_FILIAL
lMsErroAuto := .F.
MSExecAuto({|x,y,z| Atfa010(x,y,z)},aDadosSN1,aDadosSN3,3)
// Cabealho, Itens e Opo
IF lMsErroAuto
aAutoErro := GETAUTOGRLOG()
XGRVLOG(cKeyImp,;
SN1IMP->(N1_FILIAL+N1_CBASE+N1_ITEM),;
SN1IMP->N1_DESCRIC, XCONVERRLOG(aAutoErro))
DisarmTransaction()
MostraErro(Alltrim(MVParBox06))
ELSE
RECLOCK("SN2",.T.)
SN2->N2_FILIAL := SN1->N1_FILIAL
SN2->N2_CBASE := SN1->N1_CBASE
SN2->N2_ITEM := SN1->N1_ITEM
SN2->N2_TIPO := "01"
SN2->N2_SEQ := "001"
SN2->N2_SEQUENC := STRZERO(nX,2)
SN2->N2_HISTOR := SUBSTR(cHistorico,nX,40)
MSUNLOCK()
NEXT nX
ENDIF
End Transaction
- 289 -
ADVPL Avanado
Continuao:
ENDIF
SN1IMP->(DbSkip())
Enddo
oProcess:IncRegua1("Processamento finalizado")
DbSelectArea("SN1IMP")
DbCloseArea()
IF File(cArqSN1+OrdBagExt())
FErase(cArqSN1+OrdBagExt())
ENDIF
DbSelectArea("SN2IMP")
DbCloseArea()
IF File(cArqSN2+OrdBagExt())
FErase(cArqSN2+OrdBagExt())
ENDIF
DbSelectArea("SN3IMP")
DbCloseArea()
IF File(cArqSN3+OrdBagExt())
FErase(cArqSN3+OrdBagExt())
ENDIF
IF lImpSF9
DbSelectArea("SF9IMP")
DbCloseArea()
IF File(cArqSF9+OrdBagExt())
FErase(cArqSF9+OrdBagExt())
ENDIF
ENDIF
IF lImpSNG
DbSelectArea("SNGIMP")
DbCloseArea()
IF File(cIndSNG+OrdBagExt())
FErase(cIndSNG+OrdBagExt())
ENDIF
ENDIF
DbSelectArea("CTAIMP")
DbCloseArea()
IF File(cArqCTA+OrdBagExt())
FErase(cArqCTA+OrdBagExt())
ENDIF
DbSelectArea("SM2IMP")
DbCloseArea()
IF File(cArqSM2+OrdBagExt())
FErase(cArqSM2+OrdBagExt())
ENDIF
- 290 -
ADVPL Avanado
Continuao:
DbSelectArea("LOGIMP")
DbCloseArea()
cFilAnt := cFilAtu
RestArea(aArea)
RETURN
/*/
+-----------------------------------------------------------------------
| Funo | CT001PARBX | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | TELA DE PARAMETROS ESPECIFICOS DA ROTINA CUSTOMIZADA |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
LOCAL aParamBox := {}
LOCAL cTitulo := "Importacao de cadastros"
LOCAL aRet := {}
LOCAL bOk := {|| .T.}
LOCAL aButtons := {}
LOCAL lCentered := .T.
LOCAL nPosx
LOCAL nPosy
LOCAL cLoad := ""
LOCAL lCanSave := .T.
LOCAL lUserSave := .T.
LOCAL nX := 0
LOCAL lRet := .F.
- 291 -
ADVPL Avanado
Continuao:
RETURN lRet
/*/
+-----------------------------------------------------------------------
| Funo | IATFCIAP | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | IMPORTACAO DO LIVRO FISCAL CIAP |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION IATFCIAP(aStruSF9,aDadosSF9)
Local aDadosCIAP := {}
Local nX := 0
Local nPosSF9 := 0
RETURN lMsErroAuto
- 292 -
ADVPL Avanado
Continuao:
/*/
+-----------------------------------------------------------------------
| Funo | XDBFLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | CRIACAO DO ARQUIVO DBF PARA TRATAMENTO DOS EVENTOS DE ERR|
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION XDBFLOG()
LOCAL aCampos := {}
LOCAL cArqLog := MVParBox06+"LOGIMP"+GetDbExtension()
IF !File(cArqLog)
AADD(aCampos,{"CKEYIMP" ,"C",014,0})
AADD(aCampos,{"CKEYREG" ,"C",020,0})
AADD(aCampos,{"CDESCR" ,"C",040,0})
AADD(aCampos,{"CSEQMSG" ,"C",003,0})
AADD(aCampos,{"CMSGERR" ,"C",254,0})
dbCreate(cArqLog,aCampos,__LocalDriver)
ENDIF
/*/
+-----------------------------------------------------------------------
| Funo | XGRVLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | GRAVACAO DA MENSAGEM DE ERRO NO ARQUIVO DBF DE CONTROLE |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
STATIC FUNCTION XGRVLOG(cKeyImp, cKeyReg, cDescReg, cMsgErr)
cSeqLog := SOMA1(cSeqLog)
RECLOCK("LOGIMP",.T.)
LOGIMP->CKEYIMP := cKeyImp
LOGIMP->CKEYREG := cKeyReg
LOGIMP->CDESCR := cDescReg
LOGIMP->CSEQMSG := cSeqLog
LOGIMP->CMSGERR := SUBSTR(cMsgErr,nX,254)
MSUNLOCK()
NEXT nX
RETURN
- 293 -
ADVPL Avanado
Continuao:
/*/
+-----------------------------------------------------------------------
| Funo | XCONVERRLOG | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | CONVERTE O ARRAY AAUTOERRO EM TEXTO CONTINUO. |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
FOR nX := 1 to Len(aAutoErro)
cRet += aAutoErro[nX]+CHR(13)+CHR(10)
NEXT nX
RETURN cRet
- 294 -
ADVPL Avanado
10. Recursos de envio de e-mail
Neste tpico sero descritas as funes da linguagem ADVPL que permitem o envio e o
recebimento de mensagens atravs de e-mails.
CALLPROC
MAILSMTPON
MAILPOPON
MAILSMTPOFF
MAILPOPOFF
MAILRECEIVE
MAILAUTH
POPMSGCOUNT
MAILSEND
MAILGETERR
CALLPROC()
Parmetros:
Retorno:
Nenhum .
- 295 -
ADVPL Avanado
MAILSMTPON()
Sintaxe clssica:
CONNECT SMTP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN
SERVER oRpcSrv RESULT lResult
Parmetros:
Retorno:
Lgico Indica se foi realizada com sucesso a conexo com o servidor indicado.
MAILPOPON()
Ativa uma conexo com o servio de POP para a thread ativa. -> lReturn
Sintaxe clssica:
CONNECT POP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN
SERVER oRpcSrv RESULT lResult
Parmetros:
Retorno:
Lgico Indica se foi realizada com sucesso a conexo com o servidor indicado.
- 296 -
ADVPL Avanado
MAILSMTPOFF()
Sintaxe: MailSmtpOff()
Sintaxe clssica:
Parmetros:
Nenhum .
Retorno:
MAILPOPOFF()
Sintaxe: MailPopOff()
Sintaxe clssica:
Parmetros:
Nenhum .
Retorno:
- 297 -
ADVPL Avanado
MAILRECEIVE()
Sintaxe clssica:
RECEIVE MAIL MESSAGE nNumber FROM cFrom TO cTo CC cCc BCC cBcc SUBJECT
cSubject BODY cBody ATTACHMENT aFiles SAVE IN cPath DELETE IN SERVER oRpcSrv
RESULT lResult
Parmetros:
nNumber Nmero da mensagem que dever ser recebida. Este nmero em funo da
quantidade de mensagens na caixa de e-mails.
cFrom Varivel local do fonte que ser atualizada com o remetente da mensagem.
cTo Varivel local do fonte que ser atualizada com o destinatrio da mensagem.
cCc Varivel local do fonte que ser atualizada com a conta copiada na
mensagem.
cBcc Varivel local do fonte que ser atualizada com a conta copiada em cpia
oculta na mensagem.
cSubject Varivel local do fonte que ser atualizada com o assunto da mensagem.
cBody Varivel local do fonte que ser atualizada com corpo da mensagem.
aFiles Varivel local do fonte que ser atualizada os nomes dos anexos da
mensagem.
cPath Diretrio no qual sero salvos os anexos da mensagem.
lDelete Indica se a mensagem dever ser apagada do servidor de e-mails aps sua
recepo pela aplicao.
Retorno:
- 298 -
ADVPL Avanado
MAILAUTH()
Parmetros:
Retorno:
- 299 -
ADVPL Avanado
POPMSGCOUNT()
Sintaxe: PopMsgCount(@nMsgCount)
Sintaxe clssica:
Parmetros:
nMsgCount Varivel local do fonte que ser atualizada com a quantidade de mensagens
disponveis para recebimento na caixa de e-mails.
Retorno:
MAILSEND()
Sintaxe clssica:
SEND MAIL FROM cFrom TO aTo,... CC aCc,... BCC aBcc,... SUBJECT cSubject BODY
cBody FORMAT TEXT ATTACHMENT aFiles,... IN SERVER oRpcSrv RESULT lResult
Parmetros:
Retorno:
- 300 -
ADVPL Avanado
MAILGETERR()
Sintaxe: MailGetErr()
Sintaxe clssica:
Parmetros:
Nenhum .
Retorno:
#include "protheus.ch"
#include "tbiconn.ch"
#include "AP5MAIL.CH"
/*/
+-----------------------------------------------------------------------
| Funo | SENDMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | ENVIO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
- 301 -
ADVPL Avanado
Continuao:
cMsg := "--------------------------------------------------"
cMsg += "CURSO DE ADVPL "
cMsg += "--------------------------------------------------"
cMsg += "Voc est recebendo um e-mail do curso de ADVPL avanado"
CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn
If !lResulConn
GET MAIL ERROR cError
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif
// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
// Todos os e-mail tero: De, Para, Assunto e Mensagem, porm precisa analisar
se tem: Com Cpia e/ou Anexo
If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
//Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer
a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif
Endif
If lResult
If Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT
lResulSend
Else
If Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf !Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
RESULT lResulSend
Endif
Endif
- 302 -
ADVPL Avanado
Continuao:
If !lResulSend
GET MAIL ERROR cError
If _lJob
ConOut(Padc("Falha no Envio do e-mail "+cError,80))
Else
MsgAlert("Falha no Envio do e-mail " + cError)
Endif
Endif
Else
If _lJob
ConOut(Padc("Falha na autenticao do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticao do e-mail:" + cError)
Endif
Endif
IF lResulSend
If _lJob
ConOut(Padc("E-mail enviado com sucesso",80))
Else
MsgInfo("E-mail enviado com sucesso" + cError)
Endif
ENDIF
RETURN lResulSend
- 303 -
ADVPL Avanado
Envio de mensagens utilizando funes
#include "protheus.ch"
#include 'tbiconn.ch'
#include "AP5MAIL.CH"
/*/
+-----------------------------------------------------------------------
| Funo | SENDMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | ENVIO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
cMsg := "--------------------------------------------------"
cMsg += "CURSO DE ADVPL "
cMsg += "--------------------------------------------------"
cMsg += "Voc est recebendo um e-mail do curso de ADVPL avanado"
//CONNECT SMTP SERVER cServer ACCOUNT cEmail PASSWORD cPass RESULT lResulConn
lResulConn := MailSmtpOn( cServer, cEmail, cPass)
If !lResulConn
//GET MAIL ERROR cError
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif
- 304 -
ADVPL Avanado
Continuao:
// Sintaxe: SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
// Todos os e-mail tero: De, Para, Assunto e Mensagem, porm precisa analisar
se tem: Com Cpia e/ou Anexo
If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
//Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta fazer
a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif
Endif
If lResult
/*
If Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg RESULT
lResulSend
Else
If Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf !Empty(cCc) .And. !Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
ATTACHMENT cAnexo RESULT lResulSend
ElseIf Empty(cCc) .And. Empty(cAnexo)
SEND MAIL FROM cDe TO cPara CC cCc SUBJECT cAssunto BODY cMsg
RESULT lResulSend
Endif
Endif
*/
lResulSend := MailSend(cDe,{cPara},{cCc},{cBcc},cAssunto,cMsg,{cAnexo},.T.)
If !lResulSend
//GET MAIL ERROR cError
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha no Envio do e-mail "+cError,80))
Else
MsgAlert("Falha no Envio do e-mail " + cError)
Endif
Endif
Else
If _lJob
ConOut(Padc("Falha na autenticao do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticao do e-mail:" + cError)
Endif
Endif
Continuao:
- 305 -
ADVPL Avanado
//DISCONNECT SMTP SERVER
MailSmtpOff()
IF lResulSend
If _lJob
ConOut(Padc("E-mail enviado com sucesso",80))
Else
MsgInfo("E-mail enviado com sucesso" + cError)
Endif
ENDIF
RETURN lResulSend
- 306 -
ADVPL Avanado
Recebimento de mensagens utilizando funes
#include "protheus.ch"
#include "tbiconn.ch"
#include "AP5MAIL.CH"
/*/
+-----------------------------------------------------------------------
| Funo | POPMAIL | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | RECEBIMENTO DE E-MAIL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
If !lResulConn
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha na conexao "+cError,80))
Else
MsgAlert("Falha na conexao "+cError)
Endif
Return(.F.)
Endif
- 307 -
ADVPL Avanado
Continuao:
/*If lRelauth
lResult := MailAuth(Alltrim(cEmail), Alltrim(cPass))
// Se nao conseguiu fazer a Autenticacao usando o E-mail completo, tenta
// fazer a autenticacao usando apenas o nome de usuario do E-mail
If !lResult
nA := At("@",cEmail)
cUser := If(nA>0,Subs(cEmail,1,nA-1),cEmail)
lResult := MailAuth(Alltrim(cUser), Alltrim(cPass))
Endif
Endif*/
If lResult
PopMsgCount(@nMsgCount)
If !lResulPop
cError := MailGetErr()
If _lJob
ConOut(Padc("Falha no recebimento do e-mail "+cError,80))
Else
MsgAlert("Falha no recebimento do e-mail " + cError)
Endif
MsgInfo(cMessage,"E-mail Recebido")
Endif
Else
If _lJob
ConOut(Padc("Falha na autenticao do e-mail: "+cError,80))
Else
MsgAlert("Falha na autenticao do e-mail:" + cError)
Endif
Endif
MailPopOff()
- 308 -
ADVPL Avanado
Continuao:
IF lResulPop
If _lJob
ConOut(Padc("E-mails recebidos com sucesso",80))
Else
MsgInfo("E-mail recebidos com sucesso" + cError)
Endif
ENDIF
RETURN lResulPop
DLGTOEXCEL()
Realiza a exportao das informaes do ambiente Protheus em formato de arrays para uma
planilha do Microsoft Excel.
Parmetros:
Retorno:
Nenhum .
- 309 -
ADVPL Avanado
Exemplo de exportao para o Microsoft Excel utilizando a funo DlgToExcel()
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------
| Funo | GExpExcel | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Descrio | EXPORTACAO PARA EXCEL GENERICO |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
Return
/*/
+-----------------------------------------------------------------------
| Funo | GProcItens | Autor | Arnaldo R. Junior | Data | |
+-----------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------
/*/
Local aItem
Local nX
DbSelectArea("SA1")
DbSetOrder(1)
DbGotop()
- 310 -
ADVPL Avanado
Continuao:
While SA1->(!EOF())
aItem := Array(Len(aHeader))
For nX := 1 to Len(aHeader)
IF aHeader[nX][2] == "C"
aItem[nX] := CHR(160)+SA1->&(aHeader[nX][1])
ELSE
aItem[nX] := SA1->&(aHeader[nX][1])
ENDIF
Next nX
AADD(aCols,aItem)
aItem := {}
SA1->(dbSkip())
End
Return
- 311 -
ADVPL Avanado
APNDICES
Relao de imagens para aplicaes visuais
BAIXATIT BR_AZUL E5
- 312 -
ADVPL Avanado
BOTTOM CALCULADORA GRAF2D
- 313 -
ADVPL Avanado
OK PMSRRFSH S4WB006N
- 314 -
ADVPL Avanado
UP BR_CANCEL CTBREPLA
- 315 -
ADVPL Avanado
F7_CINZ F12_VERD LANDSCAPE
- 316 -
ADVPL Avanado
PROJETPMS SDUCLOSE TEXTCENTER
- 317 -
ADVPL Avanado
BOXBOM3 BPMSTSK2I PMSCONS
- 318 -
ADVPL Avanado
DOWN GOTOP INVERTSELECTION
GOBOTTOM
- 319 -
ADVPL Avanado
LISTAS DE EXERCCIOS
- 320 -
ADVPL Avanado
Converter o cadastro desenvolvido no exerccio anterior para que o mesmo
04
utilize o objeto MsMGet().
- 321 -
ADVPL Avanado
Desenvolver uma MaWndBrowse utilizando um arquivo temporrio.
08
- 322 -
ADVPL Avanado
Desenvolver uma MaWndBrowse utilizando um Alias gerado pela funo
12
TcGenQry().
- 323 -
ADVPL Avanado
Implementar uma funo que realize o envio de um texto simples para uma
16
conta de e-mail @totvs, que permita sua fcil identificao.
- 324 -
ADVPL Avanado
Projeto: Avaliao prtica do treinamento de ADVPL Avanado
Objetivos do projeto
Dever ser entregue na data estabelecida pelo instrutor, contendo os fontes e demais arquivos
necessrios. A avaliao do projeto ser realizada aps a entrega, no prazo estabelecido pelo
instrutor;
Pode ser realizado em grupos de at 03 pessoas. Caso existam alunos sem grupos, estes podero
integrar equipes j formadas com o total de membros estabelecido, mediante aprovao do
instrutor;
Avaliao do projeto
Desenvolver uma aplicao utilizando a linguagem ADVPL que contemple as seguintes funcionalidades:
- 325 -
ADVPL Avanado
REFERNCIAS BIBLIOGRFICAS
Referncias bibliogrficas
Oficina de Programao
Robson Luiz Estefani Gonalves
Colaboradores
- 326 -
ADVPL Avanado
Educao Corporativa
CTOD()
Realiza a converso de uma informao do tipo caracter no formato DD/MM/AAAA para uma
varivel do tipo data.
Sintaxe: CTOD(cData)
Parmetros
Exemplo:
cData := 31/12/2006
dData := CTOD(cData)
CVALTOCHAR()
Realiza a converso de uma informao do tipo numrico em uma string, sem a adio de
espaos a informao.
Sintaxe: CVALTOCHAR(nValor)
Parmetros
Exemplo:
FOR nPercorridos := 1 to 10
MSGINFO(Passos percorridos: +CvalToChar(nPercorridos))
NEXT nPercorridos
- 328 -
Guia de Referncia Rpida
ADVPL Avanado
DTOC()
Realiza a converso de uma informao do tipo data para em caracter, sendo o resultado no
formato DD/MM/AAAA.
Sintaxe: DTOC(dData)
Parmetros
Exemplo:
DTOS()
Sintaxe: DTOS(dData)
Parmetros
Exemplo:
STOD()
Sintaxe: STOD(sData)
Parmetros
Exemplo:
sData := LERSTR(01,08) // Funo que realiza a leitura de uma string de um txt previamente
// aberto
dData := STOD(sData)
- 329 -
Guia de Referncia Rpida
ADVPL Avanado
STR()
Realiza a converso de uma informao do tipo numrico em uma string, adicionando espaos
direita.
Sintaxe: STR(nValor)
Parmetros
Exemplo:
FOR nPercorridos := 1 to 10
MSGINFO(Passos percorridos: +CvalToChar(nPercorridos))
NEXT nPercorridos
STRZERO()
Realiza a converso de uma informao do tipo numrico em uma string, adicionando zeros
esquerda do nmero convertido, de forma que a string gerada tenha o tamanho especificado
no parmetro.
Exemplo:
FOR nPercorridos := 1 to 10
MSGINFO(Passos percorridos: +CvalToChar(nPercorridos))
NEXT nPercorridos
- 330 -
Guia de Referncia Rpida
ADVPL Avanado
VAL()
Sintaxe: VAL(cValor)
Parmetros
Exemplo:
- 331 -
Guia de Referncia Rpida
ADVPL Avanado
Matemticas
ACOS()
Sintaxe: ACOS(nValor)
Parmetros:
Retorno:
CEILING()
Funo utilizada para calcular o valor mais prximo possvel de um valor nMax informado como
parmetro para a funo.
Sintaxe: CELLING(nMax)
Parmetros
Retorno:
Numrico
Valor do tipo double, representando o menor inteiro que maior ou igual ao
valor de nX. No h retorno de erro na funo.
COS()
Sintaxe: COS(nAngulo)
Parmetros:
Retorno:
- 332 -
Guia de Referncia Rpida
ADVPL Avanado
Situaes invlidas:
LOG10()
Funo utilizada para calcular o logaritmo natural de um valor numrico, em base 10.
LOG10() uma funo numrica que calcula o logaritmo natural de um nmero. O logaritmo
natural tem como base o valor 10. Devido ao arredondamento matemtico, os valores
retornados por LOG() podem no coincidir exatamente.
Sintaxe: LOG10(nNatural)
Parmetros:
Retorno:
SIN()
Funo utilizada para calcular o valor do seno ou seno hiperblico. Devemos informar como
parmetro para a funo um valor que representa o angulo em radianos.
Sintaxe: SIN(nAngulo)
Parmetros:
Retorno:
Situaes invlidas:
- 333 -
Guia de Referncia Rpida
ADVPL Avanado
SQRT()
Sintaxe: SQRT(nValor)
Parmetros:
Retorno:
TAN()
Sintaxe: TAN(nAngulo)
Parmetros:
Retorno:
Situaes invlidas:
- 334 -
Guia de Referncia Rpida
ADVPL Avanado
Anlise de variveis
TYPE()
Determina o tipo do contedo de uma varivel, a qual no foi definida na funo em execuo.
Sintaxe: TYPE(cVariavel)
Parmetros
Exemplo:
IF TYPE(dDataBase) == D
MSGINFO(Database do sistema: +DTOC(dDataBase))
ELSE
MSGINFO(Varivel indefinida no momento)
ENDIF
VALTYPE()
Determina o tipo do contedo de uma varivel, a qual no foi definida na funo em execuo.
Sintaxe: VALTYPE(cVariavel)
Parmetros
Exemplo:
STATIC FUNCTION GETTEXTO(nTamanho, cTitulo, cSay)
LOCAL cTexto :=
LOCAL nColF, nLargGet := 0
PRIVATE oDlg
Default cTitulo := "Tela para informar texto"
Default cSay := "Informe o texto:"
Default nTamanho := 1
- 335 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de arrays
AADD()
A funo AADD() permite a insero de um item em um array j existente, sendo que este
item podem ser um elemento simples, um objeto ou outro array.
Exemplo:
aDados := {} // Define que a varivel aDados um array, sem especificar suas dimenses.
aItem := {} // Define que a varivel aItem um array, sem especificar suas dimenses.
// Neste ponto o array a Item possui 03 elementos os quais podem ser acessados com:
// aItem[1] -> corresponde ao contedo de cVariavel1
// aItem[2] -> corresponde ao contedo de cVariavel2
// aItem[3] -> corresponde ao contedo de cVariavel3
// Neste ponto, o array a aDados possui apenas um elemento, que tambm um array
// contendo 03 elementos:
// aDados [1][1] -> corresponde ao contedo de cVariavel1
// aDados [1][2] -> corresponde ao contedo de cVariavel2
// aDados [1][3] -> corresponde ao contedo de cVariavel3
AADD(aDados, aItem)
AADD(aDados, aItem)
// Neste ponto, o array aDados possui 03 elementos, aonde cada qual um array com outros
// 03 elementos, sendo:
- 336 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
// Desta forma, o array aDados montando com uma estrutura de 03 linhas e 03 colunas, com
// o contedo definido por variveis externas, mas com a mesma forma obtida com o uso do
// comando: aDados := ARRAY(3,3).
ACLONE()
A funo ACLONE() realiza a cpia dos elementos de um array para outro array integralmente.
Sintaxe: AADD(aArray)
Parmetros
aArray Array pr-existente que ter seu contedo copiado para o array especificado.
Exemplo:
// Neste ponto, o array aItens possui exatamente a mesma estrutura e informaes do array
// aDados.
ACOPY()
Funo de array que copia elementos do array aOrigem para array aDestino. O array destino
aDestino j deve ter sido declarado e grande o bastante para conter os elementos que sero
copiados. Se o array aOrigem contiver mais elementos, alguns dos elementos no sero
copiados. ACOPY() copia os valores de todos os dados, incluindo valores nulos (NIL) e cdigos
de bloco.
- 337 -
Guia de Referncia Rpida
ADVPL Avanado
nQtde indica a quantidade de elementos a serem copiados a partir do array
aOrigem. iniciando-se a contagem a partir da posio nInicio. Se nQtde
no for especificado, todos os elementos do array aOrigem sero copiados,
iniciando-se a partir da posio nInicio.
nPosDestino a posio do elemento inicial no array aDestino que receber os
elementos de aOrigem. Se no especificado, ser assumido 01.
Retorno:
Exemplo:
ADEL()
Exemplo:
- 338 -
Guia de Referncia Rpida
ADVPL Avanado
ADIR()
Funo que preenche os arrays passados com os dados dos arquivos encontrados, atravs da
mscara informada. Tanto arquivos locais (Remote) como do servidor podem ser informados.
Parmetros:
Retorno:
Exemplo:
LOCAL aFiles[ADIR("*.TXT")]
ADIR("*.TXT", aFiles)
AEVAL(aFiles, { |element| QOUT(element) })
- 339 -
Guia de Referncia Rpida
ADVPL Avanado
AFILL()
Funo de manipulao de arrays, que preenche os elementos do array com qualquer tipo de
dado. Incluindo code-block. Esta funo no deve ser usada para preencher um array com
outro array.
Retorno:
Exemplo:
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. }
AINS()
Exemplo:
AINS(aAlunos,3)
// Neste ponto o array aAlunos ter o seguinte contedo:
// {Edson, Robson, nulo, Renato, Tatiana}
- 340 -
Guia de Referncia Rpida
ADVPL Avanado
Similar ao efeito da funo ADEL(), o elemento inserido no array pela funo
AINS() ter um contedo nulo, sendo necessrio trata-lo aps a realizao
deste comando.
ARRAY()
A funo Array() utilizada na definio de variveis de tipo array, como uma opo a sintaxe
utilizando chaves ({}).
Exemplo:
aDados := Array(3,3) // Cria um array de trs linhas, cada qual com 3 colunas.
ASCAN()
A funo ASCAN() permite que seja identificada a posio do array que contm uma
determinada informao, atravs da anlise de uma expresso descrita em um bloco de
cdigo.
Exemplo:
- 341 -
Guia de Referncia Rpida
ADVPL Avanado
Durante a execuo da funo aScan, a varivel x receber o contedo o
item que est posicionado no momento, no caso aAlunos[x]. Como aAlunos[x]
uma posio do array que contm o nome do aluno, x poderia ser
renomeada para cNome, e a definio do bloco bSeek poderia ser re-escrita
como:
Sempre opte por analisar como o bloco de cdigo ser utilizado e ao invs de
x, y e similares, defina os parmetros com nomes que representem seu
contedo. Ser mais simples o seu entendimento e o entendimento de outros
que forem analisar o cdigo escrito.
ASCANX()
Funo utilizada para varrer um vetor procurando um valor especificado, operando de forma
similar a funo ASCAN.
A diferena fundamental da funo ASCANX que esta funo recebe um segundo parmetro
em seu code-block representando o ndice do array.
Sintaxe: ASCANX ( < xDestino > , < bSeek > , [ nInicio ] , [ nCont ] )
Parmetros:
xDestino Representa o objeto a ser varrido pela funo, pode ser atribudo ao
parmetro um array um Objeto.
bSeek Representa o valor que ser pesquisado, podendo ser um bloco de cdigo.
nInicio Representa o elemento a partir do qual ter inicio a pesquisa, quando este
argumento no for informado o valor default ser 1.
nCont Representa a quantidade de elementos que sero pesquisados a partir da
posio inicial, quando este argumento no for informado todos elementos
do array sero pesquisados.
Exemplo.:
- 342 -
Guia de Referncia Rpida
ADVPL Avanado
No cdigo demonstrado acima, note a incluso no code-block do Y, onde a
funo ir terminar sua execuo em 3 condies:
ASIZE()
nTamanho Tamanho com o qual deseja-se redefinir o array. Se o tamanho for menor do
que o atual, sero removidos os elementos do final do array, j se o
tamanho for maior do que o atual sero inseridos itens nulos ao final do
array.
Exemplo:
// Utilizando o array aItens, o qual teve um elemento excludo pelo uso da funo ADEL()
ASIZE(aItens,Len(aItens-1))
// Neste ponto o array aItens possui 02 elementos, ambos com contedos vlidos.
- 343 -
Guia de Referncia Rpida
ADVPL Avanado
ASORT()
A funo ASORT() permite que os itens de um array sejam ordenados a partir de um critrio
pr-estabelecido.
aArray Array pr-existente que ter seu contedo ordenado atravs de um critrio
estabelecido.
nInicio Posio inicial do array para incio da ordenao. Caso no seja informado, o
array ser ordenado a partir de seu primeiro elemento.
nItens Quantos itens, a partir da posio inicial devero ser ordenados. Caso no
seja informado, sero ordenados todos os elementos do array.
bOrdem Bloco de cdigo que permite a definio do critrio de ordenao do array.
Caso bOrdem no seja informado, ser utilizado o critrio ascendente.
Com base nesse requisito, pode-se definir um bloco de cdigo com a estrutura
abaixo:
aSort(aAlunos)
- 344 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo 02 Ordenao descendente
// Durante a execuo da funo aSort(), a varivel x receber o contedo do item que est
// posicionado. Como o item que est posicionado a posio aAlunos[x] e aAlunos[x] ->
// string contendo o nome de um aluno, pode-se substituir x por cNomeAtu.
// A varivel y receber o contedo do prximo item a ser avaliado, e usando a mesma
// analogia de x, pode-se substituir y por cNomeProx. Desta forma o bloco de cdigo
// bOrdem pode ser re-escrito como:
aSort(aAlunos,,bOrdem)
ATAIL()
ATAIL() uma funo de manipulao de array que retorna o ltimo elemento de um array.
Ela deve ser usada em substituio da seguinte construo: aArray [LEN( aArray )]
Retorno:
Exemplo:
- 345 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de blocos de cdigo
EVAL()
Exemplo:
nInt := 10
bBloco := {|N| x:= 10, y:= x*N, z:= y/(x*N)}
nValor := EVAL(bBloco, nInt)
// O retorno ser dado pela avaliao da ultima ao da lista de expresses, no caso z.
// Cada uma das variveis definidas em uma das aes da lista de expresses fica disponvel
// para a prxima ao.
// Desta forma temos:
// N recebe nInt como parmetro (10)
// X tem atribudo o valor 10 (10)
// Y resultado da multiplicao de X por N (100)
// Z resultado a diviso de Y pela multiplicao de X por N ( 100 / 100) 1
DBEVAL()
A funo DBEval() permite que todos os registro de uma determinada tabela sejam analisados
e para cada registro ser executado o bloco de cdigo definido.
bBloco Bloco de cdigo principal, contendo as expresses que sero avaliadas para
cada registro do alias ativo.
bFor Condio para continuao da anlise dos registros, com o efeito de uma
estrutura For ... Next.
bWhile Condio para continuao da anlise dos registros, com o efeito de uma
estrutura While ... End
- 346 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo 01:
// Considerando o trecho de cdigo abaixo:
dbSelectArea(SX5)
dbSetOrder(1)
dbGotop()
Exemplo 02:
// Considerando o trecho de cdigo abaixo:
dbSelectArea(SX5)
dbSetOrder(1)
dbGotop()
- 347 -
Guia de Referncia Rpida
ADVPL Avanado
AEVAL()
A funo AEVAL() permite que todos os elementos de um determinada array sejam analisados
e para cada elemento ser executado o bloco de cdigo definido.
bBloco Bloco de cdigo principal, contendo as expresses que sero avaliadas para
cada elemento do array informado.
Exemplo 01:
AADD(aCampos,A1_FILIAL)
AADD(aCampos,A1_COD)
SX3->(dbSetOrder(2))
For nX:=1 To Len(aCampos)
SX3->(dbSeek(aCampos[nX]))
AADD(aTitulos,AllTrim(SX3->X3_TITULO))
Next nX
- 348 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de strings
ALLTRIM()
Retorna uma string sem os espaos direita e esquerda, referente ao contedo informado
como parmetro.
A funo ALLTRIM() implementa as aes das funes RTRIM (right trim) e LTRIM (left
trim).
Sintaxe: ALLTRIM(cString)
Parmetros
cString String que ser avaliada para remoo dos espaos a direita e a esquerda.
Exemplo:
cNome := ALLTRIM(SA1->A1_NOME)
ASC()
Converte uma informao caractere em seu valor de acordo com a tabela ASCII.
Sintaxe: ASC(cCaractere)
Parmetros
Exemplo:
- 349 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
EndCase
cRet := cRet+cLetra
Next
Return UPPER(cRet)
AT()
Exemplo:
STATIC FUNCTION NOMASCARA(cString,cMascara,nTamanho)
RETURN cNoMascara
- 350 -
Guia de Referncia Rpida
ADVPL Avanado
BITON()
Funo utilizada para ligar determinados bits de uma String passada por parmetro para a
funo. Alm da string ser alterada, a funo tambm recebe como parmetro um numrico
que indica o bit de inicio a ser alterado, um numrico que indica a quantidade de bits a serem
alterados(ligados) e o tamanho da string passada.
Sintaxe: BITON ( < cValue > , < nBitIni > , < nBitEnd > , < nStrLen > )
Parmetros
CAPITAL()
Funo que avalia a string passada como parmetro alterando a primeira letra de cada palavra
para maiscula e as demais letras como minsculas.
Sintaxe: CAPITAL(cFrase)
Parmetros:
Retorno:
CHR()
Converte um valor nmero referente a uma informao da tabela ASCII no caractere que esta
informao representa.
Sintaxe: CHR(nASCII)
Parmetros
Exemplo:
- 351 -
Guia de Referncia Rpida
ADVPL Avanado
DESCEND()
Retorno:
Exemplo:
// Este exemplo utiliza DESCEND() em uma expresso INDEX para criar um ndice de datas de
// ordem descendente:
// Depois, DESCEND() pode ser utilizado para fazer uma pesquisa (SEEK) no ndice
// descendente:
DbSEEK(DESCEND(DTOS(dFindDate)))
GETDTOVAL()
Funo utilizada para retornar um numero formatado, de acordo com o valor passado por
parmetro, sendo que ir apenas manter os valores numricos contidos na string passada por
parmetro, verificando se existe algum caractere '.' retornando um numero fracionrio, na
ordem dos nmeros contidos na string.
A funo muito til quando desejamos utilizar o valor numrico de uma data que est
contida em uma string.
Parmetros:
cDtoVal Representa uma string contendo um valor numrico no qual ser convertido.
Retorno:
- 352 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
ISALPHA()
Parmetros:
Retorno:
ISDIGIT()
Parmetros:
Retorno:
Lgico Retorna verdadeiro (.T.) caso o primeiro caractere da cadeia seja um dgito
entre zero e nove; caso contrrio, retorna falso (.F.).
- 353 -
Guia de Referncia Rpida
ADVPL Avanado
ISLOWER()
Funo utilizada para determinar se o caractere mais esquerda uma letra minscula,
permitindo avaliar se o primeiro caractere de um string uma letra minscula. o contrrio
de ISUPPER(), a qual determina se a cadeia de caracteres comea com uma letra maiscula.
ISLOWER() e ISUPPER() ambas so relacionadas s funes LOWER() e UPPER(), que
convertem caracteres minsculos para maisculos, e vice-versa.
Parmetros:
Retorno:
Lgico Retorna verdadeiro (.T.) caso o primeiro caractere da cadeia seja minsculo ,
caso contrrio, retorna falso (.F.).
ISUPPER()
Funo utilizada para determinar se o caractere mais esquerda uma letra maiscula,
permitindo avaliar se o primeiro caractere de um string uma letra maiscula. o contrrio
de ISLOWER (), a qual determina se a cadeia de caracteres comea com uma letra minscula.
ISLOWER() e ISUPPER() ambas so relacionadas s funes LOWER() e UPPER(), que
convertem caracteres minsculos para maisculos, e vice-versa.
Parmetros:
Retorno:
Lgico Retorna verdadeiro (.T.) caso o primeiro caractere da cadeia seja maisculo ,
caso contrrio, retorna falso (.F.).
LEN()
Sintaxe: LEN(cString)
Parmetros
Exemplo:
cNome := ALLTRIM(SA1->A1_NOME)
MSGINFO(Dados do campo A1_NOME:+CRLF
Tamanho: + CVALTOCHAR(LEN(SA1->A1_NOME))+CRLF
Texto: + CVALTOCHAR(LEN(cNome)))
- 354 -
Guia de Referncia Rpida
ADVPL Avanado
LOWER()
Retorna uma string com todos os caracteres minsculos, tendo como base a string passada
como parmetro.
Sintaxe: LOWER(cString)
Parmetros
Exemplo:
cTexto := ADVPL
MSGINFO(Texto:+LOWER(cTexto))
LTRIM()
Funo para tratamento de caracteres utilizada para formatar cadeias de caracteres que
possuam espaos em branco esquerda. Pode ser o caso de, por exemplo, nmeros
convertidos para cadeias de caracteres atravs da funo STR().
Retorno:
Caracter LTRIM() retorna uma cpia de <cString>, sendo que os espaos em branco
esquerda foram removidos. Caso <cString> seja uma cadeia de caracteres
nula ("") ou toda composta de espaos em branco, LTRIM() retorna uma
cadeia de caracteres nula ("").
- 355 -
Guia de Referncia Rpida
ADVPL Avanado
MATHC()
Funo utilizada para realizar operaes matemticas com strings que contm um valor
numrico. MATHC() realiza algumas operaes matemticas como: Soma, Subtrao, Diviso,
Multiplicao e Exponenciao.
A funo ir retornar uma string contendo o resultado da operao matemtica, com uma
especificao de at 18 casas de preciso no numero.
Sintaxe: MATHC ( < cNum1 > , < cOperacao > , < cNum2 > )
Parmetros:
Retorno:
OEMTOANSI()
Funo que transforma uma string no Formato OEM / MS-DOS Text para uma string ANSI
Text ( formato do Windows ).
Quando utilizamos um programa baseado no MS-DOS para alimentar uma base de dados , os
acentos e caracteres especiais so gravados como texto OEM . Para tornar possvel a correta
visualizao destes dados em uma interface Windows , utilizamos a funo OemToAnsi() para
realizar a converso.
Ao utilizarmos um programa baseado no Windows para alimentar uma base de dados , o texto
capturado no formato ANSI Text . Caso este texto seja utilizado para alimentar uma base de
dados a ser acessada atravs de um programa MS-DOS , devemos converter o dado para OEM
antes de grav-lo , atravs da funo AnsiToOem().
Retorno:
- 356 -
Guia de Referncia Rpida
ADVPL Avanado
PADL() / PADR() / PADC()
PADC(), PADL(), e PADR() so utilizadas para exibir cadeias de caracteres de tamanho varivel
em uma rea de tamanho fixo. Elas podem ser usadas, por exemplo, para assegurar o
alinhamento com comandos ?? consecutivos. Outra utilizao exibir textos em uma tela de
tamanho fixo, para certificar-se de que o texto anterior foi completamente sobrescrito.
Sintaxe: PADL / PADR / PADC ( < cExp > , < nTamanho > , [ cCaracPreench ] )
Parmetros
Retorno:
RAT()
- 357 -
Guia de Referncia Rpida
ADVPL Avanado
REPLICATE()
A funo Replicate() utilizada para gerar uma cadeira de caracteres repetidos a partir de um
caracter base informado, podendo a string gerada conter at 64KB. Caso seja especificado no
parmetro de itens a repetir o nmero zero, ser retornada uma string vazia.
Parmetros:
Retorno:
RETASC()
A funo Replicate() utilizada para converter uma string numrica em uma informao
composta por letras e nmeros, devido a limitao no tamanho de campos ou variveis de
controle, como o caso do campo de sistema X3_ORDEM.
Parmetros:
Retorno:
cOrdem := 100
cX3Ordem:= A0
- 358 -
Guia de Referncia Rpida
ADVPL Avanado
RTRIM()
Funo para tratamento de caracteres utilizada para formatar cadeias de caracteres que
contenham espaos em branco direita. Ela til quando voc deseja eliminar espaos em
branco direita ao se concatenar cadeias de caracteres. o caso tpico com campos de banco
de dados que so armazenados em formato de tamanho fixo. Por exemplo, voc pode usar
RTRIM() para concatenar o primeiro e o ltimo campos de nome para formar uma cadeia de
caracteres de nome.
Parmetros:
Retorno:
Caracter RTRIM() retorna uma cpia de <cString>, sendo que os espaos em branco
direita foram removidos. Caso <cString> seja uma cadeia de caracteres
nula ("") ou totalmente composta por espaos, RTRIM() retorna uma cadeia
de caracteres nula ("").
SPACE()
Parmetros:
Retorno:
- 359 -
Guia de Referncia Rpida
ADVPL Avanado
STRTOKARR()
Funo utilizada para retornar um array, de acordo com os dados passados como parmetro
para a funo. Esta funo recebe uma string <cValue> e um caracter <cToken> que
representa um separador, e para toda ocorrncia deste separador em <cValue> adicionado
um item no array.
Parmetros:
Retorno:
Exemplo:
STRTRAN()
Funo utilizada para realizar a busca da ocorrncia da string, sendo case sensitive.
Sintaxe: STRTRAN ( < cString > , < cSearch > , [ cReplace ] , [ nStart ] , [
nCount ] )
Parmetros:
Retorno:
- 360 -
Guia de Referncia Rpida
ADVPL Avanado
STUFF()
Parmetros:
Retorno:
Exemplo:
SUBSTR()
Retorna parte do contedo de uma string especificada, de acordo com a posio inicial deste
contedo na string e a quantidade de caracteres que dever ser retornada a partir daquele
ponto (inclusive).
Exemplo:
cCampo := A1_NOME
nPosUnder := AT(cCampo)
cPrefixo := SUBSTR(cCampo,1, nPosUnder) // A1_
- 361 -
Guia de Referncia Rpida
ADVPL Avanado
TRANSFORM()
Funo de converso que formata valores caractere, data, lgicos e numricos conforme um
string de mscara especificado, a qual inclui uma combinao de strings de template e funes
de picture. Ela faz o mesmo que a clusula PICTURE do comando @...SAY, sendo normalmente
utilizada para formatar dados a serem enviados tela ou impressora.
Parmetros:
cExp O valor a ser formatado. Esta expresso pode ser qualquer tipo de dados
vlidos, exceto vetor, bloco de cdigo, e NIL.
cSayPicture Uma string de caracteres de mscara e template usado para descrever o
formato da cadeia de caracteres a ser retornada.
Retorno:
UPPER()
Retorna uma string com todos os caracteres maisculos, tendo como base a string passada
como parmetro.
Sintaxe: UPPER(cString)
Parmetros
Exemplo:
cTexto := ADVPL
MSGINFO(Texto:+LOWER(cTexto))
- 362 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de data / hora
CDOW()
Retorno:
cDayWeek Nome do dia da semana como uma cadeia de caracteres. A primeira letra
maiscula e as demais minsculas.
Exemplo:
CMONTH()
Funo de converso de datas que retorna uma cadeia de caracteres com o nome do ms em
ingls.
Retorno:
Exemplo:
- 363 -
Guia de Referncia Rpida
ADVPL Avanado
DATE()
Funo que retorna a data do atual sistema. O formato de sada controlado pelo comando
SET DATE, sendo que o formato padro mm/dd/yy.
Sintaxe: DATE()
Parmetros:
Nenhum .
Retorno:
Exemplo:
DAY()
Funo de converso de datas usada para converter o valor data em um nmero inteiro que
representa o dia do ms. Esta funo pode ser usada em conjunto com CMONTH() e YEAR()
para formatar datas. Pode ser usada tambm em diversos clculos envolvendo datas.
Retorno:
Exemplo:
// Estes exemplos mostram a funo DAY() de diversas maneiras:
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 funo 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
- 364 -
Guia de Referncia Rpida
ADVPL Avanado
DOW()
Funo que converte uma data para o valor numrico que representa o dia da semana. til
quando se deseja fazer clculos semanais. DOW() similar a CDOW(), que retorna o dia da
semana como uma cadeia de caracteres.
Retorno:
Exemplo:
DTOC()
Funo para converso de uma data para uma cadeia de caracteres formatada segundo o
padro corrente, definido pelo comando SET DATE. Se for necessria a utilizao de
formatao especial, use a funo TRANSFORM().
Em expresses de ndices de arquivo, use DTOS() no lugar de DTOC() para converter datas
para cadeia de caracteres.
Retorno:
Exemplo:
- 365 -
Guia de Referncia Rpida
ADVPL Avanado
DTOS()
Funo para converso de uma data que pode ser usada para criar expresses de ndice. O
resultado estruturado visando manter a ordem correta do ndice (ano, ms, dia).
Retorno:
sData Retorna uma cadeia de caracteres com oito byte de tamanho no formato
yyyymmdd. Quando dData nulo ou invalido, DTOS() retorna uma cadeia
de caracteres com oito espaos. O valor retornado no afetado pela
formato da data corrente.
Exemplo:
ELAPTIME()
Funo que retorna uma cadeia de caracteres contendo a diferena de tempo no formato
hh:mm:ss, onde hh a hora ( 1 a 24 ), mm os minutos e ss os segundos.
Retorno:
Exemplo:
- 366 -
Guia de Referncia Rpida
ADVPL Avanado
MONTH()
Funo de converso que extrai da data o valor numrico do ms, semelhante a funo que
retorna o nome do ms a partir do valor de dData.
Retorno:
Exemplo:
SECONDS()
Esta funo retorna o nmero de segundos decorridos desde a meia-noite, segundo a hora do
sistema. Est relacionada funo TIME() que retorna a hora do sistema como uma cadeia de
caracteres no formato hh:mm:ss.
Sintaxe: SECONDS()
Parmetros:
Nenhum .
Retorno:
Exemplo:
- 367 -
Guia de Referncia Rpida
ADVPL Avanado
TIME()
Funo que retorna a hora do sistema como uma cadeia de caracteres, e que est relacionada
com SECONDS(), que retorna o valor inteiro representando o nmero de segundos desde a
meia-noite. SECONDS() geralmente usada no lugar de TIME() para clculos.
Sintaxe: TIME()
Parmetros:
Nenhum .
Retorno:
Exemplo:
YEAR()
YEAR() uma funo de converso de data que extrai o valor numrico do ano. YEAR()
membro de um grupo de funes que retornam valores numricos de uma data. O grupo inclui
DAY() e MONTH() que retornam o dia e o ms como valores numricos.
Retorno:
Exemplo 01:
- 368 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo 02:
// Este exemplo cria uma funo de usurio que usa a funo YEAR() para formatar o valor da
// data:
ABS()
Sintaxe: ABS(nValor)
Parmetros
Exemplo:
nPessoas := 20
nLugares := 18
ALEATORIO()
Gera um nmero aleatrio de acordo com a semente passada. Esta funo retorna um nmero
aleatrio menor ou igual ao primeiro parmetro informado, usando como semente o segundo
parmetro. recomendado que esta semente seja sempre o ltimo nmero aleatrio gerado
por esta funo.
Sintaxe: Aleatorio(nMax,nSeed)
Parmetros
- 369 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo Funo ALEATORIO()
nSeed := 0
For i := 1 to 100
nSeed := Aleatorio(100,nSeed)
? Str(i,3)+ numero aleatorio gerado: +Str(nSeed,3)
Next i
inkey(0)
Return
INT()
Sintaxe: INT(nValor)
Parmetros
Exemplo:
RETURN nQuantidade
NOROUND()
- 370 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo Funo NOROUND()
nBase := 2.985
nValor := NOROUND(nBase,2) 2.98
RANDOMIZE()
Observao :
O limite inferior recebido atravs do parmetro nMinimo "maior ou igual a ", podendo
ser sorteado e fazer parte do retorno; porm o limite superior "menor que", de modo
a nunca ser atingido ou devolvido no resultado. Por exemplo , a chamada da funo
RANDOMIZE(1,2) sempre retornar 1 .
Parmetros
Retorno:
ROUND()
Exemplo:
nBase := 2.985
nValor := ROUND(nBase,2) 2.99
- 371 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de arquivos
ADIR()
Funo que preenche os arrays passados com os dados dos arquivos encontrados, atravs da
mscara informada. Tanto arquivos locais (Remote) como do servidor podem ser informados.
Parmetros:
Retorno:
Exemplo:
LOCAL aFiles[ADIR("*.TXT")]
ADIR("*.TXT", aFiles)
AEVAL(aFiles, { |element| QOUT(element) })
- 372 -
Guia de Referncia Rpida
ADVPL Avanado
CGETFILE()
Parmetros:
Exemplo:
- 373 -
Guia de Referncia Rpida
ADVPL Avanado
Aparncia:
- 374 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo: Seleo de mltiplos arquivos com CGETFILE, DIRECTORY() e LISTBOX()
#include "protheus.ch"
//+--------------------------------------------------------------------+
//| Rotina | SELFILE | Autor | ARNALDO R. JUNIOR | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo para seleo de mltiplos arquivos. |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+
IF !PARBOXFILE()
RETURN
ENDIF
IF !aArquivos[nArq][1]
LOOP
ENDIF
<...processamento...>
NEXT nArq
RETURN
- 375 -
Guia de Referncia Rpida
ADVPL Avanado
Funo auxiliar: PARBOXFILE()
//+--------------------------------------------------------------------+
//| Rotina | PARBOXFILE | Autor | ARNALDO R. JUNIOR Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo de uso da PARAMBOX em conjunto com CGETFILE|
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+
Local aParamBox := {}
Local cTitulo := "Filtros Adicionais"
Local aRet := {}
Local bOk := {|| .T.}
Local aButtons := {}
Local lCentered := .T.
Local nPosx
Local nPosy
Local cLoad := ""
Local lCanSave := .F.
Local lUserSave := .F.
Local nX := 0
Local lRet := .T.
AADD(aParamBox,{2,"Tipo de arquivo"
,2,{"*.dbf","*.dtc"},100,"AllwaysTrue()",.T.})
RETURN lRet
- 376 -
Guia de Referncia Rpida
ADVPL Avanado
Funo auxiliar: MARKFILE()
//+--------------------------------------------------------------------+
//| Rotina | MARKFILE | Autor | ARNALDO R. JUNIOR | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo para marcao de mltiplos arquivos. |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+
Local aChaveArq := {}
Local cTitulo := "Arquivos para importao: "
Local bCondicao := {|| .T.}
// Variveis utilizadas na seleo de categorias
Local oChkQual,lQual,oQual,cVarQ
// Carrega bitmaps
Local oOk := LoadBitmap( GetResources(), "LBOK")
Local oNo := LoadBitmap( GetResources(), "LBNO")
// Variveis utilizadas para lista de filiais
Local nx := 0
Local nAchou := 0
//+--------------------------------------------------------------------+
//| Carrega os arquivos do diretrio no array da ListBox |
//+--------------------------------------------------------------------+
For nX := 1 to Len(aArquivos)
//+--------------------------------------------------------------------+
//| aChaveArq - Contem os arquivos que sero exibidos para seleo |
//+--------------------------------------------------------------------+
AADD(aChaveArq,{.F.,aArquivos[nX][1],cDiretorio})
Next nX
//+--------------------------------------------------------------------+
//| Monta tela para seleo dos arquivos contidos no diretrio |
//+--------------------------------------------------------------------+
DEFINE MSDIALOG oDlg TITLE cTitulo STYLE DS_MODALFRAME From 145,0 To 445,628;
OF oMainWnd PIXEL
oDlg:lEscClose := .F.
@ 05,15 TO 125,300 LABEL UPPER(cDriver) OF oDlg PIXEL
@ 15,20 CHECKBOX oChkQual VAR lQual PROMPT "Inverte Seleo" SIZE 50, 10;
OF oDlg PIXEL;
ON CLICK (AEval(aChaveArq, {|z| z[1] := If(z[1]==.T.,.F.,.T.)}),;
oQual:Refresh(.F.))
@ 30,20 LISTBOX oQual VAR cVarQ Fields HEADER "","Cdigo","Descrio" SIZE;
273,090 ON DBLCLICK (aChaveArq:=Troca(oQual:nAt,aChaveArq),oQual:Refresh());
NoScroll OF oDlg PIXEL
oQual:SetArray(aChaveArq)
oQual:bLine := { || {If(aChaveArq[oQual:nAt,1],oOk,oNo),;
aChaveArq[oQual:nAt,2],aChaveArq[oQual:nAt,3]}}
DEFINE SBUTTON FROM 134,240 TYPE 1 ACTION IIF(MarcaOk(aChaveArq),;
(lSelecao := .T., oDlg:End(),.T.),.F.) ENABLE OF oDlg
DEFINE SBUTTON FROM 134,270 TYPE 2 ACTION (lSelecao := .F., oDlg:End());
ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTERED
RETURN aChaveArq
- 377 -
Guia de Referncia Rpida
ADVPL Avanado
Funo auxiliar: TROCA()
//+--------------------------------------------------------------------+
//| Rotina | TROCA | Autor | ARNALDO R. JUNIOR | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+
//+--------------------------------------------------------------------+
//| Rotina | MARCAOK | Autor | ARNALDO R. JUNIOR | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+
Return lRet
- 378 -
Guia de Referncia Rpida
ADVPL Avanado
CPYS2T()
Funo utilizada para copiar um arquivo do servidor para o cliente (Remote), sendo que os
caracteres * e ? so aceitos normalmente. Caso a compactao seja habilitada
(lCompacta), os dados sero transmitidos de maneira compacta e descompactados antes do
uso.
Sintaxe: CPYS2T ( < cOrigem > , < cDestino > , [ lCompacta ] )
Parmetros:
cOrigem Nome(s) dos arquivos a serem copiados, aceita apenas arquivos no servidor,
WildCards ( * e ? ) so aceitos normalmente.
cDestino Diretrio com o destino dos arquivos no Client ( Remote ).
lCompacta Indica se a cpia deve ser feita compactando o arquivo antes do envio.
Retorno:
Lgico lSucess retorna .T. caso o arquivo seja copiado com sucesso , ou .F. em caso
de falha na cpia.
Exemplo:
// Copia arquivos do servidor para o remote local, compactando antes de transmitir
CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP", .T. )
// Copia arquivos do servidor para o remote local, sem compactar antes de transmitir
CpyS2T( "\BKP\MANUAL.DOC", "C:\TEMP", .F. )
CPYT2S()
Funo utilizada para copiar um arquivo do cliente (Remote) para o servidor, sendo que os
caracteres * e ? so aceitos normalmente. Caso a compactao seja habilitada
(lCompacta), os dados sero transmitidos de maneira compacta e descompactados antes do
uso.
Sintaxe: CpyT2S( cOrigem, cDestino, [ lCompacta ])
Parmetros:
cOrigem Nomes dos arquivos a serem copiados, aceita apenas arquivos locais (
Cliente ), WildCards so aceitos normalmente.
cDestino Diretrio com o destino dos arquivos no remote ( Cliente ).
lCompacta Indica se a cpia deve ser feita compactando o arquivo antes.
Retorno:
Exemplo:
// Copia arquivos do cliente( remote ) para o Servidor compactando antes de transmitir
CpyT2S( "C:\TEMP\MANUAL.DOC", "\BKP", .T. )
// Copia arquivos do cliente( remote ) para o Servidor sem compactar.
CpyT2S( "C:\TEMP\MANUAL.DOC", "\BKP" )
- 379 -
Guia de Referncia Rpida
ADVPL Avanado
CURDIR()
Funo que retorna o diretrio corrente do servidor. O caminho retornado sempre relativo ao
RootPath definido na configurao do Environment no .INI do Protheus Server. Inicialmente , o
diretrio atual da aplicao o constante na chave StartPath , tambm definido na
configurao do Environment no .INI do Protheus Server.
Caso seja passado o parmetro cNovoPath , este path assumido como sendo o Path atual.
Caso o path recebido como parmetro no exista , seja invlido , ou seja um path absoluto
(iniciado com uma letra de drive ou caminho de rede), a funo no ir setar o novo path,
mantendo o atual .
Parmetros:
cNovoPath Caminho relativo , com o novo diretrio que ser ajustado como corrente.
Retorno:
Exemplo:
cOldDir := curdir()
cNewDir := '\webadv\xis'
curdir(cNewDir) // Troca o path
If cNewDir <> '\'+curdir() // E verifica se trocou mesmo
conout('Falha ao Trocar de Path de '+cOldDir + ' para '+cNewDir)
Else
conout('Path de '+cOldDir + ' trocado para '+cNewDir+' com sucesso.')
Endif
- 380 -
Guia de Referncia Rpida
ADVPL Avanado
DIRECTORY()
Para tornar as referncias aos vrios elementos de cada sub-vetor de arquivo mais legveis,
fornecido o arquivo header Directry.ch, que contm os #defines para os subarray subscripts.
Atributo Significado
H Incluir arquivos ocultos
S Incluir arquivos de sistema
D Incluir diretrios
V Procura pelo volume DOS e exclui outros arquivos
Nota: Arquivos normais so sempre includos na pesquisa, a no ser que V seja especificado.
Parmetros:
- 381 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
Exemplo:
#INCLUDE "Directry.ch"
aDirectory := DIRECTORY("*.*","D")
AEVAL( aDirectory, {|aFile| CONOUT(aFile[F_NAME])} )
DIRREMOVE()
Funo que elimina um diretrio especifico. Caso especifiquemos um path sem a unidade de
disco , ele ser considerado no ambiente do Servidor , a partir do RootPath do ambiente ( caso
o path comece com \ ), ou a partir do diretrio corrente (caso o path no seja iniciado com \ ).
Quando especificado um path absoluto ( com unidade de disco preenchida ), a funo ser
executada na estao onde est sendo executado o Protheus Remote. Quando executamos a
funo DirRemove() em JOB ( processo isolado no Server , sem interface ), no possvel
especificar um Path absoluto de disco. Caso isto seja realizado , a funo retornar .F. e
FError() retornar -1 ( Syntax Error ).
Note que necessrio ter direitos suficientes para remover um diretrio, e o diretrio a ser
eliminado precisa estar vazio, sem subdiretrios ou arquivos dentro do mesmo.
Parmetros:
Retorno:
Lgico lSucesso ser .T. caso o diretrio tenha sido eliminado , ou .F. caso no seja
possvel excluir o diretrio. Quando a funo DirRemove retornar .F. ,
possvel obter mais detalhes da ocorrncia recuperando o cdigo do Erro
atravs da funo FError().
Exemplo:
cDelPath := 'c:\TmpFiles'
lRemoveOk := DIRREMOVE(cDelPath)
IF !lRemoveOk
MsgStop('Falha ao remover a pasta '+cDelPath+' ( File Error '+str(Fewrror(),4)+' ) ')
Else
MsgStop('Pasta '+cDelPath+' removida com sucesso.')
Endif
- 382 -
Guia de Referncia Rpida
ADVPL Avanado
DISKSPACE()
Funo de ambiente que determina quantos bytes esto disponveis em uma determinada
unidade de disco. Esta funo obtm a informao sempre relativa estao onde est sendo
executado o Protheus Remote. Atravs do parmetro nDrive , selecionamos qual a unidade de
disco que desejamos obter a informao do espao livre , onde:
Caso a funo DiskSpace seja executada atravs de um Job ( processo isolado no Servidor ,
sem interface Remota ) , ou seja passado um argumento de unidade de disco inexistente ou
indisponvel , a funo DISKSPACE() retornar -1
Parmetros:
Retorno:
Exemplo:
If nBytes_A == -1
MsgStop('Unidade A: no est disponvel ou no h disco no Drive')
ElseIf nBytes_A < 8192
MsgStop('No h espao disponvel no disco. Substitua o disco na Unidade A:')
Else
MsgStop('Unidade A: Verificada . '+str(nBytes_A,12)+' bytes livres.')
Endif
- 383 -
Guia de Referncia Rpida
ADVPL Avanado
EXISTDIR()
Parmetros:
cPath String contendo o diretrio que ser verificado, caso seja feita uma
verificao a partir do server, devemos informar a partir do rootPath do
Protheus, caso contrrio devemos passar o path completo do diretrio.
Retorno:
lRet := ExistDir('\teste')
lRet := ExistDir('c:\APO')
FCLOSE()
Funo de tratamento de arquivos de baixo nvel utilizada para fechar arquivos binrios e
forar que os respectivos buffers do DOS sejam escritos no disco. Caso a operao falhe,
FCLOSE() retorna falso (.F.). FERROR() pode ento ser usado para determinar a razo exata
da falha. Por exemplo, ao tentar-se usar FCLOSE() com um handle (tratamento dado ao
arquivo pelo sistema operacional) invlido retorna falso (.F.) e FERROR() retorna erro 6 do
DOS, invalid handle. Consulte FERROR() para obter uma lista completa dos cdigos de erro.
Nota: Esta funo permite acesso de baixo nvel aos arquivos e dispositivos do DOS. Ela deve
ser utilizada com extremo cuidado e exige que se conhea a fundo o sistema operacional
utilizado.
Parmetros:
Retorno:
Lgico Retorna falso (.F.) se ocorre um erro enquanto os buffers esto sendo
escritos; do contrrio, retorna verdadeiro (.T.).
- 384 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
#include "Fileio.ch"
If !FCLOSE(nHandle)
conout( "Erro ao fechar arquivo, erro numero: ", FERROR() )
EndIf
FCREATE()
Funo de baixo-nvel que permite a manipulao direta dos arquivos textos como binrios. Ao
ser executada FCREATE() cria um arquivo ou elimina o seu contedo, e retorna o handle
(manipulador) do arquivo, para ser usado nas demais funes de manuteno de arquivo.
Aps ser utilizado , o Arquivo deve ser fechado atravs da funo FCLOSE().
Na tabela abaixo , esto descritos os atributos para criao do arquivo , definidos no arquivo
header fileio.ch
Caso desejemos especificar mais de um atributo , basta som-los . Por exemplo , para criar
um arquivo protegido contra gravao e escondido , passamos como atributo FC_READONLY +
FC_HIDDEN. .
Nota: Caso o arquivo j exista , o contedo do mesmo ser ELIMINADO , e seu tamanho ser
truncado para 0 ( ZERO ) bytes.
Parmetros:
cArquivo Nome do arquivo a ser criado , podendo ser especificado um path absoluto
ou relativo , para criar arquivos no ambiente local ( Remote ) ou no Servidor,
respectivamente .
nAtributo Atributos do arquivo a ser criado (Vide Tabela de atributos abaixo). Caso no
especificado, o DEFAULT FC_NORMAL.
Retorno:
Numrico A funo retornar o Handle do arquivo para ser usado nas demais funes
de manuteno de arquivo. O Handle ser maior ou igual a zero. Caso no
seja possvel criar o arquivo , a funo retornar o handle -1 , e ser
possvel obter maiores detalhes da ocorrncia atravs da funo FERROR() .
- 385 -
Guia de Referncia Rpida
ADVPL Avanado
FERASE()
Funo utilizada para apagar um arquivo no disco . O Arquivo pode estar no Servidor ou na
estao local (Remote). O arquivo para ser apagado deve estar fechado, no sendo permitido
a utilizao de caracteres coringa (wildcards).
Parmetros:
cArquivo Nome do arquivo a ser apagado . Pode ser especificado um path absoluto ou
relativo , para apagar arquivos na estao local ( Remote ) ou no Servidor,
respectivamente.
Retorno:
Numrico A funo retornar 0 caso o arquivo seja apagado com sucesso , e -1 caso
no seja possvel apagar o arquivo. Caso a funo retorne -1, possvel
obter maiores detalhes da ocorrncia atravs da funo FERROR().
Exemplo:
#include 'DIRECTRY.CH'
FILE()
Funo que verifica se existe um arquivo ou um padro de arquivos, no diretrio. Podem ser
especificados caminhos absolutos ( arquivos na estao - Remote ) ou relativos ( a partir do
RootPath do Protheus Server) , sendo os caracteres * e ? ( wildcards) aceitos.
Parmetros:
Retorno:
Lgico O retorno ser .T. caso o arquivo especificado exista. Caso o mesmo no
exista no path especificado , a funo retorna .F.
- 386 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
FILENOEXT()
Funo que retorna o nome de um arquivo contido em uma string, ignorando a extenso.
Parmetros
Exemplo:
- 387 -
Guia de Referncia Rpida
ADVPL Avanado
FOPEN()
Funo de tratamento de arquivo de baixo nvel que abre um arquivo binrio existente para
que este possa ser lido e escrito, dependendo do argumento <nModo>. Toda vez que houver
um erro na abertura do arquivo, FERROR() pode ser usado para retornar o cdigo de erro do
Sistema Operacional. Por exemplo, caso o arquivo no exista, FOPEN() retorna -1 e FERROR()
retorna 2 para indicar que o arquivo no foi encontrado. Veja FERROR() para uma lista
completa dos cdigos de erro.
Nota: Esta funo permite acesso de baixo nvel a arquivos e dispositivos. Ela deve ser
utilizada com extremo cuidado e exige que se conhea a fundo o sistema operacional utilizado.
Parmetros:
cArq Nome do arquivo a ser aberto que inclui o path caso haja um.
nModo Modo de acesso DOS solicitado que indica como o arquivo aberto deve ser
acessado. O acesso de uma das categorias relacionadas na tabela A e as
restries de compartilhamento relacionada na Tabela B. O modo padro
zero, somente para leitura, com compartilhamento por Compatibilidade. Ao
definirmos o modo de acesso , devemos somar um elemento da Tabela A
com um elemento da Tabela B.
Retorno:
Numrico FOPEN() retorna o handle de arquivo aberto na faixa de zero a 65.535. Caso
ocorra um erro, FOPEN() retorna -1.
- 388 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
#include 'fileio.ch'
...
nH := fopen('\sigaadv\error.log' , FO_READWRITE + FO_SHARED )
If nH == -1
MsgStop('Erro de abertura : FERROR '+str(ferror(),4))
Else
MsgStop('Arquivo aberto com sucesso.')
...
fclose(nH)
Endif
...
- 389 -
Guia de Referncia Rpida
ADVPL Avanado
FREAD()
Funo que realiza a leitura dos dados a partir um arquivo aberto, atravs de FOPEN(),
FCREATE() e/ou FOPENPORT(), e armazena os dados lidos por referncia no buffer informado.
FREAD() ler at o nmero de bytes informado em nQtdBytes; caso acontea algum erro ou o
arquivo chegue ao final, FREAD() retornar um nmero menor que o especificado em
nQtdBytes. FREAD() l normalmente caracteres de controle (ASC 128, ASC 0, etc.) e l a partir
da posio atual do ponteiro atual do arquivo , que pode ser ajustado ou modificado pelas
funes FSEEK() , FWRITE() ou FREADSTR().
A varivel String a ser utilizada como buffer de leitura deve ser sempre pr-alocado e passado
como referncia. Caso contrrio, os dados no podero ser retornados.
Sintaxe: FREAD ( < nHandle > , < cBuffer > , < nQtdBytes > )
Parmetros:
Retorno:
Numrico Quantidades de bytes lidos. Caso a quantidade seja menor que a solicitada,
isto indica erro de leitura ou final de arquivo, Verifique a funo FERROR()
para maiores detalhes.
FREADSTR ()
Parmetros:
Retorno:
- 390 -
Guia de Referncia Rpida
ADVPL Avanado
FRENAME()
Atravs da funo FRENAME() possvel renomear um arquivo para outro nome, tanto no
servidor como na estao. Ao renomear um arquivo no esquea que esta arquivo dever
estar fechado ( isto , no pode estar em uso por nenhum outro processo ou estao). Caso o
arquivo esteja aberto por outro processo , a operao de renomear o arquivo no possvel. A
funo fRename() no aceita wildcards ( * e/ou ? ).
Parmetros:
Retorno:
- 391 -
Guia de Referncia Rpida
ADVPL Avanado
FSEEK()
Parmetros:
Retorno:
Numrico FSEEK() retorna a nova posio do ponteiro de arquivo com relao ao incio
do arquivo (posio 0) na forma de um valor numrico inteiro. Este valor no
leva em conta a posio original do ponteiro de arquivos antes da execuo
da funo FSEEK().
FT_FEOF()
Funo que retorna verdadeiro (.t.) se o arquivo texto aberto pela funo FT_FUSE() estiver
posicionado no final do arquivo, similar funo EOF() utilizada para arquivos de dados.
Sintaxe: FT_FEOF( )
Parmetros:
Nenhum .
Retorno:
Lgico Retorna true caso o ponteiro do arquivo tenha chegado ao final, false caso
contrrio.
- 392 -
Guia de Referncia Rpida
ADVPL Avanado
FT_FGOTO()
Funo utilizada para mover o ponteiro, que indica a leitura do arquivo texto, para a posio
absoluta especificada pelo argumento <nPos>.
Parmetros:
nPos Indica a posio que ser colocado o ponteiro para leitura dos dados no
arquivo.
Retorno:
Nenhum .
FT_FGOTOP()
A funo tem como objetivo mover o ponteiro, que indica a leitura do arquivo texto, para a
posio absoluta especificada pelo argumento <nPos>.
Parmetros:
nPos Indica a posio que ser colocado o ponteiro para leitura dos dados no
arquivo.
Retorno:
Nenhum .
FT_FLASTREC()
Funo que retorna o nmero total de linhas do arquivo texto aberto pela FT_FUse. As linhas
so delimitadas pela seqncia de caracteres CRLF o LF.
Sintaxe: FT_FLASTREC( )
Parmetros:
Nenhum .
Retorno:
- 393 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
FT_FREADLN()
Funo que retorna uma linha de texto do arquivo aberto pela FT_FUse. As linhas so
delimitadas pela seqncia de caracteres CRLF ( chr(13) + chr(10) ) , ou apenas LF ( chr(10 ),
e o tamanho mximo de cada linha 1022 bytes.
Sintaxe: FT_FREADLN( )
Parmetros:
Nenhum .
Retorno:
Caracter Retorna a linha inteira na qual est posicionado o ponteiro para leitura de
dados.
- 394 -
Guia de Referncia Rpida
ADVPL Avanado
FT_FRECNO()
Sintaxe: FT_FRECNO ( )
Parmetros:
Nenhum .
Retorno:
FT_FSKIP()
Funo que move o ponteiro do arquivo texto aberto pela FT_FUSE() para a prxima linha,
similar ao DBSKIP() usado para arquivos de dados.
Retorno
Nenhum .
FT_FUSE()
Funo que abre ou fecha um arquivo texto para uso das funes FT_F*. As funes FT_F* so
usadas para ler arquivos texto, onde as linhas so delimitadas pela seqncia de caracteres
CRLF ou LF (*) e o tamanho mximo de cada linha 1022 bytes.. O arquivo aberto em uma
rea de trabalho, similar usada pelas tabelas de dados.
cTXTFile Corresponde ao nome do arquivo TXT a ser aberto. Caso o nome no seja
passado, e j exista um arquivo aberto. o mesmo fechado.
Retorno:
- 395 -
Guia de Referncia Rpida
ADVPL Avanado
FWRITE()
Caso acontea alguma falha na gravao , a funo retornar um nmero menor que o
nQtdBytes. Neste caso , a funo FERROR() pode ser utilizada para determinar o erro
especfico ocorrido. A gravao no arquivo realizada a partir da posio atual do ponteiro ,
que pode ser ajustado atravs das funes FSEEK() , FREAD() ou FREADSTR().
Parmetros:
Retorno:
Exemplo:
#INCLUDE "FILEIO.CH"
#DEFINE F_BLOCK 1024 // Define o bloco de Bytes a serem lidos / gravados por vez
- 396 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
// l os dados do Arquivo
nBytesLidos := FREAD(nHOrigem, @cBuffer, nBytesLer )
- 397 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
Enddo
If lCopiaOk
MsgStop('Cpia de Arquivos finalizada com sucesso. '+;
str(nTamArquivo,12,0)+' bytes copiados.','Final')
Else
MsgStop( 'Falha na Cpia. Arquivo de Destino incompleto. '+;
'Do total de '+str(nTamArquivo,12,0)+' bytes, faltaram
'+str(nBytesFalta,12,0)+' bytes.','Final')
Endif
Return
MSCOPYFILE()
Parmetros:
Retorno:
Lgico Se a copia for realizada com sucesso a funo retornar verdadeiro (.T.).
Exemplo:
- 398 -
Guia de Referncia Rpida
ADVPL Avanado
MSCOPYTO()
Funo que realiza a cpia dos registros de uma base de dados para outra, criando o arquivo
destino de acordo com a estrutura da base de dados origem.
Parmetros:
Retorno:
Lgico Se a copia for realizada com sucesso a funo retornar verdadeiro (.T.).
Exemplo:
MSCREATE()
Funo que cria um arquivo (tabela) de acordo com a estrutura informada no parmetro
aStruct. Se o parmetro cDriver no for informado o RDD corrente ser assumido como
padro. Para criao de tabelas no TopConnect necessrio estar conectado ao banco e o
environment do protheus ser TOP.
Parmetros:
- 399 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
Exemplo:
MSERASE()
Parmetros:
Retorno:
Exemplo:
- 400 -
Guia de Referncia Rpida
ADVPL Avanado
MSRENAME()
Parmetros:
Retorno:
Exemplo:
RETFILENAME()
Funo que retorna o nome de um arquivo contido em uma string, ignorando o caminho e a
extenso.
Parmetros:
Retorno:
Exemplo:
- 401 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de arquivos e ndices temporrios
CRIATRAB()
Funo que cria um arquivo de trabalho com uma estrutura especificada, sendo que:
Caso o parmetro lDbf seja definido como .T., a funo criar um arquivo DBF com este
nome e a estrutura definida em aArray.
Caso o parmetro lDbf seja definido como .F., a funo no criar arquivo de nenhum
tipo, apenas fornecer um nome vlido.
Sintaxe: CriaTrab(aArray,lDbf)
Parmetros:
Retorno:
Exemplo:
CriaTrab(Nil, .F.)
- 402 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de bases de dados
ALIAS()
Funo de banco de dados utilizada para determinar o alias da rea de trabalho especificada.
Alias o nome atribuido a uma rea de trabalho quando um arquivo de banco de dados est
em uso. O nome real atribuido o nome do arquivo de banco de dados, ou um nome que foi
explicitamente atribuido atravs da clusula ALIAS do comando USE.
A funo ALIAS() o inverso da funao SELECT() pois retorna o alias atravs do nmero da
rea de trabalho, enquanto SELECT() retorna o nmero da rea de trabalho atravs do alias.
Parmetros:
Retorno:
Exemplo:
cAlias := alias()
IF empty(cAlias)
alert('No h Area em uso')
Else
alert(Area em uso atual : '+cAlias)
Endif
BOF() / EOF()
BOF() uma funo de tratamento de banco de dados utilizada para testar uma
condio de limite de inicial do arquivo quando o ponteiro de registros est se
movendo para trs em um arquivo de banco de dados.
EOF() uma funo de tratamento de banco de dados utilizada para testar uma
condio de limite de final de arquivo quando o ponteiro de registros est se
movendo para frente em um arquivo de banco de dados.
- 403 -
Guia de Referncia Rpida
ADVPL Avanado
Sintaxe: BOF() / EOF()
Parmetros:
Nenhum .
Retorno:
Lgico Retorna verdadeiro (.T.) quando feita uma tentativa de mover o ponteiro de
registros para alm do primeiro registro lgico em um arquivo de banco de
dados, do contrrio, ela retorna falso (.F.).
Lgico Retorna verdadeiro (.T.) quando feita uma tentativa de mover o ponteiro de
registros para alm do ltimo registro lgico em um arquivo de banco de
dados, do contrrio, ela retorna falso (.F.). Caso nao haja nenhum arquivo
de banco de dados aberto na rea de trabalho corrente, EOF() retorna falso
(.F.). Se o arquivo de banco de dados corrente no possui registros, EOF()
retorna verdadeiro (.T.).
COPY()
O comando COPY TO permite a cpia de todos ou parte dos registros da tabela atualmente
selecionada como rea de trabalho atual, para um novo arquivo. Os registros considerados
para a cpia podem ser limitados pela clusula <escopo>, atravs de expresses FOR/WHILE,
e/ou atravs de um filtro.
Se o filtro para registros deletados ( SET DELETED ) estiver desligado (OFF), registros
deletados ( marcados para deleo ) so copiados para o arquivo de destino, mantendo este
status. Caso contrrio, nenhum registro deletado copiado. Da mesma maneira, caso exista
uma condio de filtro na tabela atual ( SET FILTER ), apenas os registros que satisfaam a
condio de fintro sero copiados.
Os registros so lidos na tabela atual, respeitando a ordem de ndice setada. Caso no hajam
ndices abertos, ou a ordem de navegao nos ndices (SET ORDER ) seja 0 (zero), os registros
so lidos em orden natural ( ordem de RECNO ) .
- 404 -
Guia de Referncia Rpida
ADVPL Avanado
A tabela de destino dos dados copiados criada, e aberta em modo exclusivo, antes da
operao de cpia efetiva ser iniciada.
Sintaxe:
- 405 -
Guia de Referncia Rpida
ADVPL Avanado
Parmetros:
Retorno:
Nenhum .
- 406 -
Guia de Referncia Rpida
ADVPL Avanado
COPY STRUCTURE()
O comando COPY STRUCTURE cria uma nova tabela vazia, com a estrutura da tabela ativa na
rea de trabalho atual. Se a tabela a ser criada j exista, a mesma sobrescrita. A tabela de
destino criada utiliza o mesmo RDD da tabela de origem ( tabela ativa na rea de trabalho
atual ).
Sintaxe:
Parmetros:
Retorno:
Nenhum .
DBAPPEND()
Parmetros:
Retorno:
Nenhum .
- 407 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
DBCLEARALLFILTER()
Sintaxe: DBCLEARALLFILTER()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
- 408 -
Guia de Referncia Rpida
ADVPL Avanado
DBCLEARFILTER()
Sintaxe: DBCLEARFILTER()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
DBCLEARINDEX()
Sintaxe: DBCLEARINDEX()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
- 409 -
Guia de Referncia Rpida
ADVPL Avanado
DBCLOSEALL()
Sintaxe: DBCLOSEALL()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
// 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()
A funo DBCLOSEAREA() permite que um alias presente na conexo seja fechado, o que
viabiliza seu reuso em outro operao. Este comando tem efeito apenas no alias ativo na
conexo, sendo necessria sua utilizao em conjunto com o comando DbSelectArea().
Sintaxe: DBCLOSEAREA()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
- 410 -
Guia de Referncia Rpida
ADVPL Avanado
DBCOMMIT()
Sintaxe: DBCOMMIT()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
DBCOMMITALL()
Sintaxe: DBCOMMITALL()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
- 411 -
Guia de Referncia Rpida
ADVPL Avanado
DBCREATE()
A funo DBCREATE() utilizada para criar um novo arquivo de tabela cujo nome
est especificado atravs do primeiro parmetro (cNome) e estrutura atravs do segundo
(aEstrutura). A estrutura especificada atravs de um array com todos os campos,
onde cada campo expresso atravs de um array contendo {Nome, Tipo, Tamanho,
Decimais}.
Parmetros:
cNOME Nome do arquivo a ser criado. Se contm pasta, ela se localiza abaixo do
"RootPath". Se no, criado por padro no caminho formado por
"RootPath"+"StartPath"
aESTRUTURA Lista com as informaes dos campos para ser criada a tabela.
cDRIVER Nome da RDD a ser utilizado para a criao da tabela. Se for omitido ser
criada com a corrente.
Retorno:
Nenhum .
Exemplo:
// Este exemplo mostra como se pode criar novo arquivo atravs da funo DBCREATE:
LOCAL aEstrutura :={{Cod,N,3,0},
{Nome,C,10,0},
{Idade,N,3,0},
{Nasc,D,8,0},
{Pagto,N,7,2}}
// Cria a tabela com o RDD corrente
DBCREATE('\teste\cliente.dbf', aEstrutura)
USE '\teste\cliente.dbf' VIA 'DBFCDX' NEW
1. DBCreate - Data base files can only be created on the server: O nome
do arquivo a ser criado no pode conter 'driver', pois, por conveno, ele
seria criado na mquina onde o Remote est rodando.
2. DBCreate - Invalid empty filename: Nome do arquivo no foi
especificado
3. DBCreate - Field's name cannot be 'DATA': Algumas RDD's no
suportam este nome de campo. uma palavra reservada.
4. DBCreate - The length of Field's name must be at most 10: Nome do
campo no pode ter mais que 10 caracteres.
5. DBCreate - Field's name must be defined: Nome do campo no foi
definido.
6. DBCreate - Field's type is not defined: Tipo do campo no foi definido.
7. DBCreate - invalid Field's type: Tipo do campo diferente de 'C', 'N',
'D', 'M' ou 'L'.
- 412 -
Guia de Referncia Rpida
ADVPL Avanado
total do campo numrico e 'dec' o nmero de decimais, ocorre este erro se:
(len>1) .and. (len< dec + 2): Se o tamanho total maior que 1, ele
deve ser maior que o nmero de decimais mais 2, para comportar o
separador de decimais e ter pelo menos um algarismo na parte inteira.
DBCREATEINDEX()
A funo DBCREATEINDEX() utilizada para criar um novo arquivo de ndice com o nome
especificado atravs do primeiro parmetro, sendo que se o mesmo existir deletado e criado
o novo. Para tanto so executados os passos a seguir:
Com exceo do RDD CTREE, a tabela corrente no precisa estar aberta em modo exclusivo
para a criao de ndice, pois na criao de ndices no Ctree alterada a estrutura da tabela,
precisando para isto a tabela estar aberta em modo exclusivo.
Parmetros:
Retorno:
Nenhum .
- 413 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
// Este exemplo mostra como se pode criar novo arquivo de ndice criando a ordem sobre os
// campos Nome e End e no aceitar duplicao:
DBDELETE()
Para filtrar os registro marcados do alias corrente pode-se utilizar o comando SET DELETED e
para apag-los fisicamente pode-se utilizar a funo __DBPACK().
Sintaxe: DBDELETE ( )
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
DbSelectArea(SA1)
DbSetOrder(1) // A1_FILIAL + A1_COD + A1_LOJA
DbSeek(01 + 900001 + 01) // Busca exata
IF Found()
RecLock(SA1,.F.) // Define que ser realizada uma alterao no registro posicionado
DbDelete() // Efetua a excluso lgica do registro posicionado.
MsUnLock() // Confirma e finaliza a operao
ENDIF
- 414 -
Guia de Referncia Rpida
ADVPL Avanado
DBF()
A funo DBF() verifica qual o Alias da rea de trabalho corrente. O Alias definido
quando a tabela aberta atravs do parmetro correspondente (DBUSEAREA()). Esta funo
o inverso da funo SELECT(), pois nesta retornado o nmero da rea de trabalho do Alias
correspondente.
Sintaxe: DBF()
Parmetros:
Nenhum .
Retorno:
Caracter Retorna o Alias corrente. Caso no exista Alias corrente retorna "" (String
vazia).
Exemplo:
DBFIELDINFO()
Parmetros:
- 415 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
Exemplo:
DBFILTER()
A funo DBFILTER() utilizada para verificar a expresso de filtro ativo na rea de trabalho
corrente.
Sintaxe: DBFILTER()
Parmetros:
Nenhum .
Retorno:
Exemplo:
- 416 -
Guia de Referncia Rpida
ADVPL Avanado
DBGOTO()
Move o cursor da rea de trabalho ativa para o record number (recno) especificado, realizando
um posicionamento direto, sem a necessidade uma busca (seek) prvio.
Sintaxe: DbGoto(nRecno)
Parmetros
Exemplo:
DbSelectArea(SA1)
DbGoto(100) // Posiciona no registro 100
DBGOTOP()
Sintaxe: DbGoTop()
Parmetros
Nenhum .
Exemplo:
- 417 -
Guia de Referncia Rpida
ADVPL Avanado
DBGOBOTTON()
Sintaxe: DbGoBotton()
Parmetros
Nenhum .
Exemplo:
DBINFO()
DBINFO() utilizada para obter informaes sobre a tabela corrente. O tipo de informao
(primeiro argumento) escolhido de acordo com as constantes abaixo:
- 418 -
Guia de Referncia Rpida
ADVPL Avanado
Sintaxe: DBINFO(<nINFOTIPO>)
Parmetros:
Retorno:
Exemplo:
DBNICKINDEXKEY()
Funo que retorna o IndexKey,ou seja, a expresso de ndice da ordem especificada pelo
NickName. Se no existe ndice com o nickname, retorna uma string vazia.
Sintaxe: DBNICKINDEXKEY(<cNick>)
Parmetros:
Retorno:
- 419 -
Guia de Referncia Rpida
ADVPL Avanado
DBORDERINFO()
Sintaxe: DBORDERINFO(<nINFOTIPO>)
Parmetros:
Retorno:
Caracter Retorna a informao da Ordem requisitada pelo usurio (pode ser de tipo
numrico se for nmero de ordens no ndice, tipo caracter se for nome do
arquivo de ndice). Caso no exista ordem corrente ou a posio da ordem
especificada est invlida retorna NIL.
Exemplo:
- 420 -
Guia de Referncia Rpida
ADVPL Avanado
DBORDERNICKNAME()
Sintaxe: DBORDERNICKNAME(<cAPELIDO>)
Parmetros:
Retorno:
Exemplo:
IF !DBORDERNICKNAME("IndNome")
Messagebox("Registro no encontrado","Erro", 0)
ENDIF
DBPACK()
A funo DBPACK() remove fisicamente todos os registros com marca de excludo da tabela.
Sintaxe: __DBPACK()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
USE Clientes NEW
DBGOTO(100)
DBDELETE()
DBGOTO(105)
DBDELETE()
DBGOTO(110)
DBDELETE()
- 421 -
Guia de Referncia Rpida
ADVPL Avanado
DBRECALL()
A funo DBRECALL() utilizada para retirar a marca de registro deletado do registro atual.
Para ser executada o registro atual deve estar bloqueado ou a tabela deve estar aberta em
modo exclusivo. Se o registro atual no estiver deletado, esta funo no faz nada. Ela o
oposto da funo DBDELETE() que marca o registro atual como deletado.
Sintaxe: DBRECALL()
Parmetros:
Nenhum .
Retorno:
Nenhum .
USE Cliente
DBGOTO(100)
DBDELETE()
DELETED() // Retorna: .T.
DBRECALL()
DELETED() // Retorna: .F.
USE Cliente
DBGOTOP()
WHILE !EOF()
DBRECALL()
DBSKIP()
ENDDO
DBRECORDINFO()
- 422 -
Guia de Referncia Rpida
ADVPL Avanado
Sintaxe: DBRECORDINFO ( < nINFOTIPO > , [ nREGISTRO ] ) --> xINFO
Parmetros:
Retorno:
Exemplo:
DBREINDEX()
Sintaxe: DBREINDEX()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
- 423 -
Guia de Referncia Rpida
ADVPL Avanado
DBRLOCK()
A funo DBRLOCK() utilizada quando se tem uma tabela aberta e compartilhada e se deseja
bloquear um registro para que outros usurios no possam alter-lo.
Se a tabela j est aberta em modo exclusivo, a funo no altera seu estado.
O usurio pode escolher o registro a ser bloqueado atravs do parmetro
(recno), mas se este for omitido ser bloqueado o registro corrente como na funo RLOCK().
Esta funo o oposto DBRUNLOCK, que libera registros bloqueados.
Sintaxe: DBRLOCK([nREGISTRO])
Parmetros:
Retorno:
Exemplo:
DBRLOCKLIST()
A funo DBRLOCKLIST() utilizada para verificar quais registros esto locados na tabela
corrente. Para tanto, retornada uma tabela unidimensional com os nmeros dos registros.
Sintaxe: DBRLOCKLIST()
Parmetros:
Nenhum .
Retorno:
- 424 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
DBRUNLOCK()
Sintaxe: DBRUNLOCK([nREGISTRO])
Parmetros:
Retorno:
Nenhum .
Exemplo:
DBSETDRIVER()
A funo DBSETDRIVER() pode ser utilizada apenas para verificar qual o RDD que est definido
como padro quando for omitido seu parmetro. Ela tambm pode ser utilizada para
especificar outro RDD como padro, especificando-o atravs do parmetro.
Sintaxe: DBSETDRIVER([cNOVORDD])
Parmetros:
Retorno:
- 425 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
DBSETDRIVER("CTREECDX") // Retorna: DBFCDX
DBSETDRIVER() // Retorna: CTREECDX
DBSETINDEX()
Para utilizar os arquivos de extenso padro do RDD este dado deve ser
especificado.
Sintaxe: DBSETINDEX(<@cARQINDICE>)
Parmetros:
Retorno:
Nenhum .
Exemplo:
USE Cliente NEW
DBSETINDEX("Ind1")
DBSETINDEX("\teste\Ind2.cdx")
- 426 -
Guia de Referncia Rpida
ADVPL Avanado
DBSETNICKNAME()
Parmetros:
Retorno:
Exemplo:
DBSELECTAREA()
Define a rea de trabalho especificada com sendo a rea ativa. Todas as operaes
subseqentes que fizerem referncia a uma rea de trabalho a utilizao, a menos que a rea
desejada seja informada explicitamente.
- 427 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo 02: DbselectArea(cArea)
DBSETORDER()
Define qual ndice ser utilizada pela rea de trabalho ativa, ou seja, pela rea previamente
selecionada atravs do comando DbSelectArea(). As ordens disponveis no ambiente Protheus
so aquelas definidas no SINDEX /SIX, ou as ordens disponibilizadas por meio de ndices
temporrios.
Sintaxe: DbSetOrder(nOrdem)
Parmetros
Nmero de referncia da ordem que deseja ser definida como ordem ativa
nOrdem
para a rea de trabalho.
Exemplo:
DbSelectArea(SA1)
DbSetOrder(1) // De acordo com o arquivo SIX -> A1_FILIAL+A1_COD+A1_LOJA
DBORDERNICKNAME()
Define qual ndice criado pelo usurio seja utilizado. O usurio pode incluir os seus prprios
ndices e no momento da incluso deve criar o NICKNAME para o mesmo.
Sintaxe: DbOrderNickName(NickName)
Parmetros
Exemplo:
DbSelectArea(SA1)
DbOrderNickName(Tipo) // De acordo com o arquivo SIX -> A1_FILIAL+A1_TIPO
NickName: Tipo
- 428 -
Guia de Referncia Rpida
ADVPL Avanado
DBSEEK() E MSSEEK()
DbSelectArea(SA1)
DbSetOrder(1) // acordo com o arquivo SIX -> A1_FILIAL+A1_COD+A1_LOJA
Else
MsgAlert(Cliente no encontrado, Consulta por cliente)
Endif
DbSelectArea(SA1)
DbSetOrder(1) // acordo com o arquivo SIX -> A1_FILIAL+A1_COD+A1_LOJA
- 429 -
Guia de Referncia Rpida
ADVPL Avanado
MsSeek(): Funo desenvolvida pela rea de Tecnologia da Microsiga, a qual possui as
mesmas funcionalidades bsicas da funo DbSeek(), com a vantagem de no necessitar
acessar novamente a base de dados para localizar uma informao j utilizada pela thread
(conexo) ativa.
DBSKIP()
Move o cursor do registro posicionado para o prximo (ou anterior dependendo do parmetro),
em funo da ordem ativa para a rea de trabalho.
Sintaxe: DbSkip(nRegistros)
Parmetros
DbSelectArea(SA1)
DbSetOrder(2) // A1_FILIAL + A1_NOME
DbGotop() // Posiciona o cursor no incio da rea de trabalho ativa
While !EOF() // Enquanto o cursor da rea de trabalho ativa no indicar fim de arquivo
MsgInfo(Voc est no cliente: + A1_NOME)
DbSkip()
End
DbSelectArea(SA1)
DbSetOrder(2) // A1_FILIAL + A1_NOME
DbGoBotton() // Posiciona o cursor no final da rea de trabalho ativa
While !BOF() // Enquanto o cursor da rea de trabalho ativa no indicar incio de arquivo
MsgInfo(Voc est no cliente: + A1_NOME)
DbSkip(-1)
End
- 430 -
Guia de Referncia Rpida
ADVPL Avanado
DBSETFILTER()
Define um filtro para a rea de trabalho ativa, o qual pode ser descrito na forma de um bloco
de cdigo ou atravs de uma expresso simples.
While !EOF()
MsgInfo(Voc est no cliente:+A1_COD)
DbSkip()
End
While !EOF()
MsgInfo(Voc est no cliente:+A1_COD)
DbSkip()
End
- 431 -
Guia de Referncia Rpida
ADVPL Avanado
DBSTRUCT()
Retorna um array contendo a estrutura da rea de trabalho (alias) ativo. A estrutura ser um
array bidimensional conforme abaixo:
*ndice do array
Sintaxe: DbStruct()
Parmetros
Nenhum .
Exemplo:
cCampos :=
DbSelectArea(SA1)
aStructSA1 := DbStruct()
FOR nX := 1 to Len(aStructSA1)
cCampos += aStructSA1[nX][1] + /
NEXT nX
ALERT(cCampos)
DBUNLOCK()
Sintaxe: DBUNLOCK()
Parmetros:
Nenhum .
Retorno:
Nenhum .
- 432 -
Guia de Referncia Rpida
ADVPL Avanado
DBUNLOCKALL()
Sintaxe: DBUNLOCKALL()
Parmetros:
Nenhum .
Retorno:
Nenhum .
DBUSEAREA()
Define um arquivo de base de dados como uma rea de trabalho disponvel na aplicao.
Parmetros
Exemplo:
- 433 -
Guia de Referncia Rpida
ADVPL Avanado
DELETED()
A funo DELETED() Verifica se o registro est com marca de excludo. Quando o registro
excludo, permanece fisicamente na tabela, mas fica marcado como excludo. Esta funo
verifica este estado. Se nenhuma rea est selecionada, retorna .F.. Quando executada a
funo DBPACK() todos os registros marcados como deletados so apagados fisicamente. A
funo DBRECALL() retira todas as marcas.
Sintaxe: DELETED()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
FCOUNT()
Sintaxe: FCOUNT()
Parmetros:
Nenhum .
Retorno:
Exemplo:
DbSelectArea(SA1)
nFields := FCOUNT()
IF nFields > 0
MSGINFO(A estrutura da tabela contm :+CvalToChar(nFields)+campos.)
ENDIF
- 434 -
Guia de Referncia Rpida
ADVPL Avanado
FOUND()
Sintaxe: FOUND()
Parmetros:
Nenhum .
Retorno:
Exemplo:
Pergunte(cPerg,.T.)
DbSelectArea(SA1)
DbSetOrder(1)
DbSeek(xFilial(SA1)+MVPAR01)
IF Found()
MSGINFO(Cliente encontrado)
ELSE
MSGALERT(Dados no encontrados)
ENDIF
INDEXKEY()
Sintaxe: INDEXKEY()
Parmetros:
Retorno:
Exemplo:
cExpressao := SA1->(IndexKey())
- 435 -
Guia de Referncia Rpida
ADVPL Avanado
INDEXORD()
Sintaxe: INDEXORD()
Parmetros:
Nenhum .
Retorno:
Exemplo:
LUPDATE()
Sintaxe: LUPDATE()
Parmetros:
Nenhum .
Retorno:
Exemplo:
- 436 -
Guia de Referncia Rpida
ADVPL Avanado
MSAPPEND()
A funo MsAppend() adiciona registros de um arquivo para outro, respeitando a estrutura das
tabelas.
Parmetros:
Retorno:
Lgico Se a operao for realizada com sucesso o funo retornar verdadeiro (.T.).
Exemplo:
dbSelectArea(XXX)
MsAppend(,ARQ00001)
MSUNLOCK()
Sintaxe: MsUnLock()
Parmetros
Nenhum .
Exemplo:
DbSelectArea(SA1)
DbSetOrder(1) // A1_FILIAL + A1_COD + A1_LOJA
DbSeek(01 + 900001 + 01) // Busca exata
- 437 -
Guia de Referncia Rpida
ADVPL Avanado
ORDBAGEXT()
Sintaxe: ORDBAGEXT()
Parmetros:
Nenhum .
Retorno:
Exemplo:
cArqTRB := CriaTrab(aStruTRB,.T.)
// RDD UTILIZADA: DBFCDXADS
DbUseArea(.T., DBFCDXADS, cArqTRB, "TRBSA1", .F., .F.)
DbSelectArea("TRBSA1")
cArqInd := CriaTrab(Nil,.F.)
IndRegua("TRBSA1",cArqInd,cChaveInd,,"","Selecionando registros ...")
#IFNDEF TOP
DbSetIndex(cArqInd+OrdBagExt())
// RETORNO: .CDX
#ENDIF
DbSetOrder(1)
ORDKEY()
A ordem passada no primeiro parmetro pode ser especificada atravs da sua posio na lista
de ordens ativas (atravs do ORDLISTADD) ou atravs do nome dado ordem. A funo
verifica automaticamente se o parmetro numrico ou caracter.
Parmetros:
- 438 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
Exemplo:
RECLOCK()
Sintaxe: RecLock(cAlias,lInclui)
Parmetros
Exemplo 01 - Incluso
DbSelectArea(SA1)
RecLock(SA1,.T.)
SA1->A1_FILIAL := xFilial(SA1) // Retorna a filial de acordo com as configuraes do ERP
SA1->A1_COD := 900001
SA1->A1_LOJA := 01
MsUnLock() // Confirma e finaliza a operao
Exemplo 02 - Alterao
DbSelectArea(SA1)
DbSetOrder(1) // A1_FILIAL + A1_COD + A1_LOJA
DbSeek(01 + 900001 + 01) // Busca exata
RLOCK()
DBRLOCK()
- 439 -
Guia de Referncia Rpida
ADVPL Avanado
A sintaxe e a descrio destas funes esto disponveis no Guia de
Referncia Rpido ao final deste material.
UNLOCK()
DBUNLOCK()
DBUNLOCKALL()
RECNO()
Sintaxe: RECNO()
Parmetros:
Nenhum .
Retorno:
Exemplo:
DbSelectArea(SA1)
DbGoto(100) // Posiciona no registro de recno 100.
MSGINFO(Registro posicionado:+cValToChar(RECNO()))
SELECT()
Sintaxe: SELECT([cAlias])
Parmetros:
Retorno:
- 440 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
nArea := Select(SA1)
SET FILTER TO
O comando SET FILTER TO define uma condio de filtro que ser aplicada a rea de trabalho
ativa.
Parmetros:
cCondicao Expresso que ser avaliada pela SET FILTER, definindo os registros que
ficaro disponveis na rea de trabalho ativa.
Esta expresso obrigatoriamente deve ter um retorno lgico.
Retorno:
Nenhum .
Exemplo:
SET FILTER TO
- 441 -
Guia de Referncia Rpida
ADVPL Avanado
SOFTLOCK()
Permite a reserva do registro posicionado na rea de trabalho ativa de forma que outras
operaes, com exceo da atual, no possam atualizar este registro. Difere da funo
RecLock() pois no gera uma obrigao de atualizao, e pode ser sucedido por ele.
Sintaxe: SoftLock(cAlias)
Parmetros
Exemplo:
DbSelectArea(SA1)
DbSetOrder(1)
DbSeek(cChave)
IF Found()
SoftLock() // Reserva o registro localizado
lConfirma := AlteraSA1() // Funo ilustrativa que exibe os dados do registro
// posicionado e pemite a alterao dos mesmos.
IF lConfirma
RecLock(SA1,.F.)
GravaSA1() // Funo ilustrativa que altera os dados conforme a AlertaSA1()
MsUnLock() // Liberado o RecLock() e o SoftLock() do registro.
Endif
Endif
- 442 -
Guia de Referncia Rpida
ADVPL Avanado
USED()
Sintaxe: USED()
Parmetros:
Nenhum .
Retorno:
Lgico Verdadeiro (.T.) caso haja um arquivo de banco de dados em uso; caso
contrrio, retorna falso (.F.).
Exemplo:
USE Customer NEW
CONOUT(USED()) // Resulta: .T.
CLOSE
CONOUT (USED()) // Resulta: .F.
ZAP
O comando ZAP remove fisicamente todos os registro da tabela corrente. necessrio que o
alias em questo seja aberto em modo exclusivo para esta operao ser realizada.
Sintaxe: ZAP
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
cTabela := RetSqlName("SA4")
cAlias := "TMP"
USE (cTabela) ALIAS (cAlias) EXCLUSIVE NEW VIA "TOPCONN"
IfNetErr()
MsgStop("Nao foi possivel abrir "+cTabela+" em modo EXCLUSIVO.")
Else
ZAP
USE
MsgStop("Registros da tabela "+cTabela+" eliminados com sucesso.")
Endif
- 443 -
Guia de Referncia Rpida
ADVPL Avanado
Controle de numerao seqencial
GETSXENUM()
CONFIRMSXE()
Sintaxe: CONFIRMSXE(lVerifica)
Parmetros
ROLLBACKSXE()
Sintaxe: ROLLBACKSXE()
Parmetros
Nenhum .
- 444 -
Guia de Referncia Rpida
ADVPL Avanado
Validao
ALLWAYSFALSE()
A funo AllwaysFalse() foi criada com o objetivo de compatibilidade, sendo que sempre ir
retornar um valor lgico falso, facilitando a especificao desta situao nas parametrizaes
de validaes de modelos de interface pr-definidos no sistema.
Sintaxe: ALLWAYSFALSE()
Parmetros:
Nenhum .
Retorno:
ALLWAYSTRUE()
A funo AllwaysTrue() foi criada com o objetivo de compatibilidade, sendo que sempre ir
retornar um valor lgico verdadeiro, facilitando a especificao desta situao nas
parametrizaes de validaes de modelos de interface pr-definidos no sistema.
Sintaxe: ALLWAYSTRUE()
Parmetros:
Nenhum .
Retorno:
EXISTCHAV()
Retorna .T. ou .F. se o contedo especificado existe no alias especificado. Caso exista ser
exibido um help de sistema com um aviso informando da ocorrncia.
- 445 -
Guia de Referncia Rpida
ADVPL Avanado
EXISTCPO()
Retorna .T. ou .F. se o contedo especificado no existe no alias especificado. Caso no exista
ser exibido um help de sistema com um aviso informando da ocorrncia.
LETTERORNUM()
Sintaxe: LETTERORNUM(cString)
Parmetros:
Retorno:
Lgico Indica que se a string avaliada contm apenas letras e nmero, ou seja,
alfanumrico.
NAOVAZIO()
Sintaxe: NaoVazio()
Parmetros
Nenhum .
NEGATIVO()
Sintaxe: Negativo()
Parmetros
Nenhum .
- 446 -
Guia de Referncia Rpida
ADVPL Avanado
PERTENCE()
Retorna .T. ou .F. se o contedo digitado para o campo est contido na string definida como
parmetro da funo. Normalmente utilizada em campos com a opo de combo, pois caso
contrrio seria utilizada a funo ExistCpo().
Sintaxe: Pertence(cString)
Parmetros
POSITIVO()
Sintaxe: Positivo()
Parmetros
Nenhum .
TEXTO()
Retorna .T. ou .F. se o contedo digitado para o campo contm apenas nmeros ou
alfanumricos.
Sintaxe: Texto()
Parmetros
Nenhum .
VAZIO()
Sintaxe: Vazio()
Parmetros
Nenhum .
- 447 -
Guia de Referncia Rpida
ADVPL Avanado
Manipulao de parmetros do sistema
GETMV()
Sintaxe: GETMV(cParametro)
Parmetros
GETNEWPAR()
Difere do SuperGetMV() pois considera que o parmetro pode no existir na verso atual do
sistema, e por conseqncia no ser exibida a mensagem de help.
cPadrao Contedo padro que ser utilizado caso o parmetro no exista no SX6.
Define para qual filial ser efetuada a consulta do parmetro. Padro filial
cFilial
corrente da conexo.
- 448 -
Guia de Referncia Rpida
ADVPL Avanado
PUTMV()
SUPERGETMV()
cPadrao Contedo padro que ser utilizado caso o parmetro no exista no SX6.
Define para qual filial ser efetuada a consulta do parmetro. Padro filial
cFilial
corrente da conexo.
- 449 -
Guia de Referncia Rpida
ADVPL Avanado
Controle de impresso
AVALIMP()
Sintaxe: AVALIMP(nLimite)
Parmetros:
Retorno:
Exemplo:
/*/
+-----------------------------------------------------------------------------
| Funo | XAVALIMP | Autor | ARNALDO RAYMUNDO JR. | Data | 01.01.2007 |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo AXCADASTRO() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/
wnrel:= SetPrint(cString,wnrel,cPerg,cTitulo,cDesc1,cDesc2,cDesc3,.T.)
SetDefault(aReturn,cString)
- 450 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
If nLastKey == 27
Return
Endif
RptStatus({|| RunReport(cString)},cTitulo)
Return
/*/
+-----------------------------------------------------------------------------
| Funo | RUNREPORT | Autor | -------------------- | Data | 01.01.2007 |
+-----------------------------------------------------------------------------
| Descrio | Funo interna de processamento utilizada pela XAVALIMP() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/
//+-------------------------------------------------------------------------+
//| Chamada da funo AVALIMP() |
//+-------------------------------------------------------------------------+
@ 00,00 PSAY AvalImp(220)
dbSelectArea(cString)
dbSeek(xFilial()+mv_par01+mv_par03,.T.)
...
Return
CABEC()
Parmetros:
- 451 -
Guia de Referncia Rpida
ADVPL Avanado
Parmetros (continuao):
Retorno:
Nenhum .
Exemplo:
#INCLUDE "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | MPTR001 | Autor | ARNALDO RAYMUNDO JR. | Data | 01.01.2007 |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao das funes de impresso CABEC() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/
Local cDesc1 := "Este programa tem como objetivo imprimir relatorio "
Local cDesc2 := "de acordo com os parametros informados pelo usuario."
Local cDesc3 := "Listagem de clientes"
Local cTitulo := "Listagem de clientes"
Local lImprime := .T.
// Parametros da SetPrint()
Local cString := "SA1"
Local cPerg := ""
Local lDic := .T. // Habilita a visalizacao do dicionario
Local aOrd := RetSixOrd(cString)
Local lCompres := .T. // .F. - Normal / .T. - Comprimido
Local lFilter := .T. // Habilita o filtro para o usuario
Local cNomeProg := "MPTR002"
Local cTamanho := "M"
Local nTipo := 18
Local nLimite := 132
Private nLastKey := 0
Private m_pag := 01
Private wnrel := "MPTR002"
dbSelectArea("SA1")
dbSetOrder(1)
- 452 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
//
// Monta a interface padrao com o usuario...
//
wnrel :=
SetPrint(cString,cNomeProg,cPerg,@cTitulo,cDesc1,cDesc2,cDesc3,lDic,aOrd,lCompre
s,cTamanho,,lFilter)
If nLastKey == 27
Return
Endif
If nLastKey == 27
Return
Endif
nTipo := IIF(aReturn[4]==1,15,18)
//
// Processamento. RPTSTATUS monta janela com a regua de processamento.
//
RptStatus({||
RunReport(cTitulo,cString,cNomeProg,cTamanho,nTipo,nLimite)},cTitulo)
Return
/*/
+-----------------------------------------------------------------------------
| Funo | RUNREPORT | Autor | -------------------- | Data | 01.01.2007 |
+-----------------------------------------------------------------------------
| Descrio | Funo interna de processamento utilizada pela MPTR001() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/
Local nLin := 80
Local cCabec1 := ""
Local cCabec2 := ""
Local cArqInd
dbSelectArea("TRBSA1")
dbGoTop()
SetRegua(RecCount())
- 453 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
While !EOF()
IMPCADAST()
A funo IMPCADAST() cria uma interface simples que permite a impresso dos cadastros do
sistema com parametrizao DE/ATE.
Parmetros:
Retorno:
Nenhum .
MS_FLUSH()
Sintaxe: MS_FLUSH()
Parmetros:
Nenhum .
- 454 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
Nenhum .
Exemplo:
/*/
+-----------------------------------------------------------------------------
| Funo | RUNREPORT | Autor | -------------------- | Data | 01.01.2007 |
+-----------------------------------------------------------------------------
| Descrio | Funo interna de processamento utilizada pela MPTR001() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
| Observao| Continuao do exemplo da funo CABEC() |
|+----------------------------------------------------------------------------
/*/
Local nLin := 80
Local cCabec1 := ""
Local cCabec2 := ""
Local cArqInd
dbSelectArea("TRBSA1")
dbGoTop()
SetRegua(RecCount())
While !EOF()
- 455 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
If aReturn[5]==1
dbCommitAll()
SET PRINTER TO
OurSpool(wnrel)
Endif
MS_FLUSH()
RETURN
OURSPOOL()
Sintaxe: OURSPOOL(cArquivo)
Parmetros:
Retorno:
. .
Exemplo:
- 456 -
Guia de Referncia Rpida
ADVPL Avanado
RODA()
A funo RODA() imprime o rodap da pgina do relatrio, o que pode ser feito a cada pgina,
ou somente ao final da impresso.
Parmetros:
Retorno:
Nenhum .
Exemplo:
/*/
+-----------------------------------------------------------------------------
| Funo | TESTIMPR | Autor | MICROSIGA | Data | 01.01.2007 |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo RODA() em conjunto com a CABEC.|
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/
#include "protheus.ch"
SetDefault(aReturn,cString)
RptStatus({|lEnd| TestRel(@lEnd,wnRel,cString,Tamanho,NomeProg)},titulo)
Return
- 457 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
/*/
+-----------------------------------------------------------------------------
| Funo | TESTREL | Autor | MICROSIGA | Data | 01.01.2007 |
+-----------------------------------------------------------------------------
| Descrio | Funo interna de impresso da TestImpr(). |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/
User Function TestRel(lEnd,WnRel,cString,Tamanho,NomeProg)
LOCAL cabec1,cabec2
LOCAL cRodaTxt := oemtoansi("Rodap")
Local nCntImpr
Local nTipo
nCntImpr := 0
li := 80
m_pag := 1
nTipo := 15
titulo:= oemtoansi("Lista de Clientes")
cabec1:= oemtoansi("COD LOJA NOME"+Space(27)+ "NOME FANTASIA")
cabec2:=""
dbSelectArea("SA1")
dbGoTop()
SetRegua(LastRec())
While !Eof()
IncRegua()
If Li > 60
cabec(titulo,cabec1,cabec2,nomeprog,tamanho,15)
@ Li,0 PSAY __PrtThinLine()
Endif
nCntImpr++
Li++
@ Li,01 PSAY A1_COD
@ Li,05 PSAY A1_LOJA
@ Li,10 PSAY A1_NOME
@ Li,51 PSAY A1_NREDUZ
If Li > 60
Li:=66
Endif
dbSkip()
EndDO
If li != 80
Roda(nCntImpr,cRodaTxt,Tamanho)
EndIf
- 458 -
Guia de Referncia Rpida
ADVPL Avanado
SETDEFAULT()
Sintaxe: SetDefault ( < aReturn > , < cAlias > , [ uParm3 ] , [ uParm4 ] ,
[cSize] , [ nFormat ] )
Parmetros:
Retorno:
Nenhum .
Estrutura aReturn:
- 459 -
Guia de Referncia Rpida
ADVPL Avanado
SETPRC()
Parmetros:
Retorno:
Nenhum .
Exemplo:
SETPRINT()
A funo SetPrint() cria uma interface padro onde as opes de impresso de um relatrio
podem ser configuradas. Basicamente duas variveis m_pag e aReturn precisam ser
declaradas como privadas (private) antes de executar a SetPrint(), sendo que:
Aps confirmada, os dados so armazenados no vetor aReturn que ser passado como
parmetro para funo SetDefault().
Sintaxe: SetPrint ( < cAlias > , < cProgram > , [ cPergunte ] , [ cTitle ] , [
cDesc1 ] , [ cDesc2 ] , [ cDesc3 ] , [ lDic ] , [ aOrd ] , [ lCompres ] , [
cSize ] , [ uParm12 ] , [ lFilter ] , [ lCrystal ] , [ cNameDrv ] , [
uParm16 ] , [ lServer ] , [ cPortPrint ] ) --> cReturn
Parmetros:
- 460 -
Guia de Referncia Rpida
ADVPL Avanado
Parmetros (continuao):
Retorno:
Estrutura aReturn:
- 461 -
Guia de Referncia Rpida
ADVPL Avanado
Controle de processamentos
ABREEXCL()
A funo ABREEXCL() fecha o arquivo cujo alias est expresso em <cAlias> e o reabre em
modo exclusivo para proceder operaes em que isto necessrio, como por exemplo, PACK.
Se outra estao estiver usando o arquivo, o retorno ser .F..
Sintaxe: ABREEXCL(cAlias)
Parmetros:
Retorno:
CLOSEOPEN()
A funo CLOSEOPEN() utilizada para fechar e re-abrir uma lista de arquivos especificada.
Parmetros:
aClose Array contendo os Aliases dos arquivos que devero ser fechados.
aOpen Array contendo os Aliases dos arquivos que devero ser abertos.
Retorno:
CLOSESFILE()
A funo CLOSESFILE() fecha todos os arquivos em uso pela conexo, com exceo dos SXs
(inclusive SIX), SM2 e SM4.
Sintaxe: CLOSESFILE(cAlias)
Parmetros:
cAlias String contendo os nomes dos demais Aliases que no devero ser fechados,
separando os itens com /.
Retorno:
- 462 -
Guia de Referncia Rpida
ADVPL Avanado
CHKFILE()
A funo CHKFILE() retorna verdadeiro (.T.) se o arquivo j estiver aberto ou se o Alias no for
informado. Sempre que desejar mudar o modo de acesso do arquivo (de compartilhado para
exclusivo ou vice-versa), feche-o antes de cham-la.
Sintaxe: ChkFile(cAlias,lExcl,cNewAlias)
Parmetros:
Retorno:
Exemplo:
dbSelectArea(SA1)
dbCloseArea()
lOk := .T.
While .T.
IF !ChkFile(SA1,.T.)
nResp := Alert(Outro usurio usando! Tenta de novo?,{Sim,Nao})
If nResp == 2
lOk := .F.
Exit
Endif
Endif
EndDo
If lOk
// Faz o processamento com o arquivo...
Endif
// Finaliza
If Select(SA1)
dbCloseArea()
Endif
ChkFile(SA1,.F.)
Return
- 463 -
Guia de Referncia Rpida
ADVPL Avanado
CONOUT()
Sintaxe: CONOUT(cMensagem)
Parmetros:
Retorno:
Nenhum .
CRIAVAR()
A funo CRIAVAR() cria uma varivel, retornando o valor do campo, de acordo com o
dicionrio de dados, inclusive avaliando o inicializador padro, permitindo um retorno de
acordo com o tipo de dado definido no dicionrio.
Sintaxe: CriaVar(cCampo,lIniPad,cLado)
Parmetros:
Retorno:
Exemplo:
- 464 -
Guia de Referncia Rpida
ADVPL Avanado
DISARMTRANSACTION()
Ao utilizar esta funo, todas as alteraes realizadas no intervalo delimitado pela transao
so desfeitas, restaurando a situao da base de dados ao ponto imediatamente anterior ao
incio do processamento.
Sintaxe: DISARMTRANSACTION()
Parmetros:
Nenhum .
Retorno:
Nenhum .
Exemplo:
lMsErroAuto := .F.
MSExecAuto({|x,y| MATA240(x,y)}, aCampos, 3)
If lMsErroAuto
aAutoErro := GETAUTOGRLOG()
DisarmTransaction()
MostraErro()
EndIf
- 465 -
Guia de Referncia Rpida
ADVPL Avanado
EXECBLOCK()
A funo EXECBLOCK() executa uma funo de usurio que esteja compilada no repositrio.
Esta funo normalmente utilizada pelas rotinas padres da aplicao Protheus para executar
pontos de entrada durante seu processamento.
EXISTBLOCK()
Sintaxe: EXISTBLOCK(cFuno)
Parmetros:
Retorno:
Exemplo:
IF EXISTBLOCK(MT100GRV)
EXECBLOCK(MT100GRV,.F.,.F.,aParam)
ENDIF
- 466 -
Guia de Referncia Rpida
ADVPL Avanado
Sintaxe: EXECBLOCK(cFuno, lReserv1, lReserv2, xParam)
Parmetros:
Retorno:
Exemplo:
IF EXISTBLOCK(MT100GRV)
lGravou := EXECBLOCK(MT100GRV,.F.,.F.,aParam)
ENDIF
RETURN .T.
ERRORBLOCK()
<objError> um error object que contm informaoes sobre o erro.Dentro do bloco de cdigo,
podem ser enviadas mensagens ao error object para obter informaoes sobre o erro. Se o
bloco de tratamento de erros retornar verdadeiro (.T.), a operaao que falhou repetida, e se
retornar falso (.F.), o processamento recomea.
- 467 -
Guia de Referncia Rpida
ADVPL Avanado
uma importante consequncia do fato de os blocos de tratamento de erros serem especificados
como blocos de cdigo, que eles podem ser passados pararotinas e funoes definidas por
usurio e depois retornadas como valores.
Retorno:
Code-block Retorna o bloco de cdigo corrente que tratar o erro. Caso nao tenha sido
enviado nenhum bloco de tratamento de erro desde que o programa foi
invocado, ERRORBLOCK() retorna o bloco de tratamento de erro padrao.
Exemplo:
Function CA010Form()
LOCAL xResult
LOCAL cForm:= Upper(&(ReadVar()))
LOCAL bBlock:= ErrorBlock( { |e| ChecErro(e) } )
LOCAL cOutMod
Local lOptimize := GetNewPar("MV_OPTNFE",.F.) .Or. GetNewPar("MV_OPTNFS",.F.)
PRIVATE lRet:=.T.
While ! Empty(cOutMod)
If Left(cOutMod, At(",", cOutMod) - 1) $ Upper(cForm) // no modulo
Help( " ",1,"ERR_FORM,,"Variavel nao disponivel para este modulo"
Return .F.
Endif
cOutMod := Subs(cOutMod, At(",", cOutMod) + 1)
EndDo
If ("LERSTR"$cForm .or. "LERVAL"$cForm .or. "LERDATA"$cForm) .And. M->I5_CODIGO >
"499"
Help( " ",1,"CA010TXT")
ErrorBlock(bBlock)
Return .F.
Endif
BEGIN SEQUENCE
If !"EXECBLOCK"$cForm .and. !"LERSTR"$cForm .And.; // nao executa execblock
!"LERVAL"$cForm .And.; // nem funcao de leitura
!"LERDATA"$cForm .And.; // de texto no cadastramento
IIf(!lOptimize,.T.,!"CTBANFS"$cForm .And. !"CTBANFE"$cForm)
xResult := &cForm
Endif
END SEQUENCE
ErrorBlock(bBlock)
Return lRet
- 468 -
Guia de Referncia Rpida
ADVPL Avanado
FINAL()
A funo FINAL() executa as operaes bsicas que garantem a integridade dos dados ao
finalizar o sistema desmontando as transaes (se houver), desbloqueando os semforos e
fechando as tabelas abertas, finalizando-o em seguinda.
Parmetros:
Retorno:
Nenhum .
Exemplo:
Return
FINDFUNCTION()
Sintaxe: FINDFUNCTION(cFuno)
Parmetros:
Retorno:
- 469 -
Guia de Referncia Rpida
ADVPL Avanado
FUNDESC()
Sintaxe: FUNDESC()
Parmetros:
Nenhum .
Retorno:
FUNNAME()
Sintaxe: FUNNAME()
Parmetros:
Nenhum .
Retorno:
GETAREA()
Sintaxe: GETAREA()
Retorno: Array contendo {Alias(),IndexOrd(),Recno()}
Parmetros
Nenhum .
- 470 -
Guia de Referncia Rpida
ADVPL Avanado
GETCOUNTRYLIST()
Sintaxe: GetCountryList()
Parmetros:
Nenhum .
Retorno:
Array
Array de duas dimenses, sendo uma linha para cada pas localizado,
contendo em cada posio a sigla dos pases, o nome do pas e a
identificao do pas com dois dgitos.
Exemplo:
ISINCALLSTACK()
A funo ISINCALLSTACK() verifica se uma determinada funo est existe dentro da pilha de
chamadas do processamento corrente.
Parmetros:
Retorno:
- 471 -
Guia de Referncia Rpida
ADVPL Avanado
REGTOMEMORY()
Inicializa as variveis de memria identificadas pelo uso do alias M-> de acordo com a
estrutura e/ou informaes contidas no arquivo definido como referncia.
Parmetros:
cAlias Alias do arquivo que ser utilizado como referncia para inicializao das
variveis de memria.
lInclui Identifica se as variveis devero ser inicializadas com contedos padres,
ou contendo as informaes do registro posicionado do alias especificado.
lDic Define se ir utilizar o dicionrio de dados como base para inicializao das
variveis ou se ir utilizar o comando CRIAVAR().
lInitPad Define se ir executar o inicializador padro do campo, contido no dicionrio
de dados. Parmetro utilizado pela CRIAVAR().
Retorno:
Nenhum .
- 472 -
Guia de Referncia Rpida
ADVPL Avanado
RESTAREA()
Funo utilizada para devolver a situao do ambiente salva atravs do comando GETAREA().
Deve-se observar que a ltima rea restaurada a rea que ficar ativa para a aplicao.
Sintaxe: RESTAREA(aArea)
Parmetros
Exemplo:
LOCAL cVar
LOCAL aArea := GetArea()
LOCAL lRet := .T.
cVar := &(ReadVar())
dbSelectArea("SX5")
IF !dbSeek(xFilial()+"Z1"+cVar)
ENDIF
RestArea(aArea)
Return( lRet )
USEREXCEPTION()
Sintaxe: USEREXCEPTION(cMensagem)
Parmetros:
Retorno:
- 473 -
Guia de Referncia Rpida
ADVPL Avanado
Nenhum .
- 474 -
Guia de Referncia Rpida
ADVPL Avanado
Utilizao de recursos do ambiente ERP
AJUSTASX1()
Parmetros:
Retorno:
Nenhum .
- 475 -
Guia de Referncia Rpida
ADVPL Avanado
Estrutura Item do array aPerg (continuao):
- 476 -
Guia de Referncia Rpida
ADVPL Avanado
ALLUSERS()
Sintaxe: ALLUSERS()
Parmetros:
Nenhum .
Retorno:
- 477 -
Guia de Referncia Rpida
ADVPL Avanado
Array de informaes dos usurios: Configuraes de impresso
- 478 -
Guia de Referncia Rpida
ADVPL Avanado
ALLGROUPS()
Sintaxe: ALLGROUPS()
Parmetros:
Nenhum .
Retorno:
- 479 -
Guia de Referncia Rpida
ADVPL Avanado
CGC()
A funo CGC() valida o CGC digitado, utilizando o algoritmo nacional para verificao do dgito
de controle.
Sintaxe: CGC(cCGC)
Parmetros:
Retorno:
CONPAD1()
A funo CONPAD1() exibe uma tela de consulta padro baseada no Dicionrio de Dados
(SXB).
Parmetros:
Retorno:
Nenhum .
- 480 -
Guia de Referncia Rpida
ADVPL Avanado
DATAVALIDA()
A funo DATAVALIDA() retorna a primeira data vlida a partir de uma data especificada como
referncia, considerando inclusive a data informada para anlise.
Sintaxe: DATAVALIDA(dData)
Parmetros:
dData Data a partir da qual ser avaliada a prxima data vlida, considerando-a
inclusive como uma possibilidade.
Retorno:
EXISTINI()
Sintaxe: EXISTINI(cCampo)
Parmetros:
Retorno:
Exemplo:
Return
- 481 -
Guia de Referncia Rpida
ADVPL Avanado
EXTENSO()
A funo EXTENSO() retorna uma string referente a descrio por extenso de um valor
numrico, sendo comumente utilizada para impresso de cheques, valor de duplicatas, etc.
Parmetros:
Retorno:
FORMULA()
Interpreta uma frmula cadastrada. Esta funo interpreta uma frmula, previa-mente
cadastrada no Arquivo SM4 atravs do Mdulo Configurador, e retorna o resultado com tipo de
dado de acordo com a prpria frmula.
Sintaxe: Formula(cFormula)
Parmetros:
Retorno:
GETADVFVAL()
Sintaxe: GetAdvFVal(cAlias,uCpo,uChave,nOrder,uDef)
Parmetros:
- 482 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
HELP()
Esta funo exibe a ajuda especificada para o campo e permite sua edio. Se for
um help novo, escreve-se o texto em tempo de execuo.
Parmetros:
Retorno:
Nenhum .
Por esta razo, em rotinas que podem ser chamadas atravs da funo
MSEXECAUTO() deve-se sempre utilizar avisos utilizando esta funo, para
que este tipo de processamento no seja travado indevidamente.
Exemplo:
IF lAuto // Se for rotina automtica
Help("ESPECIFICO",1,"HELP","PROCESSAMENTO","Parmetros do JOB Invlidos",1,0)
ELSE
MsgAlert(Parmetros do JOB Invlidos, PROCESSAMENTO)
ENDIF
- 483 -
Guia de Referncia Rpida
ADVPL Avanado
MESEXTENSO()
Sintaxe: MESEXTENSO(nMes)
Parmetros:
Este parmetro pode ser definido tambm como caracter ou como data.
Retorno:
OBRIGATORIO()
Parmetros:
Retorno:
- 484 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
#INCLUDE "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Programa | ATFA010A | Autor | ARNALDO R. JUNIOR | Data | |
+-----------------------------------------------------------------------------
| Desc. | Cadastro de dados complementares do bem Ativo Fixo |
+----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
dbSelectArea("SN1")
dbSetOrder(1)
dbSelectArea(cString)
mBrowse( 6,1,22,75,cString)
Return
/*/
+-----------------------------------------------------------------------------
| Programa | A010AATU | Autor | ARNALDO R. JUNIOR | Data | |
+-----------------------------------------------------------------------------
| Desc. | Atualizao de dados do bem Ativo Fixo |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
Local aCpoEnch := {}
Local aAlter := {}
Local aButtons := {}
Local cAliasE := cAlias
Local aAlterEnch := {}
Local aPos := {015,000,400,600
Local nModelo :=
Local lF3 := .F.
Local lMemoria := .T.
Local lColumn := .F.
Local caTela := ""
Local lNoFolder := .F.
Local lProperty := .F.
- 485 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0] // Variveis que sero atualizadas pela Enchoice()
Private aGETS[0] // e utilizadas pela funo OBRIGATORIO()
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
//+--------------------------------------------------------------------------+
//|Campos da enchoice |
//+--------------------------------------------------------------------------+
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AAdd(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End
//+--------------------------------------------------------------------------+
//|Campos alterveis da enchoice |
//+--------------------------------------------------------------------------+
AADD(aAlterEnch,"N1_TIPOADT") // Controle de Adiantamentos
AADD(aAlterEnch,"N1_DESCRIC") // Descrio
AADD(aAlterEnch,"N1_CHAPA") // Numero da plaqueta
AADD(aAlterEnch,"N1_FORNEC") // Fornecedor
AADD(aAlterEnch,"N1_LOJA") // Loja do Fornecedor
AADD(aAlterEnch,"N1_NSERIE") // Serie da Nota
AADD(aAlterEnch,"N1_NFISCAL") // Numero da Nota
AADD(aAlterEnch,"N1_NFITEM") // Item da Nota
AADD(aAlterEnch,"N1_UM") // Unidade de Medida
AADD(aAlterEnch,"N1_PRODUTO") // Cdigo do Produto
AADD(aAlterEnch,"N1_PEDIDO") // Codigo do Pedido de Compras
AADD(aAlterEnch,"N1_ITEMPED") // Item do Pedido de Compras
AADD(aAlterEnch,"N1_PRCIMP") // Codigo do Processo de Importacao
AADD(aAlterEnch,"N1_CODPAIS") // Codigo do Pais
AADD(aAlterEnch,"N1_ORIGCPR") // Origem de Compras
AADD(aAlterEnch,"N1_CODSP") // Codigo da SP Interna
AADD(aAlterEnch,"N1_CHASSIS") // Numero de serie
//+--------------------------------------------------------------------------+
//|Montagem do DIALOG |
//+--------------------------------------------------------------------------+
DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL
RegToMemory("SN1", .F.)
RETURN
- 486 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
/*/
+-----------------------------------------------------------------------------
| Programa | A010AGRV | Autor | ARNALDO R. JUNIOR | Data | |
+-----------------------------------------------------------------------------
| Desc. | Validao da enchoice e gravao dos dados do bem |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
Static Function A010AGRV(aCpos,aAlter,nOpc)
Return .T.
OPENFILE()
Sintaxe: OPENFILE(cEmp)
Parmetros:
Retorno:
Nenhum .
- 487 -
Guia de Referncia Rpida
ADVPL Avanado
PERGUNTE()
Parmetros:
Retorno:
PESQPICT()
Sintaxe: PesqPict(cAlias,cCampo,nTam)
Parmetros:
Retorno:
- 488 -
Guia de Referncia Rpida
ADVPL Avanado
PESQPICTQT()
Sintaxe: PesqPictQt(cCampo,nEdio)
Parmetros:
Retorno:
String Picture ideal para o espao definido por nEdio, sem a separao dos
milhares por vrgula.
POSICIONE()
Parmetros:
Retorno:
- 489 -
Guia de Referncia Rpida
ADVPL Avanado
PUTSX1()
Parmetros:
- 490 -
Guia de Referncia Rpida
ADVPL Avanado
RETINDEX()
Sintaxe: RETINDEX(cAlias)
Parmetros:
Retorno:
SIXDESCRICAO()
Sintaxe: SIXDESCRICAO()
Parmetros:
Nenhum .
Retorno:
Exemplo:
dbSelectArea(SIX)
dbSetOrder(1)
If dbSeek(cChave+cOrdem)
cSixDescr := SixDescricao()
EndIf
Return
- 491 -
Guia de Referncia Rpida
ADVPL Avanado
TABELA()
A funo TABELA() retorna o contedo de uma tabela cadastrada no Arquivo de Tabelas (SX5)
de acordo com a chave especificada. Caso a tabela ou a chave especificada no existir ser
exibido um HELP() padro do sistema.
Sintaxe: Tabela(cTab,cChav,lPrint)
Parmetros:
Retorno:
TAMSX3()
Sintaxe: TAMSX3(cCampo)
Parmetros:
Retorno:
- 492 -
Guia de Referncia Rpida
ADVPL Avanado
TM()
A funo TM() retorna a picture de impresso para valores numricos dependendo do espao
disponvel.
Parmetros:
Retorno:
- 493 -
Guia de Referncia Rpida
ADVPL Avanado
X1DEF01()
Sintaxe: X1DEF01()
Parmetros:
Nenhum .
Retorno:
Exemplo:
dbSelectArea(SX1)
dbSetOrder(1)
Return
- 494 -
Guia de Referncia Rpida
ADVPL Avanado
X1PERGUNT()
Sintaxe: X1PERGUNT()
Parmetros:
Nenhum .
Retorno:
Exemplo:
X2NOME()
Sintaxe: X2NOME()
Parmetros:
Nenhum .
Retorno:
Exemplo:
- 495 -
Guia de Referncia Rpida
ADVPL Avanado
X3CBOX()
Sintaxe: X3CBOX()
Parmetros:
Nenhum .
Retorno:
Exemplo:
Local cTitulo
Local cDescri
Local cCombo
dbSelectArea(SX3)
dbSetOrder(2)
If dbSeek( cCampo )
cTitulo := X3Titulo()
cDescri := X3Descri()
cCombo := X3Cbox()
EndIf
Return
X3DESCRIC()
Sintaxe: X3DESCRIC()
Parmetros:
Nenhum .
Retorno:
- 496 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
Local cTitulo
Local cDescri
Local cCombo
dbSelectArea(SX3)
dbSetOrder(2)
If dbSeek( cCampo )
cTitulo := X3Titulo()
cDescri := X3Descri()
cCombo := X3Cbox()
EndIf
Return
X3PICTURE()
Sintaxe: X3PICTURE(cCampo)
Parmetros:
Retorno:
Exemplo:
Local cPicture
- 497 -
Guia de Referncia Rpida
ADVPL Avanado
X3TITULO()
Sintaxe: X3TITULO()
Parmetros:
Nenhum .
Retorno:
Exemplo:
Local cTitulo
dbSelectArea(SX3)
dbSetOrder(2)
If dbSeek( A1_COD )
cTitulo := X3Titulo()
EndIf
Return
X3USO()
Parmetros:
Retorno:
- 498 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo:
DbSelectArea(SX3)
DbSetOrder(2)
DbSeek(A1_COD)
If X3Uso( SX3->X3_USADO )
lUsado := .T.
EndIf
Return lUsado
X5DESCRI()
Sintaxe: X5DESCRI()
Parmetros:
Nenhum .
Retorno:
Exemplo:
dbSelectArea(SX5)
dbSetOrder(1)
If dbSeek( cFilial+cTabela+cChave )
cDescr := X5Descri()
EndIf
Return
- 499 -
Guia de Referncia Rpida
ADVPL Avanado
X6CONTEUD()
Sintaxe: X6CONTEUD()
Parmetros:
Nenhum .
Retorno:
Exemplo:
dbSelectArea(SX6)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6Descric()
cDescr += X6Desc1()
cDescr += X6Desc2()
cConteud := X6Conteud()
EndIf
Return
- 500 -
Guia de Referncia Rpida
ADVPL Avanado
X6DESCRIC()
Sintaxe: X6DESCRIC()
Parmetros:
Nenhum .
Retorno:
Exemplo:
Local cDescr
Local cConteud
dbSelectArea(SX6)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6Descric()
cDescr += X6Desc1()
cDescr += X6Desc2()
cConteud := X6Conteud()
EndIf
Return
- 501 -
Guia de Referncia Rpida
ADVPL Avanado
XADESCRIC()
A funo XADESCRI() retorna o contedo da descrio dos folders de acordo com o registro
posicionado no Dicionrio de Dados (SXA) no idioma corrente.
Sintaxe: XADESCRIC()
Parmetros:
Nenhum .
Retorno:
Exemplo:
XBDESCRI()
Sintaxe: XBDESCRI()
Parmetros:
Nenhum .
Retorno:
Exemplo:
- 502 -
Guia de Referncia Rpida
ADVPL Avanado
XFILIAL()
Esta funo utilizada para permitir que pesquisas e consultas em arquivos trabalhem
somente com os dados da filial corrente, dependendo claro se o arquivo est compartilhado
ou no (definio que feita atravs do mdulo Configurador Dicionrio de Dados (SX2)).
importante verificar que esta funo no tem por objetivo retornar apenas a filial corrente,
mas retorn-la caso o arquivo seja exclusivo. Se o arquivo estiver compartilhado, a funo
xFilial retornar dois espaos em branco.
Sintaxe: XFILIAL(cAlias)
Parmetros:
Retorno:
- 503 -
Guia de Referncia Rpida
ADVPL Avanado
Interfaces de cadastro
AXCADASTRO()
Browse padro para visualizao das informaes da base de dados, de acordo com as
configuraes do SX3 Dicionrio de Dados (campo browse).
Parmetros:
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | XCADSA2 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo AXCADASTRO() |
|+----------------------------------------------------------------------------
| Uso | Curso ADVPL |
|+----------------------------------------------------------------------------
/*/
dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)
Return Nil
- 504 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo: Funo de validao da alterao
/*/
+------------------------------------------------------------------------------
| Funo | VLDALT | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrio | Funo de validao de alterao para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/
nOpcao := AxAltera(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo(Aterao concluda com sucesso!)
Endif
RestArea(aArea)
Return lRet
/*/
+------------------------------------------------------------------------------
| Funo | VLDEXC | Autor | ARNALDO RAYMUNDO JR. | Data | |
+------------------------------------------------------------------------------
| Descrio | Funo de validao de excluso para a AXCADASTRO() |
+------------------------------------------------------------------------------
| Uso | Curso ADVPL |
+------------------------------------------------------------------------------
/*/
nOpcao := AxExclui(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo(Excluso concluda com sucesso!)
Endif
RestArea(aArea)
Return lRet
- 505 -
Guia de Referncia Rpida
ADVPL Avanado
AXPESQUI()
Funo de pesquisa padro em registros exibidos pelos browses do sistema, a qual posiciona o
browse no registro pesquisado. Exibe uma tela que permite a seleo do ndice a ser utilizado
na pesquisa e a digitao das informaes que compe a chave de busca.
Sintaxe: AXPESQUI()
Parmetros
Nenhum .
AXVISUAL()
Parmetros
- 506 -
Guia de Referncia Rpida
ADVPL Avanado
AXINCLUI()
Parmetros
- 507 -
Guia de Referncia Rpida
ADVPL Avanado
Indica se a Enchoice() chamada pela AxFunction() utilizar variveis de
lVirtual
memria ou os campos da tabela na edio
lMaximized Indica se a janela dever ser ou no maximizada
AXALTERA()
Parmetros
AXDELETA()
Parmetros
aCpos Vetor com nome dos campos que podero ser editados
Botes adicionais para a EnchoiceBar, no formato:
aArray[n][1] -> Imagem do boto
aButtons
aArray[n][2] -> bloco de cdigo contendo a ao do boto
aArray[n][3] -> ttulo do boto
Funes para execuo em pontos pr-definidos da AxFunction(),
conforme abaixo:
aParam[1] := Bloco de cdigo que ser processado antes da exibio
da interface.
aParam[2] := Bloco de cdigo para processamento na validao da
aParam
confirmao.
aParam[3] := Bloco de cdigo que ser executado dentro da transao
da AxFunction().
aParam[4] := Bloco de cdigo que ser executado fora da transao da
AxFunction().
Array no formato utilizado pela funcionalidade MsExecAuto(). Caso seja
informado este array, no ser exibida a tela de interface, e ser
executada a funo EnchAuto().
aAuto
aAuto[n][1] := Nome do campo
aAuto[n][2] := Contedo do campo
aAuto[n][3] := Validao que ser utilizada em substituio as
- 508 -
Guia de Referncia Rpida
ADVPL Avanado
validaes do SX3
BRWLEGENDA()
Parmetros:
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARRON
BR_VERDE
BR_VERMELHO
BR_PINK
BR_PRETO
ENDFILBRW()
Parmetros:
- 509 -
Guia de Referncia Rpida
ADVPL Avanado
FILBROWSE()
Parmetros:
PESQBRW()
A PesqBrw() uma funcionalidade que permite a pesquisa dentro da MBrowse(). Esta funo
dever obrigatoriamente substituir a funo AxPesqui, no array do aRotina, sempre que for
utilizada a funo FilBrowse().
Parmetros:
- 510 -
Guia de Referncia Rpida
ADVPL Avanado
MARKBROW()
Parmetros:
Ao definir as funes no array aRotina, se o nome da funo no for especificado com (), a
MarkBrowse passar como parmetros as seguintes variveis de controle:
- 511 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo: Funo MarkBrow() e acessrias
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Programa | MkBrwSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | MarkBrowse Genrico |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
Local aCpos := {}
Local aCampos := {}
Local nI := 0
Local cAlias := "SA1"
Private aRotina := {}
Private cCadastro := "Cadastro de Clientes"
Private aRecSel := {}
AADD(aCpos, "A1_OK" )
AADD(aCpos, "A1_FILIAL" )
AADD(aCpos, "A1_COD" )
AADD(aCpos, "A1_LOJA" )
AADD(aCpos, "A1_NOME" )
AADD(aCpos, "A1_TIPO" )
dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len(aCpos)
IF dbSeek(aCpos[nI])
AADD(aCampos,{X3_CAMPO,"",IIF(nI==1,"",Trim(X3_TITULO)),;
Trim(X3_PICTURE)})
ENDIF
Next
DbSelectArea(cAlias)
DbSetOrder(1)
Return Nil
- 512 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo: Funo VisLote() utilizao das funes acessrias da MarkBrow()
/*/
+-----------------------------------------------------------------------------
| Programa | VisLote() | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
USER FUNCTION VisLote()
Local cMarca := ThisMark()
Local nX := 0
Local lInvert := ThisInv()
Local cTexto := ""
Local cEOL := CHR(10)+CHR(13)
Local oDlg
Local oMemo
DbSelectArea("SA1")
DbGoTop()
While SA1->(!EOF())
SA1->(dbSkip())
Enddo
IF Len(aRecSel) > 0
cTexto := "Cdigo | Loja | Nome Reduzido "+cEol
// "1234567890123456789012345678901234567890
// "CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol
For nX := 1 to Len(aRecSel)
Next nX
RETURN
- 513 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo: Funo LimpaMarca() utilizao das funes acessrias da MarkBrow()
/*/
+-----------------------------------------------------------------------------
| Programa | LimpaMarca | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Desc. | Funo utilizada para demonstrar o uso do recurso da MarkBrowse|
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
Local nX := 0
For nX := 1 to Len(aRecSel)
SA1->(DbGoto(aRecSel[nX][1]))
RecLock("SA1",.F.)
SA1->A1_OK := SPACE(2)
MsUnLock()
Next nX
RETURN
- 514 -
Guia de Referncia Rpida
ADVPL Avanado
MBROWSE()
Browse padro para visualizao das informaes da base de dados, de acordo com as
configuraes do SX3 Dicionrio de Dados (campo browse).
Parmetros:
[n][1]=>Descrio do campo
aFixe [n][2]=>Nome do campo
Arquivos de trabalho
[n][1]=>Descrio do campo
[n][2]=>Nome do campo
[n][3]=>Tipo
[n][4]=>Tamanho
[n][5]=>Decimal
[n][6]=>Picture
- 515 -
Guia de Referncia Rpida
ADVPL Avanado
Parmetros:
- 516 -
Guia de Referncia Rpida
ADVPL Avanado
A funo SetBrwChgAll muda o valor default desse parmetro.
[n][1] - Ttulo;
[n][2] Rotina;
[n][3] Reservado;
[n][4] Operao (1 - pesquisa; 2 - visualizao; 3 - incluso; 4 -
aRotina alterao; 5 - excluso);
AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})
cCadastro Ttulo do browse que ser exibido.
Ao definir as funes no array aRotina, se o nome da funo no for especificado com (), a
Mbrowse passar como parmetros as seguintes variveis de controle:
1. Pesquisar
2. Visualizar
3. Incluir
4. Alterar
5. Excluir
6. Livre
- 517 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo: Funo Mbrowse()
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
AADD(aRotina,{"Pesquisar" ,"AxPesqui",0,1})
AADD(aRotina,{"Visualizar" ,"AxVisual",0,2})
AADD(aRotina,{"Incluir" ,"AxInclui",0,3})
AADD(aRotina,{"Alterar" ,"AxAltera",0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta",0,5})
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)
Return Nil
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | MBRWSA1 | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo de utilizao da funo MBROWSE() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
- 518 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse(6,1,22,75,cAlias)
Return Nil
/*/
+-----------------------------------------------------------------------------
| Funo | INCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de incluso especfica chamando a AXINCLUI() |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
nOpcao := AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)
If nOpcao == 1
MsgInfo(Incluso concluda com sucesso!)
ElseIf == 2
MsgInfo(Incluso cancelada!)
Endif
Return Nil
#include "protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Funo | EXCLUI | Autor | ARNALDO RAYMUNDO JR. | Data | |
+-----------------------------------------------------------------------------
| Descrio | Funo de excluso especifica chamando a AxDeleta |
+-----------------------------------------------------------------------------
| Uso | Curso ADVPL |
+-----------------------------------------------------------------------------
/*/
- 519 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
Local nOpcao := 0
nOpcao := AxDeleta(cAlias,nReg,aRotina[nOpc,4])
// Identifica corretamente a opo definida para o funo em aRotinas com mais
// do que os 5 elementos padres.
If nOpcao == 1
MsgInfo(Excluso realizada com sucesso!)
ElseIf == 2
MsgInfo(Excluso cancelada!)
Endif
Return Nil
#Include "Protheus.ch"
/*/
+-----------------------------------------------------------------------------
| Programa | MBrwSA2 | Autor | SERGIO FUZINAKA | Data | |
+-----------------------------------------------------------------------------
| Descrio | Exemplo da MBrowse utilizando a tabela de Cadastro de |
| | Fornecedores |
+-----------------------------------------------------------------------------
| Uso | Curso de ADVPL |
+-----------------------------------------------------------------------------
/*/
/*
-- CORES DISPONIVEIS PARA LEGENDA --
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARRON
BR_VERDE
- 520 -
Guia de Referncia Rpida
ADVPL Avanado
BR_VERMELHO
BR_PINK
BR_PRETO
*/
dbSelectArea(cAlias)
dbSetOrder(1)
//+------------------------------------------------------------
//| Cria o filtro na MBrowse utilizando a funo FilBrowse
//+------------------------------------------------------------
Eval(bFiltraBrw)
dbSelectArea(cAlias)
dbGoTop()
mBrowse(6,1,22,75,cAlias,,,,,,aCores)
//+------------------------------------------------
//| Deleta o filtro utilizado na funo FilBrowse
//+------------------------------------------------
EndFilBrw(cAlias,aIndexSA2)
Return Nil
//+---------------------------------------
//|Funo: BInclui - Rotina de Incluso
//+---------------------------------------
User Function BInclui(cAlias,nReg,nOpc)
Local nOpcao := 0
nOpcao := AxInclui(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo("Incluso efetuada com sucesso!")
Else
MsgInfo("Incluso cancelada!")
Endif
Return Nil
- 521 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
//+-----------------------------------------
//|Funo: BAltera - Rotina de Alterao
//+-----------------------------------------
User Function BAltera(cAlias,nReg,nOpc)
Local nOpcao := 0
nOpcao := AxAltera(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo("Alterao efetuada com sucesso!")
Else
MsgInfo("Alterao cancelada!")
Endif
Return Nil
//+-----------------------------------------
//|Funo: BDeleta - Rotina de Excluso
//+-----------------------------------------
User Function BDeleta(cAlias,nReg,nOpc)
Local nOpcao := 0
nOpcao := AxDeleta(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo("Excluso efetuada com sucesso!")
Else
MsgInfo("Excluso cancelada!")
Endif
Return Nil
//+-------------------------------------------
//|Funo: BLegenda - Rotina de Legenda
//+-------------------------------------------
User Function BLegenda()
Local aLegenda := {}
Return Nil
- 522 -
Guia de Referncia Rpida
ADVPL Avanado
MODELO2()
A funo Modelo2() uma interface pr-definida pela Microsiga que implementa de forma
padronizada os compontes necessrios a manipulao de estruturas de dados nas quais o
cabealho e os itens da informao compartilham o mesmo registro fsico.
Seu objetivo atuar como um facilitador de codificao, permitindo a utilizao dos recursos
bsicos dos seguintes componentes visuais:
MsDialog()
TGet()
TSay()
MsNewGetDados()
EnchoiceBar()
Da mesma forma, o Browse deve ser tratado por esta rotina, sendo
comum a Modelo2() estar vinculada ao uso de uma MBrowse().
Parmetros:
- 523 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
#include "protheus.ch"
//+--------------------------------------------------------------------+
//| Rotina | MBRW2SX5| Autor | ARNALDO RAYMUNDO JR. | Data |01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | UTILIZACAO DA MODELO2() PARA VISUALIZAO DO SX5. |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)
Return
//Local nUsado := 0
Local cTitulo := "Inclusao de itens - Arquivo de Tabelas"
Local aCab := {} // Array com descricao dos campos do Cabecalho do Modelo
2
Local aRoda := {} // Array com descricao dos campos do Rodape do Modelo 2
Local aGrid := {80,005,050,300} //Array com coordenadas da GetDados no
modelo2 - Padrao: {44,5,118,315}
// Linha Inicial - Coluna Inicial - +Qts Linhas - +Qts
Colunas : {080,005,050,300}
Local cLinhaOk := "AllwaysTrue()" // Validacoes na linha da GetDados da
Modelo 2
Local cTudoOk := "AllwaysTrue()" // Validacao geral da GetDados da Modelo 2
Local lRetMod2 := .F. // Retorno da funo Modelo2 - .T. Confirmou / .F.
Cancelou
Local nColuna := 0
- 524 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
// Montagem do aHeader
AADD(aHeader,{"Chave" ,"X5_CHAVE","@!",5,0,"AllwaysTrue()",;
"","C","","R"})
AADD(aHeader,{"Descricao" ,"X5_DESCRI","@!",40,0,"AllwaysTrue()",;
"","C","","R"})
// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)
// Inicializao do aCols
For nColuna := 1 to Len(aHeader)
If aHeader[nColuna][8] == "C"
aCols[1][nColuna] := SPACE(aHeader[nColuna][4])
ElseIf aHeader[nColuna][8] == "N"
aCols[1][nColuna] := 0
ElseIf aHeader[nColuna][8] == "D"
aCols[1][nColuna] := CTOD("")
ElseIf aHeader[nColuna][8] == "L"
aCols[1][nColuna] := .F.
ElseIf aHeader[nColuna][8] == "M"
aCols[1][nColuna] := ""
Endif
Next nColuna
IF lRetMod2
//MsgInfo("Voc confirmou a operao","MBRW2SX5")
For nLinha := 1 to len(aCols)
// Campos de Cabealho
Reclock("SX5",.T.)
SX5->X5_FILIAL := cX5Filial
SX5->X5_TABELA := cX5Tabela
// Campos do aCols
//SX5->X5_CHAVE := aCols[nLinha][1]
//SX5->X5_DESCRI := aCols[nLinha][2]
For nColuna := 1 to Len(aHeader)
SX5->&(aHeader[nColuna][2]) := aCols[nLinha][nColuna]
Next nColuna
MsUnLock()
Next nLinha
ELSE
MsgAlert("Voc cancelou a operao","MBRW2SX5")
ENDIF
Return
- 525 -
Guia de Referncia Rpida
ADVPL Avanado
MODELO3()
A funo Modelo3) uma interface pr-definida pela Microsiga que implementa de forma
padronizada os compontes necessrios a manipulao de estruturas de dados nas quais o
cabealho e os itens da informao esto em tabelas separadas.
Seu objetivo atuar como um facilitador de codificao, permitindo a utilizao dos recursos
bsicos dos seguintes componentes visuais:
MsDialog()
Enchoice()
EnchoiceBar()
MsNewGetDados()
Da mesma forma, o Browse deve ser tratado por esta rotina, sendo
comum a Modelo3() estar vinculada ao uso de uma MBrowse().
Parmetros:
- 526 -
Guia de Referncia Rpida
ADVPL Avanado
Retorno:
#INCLUDE "protheus.ch"
//+--------------------------------------------------------------------+
//| Rotina | MBRWMOD3| Autor | ARNALDO RAYMUNDO JR. |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | EXEMPLO DE UTILIZACAO DA MODELO3(). |
//+--------------------------------------------------------------------+
//| Uso | CURSO DE ADVPL |
//+--------------------------------------------------------------------+
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)
Return
- 527 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
//
// Opcoes de acesso para a Modelo 3
//
Do Case
Case nOpcx==3; nOpcE:=3 ; nOpcG:=3 // 3 - "INCLUIR"
Case nOpcx==4; nOpcE:=3 ; nOpcG:=3 // 4 - "ALTERAR"
Case nOpcx==2; nOpcE:=2 ; nOpcG:=2 // 2 - "VISUALIZAR"
Case nOpcx==5; nOpcE:=2 ; nOpcG:=2 // 5 - "EXCLUIR"
EndCase
//
// Cria variaveis M->????? da Enchoice
//
RegToMemory("SC5",(nOpcx==3 .or. nOpcx==4 )) // Se for inclusao ou alteracao
permite alterar o conteudo das variaveis de memoria
//
// Cria aHeader e aCols da GetDados
//
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If Alltrim(x3_campo)=="C6_ITEM"
dbSkip()
Loop
Endif
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
Aadd(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End
If nOpcx==3 // Incluir
aCols:={Array(nUsado+1)}
aCols[1,nUsado+1]:=.F.
For nX:=1 to nUsado
aCols[1,nX]:=CriaVar(aHeader[nX,2])
Next
Else
aCols:={}
dbSelectArea("SC6")
dbSetOrder(1)
dbSeek(xFilial()+M->C5_NUM)
While !eof().and.C6_NUM==M->C5_NUM
AADD(aCols,Array(nUsado+1))
For nX:=1 to nUsado
aCols[Len(aCols),nX]:=FieldGet(FieldPos(aHeader[nX,2]))
Next
aCols[Len(aCols),nUsado+1]:=.F.
dbSkip()
End
Endif
- 528 -
Guia de Referncia Rpida
ADVPL Avanado
Exemplo (continuao):
If Len(aCols)>0
//
// Executa a Modelo 3
//
aCposE := {"C5_CLIENTE"}
Return
ALERT()
Sintaxe: AVISO(cTexto)
Parmetros
- 529 -
Guia de Referncia Rpida
ADVPL Avanado
AVISO()
FORMBACTH()
- 530 -
Guia de Referncia Rpida
ADVPL Avanado
MSGFUNCTIONS()
Parmetros
MSGALERT
MSGINFO
MSGSTOP
MSGYESNO
- 531 -
Guia de Referncia Rpida
ADVPL Avanado
Recursos das interfaces visuais
GDFIELDGET()
Parmetros:
Retorno:
GDFIELDPOS()
Sintaxe: GDFIELDPOS(cCampo)
Parmetros:
Retorno:
Numrico Posio que o campo ocupada na grid. Caso o mesmo no exista ser
retornado 0.
GDFIELDPUT()
A funo GDFIELDPUT() atualiza o contedo de uma grid formada por um objeto do tipo
MsNewGetDados() de acordo com o campo e linha da grid especificados.
Parmetros:
Retorno:
Nenhum .
- 532 -
Guia de Referncia Rpida
ADVPL Avanado
GETMARK()
Parmetros:
Retorno:
String
Conjunto de caracteres que definem a marca que dever ser utilizada pela
MarkBrowse durante o processamento corrente.
Exemplo:
Function <nome-da-funo>( )
Return
- 533 -
Guia de Referncia Rpida
ADVPL Avanado
ISMARK()
Parmetros:
cCampo Campo para ser avaliado em funo da marca em uso pela MarkBrowse
cMarca Marca em uso pela MarkBrowse
lInvert Se foi utilizado o recurso de inverter seleo na MarkBrowse
Retorno:
MARKBREFRESH()
Sintaxe: MARKBREFRESH()
Parmetros:
Nenhum .
Retorno:
Nenhum .
- 534 -
Guia de Referncia Rpida
ADVPL Avanado
READVAR()
A funo READVAR() retorna o nome da varivel ou campo associoado ao objeto do tipo GET()
atualmente selecionado ou em edio.
Sintaxe: READVAR()
Parmetros:
Nenhum .
Retorno:
THISINV()
A funo THISINV() utilizada em conjunto com a funo MarkBrow() para identificar se o foi
utilizado o recurso de inverso de seleo dos itens exibidos em uma MarkBrowse.
Sintaxe: THISINV()
Parmetros:
Nenhum -
Retorno:
Lgico Indica se foi utilizada a opo de inverso da seleo dos itens exibidos em
uma MarkBrowse.
THISMARK()
Sintaxe: THISMARK()
Parmetros:
Nenhum .
Retorno:
- 535 -
Guia de Referncia Rpida
ADVPL Avanado