Escolar Documentos
Profissional Documentos
Cultura Documentos
txt"
-------------------------------------------------------------------------------O Documento abaixo foi traduzido do HELP do Crystal Reports verso 9
A maioria das informacoes deve ser compativel tambem com as versoes 8 e
8.5
Nome do Arquivo: Formulas Crystal Reports.txt
Data da Criacao: 5 Julho 2007
Ultima Alteracao: 6 Julho 2007
Roberto Marques - Email: rmarques@rmlc.com.br
NOTAS:
- Foi usada a CRYSTAL SYNTAX deliberadamente porque a BASIC SYNTAX eh
mais facil
- Acentuacao foi deliberadamente omitida do documento para evitar
problemas
- Criticas e sugestoes sao benvindas
-------------------------------------------------------------------------------// Esta formula retorna o string "Alo Mundo!"
// Aqui outro comentario
"Alo Mundo"" // Comentarios podem ser adicionados no final da linha
// Comentrios podem aparecer no final da formula
Como campos aparecem nas formulas:
Bancos de Dados, Parametros, Formulas, Totais e Campos de Expressoes
SQL terao s
eus nome cercados por colchetes "{" "}"
Campos de Bancos de Dados sao retirados diretamente das Tabelas dos
Bancos de Da
dos.
Exemplo: Database field: {Clientes.Nome}
Parametros, formulas, totais de controle, e nomes de expressoes SQL sao
especifi
cados quando criados.
//Formula D
// Chama a funcao "WhileReadingRecords"
WhileReadingRecords;
Global NumberVar x;
x := x + 1
Usando Variaveis tipo ARRAY
Podemos criar variaveis tipo ARRAY.
Exemplos:
StringVar Array x := ["hello", "bye", "again"]; // Valor de x = ["hello", "bye"
, "again"]
x [2] := "once"; // Agora o valor x = ["hello", "once", "again"]
// A expressao abaixo vai causar um ERRO se for retirado o "//" do
comentario
// porque o ARRAY x tem tamanho 3 (definido na sua criacao)
//x [4] := "zap";
// A formula abaixo retorna um String = "HELLO"
UpperCase (x [1])
As palavras reservadas "Redim" and "Redim Preserve" podem ser usadas
para redim
ensionar um array
se for necessario adicionar mais dados ao ARRAY.
"Redim" elimina os dados no ARRAY antes de redimensionar.
"Redim Preserve" preserva o conteudo do ARRAY antes de redimensionar.
Exemplos:
Local NumberVar Array x;
Redim x [2]; // Conteudo de x = [0, 0]
x [2] := 20; // Conteudo de x = [0, 20]
Redim x [3]; // Conteudo de x = [0, 0, 0]
x [3] := 30; // Conteudo de x = [0, 0, 30]
Redim Preserve x [4]; // Conteudo de x = [0, 0, 30, 0]
"finished"
Local StringVar Array a;
Redim a [2];
Negacao (-)
Multiplicacao, divisao, and porcentagem (*, /, %)
Divisao Inteira (\)
Modulo (Mod)
Adicao e Subtracao (+, -)
Campos NULOS (Null) e como usar "IsNull"
Em geral, quando o Crystal Reports encontra um valor "Null" em uma
formula, a ex
ecucao da formula eh interrompida e nenhum valor eh retornado.
Se voce quer trabalhar com valores de campos tipo "Null" em uma formula,
voce de
ve explicitar seu uso com algumas funcoes especiais.
A saber: IsNull, PreviousIsNull or NextIsNull.
Exemplos:
O campo "{Product.Color}" cotem cores basicas como "red" e "black" e mais
duas p
alavras de descricao como "steel satin" e "jewel green".
Segue um exemplo de uma formula que imprime "basic" para as cores
basicas e "fan
cy" para as outras.
// Inicio da Formula
If InStr({Product.Color}, " ") = 0 Then
formula = "basic"
Else
formula = "fancy"
// Final da Formula
A funcao "InStr" pesquisa a string "{Product.Color}" por um espaco em
branco " "
.
Se acha o espaco em branco, retorna a posicao e se nao encontra retorna 0
(zero)
.
Cores basicas terao apenas uma palavra ("red", "black") sem espaco em
branco.
Para alguns produtos a cor pode nao ter sido informada, ou seja, seu
conteudo no
Banco de Dados NULO.
Nesses casos a formula acima retornaria um erro. Para corrigir o problema
usarem
os "IsNull".
// Inicio da Formula com IsNull
If IsNull({Product.Color}) Or
InStr({Product.Color}, " ") = 0 Then
"basic"
Else
"fancy"
// Final da Formula
Quando o Crystal Reports avalia a condicao:
IsNull({Product.Color}) Or
InStr({Product.Color}, " ") = 0
Primeiro eh verificado "IsNull ({Product.Color))",
se retorna "True" ele sabe que existe pelo menos uma condicao verdadeira e
nao n
ecessita olhar o resto da condicao.
InStr({Product.Color}, " ") = 0
Em outras palavras, o Crystal Reports para de avaliar o resto da condicao
quando
ele ja sabe o resultado de toda a condicao.
No exemplo a seguir, a formula previne a divisao por zero no caso de
"demon = 0"
.
Local NumberVar num;
Local NumberVar denom;
...
If denom <> 0 And num / denom > 5 Then
...
NOTA: Visual Basic nao suporta essa tecnica, porque todas as partes da
condicao
(
message := "Rush";
ship := {Orders.Order Amount} * 0.05;
0
)
Else
(
ship := {Orders.Order Amount} * 0.02;
message := "Regular";
0
);
message & " shipping is " & CStr (ship)
// Final da Formula
Expressao Condicional "Select"
A expressao "Select" eh similar a expressao "If". Entretanto voce pode criar
for
mulas mais "claras"
e intuitivas usando a expresso "Select" em vez de "If" e "Else If".
Por exemplo, avaliando o campo do Banco de Dados "{Customer.Fax}" para
determina
r se:
Codigo de area eh Estado de Washington (206, 360, 509) ou British
Columbia no Ca
nada (604,250)
// Select Exemplo 1
Select {Customer.Fax}[1 To 3]
Case "604", "250" :
"BC"
Case "206", "509", "360" :
"WA"
Default :
"";
// Final do Exemplo 1
Case 10 :
"high"
Default :
"extreme"
// Final do Exemplo 2
A Clausula "Default" em uma expressao "Select" eh opcional.
Se a clausula "Default" nao existir e nenhuma das opcoes foi atendida, a
express
ao "Select"
vai retornar o valor "Default" to tipo de expressao (no caso acima um "" strin
g vazio).
Por exemplo, na formula acima se a clausula "Default" nao existisse, e o
valor d
e "{movie.NOM}" = 11,
o retorno do "Select" seria um string "" (vazio).
Loops FOR
Os Loops FOR permitem a execucao de uma sequencia de expressoes um
determinado n
umero de vezes.
Os loops FOR devem ser usados quando sabemos antecipadamente o
numero de vezes q
ue as expressoes devem ser executadas.
Verifique a "Sintaxe" dos loop FOR nos exemplos a seguir:
Exemplo 1
Suponha que voce queira inverter o conteudo da string
"{Customer.Customer Name}"
Por exemplo: de "City Cyclists" para "stsilcyC ytiC".
// Invertendo um string - Versao 1
Local StringVar str := "";
Local NumberVar strLen :=
Length ({Customer.Customer Name});
Local NumberVar i;
For i := 1 To strLen Do
(
Local NumberVar charPos := strLen - i + 1;
str := str + {Customer.Customer Name}[charPos]
);
str
// Final do Exemplo 1
Examine como a formula acima funciona.
O tamanho do string contido no campo "{Customer.Customer Name}" eh
colocado na v
ariavel "strLen".
O loop FOR sera executado de 1 ate o tamanho do campo
"{Customer.Customer Name}"
indicado na variavel "strLen".
A variavel "str" comeca VAZIA e vai armazenado os caracteres a cada
execucao do
comando FOR,
de forma a conter ao final do FOR todos os caracteres de
"{Customer.Customer Nam
e}" invertidos.
Exemplo 2
Aqui mostramos uma versao simplificada da formula acima
usando a clausula "Step" com o valor negativo "-1".
// Invertendo um string - Versao 2
Local StringVar str := "";
Local NumberVar strLen :=
Length ({Customer.Customer Name});
Local NumberVar i;
For i := strLen To 1 Step -1 Do
(
str := str + {Customer.Customer Name}[i]
);
str
// Final do Exemplo 2
Exemplo 3
(
Local StringVar inC := inString [i];
Local StringVar outC;
Local BooleanVar isChar :=
LowerCase(inC) In "a" To "z";
Local BooleanVar isUCaseChar :=
isChar And (UpperCase (inC) = inC);
inC := LCase(inC);
If isChar Then
(
Local NumberVar offset :=
(Asc(inC) + shift - Asc("a")) Mod
(Asc("z") - Asc("a") + 1);
outC := Chr(offset + Asc("a"));
If isUCaseChar Then outC := UpperCase(outC)
)
Else
outC := inC;
outString := outString + outC
);
outString
// Final da Formula
No exemplo acima tem uma expressao "If" concatenada com um bloco de
expressao FO
R.
Essa expressao "If" eh responsavel para precisamente deslocar (shift) um
simples
caracter.
Por exemplo, letras sao tratadas diferentemente de pontuacao e espacos
que nao s
ao codificados.
O importante nesse exemplo sao as estruturas de controle, que podem ser
combinad
as com outras
// Final da Formula
Limitacoes (Crystal syntax)
- Tamanho maximo de uma constante string, valor string em uma variavel,
string retornado por uma funcao ou string em um array sera de 65.534
caractere
s
- Tamanho maximo de um array 1000 elementos
- Numero maximo de argumentos para uma funcao eh 1000
- Numero maximo de loops em estruturas condicionais eh 100.000
- Funcoes de Data e Hora usadas no Visual Basic. Aceitas datas a partir do
ano 1
00 ate o ano 9999
- Funcoes de Data e Hora no Crytal Reports tradicional. Aceitas datas a
partir d
o ano 1 ate o ano 9999
-------------------------------------------------------------------------------Final do Documento - "Formulas Crystal Reports.txt"