Print Page | Close Window

Array issue

Printed From: Crystal Reports Book
Category: Crystal Reports 9 through 2020
Forum Name: Report Design
Forum Discription: The best way to design a report and problems you have encountered
URL: http://www.crystalreportsbook.com/forum/forum_posts.asp?TID=20266
Printed Date: 05 May 2024 at 12:19pm


Topic: Array issue
Posted By: Macavity
Subject: Array issue
Date Posted: 03 Dec 2013 at 5:13am
Hi, I have an odd array issue

in a formula :
shared stringvar item;  (this is from a subreport)
shared stringvar array;
numbervar i1;

redim array[200];

array:= split(item,",")

for i1:= 1 to 200 do

if {table2.item} = array[i1] then do something

when running the report is keeps ending with error "a subscript must be between 1 and the size of the array"
On the left I see that i1 = 17

when I click check, it says "no errors"

What is going on here ?





Replies:
Posted By: lockwelle
Date Posted: 04 Dec 2013 at 4:49am
I am taking a guess, but the redim is before the split, and the split will automatically resize the array to just the amount needed.

How to work around, well, at least this is what I would do.

for i1:=1 to ubound(array)

oh, while we are at it, shouldn't the declaration of the array be:
shared stringvar array arr;
arr:=split(item)
for i1:=1 to ubound(arr)


just wondering, since it would seem that you are creating a stringvar called array, which I doubt is the intent.

HTH


Posted By: Macavity
Date Posted: 09 Dec 2013 at 3:38am

Ubound was the solution, now I have another problem with arrays

 

Formula @test1 :

 

whileprintingrecords;

shared numbervar i1;

 

shared stringvar array item;

shared numbervar array price;

 

 

for i1:= 1 to ubound(item) do

 

if {tibom010_1.sitm} = item[i1] then

 

 price[i1] else 0;

 

this displays as a boolean :

 

true

 

formula @test2 :

 

shared numbervar array price;

 

price[1]

 

this displays correctly as a number 6916

 

why is @test1 returning a boolean, I tried with shared numbervar test1, but same result



Posted By: lockwelle
Date Posted: 09 Dec 2013 at 4:57am
hmm...not sure. The syntax appears to be correct...just to check, I would try something like:

shared stringvar array item;
shared numbervar array price;
local numbervar x := 0;
for i1:= 1 to ubound(item) do
if {tibom010_1.sitm} = item[i1] then
    x:=price[i1];// else 0;

x


I am guessing that you want just 1 answer from the array, either the price or 0. This allows the formula to return just 1 value, as opposed to several that are mostly 0. I am guessing that this is what is confusing CR.

HTH


Posted By: Macavity
Date Posted: 10 Dec 2013 at 4:36am
This is starting to haunt me, now I have a number, did it like you said, so that's ok, thanks !
But now, if I display the subreport I can see array item has : item1,item2,item3,item4
array price has 6916;70;73;40

on the main report it displays

blank  0
item2 70
item3 73
item4 40

the for i1:= 1 to ubound(item) seems to start from the second entry ????

hope you have idea


Posted By: lockwelle
Date Posted: 10 Dec 2013 at 4:55am
obviously, you can try starting at 0...but CR usually follows the VB6 syntax, which would be 1 based for arrays as opposed to the .Net syntax of being 0 based...

which leads to the next question, are you sure that array has the values...wait, you said that it does (subreport). does the subreport start at 1 as well. If so, that would seem to be ok...how about the sitm in the items array? Maybe the price is there but not the item?

After all the values are in the correct order and position, just the first item appears to be missing.

it's worth a try...

HTH


Posted By: Macavity
Date Posted: 10 Dec 2013 at 7:04am
both first item and price are in the array.

if use the formulas
@test1
shared stringvar array item;

item[1]

@test2

shared numbervar array price;

price[1]

and show them on the main report, they display item1 and 6916 !

but not if I user i:= 1 to ubound(item)

I can't start at 0, cr doesn't accept it



Posted By: lockwelle
Date Posted: 10 Dec 2013 at 7:19am
hmmm...
now it will get to the silly stuff...
are there leading or trailing spaces for item1?

it would seem that CR is not matching the value of item1...maybe another test would be:

@test1
shared stringvar array item;
"'" + item[1] + "'"

and/or the comparison should be:
if trim({tibom010_1.sitm}) = trim(item[i1]) then

worth a try


Posted By: Macavity
Date Posted: 11 Dec 2013 at 9:15am
I'll try, but it's always the first item of the group that has price 0 while it is clearly present in the array



Posted By: lockwelle
Date Posted: 11 Dec 2013 at 9:23am
for the @test1 you would expect:
'item1', but if you get something like 'item1 ' or 'item 1' then at least you have an idea of what is going wrong.

I completely believe that there is a value in the array, what I am not sure of is if the value is what you think it is....

you could also have a @test1.1
shared stringvar array item;
"'" + {tibom010_1.sitm} + "'"

this will check that the value you are comparing against is what you expect as well. maybe it is ITEM1, which won't match either.

just different ideas of how to see what CR is doing, instead of what we are imagining it is doing.

HTH



Print Page | Close Window