Você está na página 1de 41

CIDS Curso Interno para o Desenvolvimento do Suporte

Lgica e Conceitos
Bsicos de Programao
Reviso 2.0

Lgica e Conceitos Bsicos de Programao - 1

CIDS Curso Interno para o Desenvolvimento do Suporte

ndice

1. Definies ........................................................................................................ 03
1.1. Programao e Linguagens ....................................................................... 03
1.2. Componentes do Computador ................................................................... 04
1.3. Outras Definies ...................................................................................... 05

2. Fluxogramas..................................................................................................... 06

3. Lgica ............................................................................................................... 08
3.1. Seqncia do Processo ............................................................................. 08
3.2. Frmulas .................................................................................................... 09
3.3. Tomadas de Deciso com Estrutura de Deciso do tipo Se ( If ) .............. 10
3.4. Repetir um Processo determinadas vezes ( For...To...Next ) .................... 12
3.5. Repetir Processo enquanto a condio for verdadeira ( While...Loop....EndDo) 12

4. Programao .................................................................................................... 14
4.1. Operadores ................................................................................................ 14
4.2. Variveis .................................................................................................... 15
4.3. Comandos e Funes ................................................................................ 16
4.4. Necessidade 1 (ExecBlock( ) ) ................................................................... 16
4.5. Necessidade 2 (Relatrios) ........................................................................ 18

5. Vetor................................................................................................................. 25
5.1. Exemplo de Aplicao de Vetor ................................................................. 27

6. Funes de Usurio ......................................................................................... 29

Anexo A - Comandos e Funes.......................................................................... 32

Lgica e Conceitos Bsicos de Programao - 2

CIDS Curso Interno para o Desenvolvimento do Suporte

1. Definies

1.1. Programao e Linguagens

Programar escrever um conjunto de instrues para que o computador execute uma


determinada tarefa. similar a uma norma de procedimentos. Estas instrues podem
ser interativas ou fazer parte de um programa. Se interativas, a cada comando dado pelo
usurio provoca uma resposta do computador. Se programados escreve-se um rol de
instrues que sero gravadas em um arquivo, as quais sero executadas
posteriormente, ao se chamar o arquivo.

Existem muitas linguagens de programao.

Cada uma delas apresentam as suas

vantagens e so destinadas a rodar em determinados tipos de mquinas, com


determinados Sistemas Operacionais e so adequadas para uma determinada situao.

As linguagens de programao podem ser interpretadas ou compiladas. Quando elas


so interpretadas a converso de cada comando para o cdigo nativo do Hardware feito
no ato de sua execuo. Neste caso o interpretador precisa estar sempre presente na
memria do computador. O dBase III Plus interpretado, assim como o Access.

J o compilador faz a traduo das instrues escritas pelo programador em um processo


autnomo gerando o que se chama de cdigo objeto ou executvel que carregado na
memria quando de sua execuo. A vantagem que neste caso ele roda de forma
independente, sem a necessidade de um interpretador e alm disso seu processamento
muito mais rpido. o caso do Delphi e do Visual C++.

Existem tambm os pr-compiladores que tem como maior objetivo esconder dos
usurios o programa fonte, evitando assim que o mesmo possa alter-lo ou copi-lo, pois
somente o executvel disponibilizado para uso. Neste caso necessita-se do RunTime, que um interpretador sem possibilidade de se desenvolver novas rotinas. Em
alguns casos, ainda, o interpretador embutido no executvel.

o caso do Visual

dBase, Visual Object e Clipper.

De qualquer forma, todas as linguagens de programao so similares. o que se v


Lgica e Conceitos Bsicos de Programao - 3

CIDS Curso Interno para o Desenvolvimento do Suporte

quando se estuda mais detalhadamente cada uma delas.

1.2. Componentes do Computador.

Os computadores tem uma grande capacidade de armazenar dados. Isto feito nos
discos magnticos, ou winchester ou hard-disk.

A memria RAM uma memria utilizada para a operao e processamento dos dados
e no serve para armazenamento dos mesmos. Portanto no confunda a memria RAM
com a memria de massa que o disco magntico. A memria RAM voltil, ou seja,
apaga-se quando se desliga o computador.

Os dados no disco so organizados em arquivos. O disco pode ser dividido em diretrio


(ou pastas) e estes diretrios por sua vez podem ser subdivididos em outros. Desta
forma pode-se armazenar cada tipo de arquivo em determinado diretrio. Pense como
pastas de documentos, onde cada tipo de documento guardado em determinada pasta.
Nesta comparao, as pastas so os diretrios e os documentos so os arquivos.

Os arquivos de dados tambm podem serem chamados de bancos de dados ou Tabelas.


Estes arquivos so compostos de Registros, tambm chamados de Linhas. Os registros,
por sua vez, so compostos de campos, tambm chamados de colunas. Veja o exemplo
a seguir:

00001
00002
00003
00004

Indstria e Comrcio S/A


Fabrica de Bonecos Ltda.
SAEOM Ltda.
Computer S. S/A

So Paulo
S.B. do Campo
So Paulo
Curitiba

SP
SP
SP
PR

011-950-4622
011-444-4444
011-950-1767
041-123-456
Registros
ou Linhas

Campos ou
Colunas

Lgica e Conceitos Bsicos de Programao - 4

CIDS Curso Interno para o Desenvolvimento do Suporte

1.3. Outras Definies:

Informtica: Estudo da informao, cincia que trata da automao das informaes

Dados: Informaes que se insere no computador para serem processadas e obter um


resultado ou apenas para serem armazenadas para uso posterior.

Processamento de Dados: Qualquer atividade que provoque a manipulao de dados


com o objetivo de se obter algum resultado.

Lgica e Conceitos Bsicos de Programao - 5

CIDS Curso Interno para o Desenvolvimento do Suporte

2. Fluxogramas

Fluxogramas ou Diagrama de Fluxo de Dados (DFD) so representaes grficas de


algoritmo, onde formas geomtricas diferentes implicam aes ( instrues e comandos)
distintos.

O algoritmo a seqncia lgica de alguma atividade ou tarefa. Por exemplo veja o


fragmento de algoritmo abaixo:

Armar o despertador
Desligar o despertador
Bocejar
Sacudir a esposa
Sair da Cama
.
.
.

As principais representaes grficas de um fluxograma so:

Incio / Fim

Setas de Direo do fluxo

Processos

Deciso

Impresso

Agora veja o fluxograma:


Lgica e Conceitos Bsicos de Programao - 6

CIDS Curso Interno para o Desenvolvimento do Suporte

Incio

Armar o
despertador

Sim
Resmungar

Esposa
quer $?

No
Desligar o
despertador

Dar-lhe $ 100
Sim
Casado +
5 anos?

Repetir
3 vezes

No
bocejar
Beijar a
esposa
Sacudir a
esposa

Casado +
1 ano?

No
Sair da cama
Beijar a
esposa
Sim
Acender a luz

Est
escuro?

Ir at o carro

No

Voltar para a
cama

Sim
Est frio?

Voltar para
peg-las

No

Est c/ as
chaves?

No
Ir ao banheiro

Tomar caf

Sim
Dirigir-se para
o escritrio

Fim

Lgica e Conceitos Bsicos de Programao - 7

CIDS Curso Interno para o Desenvolvimento do Suporte

3. Lgica

Lgica a cincia que estuda as leis do raciocnio, coerncia e do racional. No mbito da


informtica, lgica um conjunto de tcnicas utilizadas para a resoluo de problemas.

Para se obter uma lgica fundamental:


- Ter bem claro as informaes com que se ir trabalhar;
- Se o problema e/ou processo for grande, deve-se dividi-lo em partes menores;
- Ter bem claro os objetivos e resultados que se deseja obter.

Para a elaborao de um programa deve-se considerar fundamentalmente os itens acima


e ainda trabalhar em etapas:
1 Executar um levantamento geral das tarefas a serem programadas, identificando os
objetivos das mesmas.
2 Analisar estas tarefas e os problemas decorrentes delas.
3 Executar a resoluo lgica destas tarefas e dos problemas.
4 Codificao dos Programas e Documentao Tcnica
5 Depurao/Testes dos programas
6 Reviso e finalizao da documentao.

Note que para a elaborao de um programa necessrio adotar determinadas


ferramentas para o esboo do mesmo, tais como o algoritmo, DFD, etc., dependendo do
grau de complexidade do programa e da experincia e prtica do programador.

Alm disso, deve-se ter bom senso e prtica em lgica, principalmente para identificar a
melhor seqncia de processo, elaborao de frmulas, tomadas de decises, quantas
vezes o processo deve ser repetido, etc.

3.1. Seqncia do Processo

Para identificar a melhor seqncia de um processo, a melhor maneira pensar no


mesmo como um todo, partindo de uma viso macro (superficial mas abrangente) e a
partir da ir detalhando cada etapa, ajustando as seqncias conforme necessrio.

