DUVIDAS NA UTILIZACAO DO CRYSTAL?

TAMANINI 18/03/2005 07:56:22
#73516
Sim, em um campo são 3: "793" sem nenhum caracter que separa e, em outro campo sempre são 5 separados por "_": "7,7_15,9_28,0_89,3_93,5"
TAMANINI 18/03/2005 09:23:53
#73527
Fiz assim, dentro de "formula fields", criei uma formula chamada "set15" e coloquei a formula abaixo:

Local StringVar x;
Local StringVar y;
Local StringVar z;

x = Mid ('{tblChkList.set15_list}', 1, 1);
y = Mid ('{tblChkList.set15_list}', 2, 1);
z = Mid ('{tblChkList.set15_list}', 3, 1)


Seria isto?
TAMANINI 18/03/2005 15:37:47
#73633
Alguém?
Terei que criar 3 formulas, um para cada mid()?
--
Outra coisa, é aconselhavel utilizar um objeto texto para vários dados de um BD, ex - Dentro de um "object text":

------------------------------------------------
| Aparelho Nº: "campo_do_BD" |
| Pedido Nº: "campo_do_BD" |
| Data de saida: "campo_do_BD" |
------------------------------------------------

Em vez de um object text para cada campo, no caso para este exemplo seria 3.
USUARIO.EXCLUIDOS 21/03/2005 10:09:49
#73989
Tamanini,

Se as posições forem fixas, vc pode utilizar o mid() desta forma que vc citou, se não for vc vai precisar usar um InStr() para identificar a posição inicial de cada valor.

Qual o objetivo de ter esses três valores? Se for para exibir como informações independentes, vc deverá criar 3 fórmulas. Agora, se for somente para utilizar em calculos, em uma fórmula recuperar os valores e fazer as contas direto.

Com relação ao objeto texto, é recomendado vc utilizar fórmula concatenando os dados aos textos fixos, assim vc terá um ganho de performance. Sua formula ficaria assim:

'Aparelho Nº: ' + {tabela.campo_do_BD} + chr(13) +
'Pedido Nº: ' + {tabela.campo_do_BD2} + chr(13) +
'Data de saida: ' + {tabela.campo_do_BD3}

O único detalhe é que até a versão 8.5 o tamanho máximo que uma string pode retornar de uma fórmula é 255. Caso ultrapasse, você pode quebrar em 2 ou mais fórmulas.
Na versão 9 a fórmula pode retornar mais de 65000 caracteres ....

Abraços,
TAMANINI 28/03/2005 17:36:02
#75406
Tem um campo que não tem as posições fixas e eu terei que criar 5 variáveis, já que são 5 valores separados por "_" e terei que criar uma string global, poderia me explicar?
Estou armazenando assim:
"10,5_23,9_25,0_33,7_67,5"
USUARIO.EXCLUIDOS 29/03/2005 08:49:28
#75507
Fiz uma fórmula para resolver essa sua situação. A quantidade de valores é sempre 5? Se não for, a fórmula irá precisar de algumas adaptações...

Ps. Fiz no crystal 9


stringvar vSTR1;
stringvar vSTR2;
stringvar vSTR3;
stringvar vSTR4;
stringvar vSTR5;

local stringvar var;
var := {tabela.campo};

local numbervar i;
local numbervar tam;
local numbervar inicio;
i:=1;
inicio:=1;
tam:= len(var);

while i <= tam do
(
if var[i] = '_' then
( if vSTR1 = '' then (vSTR1 := var[inicio to i-1];inicio := i+1;) else
if vSTR2 = '' then (vSTR2 := var[inicio to i-1];inicio := i+1;) else
if vSTR3 = '' then (vSTR3 := var[inicio to i-1];inicio := i+1;) else
if vSTR4 = '' then (vSTR4 := var[inicio to i-1];inicio := i+1;);
);
i := i + 1;
);
if vSTR5 = '' then (vSTR5 := var[inicio to i-1];);


Inclua na seção details e depois crie uma fórmula para cada valor


whileprintingrecords;
stringvar vSTR1;


qq coisa manda ae ...
Abraços
TAMANINI 29/03/2005 10:15:29
#75532
é isso mesmo! Eu imaginava que teria que repetir 5 vezes o mesmo código da 1º formula, então basta criar 5 formulas colocando para cada uma estas duas linhas:
whileprintingrecords;
stringvar vSTR1; <-- mudando apenas o número: vSTR2, vSTR3, etc

Quando vc declarou como stringvar as 5 variáveis quer dizer que são variáveis globais, correto?
USUARIO.EXCLUIDOS 29/03/2005 11:41:38
#75554
Isso mesmo. Declarar

StringVar variavel;


é a mesma coisa que

Global StringVar variavel;


No crystal, variáveis globais são válidas em todo o relatório, exceto subrelatórios. Se precisar utilizar no relatório e no subrelatório também, declare com Shared

Shared StringVar variavel;


Abraços
OCTOPUS 29/03/2005 13:14:17
#75572
Crie tres formula Field no crystal e em cada campo vais selecionar Basic sintax e digitar o código abaixo:

No formulaField 1:
formula = left({nomeDoCampo},1)

No formulaField 2:
formula = mid({nomeDoCampo),2,1)

No formulaField 3:
formula = right({nomeDoCampo},1)

Um valor como o 357 seria apresetado desta maneira:
FormulaField1 = 3, FormulaField2 = 5 e FormulaField3 = 7

Página 2 de 2 [20 registro(s)]
Tópico encerrado , respostas não são mais permitidas