DUVIDAS NA UTILIZACAO DO CRYSTAL?
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"
Fiz assim, dentro de "formula fields", criei uma formula chamada "set15" e coloquei a formula abaixo:
Seria isto?
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?
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":
Em vez de um object text para cada campo, no caso para este exemplo seria 3.
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.
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,
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,
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"
Estou armazenando assim:
"10,5_23,9_25,0_33,7_67,5"
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
Inclua na seção details e depois crie uma fórmula para cada valor
qq coisa manda ae ...
Abraços
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
é 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?
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?
Isso mesmo. Declarar
é a mesma coisa que
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
Abraços
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
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
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
Tópico encerrado , respostas não são mais permitidas