Lgica e Conceitos Bsicos de Programao - 8

CIDS Curso Interno para o Desenvolvimento do Suporte

O algoritmo bem como o Fluxograma auxiliam bastante neste sentido.

3.2. Frmulas

Frmulas so equaes que permitiro processar algumas informaes para obter outras.
Em matemtica, utiliza-se incgnitas e nmeros, sendo que as incgnitas so os valores
desconhecidos e normalmente so tambm as respostas/informaes que se deseja
obter. Os nmeros so as informaes conhecidas. Por exemplo:

Maria comeu duas mas e agora restam 3. Quantas mas existiam antes ?

Maas existentes antes = X mas


Maria comeu = 2 mas
Restam = 3 mas

Frmula: X maas existentes - 2 mas comidas pela Maria = 3 maas


restantes
X-2=3

Resoluo: X - 2 = 3 ;

X=3+2 ; X=5

Outro exemplo:

Na compra de um determinado produto, sabe-se que o valor do mesmo de


R$ 1.000,00, com ICMS de 18% embutido no valor. 1- Qual o Valor do ICMS ?
2 - Qual o valor de custo deste produto ? 3 - Qual a frmula a ser adotada se
quisermos saber somente o custo do produto ?

Questo 1:

ValorICMS = ValorProduto x AlquotaICMS


ValorICMS = 1.000,00 * (18/100)
ValorICMS = 1.000,00 * 0.18
ValorICMS = 180,00

Lgica e Conceitos Bsicos de Programao - 9

CIDS Curso Interno para o Desenvolvimento do Suporte

Questo 2:

CustoProduto = ValorProduto - ValorICMS


CustoProduto = 1.000,00 - 180,00
CustoProduto = 820,00

Questo 3:

CustoProduto = ValorProduto - ValorICMS


como Valor ICMS =

ValorProduto x AliquotaICMS, por

substituio:
CustoProduto = ValorProduto - ( ValorProduto x AliquotaICMS)

3.3. Tomadas de Deciso com estrutura de deciso tipo Se (If)

Como j foi visto, um programa um conjunto de instrues.

Estas instrues so

colocadas de forma linear dentro do arquivo, e sua execuo deve seguir uma certa
lgica. No entanto, determinadas rotinas do programa sero executadas somente se as
condies para sua realizao estiverem satisfeita. Por exemplo: Se for produto de
estoque, alimente o estoque; Se produto importado, calcule o IPI; Se alquota no for
zero, calcule o imposto..

Repare que nas condies existem um Se.


Estrutura de Deciso do tipo SE.

Por isso elas so conhecidas como

Em praticamente todas as linguagens de

programao, este Se representado pelo comando If.

Nesta estrutura de condio ocorrer um resultado verdadeiro ( T do ingls true) ou falso


( F do ingls false ).

Em termos de fluxograma, uma construo do tipo If ser representada como segue


(dentro do quadro pontilhado), onde existem 2 caminhos que podem ser seguidos.

Lgica e Conceitos Bsicos de Programao - 10

CIDS Curso Interno para o Desenvolvimento do Suporte

No

Alquota
=0?

Calcular o
imposto

Sim

( Prximo
processo )

Na estrutura de condio para linguagens como o Clipper, dBase e Rdmake, podero


haver ainda termos como:
ElseIf

- Seno, se...

Else

- Seno, ...

.And.

- ... E ...

.Or.

- ... ou ...

EndIf

- Fim da estrutura If

Por exemplo:

Se o evento for tipo A, desconte R$ 10,00. Seno, o evento for tipo B, desconte R$
20,00. Seno, o evento for tipo C ou tipo D, desconte R$ 30,00. Seno, se o evento for
tipo E e a base for maior que R$ 1.000,00 desconte R$ 40,00. Seno, desconte R$ 50,00
(nenhumas das condies anteriores forem atendidas). - Veja como fica a estrutura do
tipo If:

If evento = A
valor = valor - 10
ElseIf evento = B
valor = valor - 20
ElseIf evento = C .Or. evento = D
valor = valor - 30
ElseIf evento = E .And. base > 1000
valor = valor - 40
Else
valor = valor - 50
EndIf

Note que o termo Seno, se... (ElseIf) indica que as condies anteriores no foram
Lgica e Conceitos Bsicos de Programao - 11

CIDS Curso Interno para o Desenvolvimento do Suporte

atendidas e que para o prximo processo ainda existe outra anlise. J o tempo Seno
(Else) indica que as condies anteriores no foram atendidas e que para o prximo
processo no ser necessria mais nenhuma anlise, ou seja, eqivale a Se nenhuma
das condies anteriores forem atendidas, execute isto.

3.4. Repetir um processo determinadas vezes (For...TO...Next)

Analise o exemplo: A cada 10 notas fiscais, exiba o total acumulado

Este exemplo atendido num programa pela estrutura For...TO...Next, onde For
determina a variao de um contador, To indica quantas vezes o contador ser variado e
Next indica fim da estrutura:

For contador = 1 To 10
SubTotal = SubTotal + valorNF
Next

3.5. Repetir um processo enquanto uma condio for verdadeira, ou Looping ou


Loop (While...Loop...Exit...EndDo)

A estrutura do tipo While...Loop...Exit...EndDo, possui ocorrncias, onde While (do


ingls enquanto) indica a condio faa enquanto..., Exit (do ingls sair) indica sair
da estrutura, Loop (do ingls volta) indica voltar ao inicio da estrutura e EndDo indica
fim da estrutura.
No exemplo: Enquanto houver estoque de MP, execute a produo. a estrutura ser:

While estoqueMP > 0


.
.
.
(processo de produo)
.
.
.
EndDo

Incrementando o exemplo: Enquanto houver estoque de MP, execute a produo. Porm


Lgica e Conceitos Bsicos de Programao - 12

CIDS Curso Interno para o Desenvolvimento do Suporte

a cada 10 PA, de uma pausa de 10 minutos para depois reiniciar o processo a estrutura
ser:

ContadorDePA = 0
While estoqueMP > 0
ContadorDePA = ContadorDePA + 1
If ContadorDePA > 10
(dar uma pausa de 10 minustos)
(ContadorDePA = 0)
Loop
EndIf
.
.
.
(processo de produo)
.
.
.
EndDo

Note que foi utilizado tambm a estrutura do tipo If dentro do Loop.

Completando o exemplo: Enquanto houver estoque de MP, execute a produo. Porm


a cada 10 PA, de uma pausa de 10 minutos para depois continuar e se for mais de 18:00
H, interrompa a produo. a estrutura ser:

ContadorDePA = 0
While estoqueMP > 0
ContadorDePA = ContadorDePA + 1
If ContadorDePA > 10
(dar uma pausa de 10 minustos)
(ContadorDePA = 0)
Loop
EndIf
If hora atual > 18:00
Exit
EndIf
.
.
.
(processo de produo)
.
.
.
EndDo

Lgica e Conceitos Bsicos de Programao - 13

CIDS Curso Interno para o Desenvolvimento do Suporte

4. Programao

Nesta etapa do curso iremos desenvolver alguns programas com o objetivo de treinar a
Lgica que o principal fundamento para tal tarefa. Os programas sero feitos pelo
RDMAKE, que compilador utilizado nas customizaes do Siga Advanced.

Como o objetivo apenas o treinamento da Lgica, sero visto somente alguns


comandos bsicos do RDMAKE, sendo que demais comandos e conhecimentos
necessrios para operar neste compilador sero visto no curso de RDMAKE.

Para os exerccios, utilize o SigaFat, e crie uma base de dados para teste conforme
segue:
Cadastre 3 vendedores
Cadastre 4 cliente no estado de SP
Cadastre 3 clientes em outros estados
Cadastre 3 produtos acabados
Cadastre 3 bancos, com os cdigos 341, 237 e 033
Cadastre o TES equivalente a Venda de Produto
Cadastre 10 Pedidos de Vendas, variando os clientes, vendedores 1 e os produtos. Em
cada Nota Fiscal, utilize o mesmo TES nos seus respectivos itens.
Gere as respectivas Notas Fiscais ( 1 NF para cada Pedido)

4.1. Operadores

Operadores so sinais para determinadas anlises e processos. Os operadores abaixo


so utilizados no RDMAKE:
>

maior que

<

menor que

>=

maior ou igual

==

exatamente igual

:=

atribuio

adicionar

diminuir

multiplicar

dividir

<=

menor ou igual

No utilize os operadores ++, --, +=, -=, etc., pois no so reconhecidos pelo RDMAKE.
4.2. Variveis
Lgica e Conceitos Bsicos de Programao - 14

CIDS Curso Interno para o Desenvolvimento do Suporte

Variveis so dados incgnitos que variam durante um processo, ou ainda sero as


