Escolar Documentos
Profissional Documentos
Cultura Documentos
Lgica e Conceitos
Bsicos de Programao
Reviso 2.0
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
1. Definies
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
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.
00001
00002
00003
00004
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
2. Fluxogramas
Armar o despertador
Desligar o despertador
Bocejar
Sacudir a esposa
Sair da Cama
.
.
.
Incio / Fim
Processos
Deciso
Impresso
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
3. Lgica
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.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 ?
Resoluo: X - 2 = 3 ;
X=3+2 ; X=5
Outro exemplo:
Questo 1:
Questo 2:
Questo 3:
substituio:
CustoProduto = ValorProduto - ( ValorProduto x AliquotaICMS)
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..
No
Alquota
=0?
Calcular o
imposto
Sim
( Prximo
processo )
- 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
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.
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
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
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
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.
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
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
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.
e o While.
Funes so
aceitar
um
parmetro
(dado
para
processar)
iro
retornar
Porm,
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:
utilizar a RecLock( )
utilizar o dbSeek( )
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.
Data: 01/10/97
Contedo: 341/237/033
Mds.: SigaFat
Cnt.Dom.: C5_BANCO
+----------+------------------------------------------------------------
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()
//===============================================//
// 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
Lay-Out do relatrio:
N.F.
Pedido Cliente
Vendedor
Valor
at
at
+de
Total
1000
2000
2000
012345678901234567890123456789012345678901234567890123456789012345678901234567890
Observar tambm que somente as Notas Fiscais de Vendas devem ser consideradas
para o relatrio, o que pode ser controlado pelo TES.
+----------+------------------------------------------------------------
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
"@E 9,999.99"
//+--------------------------------------------------------------+
// 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
//+--------------------------------------------------------------+
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
//+--------------------------------------------------------------+
// 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
//+--------------------------------------------------------------+
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
//+--------------------------------------------------------------+
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
//+--------------------------------------------------------------+
RestScreen(3,0,24,79,cSavScr1)
SetCursor(cSavCur1)
DevPos(cSavRow1,cSavCol1)
SetColor(cSavCor1)
__Return()
5. Vetor
A grande
Matriz =
linhas
colunas
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.
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:
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.
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
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
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.
Sendo assim, ao invs de utilizarmos um arquivo temporrio para esta rotina, usaremos o
Lgica e Conceitos Bsicos de Programao - 27
vetor (lembre-se que a memria muito mais rpida que o acesso em disco).
Este programa ficar prximo ao esquema abaixo:
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:
Passo 03:
Iniciar impressora
( 6 linhas )
Passo 04:
Imprimir cabealho da NF
( 12 linhas )
Passo 05:
Passo 06:
Passo 07:
Passo 08:
Passo 09:
Passo 10:
Imprimir impostos
( 12 linhas )
Passo 11:
Imprimir totais
( 08 linhas )
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
.
.
.
.
.
.
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:
Itlico
Indica variveis ou dados que devem ser substitudos por uma expresso ou valor conforme a
necessidade
Negrito
[ ]
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
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
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.
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
ou
Clear Screen
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.
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.
@#
@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.
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:
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.