Hi all

I have a quite complex problem and I don't exactly know how to "step into it" so I really need your help.

Little briefing: lets say I go on a business trip. My company gives me up to 2 advances in different currencys (but there also could be no advance) i.e. some amount in EUR and another in USD. Now I go on a trip and there are usually (but not necessary) some expenses-there could be more expenses but never in more than 2 different currencies.

I have 6 variables:
-currency = dt.Rows(i).Item(5).ToString (this is the currency belonging to "advance")
-currency1 = dt.Rows(i).Item(15).ToString (is currency belonging to "advance1" and is different from "currency")
-expense = dt.Rows(i).Item(23).ToString (this is the money I've spent on a trip)
-currency2 = dt.Rows(i).Item(24).ToString (this is the currency belonging the money I've spent)

Now I want to know:
-how much money did I spent (sum of all expenses but for every currency sepparated) - have this done!

-if the "advance" if higher than "expense", I must know how much money I need to return, If it is smaller, I must know how much I need to get back

-if there is no match found between "currency"/"currency1" and "currency2", then I should return "advance"/advance1" and receive "expense"

-the program sould compare "currency" and "currency1" with "currency2" and if match is found, it should

If i.e. "advance" is "100", "currency" is "EUR", "expense" is "50" and "currency2" is "EUR", the program should SUM "100 - 50" & "currency" and result should be "50 EUR" to return.

This is my foundation so far:

`````` 'if match between "advance" currency and "expense" currency is found, then all "expense" with the same currency are put into "AryCurrencyValue"

Dim currencyPosition As Double
For Each currency In Ary
If Not currency = "" Then
For i = 0 To dt.Rows.Count - 1
If dt.Rows(i).Item(24).ToString.Replace(" ", "") = currency Then
AryCurrencyValue(currencyPosition) = CDbl(AryCurrencyValue(currencyPosition)) + CDbl(dt.Rows(i).Item(23).ToString)
End If
Next
currencyPosition = currencyPosition + 1
End If
Next

'every record in "AryCurrencyValue" (all the expense) with the same currency has to we printed

Dim q As Integer = y + 20
Dim position As Double
For Each position In AryCurrencyValue
If Not position = 0 Then
'MsgBox(position)
e.Graphics.DrawString(position, fnt, Brushes.Black, 370, q)
e.Graphics.DrawLine(Pens.Black, 365, q + 20, 820, q + 20)
q = q + 25
End If
Next

'every record (currency) in "Ary" is printed

q = y + 20
For Each currency In Ary
e.Graphics.DrawString(currency, fnt, Brushes.Black, 460, q)
q = q + 25
Next

'if "advance" has some value, print it out along with it's belonging currency

If Not advance = Nothing Then
e.Graphics.DrawString("ADVANCE", fnt1, Brushes.Black, 200, w + 40)
e.Graphics.DrawString(advance & "  " & currency, fnt, Brushes.Black, 420, w + 40)
End If

'if "advance1" has some value, print it out along with it's belonging currency

If Not advance1 = Nothing Then
e.Graphics.DrawString("and", fnt, Brushes.Black, 390, w + 65)
e.Graphics.DrawString(advance1 & "  " & currency1, fnt, Brushes.Black, 420, w + 65)
End If
``````

Every suggestion is more than welcome.

You need to give a few more details to get a reasonable answer. Please give definitions, with at least the type and what it connects to, of all the variable that you use, including Ary, AryCurrencyValue, e, y, dt, dt.Rows(integer).Item(integer), advance, advance1. What is the purpose of q? Is it just to indicate where you are drawing things?

I think currencyPosition is probably better defined as an Integer instead of Double. `If Not currency = "" Then` would be slightly more efficient as `If currency > "" Then`. `If Not position = 0 Then` would be slightly more efficient as `If position <> 0 Then` or maybe `If position > 0 Then`, depending on what position is really defining.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of 1.20 million developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.