respostas que se deseja obter aps a execuo do processo Elas podem ser do tipo
Numrica, Caracter, Data, Lgica, etc.

Variveis tipo Numrica so utilizadas para nmeros que sofrero variaes matemticas
e devem ser representadas com um n minsculo no incio. Os valores so escrito sem a
utilizao de delimitadores. Por exemplo:

nValor := 1000

Variveis tipo Caracter so utilizadas para letras, nmeros e outros smbolos. Devem ser
representadas por um c minsculo no incio. Seus valores so escritos utilizando aspas
como delimitador. Por exemplo:

cNome := Microsiga
cCEP := 02511-000

Variveis tipo Data so utilizadas para representar datas. Devem ser representadas por
um d minsculo no incio. Seus valores so escritos com a funo CTOD( ). Por
exemplo:

dVend := CTOD(01/10/97)

Variveis tipo Lgica so utilizadas para representar o Verdadeiro ou Falso. Devem ser
representadas por um l minsculo no incio. Seus valores so escritos utilizando o
ponto como delimitador e podem ser apenas .T. (true = verdadeiro) ou .F. (false = falso).
Por exemplo:

lFimArq := .F.

Lgica e Conceitos Bsicos de Programao - 15

CIDS Curso Interno para o Desenvolvimento do Suporte

4.3. Comandos e Funes

Comandos so instrues para o processo, como o IF

e o While.

Funes so

parecidas com o comando, servem para a execuo de um processo, porm podem


opcionalmente

aceitar

um

parmetro

(dado

para

processar)

iro

retornar

obrigatoriamente um resultado. Elas podem ser internas (prpria do RDMAKE ou do


Clipper, por exemplo) ou do usurio (criadas pelo prprio programador).

Por exemplo, a funo CTOD(

) uma funo interna, que aceita uma expresso

caractere com formato de data e retorna a expresso convertida para data.

Os comandos e funes no RDMAKE so idnticos ao do Clipper 5.2/5.3.

Porm,

algumas funes prprias do RDMAKE substituem as funes padro do Clipper. Isto


porque elas contemplam estruturas e fluxos utilizados pelo Siga Advanced.

As funes prprias do RDMAKE esto descritas no Manual do Siga Advanced Apontamentos Tcnicos. Deve-se, obrigatoriamente dar preferncias a elas. Entre as
funes do Clipper e os comandos do Clipper que possuem o mesmo objetivo, deve-se
tambm dar preferncia para as funes. Por exemplo:

Para travamento de registro de banco de dados:

do RDMAKE: RecLock( ) do Clipper: Rlock( )

utilizar a RecLock( )

Para localizar registro no banco de dados:

do Clipper: dbSeek( ) e Seek

utilizar o dbSeek( )

4.4. Necessidade 1 ( ExecBlock( ) )

A empresa exemplo necessita que se controle os bancos informados nos Pedidos de


Vendas. Os bancos atualmente permitidos so: 341, 237 e 033.
Lgica e Conceitos Bsicos de Programao - 16

CIDS Curso Interno para o Desenvolvimento do Suporte

Com base num dos fundamentos da lgica (Ter bem claro as informaes com que se ir
trabalhar), constatou-se que o banco informado no Pedido de Venda o banco de
cobrana e que os clientes da Empresa Exemplo escolhem em qual banco preferem a
cobrana. Porm a Empresa Exemplo possui conta de cobrana somente nos bancos
Ita (cd.341), Bradesco (237) e Banespa (033) e por isso que ela deseja este controle.

Deve-se, no entanto, criar este controle de forma que, caso a Empresa Exemplo abra
uma conta em outro banco ou feche algum banco utilizado atualmente, tenha uma
maneira fcil de atualizar o controle sem que haja necessidade de alterao do programa.

Portanto crie um parmetro no qual possa se informar os bancos permitidos. Utilize o


configurador para isto e monte o parmetro conforme abaixo:
MV_BCOCOB
Autor: Lus Andr Baltarejo
Descrio: Bancos que sero utilizados no faturamento. Devem
Cont.Desc.: ser cadastrados com /entre os cdigos
Cont.Desc.:

Data: 01/10/97
Contedo: 341/237/033
Mds.: SigaFat

Agora crie um gatilho conforme segue:


C5_BANCO
Autor: Lus Andr Baltarejo
Data: 13/11/96
Seq.: 001
Tipo: P Regra: ExecBlock("Emp001",.F.,.F.)
Posic.: N
Alias:
Ordem:
Chave:
Objetivo: Valida banco no Pedido de Venda, conforme o parmetro MV_BCOCOB
Observ.:

Por fim, crie o programa Emp001.PRG.

Cnt.Dom.: C5_BANCO

Os comandos e funes utilizados neste

programa podem ser visto no anexo A-Comandos e Funes.

O programa exemplo desta necessidade conforme segue:


Lgica e Conceitos Bsicos de Programao - 17

CIDS Curso Interno para o Desenvolvimento do Suporte


/*/
+-----------------------------------------------------------------------+
Funo
EMP001
Autor Luis Andre Baltarejo Data 01.10.97
+----------+------------------------------------------------------------
Descrio Valida banco no Pedido de Venda

+----------+------------------------------------------------------------
Argumentos Verifica parmetro MV_BCOCOB

+----------+------------------------------------------------------------
Observacao

+----------+------------------------------------------------------------
Retorna
M->C5-BANCO

+----------+------------------------------------------------------------
Uso
Valid.Usurio em C5_BANCO-Espec.CIDs

+----------+------------------------------------------------------------
Revisoes Autor
Luis Andre Baltarejo
Data 01.10.97

+------------------------------------------------------------

Projeto Original

+-----------------------------------------------------------------------+
/*/
Documentao inicial
do programa.
//===============================================//
// Salva Integridade dados de entrada
//
//===============================================//
cSvAlias := Alias()
nSvRecno := Recno()
nSvIndex := IndexOrd()

Armazenar a posio e rea atual relativa aos bancos


de dados para no danificar o processamento normal
da rotina de Pedido de Vendas.

//===============================================//
// Inicializa Variaveis
//
//===============================================//
lRetBco := .F.
cBcoCob := AllTrim(GetMv("MV_BCOCOB"))
//===============================================//
// Valida o banco
//
//===============================================//
If !( AllTrim(M->C5_BANCO)$ cBcoCob)
Help(,1,"BCOCOBNEXI",,,10,10)
M->C5-BANCO:=SPACE(LEN(C5-BANCO))
EndIf

Funo de Help. Utilize-a sempre que precisar


testar uma situao, permitindo que o usurio
possa entender as crticas, sem precisar solicitar
suporte
//===============================================//
// Restaura integridade da entrada
//
//===============================================//
DbSelectArea(cSvAlias)
DbSetOrder(nSvIndex)
DbGoTo(nSvRecno)
__Return(M->C5-BANCO)

No esquecer nunca de voltar a situao original


quanto aos bancos de dados para no prejudicar o
processamento normal da rotina.

Teste o programa e aproveite para atualizar o help.

4.5. Necessidade 2 (Relatrio)

A Empresa Exemplo necessita de um relatrio com Lay-Out e informaes conforme o


modelo seguinte, sendo que todas os valores devem ser totalizados no final do relatrio.
Lgica e Conceitos Bsicos de Programao - 18

CIDS Curso Interno para o Desenvolvimento do Suporte

No levantamento, constatou-se que a Empresa Exemplo emite Notas Fiscais com


natureza e tratamentos dos impostos e duplicatas sempre iguais para os respectivos itens
da NF (situao que quase nunca condiz com a realidade do dia-a-dia na realidade).
Portanto o TES de um item o mesmo para os demais, dentro da mesma Nota Fiscal.

Lay-Out do relatrio:

N.F.

Pedido Cliente

Vendedor

Valor

at

at

+de

Total

1000

2000

2000

XXXXXX XXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX 9.999,99 9.999,99 9.999,99 9.999,99


0

012345678901234567890123456789012345678901234567890123456789012345678901234567890

Obtendo-se todas as informaes necessrias, antes de iniciar a programao, veremos


que Valor Total que a Empresa Exemplo deseja o valor bruto de vendas (contido em
SF2->F2_VALBRUT); o campo at 1000 corresponde aos faturamentos at R$ 1000,00;
e assim por diante nos campos at 2000 e +de 2000.

Observar tambm que somente as Notas Fiscais de Vendas devem ser consideradas
para o relatrio, o que pode ser controlado pelo TES.

O programa exemplo desta necessidade conforme segue:


