AP5
Windows NT Server , Windows Workstation, Windows 95/98 e SQL Server so marcas registradas da Microsoft
Corporation.
Banco de Dados Oracle a marca registrada da Oracle Corporation.
Banco de Dados Informix a marca registrada da Informix Corporation.
Banco de Dados Sybase a marca registrada da Sybase Corporation.
Banco de Dados UDB a marca registrada da IBM.
Este material de efeito didtico/suporte e no pode ser reproduzido sem autorizao da MicroSiga.
CopyRight 2001 Microsiga Software S.A.
ndice
1. Introduo ao ambiente Relacional
1.1.
Objetivos
1.2.
Conceitos Bsicos de Banco de Dados
1.3.
Conhecendo a estrutura de Armazenamento dos dados
1.3.1. LOG do Banco de dados
1.3.1.1.
Controle Transacional
OUTRAS APLICAES
DA INTERNET
Introduo
Funes em ADVPL para o Protheus 5.07 / 5.08
8.1. FIELDGET()
8.2. FILEDPUT()
8.3. ALIQICMS()
8.4. ASCAN()
8.5. SALVAMENTO DE AREAS
8.6. SETPRINT()
8.7. CRIATRAB()
8.8. GETADVFAL()
8.9. PROCREGUA()
8.10. ACTIVATE DIALOG()
8.11. MBROWSE()
8.12. NCPROC()
Programao em ADVPL /
1.2.
AP5
Programao em ADVPL /
AP5
Devido ao controle exercido sobre os dados a performance do banco acaba sendo prejudicada. Nos
prximos tpicos estaremos demonstrando como melhorar e otimizar o SGDB (Sistema Gerenciador
de Banco de Dados) para o melhor aproveitamento do sistema.
Para empresas que fazem uma grande utilizao de banco de dados normalmente encontramos um
profissional chamado DBA (Data Base Administrator), que tem a funo de administrar o banco de
dados, quanto a otimizao, configurao, backups e segurana. Sabemos que na prtica isto s
funciona para empresas grandes, portanto temos que saber o mnimo possvel de cada banco de
dados para podermos identificar problemas e solues que se adequam melhor instalao do
cliente.
1.3.
1.3.1.
1.3.1.1.
Controle Transacional
Segurana e Backup
Depois que uma transao concluda com sucesso, no indica que a mesma estar sendo
transferida para a rea real dos dados. Este tramite de transferncia chamado de
CheckPoint , este ponto configurvel de acordo o SGDB utilizado. Para bancos de dados de
maior escala, o processo de check point s realizado aps o Backup da rea de LOG.
O LOG tambm utilizado para fazer o backup de grande bancos de dados, guardando
somente as alteraes efetuados em um determinado intervalo de tempo. Em clientes com
base de dados pequenas, no utilizamos este tipo de recurso.
1.3.1.3.
1.3.2.
1.4.
1.5.
Entidade =
Atributos =
Pedido
Total do Pedido, Quantidade Total, etc.
1.6.
1.6.2.
2. TopConnect
Programao em ADVPL /
2.1.
AP5
Informaes gerais
O TOPConnect foi desenvolvido em linguagem C pela Microsiga e utilizado hoje pelo
SigaPROTHEUS / AP5 atravs da linguagem ADVPL (PROTHEUS Protheus Language). Ele tambm
pode ser utilizado por aplicaes XBASE que queiram trocar a base de dados de DBF para SQL.
Os gerenciadores de banco de dados hoje suportados so:
( MSSQL / MSSQL7 )
( ORACLE )
( DB2 )
( AS/400 )
( ANYWHERE / ANYSYB )
( SYBASE )
( INFORMIX )
Campos numricos
Campos Lgicos
Programao em ADVPL /
Campos Data
YYYYMMDD.
2
6
2
1
8
6
FIELD_TABLE
FIELD_NAME
FIELD_TYPE FIELD_PREC FIELD_DEC
------------------------------------------------------ -------------------------------- ------------------ ------------------ ---------------dbo.SA1010
A1_COMIS
P
5
2
dbo.SA1010
A1_DESC
P
2
0
dbo.SA1010
A1_LC
P
14
2
dbo.SA1010
A1_EMISSAO
D
8
0
dbo.SA1010
A1_MCOMPRA
P
17
2
dbo.SA1010
A1_METR
P
7
2
dbo.SA1010
@@HAS_DFT_VAL@@ X
0
0
...
Neste exemplo vocs percebero que na tabela TOP_FIELD s existe os campo numricos, data e
Lgico (no caso no existe nenhum usado pelo arquivo).
Alerta! : Se voc for utilizar diretamente o Banco de dados voc precisa estar ciente que
um campo numrico armazenado como um tipo float(MSSQL Server), Number(Oracle), etc.
Por exemplo o valor 40,40 no banco pode estar armazenado como 40,39999999. Quando
formos utilizar querys voc deve utilizar a funo TCSETFIELD para resolver esta situao.
(Veja funo TCSETFIELD).
Importante tambm salientar que qualquer modificao efetuada em arquivo SX3 diretamente,
ou seja, sem utilizar o configurador, voc pode Ter problemas com inconsistncia de estrutura
da tabela do Banco de Dados e TOP_FIELD contra o dicionrio de dados. Para resolver este
problema voc dever remover os dados da Tabela do Banco de dados, eliminar a tabela e
deixa-la criar novamente e depois importar os dados via APPEND(Utilize SDU/CFG-AP5), ou
voc pode ajustar o dicionrio de dados manualmente conforme estrutura no Banco de Dados.
2.3.
Opes de Visualizar os Eventos (Mensagens de Erros)
A parte mais importante do Topconnect Manager o gerenciamento das mensagens de erros, estas
mensagens no so do TopConnect mas sim, de cada Banco de Dados, ou seja, se voc obtiver um
erro de Logon o erro que voc receber neste reporte, exatamente a mesma mensagem que o Banco
de Dados estaria informando se voc utilizar um utilitrio do prprio Banco para fazer o Acesso.
Na maioria dos problemas este logo de erros o ponto principal para descobrir o que esta
acontecendo, entre o Topconnect e o Banco de dados. Voc s estar recebendo mensagens se o link
entre o Banco de dados e o Topconnect estiver funcionando.
Programao em ADVPL /
2.4.
AP5
2.4.2.1.
Limite de registros
O limite de registros em uma tabela de 2,147,483,648 , este nmero normalmente deve
ser levado em considerao para as tabelas que recebem muita insero de registro
seguidas de muitas excluses fsica do registro.
2.4.2.2.
2.5.
2.5.2.
ndices
Os ndices so criados imediatamente aps a criao da estrutura das tabelas. Os ndices
criados partem do arquivo de ndices do SigaPROTHEUS / AP5, que o arquivo SINDEX.
Existe um ndice que criado apenas uma vez no momento em que a tabela criada, este ndice
tem como formao do nome = <nome da tabela> + _RECNO , este ndice e sempre composto
da coluna R_E_C_N_O_ e no permite duplicidade.
Alerta!: Nunca remova os ndices das tabelas, principalmente o ndice RECNO que no ser
criado pelo TopConnect quando a tabela j existe. Se voc criou um ndice pelo SINDEX e
depois percebeu que montou errado ou precisa elimina-lo, voc precisa elimin-lo do SINDEX e
tambm do Banco de Dados.
2.5.3.
Defaults
So constraints de validao de campos que no so informados, nos comandos de insero e
alterao, ou seja, se voc no possui os defaults criados o Banco de Dados estar deixando
estes campos com valor nulo. Os defaults so criados no momento da criao das tabelas.
Alerta!: Se voc fizer qualquer operao de transferncia via Banco de Dados que no transfira
os Defaults, e logo em seguida voc utilizar o sistema , estar correndo risco de inserir nulos na
Base de Dados. Se isto acontecer voc poder Ter problemas com o TopConnect Server, ele
poder travar ou derrubar conexes com dados indevidos. A soluo neste caso utilizar o
utilitrio DEFAULT que esta disponvel no site da Microsiga.
2.5.4.
Exemplo de fonte em ADVPL para executar um Pack no Banco de Dados , esta rotina j prev
problema de estouro da rea de LOG/RollBack de um Back de Dados
/*
Funo PACK
Autor Emerson/Vicente
Data 16.12.99
Descrio Rotina RDMAKE para eliminar os registros deletados do banco
Uso
RDMake <Programa.Ext> -w
Exemplo RDMake Pack.prw
*/
@ 96,42 TO 323,505 DIALOG oDlg5 TITLE "Rotina de Pack"
@ 8,10 TO 84,222
@ 91,168 BMPBUTTON TYPE 1 ACTION Execute(OkProc)
@ 91,196 BMPBUTTON TYPE 2 ACTION Close(oDlg5)
@ 23,14 SAY "Este programa ira fazer um pack em todos arquivos abertos pelo PROTHEUS."
ACTIVATE DIALOG oDlg5
Return nil
Function OkProc
Close(oDlg5)
Processa( {|| Execute(RunProc) } )
Return
/*
Funcao RunProc
Descrio Executa o Processamento
*/
Function RunProc
DbSelectArea("SX2")
NrecnoSX2 := SX2->(Recno())
DbGoTop()
ProcRegua(reccount())
While !Eof()
If Select(SX2->X2_CHAVE) > 0
cQuery := 'SELECT MAX(R_E_C_N_O_) RECNO FROM ' + SX2->X2_ARQUIVO
dbUseArea(.T., "TOPCONN", TCGenQry(,,cQuery), 'CONT', .F., .T.)
nCont := 1
While nCont <= CONT->RECNO
cQuery := "DELETE FROM "+SX2->X2_ARQUIVO
cQuery := cQuery + " WHERE D_E_L_E_T_ = '*'"
cQuery := cQuery + " AND R_E_C_N_O_ between "+Str(nCont)+" AND +Str(nCont+1024)
nCont := nCont + 1024
TCSQLEXEC(cQuery)
Enddo
DbSelectArea("CONT")
DbCloseArea()
Endif
DbSelectArea("SX2")
dbSkip()
incproc()
Enddo
Programao em ADVPL /
AP5
return
2.7.
DBFNTX x TopConnect
2.7.1. ndices de produo
Todos os SGDB's utilizam o conceito de ndices de produo portando uma aplicao que utilize o
TOPConnect no necessita ter todos os ndices abertos para que os mesmos sejam atualizados.
2.7.2.
2.7.3.
ndices condicionais
Nos gerenciadores de banco de dados no existe a figura dos ndices condicionais.
Para se obter resultados semelhantes aos ndices condicionais o TOPConnect agregou nova
funcionalidade ao filtro do SigaPROTHEUS / AP5.
Considere uma aplicao que crie o seguinte ndice:
INDEX ON CODIGO,NOME FOR ESTADO = "SP" AND SALDO > 10000
Com o TOPConnect este ndice seria o mesmo que:
SET FILTER TO ESTADO = "SP" .AND. SALDO > 10000 .AND. ORDERBY(CODIGO,NOME)
dbSetOrder(0)
O TOPConnect permite o uso da funo OrderBy nos filtros o que reproduz o mesmo efeito de um
ndice filtrado.
O TOPConnect disponibiliza os dados na ordem solicitada pela clusula OrderBy na Ordem 0 do
arquivo, no interferindo assim com os ndices do arquivo.
2.7.4.
Programao em ADVPL /
2.7.5.
AP5
2.8.
Comandos
Neste captulo mencionaremos apenas os comandos da linguagem ADVPL que tem a sua funcionalidade
alterada ou complementada e os novos comandos implementados pelo TOPConnect via RDD.
Para a utilizao destes comandos o programa dever conter a seguinte instruo:
#INCLUDE "TOPCONN.CH"
2.8.1.
APPEND FROM
Em uma aplicao ADVPL o comando APPEND FROM utilizado para se inserir registros na
Work Area corrente com registros vindos de outro arquivo DBF.
No TOPConnect o comando APPEND FROM importara registros de um arquivo DBF para uma
tabela do banco de dados.
No ADVPL opcionalmente poder ser especificado o parmetro VIA "TOPCONN" o que far com
que registros de uma tabela sejam inseridos na Work Area corrente.
Exemplo
SELECT CLIENTES
//Importa registros de um DBF
APPEND FROM c:\temp\newcli.dbf
Ou
SELECT CLIENTES
//Importa registros da tabela NEWCLI
APPEND FROM NEWCLI VIA "TOPCONN"
2.8.2.
COPY TO
USE
Abre uma tabela no banco de dados.
Sintaxe:
USE [<xcTable>
[INDEX <xcIndex list>]
[ALIAS <xcAlias>] [EXCLUSIVE | SHARED]
[NEW] [READONLY]
VIA "TOPCONN"
<cTable>
O nome da tabela a ser aberta.
INDEX <cIndex List> Especifica o nome de 1 a 15 ndices a serem abertos na Work Area
corrente.
ALIAS < cAlias>
Especifica um nome para a Work Area onde a tabela ser aberta
EXCLUSIVE Especifica que apenas este usurio ter acesso a esta tabela. Todas as outras
tentativas de colocar esta mesma tabela em uso falharo.
SHARED
Especifica que a tabela ser aberta em modo compartilhado.
NEW Abre a tabela <cTable> na prxima Work Area disponvel. Se esta clausula no for
especificada, <xcTable> ser na Work Area corrente.
READONLY
Abre <cTable> apenas para leitura.
VIA "TOPCONN"
Este parmetro indica ao ADVPL que esta Work Area ser gerenciada
pelo TOPconnect.
Se nenhum parmetro for especificado a tabela aberta na Work Area corrente ser fechada.
Exemplo
//Abre a tabela de Clientes em uma nova Work Area
USE clientes SHARED NEW VIA "TOPCONN"
2.8.4.
AP5
SELECT PEDIDOS
APPEND BLANK
REPLACE NUM WITH cNumero
REPLACE VALOR WITH nValor
SELECT ITEMS
APPEND BLANK
REPLACE NUM WITH cNumero
REPLACE QUANT WITH nQuant
.....
APPEND BLANK
REPLACE NUM WITH cNumero
REPLACE QUANT WITH nQuant
.....
COMMIT TRANSACTION
2.9.
Funes
2.9.1. TCCANOPEN
Verifica a existncia de tabelas e ndices no servidor.
Sintaxe
TCCanOpen(cTable [, cIndice]) =>lgico
Exemplo
//Testa a existncia da tabela customer
IF !TCCanOpen("CUSTOMER")
dbCreate("CUSTOMER", aStru, "TOPCONN")
ENDIF
USE CUSTOMER SHARED NEW VIA "TOPCONN"
//Testa a existncia do ndice
IF !TCCanOpen("CUSTOMER","CUSTCOD")
INDEX ON CODIGO TO CUSTCOD
ELSE
SET INDEX TO CUSTCOD
ENDIF
...
2.9.2.
TCCONTYPE
Especifica o protocolo de comunicao a ser utilizado pelo TOPConnect.
Sintaxe
TCConType(<cType>)
Onde <cType> pode ser:
TCPIP Utiliza o protocolo TCP/IP.
NPIPE Utiliza o protocolo Named Pipes.
APPC Utiliza o protocolo APPC.
TCDELFILE
Exclui uma tabela no servidor.
Sintaxe
TCDelFile(<cTable>)
Onde <cTable> o nome da tabela a ser excluda.
Exemplo
TCDelFile("CUSTOMER")
2.9.4.
TCGETDB
Retorna o Tipo de Banco de Dados corrente
cDataBase := TCGETDB()
Onde os valores de retorno so :
MSSQL
MSSQL7
ORACLE
DB2
SYBASE
ANYWHERE
ANYSYBASE
INFORMIX
2.9.5.
TCLINK
Abre uma conexo com o Servidor TOPConnect.
Sintaxe
nCon := TCLink(<cConectString>,<cServer>)
Onde o parmetro <cConnectString> composto por:
Para TOPConnect NT : Nome do Banco de Dados / Nome do Ambiente
Para TOPConnect/400: Nome do Ambiente
O parmetro <cServer> contm:
Para conexes NamedPipe, APPC e Brigde : O nome do servidor TOPConnect
Para conexes TCP/IP : O endereo IP do servidor TOPConnect
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.
Programao em ADVPL /
2.9.6.
AP5
TCQUERY
Executa uma Query no servidor e coloca seu retorno em uma WorkArea.
Sintaxe:
TCQUERY [<cSQLExpr>
[ALIAS <xcAlias>]
[NEW]
VIA "TOPCONN"
<cSQLExpr> Expresso SQL a ser enviada ao servidor.
ALIAS < cAlias>
Especifica um nome para a Work Area a ser aberta
NEW Abre a tabela <cTable> na prxima Work Area disponvel. Se esta clausula no for
especificada, <xcTable> ser na Work Area corrente.
VIA "TOPCONN"
Este parmetro indica ao ADVPL que esta Work Area ser gerenciada
pelo TOPconnect.
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:
GO TOP - DbGoTop()
GO BOTTOM - DbGoBottom()
SKIP - DbSkip()
Eof()
Bof()
Obs: Ao executar uma Query que retorne um ou mais valores calculados, o nome dos campos da
WorkArea sero COLUMN1, COLUMN2... COLUMNn.
Exemplo
//Abre a tabela de Clientes em uma nova Work Area
cQuery := "SELECT a.codigo, b.nome FROM CLIENTES a, CLIDATA b ; WHERE a.CODIGO =
b.CODIGO ORDER BY CODIGO,NOME"
TCQUERY cQuery ALIAS CLIENTES NEW VIA "TOPCONN"
dbGoTop()
While !Eof()
? CODIGO,NOME
dbSkip()
end
USE
cQuery := 'SELECT SUM(VALOR),SUM(SALDO) FROM CUSTOMER'
TCQUERY cQuery NEW VIA "TOPCONN"
?COLUMN1 //Somatoria dos valores
?COLUMN2 //Somatoria dos saldos
2.9.7.
TCQUIT
Encerra todas as conexes com o TOPConnect
Sintaxe
TCQuit()
2.9.8.
TCSETCONN
Seleciona conexo ativa.
Sintaxe
TCSETCONN(<nConn>)
Onde <nConn> o nmero da conexo.
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.
Sintaxe
TCSetField(<cAlias>, <cField> ,<cType>, [<Prec.Inteira>,<Prec.Decimal>] )
Onde <cAlias> o alias da WorkArea, <cField> o nome do campo e <cType> o
tipo desejado para o campo.
Exemplo
TCQUERY "SELECT NOME, DATA, MARRIED, VALOR FROM CUSTOMER" ALIAS QUERY VIA
"TOPCONN"
TCSetField("QUERY","DATA","D")
TCSetField("QUERY","VALOR","N",12,2)
Dentro de um programa ADVPL j podemos considerar como um campo data no mais um
campo caracter como o seu armazenamento.
O campo Data s retornado como um campo caracter por que estamos utilizando a funo
TCQUERY, se no o tratamento automtico.
2.9.10. 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
Programao em ADVPL /
AP5
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
<aRet> := TCSPExec(<cSPName>,[<xParam1>,<xParam2>...<xParamN>])
Onde <aRet> um array com os parmetros de retorno da Stored Procedure e <cSPName> o
nome da Stored Procedure a ser executada e os demais parmetros variam conforme a definio
da Stored Procedure.
Exemplo
//Verifica se a Stored Procedure Teste existe no Servidor
If TCSPExist("TESTE")
//Executa a Stored Procedure Teste
aRet := TCSPExec("TESTE","JOSE",1000)
if aRet <> nil
For i:= 1 to Len(aRet)
//Mostra os valores de retorno
?aRet[i]
Next
Else
?"Erro executando Stored Procedure"
?"Mensagem: "+TCSQLError()
Endif
EndIf
2.9.11. TCSPEXIST
Verifica a existncia de uma determinada Stored Procedure no servidor.
Sintaxe
<lExist> := TCSPExist(<cSPName>)
Onde <lExist> indica se a Stored Procedure existe ou no e <cSPName> o nome da Stored
Procedure procurada.
Exemplo
If SPExist("CALCCUSTO")
TCSPExec("CALCCUSTO")
Endif
2.9.12. TCSQLERROR
Retorna o ltimo erro registrado pelo TOPConnect durante a execuo de uma Query.
Sintaxe
<cError> := TCSQLError()
Onde <cError> a mensagem de erro.
Exemplo
If TCSQLExec("UPDATE CUSTOMER SET VALUE=0") < 0 then
?TCSQLError()
Endif
OBS: Esta a mesma mensagem que esta registrada no log de eventos do TopConnect
Manager.
2.9.13. TCSQLEXEC
AP5
cName+"F"+cCrrEmp+") "
TCSysExe( cCommand )
( * )Funes apenas para o TOPConnect rodando em servidores AS/400.
2.10. Performance
2.10.1. Otimizando seu cdigo
A linguagem ADVPL tem um enfoque posicional, recuperando os dados utilizando orientao a
registros, enquanto aos Bancos de Dados SQL recuperam os dados por blocos de dados.
Devido a esta diferena conceitual, vrios pontos devem ser levados em considerao para que
se possa obter uma boa performance e utilizar os recursos de uma aplicao Client/Server.
2.10.2. Leitura Sequencial
Operaes de leitura seqencial de uma tabela podem levar a problemas de performance.
Vamos analisar o seguinte cdigo:
dbSelectArea("CLIENTES")
nValor := 0
Do While !Eof()
If ESTADO = "SP"
nValor += SALDO
Endif
DbSkip()
End
O cdigo acima far com que todas as linhas(registros) da tabela venham para o Client, o que ir
gerar um nmero de Queries no servidor igual ao nmero de linhas da tabela e cada uma delas
ir recuperar apenas uma linha, subtilizando a capacidade de processamento do servidor.
O cdigo acima poderia ser substitudo por:
TCQUERY "SELECT SUM(SALDO) ;
FROM CLIENTES ;
WHERE ESTADO = 'SP'" NEW
nValor := COLUMN1
Com a utilizao do comando TCQUERY todo a somatria feita no servidor retornando assim
para a aplicao apenas uma linha com o resultado desejado.
2.10.3. O uso de filtros
Antes de inserir o registro voc deve obter o nmero mximo da coluna R_E_C_N_O_
existente na tabela
Deste nmero voc deve somar 1
Logo em seguida fazer a insero propriamente dita do registro
Se o registro no for inserido com sucesso voc deve voltar ao primeiro passo.
Programao em ADVPL /
AP5
Alguns clientes utilizam rotinas como Stored Procedures para agilizar alguns processos crticos do
sistema, para instalao destas Storeds Procedures voc devem possuir o arquivo com o nome de
SIGAXXX.SPS, onde o XXX o tipo de Banco de Dados que o Cliente estar utilizando ex: SIGASQ7
(MSSQL 7.0), SIGAIFX (INFORMIX), SIGAORA (ORACLE)
Aps a confirmao desta operao todas as Procedures que estiverem disponveis neste arquivo sero
compiladas para a empresa em questo, se o cliente tiver mais do que uma empresa e ele deseja
instalar as procedures em todas as empresas ele precisa entrar em cada empresa.
Se houver qualquer problema na instalao das Stores Procedures ser gerado
um arquivo de log chamado SPBuild.LOG no diretrio \SIGAADV\. E tambm ser
apresentado o erro no Log do TopConnect.
Importante: Para utilizar a API ou o controle ActiveX, necessrio a DLL de comunicao do AP5 chamada
AP5CONN.DLL. Por isso, sempre que for necessrio utilizar uma dessas opes, a DLL de comunicao deve
estar em um path localizvel pelo Windows e deve estar atualizada em relao ao AP5 Server em que a aplicao
externa tentar se conectar.
AP5CreateConnControl
Descrio:
Criao de uma instncia de comunicao com o AP5 Server. Pode-se criar diferentes instncias
de comunicao, acessando um ou mais servidores do AP5.
Parmetro
s:
Retorno:
int - Retorna o Handle da instncia criada. Este Handle retornado dever ser informado em
todas as demais funes de comunicao, para identificao da instncia que ser utilizada.
Sintaxe:
Programao em ADVPL /
AP5
AP5DestroyConnControl
Descrio:
Destruio de uma instncia de comunicao com o AP5 Server. Aps a utilizao da API, e
antes de encerrar a execuo da aplicao externa, necessrio destruir o Handle criado com a
funo anterior para a liberao de memria.
Parmetro
s:
Retorno:
Sintaxe:
lOk = AP5DestroyConnControl(nAP5)
AP5Connect
Descrio:
Conexo a um AP5 Server. Esta funo no deve ser confundida com a funo
AP5CreateConnControl. Esta funo ir realizar a conexo com o AP5 Server indicado durante
a criao da instncia informada como parmetro.
Parmetro
s:
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo. atravs
do Handle que definido em qual servidor, porta e ambiente os processos sero executados.
Retorno:
bool - Retorna verdadeiro ou falso, indicando se a conexo foi efetuada com sucesso.
Sintaxe:
lOk = AP5Connect(nAP5)
AP5Disconnect
Descrio:
Desconexo de um AP5 Server. Esta funo no deve ser confundida com a funo
AP5DestroyConnControl. Esta funo ir encerrar a conexo ativa com um AP5 Server, da
instncia informada como parmetro.
Parmetro
s:
Retorno:
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo.
Sintaxe:
AP5Disconnect(nAP5)
Sem retorno.
AddNullParam,
AddNumericParam,
AddStringParam,
AddLogicalParam,
AddDateParamAsDouble,
AddDateParamAsString,
AddArrayParam
Descrio:
Estas funes so utilizadas para a execuo de processos em um servidor AP5. Podem ser
utilizadas somente aps uma conexo ser ativada. Um processo executado em um servidor AP5
pode necessitar de parmetros, que devero ser enviados ao servidor antes da execuo do
processo atravs da utilizao destas funes. Os tipos de dados que podem ser enviados so:
Numrico (int), Caracter (char *), Lgico (bool), Data (enviado como caracter char * - ou
como numrico - int) e Array (variant).
Parmetro
s:
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo. atravs
do Handle que definido para qual servidor o parmetro ser enviado;
xParametro: indefinido - O tipo de dado do parmetro depender da funo utilizada, segundo
os tipos de dados permitidos explicados acima.
Retorno:
bool - Retorna verdadeiro ou falso, indicando se o parmetro pde ser enviado ao AP5 Server
com sucesso.
AP5
ou
lOk = AddStringParam(nAP5,TEXTO)
ou
lOk = AddLogicalParam(nAP5,true)
ResultAsNumeric,
ResultAsString,
ResultAsLogical,
ResultAsDate,
ResultAsDateString,
ResultAsArray
Descrio:
Parmetro
s:
Estas funes so utilizadas para obter o retorno do AP5 Server aps a execuo de um
processo.
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo.
Apenas para as funes ResultAsString e ResultAsDateString:
cBuffer: char * - Buffer de caracteres alocado para receber o retorno em formato caracter;
nSize: int - Tamanho do buffer passado no parmetro anterior.
Retorno:
O tipo de dado do retorno depender da funo utilizada, segundo os tipos de dados definidos
anteriormente. Para as funes ResultAsString e ResultAsDateString o retorno ser o tamanho
do buffer preenchido.
Sintaxe:
nRet = ResultAsNumeric(nAP5)
ou
lRet = ResultAsLogical(nAP5)
ou
ResultAsString(nAP5,cBuffer,nSize)
AP5BuildNumber
Descrio:
Funo utilizada para obter o nmero do build de compilao da API de conexo ao AP5.
Parmetro
s:
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo;
cBuild: char * - Buffer de caracteres para receber o nmero do build;
nSize: int - Tamanho do buffer passado no segundo parmetro.
Retorno:
Sintaxe:
AP5BuildNumber(nAP5,cBuffer,nSize)
PrepareEnv
Descrio:
Funo utilizada para preparar o ambiente do sistema, ou seja, abrir arquivos, criar variveis, e
tornar o ambiente de execuo da aplicao externa em relao ao AP5 Server, o mais parecido
possvel com o que realizado pelos mdulos do sistema.
Parmetro
s:
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo;
cEnv: char * - Ambiente que ser utilizado para a abertura dos arquivos;
cEmp: char * - Cdigo da empresa do sistema (dois dgitos) que dever ser aberta;
cFil: char * - Cdigo da filial que ser utilizada (dois dgitos);
aTables: variant Este parmetro deve ser um array variant (para detalhes, consulte a
documentao da linguagem utilizada) contendo as siglas das tables que devero ser abertas
(por exemplo SB1).
Retorno:
Sintaxe:
PrepareEnv(nAP5,ENVIRONMENMT,99,01,aTables)
Programao em ADVPL /
AP5
StartJob
Descrio:
Esta funo permite a execuo de um processo (job) em um AP5 Server. O processo executado
pode ser qualquer um dos existentes no repositrio definido pelo ambiente informado, incluindo
as funes criadas pelo usurio (User Function). Pode tambm receber parmetros, bem como
retornar um valor para a aplicao externa, sempre utilizando-se das funes descritas
anteriormente. A execuo de um processo resume-se em:
A)
1. Enviar os parmetros (se existirem);
2. Executar o processo e aguardar sua finalizao;
3. Obter o resultado (se existir).
B)
1. Enviar os parmetros (se existirem);
2. Executar o processo sem aguardar sua finalizao;
Os processos so executados em threads de execuo separadas. Isso permite aplicao
externa que esteja utilizando a API, optar por executar o processo e continuar trabalhando
enquanto o mesmo est em execuo. Porm, somente poder obter um retorno quando esperar
at que o processo termine de ser executado.
Parmetro
s:
Obs.: Como estes processos so executados sem que uma instncia do AP5 Remote esteja ativa,
devem ser criados sem nenhum comando de interface (criao de janelas, comandos de alerta,
help, etc). Se um comando de interface for utilizado no cdigo ADVPL de um processo, a
execuo deste atravs da API gerar um erro de execuo.
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo;
cEnv: char * - Ambiente que ser utilizado para a execuo do processo;
cFunc: char * - Nome do processo ou funo que ser executado no AP5 Server;
lWait: bool - Verdadeiro ou Falso indicando se a aplicao externa dever ou no aguardar pelo
trmino da execuo do processo.
Retorno:
bool - Retorna verdadeiro ou falso, indicando se o processo foi iniciado com sucesso.
Sintaxe:
StartJob(nAP5,ENVIRONMENMT,MESEXTENSO,true)
CallProc
Descrio:
Esta funo tem o mesmo objetivo que a anterior, porm sempre aguardar o trmino do
processo para que o controle volte aplicao externa, e tem algumas diferenas conceituais:
A)
No se pode escolher o ambiente no qual o processo ser executado. Os
processos executados pela CallProc sero sempre executados no ambiente indicado na
criao da instncia com a funo AP5CreateConnControl;
B)
Um processo executado atravs da funo StartJob, comear de um
ambiente totalmente novo. Porm, os processos executados pela funo CallProc
mantm o ambiente da ltima execuo. Assim, o valor de variveis criadas, os arquivos
abertos, etc, so mantidos na prxima execuo.
Parmetro
s:
nObjectID: int - Handle da instncia que ser utilizada para a execuo desta funo;
cFunc: char * - Nome do processo ou funo que ser executado no AP5 Server.
Retorno:
Bool - Retorna verdadeiro ou falso, indicando se o processo foi finalizado com sucesso.
Sintaxe:
CallProc(nAP5,CALCEST)
Com a utilizao da API, pode-se criar toda uma aplicao, em Visual Basic por exemplo, que executar funes do sistema
Advanced como o usurio faria atravs do AP5 Remote:
Dim nAP5 As Integer
Dim cRes As String
nAP5 = AP5CreateConnControl(APSERVER, 1024, ENVIRONMENT, Administrador, )
If AP5Connect(nAP5) Then
AddNumericParam(nAP5,5)
lOk = CallProc(nAP5,MESEXTENSO)
Programao em ADVPL /
AP5
If lOk Then
ResultAsString(nAP5,cRes)
Else
CRes = No foi possvel obter o ms por extenso
End if
AP5Disconnect(nAP5)
End if
AP5DestroyConnControl(nAP5)
Importante: A notao dos tipos de dados e da sintaxe mencionados na descrio das funes segue o
padro de linguagens como a linguagem C. Deve-se considerar os exemplos de sintaxe conforme a
linguagem utilizada.
Todas as funes de caracter como ResultAsString ou AP5BuildNumber, trabalham com buffer de
caracteres. Isto significa que o buffer que receber o retorno deve ser alocado na linguagem utilizada e
que o tamanho alocado dever ser passado como parmetro para a funo chamada. A aplicao externa
tambm ser responsvel por liberar a memria do buffer alocado.
O Controle ActiveX
O controle ActiveX tem as mesmas funcionalidades da API. Porm o formato de utilizao diferenciado. O controle
ActiveX um objeto que deve ser registrado no computador onde ser utilizado e durante a execuo da aplicao externa,
dever ser criado, utilizado e destruido ao final. Para maiores detalhes, consulte a documentao da linguagem utilizada ou a
documentao do conceito ActiveX na pgina da Microsoft (http://www.microsoft.com).
Servios de FTP
O protocolo FTP (File Transfer Protocol) permite a transferncia de arquivos entre um servidor e uma aplicao
client de FTP (com um Web Browser como o Internet Explorer, por exemplo). Utilizando o AP5 Server como um servidor
FTP, os usurios podero remotamente baixar arquivos disponibilizados em um diretrio configurvel no servidor. Pode-se
tambm habilitar um recurso de auto-atualizao para o AP5 Remote, que ir automaticamente baixar arquivos compactados
para se auto atualizar quando necessrio.
Para habilitar o servio de FTP no AP5 Server, o seguinte
grupo deve ser criado no arquivo de configuraes
(AP5SRV.INI):
[FTP]
Enable=1
Path=C:\AP5\FTP
Port=21
Onde as chaves so:
O recurso de auto-atualizao encontrado no AP5 Remote funciona atravs da deteco de diferenas na verso das DLLs
locais (ou seja, que se encontram juntamente com o executvel do AP5 Remote). Quando isto ocorre, o usurio questionado
sobre a execuo da auto-atualizao. Se tudo estiver corretamente configurado no arquivo de configurao do AP5 Remote
(AP5RMT.INI para maiores detalhes, consulte a documentao do AP5 Remote), ao escolher que deseja tentar uma autoatualizao, o AP5 Remote ir abrir uma conexo FTP com o Server configurado e baixar os arquivos compactados (com a
extenso .CAB) contendo as DLLs e executveis mais atualizados. Os arquivos sero ento descompactados localmente para
a atualizao.
Servios de HTTP
O protocolo HTTP (HyperText Transmission Protocol) o protocolo utilizado na comunicao entre um servidor e
um Web Browser. o protocolo utilizado para o envio e recebimento de pginas formatadas em padres SGML
(HTML,XML, etc). Este protocolo se baseia principalmente em dois comandos: GET e POST. O comando GET utilizado
para obter alguma informao do servidor HTTP e o POST para postar informaes para o servidor. Mais adiante, ser mais
fcil compreender onde tais comandos so utilizados no AP5 Server.
o protocolo HTTP).
Para habilitar o servio de HTTP no AP5 Server, os seguintes grupos devem ser criados no arquivo de configuraes
(AP5SRV.INI):
HTTP]
Enable=1
Path=C:\AP5\HTTP
RPCServer=SERVERKEY
RPCEnv=ENVIRONMENT
RpcTimeOut=40
Port=1234
GetProc=<funo>
PostProc=<funo>
[SERVERKEY]
TYPE=TCPIP
Server=172.16.1.1
Port=5024
Extenso
do arquivo
Descrio
O que acontece
Exemplo
Nenhuma
Um endereo http
nico, sem um nome
de arquivo definido.
http://servidor/
.
HTM;.HTML
ou
outra
extenso
qualquer.
.APL
Pginas
HTML,
arquivos
texto,
arquivos de imagem,
som, vdeo, etc.
.APH
uma chamada
direta a uma funo
do repositrio do
AP5.
http://servidor/cadastro
.htm
ou
http://servidor/imagem.
gif
http://servidor/acerto.a
pl
ou
http://servidor/runprog.
apl
http://servidor/activepa
ge.apl
ou
http://servidor/cadastro
.apl
Uma funo executada no momento do recebimento de uma requisio HTTP executada como um JOB, ou seja,
no contem interface. Por isso, tais funes no podem conter comandos de interface, como criao de janelas ou
exibio de helps e mensagens de alerta;
A nica interface possvel a utilizada no client HTTP. Por isso, tais funes devem SEMPRE retornar uma string
de caracteres. Aps o processamento da funo, essa string de retorno ser enviada diretamente ao client HTTP e
este ser o responsvel por sua interpretao. Por exemplo, utilizando um Web Browser como client pode-se
retornar a string de comandos HTML diretamente. O HTML ento ser propriamente exibido no Web Browser;
Qualquer retorno diferente de uma string de caracteres gerar um erro que ser enviado aplicao client HTTP (o
erro gerado Invalid Proc Return);
O AP5 Server passa alguns parmetros para as funes chamadas. Isso significa que ao criar funes para serem
utilizadas em resposta s requisies HTTP, deve-se criar o cabealho da funo com estes parmetros. No
obrigatrio utilizar os mesmos nomes de parmetros sugeridos abaixo quando criar diretamente estas funes.
Porm, como so esses os nomes utilizados no ADVPL ASP explicado mas a frente, aconselhvel utiliz-los por
motivo de padronizao:
- __aCookies: Este parmetro recebe um array bidimensional com os Cookies criados na aplicao client HTTP
(por exemplo, no Internet Explorer 5). Pode-se utiliz-lo para checar validaes mantidas nas mquinas client
por exemplo. Para maiores detalhes, consulte a documentao do HTML ou do Web Browser utilizado.
-
__aPostParms: Este parmetro recebe um array bidimensional com os campos contidos em um formulrio
HTML recebido atravs de um comando POST. Cada item deste array contm um array com o nome do campo
e o valor informado. Por exemplo, para um formulrio com dois campos para digitao (um chamado nome e o
outro chamado endereco), que enviam os dados para a funo cadastro.apl atravs de um POST, a funo
receber o array __aPostParms da seguinte forma:
{
{nome, NOME DIGITADO NA PAGINA HTML},
{endereco, ENDERECO DIGITADO NA PAGINA HTML}
}
A funo pode tratar os dados recebidos neste array para realizar um processamento especfico com tais
informaes. Para campos onde no possvel a entrada de dados e sim a escolha de uma informao prdefinida (como por exemplo um checkbox), o item somente existir no array caso o campo tenha sido
selecionado no formulrio HTML (por exemplo, se o checkbox for marcado).
__nProcID: Contm o Handle da Thread de execuo daquela funo. A utilizao deste parmetro ser
explicada juntamente com o tpico ADVPL ASP posteriormente;
__aProcParms: Este parmetro recebe um array bidimensional com os parmetros enviados na linha de URL
do Web Browser. Por exemplo, na execuo de uma funo via linha de URL do Web Browser como:
http://servidor/vende.apl?cod=000001&nome=PRODUTO DE TESTE&quant=20
a funo chamada vende receber o array __aProcParms da seguinte forma:
{
{cod, 000001},
{nome, PRODUTO DE TESTE},
{quant, 20}
}
A funo pode tratar estes dados recebidos para realizar processamentos especficos. muito til tambm para
criar links de execuo diretamente atravs de um Web Browser.
__cHTTPPage: Esse parmetro recebe o nome da pgina, arquivo ou funo originalmente requisitada para o
AP5 Server. utilizado quando as chaves GETPROC e POSTPROC (explicadas anteriormente) so habilitadas
no arquivo de configuraes do AP5 Server. A funo configurada ir receber nesse parmetro o nome original
requisitado e poder executar algum processamento especfico para continuar o processo (retornando a prpria
funo original) ou desviar para outra pgina, por exemplo.
Valor: ' +
Next i
Endif
Return(cHTML)
Para crias as funes que sero utilizadas em chamadas via um Web Browser, ou seja, em qualquer
request HTTP, deve-se seguir o procedimento normal de criao de funes no AP5: utilizando o
AP5 IDE para a edio e para a compilao.
Note que no caso de funes do usurio (User Function) o nome chamado na URL do Browser
tambm dever conter o U_ no comeo da funo, por exemplo:
http://servidor/u_webrelato.apl
E deve-se sempre indicar a extenso .APL para que o AP5 Server identifique que uma funo a ser executada.
O ADVPL ASP
Uma pgina ASP (Active Server Pages) uma pgina HTML contendo cdigo interpretvel em uma linguagem
compreensvel ao servidor HTTP em uso. Por exemplo, o IIS da Microsoft utiliza o VBScript para criar suas pginas ASP,
do mesmo modo que o AP5 utiliza o ADVPL. Uma pgina ASP uma combinao de script HTML e cdigo interpretvel.
No ADVPL ASP esse cdigo padro xBase, portanto a preocupao maior daqueles que j conhecem e trabalham com o
AP5 e desejam desenvolver pginas ativas para aplicaes Web utilizando essa facilidade conhecer HTML.
Quando este arquivo for requisitado ao AP5 Server (atravs de uma chamada em URL por exemplo) o cdigo entre os
delimitadores ser executado, porm o script colocado ao redor do cdigo ser mantido exatamente como se encontra.
A grande vantagem de se criar arquivos ADVPL ASP em relao a criar funes APL simples, decorre do fato de que no
necessrio conhecer to profundamente HTML e que nas funes APL simples o desenvolvedor deve se preocupar em
retornar todo o HTML necessrio para a correta exibio no Web Browser. E tambm, como o ADVPL ASP mistura o script
HTML com o cdigo interpretvel, pode-se criar um arquivo APH utilizando o editor desejado (como o Microsoft FrontPage
por exemplo) e inserir o cdigo necessrio entre o script. Outro detalhe importante que pode-se utilizar as estruturas de
fluxo da linguagem ADVPL para repetir comandos do prprio script HTML (por exemplo, colocar um comando de script
HTML dentro de um comando While em ADVPL):
<% While !EOF() %>
<B> Esta linha ser repetida no HTML at ocorrer o fim de arquivo </B>
<%
dbSkip()
EndDo
%>
Note que tambm pode existir diferentes blocos de cdigo interpretvel separados pelos delimitadores, dentro de um mesmo
arquivo.
To importante quanto mesclar cdigo interpretvel com script de formatao HTML, utilizar os comandos ADVPL para
alterar o script de formatao. Ou seja, colocar o contedo de variveis, campos, etc, diretamente no HTML que ser
enviado aplicao client (ao Browser por exemplo). Isso pode ser realizado atravs dos delimitadores de avaliao. Os
delimitadores de avaliao so <%= para abertura e %> para encerramento. Diferentemente dos delimitadores de cdigo
interpretvel, estes devem sempre estar na mesma linha. Com eles pode-se criar uma linha de script HTML, cujo contedo
contm uma expresso que ser avaliada em tempo de execuo:
<b>Esta linha HTML, mas a data exibida aqui: <%= Time() %> foi obtida em tempo de
execuo.</b>
No exemplo acima, a linha HTML ser retornada para o Browser com o resultado da funo time (ou seja, a hora atual no
servidor) inserido no texto.
Utilizando todos esses conceitos, pode-se criar toda uma apliao Web baseada no AP5. Ou seja, o processamento e acesso
aos dados fica por conta do AP5 Server, e a interface fica por conta do Browser (utilizando o HTML). Abaixo um exemplo
de um relatrio de clientes criado utilizando o ADVPL ASP. Para test-lo basta copiar o cdigo, salv-lo como
WEBREL.APH e compilar o arquivo atravs do AP5 IDE:
<html>
<head>
<% //Funo para manuteno do ambiente %>
<%= HTMLProcID(__nProcID) %>
<title>ADVPL ASP DEMO</title>
</head>
<%
#define
#define
#define
#define
FIELD_CODDE
FIELD_CODATE
FIELD_LOCDE
FIELD_LOCATE
"FROM_CODE"
"TO_CODE"
"FROM_LOCAL"
"TO_LOCAL"
de
<%=MesExtenso(Date())%>
de
<
align="left"><font
align="left"><font
width="12%"
width="50%"
width="7%"
width="17%"
width="14%"
bgcolor="#FFFFCC"><%=
bgcolor="#FFFFCC"><%=
bgcolor="#FFFFCC"><%=
bgcolor="#FFFFCC"><%=
bgcolor="#FFFFCC"><%=
HTMLAllTrim(SB1->B1_COD)
HTMLAllTrim(SB1->B1_DESC)
HTMLAllTrim(SB2->B2_LOCAL)
SB2->B2_QATU
"R$" + Str(SB2->B2_CM1,8,2)
%></td>
%></td>
%></td>
%></td>
%></td>
</tr>
<%
dbSkip()
EndDo
%>
</table>
</body>
</html>
Aps ter o cdigo compilado, pode-se visualizar o resultado acessando atravs de um Web Browser como o Internet
Explorer a seguinte URL:
http://servidor/h_webrel.apl
7. Conceito do ADVPL
Objetivo : Este curso tem como objetivo treinar e aperfeioar nossos clientes com algumas funes que a
microsiga desenvolveu no Siga PROTHEUS.
ideal
8. Funo
8.1.
Funo FIELDGET()
Esta funo tem a finalidade de criar / duplicar o registro dentro do arquivo corrente oude um outro arquivo ,
entretanto este comando necessita ser utilizado com um outro comando primo .
Alem de que os arquivos tanto de origem como o de destino devem Ter sua estrutura identica, mesmos
campos / tamanhos / tipos.
Primicia basica voce necessita estar posicionado na arquivo e registro que voce deseja ser duplicado ou
copiado.
Sintaxe :
AADD( Array , FIELDGET(_NCONTADOR)
Exemplo :
DbSelectArea("SC7")
_aCamposSC7 := {}
For _nI := to Fcount()
AADD ( aCamposSC7,FieldGet(_nI))
Next
8.2.
FIELDPUT()
Esta funo tem a finalidade de incluir ou seja pegar o conteudo do resultado da funo acima e duplica o
registro dentro do arquivo corrente ou de um outro arquivo, entretanto este comando necessita ser utilizado
por um comando primo .
Alem de que os arquivos tanto de origem como o de destino devem Ter sua estrutura identica, mesmos
campos / tamanhos / tipos.
Primicia basica voce devera travar o registro no arquivo sempre com o comando RECLOCK() com a opo
de verdade .
Sintaxe :
FIELDPUT(_NCONTADOR,ARRAY[_Contador])
Exemplo :
DbSelectArea("SC7")
RecLock("SC7",.T.)
For _nI := to Len( aCamposSC7)
FIELDPUT(_Ni,_aCamposSC7[_nI])
Next
Tipo: Processamento
Esta funo permite executar uma pesquisa em um arquivo, pela chave especificada
e na ordem especificada, retornando o contedo de um ou mais campos.
Sintaxe
GetAdvFVal(cAlias,uCpo,uChave,nOrder,uDef)
Parmetros
cAlias Alias do arquivo.
uCpo Nome de um campo ou array contendo os nomes dos campos desejados.
uChave Chave para a pesquisa.
nOrder Ordem do indice para a pesquisa.
uDef Valor ou array default para ser retornado caso a chave no seja encontrada.
Retorna
uRet Retorna o contedo de um campo ou array com o contedo de vrios campos.
Exemplo
// Exemplo de uso da funcao GetAdvFVal:
// Obtendo apenas de um campo:
cChave := SD2->D2_COD+SD2->D2_LOCAL
cDesc := GetAdvFVal(SB1,B1_DESC,cChave,1,SC6->C6_DESCRI)
// Obtendo o conteudo de mais de um campo:
cChave := SD2->D2_COD+SD2->D2_LOCAL
aCpos := {B1_DESC+2B1_PRV1,B1_UM}
aDados := GetAdvFVal(SB1,aCpos,cChave,1,{SC6->C6_DESCRI,SC6->C6_PRCVEN,SC6->C6_UM})
refere-se aos Itens do Pedido de Venda) e, aps pesquisar no SB1 (Cadastro de Produtos), sugerir a
quantidade vendida a partir de um campo especfico:
// Colunas...
nPosCod := aScan(aHeader,{ |x| Upper(AllTrim(x[2])) == C6_PRODUTO })
nPosQtd := aScan(aHeader,{ |x| Upper(AllTrim(x[2])) == C6_QTDVENlm })
// Obtm o cdigo do produto
cCodigo := aCols[n,nPosCod]
// Pesquisa
dbSelectArea(SB1)
dbSetOrder(1)
dbSeek(xFilial(SB1)+cCod)
// Altera a quantidade no grid
aCols[n,nPosQtd] := SB1->B1_QTSUGER // Campo especfico com a quantidade padro
__Return(SB1->B1_QTSUGER)
Para uma melhor compreenso, voc pode analisar os programas RDMOD2.PRX e/ou RDMOD3.PRX que
acompanham o SIGA PROTHEUS. Eles esto no diretrio principal do sistema (geralmente \SIGAADV\) e demonstram
rotinas usadas para cadastros semelhantes ao Pedido de Vendas e que trabalham com os arrays mencionados.
8.4 - SETDEFAULT
Tipo: Processamento
Sintaxe
SetDefault (aArray, cAlias)
Parmetros
aArray Array aReturn, preenchido pelo SetPrint
[1] Reservado para Formulrio
[2] Reservado para N de Vias
[3] Destinatrio
[4] Formato => 1-Comprimido 2-Normal
[5] Mdia => 1-Disco 2-Impressora
[6] Porta ou Arquivo 1-LPT1... 4-COM1...
[7] Expresso do Filtro
[8] Ordem a ser selecionada
[9]..[10]..[n] Campos a Processar (se houver)
cAlias Alias do arquivo a ser impresso.
Retorna
Nil
Comentrios
Esta funo habilita os padres de relatrio alterados pela funo SetPrint.
Exemplo
// Define Variveis
cString:= SB1
NomeRel:= MATR290lR
cPerg := MTR290lr
titulo := RELAO PARA ANLISE DOS ESTOQUESlL
cDesc1 := Este relatrio demonstra a situao de cada item em
cDesc2 := relao ao seu saldo , seu empenho , suas entradas previstas
cDesc3 := e sua classe ABC
aOrd := { Por Codigo io,lg Por Tipo }
Tamanho := G
// Envia controle para a funo SETPRINT
NomeRel:= SetPrint( cString, NomeRel, cPerg, @titulo, cDesc1, ;
cDesc2, cDesc3, .F., aOrd, .F., Tamanho)
If LastKey() = 27 .or. nLastKey = 27
Return
Endif
SetDefault(aReturn,cAlias)
If LastKey() = 27 .OR. nLastKey = 27
Return
Endif
8.5 - CRIATRAB
Tipo: Processamento
Cria arquivo de trabalho.
Sintaxe
CriaTrab(aArray,lDbf)
Parmetros
Retorna
ExpC1 Nome do Arquivo gerado pela funo.
Comentrios
Esta funo retorna o nome de um arquivo de trabalho que ainda no exista.
Caso lDbf = .T., a funo criar um arquivo DBF com este nome e a estrutura definida em aArray.
Caso lDbf = .F., a funo no criar arquivo de nenhum tipo, apenas fornecer um nome vlido.
Exemplos
// 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,{ NUMOPl, C, 10, 0})
AADD(aStru,{ PRODUTO, C, 15, 0})
AADD(aStru,{ QUANT , N, 16, 4})
AADD(aStru,{ ENTREGA, D, 8, 0})
AADD(aStru,{ ENTRAJ, D, 8, 0})
AADD(aStru,{ ORDEM , D, 4, 0})
AADD(aStru,{ GERADO , C, 1, 0})
cArqTrab := CriaTrab(aStru, .T.)
USE &cArqTrab ALIAS TRB NEW
8.6 - PROCREGUA
Tipo: Tela DOS/Windows
Inicializa rgua padro de processamento.
Sintaxe
ProcRegua(nRegs,nLinha,nColuna)
Parmetros
nRegs Nmero de registros que sero processados.
nLinha Nmero da Linha da rgua
nColuna Nmero da Coluna da rgua
Retorna
Nil
Exemplo
ProcRegua(1000)
For i:= 1 to 1000
IncProc()
Next
Return
8.7 - INCPROC
Tipo: Tela DOS/Windows
Incrementa rgua padro de processamento.
Sintaxe
IncProc()
Parmetros
Nil
Retorno
Nil
Exemplo
ProcRegua(1000)
For i:= 1 to 1000
IncProc()
Next
Return
Sintaxe
@ nLInha1,nColuna1 TO nLinha2,nColuna2 <TITLE> cTtulo
Parmetros
nLinha1 Nmero da linha superior
nColuna1 Nmero da coluna superior
nLinha2 Nmero da linha inferior
nColuna2 Nmero da coluna inferior
cTtulo Titulo apresentado na linha superior (opcional)
Comentrios
A clusula TITLE opcional. Se for omitida, o box no ter ttulo.
Exemplo
@ 000, 000 TO 430, 500 DIALOG oDlg TITLE (Tela de browse)
@ 060, 005 TO 185, 245 TITLE Exemplos
@ 070, 010 BUTTON U_Objetos SIZE 70,20 ACTION Execute(BasicObj)
@ 070, 090 BUTTON U_Browses SIZE 70,20 ACTION Execute(Browse)
@ 130, 170 BUTTON U_Dlg c/Refresh SIZE 70,20 ACTION Execute(DlgDinam)
@ 160, 090 BUTTON U_SQL SIZE 70,20 ACTION Execute(SqlDemo)
@ 192,218 BMPBUTTON TYPE 1 ACTION Close(oDlg)
ACTIVATE DIALOG oDlg CENTERED
8.9 - MBROWSE
Tipo: Processamento
Sintaxe
mBrowse(nLinha1, nColuna1, nLinha2, nColuna2, cAlias, aFixe, cCpo, nPar, cCor, n Opc)
Parmetros
nLinha1 Nmero da linha inicial
nColuna1 Nmero da coluna inicial
nLinha2 Nmero da linha final
nColuna2 Nmero da coluna final
cAlias Alias do arquivo
aFixe Array contendo os campos fixos (a serem mostrados em primeiro
lugar no browse)
cCpo Campo a ser tratado. Quando vazio, muda a cor da linha
nPar Parmetro obsoleto
cCor Funo que retorna um valor lgico, muda a cor da linha
nOpc Define qual opo do aRotina que ser utilizada no double click
Exemplo
cCadastro := Cadastro de Orcamentos
aRotina := {{Pesquisar ,AxPesquil ,0,1};
{Incluir
,ExecBlock(DEMOA,.F.),0,3};
{Altera
,ExecBlock(DEMOB)l.,0,4};
{Exclui
,ExecBlock(DEMOC,.F.),0,5}}
MBrowse(6, 1, 22, 75, SA1)
8.10 - MARKBROWSE
Tipo: Processamento
Monta um browse padro do sistema, permitindo marcar e desmacar linhas.
Sintaxe
MarkBrowse(cAlias,cCampo,cCpo,aCampos,lMarc,cMarca,cCtrlM,lBotoes,cTopFun,cBotFun,aCoord)
Parmetros
cAlias lias do arquivo
cCampo Campo que estabelece relao com a culuna de marca
cCpo Campo que se estiver vazio muda a cor da linha
aCampos Array com os campos para montar o browse
lMarc Flag para inicializar marcado ou no
cMarca Marca obtida com a funo Getmark
cCtrlM Funo para ser executada no Alt_M
lBotoes Parmetro obsoleto
cTopFun Funo filtro para estabelecer o primeiro registro
cTopFun Funo filtro para estabelecer o ltimo registro
aCoord Array com as coordenadas da MarkBrowse.
Exemplo
cMarca := GetMark()
cCadastro := Escolher Clientes
aRotina := { { Pesquisa,.AxPesqui,0,1}, ;
{Visualizar,.AxVisual,0,2}}
MarkBrowse(SA1 , A1_OK , SA1->A1_OK , , , cMarca)