Escolar Documentos
Profissional Documentos
Cultura Documentos
ESTRUTURA DO TREINAMENTO
OBJETIVOS DO CURSO ............................................................................................................................... 11
MDULO 05: Introduo orientao objetos ........................................................................................ 12
1.
Definies ................................................................................................................................. 12
1.2.
1.3.
O
1.3.1.
1.3.2.
1.3.3.
1.3.4.
2.
3.
2.2.
2.3.
Palavras reservadas.................................................................................................................. 28
3.2.
-2ADVPL Avanado
6.
7.
6.2.
6.3.
-3ADVPL Avanado
8.2.
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.
9.
11.
11.1.
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
-5ADVPL Avanado
-9ADVPL Avanado
- 10 ADVPL Avanado
OBJETIVOS DO CURSO
Objetivos especficos do curso:
Ao final do curso o treinando dever ter desenvolvido os seguintes conceitos, habilidades e
atitudes:
a) Conceitos a serem aprendidos
- 11 ADVPL Avanado
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.
Embora objetos tenham existncia prpria no mundo real, em termos de linguagem de
programao um objeto necessita um mecanismo de identificao. Esta identificao de objeto
deve ser nica, uniforme e independente do contedo do objeto. Este um dos mecanismos
que permite a criao de colees de objetos, as quais so tambm objetos em si.
A estrutura de um objeto representada em termos de atributos. O comportamento de um
objeto representado pelo conjunto de operaes que podem ser executadas sobre o objeto.
- 12 ADVPL Avanado
Classe
Objetos com a mesma estrutura e o mesmo comportamento so agrupados em classes. Uma
classe uma abstrao que descreve propriedades importantes para uma aplicao e
simplesmente ignora o resto.
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 .
Polimorfismo
Polimorfismo significa que a mesma operao pode se comportar de forma diferente em
classes diferentes. Por exemplo, a operao move quando aplicada a uma janela de um
sistema de interfaces tem um comportamento distinto do que quando aplicada a uma pea de
um jogo de xadrez. Um mtodo uma implementao especfica de uma operao para uma
certa classe.
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
Herana o mecanismo do paradigma de orientao a objetos que permite compartilhar
atributos e operaes entre classes baseada em um relacionamento hierrquico. Uma classe
pode ser definida de forma genrica e depois refinada sucessivamente em termos de
subclasses ou classes derivadas. Cada subclasse incorpora, or herda, todas as propriedades de
sua superclasse (ou classe base) e adiciona suas propriedades nicas e particulares. As
propriedades da classe base no precisam ser repetidas em cada classe derivada. Esta
capacidade de fatorar as propriedades comuns de diversas classes em uma superclasse pode
reduzir dramaticamente a repetio de cdigo em um projeto ou programa, sendo uma das
principais vantagens da abordagem de orientao a objetos.
- 14 ADVPL Avanado
- 15 ADVPL Avanado
- 16 ADVPL Avanado
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.
No diagrama de classes, atributos so listados no segundo segmento da caixa que representa
a classe. O nome do atributo pode ser seguido por detalhes opcionais, tais como o tipo de
dado assumido e valor default. A Figura abaixo mostra esta representao.
- 17 ADVPL Avanado
- 18 ADVPL Avanado
- 19 ADVPL Avanado
CLASS
CLASSDATA
CONSTRUCTOR
DATA
ENDCLASS
EXPORT
FROM
HIDDEN
METHOD
PROTECTED
SELF
CLASS
Descrio
Sintaxe 1
CLASS <nome_da_classe>
Sintaxe 2
CLASSDATA
Descrio
Sintaxe 1
CONSTRUCTOR
Descrio
Sintaxe
- 20 ADVPL Avanado
DATA
Descrio
Sintaxe
DATA <nome_do_atributo>
ENDCLASS
Descrio
Sintaxe
ENDCLASS
EXPORT
Descrio
Simular
EXPORT ou [PUBLIC]
Sintaxe 1
DATA cNome
Sintaxe 2
FROM
Descrio
Sintaxe
HIDDEN
Descrio
Simular
HIDDEN ou [LOCAL]
Sintaxe
METHOD
Descrio
Sintaxe 1
METHOD <nome_do_mtodo()>
Sintaxe 2
- 21 ADVPL Avanado
PROTECTED
Descrio
Simular
PROTECTED ou [READONLY]
Sintaxe
SELF
Descrio
Sintaxe
Return SELF
Operadores especficos
Exemplo 1
cNome := oAluno:sNome
Exemplo 2
cNota := oAluno:GetNota(cCurso)
::
Exemplo
IF nPosCurso > 0
nNota := ::aCursos[nPosCurso][2]
ENDIF
Return nNota
- 22 ADVPL Avanado
- 23 ADVPL Avanado
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()
ENDCLASS
- 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 ::.
A utilizao deste operador permite ao interpretador ADVPL diferenciar variveis comuns
criadas pelas funes e mtodos que utilizam este objeto dos atributos propriamente ditos.
Exemplo:
#include protheus.ch
CLASS Pessoa()
DATA cNome
DATA nIdade
METHOD Create() CONSTRUCTOR
METHOD SetNome()
METHOD SetIdade()
ENDCLASS
METHOD Create(cNome, nIdade) CLASS Pessoa
::cNome := cNome
::nIdade := nIdade
Return SELF
oPessoa
cNome :=
dNascimento:= CTOD()
aDados := {}
aDados := GetDados()
oPessoa := Pessoa():Create(cNome,dNascimento)
Return
- 25 ADVPL Avanado
- 26 ADVPL Avanado
Create() CONSTRUCTOR
Inscrever()
Avaliar()
GetNota()
GetStatus()
ENDCLASS
// Os objetos da classe Aluno, possuem todos os mtodos e atributos da classe
Pessoa, alm
// dos mtodos e atributos declarados na prpria classe.
- 27 ADVPL Avanado
DTOS
ELSE
ELSEIF
EMPTY
ENDCASE
ENDDO
LOWER
SETPOS
COL
FIELDNAME
PCOL
TIME
DEVPOS
IF
RECNO
THROW
INKEY
INT
LASTREC
LEN
LOCK
LOG
SELECT
CMONTH
FCOUNT
MONTH
SUBSTR
DELETED
FUNCTION
RECCOUNT
UPPER
; Palavras reservadas no
procedimentos ou funes;
REPLICATE
RLOCK
ROUND
ROW
RTRIM
SECONDS
CHR
EXP
MIN
STR
DAY
FOUND
PROW
TYPE
TRY
podem
ser
VAL
VALTYPE
WHILE
WORD
YEAR
CDOW
EOF
MAX
SQRT
DATE
FLOCK
PROCEDURE
TRIM
DTOC
AS
utilizadas
para
variveis,
- 28 ADVPL Avanado
Funcionalidade
Permite apenas caracteres alfabticos.
Exibe CR depois de nmeros positivos.
Exibe numrico com o ponto e vrgula invertidos (formato Europeu).
Insere caracteres diferentes dos caracteres de template na exibio, mas no os
insere na varivel do GET.
Permite rolamento horizontal do texto dentro do GET, <n> um nmero inteiro
que identifica o tamanho da regio.
Exibe DB depois de nmeros negativos.
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.
Exemplo 01 Picture campo numrico
CT2_VALOR Numrico 17,2
Picture: @E 99,999,999,999,999.99
- 29 ADVPL Avanado
Classes Auxiliares
Tfont
Classes de Janelas
Msdialog
Tdialog
Twindow
Classes de Componentes
Tcontrol
- 30 ADVPL Avanado
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
Tslider
Classes de Componentes
Visuais
Tsplitter
Ttabs
Ttoolbox
Twbrowse
Vcbrowse
Propriedades:
nLeft
nTop
nWidth
nHeight
cCaption
cTooltip
lShowHint
cMsg
nClrText
nClrPane
bWhen
bValid
blClicked
brClicked
blDblClick
oWnd
lVisible
Cargo
bLostFocus
bGotFocus
Parmetros:
Nenhum
- 32 ADVPL Avanado
Mtodos auxiliares:
SetFocus
Descrio: Fora mudana do foco de entrada de dados para o controle.
Sintaxe: SetFocus( )
Parmetros:
Nenhum
Retorno:
Nil
Hide
Descrio: Torna objeto invisvel.
Sintaxe: Hide( )
Parmetros:
Nenhum
Retorno:
Nil
Show
Descrio: Torna objeto visvel.
Sintaxe: Show( )
Parmetros:
Nenhum
Retorno:
Nil
Enable
Descrio: Habilita o objeto.
Sintaxe: Enable( )
Parmetros:
Nenhum
Retorno:
Nil
- 33 ADVPL Avanado
Disable
Descrio: Desabilita o objeto.
Sintaxe: Disable( )
Parmetros:
Nenhum
Retorno:
Nil
Refresh
Descrio: Fora atualizao (sincronia) de propriedades entre o programa e o
Protheus Remote.
Sintaxe: Refresh( )
Parmetros:
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:
acName
nPar2
anHeight
lPar4
alBold
nPar6
lPar7
nPar8
alItalic
alUnderline
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:
anTop
anLeft
anBotom
anRight
acCaption
cPar6
nPar7
lPar8
nPar9
anClrText
anClrBack
oPar12
aoWnd
alPixel
oPar15
oPar16
nPar17
- 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.)
// ativa dilogo centralizado
oDlg:Activate(,,,.T.,{||msgstop('validou!'),.T.},,{||msgstop('iniciando'
)} )
Return
TDIALOG()
;
Propriedades:
-
Parmetros:
anTop
anLeft
anBotom
anRight
ou caracteres.
Caractere, opcional. Ttulo da janela.
Reservado.
Reservado.
Reservado.
Reservado.
Numrico,opcional. Cor do texto.
Numrico,opcional. Cor de fundo.
Reservado.
Objeto, opcional. Janela me da janela a ser criada, padro
a janela principal do programa.
Lgico, opcional. Se .T. considera as coordenadas passadas
em pixels, se .F. considera caracteres.
Reservado.
Reservado.
Reservado.
Numrico, opcional. Largura da janela em pixels.
Numrico, opcional. Altura da janela em pixels.
acCaption
cPar6
nPar7
lPar8
nPar9
anClrText
anClrBack
oPar12
aoWnd
alPixel
oPar15
oPar16
nPar17
anWidth
anHeight
Mtodos auxiliares:
Activate
Descrio: Ativa (exibe) o dilogo. Chamar somente uma vez este
mtodo.
Sintaxe: Activate([bPar1], [bPar2], [bPar3], [alCentered], [abValid],
[lPar6], [abInit], [bPar8], [bPar9] )
Parmetros:
bPar1
bPar2
bPar3
Reservado.
Reservado.
Reservado.
Lgico, opcional. Se .T. exibe a janela centralizada, .F.
padro.
Bloco de cdigo, opcional. Deve retornar .T. se contedo
do dilogo vlido, se retornar .F. o dilogo no fechar
quando solicitada de encerrar.
Reservado.
Bloco de cdigo, opcional. Executado quando o dilogo
inicia exibio.
Reservado.
Reservado.
alCentered
abValid
lPar6
abInit
bPar8
bPar9
Retorno:
Nenhum
- 38 ADVPL Avanado
End
Descrio: Encerra (fecha) o dilogo.
Sintaxe: End( )
Parmetros:
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..
.')} )
/* os comandos abaixo proporcionam o mesmo resultado
// cria dilogo
DEFINE DIALOG oDlg TITLE 'Meu dialogo' FROM 10,10 TO 300,300 COLOR
CLR_BLACK,CLR_WHITE PIXEL
// ativa dilogo centralizado
ACTIVATE DIALOG oDlg CENTER ON INIT (msgstop('iniciando...')) VALID
(msgstop('validou!'),.T.)
*/
Return Nil
- 39 ADVPL Avanado
TWINDOW()
;
Propriedades:
-
Parmetros:
nTop
nLeft
nBottom
nRight
cTitle
nPar6
oPar7
oPar8
oPar9
oParent
lPar11
lPar12
nClrFore
nClrText
oPar15
cPar16
lPar17
lPar18
lPar19
lPar20
lPixel
- 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:
acShow
bPar2
bPar3
bPar4
bPar5
bPar6
abInit
bPar8
bPar9
bPar10
bPar11
bPar12
bPar13
bPar14
bPar15
abValid
bPar17
bPar18
Retorno:
Nenhum
End
Descrio: Solicita encerramento da janela.
Sintaxe: End( )
Parmetros:
Nenhum
- 41 ADVPL Avanado
Center
Descrio: Centraliza a janela.
Sintaxe: Center( )
Parmetros:
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,,)
/* os comandos abaixo proporcionam o mesmo resultado
DEFINE WINDOW oWindow FROM 10, 10 TO 200,200 PIXEL TITLE 'Meu programa'
COLOR CLR_WHITE,CLR_BLACK
ACTIVATE WINDOW oWindow MAXIMIZED ON INIT abInit VALID abValid
*/
Return
.
- 42 ADVPL Avanado
Classes de componentes
TCONTROL()
;
Propriedades:
Numrico. Alinhamento do controle no espao
disponibilizado pelo seu objeto parente. 0 = Nenhum
(padro), 1= no topo, 2 = no rodap, 3= a esquerda, 4 = a
direita e 5 = em todo o parente.
Lgico. Se .T. indica que o contedo da varivel associada
ao controle foi modificado.
Lgico. Se .T. o contedo da varivel associada ao controle
permanecer apenas para leitura.
Numrico. Handle (identificador) do objeto sobre o qual o
controle foi criado.
Bloco de cdigo. Executado quando o estado ou contedo do
controle modificado pela ao sobre o controle.
Align
lModified
lReadOnly
hParent
bChange
;
Parmetros:
Nenhum
Mtodos auxiliares:
SetFocus
Descrio: Fora mudana do foco de entrada de dados para o controle.
Sintaxe: SetFocus( )
Parmetros:
Nenhum
Retorno:
Nil
Exemplo:
- 43 ADVPL Avanado
Propriedades:
+
nAt
nLen
Parmetros:
nRow
nCol
nWidth
nHeight
bFields
aHeaders
aColSizes
oDlg
cField
uValue1
uValue2
bChange
bLDblClick
bRClick
oFont
oCursor
nClrFore
nClrBack
cMsg
lUpdate
cAlias
lPixel
bWhen
lDesign
bValid
aAlter
oMother
;
Mtodos auxiliares:
GoUp
Descrio: Salta uma linha para cima.
Sintaxe: GoUp( )
Parmetros:
Nenhum
Retorno:
Nil
GoDown
Descrio: Salta uma linha para baixo.
Sintaxe: GoDown( )
Parmetros:
Nenhum
Retorno:
Nil
GoTop
Descrio: Salta para primeira linha.
Sintaxe: GoTop( )
Parmetros:
Nenhum
Retorno:
Nil
GoBottom
Descrio: Salta para ultima linha.
Sintaxe: GoBottom( )
Parmetros:
Nenhum
Retorno:
- 45 ADVPL Avanado
Nil
RowCount
Descrio: Retorna numero de linhas visiveis.
Sintaxe: RowCount( )
Parmetros:
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.)
Propriedades:
+
bChange
bChangeMes
dDiaAtu
- 47 ADVPL Avanado
Parmetros:
nRow
nCol
oDlg
lCanMultSel
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:
bAction
bRClick
Parmetros:
aoWnd
anRow
anCol
anHeight
anWidth
dDateIni
nResolution
abWhen
abAction
nDefColor
bRClick
lFillAll
;
Mtodos auxiliares:
Add
Descrio: Adiciona periodo na Grid.
Sintaxe: Add(cCaption, nLin, nInitial, nFinal, nColor, cDescri )
Parmetros:
cCaption
nLin
nInitial
nFinal
nColor
cDescri
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:
+
nAt
nLen
Parmetros:
nRow
nCol
nWidth
nHeight
bFields
aHeaders
aColSizes
oDlg
cField
uValue1
uValue2
bChange
bLDblClick
bRClick
oFont
oCursor
nClrFore
nClrBack
cMsg
lUpdate
cAlias
lPixel
bWhen
lDesign
bValid
- 51 ADVPL Avanado
Mtodos auxiliares:
GoUp
Descrio: Salta uma linha para cima.
Sintaxe: GoUp( )
Parmetros:
Nenhum
Retorno:
Nil
GoDown
Descrio: Salta uma linha para baixo.
Sintaxe: GoDown( )
Parmetros:
Nenhum
Retorno:
Nil
GoTop
Descrio: Salta para primeira linha.
Sintaxe: GoTop( )
Parmetros:
Nenhum
Retorno:
Nil
GoBottom
Descrio: Salta para ultima linha.
Sintaxe: GoBottom( )
Parmetros:
Nenhum
Retorno:
Nil
- 52 ADVPL Avanado
RowCount
Descrio: Retorna numero de linhas visiveis.
Sintaxe: RowCount( )
Parmetros:
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.)
Propriedades:
bChange
Parmetros:
aoWnd
anRow
[anWidth],
- 54 ADVPL Avanado
anCol
anHeight
anWidth
nResolution
cValue
abWhen
abChange
;
Mtodos auxiliares:
GetValue
Descrio: Retorna os item selecionados no formato XX X XX.
Sintaxe: GetValue()
Parmetros:
Nenhum
Retorno:
Caracter
GetInterTime
Descrio: Retorna periodo selecionado.
Sintaxe: GetInterTime()
Parmetros:
Nenhum
Retorno:
Caracter
SetResol
Descrio: Define a resoluo da demonstrao da barra de perodos.
Sintaxe: SetResol (nResolution)
Parmetros:
nResolution
Resoluo
Retorno:
Nil
- 55 ADVPL Avanado
SetValue
Descrio: Atribui um determindo contedo para um objeto ou atributo
de um objeto.
Sintaxe: SetValue(xValue, cPicture)
Parmetros:
xValue
cPicture
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:
Bloco de cdigo. Executado ao precionar o boto esquerdo
do mouse.
bAction
;
Parmetros:
Parmetro
[bAction],
[oWnd],
[lEnable],
Tipo / Descrio
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
Numrico. Tipo do Boto
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
Logico, opcional. Habilita/Desabilita boto
Caracter, Opicional. Descrio do tipo tooltip(hint) do item
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
nTop
nLeft
nType
bAction
oWnd
lEnable
cMsg
abWhen
[nType],
Mtodos auxiliares:
Create
Descrio: Retorna Mtodo construtor opcional da classe.
Sintaxe: Create()
Parmetros:
Nenhum
Retorno:
Objeto
- 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:
oWnd
nBtnWidth
nBtnHeight
l3D
cMode
No utilizado.
oCursor
cResource
lNoAutoAdjust
;
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
|
+-----------------------------------------------------------------------/*/
User Function TstTBar()
Local oDlg
oDlg
Exemplo (continuao):
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )
oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )
oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica'
{||},oTBar,'Critica',,.F.,.F. )
,,,,;
,,,,;
,,,,;
oDlg:lCentered := .T.
oDlg:Activate()
Return
- 60 ADVPL Avanado
TBITMAP()
;
Propriedades:
cResName
cBmpFile
lStretch
lAutoSize
lTransparent
Parmetros:
anTop
anLeft
anWidth
anHeight
acResName
acBmpFile
alNoBorder
aoWnd
abLClicked
abRClicked
alScroll
alStretch
aoCursor
acMsg
alUpdate
abWhen
alPixel
abValid
alDesign
alIsIcon
alIsJpeg
- 61 ADVPL Avanado
Mtodos auxiliares:
Create
Descrio: Retorna Mtodo construtor opcional da classe.
Sintaxe: Create()
Parmetros:
Nenhum
Retorno:
Objeto
SetBmp
Descrio: Mtodo para carregar uma imagem do repositrio.
Sintaxe: SetBmp( acResName )
Parmetros:
acResName
Retorno:
Nenhum
Load
Descrio: Mtodo para carregar uma imagem do repositrio ou local.
Sintaxe: Load( acResName, acBmpFile )
Parmetros:
acResName
acBmpFile
Retorno:
Nenhum
;
Aparncia:
- 62 ADVPL Avanado
Exemplo:
#include protheus.ch
Propriedades:
bAction
Parmetros:
nRow
nCol
cCaption
oWnd
bAction
nWidth
nHeight
nHelpId
oFont
lDefault
lPixel
lDesign
cMsg
lUpdate
bWhen
bValid
lCancel
;
Reservado
Reservado
Reservado
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
Reservado
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.,,,)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
- 64 ADVPL Avanado
TBTNBMP()
;
Descrio: Classe de objetos visuais do tipo boto, o qual permite que seja
vinculada uma imagem ao controle.
Propriedades:
bAction
Parmetros:
cResName1
cResName2
cBmpFile1
cBmpFile2
cMsg
bAction
lGroup
oWnd
lAdjust
bWhen
cToolTip
lPressed
bDrop
cAction
nPos
cPrompt
oFont
cResName3
cBmpFile3
lBorder
- 65 ADVPL Avanado
Mtodos auxiliares:
LoadBitmaps
Descrio: Atribui ao boto os bitmaps ou recursos para exibio.
Sintaxe:
LoadBitmaps([cResName1],
[cResName2],
[cBmpFile1],
[cBmpFile2], [cResName3], [cBmpFile3])
Parmetros:
cResName1
cResName2
cBmpFile1
cBmpFile2
cResName3
cBmpFile3
Caractere,
Caractere,
Caractere,
Caractere,
Caractere,
Caractere,
Nome
Nome
Nome
Nome
Nome
Nome
do
do
do
do
do
do
resource
resource
arquivo BMP
arquivo BMP
resource
resource
Retorno:
Nenhum
SetPopUpMenu
Descrio: Seta o objeto do tipo TMenu referente ao boto.
Sintaxe: SetPopupMenu(oMenu)
Parmetros:
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. )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
TBTNBMP2()
;
Propriedades:
-
Parmetros:
anTop
anLeft
anWidth
anHeight
acResName1
acResName2
acBmpFile1
acBmpFile2
abAction
aoWnd
acMsg
abWhen
lAdjust
lUpdate
Mtodos auxiliares:
- 67 ADVPL Avanado
LoadBitmaps
Descrio: Atribui ao boto os bitmaps ou recursos para exibio.
Sintaxe:
LoadBitmaps([cResName1],
[cResName2],
[cBmpFile1],
[cBmpFile2], [cResName3], [cBmpFile3])
Parmetros:
cResName1
cResName2
cBmpFile1
cBmpFile2
cResName3
cBmpFile3
Caractere,
Caractere,
Caractere,
Caractere,
Caractere,
Caractere,
Nome
Nome
Nome
Nome
Nome
Nome
do
do
do
do
do
do
resource
resource
arquivo BMP
arquivo BMP
resource
resource
Retorno:
Nenhum
SetPopUpMenu
Descrio: Seta o objeto do tipo TMenu referente ao boto.
Sintaxe: SetPopupMenu(oMenu)
Parmetros:
Nenhum
Retorno:
Nenhum
;
Aparncia:
- 68 ADVPL Avanado
Exemplo:
Local oBtn := TBtnBmp2():New( 10, 10, 25, 25, 'printer_r2' , , , , , oDlg,
, , )
Exemplo 2 (Popup)
#INCLUDE 'PROTHEUS.CH'
User Function BtnBmpPopUp
Local oDlg
Local oBtn
DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 100,200 PIXEL
oBtn := TBtnBmp2():New( 10, 10, 13, 13, 'IBF-MENU.BMP' , 'IBF-MENU.BMP' ,
, , , oDlg, , , .T.)
oBtn:SetPopupmenu(TShowMenu())
ACTIVATE MSDIALOG oDlg CENTERED
Return
/**************************/
Static Function TShowMenu()
Local oMenu
oMenu := TMenu():New(0,0,0,0,.T.)
oMenu:Add(TMenuItem():New(,'Detalhes', 'Detalhes',,, ,,,,,,,,,.T.))
oMenu:Add(TMenuItem():New(,'Add Info', 'Add Info',,, ,,,,,,,,,.T.))
Return oMenu
TBUTTON()
;
Propriedades:
lProcessing
bAction
Parmetros:
Parmetro
anRow
anCol
acCaption
aoWnd
abAction
anWidth
anHeight
nPar8
aoFont
Tipo / Descrio
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
Caractere, opcional. Titulo do boto.
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
Numrico, opcional. Largura do boto em pixels.
Numrico, opcional. Altura do boto em pixels.
Reservado.
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.
- 69 ADVPL Avanado
lPar10
alPixel
lPar12
cPar13
lPar14
abWhen
bPar16
lPar17
;
Reservado.
Lgico, opcional. Se .T. considera as coordenadas passadas
em pixels, se .F. (padro) considera em caracteres.
Reservado.
Reservado.
Reservado.
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
Reservado.
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')
// Boto para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor '+cCombo )
Return NIL
- 70 ADVPL Avanado
TCBROWSE()
;
Propriedades:
+
nAt
nLen
Parmetros:
nRow
nCol
nWidth
nHeight
bFields
aHeaders
aColSizes
oDlg
cField
uValue1
uValue2
bChange
bLDblClick
bRClick
oFont
oCursor
nClrFore
nClrBack
cMsg
lUpdate
cAlias
lPixel
bWhen
lDesign
bValid
- 71 ADVPL Avanado
lHScroll
lVScroll
;
Mtodos auxiliares:
GoUp
Descrio: Salta uma linha para cima.
Sintaxe: GoUp( )
Parmetros:
Nenhum
Retorno:
Nil
GoDown
Descrio: Salta uma linha para baixo.
Sintaxe: GoDown( )
Parmetros:
Nenhum
Retorno:
Nil
GoTop
Descrio: Salta para primeira linha.
Sintaxe: GoTop( )
Parmetros:
Nenhum
Retorno:
Nil
GoBottom
Descrio: Salta para ultima linha.
Sintaxe: GoBottom( )
Parmetros:
Nenhum
Retorno:
- 72 ADVPL Avanado
Nil
RowCount
Descrio: Retorna numero de linhas visiveis.
Sintaxe: RowCount( )
Parmetros:
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. )
oBtn := TButton():New( 230, 060, 'nLen (Numero total de linhas)', oDlg,;
{|| Alert(oList:nLen) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtn := TButton():New( 240, 060, 'lEditCell (Edita a celula)', oDlg,;
{|| lEditCell(@aList,oList,'@!',3) }, 90, 010,,,.F.,.T.,.F.,,.F.,,,.F. )
ACTIVATE MSDIALOG oDlg CENTERED
return
- 74 ADVPL Avanado
TCHECKBOX()
;
Propriedades:
bLClicked
bSetGet
bWhen
bValid
Parmetros:
nRow
nCol
cCaption
bSetGet
oDlg
nWidth
nHeight
aHelpIds
bLClicked
oFont
bValid
nClrText
nClrPane
lDesign
lPixel
cMsg
lUpdate
bWhen
- 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.,,,)
oCheck4 :=TCheckBox():New(31,01,'CheckBox 004',,oDlg,
100,210,,,,,,,,.T.,,,)
oCheck5 := TCheckBox():New(41,01,'CheckBox
005',,oDlg,100,210,,,,,,,,.T.,,,)
- 76 ADVPL Avanado
TCOLORTRIANGLE()
;
Propriedades:
-
Parmetros:
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
Objeto, opcional. Janela ou controle onde a paleta dever
ser criada.
Numrico, opcional. Largura da paleta em pixels.
Numrico, opcional. Altura da paleta em pixels.
anRow
anCol
aoWnd
anWidth
anHeight
;
Mtodos auxiliares:
Create
Descrio: Mtodo construtor opcional da classe.
Sintaxe: Create(aoWnd)
Parmetros:
aoWnd
Retorno:
Objeto
RetColor
Descrio: Retorna o RGB da cor selecionada
Sintaxe: RetColor ( )
Parmetros:
Nenhum
Retorno:
Numrico
- 77 ADVPL Avanado
SetColorIni
Descrio: Define a cor inicial selecionada para o controle.
Sintaxe: SetColorIni (nColor )
Parmetros:
nColor
Retorno:
Nenhum
SetColor
Descrio: Define a cor corrente.
Sintaxe: SetColor (nColor )
Parmetros:
nColor
Retorno:
Nenhum
SetSizeTriangule
Descrio: Define o tamanho do tringulo de configurao das cores.
Sintaxe: SetSizeTriangule (nWidh, nHeight)
Parmetros:
nWidth
nHeight
Numrico. Largura
Numrico.Altura
Retorno:
Nenhum
;
Aparncia:
- 78 ADVPL Avanado
Exemplo:
#include protheus.ch
Propriedades:
aItems
nAt
Parmetros:
Parmetro
anRow
anCol
abSetGet
anItems
anWidth
anHeight
aoWnd
nPar8
abChange
abValid
anClrBack
anClrText
alPixel
aoFont
cPar15
lPar16
abWhen
lPar18
aPar19
bPar20
cPar21
acReadVar
Mtodos auxiliares:
Select
Descrio: Muda o item selecionado no combobox.
Sintaxe: Select( [anItem] )
Parmetros:
anItem
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')
// Boto para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor '+cCombo )
Return NIL
- 81 ADVPL Avanado
TFOLDER()
;
Propriedades:
aPrompts
aDialogs
nOption
bSetOption
Parmetros:
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
Array, Titulo dos folders
Array, Nome dos dilogos
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
Numrico, opcional. Folder selecionado
Numrico, opcional. Cor de frente
Numrico, opcional. Cor de fundo
Lgico, opcional. Utiliza coordenadas em pixel
Lgico, opcional. NO USADO
Numrico, opcional. Largura em pixels.
Numrico, opcional. Altura em pixels.
Caractere, Mensagem de Hint
Lgico, opcional. NO USADO
anTop
anLeft
aPrompts
aDialogs
aoWnd
anOption
anClrFore
anClrBack
alPixel
alDesign
anWidth
anHeight
acMsg
alAllWidth
;
Mtodos auxiliares:
SetOption
Descrio: Seleciona folder desejado
Sintaxe: SetOption( nOption )
Parmetros:
nOption
Retorno:
Nenhum
- 82 ADVPL Avanado
AddItem
Descrio: Insere um folder
Sintaxe: AddItem ( cItem, lVisible )
Parmetros:
cItem
lVisible
Retorno:
Nenhum
aEnable
Descrio: Habilita/Desabilita um folder
Sintaxe: aEnable( nItem, lEnable )
Parmetros:
nItem
lEnable
Retorno:
Nenhum
;
Aparncia:
- 83 ADVPL Avanado
Exemplo:
Local oFolder
Local aFolder := { 'Folder 1', 'Folder 2', 'Folder 3' }
oFolder := TFolder():New( 0, 0, aFolder, aFolder, oDlg,,,, .T., , 200,;
200 )
TGET()
;
Propriedades:
lPassword
Picture
Parmetros:
anRow
anCol
abSetGet
aoWnd
anWidth
anHeight
acPict
abValid
anClrFore
anClrBack
aoFont
lPar12
oPar13
alPixel
cPar15
lPar16
abWhen
lPar18
lPar19
abChange
alReadOnly
alPassword
cPar23
acReadVar
cPar25
lPar26
nPar27
lPar28
;
controle.
Reservado.
Reservado.
Lgico, opcional. Se .T. as coordenadas informadas so em
pixels, se .F. so em caracteres.
Reservado.
Reservado.
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
Reservado.
Reservado.
Bloco de cdigo, opcional. Executado quando o controle
modifica o valor da varivel associada.
Lgico, opcional. Se .T. o controle no poder ser editado.
Lgico, opcional. Se .T. o controle exibir asteriscos * no
lugar dos caracteres exibidos pelo controle para simular
entrada de senha.
Reservado.
Caractere, opcional. Nome da varivel que o controle dever
manipular, dever ser a mesma varivel informada no
parmetro abSetGet, e ser o retorno da funo ReadVar( ).
Reservado.
Reservado.
Reservado.
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')
// Boto para fechar a janela
oButton:=tButton():New(30,10,'fechar',oDlg,{||oDlg:End()},100,20,,,,.T.)
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop( 'O valor '+Transform(nGet1,'@E 999,999.00') )
Return NIL
TGROUP()
;
Propriedades:
-
Parmetros:
anTop
anLeft
anBottom
anRight
acCaption
aoWnd
anClrText
anClrPane
alPixel
lPar10
[acCaption],
- 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:
bAction
Parmetros:
Parmetro
anRow
anCol
acCaption
aoWnd
abAction
anWidth
anHeight
aoFont
abWhen
[aoWnd],
[abAction],
Tipo / Descrio
Numrico, opcional. Coordenada vertical em pixels ou
carateres.
Numrico, opcional. Coordenada horizontal em pixels ou
caracteres.
Caractere, opcional. Titulo do boto.
Objeto, opcional. Janela ou controle onde o boto dever ser
criado.
Bloco de cdigo, opcional. Bloco que dever ser acionado
quando o boto for pressionado.
Numrico, opcional. Largura do boto em pixels.
Numrico, opcional. Altura do boto em pixels.
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.
Bloco de cdigo, opcional. Executado quando mudana de
foco de entrada de dados est sendo efetuada na janela
onde o controle foi criado. O bloco deve retornar .T. se o
controle deve permanecer habilitado ou .F. se no.
Mtodos auxiliares:
Create
Descrio: Mtodo construtor opcional da classe.
Sintaxe: Create(aoWnd)
Parmetros:
aoWnd
Retorno:
Objeto
- 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:
nRow
nCol
nWidth
nHeigth
cPage
oWnd
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'
// Habilitar no Remote(Config) -> BrowserEnabled=1
oTIBrowser:=
TIBrowser():New(0,0,306,134,'http://www.microsiga.com.br',oDlg )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
- 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:
nAt
aItems
Construtor:
New([anRow], [anCol], [abSetGet], [aaItems], [anWidth],
[anHeigth],
[abChange],
[aoWnd],
[abValid],
[anClrFore],
[anClrBack], [alPixel], [lPar13], [abLDBLClick], [aoFont], [cPar16],
[lPar17], [abWhen], [aPar19], [bPar20], [lPar21], [lPar22],
[abRightClick] )
Parmetros:
anRow
anCol
abSetGet
aaItems
anWidth
anHeight
abChange
aoWnd
abValid
anClrFore
anClrBack
alPixel
lPar13
abLDBLClick
aoFont
cPar16
lPar17
abWhen
aPar19
bPar20
lPar21
lPar22
Reservado.
Reservado.
Reservado.
Reservado.
Bloco de cdigo, opcional. Executado quando acionado click
do boto direito do mouse sobre o controle.
abRightClick
;
Mtodos auxiliares:
Select
Descrio: Fora a seleo de um item.
Sintaxe: Select( [anItem] )
Parmetros:
nItem
Retorno:
Nenhum
Add
Descrio: Adiciona novo item.
Sintaxe: Add( cText, nPos )
Parmetros:
cText
nPos
Retorno:
Nenhum
Modify
Descrio: Modifica o texto de um item.
Sintaxe: Modify( cText, nPos )
Parmetros:
cText
nPos
Retorno:
Nenhum
- 92 ADVPL Avanado
Del
Descrio: Remove um item.
Sintaxe: Del( nPos )
Parmetros:
nPos
Retorno:
Nenhum
Len
Descrio: Retorna o nmero de itens.
Sintaxe: Len( )
Parmetros:
Nenhum
Retorno:
Numrico
Nmero de itens.
Reset
Descrio: Apaga todos os itens.
Sintaxe: Reset( )
Parmetros:
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:
nTop
nLeft
nHeight
nWidth
lPopUp
cBmpName
oWnd
nClrNoSelect
nClrSelect
cArrowUpNoSel
cArrowUpSel
cArrowDownNoSel
cArrowDownSel
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 )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
TMENUBAR()
;
Propriedades:
-
Construtor: New([oWnd])
Parmetros:
oWnd
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.)
// Cria Itens do Menu
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 01',,,,;
{||Alert('TMenuItem 01')},,'AVGLBPAR1',,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)
oTMenuItem := TMenuItem():New(oDlg,'TMenuItem 02',,,,;
{||Alert('TMenuItem 02')},,,,,,,,,.T.)
oTMenu1:Add(oTMenuItem)
oTMenu2:Add(oTMenuItem)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
TMETER()
;
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:
nTotal
lPercentage
nClrBar
Parmetros:
anRow
anCol
abSetGet
anTotal
aoWnd
anWidth
anHeight
lPar8
alPixel
oPar10
cPar11
alNoPerc
anClrPane
nPar14
anClrBar
nPar16
lPar17
;
Mtodos auxiliares:
Set
Descrio: Atualiza a posio da rgua de processamento.
Sintaxe: Set( [nVal] )
Parmetros:
nVal
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:
l3D
lAxisVisib
Construtor:
New([anRow],
[anCol],
[aoWnd],
[anClrBack], [anWidth], [anHeight])
Parmetros:
anRow
anCol
aoWnd
aoFont
anClrText
anClrBack
anWidth
anHeight
[aoFont],
[anClrText],
Mtodos auxiliares:
CreateSerie
Descrio: Mtodo para criao de uma serie para o grfico.
Sintaxe:
CreateSerie(
[nSerieType],
[cLegend],
[nDecimals],
[lShowValues] )
Parmetros:
nSerieType
cLegend
nDecimals
lShowValues
Retorno:
Numrico
Add
Descrio: Mtodo para adicionar um item ao grfico.
Sintaxe: Add(nSerie, nVal, cLegend, nColor )
Parmetros:
nSerie
nVal
cLegend
nColor
Retorno:
Nenhum
SetGradiente
Descrio: Mtodo para setar o fundo do grfico com uma cor gradiente
em determinada direo.
Sintaxe: SetGradient(nDirection, StartColor, EndColor )
Parmetros:
nDirection
StartColor
EndColor
Retorno:
Nenhum
SetTitle
Descrio: Define o titulo do grfico.
Sintaxe: SetTitle(cTitle, cTitle2, Color, Aligment, lFoot)
Parmetros:
cTitle
cTitle2
Color
Aligment
lFoot
Retorno:
Nenhum
SetLegenProp
Descrio: Mtodo para setar propriedades da legenda.
Sintaxe: SetLegenProp(Align, Color, Style, Visible )
Parmetros:
Align
Color
Style
Visible
Retorno:
Nenhum
SetMargins
Descrio: Mtodo para setar as margens superior, inferior e laterais do
grfico.
Sintaxe: SetMargins(nTop, nLeft, nBottom, nRight )
Parmetros:
nTop
nLeft
nBottom
nRight
Numrico.
Numrico.
Numrico.
Numrico.
Posio
Posio
Posio
Posio
em
em
em
em
relao
relao
relao
relao
ao topo do grfico.
a esquerda.
ao rodap.
a direita.
Retorno:
Nenhum
SetRangeY
Descrio: Define a escala dos valores do eixo Y
Sintaxe: SetRangeY (min, max, delta).
Parmetros:
Min
Max
delta
valor inicial
valor final
intervalo entre os valores [ opcional, calculado
automaticamente ]
Retorno:
Nenhum
SaveToBMP
Descrio: Mtodo para salvar o grfico atual em um bitmap no
server(Obsoleto, ver SaveToImage).
Sintaxe: SaveToBMP(BmpName, PathToWrite )
Parmetros:
BmpName
PathToWrite
Retorno:
Lgico
SaveToImage
Descrio: Mtodo para salvar o grfico atual em um formato de prdeterminado no server.
Sintaxe: SaveToImage(BmpName, PathToWrite, TypeImage)
Parmetros:
BmpName
PathToWrite
TypeImage
Retorno:
Lgico
DelSerie
Descrio: Mtodo para deletar uma srie do grafico.
Sintaxe: DelSerie ( nSerie )
Parmetros:
nSerie
Retorno:
Lgico
ZoomIn
Descrio: Mtodo para efetuar zoom interno ( + ).
Sintaxe: ZoomIn()
Parmetros:
Nenhum
Retorno:
Nenhum
ZoomOut
Descrio: Mtodo para efetuar zoom externo ( - ).
Sintaxe: ZoomOut()
Parmetros:
Nenhum
Retorno:
Nenhum
;
Aparncia:
Exemplo:
#include 'MSGRAPHI.CH'
User Function tMsGraphicTst()
DEFINE MSDIALOG oDlg TITLE '' FROM 0,0 TO 250,330 PIXEL
@ 001, 001 MSGRAPHIC oGraphic SIZE 120,120 OF oDlg
oGraphic:SetTitle('Titulo do Grafico', DTOC(Date()), CLR_BLACK,
A_LEFTJUST, GRP_TITLE )
oGraphic:SetMargins(2,6,6,6)
oGraphic:SetGradient(GDBOTTOMTOP, CLR_HGRAY, CLR_WHITE)
oGraphic:SetLegenProp(GRP_SCRRIGHT, CLR_HGRAY, GRP_AUTO,.T.)
nSerie
:=
oGraphic:CreateSerie( 10 )
oGraphic:l3D := .T. // Grafico em 3D
oGraphic:lAxisVisib
:= .T.
// Mostra os eixos
// Itens do Grafico
oGraphic:Add(nSerie,
oGraphic:Add(nSerie,
oGraphic:Add(nSerie,
oGraphic:Add(nSerie,
oGraphic:Add(nSerie,
oGraphic:Add(nSerie,
oGraphic:Add(nSerie,
200,
180,
210,
110,
100,
080,
110,
'Item01',
'Item02',
'Item03',
'Item04',
'Item05',
'Item06',
'Item07',
CLR_BLUE
CLR_RED
CLR_BLUE
CLR_BLUE
CLR_BLUE
CLR_BLUE
CLR_BLUE
)
)
)
)
)
)
)
TMSGBAR()
;
Propriedades:
-
Parmetros:
Objeto, opcional. Janela ou controle onde a boto dever ser
criado
Caracter. Descrio na Barra
Logico. Define centralizao do texto
Nao utilizado
Nao utilizado
Nao utilizado
Numerico, opcional. Define cor da fonte da barra
Numerico, opcional. Define cor do fundo da barra
Objeto, opcional. Objeto tipo tFont com propriedades da
fonte utilizada para o ttulo do boto.
Nao utilizado
Caracter, opcional. Insere figura lateral esquerda
oWnd
cPrompt
lCentered
lClock
lDate
lKbd
nClrFore
nClrBack
oFont
lInset
imageName
;
Mtodos auxiliares:
AddItem
Descrio: Mtodo insere um subitem no rodap
Sintaxe: AddItem( oTMsgItem )
Parmetros:
Objeto do tipo TMsgItem que ser inserido como subitem
do rodap.
oTMsgItem
Retorno:
Nenhum
SetMsg
Descrio: Define a descrio da barra de rodap
Sintaxe: SetMsg(cTexto )
Parmetros:
cTexto
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')} )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
TMSGITEM()
;
Propriedades:
-
Parmetros:
oMsgBar
cMsg
nSize
oFont
nClrFore
nClrBack
lEnable
bAction
cImagem
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')} )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
.
TMULTIBTN()
;
Propriedades:
bAction
Parmetros:
nRow
nCol
oWnd
bAction
nWidth
nHeigth
imgName
ori
cMsg
btnPerLine
[nWidth],
Mtodos auxiliares:
LoadImage
Descrio: Muda a figura a esquerda do componente
Sintaxe: LoadImage(cImagem)
Parmetros:
cImagem
Retorno:
Nenhum
AddButton
Descrio: Insere um boto
Sintaxe: AddButton(cTexto)
Parmetros:
cTexto
Retorno:
Nenhum
SetTitle
Descrio: Muda o titulo e o numero de botes por linha
Sintaxe: SetTitle(cTexto, nBotoes)
Parmetros:
cTexto
nBotoes
Retorno:
Nenhum
SetFonts
Descrio: Muda a font do titulo e dos botes
Sintaxe: SetTitle(cFontTit, nSizeTit, nFontBut, nSizeBut)
Parmetros:
cFontTit
nSizeTit
nFontBut
nSizeBut
Retorno:
Nenhum
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 304,504 PIXEL TITLE 'Exemplo'
otMultiBtn := tMultiBtn():New( 01,01,'cTitle1',oDlg,;
{|x|Alert(Str(x)) },200,150,'afastamento',0,'cTitle',3
)
otMultiBtn:SetFonts('Tahoma',16,'Tahoma',10)
otMultiBtn:AddButton('btn01')
otMultiBtn:AddButton('btn02')
otMultiBtn:AddButton('btn04')
otMultiBtn:AddButton('btn05')
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
.
TMULTIGET()
;
Propriedades:
lWordWrap
Parmetros:
Parmetro
anRow
anCol
abSetGet
aoWnd
anWidth
anHeight
aoFont
alHScroll
anClrFore
anClrBack
oPar11
alPixel
cPar13
lPar14
abWhen
lPar16
lPar17
alReadOnly
abValid
bPar20
lPar21
alNoBorder
alNoVScroll
;
Mtodos auxiliares:
EnableVScroll
Descrio: Habilita a barra de rolagem vertical.
Sintaxe: EnableVScroll( lEnable )
Parmetros:
Lgico, obrigatrio. Se .T. habilita se .F. desabilita a barra
de rolagem.
lEnable
Retorno:
Nenhum
EnableHScroll
Descrio: Habilita a barra de rolagem horizontal.
Sintaxe: EnableHScroll( lEnable )
Parmetros:
Lgico, obrigatrio. Se .T. habilita se .F. desabilita a barra
de rolagem.
lEnable
Retorno:
Nenhum
Aparncia:
Exemplo:
#include protheus.ch
User Function Teste()
Local oDlg, oMemo, cMemo:= space(50)
DEFINE MSDIALOG oDlg FROM 0,0 TO 400,400 PIXEL TITLE My test
oMemo:= tMultiget():New(10,10,{|u|if(Pcount()>0,cMemo:=u,cMemo)};
,oDlg,100,100,,,,,,.T.)
@ 200,10 BUTTON oBtn PROMPT Fecha OF oDlg PIXEL ACTION oDlg:End()
ACTIVATE MSDIALOG oDlg CENTERED
MsgStop(cMemo)
Return NIL
TOLECONTAINER()
;
Propriedades:
-
Parmetros:
nRow
nCol
nWidth
nHeight
oWnd
lAutoActivate
cFileName
Numrico, opcional.
carateres.
Numrico, opcional.
caracteres.
Numrico, opcional.
Numrico, opcional.
Mtodos auxiliares:
OpenFromFile
Descrio: Abre arquivo do tipo OLE.
Sintaxe: New([cFileName, [lAsIcon], [allowInPlace])
Parmetros:
cFileName
lAsIcon
allowInPlace
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' )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
TPAGEVIEW()
;
Propriedades:
-
Parmetros:
Numrico, opcional.
carateres.
Numrico, opcional.
caracteres
Numrico, opcional.
Numrico, opcional.
nCol
nRow
nWidth
nHeigth
oPrinter
oWnd
nPageWidth
nPageHeight
;
Mtodos auxiliares:
PageSize
Descrio: Define o tamanho da pagina.
Sintaxe: AddItem(nLargura, nAltura)
Parmetros:
nLargura
nAltura
Lagura da pgina
Altura da pgina
Retorno:
Nenhum
PrintPage
Descrio: Imprime uma determinada pgina.
Sintaxe: PrintPage(nNrPagina)
Parmetros:
nNrPagina
Retorno:
Nenhum
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
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
TPANEL()
;
Propriedades:
-
Parmetros:
anRow
anCol
acText
aoWnd
alCentered
lPar6
anClrText
anClrBack
anWidth
anHeight
alLowered
alRaised
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'
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:
bChange
bSetGet
bWhen
bValid
Parmetros:
nRow
nCol
aItems
bSetGet
oDlg
aHelpIds
bChange
nClrText
nClrPane
cMsg
lUpdate
bWhen
nWidth
nHeight
bValid
lDesign
l3d
lPixel
Mtodos auxiliares:
SetOption
Descrio: Seleciona um item.
Sintaxe: SetOption(nItem)
Parmetros:
nItem
Retorno:
Nenhum
EnableItem
Descrio: Habilita/Desabilita um Item
Sintaxe: EnableItem(nItem, lStatus)
Parmetros:
nItem
lStatus
Retorno:
Nenhum
Enable
Descrio: Habilita um item.
Sintaxe: Enable(nItem)
Parmetros:
nItem
Retorno:
Nenhum
Disable
Descrio: Desabilita um item
Sintaxe: Disable(nItem)
Parmetros:
nItem
Retorno:
Nenhum
;
Aparncia:
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. )
ACTIVATE MSDIALOG oDlg CENTERED
Return
TSBROWSE()
;
Propriedades:
+
nAt
nLen
Parmetros:
nRow
nCol
nWidth
nHeight
oWnd
bChange
nHWidth
oFont
nLines
;
Mtodos auxiliares:
GoUp
Descrio: Salta uma linha para cima.
Sintaxe: GoUp( )
Parmetros:
Nenhum
Retorno:
Nil
GoDown
Descrio: Salta uma linha para baixo.
Sintaxe: GoDown( )
Parmetros:
Nenhum
Retorno:
Nil
GoTop
Descrio: Salta para primeira linha.
Sintaxe: GoTop( )
Parmetros:
Nenhum
Retorno:
Nil
GoBottom
Descrio: Salta para ultima linha.
Sintaxe: GoBottom( )
Parmetros:
Nenhum
Retorno:
Nil
RowCount
Descrio: Retorna numero de linhas visiveis.
Sintaxe: RowCount( )
Parmetros:
Nenhum
Retorno:
Nil
LEditCell
Descrio: Edita o valor de uma coluna.
Sintaxe: lEditCell( aList, oList, cPicture, nCol )
Parmetros:
aList
oList
cPicture
nCol
Retorno:
Nil
Aparncia:
Exemplo:
#include 'protheus.ch'
User Function Teste()
Local oDlg
DEFINE MSDIALOG oDlg FROM 0,0 TO 302,402 PIXEL TITLE 'Exemplo'
aBrowse
001'},;
001'},;
{'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE 001'}
}
oBrowse := TSBrowse():New(01,01,245,150,oDlg,,16,,5)
nForeCor := CLR_GRAY
nBackCor := CLR_WHITE
oBrowse:AddColumn( TcColumn():New('Nome',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:AddColumn( TcColumn():New('Endereo',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:AddColumn( TcColumn():New('Bairro',,,{|| nForeCor },{||
nBackCor }) )
oBrowse:SetArray(aBrowse)
// 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.)
TSAY()
;
Propriedades:
lWordWrap
lTransparent
Parmetros:
anRow
anCol
abText
aoWnd
acPicture
aoFont
lPar7
lPar8
lPar9
alPixels
anClrText
anClrBack
anWidth
anHeight
lPar15
lPar16
lPar17
lPar18
lPar19
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
TSCROLLBOX()
;
Propriedades:
-
Parmetros:
aoWnd
anTop
anLeft
anHeight
anWidth
alVertical
alHorizontal
alBorder
[anHeight],
[anWidth],
Aparncia:
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:
anRow
anCol
aoWnd
anWidth
anHeight
acText
alReadOnly
Mtodos auxiliares:
Create
Descrio: Mtodo construtor opcional da classe.
Sintaxe: Create( aoWnd )
Parmetros:
aoWnd
Retorno:
Objeto
Load
Descrio: Carrega um texto para o editor.
Sintaxe: Load( acTexto )
Parmetros:
acTexto
Retorno:
Nenhum
TextBold
Descrio: Texto em Negrito.
Sintaxe: TextBold( alBold )
Parmetros:
alBold
Retorno:
Nenhum
TextUnderline
Descrio: Texto Sublinhado.
Sintaxe: TextUnderline( alUnderline )
Parmetros:
alUnderline
Retorno:
Nenhum
TextItalic
Descrio: Texto Itlico.
Sintaxe: TextItalic( alItalic )
Parmetros:
alItalic
Retorno:
Nenhum
TextFamily
Descrio: Famlia de fontes.
Sintaxe: TextFamily( acFamily )
Parmetros:
acFamily
Retorno:
Nenhum
TextSize
Descrio: Tamanho da fonte.
Sintaxe: TextSize( anSize )
Parmetros:
anSize
Retorno:
Nenhum
TextStyle
Descrio: Estilo do pargrafo.
Sintaxe: TextStyle( anStyle )
Parmetros:
Numrico. Estilo do pargrafo a ser utilizada na sesso do
texto.
anStyle
1
2
3
4
5
6
7
Normal
Disco (Bullet)
Circulo (Bullet)
Quadrado (Bullet)
Ordem decimal
Ordem alfanumrica minsculo
Ordem alfanumrica maisculo
Retorno:
Nenhum
TextAlign
Descrio: Alinhamento do texto.
Sintaxe: TextAlign( anAlign )
Parmetros:
anAlign
Retorno:
Nenhum
TextFormat
Descrio: Formato do texto.
Sintaxe: TextFormat( anFormat )
Parmetros:
anFormat
Retorno:
Nenhum
RetText
Descrio: Retorna o texto em formato string.
Sintaxe: RetText( void )
Parmetros:
void
Retorno:
Nenhum
RetTextSel
Descrio: Retorna o texto selecionado em formato string..
Sintaxe: RetText()
Parmetros:
Nenhum
Retorno:
String
Texto selecionado.
TextStatus
Descrio: Retorna um array com as propriedades do texto posicionado.
Sintaxe: TextStatus()
Parmetros:
Nenhum
Retorno:
Retorna um array com as seguintes propriedades
Array
1
2
3
4
5
6
Lgico Negrito
Lgico Itlico
Lgico Sublinhado
Caracter RGB da cor
Caracter Tamanho da fonte
Caracter Fonte
Aparncia:
Exemplo:
#include protheus.ch
TSLIDER()
;
Propriedades:
bChange
Parmetros:
anRow
anCol
aoWnd
abChange
anWidth
anHeight
acMsg
abWhen
[abChange],
[anWidth],
Mtodos auxiliares:
Create
Descrio: Mtodo construtor da classe.
Sintaxe: Create( aoWnd )
Parmetros:
aoWnd
Retorno:
Objeto
setRange
Descrio: Especifica a faixa de valores.
Sintaxe: setRange( min, max )
Parmetros:
Min
Max
Retorno:
Nenhum
setMarks
Descrio: Especifica o tipo de marcao do boto.
Sintaxe: setMarks( nTipo )
Parmetros:
nTipo
Max
Retorno:
Nenhum
setInterval
Descrio: Especifica a distncia entre um marcador e outro.
Sintaxe: setInterval( nInterval )
Parmetros:
nInterval
Retorno:
Nenhum
setValue
Descrio: Especifica um valor para o boto.
Sintaxe: setValue( nVal )
Parmetros:
nVal
Retorno:
Nenhum
setStep
Descrio: Especifica o valor dos passos do boto.
Sintaxe: setStep( nStep )
Parmetros:
nStep
Retorno:
Nenhum
setOrient
Descrio: Especifica a orientao do boto, horizontal ou vertical.
Sintaxe: setOrient( nOrient )
Parmetros:
nOrient
Retorno:
Nenhum
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:
anRow
anCol
aoWnd
anWidth
anHeight
anOrientation
[anCol],
[aoWnd],
[anWidth],
[anHeight],
Mtodos auxiliares:
Create
Descrio: Mtodo construtor da classe.
Sintaxe: Create( aoWnd )
Parmetros:
aoWnd
Retorno:
Objeto
setOrient
Descrio: Especifica a orientao do divisor, horizontal ou vertical.
Sintaxe: setOrient( nOrient )
Parmetros:
nOrient
Retorno:
Nenhum
setChildCollapse
Descrio: Especifica se os elementos podem ser collapsibles.
Sintaxe: setChildCollpse( lColl )
Parmetros:
lColl
Retorno:
Nenhum
setCollapse
Descrio: Especifica o objeto que pode ser collapsible.
Sintaxe: setCollapse( oObj, lColl )
Parmetros:
oObj
lColl
Retorno:
Nenhum
movToLast
Descrio: Coloca o objeto como ultimo das divises.
Sintaxe: movToLast( oObj )
Parmetros:
oObj
Retorno:
Nenhum
movToFirst
Descrio: Coloca o objeto como primeiro das divises.
Sintaxe: movToFirst( oObj )
Parmetros:
oObj
Retorno:
Nenhum
setOpaqueResize
Descrio: Especifica se o resize deve ser opaco.
Sintaxe: setOpaqueResize( lOpaq )
Parmetros:
lOpaq
Retorno:
Nenhum
setResizeMode
Descrio: Especifica o mode de resize do objeto..
Sintaxe: setResizeMode ( oObj, nMode )
Parmetros:
oObj
nMode
Retorno:
Nenhum
Aparncia:
Exemplo:
#include protheus.ch
#include hbutton.ch
User Function MytSplitter()
Local oDlg, oSplitter, oPanel1, oPanel2, oPanel3
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu tSplitter
// Usando o mtodo create
oSplitter := tSplitter():Create( oDlg )
@ 1, 1 MSPANEL oPanel1 OF oSplitter
@ 1, 2 MSPANEL oPanel2 OF oSplitter
@ 1, 3 MSPANEL oPanel3 OF oSplitter
// Usando o command
@ 1, 1 SPLITTER oSplitter
@ 1, 1 MSPANEL oPanel1 OF
@ 1, 2 MSPANEL oPanel2 OF
@ 1, 3 MSPANEL oPanel3 OF
TTABS()
;
Propriedades:
-
Parmetros:
anTop
anLeft
aPrompts
bAction
oWnd
nOption
nClrFore
nClrBack
lPixel
lDesign
nWidth
nHeigth
cMsg
Mtodos auxiliares:
AddItem
Descrio: Adiciona uma aba na pasta
Sintaxe: AddItem(cTtulo)
Parmetros:
cTtulo
Retorno:
Nenhum
SetOption
Descrio: Seleciona a Aba
Sintaxe: SetOption( nNrAba )
Parmetros:
nNrAba
Retorno:
Nenhum
Aparncia:
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. )
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
TTOOLBOX()
;
Propriedades:
bChangeGrp
Parmetros:
anRow
anCol
aoWnd
anWidth
anHeight
aoFont
acMsg
abWhen
Mtodos auxiliares:
Create
Descrio: Mtodo construtor opcional da classe.
Sintaxe: Create( aoWnd )
Parmetros:
aoWnd
Retorno:
Objeto
addGroup
Descrio: Adiciona um grupo
Sintaxe: addGroup( aoObj, acName, aoIcon )
Parmetros:
aoObj
acName
aoIcon
Retorno:
Nenhum
removeGroup
Descrio: Remove um grupo
Sintaxe: removeGroup( aoObj )
Parmetros:
aoObj
Retorno:
Nenhum
setCurrentGroup
Descrio: Define o grupo corrente
Sintaxe: setCurrentGroup( aoObj )
Parmetros:
aoObj
Retorno:
Nenhum
Aparncia:
Exemplo:
#include protheus.ch
User Function MytToolbox()
Local oDlg, oTb
DEFINE MSDIALOG oDlg FROM 0,0 TO 500,600 PIXEL TITLE Meu Toolbox
// Usando o mtodo create
oTb:= tToolbox():Create( oDlg )
oTb:nTop
:= 100
oTb:nLeft
:= 10
oTb:nWidth
:= 100
oTb:nHeight
:= 30
oTb:Add( oPanel, Opo 1, oIcone)
// Usando o command
@ 200,100 TOOLBOX oTb SIZE 100,30 OF oDlg
TOOLBOX oTb ADDGROUP TITLE Opo 1 OBJECT oPanel ICON oIcone
ACTIVATE MSDIALOG oDlg CENTERED
Return Nil
TWBROWSE()
;
Propriedades:
+
nAt
nLen
Parmetros:
nRow
nCol
nWidth
nHeight
bFields
aHeaders
aColSizes
oDlg
cField
uValue1
uValue2
bChange
bLDblClick
bRClick
oFont
oCursor
nClrFore
nClrBack
cMsg
lUpdate
cAlias
lPixel
bWhen
lDesign
bValid
lHScroll
lVScroll
;
Mtodos auxiliares:
GoUp
Descrio: Salta uma linha para cima.
Sintaxe: GoUp( )
Parmetros:
Nenhum
Retorno:
Nil
GoDown
Descrio: Salta uma linha para baixo.
Sintaxe: GoDown( )
Parmetros:
Nenhum
Retorno:
Nil
GoTop
Descrio: Salta para primeira linha.
Sintaxe: GoTop( )
Parmetros:
Nenhum
Retorno:
Nil
GoBottom
Descrio: Salta para ultima linha.
Sintaxe: GoBottom( )
Parmetros:
Nenhum
Retorno:
- 148 ADVPL Avanado
Nil
RowCount
Descrio: Retorna numero de linhas visiveis.
Sintaxe: RowCount( )
Parmetros:
Nenhum
Retorno:
Nil
LEditCell
Descrio: Edita o valor de uma coluna.
Sintaxe: lEditCell( aList, oList, cPicture, nCol )
Parmetros:
aList
oList
cPicture
nCol
Retorno:
Nil
;
Aparncia:
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 := TWBrowse():New( 01 , 01, 245, 150,,;
{'','Codigo','Descrio'},{20,30,30}, oDlg, ,,,,;
{||},,,,,,,.F.,,.T.,,.F.,,, )
aBrowse
:= {{.T.,'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{.F.,'CLIENTE 002','RUA CLIENTE 002','BAIRRO CLIENTE
002'},;
{.T.,'CLIENTE 003','RUA CLIENTE 003','BAIRRO CLIENTE
003'} }
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.)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
VCBROWSE()
;
Propriedades:
+
nAt
nLen
Parmetros:
nRow
nCol
nWidth
nHeight
bFields
aHeaders
aColSizes
oDlg
cField
uValue1
uValue2
bChange
bLDblClick
bRClick
oFont
oCursor
nClrFore
nClrBack
cMsg
lUpdate
cAlias
lPixel
bWhen
lDesign
No Utilizado
Bloco de cdigo, opcional. Executado quando o contedo do
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
horizontal.
Lgico, opcional. Se .T., habilita barra de rolagem vertical.
bValid
lHScroll
lVScroll
;
Mtodos auxiliares:
GoUp
Descrio: Salta uma linha para cima.
Sintaxe: GoUp( )
Parmetros:
Nenhum
Retorno:
Nil
GoDown
Descrio: Salta uma linha para baixo.
Sintaxe: GoDown( )
Parmetros:
Nenhum
Retorno:
Nil
GoTop
Descrio: Salta para primeira linha.
Sintaxe: GoTop( )
Parmetros:
Nenhum
Retorno:
Nil
GoBottom
Descrio: Salta para ultima linha.
Sintaxe: GoBottom( )
Parmetros:
Nenhum
Retorno:
Nil
RowCount
Descrio: Retorna numero de linhas visiveis.
Sintaxe: RowCount( )
Parmetros:
Nenhum
Retorno:
Nil
LEditCell
Descrio: Edita o valor de uma coluna.
Sintaxe: lEditCell( aList, oList, cPicture, nCol )
Parmetros:
aList
oList
cPicture
nCol
Retorno:
Nil
Aparncia:
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 := VCBrowse():New( 01 , 01, 245, 150,,;
{'','Codigo','Descrio'},{20,30,30}, oDlg, ,,,,;
{||},,,,,,,.F.,,.T.,,.F.,,, )
aBrowse
:= {{.T.,'CLIENTE 001','RUA CLIENTE 001','BAIRRO CLIENTE
001'},;
{.F.,'CLIENTE 002','RUA CLIENTE 002','BAIRRO CLIENTE
002'},;
{.T.,'CLIENTE 003','RUA CLIENTE 003','BAIRRO CLIENTE
003'} }
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.)
ACTIVATE MSDIALOG oDlg CENTERED
Return NIL
R
0
0
0
0
255
255
255
255
G
0
0
255
255
0
0
255
255
B
0
255
0
255
0
255
0
255
Valor
0
16711680
65280
16776960
255
16711935
65535
16777215
Para atribuir as cores aos objetos visuais devem ser observados os atributos utilizados para
estes fins em cada objeto, como por exemplo:
MSDIALOG()
nClrPane
nClrText
TSAY()
nClrPane
nClrText
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.
RGB(nRed, nGreen, nBlue)
nRed
nGreen
nBlue
Retorno
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:
cAlias
nReg
nOpc
aCRA
cLetra
cTexto
aAcho
aPos
aCpos
nModelo
nColMens
cMensagem
cTudoOk
oWnd
lF3
lMemoria
lColumn
caTela
lNoFolder
lProperty
#include "protheus.ch"
/*/
+----------------------------------------------------------------------------| Funo
| MBRWENCH
| Autor | ARNALDO RAYMUNDO JR.|Data |
|
+----------------------------------------------------------------------------| Descrio | Programa que demonstra a utilizao da funo Enchoice()
|
+----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------------/*/
User Function MrbwEnch()
Private cCadastro := " Cadastro de Clientes"
Private aRotina
:=
{{"Pesquisar"
, "axPesqui"
{"Visualizar"
, "U_ModEnc"
DbSelectArea("SA1")
DbSetOrder(1)
MBrowse(6,1,22,75,"SA1")
Return
User Function ModEnc(cAlias,nReg,nOpc)
Local aCpoEnch
Local aAlter
:= {}
:= {}
Local cAliasE
:=
Local aAlterEnch :=
Local aPos
:=
Local nModelo
:=
Local lF3
:=
Local lMemoria
:=
Local lColumn
:=
Local caTela
:=
Local lNoFolder
:=
Local lProperty
:=
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]
cAlias
{}
{000,000,400,600}
3
.F.
.T.
.F.
""
.F.
.F.
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
, 0, 1},;
, 0, 2}}
Exemplo (continuao):
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterEnch := aClone(aCpoEnch)
DEFINE MSDIALOG oDlg TITLE cCadastro FROM 000,000 TO 400,600 PIXEL
RegToMemory("SA1", If(nOpc==3,.T.,.F.))
Enchoice(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/, /*cTexto*/, ;
aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/,/*cTudoOk*/, oDlg, lF3, lMemoria, lColumn,;
caTela, lNoFolder, lProperty)
ACTIVATE MSDIALOG oDlg CENTERED
Return
5.1.2. MsMGet()
;
;
;
lMemoria
lColumn
caTela
lNoFolder
lProperty
#include "protheus.ch"
/*/
+----------------------------------------------------------------------------| Funo
| MBRWMSGET | Autor | ARNALDO RAYMUNDO JR. |Data |
|
+----------------------------------------------------------------------------| Descrio | Programa que demonstra a utilizao do objeto MsMget()
|
+----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------------/*/
User Function MrbwMsGet()
Private cCadastro := " Cadastro de Clientes"
Private aRotina
:=
{{"Pesquisar"
, "axPesqui"
{"Visualizar"
, "U_ModEnc"
DbSelectArea("SA1")
DbSetOrder(1)
MBrowse(6,1,22,75,"SA1")
Return
User Function ModEnc(cAlias,nReg,nOpc)
Local aCpoEnch
:= {}
Local aAlter
:= {}
Local cAliasE
Local aAlterEnch :=
Local aPos
:=
Local nModelo
:=
Local lF3
:=
Local lMemoria
:=
Local lColumn
Local caTela
Local lNoFolder
:=
Local lProperty
:=
Private oDlg
Private oGetD
Private oEnch
Private aTELA[0][0]
Private aGETS[0]
:= cAlias
{}
{000,000,400,600}
3
.F.
.T.
:= .F.
:= ""
.F.
.F.
, 0, 1},;
, 0, 2}}
Exemplo (continuao):
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "A1_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterEnch := aClone(aCpoEnch)
oDlg
:= MSDIALOG():New(000,000,400,600,cCadastro,,,,,,,,,.T.)
RegToMemory(cAliasE, If(nOpc==3,.T.,.F.))
oEnch := MsMGet():New(cAliasE, nReg, nOpc, /*aCRA*/, /*cLetra*/,;
/*cTexto*/, aCpoEnch, aPos, aAlterEnch, nModelo, /*nColMens*/,;
/*cMensagem*/, /*cTudoOk*/,oDlg,lF3,lMemoria,lColumn, caTela,;
lNoFolder, lProperty)
oDlg:lCentered := .T.
oDlg:Activate()
Return
MSGETDB()
MSGETDADOS()
MSNEWGETDADOS()
; Grids no digitveis: permitem somente a visualizao de informaes, comumente
utilizados como browses do ERP Protheus, tais como:
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.
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.
;
Sintaxe:
Parmetros:
nTop
nLeft
nBottom
nRight
nOpc
cLinhaOk
cTudoOk
cIniCpos
lDelete
aAlter
nFreeze
lEmpty
uPar1
cFieldOk
cTRB
lCondicional
lAppend
cDelOk
lDisparos
uPar2
cSuperDel
oWnd
Aparncia:
Variveis private:
aRotina
aHeader
Pesquisar
Visualizar
Incluir
Alterar
Excluir
lRefresh
Variveis pblicas:
nBrLin
Funes de validao:
cLinhaOk
cTudoOk
Mtodos adicionais:
ForceRefresh()
#include protheus.ch
/*/
+----------------------------------------------------------------------------| Funo
| GETDBSA1
| Autor | MICROSIGA
|Data |
|
+----------------------------------------------------------------------------| Descrio | Programa que demonstra a utilizao do objeto MsGetDB()
|
+----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------------/*/
User Function GetDbSA1()
Local
Local
Local
Local
Local
nI
oDlg
oGetDB
nUsado := 0
aStruct := {}
Private
Private
Private
Private
lRefresh := .T.
aHeader := {}
aCols := {}
aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")
Exemplo (continuao):
While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
AADD(aStruct,{SX3->X3_CAMPO,SX3->X3_TIPO,SX3->X3_TAMANHO,;
SX3->X3_DECIMAL})
EndIf
DbSkip()
End
AADD(aStruct,{"FLAG","L",1,0})
cCriaTrab := CriaTrab(aStruct,.T.)
DbUseArea(.T.,__LocalDriver,cCriaTrab,,.T.,.F.)
oDlg
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:
nTop
nLeft
nBottom
nRight
nOpc
cLinhaOk
cTudoOk
cIniCpos
lDelete
aAlter
uPar1
lEmpty
nMax
cFieldOk
cSuperDel
uPar2
cDelOk
oWnd
Aparncia:
Variveis private:
aRotina
aHeader
lRefresh
Variveis pblicas:
N
Funes de validao:
cLinhaOk
cTudoOk
Mtodos adicionais:
ForceRefresh()
Hide()
Show()
#include protheus.ch
/*/
+----------------------------------------------------------------------------| Funo
| GETDADOSA1 | Autor | MICROSIGA
|Data |
|
+----------------------------------------------------------------------------| Descrio | Programa que demonstra a utilizao do objeto MSGETADOS()
|
+----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------------/*/
User Function GetDadoSA1()
Local nI
Local oDlg
Local oGetDados
Local nUsado := 0
Private lRefresh := .T.
Private aHeader := {}
Private aCols := {}
Private aRotina := {{"Pesquisar", "AxPesqui", 0, 1},;
{"Visualizar", "AxVisual", 0, 2},;
{"Incluir", "AxInclui", 0, 3},;
{"Alterar", "AxAltera", 0, 4},;
{"Excluir", "AxDeleta", 0, 5}}
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek("SA1")
Exemplo (continuao):
While !Eof() .and. SX3->X3_ARQUIVO == "SA1"
If X3Uso(SX3->X3_USADO) .and. cNivel >= SX3->X3_NIVEL
nUsado++
AADD(aHeader,{Trim(X3Titulo()),;
SX3->X3_CAMPO,;
SX3->X3_PICTURE,;
SX3->X3_TAMANHO,;
SX3->X3_DECIMAL,;
SX3->X3_VALID,;
"",;
SX3->X3_TIPO,;
"",;
"" })
EndIf
DbSkip()
End
AADD(aCols,Array(nUsado+1))
For nI := 1 To nUsado
aCols[1][nI] := CriaVar(aHeader[nI][2])
Next
aCols[1][nUsado+1] := .F.
oDlg
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:
nSuperior
nEsquerda
nInferior
nDireita
nOpc
cLinOk
cTudoOk
cIniCpos
aAlterGDa
nFreeze
nMax
cFieldOk
cSuperDel
cDelOk
oDLG
aHeader
aCols
Aparncia:
Variveis private:
aRotina
aHeader
Pesquisar
Visualizar
Incluir
Alterar
Excluir
lRefresh
Variveis pblicas:
N
Funes de validao:
cLinhaOk
cTudoOk
Mtodos adicionais:
ForceRefresh()
Hide()
Show()
#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
|
+----------------------------------------------------------------------------/*/
User Function MrbwGetD()
Private cCadastro := "Pedidos de Venda"
Private aRotina
:=
{{"Pesquisar"
{"Visualizar"
{"Incluir"
, "axPesqui"
, "U_ModGtd"
, "U_ModGtd"
DbSelectArea("SC5")
DbSetOrder(1)
MBrowse(6,1,22,75,"SC5")
Return
User Function ModGtd(cAlias,nReg,nOpc)
Local
Local
Local
Local
Local
Local
nX
nUsado
aButtons
aCpoEnch
cAliasE
aAlterEnch
:=
:=
:=
:=
:=
:=
0
0
{}
{}
cAlias
{}
, 0, 1},;
, 0, 2},;
, 0, 3}}
Exemplo (continuao):
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
aPos
nModelo
lF3
lMemoria
lColumn
caTela
lNoFolder
lProperty
aCpoGDa
cAliasGD
nSuperior
nEsquerda
nInferior
nDireita
cLinOk
cTudoOk
cIniCpos
nFreeze
nMax
cFieldOk
cSuperDel
cDelOk
aHeader
aCols
aAlterGDa
Private
Private
Private
Private
Private
:=
:=
:=
:=
:=
:=
:=
:=
{000,000,080,400}
3
.F.
.T.
:= .F.
:= ""
.F.
.F.
:= {}
"SC6"
:= 081
:= 000
:= 250
:= 400
:= "AllwaysTrue"
:= "AllwaysTrue"
:= "C6_ITEM"
:= 000
:= 999
:= "AllwaysTrue"
:= ""
:= "AllwaysFalse"
:= {}
:= {}
{}
oDlg
oGetD
oEnch
aTELA[0][0]
aGETS[0]
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterEnch := aClone(aCpoEnch)
DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If
!(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And.;
cNivel >= SX3->X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End
- 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
oDlg
:= MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))
oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/,/*cTexto*/,;
aCpoEnch,aPos,aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
/*cTudoOk*/, oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,;
lProperty)
oGetD:= MsNewGetDados():New(nSuperior, nEsquerda, nInferior, nDireita,;
nOpc,cLinOk,cTudoOk, cIniCpos, aAlterGDa, nFreeze, nMax,cFieldOk,;
cSuperDel,cDelOk, oDLG, aHeader, aCols)
oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()},{||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return
5.2.3.1.
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
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:
#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
|
+----------------------------------------------------------------------------/*/
User Function MrbwGtCl()
Private cCadastro := "Pedidos de Venda"
Private aRotina
:=
{{"Pesquisar"
{"Visualizar"
{"Incluir"
, "axPesqui"
, "U_ModGtd"
, "U_ModGtd"
DbSelectArea("SC5")
DbSetOrder(1)
MBrowse(6,1,22,75,"SC5")
Return
User Function ModGtd(cAlias,nReg,nOpc)
Local nX
:= 0
Local nUsado
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
aButtons
aCpoEnch
cAliasE
aAlterEnch
aPos
nModelo
lF3
lMemoria
lColumn
caTela
lNoFolder
lProperty
aCpoGDa
cAliasGD
nSuperior
nEsquerda
nInferior
nDireita
cLinOk
cTudoOk
cIniCpos
nFreeze
nMax
:= 0
:= {}
:= {}
:= cAlias
{}
{000,000,080,400}
3
.F.
.T.
:= .F.
:= ""
:= .F.
:= .F.
:= {}
:= "SC6"
:= 081
:= 000
:= 250
:= 400
:= "AllwaysTrue"
:= "AllwaysTrue"
:= "C6_ITEM"
:= 000
:= 999
:=
:=
:=
:=
:=
, 0, 1},;
, 0, 2},;
, 0, 3}}
Exemplo (continuao):
Local
Local
Local
Local
Local
Local
cFieldOk
cSuperDel
cDelOk
aHeader
aCols
aAlterGDa
Private
Private
Private
Private
Private
:=
:=
:=
:=
:=
"AllwaysTrue"
""
"AllwaysFalse"
{}
{}
:= {}
oDlg
oGetD
oEnch
aTELA[0][0]
aGETS[0]
DbSelectArea("SX3")
DbSetOrder(1)
DbSeek(cAliasE)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasE
If !(SX3->X3_CAMPO $ "C5_FILIAL") .And. cNivel >= SX3->X3_NIVEL .And.;
X3Uso(SX3->X3_USADO)
AADD(aCpoEnch,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterEnch := aClone(aCpoEnch)
DbSelectArea("SX3")
DbSetOrder(1)
MsSeek(cAliasGD)
While !Eof() .And. SX3->X3_ARQUIVO == cAliasGD
If
!(AllTrim(SX3->X3_CAMPO) $ "C6_FILIAL") .And. cNivel >= SX3>X3_NIVEL .And. X3Uso(SX3->X3_USADO)
AADD(aCpoGDa,SX3->X3_CAMPO)
EndIf
DbSkip()
End
aAlterGDa := aClone(aCpoGDa)
nUsado:=0
dbSelectArea("SX3")
dbSeek("SC6")
aHeader:={}
While !Eof().And.(x3_arquivo=="SC6")
If X3USO(x3_usado).And.cNivel>=x3_nivel
nUsado:=nUsado+1
AADD(aHeader,{ TRIM(x3_titulo), x3_campo, x3_picture,;
x3_tamanho, x3_decimal,"AllwaysTrue()",;
x3_usado, x3_tipo, x3_arquivo, x3_context } )
Endif
dbSkip()
End
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
oDlg := MSDIALOG():New(000,000,400,600, cCadastro,,,,,,,,,.T.)
RegToMemory("SC5", If(nOpc==3,.T.,.F.))
oEnch := MsMGet():New(cAliasE,nReg,nOpc,/*aCRA*/,/*cLetra*/, /*cTexto*/,;
aCpoEnch,aPos, aAlterEnch, nModelo, /*nColMens*/, /*cMensagem*/,;
cTudoOk,oDlg,lF3, lMemoria,lColumn,caTela,lNoFolder,lProperty)
oGetD:= MsNewGetDados():New(nSuperior,nEsquerda,nInferior,nDireita, nOpc,;
cLinOk,cTudoOk,cIniCpos,aAlterGDa,nFreeze,nMax,cFieldOk, cSuperDel,;
cDelOk, oDLG, aHeader, aCols)
// Tratamento para definio de cores especficas,
// logo aps a declarao da MsNewGetDados
oGetD:oBrowse:lUseDefaultColors := .F.
oGetD:oBrowse:SetBlkBackColor({|| GETDCLR(oGetD:aCols,oGetD:nAt,aHeader)})
oDlg:bInit := {|| EnchoiceBar(oDlg, {||oDlg:End()}, {||oDlg:End()},,aButtons)}
oDlg:lCentered := .T.
oDlg:Activate()
Return
Exemplo (continuao):
// Funo para tratamento das regras de cores para a grid da MsNewGetDados
Static Function GETDCLR(aLinha,nLinha,aHeader)
Local
Local
Local
Local
Local
nCor2
nCor3
nPosProd
nUsado
nRet
:=
:=
:=
:=
:=
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:
oDlg
bOk
bCancel
lMsgDel
aButtons
nRecno
cAlias
Aparncia:
#include "protheus.ch"
/*/
+----------------------------------------------------------------------------| Funo
| DENCHBAR
| Autor | ARNALDO RAYMUNDO JR. |Data |
|
+----------------------------------------------------------------------------| Descrio | Programa que demonstra a utilizao da funo
|
|
| EnchoiceBar()
|
+----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------------/*/
User Function DEnchBar()
Local oDlg, oBtn
Local aButtons := {}
DEFINE MSDIALOG oDlg TITLE "Teste EnchoiceBar" FROM 000,000 TO 400,600 PIXEL OF;
oMainWnd
AADD( aButtons, {"HISTORIC", {|| TestHist()}, "Histrico...",;
"Histrico",{|| .T.}} )
@ -15,-15 BUTTON oBtn PROMPT "..." SIZE 1,1 PIXEL OF oDlg
ACTIVATE MSDIALOG oDlg ;
ON INIT (EnchoiceBar(oDlg,{||lOk:=.T.,oDlg:End()},{||oDlg:End()},,@aButtons))
Return
5.3.2. TBar()
Classe de objetos visuais que permite a implementao de um componente do tipo barra de
botes para a parte superior de uma janela previamente definida.
;
Parmetros:
oWnd
nBtnWidth
nBtnHeight
l3D
cMode
No utilizado.
oCursor
cResource
lNoAutoAdjust
;
Aparncia:
#include 'protheus.ch'
/*/
+----------------------------------------------------------------------------| Funo
| TSTBAR
| Autor | MICROSIGA
|Data |
|
+----------------------------------------------------------------------------| Descrio | Programa que demonstra a utilizao do objeto TBar()
|
+----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------------/*/
User Function TstTBar()
Local oDlg
oDlg
Exemplo (continuao):
oTBar := TBar():New( oDlg,25,32,.T.,,,,.F. )
oTBtnBmp2_1 := TBtnBmp2():New( 00, 00, 35, 25, 'copyuser' ,,,,;
{||Alert('TBtnBmp2_1')}, oTBar,'msGetEx',,.F.,.F. )
oTBtnBmp2_2 := TBtnBmp2():New( 00, 00, 35, 25, 'critica'
{||},oTBar,'Critica',,.F.,.F. )
,,,,;
,,,,;
,,,,;
oDlg:lCentered := .T.
oDlg:Activate()
Return
5.3.3. ButtonBar
A sintaxe ButtonBar a forma clssica utilizada na linguagem ADVPL para implementar um
objeto da classe TBar(), o qual possui as caractersticas mencionadas no tpico anterior.
;
Sintaxe:
Retorno: ().
Parmetros:
oBar
nWidth
nHeight
3D
oDlg
MODE
CURSOR
A sintaxe ButtonBar requer a adio dos botes como recursos adicionais da barra
previamente definida utilizando a sintaxe abaixo:
;
Sintaxe adicional:
Parmetros:
cBitMap
oBar
cAcao
cTexto
Aparncia:
#include 'protheus.ch'
/*/
+----------------------------------------------------------------------| Funo
| TstBBar
| Autor | MICROSIGA
|Data |
|
+----------------------------------------------------------------------| Descrio | Programa que demonstra a utilizao do objeto TBar()
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
User Function TstBBar()
Local oDlg
Local oBtn1
Local oBtn2
oDlg
Exemplo (continuao):
DEFINE
DEFINE
DEFINE
DEFINE
ACTION
oBtn1:cTitle:="Calc"
DEFINE BUTTON RESOURCE "S4WB009N"
DEFINE BUTTON RESOURCE "S4WB010N"
DEFINE BUTTON RESOURCE "S4WB016N"
ACTION HelProg() TOOLTIP "Ajuda"
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"})
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:
nLin1
nCol1
nLin2
nCol2
cTitle
cAlias
aCampos
aRotina
cFunLeg
cTopFun
cBotFun
lCentered
aResource
nModelo
aPesqui
cSeek
lDic
lSavOrd
;
Aparncia:
#include "protheus.ch"
/*/
+----------------------------------------------------------------------| Funo
| WndBrwTRB
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Demonstra a utilizao da MaWndBrowse com Temporrio
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
User Function WndBrwTRB()
// Variveis para o Arquivo Temporario
Local cChave
:= ""
Local cArqTrb
:= ""
Local aStruTRB := {}
// Variveis para o MaWndBrowse
Local cTitulo
:= "Cadastro Temporario"// Ttulo obrigatrio
Local cAlias
:= "TRB" // Alias da tabela corrente podendo ser TRB
Local cFunLeg
:= "" // Funo que dever retornar um valor lgico e com isso
ser atribudo semafro na primeira coluna do browse
Local cTopFun
:= "" // Mostrar os registros com a chave de
Local cBotFun
:= "" // Mostrar os registros com a chave ate
Local lCentered := .T. // Valor verdadeiro centraliza
Local aResource := {} // aAdd(aResource,{"IMAGEM","Texto significativo"})
Local nModelo
:= 1 // 1- Menu do aRotina
Local aPesqui
:= {} // aAdd(aPesqui{"Ttulo",nOrdem}), se no passado ser
utilizado o AxPesqui
Local cSeek
:= "" // Chave principal para a busca, exemplo: xFilial("???")
Local lDic
:= .F. // Parmetro em conjunto com aCampos
Local lSavOrd
:= .T. // Estabelecer a ordem aps pesquisas.
- 191 ADVPL Avanado
,"@!" ,"Filial"
,"@!" ,"Matricula"
,"@!" ,"Nome"
,"@E 999","Idade"
,"@!" ,"Status"
,02,"C",".F.",.T.})
,14,"C",".F.",.T.})
,20,"C",".T.",.F.})
,03,"N",".T.",.F.})
,01,"C",".T.",.T.})
//
cArqTrb
:= CriaTrab(aStruTRB,.t.)
dbUseArea(.T.,,cArqTrb,"TRB",.T.,.F.)
cChave
:= "TRB_FILIAL+TRB_ID"
IndRegua("TRB",cArqTrb,cChave,,,"Selecionando Registros...")
dbSelectArea( "TRB" )
MaWndBrowse(aSize[7],aSize[2],aSize[6],aSize[5],cTitulo,cAlias,aCampos,aRotina,,
cTopFun,cBotFun,lCentered,,nModelo,,cSeek,lDic,lSavOrd)
If ( Select( "TRB" ) <> 0 )
dbSelectArea ( "TRB" )
dbCloseArea ()
Endif
Return
Parmetros:
oDlg
aCampos
nLeftE
nTopE
nHeightE
nWidthE
lEnchBar
"<lWhen>"
<Tamanho>
AADD(aCposEnch,
{"<Variavel>"
,{nLinha,nColuna} ,"<Titulo>",;
"<Picture>", "<Validacao>", "<F3>", "<lWhen>",;
<Tamanho>})
Aparncia:
/*/
+----------------------------------------------------------------------| Funo
| TEnchoice
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,;
lEnchBar)
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
aSays
aGets
cCaption
cPict
cValid
cF3
cWhen
cBlKSay
cBlkGet
cBlKVld
cBlKWhen
nLeft
nTop
nI
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
{}
{}
""
""
""
""
""
""
""
""
""
0
0
0
nWidthG
,aCampos[nI,3])
,aCampos[nI,4])
".t." ,aCampos[nI,5])
NIL
,aCampos[nI,6])
,aCampos[nI,7])
:= Iif(Empty(aCampos[nI,8]), 100,;
IiF(aCampos[nI,8]*3.5 > 100,100,nil))
- 195 ADVPL Avanado
/*/
+----------------------------------------------------------------------| Funo
| TVisual
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TVisual(cAlias,nReg,nOpc)
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
:= {||oDlg:End()}
bCancel
:= {||oDlg:End()}
nX
/*/
+----------------------------------------------------------------------| Funo
| TInclui
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TInclui(cAlias,nReg,nOpc)
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
bCancel
:= {||oDlg:End()}
aArea
:= GetArea()
nX
:= Space(aCampos[nX][4])
:= 0
:= CTOD("")
:= .F.
:= Space(aCampos[nX][4])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
TEnchoice(oDlg, aCposEnch,,,,,.T.)
bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}
oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()
RETURN
Exemplo: Funo TAltera ( MaWndBrowse com TEnchoice)
/*/
+----------------------------------------------------------------------| Funo
| TAltera
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TAltera(cAlias,nReg,nOpc)
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
bCancel
:= {||oDlg:End()}
aArea
:= GetArea()
nX
TEnchoice(oDlg, aCposEnch,,,,,.T.)
bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}
oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()
RETURN
/*/
+----------------------------------------------------------------------| Funo
| TExclui
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TExclui(cAlias, nReg, nOpc)
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
bCancel
:= {||oDlg:End()}
nX
TEnchoice(oDlg, aCposEnch,,,,,.T.)
bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}
oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()
RETURN
Exemplo: Funo TValid ( MaWndBrowse com TEnchoice)
/*/
+----------------------------------------------------------------------| Funo
| TValid
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TValid(cAlias,nReg,nOpc,aCampos)
LOCAL lRet
LOCAL nX
LOCAL nPosObrig := Len(aCampos[1])
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
/*/
+----------------------------------------------------------------------| Funo
| TGravar
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TGravar(cAlias,nReg,nOpc,aCampos)
LOCAL nX
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
6.2. DbTree()
;
Descrio: Classe Advpl que permite a criao de um objeto visual do tipo Tree.
Propriedades:
bChange
Mtodos principais:
New
AddTree
AddTreeItem
EndTree
Aparncia:
Mtodo: New()
;
Parmetros:
nTop
nLeft
nBottom
nRight
oWnd
bchange
bRClick
lCargo
lDisable
Retorno:
Objeto
Mtodo: AddTree()
;
Parmetros:
cLabel
lPar02
cResOpen
cResClose
cBMPOpen
cBMPClose
cCargo
Retorno:
Nenhum
Mtodo: AddTreeItem()
;
Parmetros:
cLabel
cResource
cBitMap
cCargo
;
Retorno:
Nenhum
Mtodo: EndTree()
;
Sintaxe: oObj:EndTree ( )
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
#include "Protheus.ch"
/*/
+----------------------------------------------------------------------| Funo
| TDBTree
| Autor | MICROSIGA
| Data |
|
+----------------------------------------------------------------------| Descrio | Exemplo de utilizao da funo DbTree
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
User Function TDBTree()
Local cBmp1 := "PMSEDT3"
Local cBmp2 := "PMSDOC"
Private cCadastro := "Meu Computador"
Private oDlg
Private oDBTree
DEFINE MSDIALOG oDlg TITLE cCadastro FROM 0,0 TO 240,500 PIXEL
oDBTree := dbTree():New(10,10,95,240,oDlg,{|| U_Proc(oDBTree:GetCargo())},;
,.T.)
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()
DEFINE SBUTTON FROM 107,213 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg
ACTIVATE MSDIALOG oDlg CENTER
Return
6.3. MsSelect()
;
Descrio: A classe MsSelect cria um objeto browse (ou grid), com a primeira coluna
sendo do tipo marcao.
Propriedades:
oWnd
oBrowse
Mtodos principais:
New
Aparncia:
Mtodo: New()
;
aCampos
lInv
cMar
aCord
cTopFun
cBotFun
oWnd
reserved
aColors
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARROM
BR_PINK
BR_PRETO
BR_VERDE
BR_VERMELHO
;
Retorno:
Objeto
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)}
ACTIVATE MSDIALOG oDlg1
ON INIT EnchoiceBar(oDlg1,;
{|| nOpct:=1,iif(DeParaEnt(),oDlg1:End(),.f.)},{|| nOpct:=2,oDlg1:End()})
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.
Descrio
O TReport uma classe de impresso que substitui as funes SetPrint, SetDefault,
RptStatus e Cabec.
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.
Estrutura do componente TReport:
Pr-Requisitos
Para utilizar o TReport, verifique se o seu repositrio est com o Release 4 do Protheus-8, ou
verso superior.
A funo TRepInUse() verifica se a lib do TReport est liberada no repositrio em uso. O
retorno uma varivel lgica.
#include "protheus.ch"
User Function MyReport()
Local oReport
If TRepInUse()
//verifica se a opo relatrios personalizveis est
disponvel
Pergunte("MTR025",.F.)
oReport := ReportDef()
oReport:PrintDialog()
EndIf
Return
Verifique tambm o parmetro MV_TReport. Para utilizar os relatrios personalizveis, o
parmetro MV_TREPORT (tipo numrico) deve ser alterado no ambiente Configurador,
conforme uma das opes que seguem:
1 = utiliza relatrio no formato tradicional (antigo);
2 = utiliza relatrio personalizvel;
3 = pergunta qual relatrio ser utilizado: tradicional (antigo) ou personalizvel.
7.1.2.1.
Parmetros de impresso
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.
Spool
Direciona o relatrio para impresso via configurao do Windows das impressoras
instaladas.
E-mail
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
Exemplo: relprotheus@microsiga.com.br
provenincia
dos
relatrios.
do
relatrio.
; MV_RELPSW
Define a senha da conta de e-mail para envio dos relatrios.
; MV_RELSERV
Define
o
servidor
da
conta
Exemplo: smtp.microsiga.com.br
de
para
envio
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.
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
Selecione o tamanho do papel em que o relatrio ser impresso.
7.1.3. Personalizao
possvel configurar-se as colunas do lay-out do relatrio, bem como os acumuladores,
cabealhos e linhas.
Esto disponveis para personalizao tambm a fonte, tamanho, cores, e etc.
7.1.3.1.
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.
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:
O relatrio (TReport) contm 1 ou mais sees (TRSection);
Uma seo (TRSection) pode conter 1 ou mais sees;
A seo (TRSection) contm clulas pr-definidas e clulas selecionadas pelo usurio;
A seo (TRSection) tambm contm as quebras (TRBreak) para impresso de
totalizadores (TRFunction);
Os totalizadores so includos pela seo que automaticamente inclui no relatrio
(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 ().
Bancos:
Database
MSSQL 2000
INFORMIX
ORACLE
MYSQL
DB2
Tipo
Caracter
Caracter
Caracter
Caracter
Caracter
Tamanho
10
10
10
10
10
Contedo
0000000001
0000000001
0000000001
0000000001
0000000001
Bancos:
Database
MSSQL 2000
POSTGRES
INFORMIX
ORACLE
MYSQL
DB2
Tipo
Caracter
Caracter
Caracter
Caracter
Caracter
Caracter
Tamanho
10
0
10
10
10
10
Contedo
Vazio
Vazio
Vazio
Vazio
Vazio
Vazio
Retorno: Todos os bancos que suportam a funo LEFT() retornaram uma coluna
de informaes, onde os 5 primeiros bytes eram '00000'.
Bancos:
Database
MSSQL 2000
MYSQL
DB2
Tipo
Caracter
Caracter
Caracter
Tamanho
5
5
4000
Contedo
00000
00000
00000
Bancos:
Database
MSSQL 2000
POSTGRES
INFORMIX
ORACLE
MYSQL
DB2
Tipo
Caracter
Caracter
Caracter
Caracter
Caracter
Caracter
Tamanho
4
2000
4
4
4
4
Contedo
0000
0000
0000
0000
0000
0000
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.
Comportamento diferenciado com Bandos de Dados PostGres
O Banco de Dados Postgres possuem um comportamento diferenciado entre os Builds do
Server do Banco, e possui uma parametrizao na configurao do ODBC que pode interferir
na maneira como os atributos das colunas de retorno de uma query so retornados.
Em verses inferiores o Postgres 8.x, as diferenas de comportamento em relao os demais
Bancos de Dados possuem um diferencial muito significativo, em praticamente todas as
funes de retorno calculado. Para estes casos, em se tratando de Postgres verses inferiores
a 8.x, a preciso de retorno da coluna corresponde ao tamanho mximo de retorno do tipo
VarChar. ( Este tamanho mximo pode ser configurado na conexo ODBC do PostgreSql, e o
valor default 65536 bytes. )
Na funo Substring(), mesmo que esteja especificado no 3. parmetro da funo, a
quantidade final limitada de Bytes, o Banco de Dados descreve esta coluna de retorno como
sendo um VarChar() com a preciso do maior valor VARCHAR() a ser retornado pelo client. Na
funo Max(), quando especificado um campo da base do tipo Char ou Varchar, temos um
comportamento semelhante.
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.
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
0
-1
-2
-4
-5
-6
-8
-9
-10
-11
-11
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-40
-41
-50
-58
-67
-76
-76
COMM_INITPGM_ERROR
COMM_PARAM_ERROR
COMM_PROGRAM_ERROR
COMM_INSMEM_ERROR
INVALID_BUILD
INVALID_TOPAPI
-81
-86
-88
-90
-99
-100
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
Parmetros:
cTable
cIndice
Retorno:
Lgico
Exemplo:
TCCONTYPE()
Especifica o protocolo de comunicao a ser utilizado pelo TOPConnect.
;
Sintaxe: TCConType(cType)
Parmetros:
cType
Retorno:
Nenhum
Exemplo:
#INCLUDE "TOPCONN.CH"
//Especifica conexo TCP/IP
TCConType("TCPIP")
//Conecta-se ao ambiente SIGAADV no Microsoft SQL-Server
TCLink("MSSQL/SIGAADV")
TCDELFILE()
Exclui uma tabela no servidor.
;
Sintaxe: TCDelFile(cTable)
Parmetros:
cTable
Retorno:
Nenhum
Exemplo:
TCDelFile("CUSTOMER")
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:
xParam1
Parmetro reservado.
xParam2
Parmetro reservado.
cQuery
Query de seleo com sintaxe no padro SQL ANSI a ser executada no banco
de dados.
Retorno:
RecordSet
Exemplo:
TCGETDB()
Retorna o tipo de Banco de Dados corrente.
;
Sintaxe: TCGETDB()
Parmetros:
Nenhum
Retorno:
Caracter
Exemplo:
TCLINK()
Abre uma conexo com o Servidor TOPConnect.
;
Sintaxe: TCLink(cConectString,cServer)
Parmetros:
cConectString
cServer
Observaes:
Para o TOPConnect NT acessando Oracle, um ambiente o nome do Alias criado
com o utilitrio SQL-Net.
Para o TOPConnect NT acessando os demais SGDB's um ambiente um System
DSN criado atravs do ODBC Data Source Administrator.
Para o TOPConnect AS/400 um ambiente uma Library criada atravs do comando
CRTTOPENV do TOPConnect.
Retorno:
Numrico
Exemplo:
TCQUERY()
Executa uma Query no servidor e coloca seu retorno em uma WorkArea.
Durante o processo de compilao, a sintaxe TCQUERY() substituda pelas
expresso:
dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQuery), ALIAS ,.T.,.F.)
Esta substituio realizada conforme as definies do include TOPCONN.CH.
Desta forma recomendvel a utilizao direta da sintaxe DbUseArea() +
TcGeQry().
Parmetros:
cSQLExpr
ALIAS cAlias
NEW
VIA "TOPCONN"
Observaes:
A Work Area criada com o comando TCQUERY READ-ONLY, portanto no
permitido o uso de APPEND's ou REPLACE's.
O TOPConnect tem apenas um cursor para a Query executada portando apenas os
seguintes comandos so suportados em uma Work Area criada com TCQUERY:
o
o
o
o
o
GO TOP - DbGoTop()
GO BOTTOM - DbGoBottom()
SKIP - DbSkip()
Eof()
Bof()
Ao executar uma Query que retorne um ou mais valores calculados, o nome dos
campos da WorkArea sero COLUMN1, COLUMN2... COLUMNn.
;
Retorno:
Nenhum
Exemplo:
TCQUIT()
Encerra todas as conexes com o TOPConnect.
;
Sintaxe: TCQuit()
Parmetros:
Nenhum
Retorno:
Nenhum
TCSETCONN()
Seleciona a conexo ativa.
;
Sintaxe: TCSETCONN(nConn)
Parmetros:
nConn
Nmero da conexo
Retorno:
Nenhum
Exemplo:
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:
cAlias
cField
cType
nTam
nDec
Retorno:
Nenhum
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:
Local
Local
Local
Local
Local
cQuery
cCampos
aStruSA1
nX
nMax
:=
:=
:=
:=
:=
""
""
SA1->(DbStruct())
0
Len(aStruSA1)
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()
Executa uma Stored Procedure no Banco de Dados.
Devido a uma limitao em alguns dos Bancos de Dados suportados na
obteno dos tipos de parmetros (se so de INPUT e/ou OUTPUT) todos as
Stored Procedures a serem executadas atravs do TOPConnect devero
obedecer o seguinte padro de nomenclatura de seus parmetros :
Parmetros de INPUT devem comear com IN_... Ex. IN_VALOR.
Parmetros de OUTPUT devem comear com OUT_... Ex. OUT_CODIGO
Aps a execuo de uma Stored Procedure o TOPConnect retornar ao ADVPL
um array com 'n' elementos, onde n o nmero de parmetros de OUTPUT da
Stored Procedure.
Sintaxe: TCSPExec(cSPName,xParam1,xParam2...xParamN)
Parmetros:
cSPName
xParamN
Retorno:
Array
Exemplo:
TCSPEXIST()
Verifica a existncia de uma determinada Stored Procedure no servidor.
;
Sintaxe: TCSPExist(cSPName)
Parmetros:
CSPName
Retorno:
Lgico
Exemplo:
If TCSPExist("MAT001_01")
TCSPExec("MAT001_01",...)
Endif
Sintaxe: TCSQLError()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
If
TCSQLEXEC()
Permite a execuo de comandos de atualizao no servidor de banco de dados.
;
Sintaxe: TCSQLExec(cCommand)
Parmetros:
cCommand
Retorno:
Numrico
Exemplo:
Sintaxe: TCSrvType()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
TCLink("MSSQL/TESTE","TOPSRV")
ALERT(TCSrvtype())
Sintaxe: TCUnlink(nConn)
Parmetros:
nConn
Retorno:
Nenhum
Exemplo:
TCConType("NPIPE")
nConn := TCLink("MSSQL/TOPCONN","TOPSRV")
TCUnLink(nConn)
TCCHKOBJ()
Verifica a existncia de um objeto no servidor AS/400
;
Sintaxe: TCChkObj(cObj,cLibrary,cType)
Parmetros:
cObj
cLibrary
cType
Retorno:
Numrico
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:
String
Mensagem de erro.
Exemplo:
If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif
TCPGMEXE()
Executa um programa no servidor AS/400.
;
Sintaxe: TCPGMEXE(cProgram)
Parmetros:
cProgram
Retorno:
Numrico
Exemplo:
If TCPGMEXE("CALCCUST") != 0
ALERT(TCExeError())
Endif
TCSYSEXE()
Permite a execuo de um comando utilizando a sintaxe e recursos nativos do DB2/400,
diretamente no servidor do banco de dados.
;
Sintaxe: TCSysExe(cCommand)
Parmetros:
cCommand
Retorno:
Numrico
Exemplo:
cCommand
cCommand
cCommand
cCommand
:=
+=
+=
+=
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:
cQuery
Retorno:
String
Exemplo:
Parmetros:
cAlias
cEmp
Retorno:
String
Exemplo:
SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())
cQuery := "SELECT * FROM "+RETSQLNAME("SA1")+ " WHERE "
cQuery += RetSqlCond("SA1")
cQuery += " ORDER BY "+cOrder
dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery), "TRBSQL", .T., .F.)
cRealName := RetFullName("TRBSQL")
RETSQLCOND()
Retorna uma string com as condies padres de uso em uma query.
;
Sintaxe: RetSqlCond(cAlias)
Parmetros:
cAlias
Retorno:
String
Exemplo:
RETSQLNAME()
Retorna o nome padro da tabela para seleo no banco de dados atravs da query.
;
Sintaxe: RetSqlName(cAlias)
Parmetros:
cAlias
Retorno:
String
Exemplo:
RETSQLTABLE()
Retorna o nome real da tabela para seleo no banco de dados atravs da query.
;
Sintaxe: RetSqlTable(cAlias)
Parmetros:
cAlias
Retorno:
String
Exemplo:
SQLCOPY()
Cria um arquivo no formato especificado pela configurao LOCALFILES do ambiente com o
retorno da query.
;
Parmetros:
cFile
cWhere
aStru
cAlias
aDates
Array com os nomes dos campos que devero ter o tratamento da funo
TCSetField() para o formato de data.
Se copia o contedo da coluna R_E_C_N_O_ para o arquivo gerado.
lRecno
;
Retorno:
Nenhum
SQLORDER()
Converte a sintaxe de um indce em formato ISAM (CODEBASE) para o formato SQL ANSI
;
Sintaxe: SqlOrdem(cOrder)
Parmetros:
cOrder
Retorno:
String
Exemplo:
SA1->(DbSetOrder(1)) // A1_FILIAL+A1_COD+A1_LOJA
cOrder := SqlOrder(IndexKey())
cQuery := "SELECT * FROM "+RETSQLNAME("SA1")+ " WHERE "
cQuery += RetSqlCond("SA1")
cQuery += " ORDER BY "+cOrder
dbUseArea(.T.,"TOPCONN", TcGenQry(,,cQuery), "TRBSQL", .T., .F.)
cRealName := RetFullName("TRBSQL")
SQLTOTRB()
Preenche um arquivo temporrio com o contedo do retorno da query.
;
Parmetros:
cQuery
aStru
cAlias
Retorno:
Nenhum
Exemplo:
#include "protheus.ch"
/*/
+----------------------------------------------------------------------| Funo
| WndSQLTRB
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Demonstra a utilizao da MaWndBrowse com SQL
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
Continuao:
aAdd(aRotina,{"Visualizar","U_TcVisual",0,2}) // Desenvolver Enchoice para
campos de arquivo temporrio
aAdd(aRotina,{"Incluir"
,"U_TcInclui",0,3}) // Desenvolver Enchoice para
campos de arquivo temporrio
aAdd(aRotina,{"Alterar"
,"U_TcAltera",0,4}) // Desenvolver Enchoice para
campos de arquivo temporrio
aAdd(aRotina,{"Excluir"
,"U_TcExclui",0,5}) // Desenvolver Enchoice para
campos de arquivo temporrio
// Estrutura do Arquivo: Nome do campo / tipo, tamanho, decimais (SX3 para
temporrio)
/*
AADD(aStruTRB,{"TRB_FILIAL"
,"C",02,0})
// Nome_Campo , Tipo_Campo, Tamanho, Decimal
AADD(aStruTRB,{"TRB_ID"
,"C",14,0})
AADD(aStruTRB,{"TRB_NOME"
,"C",20,0})
AADD(aStruTRB,{"TRB_IDADE"
,"N",03,0})
AADD(aStruTRB,{"TRB_STATUS"
,"C",01,0})
*/
// aCampos padro para a MaWndBrowse
//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>})
// aCampos melhorado para a WndBrwTRB
//AADD(aCampos,{<Nome_Campo>,<Picture>,<Titulo>,<Tamanho>,<Tipo>,<cWhen>,;
//<lObrigatorio>})
// Nota: lObrigatorio deve ser sempre a ultima informacao do aCampos
/*
AADD(aCampos,{"TRB_FILIAL"
,"@!" ,"Filial"
,02,"C",".F.",.T.})
AADD(aCampos,{"TRB_ID"
,"@!" ,"Matricula"
,14,"C",".F.",.T.})
AADD(aCampos,{"TRB_NOME"
,"@!" ,"Nome"
,20,"C",".T.",.F.})
AADD(aCampos,{"TRB_IDADE"
,"@E 999","Idade"
,03,"N",".T.",.F.})
AADD(aCampos,{"TRB_STATUS"
,"@!" ,"Status"
,01,"C",".T.",.T.})
*/
If ( Select( cAlias ) <> 0 )
dbSelectArea ( cAlias )
dbCloseArea ()
Endif
// Arquivo de trabalho que ser utilizado pela MaWndBrowse
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)
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)
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
:= {||oDlg:End()}
bCancel
:= {||oDlg:End()}
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.)
oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()
RETURN
/*/
+----------------------------------------------------------------------| Funo
| TcInclui
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TcInclui(cAlias,nReg,nOpc)
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
bCancel
:= {||oDlg:End()}
aArea
:= GetArea()
nX
Continuao:
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])
Case aCampos[nX][5] == "N"
&("_"+aCampos[nX][1])
Case aCampos[nX][5] == "D"
&("_"+aCampos[nX][1])
Case aCampos[nX][5] == "L"
&("_"+aCampos[nX][1])
Case aCampos[nX][5] == "M"
&("_"+aCampos[nX][1])
EndCase
:= Space(aCampos[nX][4])
:= 0
:= CTOD("")
:= .F.
:= Space(aCampos[nX][4])
Next nX
oDlg := TDialog():New(000,000,400,650,cCadastro,,,,,,,,,.T.)
TEnchoice(oDlg, aCposEnch,,,,,.T.)
bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
( U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}
oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()
RETURN
Continuao:
/*/
+----------------------------------------------------------------------| Funo
| TcAltera
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TcAltera(cAlias,nReg,nOpc)
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
bCancel
:= {||oDlg:End()}
aArea
:= GetArea()
nX
Continuao:
/*/
+----------------------------------------------------------------------| Funo
| TcExclui
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TcExclui(cAlias, nReg, nOpc)
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
//
//
//
//
aCposEnch := {}
nLinha
:= 15
nColuna
:= 10
nOpcE
:= aRotina[nOpc][4] // Opcao de verdade
bOk
bCancel
:= {||oDlg:End()}
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.)
bOk := {|| IIF( U_TValid(cAlias,nReg,nOpcE,aCampos),;
(U_TGravar(cAlias,nReg,nOpcE,aCampos),oDlg:End()),)}
oDlg:bInit := {|| EnchoiceBar(oDlg, bOk, bCancel,.F.,{},nReg,cAlias)}
oDlg:lCentered := .T.
oDlg:Activate()
RETURN
Continuao:
- 256 ADVPL Avanado
/*/
+----------------------------------------------------------------------| Funo
| TcValid
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
USER FUNCTION TcValid(cAlias,nReg,nOpc,aCampos)
LOCAL lRet
LOCAL nX
LOCAL nPosObrig := Len(aCampos[1])
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
Continuao:
/*/
+----------------------------------------------------------------------| Funo
| TcGravar
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
Continuao:
/*/
+----------------------------------------------------------------------| Funo
| TEnchoice
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | Enchoice para arquivos temporarios
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
Static Function TEnchoice(oDlg, aCampos, nLeftE, nTopE, nHeightE, nWidthE,;
lEnchBar)
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
aSays
aGets
cCaption
cPict
cValid
cF3
cWhen
cBlKSay
cBlkGet
cBlKVld
cBlKWhen
nLeft
nTop
nI
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
{}
{}
""
""
""
""
""
""
""
""
""
0
0
0
,aCampos[nI,3])
,aCampos[nI,4])
".t." ,aCampos[nI,5])
NIL
,aCampos[nI,6])
Continuao:
nWidthG
:= Iif(Empty(aCampos[nI,8]), 100,;
IiF(aCampos[nI,8]*3.5 > 100,100,nil))
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:
Tarefa
Descrio
01
02
03
04
05
Detalhamento
Utilizao de queries ou stored
procedures para atualizao das
tabelas do banco DBInterface no
formato
necessrio
ao
ERP
X,
executadas a partir do ERP Protheus.
Ferramentas proprietrias do ERP X
para
leitura
do
DBInterface
e
tratamento das informaes para
atualizao do banco de dados desta
aplicao.
Pode ser uma ferramenta proprietria
da aplicao ERP X, ou pode ser um
conjunto
de
queries
e
stored
procedures
desenvolvidas
em
conjunto com a equipe do ERP X e a
equipe TOTVS, permitindo o controle
de execuo da extrao pelo ERP
Protheus.
Utilizao de queries ou stored
procedures
para
leitura
das
informaes
do
DBInterface
e
atualizao de tabelas intermedirias
no banco de dados do ERP Protheus,
executadas a partir do ERP Protheus.
Utilizao de funes prprias para
esta finalidade no ERP Protheus para
efetivao
das
informaes
importadas em informaes vlidas no
ERP. Estas funes normalmente so
compatveis com a execuo atravs
do recurso de MsExecAuto().
tam_cp := GetE2ValorSize()
BeginSql alias 'E2TEMP'
column E2_EMISSAO as Date, E2_VALOR as Numeric(tam_cp,2)
. . .
EndSql
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.
Syntax error:)
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
; 'Query Argument Error : Alias [XXX] already in use.'
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.
; 'Query Argument Error : Invalid Value Type [X]'
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].
; 'Type Mismach on +'
Esta ocorrncia, se reproduzida, informar na pilha de chamadas o nmero da linha do cdigofonte correspondente instruo EndSQL. Ocorre caso alguma funo intermediria do engine
do Embedded SQL, excluindo-se as funes especificadas na query com a sintaxe %exp: ... %
, retornar um contedo no-caractere a ser acrescentado na Query. Esta ocorrncia de mais
difcil localizao, sendo til nestes casos a anlise do arquivo temporrio gerado pelo Protheus
IDE, no momento da compilao.
; Help NOFUNCW - Funo __EXECSQL
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.
__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
SE2.E2_FILIAL=
SE2.E2_PREFIXO<>
'+
9. Funcionalidade MsExecAuto
Sobre a MsExecAuto e Rotinas Automticas
A funcionalidade MsExecAuto, ou tambm conhecida como Rotina Automtica, permite a
execuo de rotinas do ambiente ERP Protheus por funes especficas, o que confere ao
desenvolvedor a possibilidade de efetuar tratamentos especficos antes da execuo da rotina
padro, e mais importante, no perder nenhuma funcionalidade que a rotina padro oferece.
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?
Para responder a esta pergunta devemos fazer as seguintes consideraes:
; A aplicao ERP est em constante evoluo:
No momento de desenvolvimento da rotina especfica era necessrio apenas o
tratamento de um conjunto isolado de informaes, mas com o aprimoramento do
ERP como um todo, agora so necessrios outros conjuntos de dados, os quais no
foram tratados pelo desenvolvedor naquele momento, mas que esto contemplados
na rotina padro do sistema.
Como o desenvolvedor optou por realizar todo o tratamento de forma especfica, em
uma atualizao do ERP este desenvolvimento precisar ser revisto ou at mesmo
refeito, o que implacar em custo para o cliente ou para o desenvolvedor.
Se o desenvolvedor tivesse optado por utilizar a rotina padro encapsulada em seu
desenvolvimento ele no teria problemas em adaptar sua rotina as novas
necessidades do sistema, pois a rotina padro j se preocupada com a
compatibilidade entre as verses, possibilitando que uma simples manuteno
atualize toda a rotina especfica, isto se esta manuteno for necessria, pois a
rotina padro poder tratar a novas informaes com contedos padres
dependendo da situao em que estas no forem informadas.
; A aplicao ERP pode ser personalidada atravs de pontos de entrada e
do dicionrio de dados:
A partir do momento que uma aplicao padro desenvolvida e disponibilizada a
mesma pode sofrer diversas personalizaes em campo, as quais podem ser
implementadas em paralelo ou aps o desenvolvimento da rotina especfica
disponibilizada pelo desenvolvedor.
Se esta situao no for prevista, a incluso de informaes utilizando a rotina
padro do sistema poder sofrer diversas validaes ou at mesmo efetuar a
gravao de informaes adicionais, as quais no esto visveis na rotina especfica,
gerando graves inconistncias na base de dados.
Avaliando estas consideraes percebesse o fator de sucesso que um desenvolvimento
especfico pode ter ao optar por refazer todos os tratamentos do sistema em detrimento de
utilizar a funcionalidade MsExecAuto, ou seja, qualquer modificao no ambiente,
independente do quo simples pode tornar a rotina especfica inadequada.
Parmetros
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, nOpc)
(xAutoCab, nOpc)
(xAutoCab, xAutoItens)
(nOpcAuto, aAuto)
(nOpcAuto, aAuto)
(aRotAuto, nOpcAuto, aRotItem)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(nOpcAuto, aAuto)
(nOpcAuto, aAutoCab)
(nOpcAuto, xAutoCab, xAutoAD2, xAutoAD3, xAutoAD4, xAutoAD9)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoVend, xAutoTask, xAutoCalend)
(aRotAuto, nOpcAuto)
(aRotAuto, nOpcAuto)
(aRotAuto, nOpcion, nOpcAuto)
(xAutoCab, nOpc)
(xAutoCab, nOpc)
(nPosArotina, xAutoCab, nOpcAuto)
(aAuto, nOpcAuto)
(aRotauto, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto, lWhenGet, xAutoImp)
(xReservCab, xReservItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, lInclui)
(nFuncao, xAutoCab, xAutoItens, nOpcAuto, )
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoIt, xAutoIt2, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
- 270 ADVPL Avanado
Rotina
MATA175
MATA185
MATA200
MATA230
MATA241
MATA242
MATA261
MATA265
MATA266
MATA267
MATA360
MATA410
MATA415
MATA416
MATA490
MATA685
MATA700
MATA920
TMKA061
TMKA062
TMKA271
TMSA040
TMSA050
TMSA170
TMSA360
TMSA430
TMSA440
Parmetros
(xRotAuto, xOpcAuto)
(xAutoSCP, xAutoSD3, nOpcAuto, xPerg)
(xAutoCab, xAutoItens, nOpcAuto)
(aAuto, nOpcAuto)
(xAutoCab, xAutoItens, nCallOpcx)
(xAutoCab, xAutoItens, nOpcAuto)
(aAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(aAutoItens)
(aAutoItens)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens)
(xAuto, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAuto, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
(xAutoCab, xAutoItens, xItensPesM3, xItensEnder, nOpcAuto)
(xAutoCab, nOpcAuto)
(xAutoCab, xAutoItens, xAutoNFAva, nOpcAuto)
(cAlias, xAutoCab, xAutoVei, xAutoMot, nOpcAuto)
(xAutoCab, xAutoItens, nOpcAuto)
9.1.
Exemplo:
AADD(xAutoCab,{A1_FILIAL
AADD(xAutoCab,{A1_COD
AADD(xAutoCab,{A1_LOJA
AADD(xAutoCab,{A1_NOME
,
,
,
,
xFilial(SA1)
000001
01
TESTE-000001
,
,
,
,
Nil})
Nil})
Nil})
Nil})
Exemplo:
AADD(xAutoCab,{F1_FILIAL
AADD(xAutoCab,{F1_DOC
AADD(xAutoCab,{F1_SERIE
AADD(xAutoCab,{F1_FORNECE
AADD(xAutoCab,{F1_LOJA
,
,
,
,
,
xFilial(SF1)
000001
1
000001
01
,
,
,
,
,
Nil})
Nil})
Nil})
Nil})
Nil})
For nX := 1 to 2
xAutoItem := {}
AADD(xAutoItem,{D1_FILIAL
AADD(xAutoItem,{D1_DOC
AADD(xAutoItem,{D1_SERIE
AADD(xAutoItem,{D1_FORNECE
AADD(xAutoItem,{D1_LOJA
AADD(xAutoItem,{D1_ITEM
AADD(xAutoItem,{D1_COD
AADD(xAutoItem,{D1_QUANT
AADD(xAutoItem,{D1_VUNIT
AADD(xAutoItem,{D1_TOTAL
AADD(xAutoItem,{D1_TES
,
,
,
,
,
,
,
,
,
,
,
xFilial(SD1)
000001
1
000001
01
STRZERO(nx,04)
STRZERO(nx,15)
100*nX
5*nX
(100*nX)*(5*nX)
001
,
,
,
,
,
,
,
,
,
,
,
Nil})
Nil})
Nil})
Nil})
Nil})
Nil})
Nil})
Nil})
Nil})
Nil})
Nil})
AADD(xAutoItens, xAutoItem)
Next nX
MsExecAuto({|x,y,z| MATA103(x,y,z)}, xAutoCab, xAutoItens, 3)
AADD(xAutoCab,{A1_FILIAL
AADD(xAutoCab,{A1_COD
AADD(xAutoCab,{A1_LOJA
AADD(xAutoCab,{A1_NOME
,
,
,
,
xFilial(SA1)
000001
01
TESTE-000001
,
,
,
,
Nil})
Nil})
Nil})
Nil})
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
...
MsExecAuto({|x,y,z| ATFA010(x,y,z)}, xAutoCab, xAutoItens, 3)
END
,"NAT01"
,NIL})
,"S"
,NIL})
Controle de transao
A utilizao do controle de transao permite garantir a integridade das informaes gravadas
pelo processamento.
Para utilizao do controle de transao na aplicao podem ser utilizados os seguintes blocos
de controle:
; Begin Transaction ... DisarmTransaction() ... End Transaction
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.
AADD(xAutoCab,{A1_FILIAL
AADD(xAutoCab,{A1_COD
AADD(xAutoCab,{A1_LOJA
AADD(xAutoCab,{A1_NOME
,
,
,
,
xFilial(SA1)
000001
01
TESTE-000001
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
DisarmTransaction()
ENDIF
END TRANSACTION
,
,
,
,
Nil})
Nil})
Nil})
Nil})
AADD(xAutoCab,{A1_FILIAL
AADD(xAutoCab,{A1_COD
AADD(xAutoCab,{A1_LOJA
AADD(xAutoCab,{A1_NOME
,
,
,
,
xFilial(SA1)
000001
01
TESTE-000001
,
,
,
,
Nil})
Nil})
Nil})
Nil})
BeginTran()
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
DisarmTransaction()
ELSE
EndTran()
ENDIF
MsUnlockAll()
Private lMsHelpAuto
:= .T.
Private lAutoErrNoFile := .F.
AADD(xAutoCab,{A1_FILIAL
AADD(xAutoCab,{A1_COD
AADD(xAutoCab,{A1_LOJA
AADD(xAutoCab,{A1_NOME
,
,
,
,
xFilial(SA1)
000001
01
TESTE-000001
,
,
,
,
Nil})
Nil})
Nil})
Nil})
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
MostraErro()
DisarmTransaction()
ENDIF
END TRANSACTION
:= .T.
:= .F.
Private lMsHelpAuto
:= .T.
Private lAutoErrNoFile := .F.
AADD(xAutoCab,{A1_FILIAL
AADD(xAutoCab,{A1_COD
AADD(xAutoCab,{A1_LOJA
AADD(xAutoCab,{A1_NOME
,
,
,
,
xFilial(SA1)
000001
01
TESTE-000001
,
,
,
,
Nil})
Nil})
Nil})
Nil})
BEGIN TRANSACTION
lMsErroAuto := .F.
MsExecAuto({|x,y| MATA030(x,y)}, xAutoCab, 3)
IF lMsErroAuto
MostraErro(\system\)
DisarmTransaction()
ENDIF
END TRANSACTION
Private lMSHelpAuto
:= .F.
Private lAutoErrNoFile := .T.
AADD(xAutoCab,{A1_COD
AADD(xAutoCab,{A1_LOJA
AADD(xAutoCab,{A1_NOME
, 000001
, 01
, TESTE-000001
, Nil})
, Nil})
, Nil})
aTiposFile
MvParBox01
MvParBox02
MvParBox03
MvParBox04
MvParBox05
MvParBox06
MVParBox07
:=
:=
:=
:=
:=
:=
:=
:=
PRIVATE _cDirectory
{".DBF",".DTC",".TXT"}
0
0
""
""
0
""
0
:= ""
RpcSetType(3)
RpcSetEnv("99", "01",,,,,
{"CT1","SF9","SN1","SN2","SN3","SN4","SN5","SNG","SM2"})
SET DATE FORMAT "dd/mm/yyyy"
oMainWnd := TWindow():New( 000, 000, 001, 001, "Importao: Fichas do
imobilizado",,,,,,,,,,,,,,,,.T.)
oMainWnd:bInit := {|| IIF(IC001PARBX(),(oProcess:= MsNewProcess():New({|lEnd|
PROCATIVO(.F.,oProcess)}),oProcess:Activate(),oMainWnd:End()),oMainWnd:End())}
oMainWnd:Activate("ICONIZED")
RpcClearEnv()
RETURN
Continuao:
/*/
+----------------------------------------------------------------------| Funo
| PROCATIVO
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | PROCESSAMENTO DA IMPORTACAO DO CADASTRO DE IMOBILIZADO
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
STATIC FUNCTION PROCATIVO(lEnd,oProcess)
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
aArea
aDadosSN1
aDadosSN3
aDadosSF9
aDadosTN1
aDadosTN2
aDadosTN3
aItemSN3
cArqSN1
cArqSN2
cArqSN3
cArqSA2
aStruSN1
aStruSN2
aStruSN3
aStruSF9
nX
nTotRegs
nProcRegs
nPosDados
cCodFor
cLojaFor
cDescFor
cFilAtu
cDirArq
cHistorico
nX
cFileExt
lImpSF9
lImpSNG
cKeyImp
aAutoErro
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
GetArea()
{}
{}
{}
{}
{}
{}
{}
""
""
""
""
{}
{}
{}
{}
0
0
0
0
""
""
""
cFilAnt
Alltrim(MVParBox03)
""
0
aTiposFile[MvParBox01]
MvParBox07==1
.F. // Ainda nao implementado
""
{}
:= .F.
:= .F.
- 283 ADVPL Avanado
Continuao:
Private lAutoErrNoFile := .T.
// Garante a abertura dos arquivos padres do sistema
DbSelectArea("CT1")
DbSetOrder(2) // FILIAL + COD.REDUZIDO
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())
// Prepara o arquivo no formato .DBF para gravao dos eventos de erro
XDBFLOG()
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
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
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())))
dbEval( {|x| nTotRegs++ },,{||SN1IMP->(!EOF())})
oProcess:SetRegua1(nTotRegs+2)
oProcess:IncRegua1("Iniciando processamento...")
oProcess:SetRegua2(nTotRegs+1)
oProcess:IncRegua2("Ficha de Ativo:")
DbSelectArea("SN1IMP")
DbGotop()
Continuao:
While SN1IMP->(!Eof())
nProcRegs++
oProcess:IncRegua1("Processando item: "+CValToChar(nProcRegs)+" / "+;
CValToChar(nTotRegs))
oProcess:IncRegua2("Ficha de Ativo: ")
aDadosSN1 := {}
aDadosSN3 := {}
// Compatibilizao para utilizao do CRIAVAR()
REGTOMEMORY("SN1",.T.)
//Monstagem do array com dados sem tratamento e com as informao da IMP
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
// Alterao das informaes do array de acordo com a necessidade
// AADD(aDadosTN1,{"CAMPO",CONTEUDO,"VALIDACAO"})
aDadosTN1
:= {}
// ALTERACAO DO ARRAY ADADOSSN1 COM AS INFORMACOES TRABALHADAS E
// ARMAZENADAS EM ADADOSTN1
// AADD(aDadosTN1,{"N1_XXXXXX"
,xConteudo
,Nil})
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
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 := {}
// Monstagem do array com dados sem tratamento e com as informaes
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
// Alterao das informaes do array de acordo com a necessidade
// AADD(aDadosTN3,{"CAMPO"
,CONTEUDO,"VALIDACAO"})
aDadosTN3 := {}
// ALTERACAO DO ARRAY aItenSN3
// ARMAZENADAS EM aDadosTN3
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
IF
SN1->N1_FILIAL
SN1->N1_CBASE
SN1->N1_ITEM
"01"
"001"
STRZERO(nX,2)
SUBSTR(cHistorico,nX,40)
NEXT nX
// TRATAMENTO DA CARGA DO CIAP
IF lImpSF9
IATFCIAP(aStruSF9,aDadosSF9)
ENDIF
ConOut("Registros importados com sucesso: "+;
CValToChar(nProcRegs))
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
Continuao:
DbSelectArea("LOGIMP")
DbCloseArea()
ConOut("Total de registros importados: "+CValToChar(nProcRegs))
ConOut("Trmino da importao: "+Time())
cFilAnt := cFilAtu
RestArea(aArea)
RETURN
/*/
+----------------------------------------------------------------------| Funo
| CT001PARBX
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | TELA DE PARAMETROS ESPECIFICOS DA ROTINA CUSTOMIZADA
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
STATIC FUNCTION IC001PARBX()
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
aParamBox
cTitulo
aRet
bOk
aButtons
lCentered
nPosx
nPosy
cLoad
lCanSave
lUserSave
nX
lRet
:=
:=
:=
:=
:=
:=
{}
"Importacao de cadastros"
{}
{|| .T.}
{}
.T.
:=
:=
:=
:=
:=
""
.T.
.T.
0
.F.
AADD(aParamBox,{2,"Tipo de informao"
,1 ,aTiposFile ,060,;
"AllwaysTrue()", .T.})
AADD(aParamBox,{2,"LayOut do arquivo "
,1 ,;
{"Padro","Especifico"},060, "AllwaysTrue()", .T.})
AADD(aParamBox,{1,"Diretorio de dados"
,Space(60)
,;
"@!","AllwaysTrue()","HSSDIR" ,".T.",120,.T.})
AADD(aParamBox,{1,"Arquivo de layout "
,Space(60)
,;
"@!","AllwaysTrue()","" ,".T.",120,.F.})
AADD(aParamBox,{2,"Operacao
"
,1 ,;
{"Incluir","Alterar","Excluir"},060, "AllwaysTrue()", .T.})
AADD(aParamBox,{1,"Diretorio de Log "
,Space(60)
,;
"@!","AllwaysTrue()","HSSDIR" ,".T.",120,.F.})
AADD(aParamBox,{2,"Importa CIAP
"
,1 ,;
{"Sim","No"} ,060, "AllwaysTrue()", .T.})
lRet := ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx,;
nPosy, /*oMainDlg*/ , cLoad, lCanSave, lUserSave)
Continuao:
IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox)
For nX := 1 to Len(aParamBox)
If aParamBox[nX][1] == 1
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C"
&("MvParBox"+StrZero(nX,2)) := aScan(aParamBox[nX][4],;
{|x| Alltrim(x) == aRet[nX]})
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N"
&("MvParBox"+StrZero(nX,2)) := aRet[nX]
Endif
Next nX
ENDIF
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
// Monta array com dados padres do SF9 de acordo com o SX3
FOR nX := 1 to Len(aStruSF9)
AADD(aDadosCIAP,{aStruSF9[nX][1],CRIAVAR(aStruSF9[nX][1]),NIL})
NEXT nX
// Atualiza dados do array com as informaes presentes no SN1
FOR nX := 1 to Len(aDadosSF9)
IF (nPosSF9 := aScan(aDadosCIAP,{|aLinhaCIAP| aLinhaCIAP[1] ==
aDadosSF9[nX][1]})) > 0
aDadosCIAP[nPosSF9][2] := aDadosSF9[nX][2]
ENDIF
NEXT nX
ConOut("Iniciando MsExecAuto - ATFCIAP: "+Time())
lMsErroAuto := .F.
MSExecAuto({|x,y| U_ATFCIAP(x,y)},aDadosCIAP,3) // Dados e Opo
ConOut("Finalizada MsExecAuto - ATFCIAP: "+Time())
RETURN lMsErroAuto
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
dbUseArea(.T., __LocalDriver, cArqLog, "LOGIMP", .T., .F.)
RETURN
/*/
+----------------------------------------------------------------------| 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)
LOCAL cSeqLog := "000"
FOR nX := 1 TO Len(cMsgErr) STEP 254
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
Continuao:
/*/
+----------------------------------------------------------------------| Funo
| XCONVERRLOG
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | CONVERTE O ARRAY AAUTOERRO EM TEXTO CONTINUO.
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
STATIC FUNCTION XCONVERRLOG(aAutoErro)
LOCAL cRet := ""
LOCAL nX := 1
FOR nX := 1 to Len(aAutoErro)
cRet += aAutoErro[nX]+CHR(13)+CHR(10)
NEXT nX
RETURN cRet
10.
Neste tpico sero descritas as funes da linguagem ADVPL que permitem o envio e o
recebimento de mensagens atravs de e-mails.
Funes para manipulao de e-mails
CALLPROC
MAILSMTPON
MAILPOPON
MAILSMTPOFF
MAILPOPOFF
MAILRECEIVE
MAILAUTH
POPMSGCOUNT
MAILSEND
MAILGETERR
Parmetros:
cFuncao
xParamN
Retorno:
Nenhum
MAILSMTPON()
Ativa uma conexo com o servio de SMTP para a thread ativa.
;
Sintaxe clssica:
CONNECT SMTP SERVER cServer ACCOUNT cUser PASSWORD cPass TIMEOUT nTimeOut IN
SERVER oRpcSrv RESULT lResult
Parmetros:
Cserver
Cuser
CPass
NTimeOut
Retorno:
Lgico
MAILPOPON()
Ativa uma conexo com o servio de POP para a thread ativa. -> lReturn
;
Sintaxe clssica:
TIMEOUT nTimeOut
Parmetros:
Cserver
Cuser
CPass
NTimeOut
Retorno:
Lgico
IN
MAILSMTPOFF()
Encerra a conexo com o servio de SMTP.
;
Sintaxe: MailSmtpOff()
Sintaxe clssica:
RESULT lResult
Parmetros:
Nenhum
IN SERVER oRpcSrv
Retorno:
Lgico
MAILPOPOFF()
Encerra a conexo com o servio de POP
;
Sintaxe: MailPopOff()
Sintaxe clssica:
RESULT lResult
Parmetros:
Nenhum
IN SERVER oRpcSrv
Retorno:
Lgico
MAILRECEIVE()
Efetua o recebimento de um e-mail, salvando-o no local definido.
;
Sintaxe clssica:
Parmetros:
nNumber
cFrom
cTo
cCc
cSubject
cBody
aFiles
cBcc
cPath
lDelete
Retorno:
Lgico
MAILAUTH()
Funo que executa a autenticao do usurio no servio ativo.
;
Parmetros:
cUser
cPassword
Retorno:
Lgico
POPMSGCOUNT()
Verifica quantas mensagens existem na caixa de entrada do servio POP ativo.
;
Sintaxe: PopMsgCount(@nMsgCount)
Sintaxe clssica:
Parmetros:
nMsgCount
Retorno:
Lgico
MAILSEND()
Envia um e-mail utilizando a servio de SMTP ativo.
;
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:
cFrom
aTo
aCc
aBcc
cSubject
cBody
aFiles
lText
Retorno:
Lgico
MAILGETERR()
Retorna o erro que ocorreu no envio do e-mail.
;
Sintaxe: MailGetErr()
Sintaxe clssica:
Parmetros:
Nenhum
Retorno:
Caracter
#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
|
+----------------------------------------------------------------------/*/
USER FUNCTION SendMail(_lJob)
Local lResulConn := .T.
Local lResulSend := .T.
Local cError := ""
Local
Local
Local
Local
cServer
cEmail
cPass
lRelauth
Local cDe
Local cPara
:=
:=
:=
:=
AllTrim(GetMV("MV_RELSERV"))
AllTrim(GetMV("MV_RELACNT"))
AllTrim(GetMV("MV_RELPSW"))
GetMv("MV_RELAUTH")
:= cEmail
:= "arnaldojr@microsiga.com.br"
- 301 ADVPL Avanado
Continuao:
Local
Local
Local
Local
cCc
cAssunto
cAnexo
cMsg
Default _lJob
cMsg
cMsg
cMsg
cMsg
:=
+=
+=
+=
:=
:=
:=
:=
""
"Teste de envio de e-mail: Curso ADVPL"
"\SYSTEM\lgrl99.bmp"
Space(200)
:= .T.
"--------------------------------------------------"
"CURSO DE ADVPL
"
"--------------------------------------------------"
"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
DISCONNECT SMTP SERVER
IF lResulSend
If _lJob
ConOut(Padc("E-mail enviado com sucesso",80))
Else
MsgInfo("E-mail enviado com sucesso" + cError)
Endif
ENDIF
RETURN lResulSend
#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
|
+----------------------------------------------------------------------/*/
USER FUNCTION FSendMail(_lJob)
Local
Local
Local
Local
lResulConn := .T.
lResulSend := .T.
lResult
:= .T.
cError := ""
Local
Local
Local
Local
cServer
cEmail
cPass
lRelauth
:=
:=
:=
:=
AllTrim(GetMV("MV_RELSERV"))
AllTrim(GetMV("MV_RELACNT"))
AllTrim(GetMV("MV_RELPSW"))
GetMv("MV_RELAUTH")
Local
Local
Local
Local
Local
Local
Local
cDe
cPara
cCc
cBcc
cAssunto
cAnexo
cMsg
:=
:=
:=
:=
:=
:=
:=
cEmail
"arnaldojr@microsiga.com.br"
""
""
"Teste de envio de e-mail: Curso ADVPL"
"\SYSTEM\lgrl99.bmp"
Space(200)
Default _lJob
cMsg
cMsg
cMsg
cMsg
:=
+=
+=
+=
:= .F.
"--------------------------------------------------"
"CURSO DE ADVPL
"
"--------------------------------------------------"
"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
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
#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
|
+----------------------------------------------------------------------/*/
USER FUNCTION FPopMail(_lJob)
Local
Local
Local
Local
lResulConn := .T.
lResulPop := .T.
lResult
:= .T.
cError := ""
Local
Local
Local
Local
cServer
cEmail
cPass
lRelauth
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
cDe
:=
cPara
:=
cCc
:=
cBcc
:=
cAssunto :=
aAnexo
:=
cMsg
:=
cPath
:=
nMsgCount:=
nNumber :=
Default _lJob
:=
:=
:=
:=
AllTrim(GetMV("MV_RELSERV"))
AllTrim(GetMV("MV_RELACNT"))
AllTrim(GetMV("MV_RELPSW"))
GetMv("MV_RELAUTH")
""
""
""
""
""
{}
""
"\MailBox"
0
0
:= .F.
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)
For nNumber := 1 to nMsgCount
lResulPop := MailReceive(nNumber, @cDe, @cPara, @cCc, @cBcc,;
@cAssunto, @cMsg, @aAnexo , cPath, .F.)
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
Else // Salvar mensagem de e-mail
cMessage
cMessage
cMessage
cMessage
cMessage
cMessage
:=
+=
+=
+=
+=
+=
"DE: "+cDe+CRLF
"PARA: "+cPara+CRLF
"CC: "+cCc+CRLF
"BCC: "+cBcc+CRLF
"ASSUNTO: "+cAssunto+CRLF
"MENSAGEM: "+cMsg+CRLF
MsgInfo(cMessage,"E-mail Recebido")
Endif
End-For // Next nNumber
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()
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
11.
Parmetros:
cOrigem
cTitulo
aDadosCab
aDadosItens
Retorno:
Nenhum
#include "protheus.ch"
/*/
+----------------------------------------------------------------------| Funo
| GExpExcel
| Autor | Arnaldo R. Junior | Data |
|
+----------------------------------------------------------------------| Descrio | EXPORTACAO PARA EXCEL GENERICO
|
+----------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------/*/
User Function GExpExcel()
Local aCabExcel
:={}
Local aItensExcel
:={}
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
APNDICES
Relao de imagens para aplicaes visuais
AFASTAME
BPMSDOCI
COLTOT
AFASTAMENTO
BPMSEDT1
CONTAINR
ALT_CAD
BPMSEDT2
DBG05
AMARELO
BPMSEDT3
DBG06
ANALITICO
BPMSEDT4
DBG09
ANALITIC
BPMSRELA
DBG3
AGENDA
BPMSTASK1
DESTINOS
ALTERA
BPMSTASK2
DESTINOS2
AREA
BPMSTASK3
DISABLE
ASIENTOS
BPMSTASK4
DISCAGEM
AUTOM
BR_AMARELO
DOWN
BAIXATIT
BR_AZUL
E5
BAR
BR_AZUL_OCEAN
EDITABLE
BMPCALEN
BR_CINZA
EXCLUIR
BMPEMERG
BR_LARANJA
FILTRO
BMPGROUP
BR_MARROM
FINAL
BMPINCLUIR
BR_PRETO
FOLDER10
BMPPERG
BR_VERDE
FOLDER11
BMPPOST
BR_VERDE_OCEAN
FOLDER12
BMPTABLE
BR_VERMELHO
FOLDER14
BMPTRG
BR_VERMELHO_OCEAN
FOLDER5
BMPUSER
BUDGET
FOLDER6
BMPVISUAL
BUDGETY
FOLDER7
BONUS
CADEADO
GEOROTA
BOTTOM
CALCULADORA
GRAF2D
BPMSDOC
CANCEL
GRAF3D
BPMSDOCA
CHAVE2
HISTORIC
BPMSDOCE
CHECKED
INSTRUME
IMPRESSAO
PCO_ITALT
PMSSETATOP
LBNO
PCO_ITEXC
PMSSETAUP
LBOK
PCOCO
PMSTASK1
LBTIK
PCOCUBE
PMSTASK2
LEFT
PCOFXCANCEL
PMSTASK3
LINE
PCOFXOK
PMSTASK4
LIQCHECK
PENDENTE
PMSUSER
LJPRECO
PESQUISA
PMSZOOMIN
LOCALIZA
PGNEXT
PMSZOOMOUT
LUPA
PGPREV
POSCLI
MAQFOTO
PMSCOLOR
PRECO
MATERIAL
PMSEDT3
PREV
METAS_BAIXO_16
PMSEDT4
PRINT03
METAS_BAIXO_LEG
PMSEXCEL
PRODUTO
METAS_CIMA_16
PMSEXPALL
RECALC
METAS_CIMA_LEG
PMSEXPCMP
RECORTAR
MSGHIGH
PMSMAIS
RIGHT
MSVISIO
PMSMATE
RPMNEW
NEXT
PMSMENOS
RPMSAVE
NOTE
PMSPESQ
S4SB014N
NOVACELULA
PMSPRINT
S4WB001N
OBJETIVO
PMSRELA
S4WB005N
OK
PMSRRFSH
S4WB006N
ORDEM
PMSSETABOT
S4WB007N
PARAMETROS
PMSSETADIR
S4WB008N
PCO_COINC
PMSSETADOWN
S4WB009N
PCO_CONOR
PMSSETAESQ
S4WB010N
S4WB011N
WEB
CARAGANEW
S4WB014B
WFCHK
CARGASEQ
S4WB016N
WFUNCHK
CCTCALC
SALVAR
ADDCONTAINER
CHAT
SDUIMPORT
ADICIONAR_001
CHAT1
SDUPACK
ARMAZEM
CHAT2
SDUPROPR
ATALHO
CHAT3
SDUSETDEL
AVGARMAZEM
CHECK
SDUSOFTSEEK
AVGBOX1
CHECKOK
SHORTCUTDEL
AVGLBPAR1
CLOCK01
SHORTCUTEDIT
AVGOIC1
CLOCK02
SHORTCUTMINUS
AVIAO
CLOCK03
SHORTCUTNEW
AZUL
CLOCK04
SHORTCUTPLUS
BALANCA
DEVOLNF
SIMULACA
BGCOLOR
COBROWSR
SIMULACAO
BMPPARAM
COLFORM
SUGESTAO
BMPCONS
COMPTITL
SUMARIO
BMPCPO
COMSOM
SVM
BMPDEL
CRITICA
TK_VERTIT
BR_BRANCO
COPYUSER
UNCHECKED
BRANCO
CTBLANC
UP
BR_CANCEL
CTBREPLA
USER
BR_MARROM
DBG07
VCDOWN
BR_PINK
DELWEB
VCUP
BTCALC
COLOR
VENDEDOR
BTPESQ
DBG12
VERNOTA
CARGA
DBG10
DEPENDENTES
F7_VERM
F14_PINK
GEO
F8_NULL
F14_PRET
EDITWEB
F10_AMAR
F14_VERD
EMPILHADEIRA
F10_AZUL
F14_VERM
ENABLE
F10_CINZ
FRIAS
ESCALA
F10_LARA
FILTRO1
ESTOMOVI
F10_MARR
FOLDER8
F5_AZUL
F10_NULL
FOLDER13
F5_NULL
F10_PINK
FOLDER15
F5_VERD
F10_PRET
FORM
F5_VERM
F10_VERD
FRCOLOR
F6_NULL
F10_VERM
FRTOFFLINE
F5_AMAR
F11_NULL
FRTONLINE
F5_CINZ
F12_AMAR
GEO
F5_LARA
F12_AZUL
GEOEMAIL
F5_MARR
F12_CINZ
GEOTRECHO
F5_PINK
F12_LARA
GERPROJ
F5_PRET
F12_MARR
GLOBO
F7_AMAR
F12_PINK
IC_17
F7_AZUL
F12_PRET
INSTRUME
F7_CINZ
F12_VERD
LANDSCAPE
F7_LARA
F12_VERM
LIGHTBLU
F7_MARR
F14_AMAR
MDIHELP
F7_NULL
F14_AZUL
MDILOGOFF
F7_PINK
F14_CINZ
MDIRUN
F7_PRET
F14_LARA
MDISPOOL
F7_VERD
F14_MARR
MEDEXT
MENURUN
RPMCABEC
SDUFIELDS
MPWIZARD
RPMCPO
SDUFIND
NCO
RPMDES
SDUGOTO
NEWWEB
RPMFORM
SDUNEW
NOCONNECT
RPMFUNC
SDUOPEN
NOCHECKED
RPMGROUP
SDUOPENIDX
NOMEDICA
RPMIMP
SDUORDER
NORMAS
RPMIMPORT
SDURECALL
OPEN
RPMNEW2
SDUREPL
OPERACAO
RPMOPEN
SDUSEEK
OUTLOOK
RPMPERG
SDUSTRUCT
PAPEL_ESCRITO
RPMTABLE
SDUSUM
PEDIDO
S4WB004N
SDUZAP
PIN
S4WB013N
SEMSOM
PMSINFO
S4WB014A
SOLICITA
PREDIO
SALARIOS
SSFONTES
PRINT02
SAVECLOCK
TAB1
PROCESSA
SDUADDTBL
TABPRICE
PRODUT2
SDUAPPEND
TEXTBOLD
PROJETPMS
SDUCLOSE
TEXTCENTER
PRTETQ
SDUCLOSEIDX
XCLOSE
QMT_COND
SDUCOPYTO
TEXTITALIC
QMT_NO
SDUCOUNT
TEXTJUSTIFY
QMT_OK
SDUCREATEIDX
TEXTLEFT
RESPADEX
SDUDELETE
TEXTRIGHT
RESPONSA
SDUDRPTBL
TEXTUNDERLINE
ROSA
SDUERASE
TK_ALTFIN
TK_CLIFIN
BPMSEDT3A
GCT_NEW
TK_FIND
BPMSEDT3E
INVOICE1
TK_FONE
BPMSEDT3I
MSGGROUP
TK_HISTORY
BPMSEDT4A
MSGHIGH
TK_NOVO
BPMSEDT4E
PCO_COALT
TK_REFRESH
BPMSEDT4I
PCO_COEXC
TPOPAGTO1
BPMSREC
PCO_ITINC
UPDWARNING
BPMSRECA
PCOCOLA
UPDERROR
BPMSRECE
PCOCOPY
UPDINFORMATION
BPMSRECI
PCOEDIT
VERDE
BPMSRELAA
PCOFX
VERMELHO
BPMSRELAE
PCOLOCK
VERMESCURO
BPMSRELAI
PEDIDO2
WATCH
BPMSTSK1A
PEDIDO2_MDI
CLIENTE
BPMSTSK1E
PGRSAVE
ACAO
BPMSTSK1I
PMSAPONT
BOXBOM1
BPMSTSK2A
PMSCANC
BOXBOM2
BPMSTSK2E
PMSCOLUM
BOXBOM3
BPMSTSK2I
PMSCONS
BOXBOM4
BPMSTSK3A
PMSCUSTO
BOXBOM5
BPMSTSK3E
PMSDATE
BPMSEDT1A
BPMSTSK3I
PMSESTRU
BPMSEDT1E
BPMSTSK4A
PMSEXCEL
BPMSEDT1I
BPMSTSK4E
PMSEXEC
BPMSEDT2A
BPMSTSK4I
PMSEXPEXC
BPMSEDT2E
ENGRENAGEM2
PMSFILTER
BPMSEDT2I
GCT_EDIT
PMSGRAPH
PMSNEXT
MSGFORWD
UNSELECTALL
PMSOPCAO
MSGREPLY
BSTART
PMSPESQ
OMSDIVIDE
BTURNSHARPLEFT
PMSPREV
PMSUPDOWN
BTURNSHARPRIGHT
PMSPREVIO
SHAPE01
ENGRENAGEM
PMSPRINT
SHAPE02
PAGEDOWN
PMSPROG
SHAPE03
PAGEUP
PMSSUPALOC
SHAPE04
SELECT
PMSTOOLS
SHAPE05
SELECTALL
PMSUSERP
TRIDOWN
BBEARRIGHT
REFRESH
WORD
BEND
SHAPE06
ROTEIRO
BKEEPLEFT
TRILEFT
CLIPS_PQ
BKEEPRIGHT
TRIRIGHT
NEXT_PQ
BLEFT
VINCULA1
RELACIONAMENTO_DIREIRA_PQ
BRIGHT
BAHEAD
PREV_PQ
CANCEL
BBEARLEFT
UP.GIF
CONFIRM
DOWN
GOTOP
GOBOTTOM
INVERTSELECTION
LISTAS DE EXERCCIOS
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
Implementar uma funo que realize o envio de um texto simples para uma
conta de e-mail @totvs, que permita sua fcil identificao.
17
18
Projeto 01
Projeto 02
Projeto 03
REFERNCIAS BIBLIOGRFICAS
Referncias bibliogrficas
Gesto empresarial com ERP
Ernesto Haberkorn, 2006
Programao Orientada a Objetos com C ++
Ivan Luiz Marques Ricarte, 1996
Modelagem e Projetos baseados em objetos
James Rumbaugh, 1994 11. Edio
Programao orientada objetos no FiveWin
Gilmer FiveWin Brasil
Oficina de Programao
Robson Luiz Estefani Gonalves
Apostila de Treinamento - TReport
Tnia Bronzeri
Apostila de Treinamento - ADVPL
Educao corporativa
Apostila de Treinamento Boas Prticas de Programao
Inteligncia Protheus e Fbrica de Software
DEM Documentao Eletrnica Microsiga
Microsiga Software S.A.
Materiais diversos de colaboradores Microsiga
Colaboradores Microsiga
Colaboradores
Reviso 01
Arnaldo Raymundo Junior
Luis Akira Tamura
Mrcia Satiko Sasaki Tokura
Patricia Lopes Legas
Robson Luiz Estefani Gonalves
Srgio Sueo Fuzinaka
Data: 04.2008
CSA
Educao Corporativa
ACR-N1_FRAMEW1
Educao Corporativa
Fbrica de Software
Inteligncia Protheus
Educao Corporativa
Sintaxe: CTOD(cData)
Parmetros
cData
Exemplo:
cData := 31/12/2006
dData := CTOD(cData)
IF dDataBase >= dData
MSGALERT(Data do sistema fora da competncia)
ELSE
MSGINFO(Data do sistema dentro da competncia)
ENDIF
CVALTOCHAR()
Realiza a converso de uma informao do tipo numrico em uma string, sem a adio de
espaos a informao.
;
;
Sintaxe: CVALTOCHAR(nValor)
Parmetros
nValor
Exemplo:
FOR nPercorridos := 1 to 10
MSGINFO(Passos percorridos: +CvalToChar(nPercorridos))
NEXT nPercorridos
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
dData
Exemplo:
MSGINFO(Database do sistema: +DTOC(dData)
DTOS()
Realiza a converso de uma informao do tipo data em um caracter, sendo o resultado no
formato AAAAMMDD.
;
;
Sintaxe: DTOS(dData)
Parmetros
dData
Exemplo:
cQuery := SELECT A1_COD, A1_LOJA, A1_NREDUZ FROM SA1010 WHERE
cQuery += A1_DULTCOM >=+DTOS(dDataIni)+
STOD()
Realiza a converso de uma informao do tipo caracter com contedo no formato
AAAAMMDD em data.
;
;
Sintaxe: STOD(sData)
Parmetros
sData
Exemplo:
sData := LERSTR(01,08) // Funo que realiza a leitura de uma string de um txt previamente
// aberto
dData := STOD(sData)
STR()
Realiza a converso de uma informao do tipo numrico em uma string, adicionando espaos
direita.
;
;
Sintaxe: STR(nValor)
Parmetros
nValor
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.
;
;
nTamanho
Exemplo:
FOR nPercorridos := 1 to 10
MSGINFO(Passos percorridos: +CvalToChar(nPercorridos))
NEXT nPercorridos
VAL()
Realiza a converso de uma informao do tipo caracter em numrica.
;
;
Sintaxe: VAL(cValor)
Parmetros
cValor
Exemplo:
Static Function Modulo11(cData)
LOCAL L, D, P := 0
L := Len(cdata)
D := 0
P := 1
While L > 0
P := P + 1
D := D + (Val(SubStr(cData, L, 1)) * P)
If P = 9
P := 1
End
L := L - 1
End
D := 11 - (mod(D,11))
If (D == 0 .Or. D == 1 .Or. D == 10 .Or. D == 11)
D := 1
End
Return(D)
Matemticas
ACOS()
Funo utilizada para calcular o valor do arco co-seno.
Sintaxe: ACOS(nValor)
Parmetros:
;
;
nValor
Retorno:
Numrico
Range de 0 a radianos.
Se o valor informado no parmetro for menor que 1 ou maior que 1, acos
retorna um valor indefinido por default [+ , -]
CEILING()
Funo utilizada para calcular o valor mais prximo possvel de um valor nMax informado como
parmetro para a funo.
Sintaxe: CELLING(nMax)
Parmetros
;
;
nMax
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()
Funo utilizada para calcular o valor do co-seno ou co-seno hiperblico.
Importante: Se x >= 2^63 ou x <= -2^63 ocorre perda significante na chamada da
funo COS().
;
;
Sintaxe: COS(nAngulo)
Parmetros:
nAngulo
Retorno:
Numrico
Situaes invlidas:
Entrada
QNAN,IND
(cosf, cos)
x 7.104760e+002 (cosh, coshf)
Exceo apresentada
None
INVALID
INEXACT+OVERFLOW
Significado da Exceo
Sem Domnio
Sem Domnio
OVERFLOW
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:
;
;
nNatural
Retorno:
Numrico
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.
Importante: Se x >= 2^63 ou x <= -2^63 ocorre perda significante na chamada da
funo SIN().
;
;
Sintaxe: SIN(nAngulo)
Parmetros:
nAngulo
Retorno:
Numrico
Situaes invlidas:
Entrada
QNAN,IND
(senf, sen)
x 7.104760e+002 (senh, senhf)
Exceo apresentada
None
INVALID
INEXACT+OVERFLOW
Significado da Exceo
Sem Domnio
Sem Domnio
OVERFLOW
SQRT()
Funo utilizada para calcular a raiz quadrada de um nmero positivo.
Sintaxe: SQRT(nValor)
Parmetros:
;
;
nValor
Retorno:
Numrico
TAN()
Funo utilizada para calcular o valor da tangente ou tangente hiperblica.
Importante: Se x >= 2^63 ou x <= -2^63 ocorre perda significante na chamada da
funo cos.
;
;
Sintaxe: TAN(nAngulo)
Parmetros:
nAngulo
Retorno:
Numrico
Situaes invlidas:
Entrada
QNAN,IND
Exceo apresentada
None
INVALID
Significado da Exceo
Sem Domnio
Sem Domnio
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
cVariavel
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
cVariavel
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
nTamanho
cTexto
nColf
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.
;
;
xItem
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.
AADD(aItem, cVariavel1) // Adiciona um elemento no array aItem de acordo com o cVariavel1
AADD(aItem, cVariavel2) // Adiciona um elemento no array aItem de acordo com o cVariavel2
AADD(aItem, cVariavel3) // Adiciona um elemento no array aItem de acordo com o cVariavel3
//
//
//
//
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:
// aDados [1][1] -> corresponde ao contedo de cVariavel1
// aDados [1][2] -> corresponde ao contedo de cVariavel2
// aDados [1][3] -> corresponde ao contedo de cVariavel3
// aDados [2][1] -> corresponde ao contedo de cVariavel1
// aDados [2][2] -> corresponde ao contedo de cVariavel2
// aDados [2][3] -> corresponde ao contedo de cVariavel3
// aDados [3][1] -> corresponde ao contedo de cVariavel1
// aDados [3][2] -> corresponde ao contedo de cVariavel2
// aDados [3][3] -> corresponde ao contedo de cVariavel3
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:
// Utilizando o array aDados utilizado no exemplo da funo AADD()
aItens := ACLONE(aDados)
// Neste ponto, o array aItens possui exatamente a mesma estrutura e informaes do array
// aDados.
aDestino
nInicio
nQtde
nPosDestino
Retorno:
aDestino
Exemplo:
LOCAL nCount := 2, nStart := 1, aOne, aTwo
aOne := { 1, 1, 1 }
aTwo := { 2, 2, 2 }
ACOPY(aOne, aTwo, nStart, nCount)
// Result: aTwo is now { 1, 1, 2 }
ADEL()
A funo ADEL() permite a excluso de um elemento do array. Ao efetuar a excluso de um
elemento, todos os demais so reorganizados de forma que a ultima posio do array passar
a ser nula.
;
;
nPosio
Exemplo:
// Utilizando o array aItens do exemplo da funo ACLONE() temos:
ADEL(aItens,1) // Ser removido o primeiro elemento do array aItens.
//
//
//
//
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.
Importante: ADir uma funo obsoleta, utilize sempre Directory().
;
Parmetros:
cArqEspec
aNomeArq
aTamanho
aData
aHora
aAtributos
Retorno:
nArquivos
Exemplo:
LOCAL aFiles[ADIR("*.TXT")]
ADIR("*.TXT", aFiles)
AEVAL(aFiles, { |element| QOUT(element) })
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.
;
;
xExpValor
nInicio
nCount
Retorno:
aDestino
Exemplo:
LOCAL aLogic[3]
// Resultado: aLogic
AFILL(aLogic, .F.)
// Resultado: aLogic
AFILL(aLogic, .T., 2,
// Resultado: aLogic
AINS()
A funo AINS() permite a insero de um elemento no array especificado em qualquer ponto
da estrutura do mesmo, diferindo desta forma da funo AADD() a qual sempre insere um
novo elemento ao final da estrutura j existente.
;
;
nPosicao
Exemplo:
aAlunos := {Edson, Robson, Renato, Tatiana}
AINS(aAlunos,3)
// Neste ponto o array aAlunos ter o seguinte contedo:
// {Edson, Robson, nulo, Renato, Tatiana}
nColunas
Exemplo:
aDados := Array(3,3) // Cria um array de trs linhas, cada qual com 3 colunas.
Exemplo:
aAlunos := {Mrcio, Denis, Arnaldo, Patrcia}
bSeek := {|x| x == Denis}
nPosAluno := aScan(aAlunos,bSeek) // retorno esperado 2
Sintaxe: ASCANX ( < xDestino > , < bSeek > , [ nInicio ] , [ nCont ] )
Parmetros:
xDestino
bSeek
nInicio
nCont
Exemplo.:
nPos := aScanX( ARRAY, { |X,Y| X[1] == cNome .OR. y<=100})
nTamanho
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.
ASORT()
A funo ASORT() permite que os itens de um array sejam ordenados a partir de um critrio
pr-estabelecido.
;
;
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:
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:
nUltimo
Exemplo:
aArray := {"a", "b", "c", "d"}
ATAIL(aArray) // Resultado: d
xParamZ
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.
;
;
bFor
bWhile
Exemplo 01:
// Considerando o trecho de cdigo abaixo:
dbSelectArea(SX5)
dbSetOrder(1)
dbGotop()
While !Eof() .And. X5_FILIAL == xFilial("SX5") .And.; X5_TABELA <= mv_par02
nCnt++
dbSkip()
End
// O mesmo pode ser re-escrito com o uso da funo DBEVAL():
dbEval( {|x| nCnt++ },,{||X5_FILIAL==xFilial("SX5") .And. X5_TABELA<=mv_par02})
Exemplo 02:
// Considerando o trecho de cdigo abaixo:
dbSelectArea(SX5)
dbSetOrder(1)
dbGotop()
While !Eof() .And. X5_TABELA == cTabela
AADD(aTabela,{X5_CHAVE, Capital(X5_DESCRI)})
dbSkip()
End
// O mesmo pode ser re-escrito com o uso da funo DBEVAL():
dbEval({|| AADD(aTabela,{X5_CHAVE,Capital(X5_DESCRI)})},,{|| X5_TABELA==cTabela})
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
nInicio
nFim
Exemplo 01:
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)
MSGINFO(Dados do campo A1_NOME:+CRLF
Tamanho: + CVALTOCHAR(LEN(SA1->A1_NOME))+CRLF
Texto: + CVALTOCHAR(LEN(cNome)))
ASC()
Converte uma informao caractere em seu valor de acordo com a tabela ASCII.
;
;
Sintaxe: ASC(cCaractere)
Parmetros
cCaractere
Exemplo:
USER FUNCTION NoAcento(Arg1)
Local nConta := 0
Local cLetra := ""
Local cRet := ""
Arg1 := Upper(Arg1)
For nConta:= 1 To Len(Arg1)
cLetra := SubStr(Arg1, nConta, 1)
Do Case
Case (Asc(cLetra) > 191 .and. Asc(cLetra) < 198) .or.;
(Asc(cLetra) > 223 .and. Asc(cLetra) < 230)
cLetra := "A"
Case (Asc(cLetra) > 199 .and. Asc(cLetra) < 204) .or.;
(Asc(cLetra) > 231 .and. Asc(cLetra) < 236)
cLetra := "E"
Exemplo (continuao):
Case (Asc(cLetra) > 204 .and. Asc(cLetra) < 207) .or.;
(Asc(cLetra) > 235 .and. Asc(cLetra) < 240)
cLetra := "I"
Case (Asc(cLetra) > 209 .and. Asc(cLetra) < 215) .or.;
(Asc(cLetra) == 240) .or. (Asc(cLetra) > 241 .and. Asc(cLetra) < 247)
cLetra := "O"
Case (Asc(cLetra) > 216 .and. Asc(cLetra) < 221) .or.;
(Asc(cLetra) > 248 .and. Asc(cLetra) < 253)
cLetra := "U"
Case Asc(cLetra) == 199 .or. Asc(cLetra) == 231
cLetra := "C"
EndCase
cRet := cRet+cLetra
Next
Return UPPER(cRet)
AT()
Retorna a primeira posio de um caracter ou string dentro de outra string especificada.
;
;
cString
Exemplo:
STATIC FUNCTION NOMASCARA(cString,cMascara,nTamanho)
LOCAL cNoMascara
LOCAL nX := 0
:= ""
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
;
;
cValue
nBitIni
nBitEnd
nStrLen
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:
cFrase
Retorno:
String
CHR()
Converte um valor nmero referente a uma informao da tabela ASCII no caractere que esta
informao representa.
;
;
Sintaxe: CHR(nASCII)
Parmetros
nASCII
Exemplo:
#DEFINE CRLF CHR(13)+CHR(10) // FINAL DE LINHA
DESCEND()
Funo de converso que retorna a forma complementada da expresso string especificada.
Esta funo normalmente utilizada para a criao de indexadores em ordem decrescente
;
;
Retorno:
Caracter
Exemplo:
// Este exemplo utiliza DESCEND() em uma expresso INDEX para criar um ndice de datas de
// ordem descendente:
USE Sales NEW
INDEX ON DESCEND(DTOS(OrdDate)) TO SalesDate
// 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
Retorno:
Numrico
Exemplo:
GetDtoVal('123456')
//retorno 123456.0000
GetDtoVal('1/2/3/4/5/6') //retorno 123456.0000
GetDtoVal('fim.123456') //retorno 0.123456
GetDtoVal('teste')
//retorno 0.0
ISALPHA()
Funo utilizada para determinar se o caractere mais esquerda em uma cadeia de
caracteres alfabtico, permitindo avaliar se o string especificado comea com um caractere
alfabtico. Um caractere alfabtico consiste em qualquer letra maiscula ou minscula de A
a Z.
;
Parmetros:
cString
Retorno:
Lgico
ISDIGIT()
Funo utilizada para determinar se o caractere mais esquerda em uma cadeia de
caracteres um dgito, permitindo avaliar se o primeiro caractere em um string um dgito
numrico entre zero e nove.
;
Parmetros:
cString
Retorno:
Lgico
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:
cString
Retorno:
Lgico
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:
cString
Retorno:
Lgico
LEN()
Retorna o tamanho da string especificada no parmetro.
;
;
Sintaxe: LEN(cString)
Parmetros
cString
Exemplo:
cNome := ALLTRIM(SA1->A1_NOME)
MSGINFO(Dados do campo A1_NOME:+CRLF
Tamanho: + CVALTOCHAR(LEN(SA1->A1_NOME))+CRLF
Texto: + CVALTOCHAR(LEN(cNome)))
LOWER()
Retorna uma string com todos os caracteres minsculos, tendo como base a string passada
como parmetro.
;
;
Sintaxe: LOWER(cString)
Parmetros
cString
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().
LTRIM() relacionada a RTRIM(), a qual remove espaos em branco direita, e a ALLTRIM(),
que remove espaos tanto esquerda quanto direita.
O contrrio de ALLTRIM(), LTRIM(), e RTRIM() so as funes PADC(), PADR(), e PADL(), as
quais centralizam, alinham direita, ou alinham esquerda as cadeias de caracteres, atravs
da insero de caracteres de preenchimento.
;
;
Retorno:
Caracter
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:
cNum1
cOperacao
cNum2
Retorno:
Caracter
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:
Caracter
;
;
cExp
nTamanho
cCaracPreench
Retorno:
Caracter
RAT()
Retorna a ltima posio de um caracter ou string dentro de outra string especificada.
;
;
cString
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:
cString
nCount
Retorno:
cReplicated
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:
cString
nTamanho
lVolta
Indica se ser gerada uma string composta por letras e nmeros a partir de
uma string apenas numrica (.T.) ou se ser gerada uma string numrica a
partir de uma string composta por letras e nmeros (.F.)
Retorno:
Caracter
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.
LTRIM() relacionada a RTRIM(), que remove espaos em branco direita, e a ALLTRIM(),
que remove espaos em branco direita e esquerda.
O contrrio de ALLTRIM(), LTRIM(), e RTRIM() so as funes PADC(), PADR(), e PADL(), as
quais centralizam, alinham direita, ou alinham esquerda cadeias de caracteres, inserindo
caracteres de preenchimento.
;
Parmetros:
cString
Retorno:
Caracter
SPACE()
Funo de tratamento de caracteres utilizada para retornar uma quantidade especificada de
espaos. A utilizao desta funo tem o mesmo efeito que REPLICATE(' ', <nCont>), e
normalmente utilizada para inicializar uma varivel do tipo caractere, antes que a mesma seja
associada a um GET.
Sintaxe: SPACE ( < nCont > )
;
Parmetros:
nCont
Retorno:
Caracter
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:
cValue
cToken
Retorno:
Array
Exemplo:
STRTOKARR('1;2;3;4;5', ';')
//retorna {'1','2','3','4','5'}
STRTRAN()
Funo utilizada para realizar a busca da ocorrncia da string, sendo case sensitive.
;
Sintaxe: STRTRAN ( < cString > , < cSearch > , [ cReplace ] , [ nStart ] , [
nCount ] )
Parmetros:
cString
cSearch
cReplace
nStart
nCount
Retorno:
Code-Block
STUFF()
Funo que permite substituir um contedo caractere em uma string j existente,
especificando a posio inicial para esta adio e o nmero de caracteres que sero
substitudos.
;
Parmetros:
cString
nExcluir
cAdicao
nPosInicial
Retorno:
Caracter
Exemplo:
cLin := Space(100)+cEOL // Cria a string base
cCpo := PADR(SA1->A1_FILIAL,02) // Informao que ser armazenada na string
cLin := Stuff(cLin,01,02,cCpo) // Substitui o contedo de cCpo na string base
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).
;
;
nPosInicial
nCaracteres
Exemplo:
cCampo := A1_NOME
nPosUnder := AT(cCampo)
cPrefixo := SUBSTR(cCampo,1, nPosUnder) // A1_
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
cSayPicture
O valor a ser formatado. Esta expresso pode ser qualquer tipo de dados
vlidos, exceto vetor, bloco de cdigo, e NIL.
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
cString
Exemplo:
cTexto := ADVPL
MSGINFO(Texto:+LOWER(cTexto))
;
;
dExp
Retorno:
cDayWeek
Exemplo:
dData := DATE() // Resultado: 09/01/90
cDiaDaSemana := CDOW(DATE()) // Resultado: Friday
cDiaDaSemana := CDOW(DATE() + 7) // Resultado: Friday
cDiaDaSemana := CDOW(CTOD("06/12/90")) // Resultado: Tuesday
CMONTH()
Funo de converso de datas que retorna uma cadeia de caracteres com o nome do ms em
ingls.
Sintaxe: CMONTH( dData )
Parmetros:
;
;
dData
Retorno:
cMonth
Exemplo:
cMes
cMes
cMes
cMes
:=
:=
:=
:=
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:
dData
Data do sistema.
Exemplo:
dData := DATE() // Resultado: 09/01/01
dData := DATE() + 30 // Resultado: 10/01/01
dData := DATE() - 30 // Resultado: 08/02/90
dData := DATE()
cMes := CMONTH(dData) // Resultado: September
DAY()
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:
nDias
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
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:
nDia
Exemplo:
dData := DATE() // Resultado: 09/01/01
nDiaDaSemana := DOW(DATE()) // Resultado: 3
cDiaDaSemana := CDOW(DATE()) // Resultado: Tuesday
nDiaDaSemana := DOW(DATE() - 2) // Resultado: 1
cDiaDaSemana := CDOW(DATE() - 2) // Resultado: Sunday
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:
cData
Exemplo:
cData := DATE() // Resultado: 09/01/90
cData := DTOC(DATE()) // Resultado: 09/01/90
cData := "Today is " + DTOC(DATE()) // Resultado: Today is 09/01/90
DTOS()
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
Exemplo:
cData := DATE() // Resultado: 09/01/90
cData := DTOS(DATE()) // Resultado: 19900901
nLen := LEN(DTOS(CTOD(""))) // Resultado: 8
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:
Caracter
Exemplo:
cHoraInicio := TIME() // Resultado: 10:00:00
...
<instrues>
...
cElapsed := ELAPTIME(TIME(), cHoraInicio)
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:
Numrico
Exemplo:
dData := DATE() // Resultado: 09/01/01
nMes := MONTH(DATE()) // Resultado: 9
nMes := MONTH(DATE()) + 1 // Resultado: 10
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:
Numrico
Exemplo:
cHora := TIME() // Resultado: 10:00:00
cSegundos := SECONDS() // Resultado: 36000.00
//Este exemplo usa a funo SECONDS() para cronometrar o tempo decorrido:
LOCAL nStart, nElapsed
nStart:= SECONDS()
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:
Caracter
Exemplo:
cTime := TIME() // Resultado: 10:37:17
cHora := SUBSTR(cTime, 1, 2) // Resultado: 10
cMinutos := SUBSTR(cTime, 4, 2) // Resultado: 37
cSegundos := SUBSTR(cTime, 7, 2) // Resultado: 17
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:
Numrico
Exemplo 01:
dData := DATE() // Resultado: 09/20/01
dAno := YEAR(dData) // Resultado: 2001
dAno := YEAR(dData) + 11 // Resultado: 2012
Exemplo 02:
// Este exemplo cria uma funo de usurio que usa a funo YEAR() para formatar o valor da
// data:
cData := Mdy(DATE()) // Result: September 20, 1990
FUNCTION Mdy( dDate )
RETURN CMONTH(dDate) + " " + LTRIM(STR(DAY(dDate))) + "," + STR(YEAR(dDate))
Sintaxe: ABS(nValor)
Parmetros
nValor
Exemplo:
nPessoas := 20
nLugares := 18
IF nPessoas < nLugares
MSGINFO(Existem +CVALTOCHAR(nLugares- nPessoas)+disponveis)
ELSE
MSGSTOP(Existem +CVALTOCHAR(ABS(nLugares- nPessoas))+faltando)
ENDIF
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
nMax
nSeed
INT()
Retorna a parte inteira de um valor especificado no parmetro.
;
;
Sintaxe: INT(nValor)
Parmetros
nValor
Exemplo:
STATIC FUNCTION COMPRAR(nQuantidade)
LOCAL nDinheiro := 0.30
LOCAL nPrcUnit := 0.25
IF nDinheiro >= (nQuantidade*nPrcUnit)
RETURN nQuantidade
ELSEIF nDinheiro > nPrcUnit
nQuantidade := INT(nDinheiro / nPrcUnit)
ELSE
nQuantidade := 0
ENDIF
RETURN nQuantidade
NOROUND()
Retorna um valor, truncando a parte decimal do valor especificado no parmetro de acordo
com a quantidade de casas decimais solicitadas.
;
;
nCasas
RANDOMIZE()
Atravs da funo RANDOMIZE() , geramos um numero inteiro aleatrio, compreendido entre
a faixa inferior e superior recebida atravs dos parmetros nMinimo e nMaximo,
respectivamente.
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
nMinimo
nMaximo
Retorno:
Numrico
ROUND()
Retorna um valor, arredondando a parte decimal do valor especificado no parmetro de acordo
com a quantidades de casas decimais solicitadas, utilizando o critrio matemtico.
;
;
nCasas
Exemplo:
nBase := 2.985
nValor := ROUND(nBase,2) 2.99
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.
Importante: ADir uma funo obsoleta, utilize sempre Directory().
;
Parmetros:
cArqEspec
aNomeArq
aTamanho
aData
aHora
aAtributos
Retorno:
nArquivos
Exemplo:
LOCAL aFiles[ADIR("*.TXT")]
ADIR("*.TXT", aFiles)
AEVAL(aFiles, { |element| QOUT(element) })
CGETFILE()
Funo utilizada para seleo de um arquivo ou diretrio, disponibilizando uma interface
grfica para amigvel para o usurio. Esta funo est normalmente associada ao recurso de
abrir ou salvar arquivos, permitindo para esta ltima a digitao opcional do nome do arquivo
que ser gravado.
;
Parmetros:
ExpC1
ExpC2
Titilo da Janela
ExpN1
ExpC3
Expl1
.T. para mostrar boto como 'Salvar' e .F. para boto 'Abrir'
ExpN2
ExpL2
GETF_MULTISELECT
GETF_NOCHANGEDIR
GETF_LOCALFLOPPY
GETF_LOCALHARD
GETF_NETWORKDRIVE
GETF_SHAREWARE
No implementado
GETF_RETDIRECTORY
Retorna um diretrio
Exemplo:
cGetFile ( '*.PRW|*.CH'
GETF_LOCALFLOPPY)
'Fontes',
1,
'C:\VER507',
.F.,
GETF_LOCALHARD
Aparncia:
#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
|
//+--------------------------------------------------------------------+
USER FUNCTION SELFILE()
LOCAL cDirectory := ""
LOCAL aArquivos
:= {}
LOCAL nArq
:= 0
PRIVATE aParamFile:= ARRAY(1)
IF !PARBOXFILE()
RETURN
ENDIF
// Exibe a estrutura de diretrio e permite a seleo dos arquivos que sero
processados
cDirectory := ALLTRIM(cGetFile("Arquivos de Dados|'"+aParamFile[1]+"'|",
'Importao de lanamentos', 0,'', .T., GETF_OVERWRITEPROMPT + GETF_NETWORKDRIVE
+ GETF_RETDIRECTORY,.T.))
aArquivos
:= Directory(cDirectory+"*.*")
aArquivos
:= MARKFILE(aArquivos,cDirectory,aParamFile[1],@lSelecao)
FOR nArq TO Len(aArquivos)
IF !aArquivos[nArq][1]
LOOP
ENDIF
<...processamento...>
NEXT nArq
RETURN
//+--------------------------------------------------------------------+
//| 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
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
aParamBox := {}
cTitulo
:= "Filtros Adicionais"
aRet := {}
bOk
:= {|| .T.}
aButtons
:= {}
lCentered
:= .T.
nPosx
nPosy
cLoad := ""
lCanSave
:= .F.
lUserSave := .F.
nX
:= 0
lRet := .T.
AADD(aParamBox,{2,"Tipo de arquivo"
,2,{"*.dbf","*.dtc"},100,"AllwaysTrue()",.T.})
lRet := ParamBox(aParamBox, cTitulo, aRet, bOk, aButtons, lCentered, nPosx,
nPosy,, cLoad, lCanSave, lUserSave)
IF ValType(aRet) == "A" .AND. Len(aRet) == Len(aParamBox)
For nX := 1 to Len(aParamBox)
If aParamBox[nX][1] == 1
aParam102[nX] := aRet[nX]
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "C"
aParam102[nX] := aRet[nX] // Tipo do arquivo
ElseIf aParamBox[nX][1] == 2 .AND. ValType(aRet[nX]) == "N"
aParam102[nX] := aParamBox[nX][4][aRet[nX]] // Tipo do arquivo
Endif
Next nX
ENDIF
RETURN lRet
//+--------------------------------------------------------------------+
//| Rotina | MARKFILE | Autor | ARNALDO R. JUNIOR | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | Funo exemplo para marcao de mltiplos arquivos.
|
//+--------------------------------------------------------------------+
//| Uso
| CURSO DE ADVPL
|
//+--------------------------------------------------------------------+
STATIC FUNCTION MARKFILE(aArquivos,cDiretorio,cDriver,lSelecao)
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
//+--------------------------------------------------------------------+
//| Rotina | TROCA
| Autor | ARNALDO R. JUNIOR | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Uso
| CURSO DE ADVPL
|
//+--------------------------------------------------------------------+
STATIC FUNCTION Troca(nIt,aArray)
aArray[nIt,1] := !aArray[nIt,1]
Return aArray
//+--------------------------------------------------------------------+
//| Rotina | MARCAOK | Autor | ARNALDO R. JUNIOR | Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Uso
| CURSO DE ADVPL
|
//+--------------------------------------------------------------------+
STATIC FUNCTION MarcaOk(aArray)
Local lRet:=.F.
Local nx:=0
// Checa marcaes efetuadas
For nx:=1 To Len(aArray)
If aArray[nx,1]
lRet:=.T.
EndIf
Next nx
// Checa se existe algum item marcado na confirmao
If !lRet
HELP("SELFILE",1,"HELP","SEL. FILE","No existem itens marcados",1,0)
EndIf
Return lRet
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
cDestino
lCompacta
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
cDestino
lCompacta
Retorno:
Lgico
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" )
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:
Caracter
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
DIRECTORY()
Funo de tratamento de ambiente que retorna informaes a respeito dos arquivos no
diretrio corrente ou especificado. semelhante a ADIR(), porm retorna um nico vetor ao
invs de adicionar valores a uma srie de vetores existentes passados por referncia.
DIRECTORY() pode ser utilizada para realizar operaes em conjuntos de arquivos. Em
combinao com AEVAL(), voc pode definir um bloco que pode ser aplicado a todos os
arquivos que atendam a <cDirSpec> especificada.
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.
;
Significado
Incluir diretrios
Nota: Arquivos normais so sempre includos na pesquisa, a no ser que V seja especificado.
;
Metasmbolo
Directry.ch
cNome
F_NAME
cTamanho
F_SIZE
dData
F_DATE
cHora
F_TIME
cAtributos
F_ATT
Parmetros:
cDirSpec
cAtributos>
Retorno:
Array
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:
cDiretorio
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
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:
0
1
2
3
4
:
:
:
:
:
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:
nDrive
Retorno:
Numrico
Exemplo:
nBytesLocal := DISKSPACE( ) // Retorna o espao disponvel na unidade de disco local
IF nBytesLocal < 1048576
MsgStop('Unidade de Disco local possui menos de 1 MB livre.')
Else
MsgStop('Unidade de disco local possui '+str(nBytes_A,12)+' bytes livres.')
Endif
nBytes_A := DISKSPACE( 1 ) // Retorna o espao disponvel no drive A: local ( remote ).
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
EXISTDIR()
Funo utilizada para determinar se um path de diretrio existe e valido.
;
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:
Lgico
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:
nHandle
Retorno:
Lgico
Exemplo:
#include "Fileio.ch"
nHandle := FCREATE("Testfile", FC_NORMAL)
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
;
Valor
Descrio
FC_NORMAL
FC_READONLY
FC_HIDDEN
FC_SYSTEM
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
nAtributo
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() .
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
Retorno:
Numrico
Exemplo:
#include 'DIRECTRY.CH'
aEval(Directory("*.BAK"), { |aFile| FERASE(aFile[F_NAME]) })
// Este exemplo apaga um arquivo no cliente ( Remote ) , informando o status da operao
IF FERASE("C:\ListaTXT.tmp") == -1
MsgStop('Falha na deleo do Arquivo ( FError'+str(ferror(),4)+ ')')
Else
MsgStop('Arquivo deletado com sucesso.')
ENDIF
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:
cArquivo
Retorno:
Lgico
Exemplo:
//Verifica no diretrio corrente do servidor se existe o arquivo teste.dbf
FILE("teste.dbf")
// Verifica no diretrio Sigaadv do servidor se existe o arquivo teste.dbf
FILE("\SIGAADV\TESTE.dbf")
// Verifica no diretrio Temp do cliente (Remote) se existe o arquivo teste.dbf
FILE("C:\TEMP\TESTE.dbf")
Parmetros
cString
Exemplo:
Local cString := '\SIGAADV\ARQZZZ.DBF'
cString := FileNoExt( cString )
// Retorno \SIGAADV\ARQZZZ
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.
Caso o arquivo especificado seja aberto, o valor retornado o handle (manipulador) do
Sistema Operacional para o arquivo. Este valor semelhante a um alias no sistema de banco
de dados, e ele exigido para identificar o arquivo aberto para as outras funes de
tratamento de arquivo. Portanto, importante sempre atribuir o valor que foi retornado a uma
varivel para uso posterior, como mostra o exemplo desta funo.
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
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
...
;
Constate(fileio.ch)
Operao
FO_READ
FO_WRITE
FO_READWRITE
Constate(fileio.ch)
Operao
FO_COMPAT
16
FO_EXCLUSIVE
32
FO_DENYWRITE
48
FO_DENYREAD
64
FO_DENYNONE
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:
nHandle
cBuffer
nQtdBytes
Retorno:
Numrico
FREADSTR ()
Funo que realiza a leitura de caracteres de um arquivo binrio. FREADSTR() l de um
arquivo aberto, atravs de FOPEN(), FCREATE(), FOPENPORT(). FREADSTR() ler at o nmero
de bytes informado em nQtdBytes ou at encontrar um CHR(0). Caso acontea algum erro ou
o arquivo chegue ao final, FREADSTR() retornar uma string menor do que nQdBytes e
colocar o erro em FERROR(). FREADSTR() l a partir da posio atual do ponteiro, que pode
ser ajustado pelo FSEEK(), FWRITE( ) ou FREAD().
;
Parmetros:
nHandle
nQtdBytes
Retorno:
Caracter
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 ? ).
Vale lembrar que no possvel renomear um arquivo especificando nos parmetros
simultaneamente um caminho de servidor e um de estao remota, bem como especificar dois
arquivos remotos e executar a funo fRename() atravs de um JOB. Caso isto ocorra, a
funo retornar -1 , e fError() retornar tambm -1.
Quando especificamos um path diferente nos arquivos de origem e destino ,
a funo fRename() realiza a funcionalidade de MOVER o arquivo para o Path
especificado.
Parmetros:
cOldFile
cNewFile
Retorno:
Numrico
FSEEK()
Funo que posiciona o ponteiro do arquivo para as prximas operaes de leitura ou
gravao. As movimentaes de ponteiros so relativas nOrigem que pode ter os seguintes
valores, definidos em fileio.ch:
;
Constate(fileio.ch)
Operao
FS_SET
FS_RELATIVE
FS_END
Parmetros:
nHandle
nOffSet
nOrigem
;
Retorno:
Numrico
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.
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:
Numrico
Exemplo:
FT_FUse('teste.txt') // Abre o arquivo
CONOUT("Linhas no arquivo ["+str(ft_flastrec(),6)+"]")
FT_FGOTOP()
While !FT_FEof()
conout("Ponteiro ["+str(FT_FRECNO(),6)+"] Linha ["+FT_FReadln()+"]")
FT_FSkip()
Enddo
FT_FUse() // Fecha o arquivo
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
FT_FRECNO()
A funo tem o objetivo de retornar a posio do ponteiro do arquivo texto.
A funo FT_FRecno retorna a posio corrente do ponteiro do arquivo texto aberto pela
FT_FUse.
;
;
Sintaxe: FT_FRECNO ( )
Parmetros:
Nenhum
Retorno:
Caracter
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.
;
;
Retorno:
Numrico
FWRITE()
Funo que permite a escrita em todo ou em parte do contedo do buffer , limitando a
quantidade de Bytes atravs do parmetro nQtdBytes. A escrita comea a partir da posio
corrente do ponteiro de arquivos, e a funo FWRITE retornar a quantidade real de bytes
escritos. Atravs das funes FOPEN(), FCREATE(), ou FOPENPORT(), podemos abrir ou criar
um arquivo ou abrir uma porta de comunicao , para o qual sero gravados ou enviados os
dados do buffer informado. Por tratar-se de uma funo de manipulao de contedo binrio ,
so suportados na String cBuffer todos os caracteres da tabela ASCII , inclusive caracteres de
controle ( ASC 0 , ASC 12 , ASC 128 , etc.).
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:
nHandle
cBuffer
nQtdBytes
Retorno:
Numrico
Exemplo:
#INCLUDE "FILEIO.CH"
#DEFINE F_BLOCK 1024 // Define o bloco de Bytes a serem lidos / gravados por vez
User Function TestCopy()
Local cBuffer := SPACE(F_BLOCK)
Local nHOrigem , nHDestino
Local nBytesLidos , nBytesFalta , nTamArquivo
Local nBytesLer , nBytesSalvo
Local lCopiaOk := .T.
// Abre o arquivo de Origem
nHOrigem := FOPEN("ORIGEM.TXT", FO_READ)
Exemplo (continuao):
// Testa a abertura do Arquivo
If nHOrigem == -1
MsgStop('Erro ao abrir origem. Ferror = '+str(ferror(),4),'Erro')
Return .F.
Endif
// Determina o tamanho do arquivo de origem
nTamArquivo := Fseek(nHOrigem,0,2)
// Move o ponteiro do arquivo de origem para o inicio do arquivo
Fseek(nHOrigem,0)
// Cria o arquivo de destino
nHDestino := FCREATE("DESTINO.TXT", FC_NORMAL)
// Testa a criao do arquivo de destino
If nHDestino == -1
MsgStop('Erro ao criar destino. Ferror = '+str(ferror(),4),'Erro')
FCLOSE(nHOrigem) // Fecha o arquivo de Origem
Return .F.
Endif
// Define que a quantidade que falta copiar o prprio tamanho do Arquivo
nBytesFalta := nTamArquivo
// Enquanto houver dados a serem copiados
While nBytesFalta > 0
// Determina quantidade de dados a serem lidos
nBytesLer
:= Min(nBytesFalta , F_BLOCK )
// l os dados do Arquivo
nBytesLidos := FREAD(nHOrigem, @cBuffer, nBytesLer )
// Determina se no houve falha na leitura
If nBytesLidos < nBytesLer
MsgStop(
"Erro de Leitura da Origem. "+;
Str(nBytesLer,8,2)+" bytes a LER."+;
Str(nBytesLidos,8,2)+" bytes Lidos."+;
"Ferror = "+str(ferror(),4),'Erro')
lCopiaOk := .F.
Exit
Endif
// Salva os dados lidos no arquivo de destino
nBytesSalvo := FWRITE(nHDestino, cBuffer,nBytesLer)
// Determina se no houve falha na gravao
If nBytesSalvo < nBytesLer
MsgStop("Erro de gravao do Destino. "+;
Str(nBytesLer,8,2)+" bytes a SALVAR."+;
Str(nBytesSalvo,8,2)+" bytes gravados."+;
"Ferror = "+str(ferror(),4),'Erro')
lCopiaOk := .F.
EXIT
Endif
Exemplo (continuao):
// Elimina do Total do Arquivo a quantidade de bytes copiados
nBytesFalta -= nBytesLer
Enddo
// Fecha os arquivos de origem e destino
FCLOSE(nHOrigem)
FCLOSE(nHDestino)
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()
Funo que executa a cpia binria de um arquivo para o destino especificado.
;
Parmetros:
cArqOrig
cArqDest
Retorno:
Lgico
Exemplo:
Local cArqOrig := 'ARQ00001.DBF'
Local cArqDest := 'ARQ00002.XXX'
If MsCopyFile( cArqOrig, cArqDest )
APMsgInfo('Copia realizada com sucesso!')
EndIf
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:
cArqOrig
cArqDest
Retorno:
Lgico
Exemplo:
Local cArqDest := 'SX2ZZZ.DBF'
DbSelectArea('SX2')
If MsCopyTo( , cArqDest )
APMsgInfo('Copia realizada com sucesso!')
Else
APMsgInfo('Problemas ao copiar o arquivo SX2!')
EndIf
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.
aStruct: array contendo a estrutura da tabela aonde:
1 - caracter, nome do campo;
2 - caracter, tipo do campo;
3 - numrico, tamanho do campo;
4 - numrico, decimais.
Parmetros:
cArquivo
Nome do arquivo.
aStruct
Estrutura do arquivo.
cDriver
RDD do arquivo.
Retorno:
Lgico
Exemplo:
Local cTarget := '\sigaadv\'
Local aStrut
aStrut := { { 'Campo', 'C', 40, 0 } }
If MsCreate( cTarget+'ARQ1001', aStrut )
APMsgInfo('Criado com sucesso!')
Else
APMsgInfo('Problemas ao criar o arquivo!')
EndIf
MSERASE()
Funo utilizada para deletar fisicamente o arquivo especificado.
;
Parmetros:
cArquivo
cIndice
cDriver
Retorno:
Lgico
Exemplo:
Local cArquivo := 'SX2ZZZ.DBF'
Local cIndice := 'SX2ZZZ'+ OrdBagExt()
If MsErase( cArquivo, cIndice )
APMsgInfo( 'Arquivo deletado com sucesso!' )
Else
APMsgInfo( 'Problemas ao deletar arquivo!' )
EndIf
MSRENAME()
Funo que verifica a existncia do arquivo especificado.
;
Parmetros:
cArquivo
cIndice
cDriver
Retorno:
Lgico
Exemplo:
Local cArquivo := 'SX2ZZZ.DBF'
Local cIndice := 'SX2ZZZ'+ OrdBagExt()
If !MsFile ( cArquivo, cIndice )
APMsgInfo( 'Arquivo no encontrado!' )
EndIf
RETFILENAME()
Funo que retorna o nome de um arquivo contido em uma string, ignorando o caminho e a
extenso.
;
Parmetros:
cArquivo
Retorno:
Caracter
Exemplo:
Local cArquivo := '\SIGAADV\ARQZZZ.DBF'
cArquivo := RetFileName( cArquivo )
// retorno ARQZZZ
Sintaxe: CriaTrab(aArray,lDbf)
Parmetros:
aArray
lDbf
;
Retorno:
Caracter
Exemplo:
// Com lDbf = .F.
cArq := CriaTrab(NIL, .F.)
cIndice := C9_AGREG++IndexKey()
Index on &cIndice To &cArq
// Com lDbf = .T.
aStru := {}
AADD(aStru,{ MARK , C, 1, 0})
AADD(aStru,{ AGLUT , C, 10, 0})
AADD(aStru,{ NUMOP , C, 10, 0})
AADD(aStru,{ PRODUTO, C, 15, 0})
AADD(aStru,{ QUANT , N, 16, 4})
AADD(aStru,{ ENTREGA, D, 8, 0})
AADD(aStru,{ ENTRAJU, D, 8, 0})
AADD(aStru,{ ORDEM , N, 4, 0})
AADD(aStru,{ GERADO , C, 1, 0})
cArqTrab := CriaTrab(aStru, .T.)
USE &cArqTrab ALIAS TRB NEW
Parmetros:
nAreaTrabalho
Retorno:
Caracter
Exemplo:
cAlias := alias()
IF empty(cAlias)
alert('No h Area em uso')
Else
alert(Area em uso atual : '+cAlias)
Endif
BOF() / EOF()
As funes BOF() e EOF() so utilizadas para determinar se o ponteiro de leitura do arquivo
encontra-se no comeo ou no final do mesmo conforme abaixo:
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.
Normalmente utilizada a condio EOF() como parte do argumento <lCondicao> de uma
construao DO WHILE que processa registros sequencialmente em um arquivo de banco de
dados. Neste caso <lCondicao> incluiria um teste para .NOT. EOF(), forando o lao DO
WHILE a terminar quando EOF() retornar verdadeiro (.T.)
Parmetros:
Nenhum
Retorno:
Lgico
Lgico
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 ) .
A tabela de destino dos dados copiados criada, e aberta em modo exclusivo, antes da
operao de cpia efetiva ser iniciada.
;
Elemento do Arquivo
Formato
T ou F
(campo ignorado)
Delimitador de Campos
Nenhum
Separador de Registros
Nenhum
Elemento do Arquivo
Formato
T ou F
(campo ignorado)
Delimitador de Campos
Vrgula
Separador de Registros
Nenhum
Sintaxe:
Parmetros:
FIELDS <campo,...>
TO cFile
cEscopo
WHILE <lCondicao>
FOR <lCondicao>
[SDF|DELIMITED]
VIA <cDriver>
Retorno:
Nenhum
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 ).
A Linguagem Advpl, antes do Protheus, suportava a parametrizao de uma
lista de campos da tabela atual, para compor a estrutura da tabela de destino,
atravs da clusula FIELDS <campo,...>. Esta opo no suportada no
Protheus. Caso seja utilizada, o programa ser abortado com a ocorrncia de
erro fatal : 'DBCopyStruct - Parameter <Fields> not supported in
Protheus'
;
Sintaxe:
Parmetros:
TO <xcDataBase>
Retorno:
Nenhum
DBAPPEND()
A funo DBAPPEND() acrescenta mais um registro em branco no final da tabela corrente. Se
no houver erro da RDD, o registro acrescentado e bloqueado.
;
Parmetros:
lLiberaBloqueios
Retorno:
Nenhum
Exemplo:
USE Clientes NEW
FOR i:=1 to 5
DBAPPEND(.F.)
NOME := "XXX"
END : ="YYY"
NEXT
// Os 5 registros includos permanecem bloqueados
DBAPPEND()
// Todos os bloqueios anteriores so liberados
DBCLEARALLFILTER()
A funo DBCLEARALLFILTER() salva as atualizaes realizadas e pendentes de todas as
tabelas e depois limpa as condies de filtro de todas as tabelas.
;
Sintaxe: DBCLEARALLFILTER()
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
USE Clientes NEW
DBSETFILTER( {|| Idade < 40}, 'Idade < 40') // Seta a expresso de filtro
...
DBCLEARALLFILTER()
// Limpa a expresso de filtro de todas as ordens
DBCLEARFILTER()
A funo DBCLEARFILTER() salva as atualizaes realizadas e pendentes na tabela corrente e
depois limpa todas as condies de filtro da ordem ativa no momento. Seu funcionamento
oposto ao comando SET FILTER.
;
Sintaxe: DBCLEARFILTER()
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
USE Clientes NEW
DBSETFILTER( {|| Idade < 40}, "Idade < 40" ) // Seta a expresso de filtro
...
DBCLEARFILTER()
// Limpa a expresso de filtro
DBCLEARINDEX()
A funo DBCLEARINDEX() salva as atualizaes pendentes na tabela corrente e fecha todos
os arquivos de ndice da rea de trabalho. Por conseqncia, limpa todas as ordens da lista.
Seu funcionamento oposto ao comando SET INDEX.
;
Sintaxe: DBCLEARINDEX()
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
USE Clientes NEW
DBSETINDEX("Nome") // Abre o arquivo de ndice "Nome"
...
DBCLEARINDEX()
// Fecha todos os arquivos de ndices
DBCLOSEALL()
A funo DBCLOSEALL() salva as atualizaes pendentes,
bloqueados e fecha todas as tabelas abertas (reas
chamasse DBCLOSEAREA para cada rea de trabalho.
;
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:
DbUserArea(.T., DBFCDX, \SA1010.DBF, SA1DBF, .T., .F.)
DbSelectArea(SA1DBF)
MsgInfo(A tabela SA1010.DBF possui: + STRZERO(RecCount(),6) + registros.)
DbCloseArea()
DBCOMMIT()
A funo DBCOMMIT() salva em disco todas as atualizaes pendentes na rea de
trabalho corrente.
;
Sintaxe: DBCOMMIT()
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
USE Clientes NEW
DBGOTO(100)
Nome := "Jose"
USE Fornecedores NEW
DBGOTO(168)
Nome := "Joao"
DBCOMMIT() // Salva em disco apenas as alteraes realizadas na tabela Fornecedores
DBCOMMITALL()
A funo DBCOMMITALL() salva em disco todas as atualizaes pendentes em todas
as reas de trabalho.
;
Sintaxe: DBCOMMITALL()
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
USE Clientes NEW
DBGOTO(100)
Nome := "Jose"
USE Fornecedores NEW
DBGOTO(168)
Nome := "Joao"
DBCOMMITALL()
// Salva em disco as alteraes realizadas nas tabelas Clientes e Fornecedores
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
aESTRUTURA
cDRIVER
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
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.
Exemplo: O nmero 12.45 poderia ser o valor de um campo com
len=5 e dec=2 (no mnimo).
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.
;
Sintaxe:
Parmetros:
DBCREATEINDEX(<cNOME>,
[lUNICO])
<cEXPCHAVE>,
[bEXPCHAVE],
cNOME
cEXPCHAVE
bEXPCHAVE
lUNICO
Retorno:
Nenhum
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:
USE Cliente VIA "DBFCDX" NEW
DBCREATEINDEX("\teste\ind2.cdx","Nome+End",{ || Nome+End },.T.)
DBDELETE()
A funo DBDELETE() marca o registro corrente como apagado logicamente(), sendo
necessria sua utilizao em conjunto com as funes RecLock() e MsUnLock().
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
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:
dbUseArea( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. )
MessageBox("O Alias corrente : "+DBF(),"Alias", 0) //Resultado: "O Alias corrente : SSS"
DBFIELDINFO()
A funo DBFIELDINFO() utilizada para obter informaes sobre determinado campo da
tabela corrente. O tipo de informao (primeiro argumento) escolhido de acordo com as
constantes abaixo:
;
Descrio
Retorno
DBS_NAME
Nome do campo.
Caracter
DBS_DEC
Numrico
DBS_LEN
Tamanho.
Numrico
DBS_TYPE
Tipo.
Caracter
Parmetros:
nINFOTIPO
nCAMPO
Retorno:
Indefinido
Exemplo:
USE Clientes NEW
DBFIELDINFO(DBS_NAME,1) // Retorno: Nome
DBFIELDINFO(DBS_TYPE,1) // Retorno: C
DBFIELDINFO(DBS_LEN,1) // Retorno: 10
DBFIELDINFO(DBS_DEC,1) // Retorno: 0
DBFILTER()
A funo DBFILTER() utilizada para verificar a expresso de filtro ativo na rea de trabalho
corrente.
;
Sintaxe: DBFILTER()
Parmetros:
Nenhum
Retorno:
Caracter
Exemplo:
USE Cliente INDEX Ind1 NEW
SET FILTER TO Nome > "Jose"
DBFILTER() // retorna: Nome > "Jose"
SET FILTER TO Num < 1000
DBFILTER() // retorna: Num < 1000
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
nRecno
Exemplo:
DbSelectArea(SA1)
DbGoto(100) // Posiciona no registro 100
IF !EOF() // Se a rea de trabalho no estiver em final de arquivo
MsgInfo(Voc est no cliente:+A1_NOME)
ENDIF
DBGOTOP()
Move o cursor da rea de trabalho ativa para o primeiro registro lgico.
;
;
Sintaxe: DbGoTop()
Parmetros
Nenhum
Exemplo:
nCount := 0 // Varivel para verificar quantos registros h no intervalo
DbSelectArea(SA1)
DbSetOrder(1) // A1_FILIAL + A1_COD + A1_LOJA
DbGoTop()
While !BOF() // Enquanto no for o incio do arquivo
nCount++ // Incrementa a varivel de controle de registros no intervalo
DbSkip(-1)
End
MsgInfo(Existem :+STRZERO(nCount,6)+ registros no intervalo).
// Retorno esperado :000001, pois o DbGoTop posiciona no primeiro registro.
DBGOBOTTON()
Move o cursor da rea de trabalho ativa para o ltimo registro lgico.
;
;
Sintaxe: DbGoBotton()
Parmetros
Nenhum
Exemplo:
nCount := 0 // Varivel para verificar quantos registros h no intervalo
DbSelectArea(SA1)
DbSetOrder(1) // A1_FILIAL + A1_COD + A1_LOJA
DbGoBotton()
While !EOF() // Enquanto no for o incio do arquivo
nCount++ // Incrementa a varivel de controle de registros no intervalo
DbSkip(1)
End
MsgInfo(Existem :+STRZERO(nCount,6)+ registros no intervalo).
// Retorno esperado :000001, pois o DbGoBotton posiciona no ltimo registro.
DBINFO()
DBINFO() utilizada para obter informaes sobre a tabela corrente. O tipo de informao
(primeiro argumento) escolhido de acordo com as constantes abaixo:
;
Descrio
Retorno
DBI_GETRECSIZE
Numrico
DBI_TABLEEXT
Caracter
DBI_FULLPATH
Caracter
DBI_BOF
Lgico
DBI_EOF
Lgico
DBI_FOUND
Lgico
DBI_FCOUNT
Numrico
DBI_ALIAS
Caracter
DBI_LASTUPDATE
Data
da
Sintaxe: DBINFO(<nINFOTIPO>)
Parmetros:
nINFOTIPO
Retorno:
Indefinido
Exemplo:
USE Clientes NEW
DBINFO(DBI_FULLPATH) // Retorno: C:\Teste\Clientes.dbf
DBINFO(DBI_FCOUNT) // Retorno: 12
DBGOTOP()
DBINFO(DBI_BOF) // Retorno: .F.
DBSKIP(-1)
DBINFO(DBI_BOF) // Retorno: .T.
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:
cNick
Retorno:
Caracter
DBORDERINFO()
A funo DBORDERINFO() utilizada para obter informaes sobre determinada ordem. A
especificao da ordem pode ser realizada atravs de seu nome ou sua
posio dentro da lista de ordens, mas se ela no for especificada sero
obtidas informaes da ordem corrente.O tipo de informao (primeiro argumento) escolhido
de acordo com as constantes abaixo:
;
Descrio
Retorno
DBOI_BAGNAME
Caracter
DBOI_FULLPATH
Caracter
DBOI_ORDERCOUNT
Caracter
Sintaxe: DBORDERINFO(<nINFOTIPO>)
Parmetros:
nINFOTIPO
Retorno:
Caracter
Exemplo:
DBORDERINFO(DBOI_BAGNAME) // retorna: Ind
DBORDERINFO(DBOI_FULLPATH) // retorna: C:\AP6\Teste\Ind.cdx
DBORDERNICKNAME()
A funo DBORDERNICKNAME() utilizada para selecionar a ordem ativa atravs de seu
apelido. Esta ordem a responsvel pela seqncia lgica dos registros da tabela corrente.
;
Sintaxe: DBORDERNICKNAME(<cAPELIDO>)
Parmetros:
cAPELIDO
Retorno:
Lgico
Exemplo:
USE Cliente NEW
SET INDEX TO Nome, Idade
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()
// Se a excluso for confirmada:
__DBPACK()
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
DBRECORDINFO()
A funo DBRECORDINFO() utilizada para obter informaes sobre o registro especificado
pelo segundo argumento (recno) da tabela corrente, se esta informao for omitida ser
verificado o registro corrente. O tipo de informao (primeiro argumento) escolhido de
acordo com as constantes abaixo:
;
Descrio
Retorno
DBRI_DELETED
Lgico
DBRI_RECSIZE
Numrico
DBRI_UPDATED
Lgico
Parmetros:
nINFOTIPO
nREGISTRO
Retorno:
Indefinido
Exemplo:
USE Clientes NEW
DBGOTO(100)
DBRECORDINFO(DBRI_DELETED) // Retorno: .F.
DBDELETE()
DBRECORDINFO(DBRI_DELETED) // Retorno: .F.
DBRECALL()
DBRECORDINFO(DBRI_RECSIZE) // Retorno: 230
NOME := "JOAO"
DBGOTO(200)
DBRECORDINFO(DBRI_UPDATED) // Retorno: .F.
DBRECORDINFO(DBRI_UPDATED,100) // Retorno: .T.
DBREINDEX()
A funo DBREINDEX() reconstri todos os ndices da rea de trabalho corrente e posiciona as
tabelas no primeiro registro lgico.
;
Sintaxe: DBREINDEX()
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
USE Clientes NEW
DBSETINDEX("IndNome")
DBREINDEX()
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:
nREGISTRO
Retorno:
Lgico
Exemplo:
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. )
DBGOTO(100)
DBRLOCK() // Bloqueia o registro atual (100)
DBRLOCK(110) // Bloqueia o registro de nmero 110
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:
Array
Exemplo:
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. )
DBGOTOP()
DBRLOCK() // Bloqueia o primeiro registro
DBRLOCK(110) // Bloqueia o registro de nmero 110
DBRLOCK(100) // Bloqueia o registro de nmero 100
DBRLOCKLIST() // Retorna: {1,100,110}
DBRUNLOCK()
A funo DBRUNLOCK() utilizada para liberar determinado registro bloqueado. O usurio
pode escolher o registro a ser desbloqueado atravs do parmetro (Recno), mas se este for
omitido ser desbloqueado o registro corrente como na funo DBUNLOCK(). Esta funo o
oposto DBRLOCK, que bloquea os registros.
;
Sintaxe: DBRUNLOCK([nREGISTRO])
Parmetros:
nREGISTRO
Retorno:
Nenhum
Exemplo:
DBUSEAREA( .T.,"dbfcdxads", "\dadosadv609\sa1990.dbf","SSS",.T., .F. )
DBGOTO(100)
DBRUNLOCK() //Desbloqueia o registro atual (100)
DBRUNLOCK(110) // Desbloqueia o registro de nmero 110
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:
cNOVORDD
Retorno:
Caracter
Exemplo:
DBSETDRIVER("CTREECDX") // Retorna: DBFCDX
DBSETDRIVER() // Retorna: CTREECDX
Para utilizar os arquivos de extenso padro do RDD este dado deve ser
especificado.
;
;
Sintaxe: DBSETINDEX(<@cARQINDICE>)
Parmetros:
cARQINDICE
Retorno:
Nenhum
Exemplo:
USE Cliente NEW
DBSETINDEX("Ind1")
DBSETINDEX("\teste\Ind2.cdx")
DBSETNICKNAME()
A funo DBSETNICKNAME() utilizada para colocar um apelido em determinada ordem
especificada pelo primeiro parmetro. Caso seja omitido o nome do apelido a ser dado, a
funo apenas verifica o apelido corrente.
;
Parmetros:
cINDICE
cAPELIDO
Retorno:
Caracter
Exemplo:
USE Cliente NEW
DBSETNICKNAME("IndNome") // retorna: ""
DBSETNICKNAME("IndNome","NOME") // retorna: ""
DBSETNICKNAME("IndNome") // retorna: "NOME"
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.
;
;
cArea
Sintaxe: DbSetOrder(nOrdem)
Parmetros
nOrdem
Nmero de referncia da ordem que deseja ser definida como ordem ativa
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
NickName
Exemplo:
DbSelectArea(SA1)
DbOrderNickName(Tipo) // De acordo com o arquivo SIX -> A1_FILIAL+A1_TIPO
NickName: Tipo
DBSEEK() E MSSEEK()
DbSeek(): Permite posicionar o cursor da rea de trabalho ativo no registro com as
informaes especificadas na chave de busca, fornecendo um retorno lgico indicando se o
posicionamento foi efetuado com sucesso, ou seja, se a informao especificada na chave de
busca foi localizada na rea de trabalho.
Sintaxe: DbSeek(cChave, lSoftSeek, lLast)
Parmetros
;
;
cChave
lSoftSeek
lLast
Sintaxe: DbSkip(nRegistros)
Parmetros
nRegistros
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.
;
;
cCondicao
DBSTRUCT()
Retorna um array contendo a estrutura da rea de trabalho (alias) ativo. A estrutura ser um
array bidimensional conforme abaixo:
ID*
Nome campo
Tipo campo
Tamanho
Decimais
*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()
A funo DBUNCLOK() retira os bloqueios dos registros e do arquivo da tabela corrente.
;
Sintaxe: DBUNLOCK()
Parmetros:
Nenhum
Retorno:
Nenhum
DBUNLOCKALL()
A funo DBUNLOCKALL() Retira os bloqueios de todos os registros e dos arquivos de todas as
tabelas abertas. Esta funo utilizada para liberar todos os registros bloqueados e
equivalente a executar DBUNLOCK para todas as tabelas da rea de trabalho.
;
Sintaxe: DBUNLOCKALL()
Parmetros:
Nenhum
Retorno:
Nenhum
DBUSEAREA()
Define um arquivo de base de dados como uma rea de trabalho disponvel na aplicao.
;
Sintaxe: DbUseArea(lNovo, cDriver, cArquivo, cAlias, lComparilhado,;
lSoLeitura)
;
Parmetros
lNovo
cDriver
cArquivo
cAlias
lComparilhado
lSoLeitura
Exemplo:
DbUserArea(.T., DBFCDX, \SA1010.DBF, SA1DBF, .T., .F.)
DbSelectArea(SA1DBF)
MsgInfo(A tabela SA1010.DBF possui: + STRZERO(RecCount(),6) + registros.)
DbCloseArea()
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:
USE "\DADOSADV\AA1990.DBF" SHARED NEW
DBGOTO(100)
IF DELETED()
Messagebox("O registro atual foi deletado","Erro", 0)
ENDIF
FCOUNT()
A funo FCOUNT() avalia a quantidade de campos existentes na estrutura do arquivo ativo
como rea de trabalho.
;
Sintaxe: FCOUNT()
Parmetros:
Nenhum
Retorno:
Numrico
Exemplo:
DbSelectArea(SA1)
nFields := FCOUNT()
IF nFields > 0
MSGINFO(A estrutura da tabela contm :+CvalToChar(nFields)+campos.)
ENDIF
FOUND()
A funo FOUND() recupera o resultado de sucesso referente a ltima operao de busca
efetuada pelo processamento corrente.
;
Sintaxe: FOUND()
Parmetros:
Nenhum
Retorno:
Lgico
Exemplo:
Pergunte(cPerg,.T.)
DbSelectArea(SA1)
DbSetOrder(1)
DbSeek(xFilial(SA1)+MVPAR01)
IF Found()
MSGINFO(Cliente encontrado)
ELSE
MSGALERT(Dados no encontrados)
ENDIF
INDEXKEY()
A funo INDEXKEY() determina a expresso da chave de um ndice especificado na rea de
trabalho corrente, e o retorna na forma de uma cadeia de caracteres, sendo normalmente
utilizada na rea de trabalho correntemente selecionada.
;
Sintaxe: INDEXKEY()
Parmetros:
nOrdem
Retorno:
Caracter
Exemplo:
cExpressao := SA1->(IndexKey())
INDEXORD()
A funo INDEXORD() verifica a posio do ndice corrente na lista de ndices do respectivo
alias.
;
Sintaxe: INDEXORD()
Parmetros:
Nenhum
Retorno:
Numrico
Exemplo:
USE Cliente NEW
SET INDEX TO Nome, End, Cep
nOrd:=INDEXORD() // Return: 1 - o primeiro ndice da lista
LUPDATE()
A funo LUPDATE() verifica qual a data da ltima modificao e fechamento da tabela
corrente, sendo que caso no exista tabela corrente retornada uma data em branco.
;
Sintaxe: LUPDATE()
Parmetros:
Nenhum
Retorno:
Data
Exemplo:
// Mostra a data da ltima modificao da tabela corrente,
dModificacao := LUpdate()
IF (EMPTY(dModificacao))
CONOUT("No h tabela corrente")
ELSE
CONOUT(("Data da ultima modificacao : " + DTOS(dModificacao)))
ENDIF
MSAPPEND()
A funo MsAppend() adiciona registros de um arquivo para outro, respeitando a estrutura das
tabelas.
;
Parmetros:
cArqDest
cArqOrig
Retorno:
Lgico
Exemplo:
dbSelectArea(XXX)
MsAppend(,ARQ00001)
MSUNLOCK()
Libera o travamento (lock) do registro posicionado confirmando as atualizaes efetuadas
neste registro.
;
;
Sintaxe: MsUnLock()
Parmetros
Nenhum
Exemplo:
DbSelectArea(SA1)
DbSetOrder(1) // A1_FILIAL + A1_COD + A1_LOJA
DbSeek(01 + 900001 + 01) // Busca exata
IF Found() // Avalia o retorno do ltimo DbSeek realizado
RecLock(SA1,.F.)
SA1->A1_NOME := CLIENTE CURSO ADVPL BSICO
SA1->A1_NREDUZ := ADVPL BSICO
MsUnLock() // Confirma e finaliza a operao
ENDIF
ORDBAGEXT()
A funo ORDBAGEXT utilizada no gerenciamento de indices para os arquivos de dados do
sistema, permitindo avaliar qual a extenso deste ndices atualmente em uso, de acordo com a
RDD ativa.
;
Sintaxe: ORDBAGEXT()
Parmetros:
Nenhum
Retorno:
cBagExt
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 funo ORDKEY() verifica qual a expresso de chave de determinada ordem. Caso no
sejam especificados os parmetros de identificao da ordem, verificada a ordem corrente.
Para evitar conflito, no caso de haver mais de uma ordem com o mesmo nome, pode-se
passar o parmetro com o nome do ndice ao qual a ordem pertence.
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:
cOrdem
nPosicao
cArqIndice
Retorno:
Caracter
Exemplo:
USE Cliente NEW
INDEX ON Nome+Cod TO Ind1 FOR Nome+Cod > 'AZZZZZZZ'
ORDKEY('Ind1')
// Retorna: Nome+Cod
RECLOCK()
Efetua o travamento do registro posicionado na rea de trabalho ativa, permitindo a incluso
ou alterao das informaes do mesmo.
;
;
Sintaxe: RecLock(cAlias,lInclui)
Parmetros
cAlias
lInclui
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
IF Found() // Avalia o retorno do ltimo DbSeek realizado
RecLock(SA1,.F.)
SA1->A1_NOME := CLIENTE CURSO ADVPL BSICO
SA1->A1_NREDUZ := ADVPL BSICO
MsUnLock() // Confirma e finaliza a operao
ENDIF
Sintaxe: RECNO()
Parmetros:
Nenhum
Retorno:
nRecno
Exemplo:
DbSelectArea(SA1)
DbGoto(100) // Posiciona no registro de recno 100.
MSGINFO(Registro posicionado:+cValToChar(RECNO()))
SELECT()
A funo SELECT() determina o nmero da rea de trabalho de um alias. O nmero retornado
pode variar de zero a 250. Se <cAlias> no for especificado, retornado o nmero da rea de
trabalho corrente. Caso <cAlias> seja especificado e o alias nao existir, SELECT() retorna zero.
;
Sintaxe: SELECT([cAlias])
Parmetros:
cAlias
Retorno:
Numrico
Exemplo:
nArea := Select(SA1)
ALERT(Referncia do alias SA1: +STRZERO(nArea,3)) // 10 (proposto)
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:
USE Employee INDEX Name NEW
SET FILTER TO Age > 50
LIST LastName, FirstName, Age, Phone
SET FILTER TO
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.
Na aplicao ERP Protheus, o SoftLock() utilizado nos browses, antes da confirmao da
operao de alterao e excluso, pois neste momento a mesma ainda no foi efetivada, mas
outras conexes no podem acessar aquele registro pois o mesmo est em manuteno, o que
implementa da integridade da informao.
;
Sintaxe: SoftLock(cAlias)
Parmetros
cAlias
Exemplo:
cChave := GetCliente() // Funo ilustrativa que retorna os dados de busca de um cliente
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
USED()
A funo USED() utilizada para determinar se h um arquivo de banco de dados em uso em
uma rea de trabalho especfica. O padro que USED() opere na rea de trabalho
correntemente selecionada.
Sintaxe: USED()
Parmetros:
;
;
Nenhum
Retorno:
Lgico
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
cCampo
cAliasSXE
nOrdem
CONFIRMSXE()
Confirma o nmero alocado atravs do ltimo comando GETSXENUM().
;
;
Sintaxe: CONFIRMSXE(lVerifica)
Parmetros
lVerifica
ROLLBACKSXE()
Descarta o nmero fornecido pelo ltimo comando GETSXENUM(), retornando a numerao
disponvel para outras conexes.
;
;
Sintaxe: ROLLBACKSXE()
Parmetros
Nenhum
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:
Lgico
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:
Lgico
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.
Funo utilizada normalmente para verificar se um determinado cdigo de cadastro j existe
na tabela na qual a informao ser inserida, como por exemplo o CNPJ no cadastro de
clientes ou fornecedores.
;
;
cConteudo
nIndice
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.
Funo utilizada normalmente para verificar se a informao digitada em um campo, a qual
depende de outra tabela, realmente existe nesta outra tabela, como por exemplo o cdigo de
um cliente em um pedido de venda.
;
;
cAlias
cConteudo
nIndice
LETTERORNUM()
A funo LETTERORNUM() avalia se um determinado contedo composto apenas de letras e
nmeros (alfanumrico).
;
Sintaxe: LETTERORNUM(cString)
Parmetros:
cString
Retorno:
Lgico
NAOVAZIO()
Retorna .T. ou .F. se o contedo do campo posicionado no momento no est vazio.
;
;
Sintaxe: NaoVazio()
Parmetros
Nenhum
NEGATIVO()
Retorna .T. ou .F. se o contedo digitado para o campo 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
cString
POSITIVO()
Retorna .T. ou .F. se o contedo digitado para o campo 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()
Retorna .T. ou .F. se o contedo do campo posicionado no momento est vazio.
;
;
Sintaxe: Vazio()
Parmetros
Nenhum
Sintaxe: GETMV(cParametro)
Parmetros
cParametro
GETNEWPAR()
Retorna o contedo do parmetro especificado no arquivo SX6, considerando a filial
parametrizada na conexo. Caso o parmetro no exista ser exibido um help do sistema
informando a ocorrncia.
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.
;
;
cParametro
cPadrao
cFilial
Define para qual filial ser efetuada a consulta do parmetro. Padro filial
corrente da conexo.
PUTMV()
Atualiza o contedo do parmetro especificado no arquivo SX6, de acordo com as
parametrizaes informadas.
;
;
cConteudo
SUPERGETMV()
Retorna o contedo do parmetro especificado no arquivo SX6, considerando a filial
parametrizada na conexo. Caso o parmetro no exista ser exibido um help do sistema
informando a ocorrncia.
Difere do GetMv() pois os parmetros consultados so adicionados em uma rea de memria,
que permite que em uma nova consulta no seja necessrio acessar e pesquisar o parmetro
na base de dados.
;
;
cParametro
lHelp
cPadrao
cFilial
Define para qual filial ser efetuada a consulta do parmetro. Padro filial
corrente da conexo.
Controle de impresso
AVALIMP()
A funo AVALIMP() utilzada em relatrios especficos em substituio da funo CABEC(),
configurando a impressora de acordo com o driver escolhido e os parmetros de impresso
disponveis no array aReturn, respeitando o formato utilizado pela funo SETPRINT().
;
Sintaxe: AVALIMP(nLimite)
Parmetros:
nLimite
Retorno:
Caracter
Exemplo:
/*/
+----------------------------------------------------------------------------| Funo
| XAVALIMP
| Autor | ARNALDO RAYMUNDO JR. | Data | 01.01.2007 |
+----------------------------------------------------------------------------| Descrio | Exemplo de utilizao da funo AXCADASTRO()
|
|+---------------------------------------------------------------------------| Uso
| Curso ADVPL
|
|+---------------------------------------------------------------------------/*/
USER FUNCTION XAVALIMP()
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
LOCAL
cTitulo
cDesc1
cDesc2
cDesc3
cTamanho
cLimite
cNatureza
aReturn
cNomeProg
cPerg
nLastKey
cString
:= PADC(AVALIMP,74)
:= PADC(Demonstrao do uso da funo AVALIMP(),74)
:=
:= PADC(CURSO DE ADVPL,74)
:= G
:= 220
:=
:= {Especial, 1,Administrao, 1, 2, 2,,1}
:= RAVALIMP
:= PADR(RAVALIMP,10) // Compatibilizao com MP10
:= 0
:=SF2"
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
|
|+---------------------------------------------------------------------------/*/
Static Function RunReport(cString)
SetPrc(0,0)
//+-------------------------------------------------------------------------+
//| Chamada da funo AVALIMP()
|
//+-------------------------------------------------------------------------+
@ 00,00 PSAY AvalImp(220)
dbSelectArea(cString)
dbSeek(xFilial()+mv_par01+mv_par03,.T.)
...
Return
CABEC()
A funo CABEC() determina as configuraes de impresso do relatrio e imprime o cabealho
do mesmo.
;
Sintaxe: Cabec(cTitulo, cCabec1, cCabec2, cNomeProg, nTamanho, nCompress,
aCustomText, lPerg, cLogo)
;
Parmetros:
cTitulo
Ttulo do relatrio
cCabec1
cCabec2
cNomeProg
nTamanho
nCompress
aCustomText
lPerg
Parmetros (continuao):
cLogo
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
|
|+---------------------------------------------------------------------------/*/
User Function MPTR001()
Local
Local
Local
Local
Local
cDesc1
cDesc2
cDesc3
cTitulo
lImprime
:=
:=
:=
:=
:=
// 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
Default lCriaTrab := .T.
Private lEnd
:= .F.
Private lAbortPrint
:= .F.
Private aReturn
:= { "Zebrado", 1, "Administracao", 2, 2, 1, "", 1}
//aReturn[4] 1- Retrato, 2- Paisagem
//aReturn[5] 1- Em Disco, 2- Via Spool, 3- Direto na Porta, 4- Email
Private nLastKey
Private m_pag
Private wnrel
:= 0
:= 01
:= "MPTR002"
dbSelectArea("SA1")
dbSetOrder(1)
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
SetDefault(aReturn,cString,,,cTamanho,aReturn[4]) // nFormato: 1- Retrato, 2Paisagem
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
|
|+---------------------------------------------------------------------------/*/
Static Function RunReport(cTitulo,cString,cNomeProg,cTamanho,nTipo,nLimite)
Local
Local
Local
Local
nLin
cCabec1
cCabec2
cArqInd
cCabec1
cCabec1
cCabec1
cCabec2
:=
+=
+=
:=
:= 80
:= ""
:= ""
"CODIGO"+Space(2)+"LOJA"+Space(2)+"NOME REDUZIDO"+Space(9)
"RAZAO SOCIAL"+Space(30)+"CNPJ"+Space(18)+"INSCR.ESTADUAL"+Space(8)
"CEP"
"ESTADO"+Space(2)+"MUNICIPIO"+Space(8)+"ENDERECO"
dbSelectArea("TRBSA1")
dbGoTop()
SetRegua(RecCount())
Exemplo (continuao):
While !EOF()
If lAbortPrint .OR. nLastKey == 27
@nLin,00 PSAY "*** CANCELADO PELO OPERADOR ***"
Exit
Endif
If nLin > 55 // Salto de Pgina. Neste caso o formulario tem 55 linhas...
Cabec(cTitulo,cCabec1,cCabec2,cNomeProg,cTamanho,nTipo)
nLin := 9
Endif
...
IMPCADAST()
A funo IMPCADAST() cria uma interface simples que permite a impresso dos cadastros do
sistema com parametrizao DE/ATE.
;
Parmetros:
cCab1
cCab2
cCab3
cNomeProg
Nome do programa
cTam
nLimite
cAlias
;
Retorno:
Nenhum
MS_FLUSH()
A funo MS_FLUSH() envia o spool de impresso para o dispositivo previamente especificado
com a utilizao das funes AVALIMP() ou SETPRINT().
;
Sintaxe: MS_FLUSH()
Parmetros:
Nenhum
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()
|
|+---------------------------------------------------------------------------/*/
Static Function RunReport(cTitulo,cString,cNomeProg,cTamanho,nTipo,nLimite)
Local
Local
Local
Local
nLin
cCabec1
cCabec2
cArqInd
cCabec1
cCabec1
cCabec1
cCabec2
:=
+=
+=
:=
:= 80
:= ""
:= ""
"CODIGO"+Space(2)+"LOJA"+Space(2)+"NOME REDUZIDO"+Space(9)
"RAZAO SOCIAL"+Space(30)+"CNPJ"+Space(18)+"INSCR.ESTADUAL"+Space(8)
"CEP"
"ESTADO"+Space(2)+"MUNICIPIO"+Space(8)+"ENDERECO"
dbSelectArea("TRBSA1")
dbGoTop()
SetRegua(RecCount())
While !EOF()
If lAbortPrint .OR. nLastKey == 27
@nLin,00 PSAY "*** CANCELADO PELO OPERADOR ***"
Exit
Endif
If nLin > 55 // Salto de Pgina. Neste caso o formulario tem 55 linhas...
Cabec(cTitulo,cCabec1,cCabec2,cNomeProg,cTamanho,nTipo)
nLin := 9
Endif
// Primeira linha de detalhe:
@nLin,000 PSAY TRBSA1->A1_COD
@nLin,008 PSAY TRBSA1->A1_LOJA
@nLin,014 PSAY TRBSA1->A1_NREDUZ
@nLin,036 PSAY TRBSA1->A1_NOME
@nLin,078 PSAY TRBSA1->A1_CGC
@nLin,100 PSAY TRBSA1->A1_INSCR
@nLin,122 PSAY TRBSA1->A1_CEP
nLin++
Exemplo (continuao):
// Segunda linha de detalhe
@nLin,000 PSAY TRBSA1->A1_EST
@nLin,008 PSAY TRBSA1->A1_MUN
@nLin,025 PSAY TRBSA1->A1_END
nLin++
//Linha separadora de detalhes
@nLin,000 PSAY Replicate("-",nLimite)
nLin++
dbSkip() // Avanca o ponteiro do registro no arquivo
EndDo
SET DEVICE TO SCREEN
If aReturn[5]==1
dbCommitAll()
SET PRINTER TO
OurSpool(wnrel)
Endif
MS_FLUSH()
RETURN
OURSPOOL()
A funo OURSPOOL() executa o gerenciador de impresso da aplicao Protheus, permitindo
a visualizao do arquivo de impresso gerado pelo relatrio no formato PostScrip com
extenso ##R.
;
Sintaxe: OURSPOOL(cArquivo)
Parmetros:
cArquivo
Retorno:
;
.
Exemplo:
If aReturn[5]==1 // Indica impresso em disco.
dbCommitAll()
SET PRINTER TO
OurSpool(wnrel)
Endif
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.
Pode ser utilizado o ponto de entrada "RodaEsp" para tratamento de
uma impresso especfica.
Parmetros:
uPar01
No mais utilizado
uPar02
No mais utilizado
cSize
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"
User Function TestImpr()
Local wnrel
Local cString := "SA1"
Local titulo
:= "Teste Impresso de Relatorios"
Local NomeProg := "XXX"
Local Tamanho := "M"
PRIVATE aReturn := { "Zebrado", 1,"Administracao", 1, 2, 1, "",1 }
wnrel:=SetPrint(cString,NomeProg,"",@titulo,"", "", "",.F.,.F.,.F.,Tamanho,,.F.)
SetDefault(aReturn,cString)
RptStatus({|lEnd| TestRel(@lEnd,wnRel,cString,Tamanho,NomeProg)},titulo)
Return
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
LOCAL
Local
Local
cabec1,cabec2
cRodaTxt := oemtoansi("Rodap")
nCntImpr
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
Set Device to Screen
If aReturn[5] = 1
Set Printer To
dbCommitAll()
OurSpool(wnrel)
Endif
MS_FLUSH()
Return
- 458 Guia de Referncia Rpida
ADVPL Avanado
SETDEFAULT()
A funo SetDefault() prepara o ambiente de impresso de acordo com as informaes
configuradas no array aReturn, obtidas atravs da funo SetPrint().
;
Sintaxe:
Parmetros:
aReturn
Configuraes de impresso.
cAlias
uParm3
Parmetro reservado.
uParm4
Parmetro reservado.
cSize
nFormat
Retorno:
Nenhum
Estrutura aReturn:
aReturn[1]
aReturn[2]
aReturn[3]
Caracter, destinatrio
aReturn[4]
aReturn[5]
aReturn[6]
aReturn[7]
aReturn[8]
Numrico, ordem
aReturn[x]
A partir a posio [9] devem ser informados os nomes dos campos que
devem ser considerados no processamento, definidos pelo uso da opo
Dicionrio da SetPrint().
SETPRC()
A funo SETPRC() utilizada para posicionar o dispositivo de impresso ativo, previamente
definido pelo uso das funes AVALIMP() ou SETPRINT() , em uma linha/coluna especificada.
;
Parmetros:
nLinha
nColuna
Retorno:
Nenhum
Exemplo:
aReturn := { "", 1, "" , 2, 3, cPorta , "",IndexOrd() }
SetPrint(Alias(),"","","",,,,.F.,,,,,,,'EPSON.DRV',.T.,,cPorta)
if nLastKey == 27
Return (.F.)
Endif
SetDefault(aReturn,Alias())
SetPrc(0,0)
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:
m_pag: controla o nmero de pginas.
aReturn: vetor contendo as opes de impresso, sendo sua estrutura bsica
composta de 8 (oito) elementos.
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:
cAlias
cProgram
cPergunte
cTitle
Ttulo do relatrio.
- 460 Guia de Referncia Rpida
ADVPL Avanado
Parmetros (continuao):
cDesc1
Descrio do relatrio.
cDesc2
cDesc3
lDic
aOrd
Ordem(s) de impresso.
lCompres
cSize
uParm12
Parmetro reservado
lFilter
lCrystal
cNameDrv
uParm16
Parmetro reservado.
lServer
cPortPrint
Retorno:
Caracter
Nome do Relatrio
Estrutura aReturn:
aReturn[1]
aReturn[2]
aReturn[3]
Caracter, destinatrio
aReturn[4]
aReturn[5]
aReturn[6]
aReturn[7]
aReturn[8]
Numrico, ordem
aReturn[x]
A partir a posio [9] devem ser informados os nomes dos campos que
devem ser considerados no processamento, definidos pelo uso da opo
Dicionrio da SetPrint().
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:
cAlias
Retorno:
Lgico
CLOSEOPEN()
A funo CLOSEOPEN() utilizada para fechar e re-abrir uma lista de arquivos especificada.
;
Parmetros:
aClose
aOpen
Retorno:
Lgico
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:
Lgico
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:
cAlias
lExcl
cNewAlias
;
Retorno:
Lgico
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
CONOUT()
A funo CONOUT() permite a exibio de uma mensagem de texto no console do Server do
Protheus. Caso o Protheus esteja configurado como servio a mensagem ser gravada no
arquivo de log.
;
Sintaxe: CONOUT(cMensagem)
Parmetros:
cMensagem
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:
cCampo
Nome do campo
lIniPad
cLado
Retorno:
Indefinido
Exemplo:
// Exemplo do uso da funo CriaVar:
cNumNota := CriaVar(F2_DOC) // Retorna o contedo do
// inicializador padro,
// se existir, ou espaos em branco
Alert(cNumNota)
Return
DISARMTRANSACTION()
A funo DISARMTRANSATCION() utilizada para realizar um RollBack de uma transao
aberta com o comando BEGIN TRANSACTION e delimitada com o comando END
TRANSACTION.
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.
O uso da funo DISARMTRANSACTION() no finaliza a conexo ou o
processamento corrente.
Caso seja necessrio alm de desfazer as alteraes,
processamento, dever ser utilizada a funo USEREXCEPTION().
Sintaxe: DISARMTRANSACTION()
Parmetros:
Nenhum
Retorno:
Nenhum
Exemplo:
lMsErroAuto := .F.
MSExecAuto({|x,y| MATA240(x,y)}, aCampos, 3)
If lMsErroAuto
aAutoErro := GETAUTOGRLOG()
DisarmTransaction()
MostraErro()
EndIf
finalizar
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.
A funo de usurio executada atravs da EXECBLOCK() no recebe
parmetros diretamente, sendo que estes estaro disponveis em uma
varivel private denominada PARAMIXB.
Sintaxe: EXISTBLOCK(cFuno)
Parmetros:
cFuno
Retorno:
Lgico
Exemplo:
IF EXISTBLOCK(MT100GRV)
EXECBLOCK(MT100GRV,.F.,.F.,aParam)
ENDIF
Parmetros:
cFuno
lReserv1
lReserv2
xParam
Retorno:
Indefinido
Exemplo:
aParam := {cNota, cSerie, cFornece, cLoja)
IF EXISTBLOCK(MT100GRV)
lGravou := EXECBLOCK(MT100GRV,.F.,.F.,aParam)
ENDIF
USER FUNCTION MT100GRV()
LOCAL
LOCAL
LOCAL
LOCAL
cNota := PARAMIXB[1]
cSerie:= PARAMIXB[1]
cFornece:= PARAMIXB[1]
cLoja:= PARAMIXB[1]
RETURN .T.
ERRORBLOCK()
A funo ERRORBLOCK() efetua o tratamento de erros e define a atuao de um handler de
erros sempre que ocorrer um erro em tempo de execuao. O manipulador de erros
especificado como um bloco de cdigo da seguinte forma:
{ |<objError>| <lista de expressoes>, ... }, onde:
<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.
Se nao foi especificado nenhum <bErrorHandler> utilizando ERRORBLOCK() e ocorrer um erro
em tempo de execuao, o bloco de tratamento ao de erros padrao avaliado. Este
manipulador de erros exibe uma mensagem descritiva na tela, ajusta a funao ERRORLEVEL()
para 1, e depois sai do programa (QUIT).
Como ERRORBLOCK() retorna o bloco de tratamento ao de erros corrente, possvel
especificar um bloco de tratamento de erros para uma operaao gravando-se o bloco de
manipulaao de erros corrente e depois recuperando-o aps o final da operaao. Alm disso,
- 467 Guia de Referncia Rpida
ADVPL Avanado
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.
cVarOutMod := If(Type("cVarOutMod") = "U", "", cVarOutMod)
cOutMod
:= cVarOutMod + If(Right(cVarOutMod, 1) = ",", "", ",")
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
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:
cMensagem1
Primeira mensagem
cMensagem2
Segunda mensagem
Retorno:
Nenhum
Exemplo:
User Function ValidUser( cUsuario, cSenha )
Local cMensag1 := Usurio invalido!
Local cMensag2 := Opo disponvel para usurios Adminstradores!
If !PswAdmin( cUsuario, cSenha )
Final( cMensag1, cMensag2 )
EndIf
Return
FINDFUNCTION()
A funo FINDFUNCTION() tem como objetivo verificar se uma determinada funo se
encontra no repositrio de objetos e at mesmo do binrio do Protheus, sendo uma funo
bsica da linguagem.
;
Sintaxe: FINDFUNCTION(cFuno)
Parmetros:
cFuno
Retorno:
Lgico
FUNDESC()
A funo FunDesc() retornar a descrio de uma opo selecionada no menu da aplicao.
;
Sintaxe: FUNDESC()
Parmetros:
Nenhum
Retorno:
Caracter
FUNNAME()
A funo FunName() retornar o nome de uma funo executada a partir de um menu da
aplicao.
;
Sintaxe: FUNNAME()
Parmetros:
Nenhum
Retorno:
Caracter
GETAREA()
Funo utilizada para proteger o ambiente ativo no momento de algum processamento
especfico. Para salvar uma outra rea de trabalho (alias) que no o ativo, a funo GetArea()
deve ser executada dentro do alias: ALIAS->(GetArea()).
;
;
Sintaxe: GETAREA()
Retorno: Array contendo {Alias(),IndexOrd(),Recno()}
Parmetros
Nenhum
GETCOUNTRYLIST()
A funo GETCOUNTRYLIST() retorna um array de duas dimenses contendo informaes dos
pases localizados.
;
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:
Local aArray := GetCountryList()
Local cSigla := GetMv( MV_PAISLOC )
Local nPos
nPos := Ascan( aArray, {|d| d[1] == Upper(cSigla) } )
If nPos > 0
APMsgInfo( Pas de localizao + aArray[nPos,2] )
EndIf
ISINCALLSTACK()
A funo ISINCALLSTACK() verifica se uma determinada funo est existe dentro da pilha de
chamadas do processamento corrente.
;
Parmetros:
cIsInCallStack
cStackExit
Retorno:
Lgico
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
lInclui
lDic
lInitPad
Alias do arquivo que ser utilizado como referncia para inicializao das
variveis de memria.
Identifica se as variveis devero ser inicializadas com contedos padres,
ou contendo as informaes do registro posicionado do alias especificado.
Define se ir utilizar o dicionrio de dados como base para inicializao das
variveis ou se ir utilizar o comando CRIAVAR().
Define se ir executar o inicializador padro do campo, contido no dicionrio
de dados. Parmetro utilizado pela CRIAVAR().
Retorno:
Nenhum
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
;
;
aArea
Exemplo:
USEREXCEPTION()
A funo USEREXCEPTION() tem o objetivo de forar um erro em ADVPL de forma que
possamos tratar de alguma forma. USEREXCEPTION() recebe uma string contendo uma
descrio do erro, essa descrio ser exibida de acordo com o ambiente que se est
executando, caso um ambiente ERP, ser exibida uma tela de erro.
;
Sintaxe: USEREXCEPTION(cMensagem)
Parmetros:
cMensagem
Retorno:
- 473 Guia de Referncia Rpida
ADVPL Avanado
Nenhum
Parmetros:
cPerg
aPergs
Retorno:
Nenhum
Campo
X1_PERGUNT
X1_PERSPA
X1_PERENG
X1_VARIAVL
Tipo
Caractere
Caractere
Caractere
Caractere
05
06
07
X1_TIPO
X1_TAMANHO
X1_DECIMAL
Caractere
Numrico
Numrico
08
X1_PRESEL
Numrico
09
X1_GSC
Caractere
10
11
X1_VALID
X1_VAR01
Caractere
Caractere
12
X1_DEF01
Caractere
13
14
15
X1_DEFSPA1
X1_DEFENG1
X1_CNT01
Caractere
Caractere
Caractere
16
17
X1_VAR02
X1_DEF02
Caractere
Caractere
18
19
20
21
22
X1_DEFSPA2
X1_DEFENG2
X1_CNT02
X1_VAR03
X1_DEF03
Caractere
Caractere
Caractere
Caractere
Caractere
Descrio
Descrio da pergunta em portugus
Descrio da pergunta em espanhol
Descrio da pergunta em ingls
Nome da varivel de controle auxiliar
(mv_ch)
Tipo do parmetro
Tamanho do contedo do parmetro
Nmero de decimais para contedos
numricos
Define qual opo do combo a padro para
o parmetro.
Define se a pergunta ser do tipo G Get ou
C Choice (combo)
Expresso de validao do parmetro
Nome da varivel MV_PAR+Ordem do
parmetro
Descrio da opo 1 do combo em
portugus
Descrio da opo 1 do combo em espanhol
Descrio da opo 1 do combo em ingls
Contedo padro ou ultimo contedo
definido como respostas para a pergunta.
No informado
Descrio da opo X do combo em
portugus
Descrio da opo X do combo em espanhol
Descrio da opo X do combo em ingls
No informado
No informado
Descrio da opo X do combo em
portugus
X1_DEFSPA3
X1_DEFENG3
X1_CNT03
X1_VAR04
X1_DEF04
Caractere
Caractere
Caractere
Caractere
Caractere
28
29
30
31
32
X1_DEFSPA4
X1_DEFENG4
X1_CNT04
X1_VAR05
X1_DEF05
Caractere
Caractere
Caractere
Caractere
Caractere
33
34
35
36
X1_DEFSPA5
X1_DEFENG5
X1_CNT05
X1_F3
Caractere
Caractere
Caractere
Caractere
37
X1_GRPSXG
Caractere
38
X1_PYME
Caractere
39
40
X1_HELP
X1_PICTURE
Caractere
Caractere
41
aHelpPor
Array
42
aHelpEng
Array
43
aHelpSpa
Array
ALLUSERS()
A funo ALLUSERS() retorna um array multidimensional contendo as informaes dos
usurios do sistema.
;
Sintaxe: ALLUSERS()
Parmetros:
Nenhum
Retorno:
Array
Descrio
Tipo
Qtd.
ID
Nome
15
Senha
Nome Completo
Data de validade
10
--
11
ID do superior
12
Departamento
30
13
Cargo
30
14
130
15
16
17
Usurio bloqueado
18
19
Listner de ligaes
20
Ramal
30
--
Descrio
Tipo
Qtd.
--
Idioma
Diretrio
100
Impressora
--
Acessos
512
--
Ponto de entrada
10
Tipo de impresso
Formato
10
Ambiente
11
12
Opo de impresso
50
13
Descrio
Tipo
Mdulo+nvel+menu
3
1
Qtd.
ALLGROUPS()
A funo ALLGROUPS() retorna um array multidimensional contendo as informaes dos
grupos de usurios do sistema.
;
Sintaxe: ALLGROUPS()
Parmetros:
Nenhum
Retorno:
Array
Descrio
Tipo
Qtd.
ID
Nome
20
Data de validade
Idioma
Diretrio
100
Impressora
10
Acessos
11
12
13
Tipo de impresso
14
Formato
15
Ambiente
16
Opo de impresso
17
512
Descrio
Tipo
Modulo+nvel+menu
2
1
Qtd.
CGC()
A funo CGC() valida o CGC digitado, utilizando o algoritmo nacional para verificao do dgito
de controle.
;
Sintaxe: CGC(cCGC)
Parmetros:
cCGC
Retorno:
Lgico
CONPAD1()
A funo CONPAD1() exibe uma tela de consulta padro baseada no Dicionrio de Dados
(SXB).
;
Parmetros:
uPar
Parmetro reservado.
uPar2
Parmetro reservado.
uPar3
Parmetro reservado.
cAlias
cCampoRet
uPar4
lOnlyView
;
Parmetro Reservado.
Indica se ser somente para visualizao.
Retorno:
Nenhum
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
Retorno:
Data
EXISTINI()
A funo EXISTINI() verifica se o campo possui inicializador padro.
;
Sintaxe: EXISTINI(cCampo)
Parmetros:
cCampo
Retorno:
Lgico
Exemplo:
// Exemplo de uso da funcao ExistIni:
// Se existir inicializador no campo B1_COD:
If ExistIni(B1_COD)
// Executa o inicializador:
cCod := CriaVar(B1_COD)
Endif
Return
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:
nValor
lQtd
nMoeda
Retorno:
String
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:
cFormula
Retorno:
Indefinido
GETADVFVAL()
A funo GETADVFVAL() executa uma pesquisa em um arquivo pela chave de busca e na
ordem especificadas, possibilitando o retorno de um ou mais campos.
;
Sintaxe: GetAdvFVal(cAlias,uCpo,uChave,nOrder,uDef)
Parmetros:
cAlias
Alias do arquivo
uCpo
uChave
nOrder
uDef
Valor ou array default para ser retornado caso a chave no seja encontrada
Retorno:
Indefinido
Parmetros:
cHelp
nLinha
cTitulo
Ttulo do help
uPar4
Sempre NIL
cMensagem
nLinMen
nColMen
Retorno:
Nenhum
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
MESEXTENSO()
A funo MESEXTENSO() retorna o nome de um ms por extenso.
;
Sintaxe: MESEXTENSO(nMes)
Parmetros:
nMes
Este parmetro pode ser definido tambm como caracter ou como data.
Retorno:
String
OBRIGATORIO()
A funo OBRIGATORIO() avalia se todos os campos obrigatrios de uma Enchoice() foram
digitados.
;
Parmetros:
aGets
aTela
aTitulos
Retorno:
Lgico
Exemplo:
#INCLUDE "protheus.ch"
/*/
+----------------------------------------------------------------------------| Programa | ATFA010A | Autor | ARNALDO R. JUNIOR
| Data |
|
+----------------------------------------------------------------------------| Desc.
| Cadastro de dados complementares do bem Ativo Fixo
|
+---------------------------------------------------------------------------| Uso
| Curso de ADVPL
|
+----------------------------------------------------------------------------/*/
User Function ATFA010A()
Private cCadastro := "Atualizacao de dados do bem"
Private aRotina := { {"Pesquisar" ,"AxPesqui"
{"Visualizar"
,"AxVisual"
{"Atualizar"
,"U_A010AATU"
,0,1} ,;
,0,2} ,;
,0,4}}
:= {}
:= {}
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
Local
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
aButtons
cAliasE
aAlterEnch
aPos
nModelo
lF3
lMemoria
lColumn
caTela
lNoFolder
lProperty
{}
cAlias
{}
{015,000,400,600
.F.
.T.
.F.
""
.F.
.F.
Exemplo (continuao):
Private
Private
Private
Private
Private
oDlg
oGetD
oEnch
aTELA[0][0]
aGETS[0]
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.)
oEnch :=
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)
Local aArea
Local nX
:= GetArea()
:= 0
OPENFILE()
A funo OPENFILE() exibe o diagnstico de arquivos, verificando a existncia dos arquivos de
dados e os ndices do sistema, criando caso no existam e abre os arquivos de acordo com o
mdulo onde executada ou de acordo com a parametrizao.
;
Sintaxe: OPENFILE(cEmp)
Parmetros:
cEmp
Retorno:
Nenhum
PERGUNTE()
A funo PERGUNTE() inicializa as variveis de pergunta (mv_par01,...) baseada na pergunta
cadastrado no Dicionrio de Dados (SX1). Se o parmetro lAsk no for especificado ou for
verdadeiro ser exibida a tela para edio da pergunta e se o usurio cofirmar as variveis
sero atualizadas e a pergunta no SX1 tambm ser atualizada.
;
Parmetros:
cPergunta
|Ask
cTitle
Ttulo do dilogo.
Retorno:
Lgico
PESQPICT()
A funo PESQPICT() retorna a picture definida para um campo especificado no Dicionrio de
Dados (SX3).
;
Sintaxe: PesqPict(cAlias,cCampo,nTam)
Parmetros:
cAlias
Alias do arquivo
cCampo
Nome do campo
nTam
Retorno:
String
PESQPICTQT()
A funo PESQPICTQT() retorna a picture de um campo numrico referente a uma quantidade,
de acordo com o Dicionrio de Dados (SX3). Esta funo geralmente utilizada quando h
pouco espao disponvel para impresso de valores em relatrios, quando o valor nEdio no
informado, ela tem o comportamento semelhante ao da funo X3Picture, pois busca o
tamanho do campo no dicionrio de dados.
;
Sintaxe: PesqPictQt(cCampo,nEdio)
Parmetros:
cCampo
nEdio
Retorno:
String
Picture ideal para o espao definido por nEdio, sem a separao dos
milhares por vrgula.
POSICIONE()
A funo POSICIONE() permite o retorno do contedo de um campo de um registro de uma
tabela especificado atravs de uma chave de busca.
;
Parmetros:
cAlias
Alias do arquivo
nOrdem
Ordem utilizada
cChave
Chave pesquisa
cCampo
Retorno:
Indefinido
PUTSX1()
A funo PUTSX1() permite a incluso de um nico item de pergunta em um grupo de definido
no Dicionrio de Dados (SX1). Todos os vetores contendo os textos explicativos da pergunta
devem conter at 40 caracteres por linha.
;
Parmetros:
cGrupo
cOrdem
cPergunt
cPerSpa
cPerEng
cVar
cTipo
Tipo do parmetro
nTamanho
nDecimal
nPresel
cGSC
cValid
cF3
cGrpSxg
cPyme
cVar01
cDef01
cDefSpa1
cDefEng1
cCnt01
Contedo padro ou ultimo contedo definido como respostas para este item
cDef0x
cDefSpax
cDefEngx
aHelpPor
aHelpEng
aHelpSpa
cHelp
RETINDEX()
A funo RETINDEX()
Dados (SIX).
Sintaxe: RETINDEX(cAlias)
Parmetros:
cAlias
Retorno:
Numrico
SIXDESCRICAO()
A funo SIXDESCRICAO() retorna a descrio da chave de ndice, de acordo com o registro
posicionado no SIX e idioma corrente.
;
Sintaxe: SIXDESCRICAO()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( cChave, cOrdem )
Local cSixDesc :=
dbSelectArea(SIX)
dbSetOrder(1)
If dbSeek(cChave+cOrdem)
cSixDescr := SixDescricao()
EndIf
Return
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:
cTab
cChav
lPrint
Retorno:
String
TAMSX3()
A funo TAMSX3() retorna o tamanho (total e parte decimal) de um campo especificado no
Dicionrio de Dados (SX3).
;
Sintaxe: TAMSX3(cCampo)
Parmetros:
cCampo
Retorno:
Array
TM()
A funo TM() retorna a picture de impresso para valores numricos dependendo do espao
disponvel.
;
Parmetros:
nValor
nEdio
nDec
Retorno:
String
y
y
X1DEF01()
A funo X1DEF01() retorna o contedo da primeira definio da pergunta posicionada no SX1
(caso seja combo) no idioma corrente.
;
Sintaxe: X1DEF01()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( cGrupo, cPerg )
Local cDef01
Local cDef02
Local cDef03
Local cDef04
Local cDef05
dbSelectArea(SX1)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDef01 := X1Def01()
cDef02 := X1Def02()
cDef03 := X1Def03()
cDef04 := X1Def04()
cDef05 := X1Def05()
EndIf
Return
X1PERGUNT()
A funo X1PERGUNT() retorna a descrio da pergunta posicionada no Dicionrio de Dados
(SX1) para o idioma corrente.
;
Sintaxe: X1PERGUNT()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( cGrupo, cPerg )
Local cDescr
dbSelectArea(SX1)
dbSetOrder(1)
If dbSeek( cGrupo + cPerg ) // grupo da pergunta + o numero da perg.
cDescr := X1Pergunt()
EndIf
Return
X2NOME()
A funo X2NOME() retorna a descrio de uma tabela posicionada no Dicionrio de Dados
(SX2) no idioma corrente.
;
Sintaxe: X2NOME()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( )
Local cTabela
dbSelectArea(SX2)
dbSetOrder(1)
If dbSeek( SA1 )
cTabela := X2Nome()
EndIf
Return
- 495 Guia de Referncia Rpida
ADVPL Avanado
X3CBOX()
A funo X3CBOX() retorna o contedo de um campo tipo combo posicionado no Dicionrio de
Dados (SX3) no idioma corrente.
;
Sintaxe: X3CBOX()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( )
Local cTitulo
Local cDescri
Local cCombo
dbSelectArea(SX3)
dbSetOrder(2)
If dbSeek( cCampo )
cTitulo := X3Titulo()
cDescri := X3Descri()
cCombo := X3Cbox()
EndIf
Return
X3DESCRIC()
A funo X3DESCRIC() retorna a descrio de um campo posicionado no Dicionrio de Dados
(SX3) no idioma corrente.
;
Sintaxe: X3DESCRIC()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( )
Local cTitulo
Local cDescri
Local cCombo
dbSelectArea(SX3)
dbSetOrder(2)
If dbSeek( cCampo )
cTitulo := X3Titulo()
cDescri := X3Descri()
cCombo := X3Cbox()
EndIf
Return
X3PICTURE()
A funo X3PICTURE() retorna a mscara de um campo contido no Dicionrio de Dados (SX3).
;
Sintaxe: X3PICTURE(cCampo)
Parmetros:
cCampo
Retorno:
String
Exemplo:
User Function <nome-da-funo>( cCampo )
Local cPicture
cPicture := X3Picture( cCampo )
Return cPicture
X3TITULO()
A funo X3TITULO() retorna o ttulo de um campo posicionado no Dicionrio de Dados (SX3)
no idioma corrente.
;
Sintaxe: X3TITULO()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( )
Local cTitulo
dbSelectArea(SX3)
dbSetOrder(2)
If dbSeek( A1_COD )
cTitulo := X3Titulo()
EndIf
Return
X3USO()
A funo X3USO() verifica se o campo atualmente posicionado no Dicionrio de Dados (SX3)
est disponvel para uso.
;
Parmetros:
cUsado
Modulo
Retorno:
Lgico
Exemplo:
User Function <nome-da-funo>()
Local lUsado := .F.
DbSelectArea(SX3)
DbSetOrder(2)
DbSeek(A1_COD)
If X3Uso( SX3->X3_USADO )
lUsado := .T.
EndIf
Return lUsado
X5DESCRI()
A funo X5DESCRI() retorna a descrio de um item de uma tabela posicionado no Arquivo de
Tabelas (SX5) no idioma corrente.
;
Sintaxe: X5DESCRI()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( cFilial, cTabela, cChave )
Local cDescr
dbSelectArea(SX5)
dbSetOrder(1)
If dbSeek( cFilial+cTabela+cChave )
cDescr := X5Descri()
EndIf
Return
X6CONTEUD()
A funo X6CONTEUD() retorna o contedo de um parmetro posicionado no Dicionrio de
Dados (SX6) para o idioma corrente.
;
Sintaxe: X6CONTEUD()
Parmetros:
Nenhum
Retorno:
Indefinido
Exemplo:
User Function <nome-da-funo>( cFilial, cParam )
Local cDescr
Local cConteud
dbSelectArea(SX6)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6Descric()
cDescr += X6Desc1()
cDescr += X6Desc2()
cConteud := X6Conteud()
EndIf
Return
X6DESCRIC()
A funo X6DESCRI() retorna o contedo da descrio de um parmetro de acordo com o
registro posicionado no Dicionrio de Dados (SX6) no idioma corrente.
;
Sintaxe: X6DESCRIC()
Parmetros:
Nenhum
Retorno:
String
y
y
Exemplo:
User Function <nome-da-funo>( cFilial, cParam )
Local cDescr
Local cConteud
dbSelectArea(SX6)
dbSetOrder(1)
If dbSeek( cFilial+cParm )
cDescr := X6Descric()
cDescr += X6Desc1()
cDescr += X6Desc2()
cConteud := X6Conteud()
EndIf
Return
XADESCRIC()
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:
String
Exemplo:
User Function <nome-da-funo>( cFolder, cNumero )
Local cDescr
dbSelectArea(SXA)
dbSetOrder(1)
If dbSeek( cFolder+cNumero ) // alias do folder + numero do folder
cDescr := XADescric()
EndIf
Return
XBDESCRI()
A funo XBDESCRI() retorna o contedo da descrio de uma consulta de acordo com o
registro posicionado no Dicionrio de Dados (SXB) no idioma corrente.
;
Sintaxe: XBDESCRI()
Parmetros:
Nenhum
Retorno:
String
Exemplo:
User Function <nome-da-funo>( cAlias )
Local cDescr
dbSelectArea(SXB)
dbSetOrder(1)
If dbSeek( cAlias + 1 )
cDescr := XBDescri()
EndIf
Return
- 502 Guia de Referncia Rpida
ADVPL Avanado
XFILIAL()
A funo XFILIAL() retorna a filial utilizada por determinado arquivo.
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:
cAlias
Retorno:
Caracter
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:
cAlias
cTitulo
Ttulo da Janela
cVldExc
cVldAlt
#include "protheus.ch"
/*/
+----------------------------------------------------------------------------| Funo
| XCADSA2
| Autor | ARNALDO RAYMUNDO JR. | Data |
|
+----------------------------------------------------------------------------| Descrio | Exemplo de utilizao da funo AXCADASTRO()
|
|+---------------------------------------------------------------------------| Uso
| Curso ADVPL
|
|+---------------------------------------------------------------------------/*/
User Function XCadSA2()
Local
Local
Local
Local
cAlias
cTitulo
cVldExc
cVldAlt
:=
:=
:=
:=
"SA2"
"Cadastro de Fornecedores"
".T."
".T."
dbSelectArea(cAlias)
dbSetOrder(1)
AxCadastro(cAlias,cTitulo,cVldExc,cVldAlt)
Return Nil
/*/
+-----------------------------------------------------------------------------| Funo
| VLDALT
| Autor | ARNALDO RAYMUNDO JR. | Data |
|
+-----------------------------------------------------------------------------| Descrio | Funo de validao de alterao para a AXCADASTRO()
|
+-----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+-----------------------------------------------------------------------------/*/
User Function VldAlt(cAlias,nReg,nOpc)
Local lRet
Local aArea
Local nOpcao
:= .T.
:= GetArea()
:= 0
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
|
+-----------------------------------------------------------------------------/*/
User Function VldExc(cAlias,nReg,nOpc)
Local lRet
Local aArea
Local nOpcao
:= .T.
:= GetArea()
:= 0
nOpcao := AxExclui(cAlias,nReg,nOpc)
If nOpcao == 1
MsgInfo(Excluso concluda com sucesso!)
Endif
RestArea(aArea)
Return lRet
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()
Funo de visualizao padro das informaes de um registro, no formato Enchoice, conforme
demonstrado no tpico sobre a interface AxCadastro().
;
Sintaxe: AXVISUAL(cAlias, nReg, nOpc, aAcho, nColMens, cMensagem, cFunc,;
aButtons, lMaximized )
;
Parmetros
cAlias
nReg
nOpc
aAcho
nColMens
Parmetro no utilizado.
cMensagem
Parmetro no utilizado.
cFunc
aButtons
lMaximized
Funo que dever ser utilizada para carregar as variveis que sero
utilizadas pela Enchoice. Neste caso o parmetro lVirtual definido
internamente pela AxFunction() executada como .T.
Botes adicionais para a EnchoiceBar, no formato:
aArray[n][1] -> Imagem do boto
aArray[n][2] -> bloco de cdigo contendo a ao do boto
aArray[n][3] -> ttulo do boto
Indica se a janela dever ser ou no maximizada
AXINCLUI()
Funo de incluso padro das informaes de um registro, no formato Enchoice, conforme
demonstrado no tpico sobre a interface AxCadastro().
;
Sintaxe: AxInclui(cAlias, nReg, nOpc, aAcho, cFunc, aCpos, cTudoOk, lF3,;
cTransact, aButtons, aParam, aAuto, lVirtual, lMaximized)
Parmetros
cAlias
nReg
nOpc
aAcho
cFunc
aCpos
cTudoOk
lF3
cTransact
aButtons
aParam
aAuto
lVirtual
lMaximized
AXALTERA()
Funo de alterao padro das informaes de um registro, no formato Enchoice, conforme
demonstrado no tpico sobre a interface AxCadastro().
;
Sintaxe: AXALTERA(cAlias, nReg, nOpc, aAcho, aCpos, nColMens, cMensagem,;
cTudoOk, cTransact, cFunc, aButtons, aParam, aAuto, lVirtual, lMaximized)
;
Parmetros
AXDELETA()
Funo de excluso padro das informaes de um registro, no formato Enchoice, conforme
demonstrado no tpico sobre a interface AxCadastro().
;
Sintaxe: AXDELETA(cAlias, nReg, nOpc, cTransact, aCpos, aButtons, aParam,;
aAuto, lMaximized)
;
Parmetros
cAlias
nReg
nOpc
cTransact
aCpos
aButtons
aParam
aAuto
validaes do SX3
lMaximized
BRWLEGENDA()
A BrwLegenda() uma funcionalidade que permite a incluso de legendas na MBrowse().
;
Parmetros:
cCadastro
cTitulo
aLegenda
Ex: {{Cor,Texto}}
BR_AMARELO
BR_AZUL
BR_BRANCO
BR_CINZA
BR_LARANJA
BR_MARRON
BR_VERDE
BR_VERMELHO
BR_PINK
BR_PRETO
ENDFILBRW()
A EndFilBrw() uma funcionalidade que permite eliminar o filtro e o arquivo temporrio
criados pela FilBrowse().
;
Parmetros:
cAlias
aQuery
FILBROWSE()
A FilBrowse() uma funcionalidade que permite a utilizao de filtros na MBrowse().
;
Parmetros:
cAlias
aQuery
cFiltro
lShowProc
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:
cAlias
nReg
Nmero do registro
Bloco de Cdigo que contm a FilBrowse()
bBrwFilter
MARKBROW()
A funo MarkBrow() permite que os elementos de um browse, sejam marcados ou
desmarcados. Para utilizao da MarkBrow() necessrio declarar as variveis cCadastro e
aRotina como Private, antes da chamada da funo.
;
Parmetros:
cAlias
cCampo
cCpo
aCampos
[n][1]
[n][2]
[n][3]
[n][4]
lInvert
Inverte a marcao.
cMarca
cCtrlM
uPar8
Parmetro reservado.
cExpIni
cExpFim
nome do campo;
- Nulo (Nil);
- Ttulo do campo;
- Mscara (picture).
cAval
bParBloco
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:
cAlias
nReg
nOpc
cMarca
lInverte
#include "protheus.ch"
/*/
+----------------------------------------------------------------------------| Programa | MkBrwSA1 | Autor | ARNALDO RAYMUNDO JR. | Data |
|
+----------------------------------------------------------------------------| Desc.
| MarkBrowse Genrico
|
+----------------------------------------------------------------------------| Uso
| Curso de ADVPL
|
+----------------------------------------------------------------------------/*/
USER FUNCTION MkBrwSA1()
Local
Local
Local
Local
aCpos
aCampos
nI
cAlias
:= {}
:= {}
:= 0
:= "SA1"
Private aRotina
:= {}
Private cCadastro
:= "Cadastro de Clientes"
Private aRecSel
:= {}
AADD(aRotina,{"Pesquisar"
,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar"
,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir"
,"AxInclui"
,0,3})
AADD(aRotina,{"Alterar"
,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir"
,"AxDeleta" ,0,5})
AADD(aRotina,{"Visualizar Lote"
,"U_VisLote"
,0,5})
AADD(aCpos,
AADD(aCpos,
AADD(aCpos,
AADD(aCpos,
AADD(aCpos,
AADD(aCpos,
"A1_OK"
"A1_FILIAL"
"A1_COD"
"A1_LOJA"
"A1_NOME"
"A1_TIPO"
)
)
)
)
)
)
dbSelectArea("SX3")
dbSetOrder(2)
For nI := 1 To Len(aCpos)
IF dbSeek(aCpos[nI])
AADD(aCampos,{X3_CAMPO,"",IIF(nI==1,"",Trim(X3_TITULO)),;
Trim(X3_PICTURE)})
ENDIF
Next
DbSelectArea(cAlias)
DbSetOrder(1)
MarkBrow(cAlias,aCpos[1],"A1_TIPO == ' '",aCampos,.F.,GetMark(,"SA1","A1_OK"))
Return Nil
/*/
+----------------------------------------------------------------------------| 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())
// IsMark("A1_OK", cMarca, lInverte)
IF SA1->A1_OK == cMarca .AND. !lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD, SA1->A1_LOJA, SA1->A1_NREDUZ})
ELSEIF SA1->A1_OK != cMarca .AND. lInvert
AADD(aRecSel,{SA1->(Recno()),SA1->A1_COD,SA1->A1_LOJA, SA1->A1_NREDUZ})
ENDIF
SA1->(dbSkip())
Enddo
IF Len(aRecSel) > 0
cTexto := "Cdigo | Loja | Nome Reduzido
"+cEol
//
"1234567890123456789012345678901234567890
//
"CCCCCC | LL | NNNNNNNNNNNNNNNNNNNN +cEol
For nX := 1 to Len(aRecSel)
cTexto += aRecSel[nX][2]+Space(1)+ "|"+Space(2) +
aRecSel[nX][3]+Space(3)+"|"
cTexto += Space(1)+SUBSTRING(aRecSel[nX][4],1,20)+Space(1)
cTexto += cEOL
Next nX
DEFINE MSDIALOG oDlg TITLE "Clientes Selecionados" From 000,000 TO 350,400
PIXEL
@ 005,005 GET oMemo VAR cTexto MEMO SIZE 150,150 OF oDlg PIXEL
oMemo:bRClicked := {||AllwaysTrue()}
DEFINE SBUTTON FROM 005,165 TYPE 1 ACTION oDlg:End() ENABLE OF oDlg PIXEL
ACTIVATE MSDIALOG oDlg CENTER
LimpaMarca()
ENDIF
RETURN
/*/
+----------------------------------------------------------------------------| Programa | LimpaMarca | Autor | ARNALDO RAYMUNDO JR. | Data |
|
+----------------------------------------------------------------------------| Desc.
| Funo utilizada para demonstrar o uso do recurso da MarkBrowse|
+----------------------------------------------------------------------------| Uso
| Curso de ADVPL
|
+----------------------------------------------------------------------------/*/
STATIC FUNCTION LimpaMarca()
Local nX := 0
For nX := 1 to Len(aRecSel)
SA1->(DbGoto(aRecSel[nX][1]))
RecLock("SA1",.F.)
SA1->A1_OK := SPACE(2)
MsUnLock()
Next nX
RETURN
MBROWSE()
A Mbrowse() uma funcionalidade de cadastro que permite a utilizao de recursos mais
aprimorados na visualizao e manipulao das informaes do sistema, possuindo os
seguintes componentes:
Browse padro para visualizao das informaes da base de dados, de acordo com as
configuraes do SX3 Dicionrio de Dados (campo browse).
Parmetros:
nLin1
nCol1
nLin2
nCol2
cAlias
aFixe
[n][1]=>Descrio do campo
[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
Parmetros:
cCpo
nPar08
Parmetro reservado.
cFun
nClickDef
aColors
cTopFun
cBotFun
nPar14
bInitBloc
lNoMnuFilter
lSeeAll
lChgAll
aRotina
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:
cAlias
nReg
nOpc
Pesquisar
Visualizar
Incluir
Alterar
Excluir
Livre
#include "protheus.ch"
/*/
+----------------------------------------------------------------------------| Funo
| MBRWSA1
| Autor | ARNALDO RAYMUNDO JR. | Data |
|
+----------------------------------------------------------------------------| Descrio | Exemplo de utilizao da funo MBROWSE()
|
+----------------------------------------------------------------------------| Uso
| Curso ADVPL
|
+----------------------------------------------------------------------------/*/
User Function MBrwSA1()
Local cAlias
:= "SA1"
Private cCadastro
:= "Cadastro de Clientes"
Private aRotina
:= {}
AADD(aRotina,{"Pesquisar"
,"AxPesqui" ,0,1})
AADD(aRotina,{"Visualizar"
,"AxVisual" ,0,2})
AADD(aRotina,{"Incluir" ,"U_Inclui"
,0,3})
Exemplo (continuao):
AADD(aRotina,{"Alterar" ,"AxAltera" ,0,4})
AADD(aRotina,{"Excluir" ,"AxDeleta" ,0,5})
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
|
+----------------------------------------------------------------------------/*/
User Function Inclui(cAlias, nReg, nOpc)
Local cTudoOk := "(Alert('OK'),.T.)"
Local nOpcao
:= 0
nOpcao := AxInclui(cAlias,nReg,nOpc,,,,cTudoOk)
If nOpcao == 1
MsgInfo(Incluso concluda com sucesso!)
ElseIf
== 2
MsgInfo(Incluso cancelada!)
Endif
Return Nil
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
Exemplo: Mbrowse() utilizando as funes acessrias
#Include "Protheus.ch"
/*/
+----------------------------------------------------------------------------| Programa | MBrwSA2
| Autor | SERGIO FUZINAKA | Data |
|
+----------------------------------------------------------------------------| Descrio | Exemplo da MBrowse utilizando a tabela de Cadastro de
|
|
| Fornecedores
|
+----------------------------------------------------------------------------| Uso
| Curso de ADVPL
|
+----------------------------------------------------------------------------/*/
User Function MBrwSA2()
Local cAlias := "SA2"
Local aCores := {}
Local cFiltra := "A2_FILIAL == '"+xFilial('SA2')+"' .And. A2_EST == 'SP'"
Private
Private
Private
Private
cCadastro :=
aRotina
:=
aIndexSA2 :=
bFiltraBrw:=
"Cadastro de Fornecedores"
{}
{}
{ || FilBrowse(cAlias,@aIndexSA2,@cFiltra) }
AADD(aRotina,{"Pesquisar"
AADD(aRotina,{"Visualizar"
AADD(aRotina,{"Incluir"
AADD(aRotina,{"Alterar"
AADD(aRotina,{"Excluir"
AADD(aRotina,{"Legenda"
,"PesqBrw"
,"AxVisual"
,"U_BInclui"
,"U_BAltera"
,"U_BDeleta"
,"U_BLegenda"
,0,1})
,0,2})
,0,3})
,0,4})
,0,5})
,0,3})
/*
-- 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
*/
AADD(aCores,{"A2_TIPO == 'F'"
AADD(aCores,{"A2_TIPO == 'J'"
AADD(aCores,{"A2_TIPO == 'X'"
AADD(aCores,{"A2_TIPO == 'R'"
AADD(aCores,{"Empty(A2_TIPO)"
,"BR_VERDE"
,"BR_AMARELO"
,"BR_LARANJA"
,"BR_MARRON"
,"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
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 := {}
AADD(aLegenda,{"BR_VERDE"
AADD(aLegenda,{"BR_AMARELO"
AADD(aLegenda,{"BR_LARANJA"
AADD(aLegenda,{"BR_MARRON"
AADD(aLegenda,{"BR_PRETO"
,"Pessoa Fsica" })
,"Pessoa Jurdica"
,"Exportao"
,"Fornecedor Rural"
,"No Classificado"
})
})
})
})
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()
A funo Modelo2() no implementa as regras de visualizao,
incluso, alterao e excluso, como uma AxCadastro() ou
AxFunction().
A inicializao das variveis Private utilizada nos cabealhos e rodaps,
bem como a inicializao e gravao do aCols devem ser realizadas
pela rotina que suporta a execuo da Modelo2().
Da mesma forma, o Browse deve ser tratado por esta rotina, sendo
comum a Modelo2() estar vinculada ao uso de uma MBrowse().
Parmetros:
cTitulo
aCab
Ttulo da janela
Array contendo as informaes que sero exibidas no cabealho na forma de
Enchoice()
aCab[n][1] (Caractere) := Nome da varivel private que ser vinculada ao
campo da Enchoice().
aCab[n][2] (Array) := Array com as coordenadas do campo na tela {Linha,
Coluna}
aCab[n][3] (Caractere) := Ttulo do campo na tela
aCab[n][4] (Caractere) := Picture de formatao do get() do campo.
aCab[n][5] (Caractere) := Funo de validao do get() do campo.
aCab[n][6] (Caractere) := Nome da consulta padro que ser executada
para o campo via tecla F3
aCab[n][7] (Lgico) := Se o campo estar livre para digitao.
aRoda
aGrid
nOpc
cLinhaOk
cTudoOk
Retorno:
Lgico
#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
|
//+--------------------------------------------------------------------+
USER FUNCTION MBrw2Sx5()
Local cAlias
:= "SX5"
Private cCadastro
:= "Arquivo de Tabelas"
Private aRotina
:= {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock
AADD(aRotina,{"Pesquisar"
AADD(aRotina,{"Visualizar"
AADD(aRotina,{"Incluir"
AADD(aRotina,{"Alterar"
AADD(aRotina,{"Excluir"
,"AxPesqui"
,"U_SX52Vis"
,"U_SX52Inc"
,"U_SX52Alt"
,"U_SX52Exc"
,0,1})
,0,2})
,0,3})
,0,4})
,0,5})
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)
Return
USER FUNCTION SX52INC(cAlias,nReg,nOpc)
//Local nUsado
Local cTitulo
Local aCab
2
Local aRoda
Local aGrid
modelo2 - Padrao:
:= 0
:= "Inclusao de itens - Arquivo de Tabelas"
:= {} // Array com descricao dos campos do Cabecalho do Modelo
Exemplo (continuao):
// Variaveis para campos da Enchoice()
Private cX5Filial := xFilial("SX5")
Private cX5Tabela := SPACE(5)
// Montagem do array de cabealho
// AADD(aCab,{"Varivel"
,{L,C} ,"Ttulo","Picture","Valid","F3",lEnable})
AADD(aCab,{"cX5Filial" ,{015,010} ,"Filial","@!",,,.F.})
AADD(aCab,{"cX5Tabela" ,{015,080} ,"Tabela","@!",,,.T.})
// Montagem do aHeader
AADD(aHeader,{"Chave"
,"X5_CHAVE","@!",5,0,"AllwaysTrue()",;
"","C","","R"})
AADD(aHeader,{"Descricao"
,"X5_DESCRI","@!",40,0,"AllwaysTrue()",;
"","C","","R"})
// Montagem do aCols
aCols := Array(1,Len(aHeader)+1)
// 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
aCols[1][Len(aHeader)+1] := .F. // Linha no deletada
lRetMod2 := Modelo2(cTitulo,aCab,aRoda,aGrid,nOpc,cLinhaOk,cTudoOk)
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()
Parmetros:
cTitulo
cAliasE
cAliasGetD
aCposE
cLinhaOk
cTudoOk
nOpcE
nOpcG
cFieldOk
Ttulo da janela
Alias da tabela que ser utilizada na Enchoice
Alias da tabela que ser utilizada na GetDados
Nome dos campos, pertencentes ao Alias especificado o parmetro cAliasE,
que devero ser exibidos na Enchoice:
AADD(aCposE,{nome_campo})
Funo para validao da linha na GetDados()
Funo para validao na confirmao da tela de interface da Modelo2().
Opo selecionada na MBrowse, ou que deseje ser passada para controle da
Enchoice da Modelo3, aonde:
2 Visualizar
3 - Incluir
4 - Alterar
5 - Excluir
Opo selecionada na MBrowse, ou que deseje ser passada para controle da
GetDados da Modelo3, aonde:
2 Visualizar
3 - Incluir
4 - Alterar
5 - Excluir
Validao dos campos da Enchoice()
Retorno:
Lgico
#INCLUDE "protheus.ch"
//+--------------------------------------------------------------------+
//| Rotina | MBRWMOD3| Autor | ARNALDO RAYMUNDO JR. |Data | 01.01.2007 |
//+--------------------------------------------------------------------+
//| Descr. | EXEMPLO DE UTILIZACAO DA MODELO3().
|
//+--------------------------------------------------------------------+
//| Uso
| CURSO DE ADVPL
|
//+--------------------------------------------------------------------+
User Function MbrwMod3()
Private cCadastro
:= "Pedidos de Venda"
Private aRotina
:= {}
Private cDelFunc := ".T." // Validacao para a exclusao. Pode-se utilizar
ExecBlock
Private cAlias
:= "SC5"
AADD(aRotina,{
AADD(aRotina,{
AADD(aRotina,{
AADD(aRotina,{
AADD(aRotina,{
"Pesquisa","AxPesqui"
"Visual" ,"U_Mod3All"
"Inclui" ,"U_Mod3All"
"Altera" ,"U_Mod3All"
"Exclui" ,"U_Mod3All"
,0,1})
,0,2})
,0,3})
,0,4})
,0,5})
dbSelectArea(cAlias)
dbSetOrder(1)
mBrowse( 6,1,22,75,cAlias)
Return
User Function Mod3All(cAlias,nReg,nOpcx)
Local
Local
Local
Local
Local
Local
Local
Local
cTitulo :=
cAliasE :=
cAliasG :=
cLinOk :=
cTudOk :=
cFieldOk:=
aCposE :=
nUsado, nX
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"}
//
If lRetMod3
Aviso("Modelo3()","Confirmada operacao!",{"Ok"})
Endif
Endif
Return
Sintaxe: AVISO(cTexto)
Parmetros
cTexto
AVISO()
;
;
;
Ttulo da janela
cTexto
Texto do aviso
aBotoes
nTamanho
Tamanho (1,2 ou 3)
FORMBACTH()
;
;
Ttulo da janela
Array simples (vetor) contendo cada uma das linhas de texto que sero
exibidas no corpo da tela.
Array com os botes do tipo SBUTTON(), com a seguinte estrutura:
{nTipo,lEnable,{|| Ao() }}
bValid
nAltura
nLargura
MSGFUNCTIONS()
;
;
;
;
Sintaxe:
Sintaxe:
Sintaxe:
Sintaxe:
MSGALERT(cTexto, cTitulo)
MSGINFO(cTexto, cTitulo)
MSGSTOP(cTexto, cTitulo)
MSGYESNO(cTexto, cTitulo)
Parmetros
cTexto
cTitulo
MSGALERT
MSGINFO
MSGSTOP
MSGYESNO
Parmetros:
cCampo
nLinha
Retorno:
Indefinido
GDFIELDPOS()
A funo GDFIELDPOS() retorna a posio de um campo especificado em uma gria formada
por um objeto do tipo MsNewGetDados().
;
Sintaxe: GDFIELDPOS(cCampo)
Parmetros:
cCampo
Retorno:
Numrico
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:
cCampo
xConteudo
nLinha
Retorno:
Nenhum
GETMARK()
A funo GETMARK() utilizada em conjunto com a funo MarkBrow(), para retornar o
conjunto de caracteres que sero utilizados para identificar os registros marcados pelo browse.
;
Parmetros:
lUpper
Retorno:
String
Conjunto de caracteres que definem a marca que dever ser utilizada pela
MarkBrowse durante o processamento corrente.
Exemplo:
Function <nome-da-funo>( )
Local aCampos := {{'CB_OK' ,,''},;
{'CB_USERLIB' ,,'Usurio'},;
{'CB_TABHORA' ,,'Hora'},;
{'CB_DTTAB' ,,'Data'}}
Private cMarca := GetMark()
Private cCadastro := 'Cadastro de Contrato'
Private aRotina := { { 'Pesquisar' , 'AxPesqui' , 0, 1 }}
MarkBrow( 'SCB', 'CB_OK','!CB_USERLIB',aCampos,, cMarca,'MarkAll()',,,,'Mark()' )
Return
ISMARK()
A funo ISMARK() utilizada em conjunto com a funo MarkBrow() para identificar se o
campo ou string contm a marca em uso no momento pela rotina.
;
Parmetros:
cCampo
cMarca
lInvert
Retorno:
Lgico
MARKBREFRESH()
A funo MARKBREFRESH() atualiza a exibio da marca no MarkBrowse(), sendo utilizada
quando algum processamento paralelo atualiza o contedo do campo definido como controle
de marca para os registros em exibio pelo browse.
Este tipo de processamento comum, e normalmente est associonada a clique de inverter
seleo, ou a opes de marcar e desmarcar todas.
Sintaxe: MARKBREFRESH()
Parmetros:
Nenhum
Retorno:
Nenhum
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:
String
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
THISMARK()
A funo THISMARK() utilizada em conjunto com a funo MarkBrow(), e retorna a marca
em uso no momento para a MarkBrow().
;
Sintaxe: THISMARK()
Parmetros:
Nenhum
Retorno:
Caracter