/*/
+-----------------------------------------------------------------------+
Funo
EMP002
Autor Luis Andre Baltarejo Data 01.10.97
+----------+------------------------------------------------------------
Descrio Relatorio Estatistico de Faturamento de Venda

+----------+------------------------------------------------------------
Argumentos Relacionar as NF de Vendas c/ colunas estat.de valores

+----------+------------------------------------------------------------
Observacao

+----------+------------------------------------------------------------
Retorna
Nada

+----------+------------------------------------------------------------
Uso
Especifico CID's - SigaFat

+----------+------------------------------------------------------------
Revisoes Autor
Luis Andre Baltarejo
Data 01.10.97

+------------------------------------------------------------

Projeto Original

+-----------------------------------------------------------------------+
necessario:
-alimentar arquivo perg/respostas
/*/
#define K_ALT_A
#define K_ESC

286
27

// Alt-A
// Esc

Lgica e Conceitos Bsicos de Programao - 19

CIDS Curso Interno para o Desenvolvimento do Suporte


#define VLR

"@E 9,999.99"

// pict para valores

//+--------------------------------------------------------------+
// Salva a Integrigade dos dados de entrada

//+--------------------------------------------------------------+
cSavScr1
cSavCur1
cSavRow1
cSavCol1
cSavCor1

:=
:=
:=
:=
:=

SaveScreen(3,0,24,79)
SetCursor()
Row()
Col()
SetColor("bg+/b,,,")

//+--------------------------------------------------------------+
// Define Variaveis

//+--------------------------------------------------------------+
Tamanho
limite
Titulo
cDesc1
cDesc2
cDesc3
cString
aReturn
nomeprog
nLastKey
cPerg
CbCont
Cbtxt
nLin
m_pag
wnrel
cSavScr1
nSF2
cArqInd
cChave
cFiltro
nTotFat
nT1000
nT2000
nTmais

:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=
:=

"M"
80
"Relatorio Estatistico Faturamento de Vendas"
"Este programa emite relacao das Notas Fiscais de vendas dentro do"
"periodo selecionado, descrevendo por valores ate 1000,00, 2.000,00"
"e mais de 2.000,00.
"
"
"
{ "80 Colunas", 1,"Administracao", 2, 2, 1, "", ""}
"EMP002"
0
"EMP002"
0
''
80
// contador de linha
1
"EMP002"
SaveScreen(3,0,24,79)
0
// numero de indices do SF2
""
// nome do arquivo de indice temporario
""
// chave do indice temporario
""
// filtro do indice temporario
0
// total faturado
0
// total ate 1.000
0
// total ate 2.000
0
// total mais de 2.000

//+--------------------------------------------------------------+
// Variaveis utilizadas para parametros

// mv_par01
Data Emis.NF de
?

// mv_par02
Data Emis.NF ate
?

//+--------------------------------------------------------------+
Pergunte(cPerg,.f.)
//+--------------------------------------------------------------+
// Envia controle para a funcao SETPRINT

//+--------------------------------------------------------------+
wnrel:=SetPrint(cString,wnrel,cPerg,Titulo,cDesc1,cDesc2,cDesc3,.F.,,.T.,"P",.F.,.F.)
If ( Lastkey() == K_ESC ) .Or. ( nLastKey == K_ESC )
//+--------------------------------------------------------------+
// Recupera a Integridade dos dados

//+--------------------------------------------------------------+
RestScreen(3,0,24,79,cSavScr1)
SetCursor(cSavCur1)
DevPos(cSavRow1,cSavCol1)
SetColor(cSavCor1)
Return
Endif
Lgica e Conceitos Bsicos de Programao - 20

CIDS Curso Interno para o Desenvolvimento do Suporte


SetDefault(aReturn,cString)
If ( Lastkey() == K_ESC ) .Or. ( nLastKey == K_ESC )
//+--------------------------------------------------------------+
// Recupera a Integridade dos dados

//+--------------------------------------------------------------+
RestScreen(3,0,24,79,cSavScr1)
SetCursor(cSavCur1)
DevPos(cSavRow1,cSavCol1)
SetColor(cSavCor1)
Return
Endif
//+-------------------------------------------------------------+
// Cabecalhos

//+-------------------------------------------------------------+
Cabec1 := "Valor
at
at
+de"
Cabec2 := "N.F. Pedido Cliente
Vendedor
Total
1000
2000
2000"
//
XXXXXX XXXXXX XXXXXXXXXXXXXXX XXXXXXXXXXXXXXX 9.999,99 9.999,99 9.999,99 9.999,99
//
0
1
2
3
4
5
6
7
8
//
012345678901234567890123456789012345678901234567890123456789012345678901234567890
Rgua do cabealho,
de uso padro na
//+--------------------------------------------------------------+ Microsiga.
// Verifica Caracter de Compactacao

//+--------------------------------------------------------------+
nComp

:= Iif(aReturn [4] == 1,GetMv("MV_COMP"),GetMv("MV_NORM"))

//+--------------------------------------------------------------+
// Posiciona indices

//+--------------------------------------------------------------+
dbSelectArea("SA1")
dbSetOrder(1)

// Cadastro de Clientes
// - p/ Filial+Cod

dbSelectArea("SA3")
dbSetOrder(1)

// Cadastro de Vendedores
// - p/ Filial+Cod

dbSelectArea("SF4")
dbSetOrder(1)

// Cadastro de TES
// - p/ Filial+CodTES

dbSelectArea("SD2")
dbSetOrder(3)

// Itens da NF Saida
// - p/ Filial+Doc+Serie+Cliente+Loja+Cod

//+--------------------------------------------------------------+
// Cria indice temporario

//+--------------------------------------------------------------+
dbSelectArea("SF2")
dbSetOrder(1)
cArqInd := CriaTrab(,.F.)
cChave := "SF2->F2_FILIAL + DTOC(SF2->F2_EMISSAO)"
cFiltro := 'SF2->F2_FILIAL
== "' + xFilial("SF2") + '" .And. '+;
'DTOS(SF2->F2_EMISSAO) >= "' + DTOS(mv_par01) + '" .And. '+;
'DTOS(SF2->F2_EMISSAO) <= "' + DTOS(mv_par02) + '"'
IndRegua("SF2",cArqInd,cChave,,cFiltro,"Selecionando Registros...")
nSF2
:= RetIndex("SF2")
DbSelectArea("SF2")
DbSetIndex(cArqInd)
DbSetOrder(nSF2+1)
//+--------------------------------------------------------------+
// Impressao - ate o final do arquivo SF2

Lgica e Conceitos Bsicos de Programao - 21

CIDS Curso Interno para o Desenvolvimento do Suporte


//+--------------------------------------------------------------+
dbGoTop()
SetRegua( LastRec() )
While !EOF()
IncRegua()
If ( LastKey() == K_ALT_A ) .Or. ( Inkey() == K_ALT_A )
@ Prow()+1, 001 Say "C a n c e l a d o
P e l o O p e r a d o r"
Exit
EndIf
//+--------------------------------------------------------------+
// Posiciona Cliente, Vendedor, Itens da NF e TES

//+--------------------------------------------------------------+
dbSelectArea("SA1")
dbSeek( xFilial() + SF2->F2_CLIENTE )

// Cadastro de Clientes

dbSelectArea("SA3")
dbSeek( xFilial() + SF2->F2_VEND1 )

// Cadastro de Vendedores

dbSelectArea("SD2")
// Itens Pedido Venda
dbSeek( xFilial() + SF2->F2_DOC + SF2->F2_SERIE )
dbSelectArea("SF4")
dbSeek( xFilial() + SD2->D2_TES )

// Cadastro de TES

//+--------------------------------------------------------------+
// Verif.se TES gera duplicata

//+--------------------------------------------------------------+
IF SF4->F4_DUPLIC <> "S"
dbSelectArea("SF2")
dbSkip()
Loop
EndIf
//+--------------------------------------------------------------+
// Cabecalho da listagem

//+--------------------------------------------------------------+
If nLin > 56
nLin:=Cabec(titulo,cabec1,cabec2,nomeprog,Tamanho,nComp)+1
EndIf
//+--------------------------------------------------------------+
// Imprime dados

//+--------------------------------------------------------------+
@
@
@
@
@

nLin,000
nLin,007
nLin,014
nLin,030
nLin,046

Say
Say
Say
Say
Say

SF2->F2_DOC
SD2->D2_PEDIDO
SubStr(SA1->A1_NREDUZ,1,15)
SubStr(SA3->A3_NREDUZ,1,15)
SF2->F2_VALBRUT Pict VLR

If SF2->F2_VALBRUT <= 1000


@ nLin,055 Say SF2->F2_VALBRUT Pict VLR
Else
@ nLin,055 Say 0 Pict VLR
EndIf
If SF2->F2_VALBRUT > 1000 .And. SF2->F2_VALBRUT <= 2000
@ nLin,064 Say SF2->F2_VALBRUT Pict VLR
Else
@ nLin,064 Say 0 Pict VLR
EndIf
Lgica e Conceitos Bsicos de Programao - 22

CIDS Curso Interno para o Desenvolvimento do Suporte


If SF2->F2_VALBRUT > 2000
@ nLin,073 Say SF2->F2_VALBRUT Pict VLR
Else
@ nLin,073 Say 0 Pict VLR
EndIf
//+--------------------------------------------------------------+
// Totalizacoes

//+--------------------------------------------------------------+
nTotFat := nTotFat + SF2->F2_VALBRUT
If SF2->F2_VALBRUT <= 1000
nT1000 := nT1000 + SF2->F2_VALBRUT
EndIf
If SF2->F2_VALBRUT > 1000 .And. SF2->F2_VALBRUT <= 2000
nT2000 := nT2000 + SF2->F2_VALBRUT
EndIf
If SF2->F2_VALBRUT > 2000
nTmais := nTmais + SF2->F2_VALBRUT
EndIf
dbSelectArea("SF2")
dbSkip()
nLin:=nLin+1
EndDo
@
@
@
@
@

nLin,000
nLin,046
nLin,055
nLin,064
nLin,073

Say
Say
Say
Say
Say

"Total Geral
nTotFat Pict
nT1000 Pict
nT2000 Pict
nTmais Pict

"
VLR
VLR
VLR
VLR

//+--------------------------------------------------------------+
// Impressao do rodape

//+--------------------------------------------------------------+
Roda(cbcont,cbtxt,Tamanho)
//+--------------------------------------------------------------+
// Se impressao em disco, chama Spool

//+--------------------------------------------------------------+
Set Device to Screen
If ( aReturn[5] == 1 )
Set Printer TO
DbCommitAll()
OurSpool(wnrel)
EndIf
//+--------------------------------------------------------------+
// Libera relatorio para Spool da Rede

//+--------------------------------------------------------------+
Ft_Pflush()
//+--------------------------------------------------------------+
// Apaga indice temporario

//+--------------------------------------------------------------+
DbSelectArea("SF2")
RetIndex("SF2")
DbSetOrder(1)
If !Empty(cArqInd)
Ferase(cArqInd+OrdBagExt())
EndIf
Lgica e Conceitos Bsicos de Programao - 23

CIDS Curso Interno para o Desenvolvimento do Suporte


dbSelectArea("SF2")
dbSetOrder(1)
//+--------------------------------------------------------------+
// Recupera a Integridade dos dados

//+--------------------------------------------------------------+
RestScreen(3,0,24,79,cSavScr1)
SetCursor(cSavCur1)
DevPos(cSavRow1,cSavCol1)
SetColor(cSavCor1)
__Return()

Cadastre as perguntas no arquivo de Perguntas e Respostas (SX1), acrescente o


relatrio no menu do SigaFat e teste o mesmo.

Lgica e Conceitos Bsicos de Programao - 24

CIDS Curso Interno para o Desenvolvimento do Suporte

5. Vetor

Vetor ( Array ou Matriz) um tipo de varivel de memria que permite armazenar um


conjunto de dados.

Assemelha-se s clulas de uma planilha eletrnica.

A grande

vantagem a velocidade pois os dados esto em memria e a economia do cdigo de


programao.

Um vetor pode ser unidimensional ou multidimensional. Porm, como o vetor uma


varivel de memria, seu tamanho limitado.

Para facilitar o seu entendimento, veja a representao matemtica abaixo de uma


matriz:

Matriz =

linhas

colunas

Cada letra da Matriz chamado de elemento da matriz. Para identificar um elemento,


utiliza-se o nmero da linha e o numero da coluna. Onde houver o cruzamento da linha e
da coluna estar o elemento a ser identificado.

Por exemplo:

Para identificarmos a letra k dentro desta matriz, utilizamos Matriz[2,3] = k , sendo que o
n 2 representa a 2 linha, e o nmero 3 representa a 3 coluna.

Para sabermos o valor de Matriz[3,2], verifica-se o cruzamento da linha 2 com a coluna


3. Encontramos, portanto a letra x.

Lgica e Conceitos Bsicos de Programao - 25

CIDS Curso Interno para o Desenvolvimento do Suporte

Num programa, como exemplo, um vetor pode conter o cdigo de um cliente, a razo
social e a cidade. Veja o exemplo, comparando-se uma matriz matemtica com o vetor
de programao:

Matriz = [ 0001 MICROSIGA SAO PAULO 1000,00 01/10/97 ]

aVetor1 := 0001, MICROSIGA, SAO PAULO, 1000,00, 01/10/97

No exemplo, o vetor aVetor1 possui cinco dados. Cada dado um elemento do vetor.
Este vetor unidimensional (pois possui apenas uma linha). Note que os elementos do
vetor podem ser de qualquer tipo, ou seja, caracter, numrico, data, etc.

A varivel tipo vetor representada por um a minsculo no incio. Seus valores so


escritos utilizando as chaves como delimitador, sendo que os valores contido dentro do
vetor devem respeitar os delimitadores do tipo de dado respectivo. Para identificar os
elementos, utiliza-se colchetes com o numero da posio do elemento.

Portanto, a maneira correta de escrever o aVetor1 mostrado anteriormente :

aVetor1 := { 0001, MICROSIGA, SAO PAULO, 1000,00, CTOD(01/10/97) }

onde,

aVetor1[1] := 0001
aVetor1[2] := MICROSIGA
aVetor1[3] := SAO PAULO
aVetor1[4] := 1000
aVetor1[5] := CTOD(01/10/97)

Pode-se colocar dentro de um vetor, outros vetores. Neste caso eles so chamados de
multidimensional. Por exemplo:
aVetor2 :={{0001 ,MICROSIGA ,SAO PAULO ,1000 ,CTOD(01/10/97)} ;
{0002 ,CTP ,SAO PAULO ,980 ,CTOD(02/10/97)} ;
Lgica e Conceitos Bsicos de Programao - 26

CIDS Curso Interno para o Desenvolvimento do Suporte

{0003 ,MICROSOFT ,SAO PAULO,870 ,CTOD(03/10/97)}}


onde, (note que a representao aVetor[ nLin, nCol ], como numa matriz matemtica )

aVetor2[1,1] := 0001
aVetor2[1,2] := MICROSIGA
aVetor2[1,3] := SAO PAULO
aVetor2[1,4] := 1000
aVetor2[1,5] := CTOD(01/10/97)
aVetor2[2,1] := 0002
aVetor2[2,2] := CTP

aVetor2[2,3] := SAO PAULO


aVetor2[2,4] := 980

e assim por diante.

Neste ltimo exemplo, o vetor conhecido tambm como bidimensional, ou seja, possui
duas dimenses. Com trs dimenses ele tridimensional e assim por diante, porm sua
utilizao comea a ficar complexa e de difcil assimilao. Sendo assim e considerandose ainda que ele possui tamanho limitado evite vetores com mais de duas dimenses.

5.1. Exemplo de aplicao de Vetor

Um exemplo tpico de aplicao de vetor, como segue abaixo:

A empresa exemplo precisa de um relatrio com os dados dos seus vendedores e o


valor faturado num determinado perodo. Foi considerando que a empresa possui poucos
vendedores (atualmente 15) e que praticamente impossvel que sequer duplique seu
quadro de vendas.

Sendo assim, ao invs de utilizarmos um arquivo temporrio para esta rotina, usaremos o
Lgica e Conceitos Bsicos de Programao - 27

CIDS Curso Interno para o Desenvolvimento do Suporte

vetor (lembre-se que a memria muito mais rpida que o acesso em disco).
Este programa ficar prximo ao esquema abaixo:

// criar subvetores para cada registro do cadastro de vendedores


aVend := {}
dbSelectArea(SA3)
dbGoTop()
While !EOF()
AADD( aVend, { SA3->A3_COD, SA3->A3_NOME, 0 } )
dbSkip()
EndDo
// Armazenar valores faturados
mv_par01 := DTOC(01/10/97)
mv_par02 := DTOC(31/10/97)
nElem := 0
dbSelectArea(SF2)
dbGoTop()
While SF2->F2_EMISSAO <= mv_par02
If SF2->F2_EMISSAO < mv_par01
dbSkip()
Loop
EndIf
nElem := AScan( aVend...
aVend[nElem,3] := aVend[nElem,3] + SF2->F2_VALFAT
dbSkip()
EndDo
// impressao
For X:=1 To Len( aVend )
@ nLin,001 Say aVend[X,1]
@ nLin,010 Say aVend[X,2]
@ nLin,060 Sau aVend[X,3]
nLin := nLin + 1
Next

Lgica e Conceitos Bsicos de Programao - 28

CIDS Curso Interno para o Desenvolvimento do Suporte

6. Funes de Usurio

Com o objetivo de atender um dos princpios da Lgica Se o problema e/ou processo for
grande, deve-se dividi-lo em partes menores, foi criado em praticamente todas as
linguagens de programao a Funo de Usurio, ou outro recurso do mesmo gnero,
como procedures.

A Funo de Usurio tem portanto como objetivo fazer com que um programa seja
quebrado em partes menores e/ou permitir que a parte do cdigo que muitas vezes
repetida vrias vezes dentro de um programa, seja substituda pela funo do usurio.

Veja os passos abaixo, necessrio para impresso de uma Nota Fiscal (as linhas entre
parnteses indicam a quantidade de linhas utilizadas na codificao do programa):

Passo 01:

Solicitar N da NF
( 5 linhas )

Passo 02:

Armazenar os dados bsicos da Nota Fiscal em variveis


( 16 linhas )

Passo 03:

Iniciar impressora
( 6 linhas )

Passo 04:

Imprimir cabealho da NF
( 12 linhas )

Passo 05:

Imprimir dados do destinatrio


( 13 linhas )

Passo 06:

Imprimir dados da duplicata


( 28 linhas )

Passo 07:

Imprimir dados dos produtos


( 36 linhas )

Passo 08:

Imprimir dados dos servios


( 31 linhas )

Passo 09:

Calcular impostos e totais da NF


( 44 linhas )

Passo 10:

Imprimir impostos
( 12 linhas )

Passo 11:

Imprimir totais
( 08 linhas )

Lgica e Conceitos Bsicos de Programao - 29

CIDS Curso Interno para o Desenvolvimento do Suporte

Como os passos 06, 07, 08 e 09, por n motivos, so os que demandam a maior
quantidade de cdigos de programao, poderemos quebrar o programa como segue:
// Solicitar N da NF
.
.
.
// Armazenar os dados bsicos da Nota Fiscal em variveis
.
.
.
// Iniciar impressora
.
.
.
// Imprimir cabealho da NF
.
.
.
// Imprimir dados do destinatrio
.
.
.
// Imprimir dados da duplicata
ImpDup( )
// Imprimir dados dos produtos
ImpPrd( )
// Imprimir dados dos servios
ImpSer( )
// Calcular impostos e totais da NF
CalcImp( )
// Imprimir impostos
.
.
.
// Imprimir totais
.
.
.

e criar as funes ImpDup, ImpPrd, ImpSer e CalcImp em seguida, separadamente.

Lgica e Conceitos Bsicos de Programao - 30

CIDS Curso Interno para o Desenvolvimento do Suporte

Agora veja abaixo o esquema para imprimir um relatrio:


.
.
.
While ... (imprimir)
If nLinha > 60
nLinha := 1
.
.
. (comandos para desenhar o cabealho)
.
.
nLin := 5
EndIf
@ nLin,000 Say...
@ nLin,000 Say...
(imprimir dados)
@ nLin,000 Say...
dbSkip( )
nLin := nLin + 1
EndDo
.
.
.

Pode-se isolar os comandos para o cabealho e montar o programa como segue:

.
.
.
While ... (imprimir)
If nLinha > 60
nLin:=Cabec( )
EndIf
@ nLin,000 Say...
@ nLin,000 Say...
(imprimir dados)
@ nLin,000 Say...
dbSkip( )
nLin := nLin + 1
EndDo
.
.
.
Function Cabec( )
nLinha := 1
.
.
. (comandos para desenhar o cabealho)
.
.
nLin := 5
Return

No Siga Advanced, existem muitas funes de usurios disponveis para uso, inclusive
uma para cabealho. As funes permitem que sejam enviadas alguns parmetros ( que
so informados dentro dos parnteses ) e retornam um resultado. Um exemplo disso no
RDMAKE a funo Cabec( ), a qual possui a seguinte sintaxe e retorna a ltima linha
utilizada pelo cabealho:

Lgica e Conceitos Bsicos de Programao - 31

CIDS Curso Interno para o Desenvolvimento do Suporte

nLin := Cabec( cTitulo, cCabec1, cCabec2, cNomPrg, nLargRelat, nCtrImp )

J nas funes criadas pelo programador, como no exemplo, no necessrio enviar


parmetros, pois os dados ficam disponvel o tempo todo dentro do programa RDMAKE
assim que so declaradas, inclusive dentro das funes do mesmo programa.

Lgica e Conceitos Bsicos de Programao - 32

CIDS Curso Interno para o Desenvolvimento do Suporte

Anexo A - Comandos e Funes Utilizados nesta apostila.


Para melhor entender os comandos, foi adotado simbologias que fazem indicaes conforme segue:

Itlico

Indica variveis ou dados que devem ser substitudos por uma expresso ou valor conforme a
necessidade

Negrito

o comando ou funo propriamente dito.

[ ]

Indica que o contedo do colchetes opcional, devendo ser usado somente se o programador
necessitar. Os colchetes no devem ser digitados.

cExp

expresso caractere que deve ser informada pelo programador. Esta expresso deve estar
entre aspas. Por exemplo: SETCOLOR( cExp ) pode ser usada como SETCOLOR( w/n )

nExp

expresso numrica que deve ser informada pelo programador.

lExp

expresso lgica que deve ser informada pelo programador. Esta expresso deve estar entre
pontos.

dExp

expresso em forma de data que deve ser informada pelo programador. Por exemplo: a funo
DAY( dExp ) pode ser usada como DAY( CTOD(01/01/80) ) ou como DAY( dNascim ).

aExp

expresso de vetor que deve ser informada pelo programador.

xExp

expresso de qualquer tipo que deve ser informada pelo usurio. Esta expresso pode ser
tambm uma outra funo, ou ainda vrios argumentos, como condies e comparaes.

nLin

expresso numrica relativa ao n da linha que deve ser informada pelo programador. Quando
ocorrer nLin1,nCol1,nLin2,nCol2 significa que deve-se especificar duas coordenadas para
determinar uma rea retangular. nLin1,nCol1 indicam o canto superior esquerdo e nLin2,nCol2
indicam o canto inferior direito.

nCol

expresso numrica relativa ao n da coluna que deve ser informada pelo programador.

ALIAS

expresso relativa ao nome do Banco de Dados que deve ser informada pelo programador.

#define K_...

nExp

Por ocasio da compilao, toda ocorrencia da expresso K_... ser convertida para a expresso declarada
em nExp. A expresso K_... so as existentes no arquivo inkey.ch.

@ nLin,nCol Say Exp [ Pict cExp ]


Exibe a expresso Exp na coordenada especificada.
expresso (veja o comando Pict ).

O comando Pict permite usar uma mscara na

@ nLin,nCol Get Var [ Pict cExp ] [ When lExp ] [ Valid lExp ]


Permite que o usurio informe o dado em tela na coordenada especificada. O dado informado pelo usurio
ser armazenado na varivel. O comando Pict permite usar uma mscara na expresso (veja o comando
Pict ). O comando When permite configurar se o Get deve ser realmente ativo (veja o comando When ).
O comando Valid permite verificar se o dado informado pelo usurio vlido ou no (veja o comando Valid
).
Lgica e Conceitos Bsicos de Programao - 33

CIDS Curso Interno para o Desenvolvimento do Suporte

Para ativar um ou vrios comandos Get deve-se usar o comando Read

PCol()
Retorna o nmero da coluna em que a cabea de impresso da impressora est posicionada. Veja tambm
a funo PRow().

PRow()
Retorna o nmero da linha em que a cabea de impresso da impressora est posicionada. Veja tambm a
funo PCol().

__Return( [Exp] )
Encerra uma funo/programa, retornando o valor especificado em Exp. Veja tambm o
comando Return.
AAdd( aExp1, Exp2 )
Adiciona um dado em um vetor. aExp1 deve ser substituda pelo vetor que receber o dado. Exp2 o dado
que ser adicionado no vetor, que pode ser qualquer tipo de dado.
Alias( [ nExp ] )
Retorna o Alias do banco de dados que estiver aberto na rea especificada por nExp. Se no for usado
nExp, ser retornado o Alias da rea atual.
AllTrim( cExp )
Elimina os espaos em branco no incio e no fim da expresso cExp. Veja tambm as funes LTrim() e
RTrim().
AScan( aExp1, Exp2, [ nExp3 ] , [ nExp4 ] )
Pesquisa no vetor especificado em aExp1 a existncia do dado especificado em Exp2, retornando o nmero
do elemento ou zero se o dado no for encontrado. nExp3 indica por qual elemento deve-se iniciar a
pesquisa; se no for especificado ser considerado o primeiro elemento do vetor. nExp4 indica quantos
elementos devem ser pesquisados; se no for especificado, ser considerado todos os elementos do vetor.
BOF()
Verifica se o ponteiro do banco de dados da rea atual esta no incio do arquivo. Se estiver, a funo
retornar .T., caso contrrio retornar .F.. BOF significa begin of file, ou seja, incio do arquivo.
Cabec( cExp1, cExp2, cExp3, cExp4, nExp5, nExp6 )
Monta o cabealho de listagem padro do Siga Advanced e retorna a ltima linha utilizada. Os parmetros
desta funo so:
cExp1 Ttulo da Listagem
cExp2 Primeira linha dos ttulos das colunas do cabealho
cExp3 Segunda linha dos ttulos das colunas do cabealho
cExp4 Nome do Programa (ou do ExecBlock)
cExp5 Largura da Listagem
cExp6 Caractere de controle da impressora
Lgica e Conceitos Bsicos de Programao - 34

CIDS Curso Interno para o Desenvolvimento do Suporte


Cls

ou

Clear Screen

Limpa toda a tela.


Col()
Retorna a coluna atual do cursor na tela. Esta funo muito usada com a funo Row().
CriaTrab( [ aExp ], lExp )
Cria um arquivo de banco de dados temporrio retornando um nome para ele, ou simplesmente retorna um
nome para um arquivo qualquer. Para criar um arquivo de banco de dados deve-se informar a expresso
aExp que um vetor multidimensional com as estruturas dos campos ( a coluna 1 o nome do campo, a
coluna 2 o tipo, a coluna 3 o tamanho e a coluna 4 as casas decimais) e a expresso lExp deve ser .T. Para
se obter apenas um nome no informe aExp e lExp deve ser .F.
CTOD( cExp )
Converte o formato caractere da expresso especificada para o formato data. A expresso caractere que
deve ser informada deve estar montada como se fosse uma data, por exemplo: CTOD( 01/01/90 ), CTOD(
1/1/1990 ), CTOD( SPACE(8) ).
dbGoBottom()
Move o ponteiro do banco de dados da rea atual para o ltimo registro, respeitando o ndice ativo se
houver.
dbGoTo( nExp )
Move o ponteiro do banco de dados da rea atual para o registro cujo numero interno o especificado em
nExp. O nmero interno corresponde a posio seqencial que o registro foi includo no banco de dados.
Os ndices no tem ao sobre este numero interno.
dbGoTop()
Move o ponteiro do banco de dados da rea atual para o primeiro registro, respeitando o ndice ativo se
houver.
dbSeek( Exp )
Pesquisa todo o banco de dados posicionando o ponteiro no primeiro registro cujo valor seja igual a
expresso especificada. Este comando s funciona em bancos de dados abertos e com o ndice ativo. Ele
executa a pesquisa tambm somente no campo chave, ou seja, aquele que determina a seqncia do ndice
ativo. Esta funo retorna .T. se o registro foi localizado ou .F. se o registro no foi localizado. Caso o
registro no foi localizado, o ponteiro do banco de dados ser posicionado no fim do arquivo, ou seja, na
posio EOF (vide o comando EOF() )
dbSelectArea( cExp )
A rea em que estiver o banco de dados especificado em cExp ser a rea atual. cExp dever ser o ALIAS
do banco de dados.
dbSetIndex( cExp )
Abre o ndice especificado em cExp na rea atual, tornando-o o ndice ativo.

Lgica e Conceitos Bsicos de Programao - 35

CIDS Curso Interno para o Desenvolvimento do Suporte


dbSetOrder( nExp )
Determina qual ndice deve estar ativo na rea atual. Um banco de dados pode ter vrios ndices e todos
podem estar abertos simultaneamente. Porm somente um ndice estar ativo por vez. Para determinar o
ndice ativo o seu nmero deve ser especificado em nExp. O nmero do ndice depende de quando ele foi
aberto. O primeiro ndice aberto na rea atual ser o ndice 1; o segundo ndice aberto na rea atual ser o
2; e assim por diante.
dbSkip( [ nExp ] )
Move o ponteiro do banco de dados nExp para frente ou para traz. Se nExp no for especificado, ser
movido 1 registro para frente. Se nExp for um nmero negativo, o ponteiro ser movido para traz.
DevPos( nLin,nCol )
Movimenta a cabea de impresso para a posio especificada.
DTOC( dExp )
Converte a data especificada em formado caractere. D preferncia para a funo DTOS( )
DTOS( dExp )
Retorna a data especificada no formato aaaammdd. Esse formato til quando necessita-se criar uma
chave de ndice cujo contedo uma data junto com caracteres.
Empty( Var )
Verifica se a varivel especificada possui algum valor ou no. Se a varivel possuir valor, ser retornado .T.,
se no possuir ser retornado .F. A varivel pode ser de qualquer tipo, inclusive campo de banco de dados.
EOF()
Verifica se o ponteiro do banco de dados est no fim do arquivo ou no. Se estiver ser retornado .T., se
no estiver ser retornado .F. EOF significa end of file, ou seja, fim do arquivo.
Exit
Interrompe o loop While ... EndDo, sendo que o processamento ser continuado a partir da linha seguinte
ao comando EndDo. (veja o comando While).
FErase( cExp )
Apaga o arquivo especificado em cExp do disco.
For Var := nExp1 To nExp2 [ Step nExp3 ] ... Next
Provoca um loop (execuo de um grupo de programas mais de uma vez) entre o comando For e o
comando Next. Var uma varivel que ter um valor inicial especificado em nExp1. Esse valor ir
progredindo at que tenha o valor idntico a nExp2, quando ento o loop ser encerrado. Se no for
especificado Step a progresso de nExp1 ser de 1 em 1. Caso contrario, a progresso ser conforme
especificado em nExp3.
Ft_Pflush( )
Libera o relatrio para o spool da rede.
GetMv( cExp )
Retorna o contedo do parmetro descrito em cExp. Os parmetros so cadastrados atravs do mdulo
SigaCFG.
Lgica e Conceitos Bsicos de Programao - 36

CIDS Curso Interno para o Desenvolvimento do Suporte


Help( ,1,cExp )
Monta uma janela de Help em nvel de campo. cExp um ttulo para o Help.
IF Exp1
comandos...
[ ELSEIF Exp2
comandos... ] ...
ELSE
comandos...
ENDIF
Esta estrutura avalia uma condio em Exp1 para executar os comandos logo abaixo. O ELSEIF uma
segunda condio, caso necessrio, e pode ser usada vrias vezes. O ELSE faz com que os comandos
logo abaixo sejam executados caso nenhuma das condies anteriores forem aceitas. O ENDIF encerra a
estrutura.
IncRegua( )
Incrementa a rgua de processamento, utilizada na impresso de relatrios.
conjunto com a funo SetRegua( ).

Esta funo trabalha em

IndexOrd()
Retorna o nmero do ndice ativo do banco de dados da rea atual. O nmero do ndice depende da
seqncia com que os ndices foram abertos. Veja a funo dbSetIndex( ) e dbSetOrder( ).
Inkey( [ nExp ] )
Para a execuo do programa at que uma tecla seja pressionada ou durante um determinado tempo. O
tempo deve ser especificado em nExp. Se no for especificado, nExp ser considerado como 0 (zero), ou
seja, por tempo indeterminado. Se nExp for especificado como 0.5, ser considerado meio segundo. Se for
especificado como 1, ser considerado 1 segundo, e assim por diante.
Esta funo retorna o cdigo ASCII da tecla pressionada para que a execuo do programa continue.
IndRegua( cExp1, cExp2, cExp3,, cExp4,cExp5 )
Cria um arquivo de ndice temporrio. Os parmetros devem ser:
cExp1 Alias do banco de dados que receber o novo ndice
cExp2 Nome do novo arquivo de ndice. Este nome deve ser obtido pela funo CriaTrab( ).
cExp3 Expresso chave do ndice
cExp4 Filtro para o ndice
cExp5 Mensagem para tela enquanto o ndice gerado.
Maiores detalhes desta funo ser visto no curso de RDMake.
LastKey( )
Retorna o cdigo ASCII da ltima tecla pressionada.
LastRec( )
Retorna a quantidade de registros do banco de dados da rea atual.
Len( Exp )
Retorna a quantidade de dgitos se Exp for uma expresso caractere ou numrica, contando inclusive os
espaos em branco e zeros. Se Exp for um vetor, retorna a quantidade de elementos que ele possuir.

Lgica e Conceitos Bsicos de Programao - 37

CIDS Curso Interno para o Desenvolvimento do Suporte


Loop
Faz com que o Loop do tipo While seja reiniciado a partir da linha onde iniciado (que possui o prprio
comando WHILE).
OurSpool( cExp )
Chama o spool de impresso. Deve ser chamada quando o quinto elemento de aReturn for igual a 1
(Disco), ou seja, a impresso for direcionada para disco. O vetor aReturn montado quando da chamada
da funo SetPrint( ).
Pergunte( cExp, lExp )
Carrega os parmetros de perguntas correspondente ao programa especificado em cExp, a qual o nome
do Grupo de Perguntas, que devem serem especificadas no arquivo SX1. Se lExp for .T., uma janela com
as perguntas ser exibida em tela, independente do comando do usurio. Se lExp for .F., a janela no ser
apresentada.
Pict Exp
Este comando um argumento que deve ser usado com o comando Say ou com o comando Get e
determina uma mscara na expresso desses comandos. Exp o formato da mscara que pode ser usado,
que so:

Determina o espao ocupado pela varivel.


numero de espaos dentro das aspas.

O espao ocupado ser o mesmo que o

Alm de determinar o espao ocupado pela varivel, o dado ser convertido para maisculo.
Use ! para cada dgito que queira converter para maisculo. Pode ser usado tambm o !
junto com espaos (por exemplo !!!

@!

Faz com que todos os dgitos da varivel sejam convertidos para maisculo.

@#

Faz com que seja aceito somente nmeros.

@E

usado para que o valor fique no formato europeu, com pontos nas casas de milhar e
vrgulas na casa decimal.

#,###.##

usado para colocar o separador de milhar. O espao ocupado pelo dado ser o mesmo
que o nmero de #. A quantidade de # indeterminada, podendo ser maior ou menor que a
especificada neste exemplo.

@E #,###.## uma combinao dos comandos @E e #,###.##. Note que apesar de ser especificado
a vrgula na casa da milhar e o ponto na casa decimal, o dado ao ser exibido na tela ou na
impressora estar no formato europeu.
Read
Ativa todos os comandos Get que estiverem pendentes.
Recno( )
Retorna o nmero do registro atual do banco de dados da rea atual.
Replicate( cExp1,nExp2 )
Retorna uma expresso cujo o contedo ser o mesmo que especificado em cExp1, sendo que esta
expresso ser repetida nExp2 vezes. Por exemplo: Replicate( x,10 ) retorna xxxxxxxxxx.

Lgica e Conceitos Bsicos de Programao - 38

CIDS Curso Interno para o Desenvolvimento do Suporte


RestScreen( nLin1,nCol1,nLin2,nCol2,Var )
Restaura um tela previamente gravada com a funo SaveScreen( ) nas coordenadas especificadas. Veja
a funo SaveScreen( ).
RetIndex( cExp )
Retorna os ndices padro do SigaAdvanced, referente ao banco de dados especificado em cExp.
Return
Retorna para a funo/programa anterior, exatamente para linha seguinte quela que acionou a funo
atual.
Roda( 0, , cExp )
Imprime o rodap de relatrio padro do SigaAdvanced. cExp o tipo do relatrio (P pra pequeno, M para
Mdio e G para Grande)
Row( )
Retorna o nmero da linha da tela em que o cursor est posicionado. Veja o comando Col().
SaveScreen( nLin1,nCol1,nLin2,nCol2 )
Esta funo retorna para uma varivel caracter o contedo da tela dentro das coordenadas informadas. A
tela poder ser restaurada com o uso da funo RestScreen( ), na qual deve-se especificar a mesma
varivel utilizada para armazenar o contedo do retorno desta funo. Veja a funo RestScreen( ).
SetColor( [ cExp ] )
Ativa cores para vdeo conforme os cdigos especificados em cExp. Se cExp no for especificado, esta
funo retornar uma expresso contendo os cdigos das cores atualmente em uso.
Os cdigos usados nesta funo so letras, conforme abaixo:

Cor

Letra

Cor

Letra

Preta

Cinza

N+

Azul

Azul claro

B+

Verde

Verde claro

G+

Cyan

BG

Cyan claro

BG+

Vermelho claro

R+

Vermelha R
Magenta

RB

Magenta claro

RB+

Marron

GR

Amarelo

GR+

Branco

Branco intenso

W+

SetCursor( nExp )
Ajusta o formado e tamanho do cursor. nExp dever ser um cdigo conforme a tabela abaixo:

Lgica e Conceitos Bsicos de Programao - 39

CIDS Curso Interno para o Desenvolvimento do Suporte


Tipo de cursor
Nenhum ( )
Sublinhado ( _ )
Meio bloco inferior ( )
Bloco inteiro ( )
Meio bloco superior ( )

cdigo
0
1
2
3
4

Constante *
SC_NONE
SC_NORMAL
SC_INSERT
SC_SPECIAL1
SC_SPECIAL2

* Obs.: as constantes podero ser usadas no lugar do cdigo se for especificado o respectivo #define no
incio do programa.

SetDefault( aExp,cExp )
Habilita os padres para impresso que so definidos pela funo SetPrint( ). aExp o vetor aReturn que
montado pela funo SetPrint( ) e cExp o alias do arquivo a ser impresso.
SetPrint( cExp1, cExp2, cExp3, cExp4, cExp5, cExp6, cExp7, lExp8,,Exp9,cExp10, lExp11, lExp12, IExp13 )
Permite ajustar os padres dos relatrios. Esta funo trabalha em conjunto com a funo SetDefault( ).
Ela retorna o nome do arquivo gerado em disco, caso seja solicitado este arquivo pelo usurio. Ao ser
executada, SetPrint( ) monta o vetor aReturn. Os parmetros so:
cExp1 Alias do arquivo principal a ser impresso, se existir.
cExp2 Nome padro do relatrio.
cExp3 Nome do grupo de perguntas. Pode ser o mesmo que cExp2
cExp4 Ttulo do relatrio
cExp5 Descrio do relatrio (linha 1)
cExp6 Descrio do relatrio (linha 2)
cExp7 Descrio do relatrio (linha 3)
lExp8 Habilita (.T.) ou no (.F.) o dicionrio de dados
aExp9 Vetor com ordens de indexao
lExp10 Habilita (.T.) ou no (.F.) a compresso do relatrio
cExp11 Classificao do Relatorio por tambalho ( P para 80 cols., M para 132 colunas ou G para 220
colunas)
lExp12 Informe sempre NIL
lExp13 Habilita (.T.) ou no (.F.) o filtro do relatrio.
O vetor aReturn gerado por esta funo possui a seguinte estrutura:
elemento 1
reservado para Formulrio
elemento 2
reservado para n de vias
elemento 3
destinatrio (departamento que ir utilizar o relatrio_
elemento 4
Formato (1 para Comprimido ou 2 para Normal)
elemento 5
Mdia (1 para disco ou 2 para Impressora)
elemento 6
Porta (1-LPT1..., 4-COM1)
elemento 7
Expresso do Filtro
elemento 8
Ordem a ser selecionada
elemento 9, 10...
Campos a processar (se houver)
SetRegua( nExp )
Configura a rgua padro de processamento dos relatrios do SigaAdvanced. nExp corresponde ao total de
dados (linhas, registros) a serem impresso. Esta funo trabalha em conjunto com a funo IncRegua( ).
Space( nExp )
Retorna uma varivel com espaos em branco. A quantidade de espaos em branco especificada pelo
nmero em nExp.

Lgica e Conceitos Bsicos de Programao - 40

CIDS Curso Interno para o Desenvolvimento do Suporte

SubStr( cExp1, nExp2 [ , nExp3 ] )


Retorna uma parte da expresso cExp1. A parte de cExp1 considerada para retorno comear na posio
de nExp2 e terminar at que atinja o tamanho especificado em nExp3. Se nExp3 no for especificada, ser
considerado o resto final de cExp1. Por exemplo:
SubStr( ALEXANDRE , 5) retornar ANDRE
SubStr( P087G65D03 , 5 , 7 ) retornar G65.
Transform( cExp1,cExp2 )
Transforma o dado especificado em cExp1 em um formato genrico e com a mscara utilizada em cEsp2.
As mscaras possveis de serem utilizadas so as mesmas do comando Pict.
Valid Exp
Este comando deve ser usado junto com o comando @...Get ou com @...Say...Get. O Valid determina se a
entrada obtida no comando Get vlida ou no. Exp deve ser substituda por uma comparao ou por uma
funo de usurio. Se for usado a funo de usurio, ela deve retornar .T. se a entrada for vlida ou .F. se a
entrada no for vlida.
When Exp
Este comando deve ser usado junto com o comando @...Get ou com @...Say...Get. O When configura se o
comando Get deve ou no ser realmente executado. Exp deve ser substituda por uma comparao ou por
uma funo de usurio. Se for usado a funo de usurio, ela deve retornar .T. se a o Get tiver que ser
executado ou .F. se no tiver que ser executado.
While cExp
comandos
[ Loop ]
[comandos]
[ Exit ]
[comandos]
EndDo
Provoca um loop (faz com que os comandos existentes entre While e EndDo sejam executados vrias
vezes). cExp uma comparao ou uma funo de usurio (que dever retornar .T. ou .F.) que
determinaro se o loop deve ser executado e at quando. O comando Loop provoca um reinicio do loop
(veja o comando). O comando Exit provoca a interrupo do loop (veja o comando). E o comando EndDo
determina onde o termina o conjunto de comandos que pertencem ao loop.

Lgica e Conceitos Bsicos de Programao - 41

Você também pode gostar