[SOLVED] Prośba o przekonwertowanie

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
mmskal
Posty: 2
Rejestracja: ndz lis 24, 2013 6:53 pm

[SOLVED] Prośba o przekonwertowanie

Post autor: mmskal »

Witam
Mam prośbę o przekonwertowanie poniższego makra które działa w Excel. Nie jestem informatykiem (jestem ekonomistą) i komunikaty wydawane przez OO. są poza moim zasięgiem. Makro to nic innego jak funkcja FIFO tu wykorzystywana dla obliczania różnic kursowych od własnych środków walutowych na rachunku bankowym wg zasady pierwsze weszło pierwsze wyszło. Z góry dziękuje za pomoc.

Kod: Zaznacz cały

Function Fifo_fx(n, zakres_dt, zakres_cr, zakres_kurs)
wyplyw_rozliczany = zakres_cr(n)
wplyw_rozliczany = 0

suma_wyplywy = 0
For x = 1 To n - 1
suma_wyplywy = suma_wyplywy + zakres_cr(x)
Next x

fifo_kurs = 0
fifo_suma = 0
suma_wplywy = 0

For y = 1 To n - 1

suma_wplywy = suma_wplywy + zakres_dt(y)
If (suma_wplywy > suma_wyplywy And fifo_suma < zakres_cr(n)) Then
If (suma_wplywy - suma_wyplywy) >= zakres_dt(y) Then
If zakres_dt(y) > (zakres_cr(n) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n) - fifo_suma) * zakres_kurs(y)
fifo_suma = zakres_cr(n)
Else
fifo_kurs = fifo_kurs + zakres_dt(y) * zakres_kurs(y)
fifo_suma = fifo_suma + zakres_dt(y)
End If
Else
If (suma_wplywy - suma_wyplywy) > (zakres_cr(n) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n) - fifo_suma) * zakres_kurs(y)
fifo_suma = zakres_cr(n)
Else
fifo_kurs = fifo_kurs + (suma_wplywy - suma_wyplywy - fifo_suma) * zakres_kurs(y)
fifo_suma = (suma_wplywy - suma_wyplywy)
End If
End If
End If
Next y

If zakres_cr(n) > 0 Then
Fifo_fx = fifo_kurs / fifo_suma
Else
Fifo_fx = 0
End If

End Function
Sub fifofx()

End Sub
OpenOffice 4.0.1
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Prośba o przekonwertowanie

Post autor: belstar »

Problem leży w indeksach tablic przekazywanych przez argumenty do funkcji.
Jest:

Kod: Zaznacz cały

zakres_cr(n)
zakres_dt(y)
A w przypadku OO (LO) powinno być:

Kod: Zaznacz cały

zakres_cr(n, 1)
zakres_dt(y, 1)
Przekonwertowana funkcja ma postać:

Kod: Zaznacz cały

Function FIFO_FX(n, zakres_dt, zakres_cr, zakres_kurs)

wyplyw_rozliczany = zakres_cr(n, 1)
wplyw_rozliczany = 0

suma_wyplywy = 0
For x = 1 To n - 1
suma_wyplywy = suma_wyplywy + zakres_cr(x, 1)
Next x

fifo_kurs = 0
fifo_suma = 0
suma_wplywy = 0

For y = 1 To n - 1

suma_wplywy = suma_wplywy + zakres_dt(y, 1)
If (suma_wplywy > suma_wyplywy And fifo_suma < zakres_cr(n, 1)) Then
If (suma_wplywy - suma_wyplywy) >= zakres_dt(y, 1) Then
If zakres_dt(y, 1) > (zakres_cr(n, 1) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n, 1) - fifo_suma) * zakres_kurs(y, 1)
fifo_suma = zakres_cr(n, 1)
Else
fifo_kurs = fifo_kurs + zakres_dt(y, 1) * zakres_kurs(y, 1)
fifo_suma = fifo_suma + zakres_dt(y, 1)
End If
Else
If (suma_wplywy - suma_wyplywy) > (zakres_cr(n, 1) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n, 1) - fifo_suma) * zakres_kurs(y, 1)
fifo_suma = zakres_cr(n, 1)
Else
fifo_kurs = fifo_kurs + (suma_wplywy - suma_wyplywy - fifo_suma) * zakres_kurs(y, 1)
fifo_suma = (suma_wplywy - suma_wyplywy)
End If
End If
End If
Next y

If zakres_cr(n, 1) > 0 Then
Fifo_fx = fifo_kurs / fifo_suma
Else
Fifo_fx = 0
End If

End Function
LibreOffice 5.1.2.2 Ubuntu 16 LTS
mmskal
Posty: 2
Rejestracja: ndz lis 24, 2013 6:53 pm

Re: Prośba o przekonwertowanie

Post autor: mmskal »

Dziekuję
OpenOffice 4.0.1
joanzk
Posty: 2
Rejestracja: śr paź 01, 2014 11:31 am

Re: [SOLVED] Prośba o przekonwertowanie

Post autor: joanzk »

Próbowałam stworzyć makro w Open Office dot. funkcji fifo_fx zgodnie z wersją po konwersji, niestety pokazuje mi "Błąd składni BASIC
Function jest niedozwolony w procedurze"
Co należy zatem wpisać.
Open Office 4.0.1
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] Prośba o przekonwertowanie

Post autor: Jan_J »

Napisać procedurę (Sub ... / End Sub), która wywoła funkcję, przejmie jej argumenty i coś z nimi zrobi. Rolę makra przejmie procedura.

Banalny przykład:

Kod: Zaznacz cały

function kwadrat(x)
  kwadrat = x*x
end function

sub kwadrat_biezacej_komorki()
  c = thisComponent.currentController.getSelection()
  c.setValue(kwadrat(c.getValue))
end sub

JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
joanzk
Posty: 2
Rejestracja: śr paź 01, 2014 11:31 am

Re: [SOLVED] Prośba o przekonwertowanie

Post autor: joanzk »

Ok jestem początkująca w tworzeniu makr, możesz tak prościej jak ma się zaczynać i kończyć taka funkcja:

Function FIFO_FX(n, zakres_dt, zakres_cr, zakres_kurs)

wyplyw_rozliczany = zakres_cr(n, 1)
wplyw_rozliczany = 0

suma_wyplywy = 0
For x = 1 To n - 1
suma_wyplywy = suma_wyplywy + zakres_cr(x, 1)
Next x

fifo_kurs = 0
fifo_suma = 0
suma_wplywy = 0

For y = 1 To n - 1

suma_wplywy = suma_wplywy + zakres_dt(y, 1)
If (suma_wplywy > suma_wyplywy And fifo_suma < zakres_cr(n, 1)) Then
If (suma_wplywy - suma_wyplywy) >= zakres_dt(y, 1) Then
If zakres_dt(y, 1) > (zakres_cr(n, 1) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n, 1) - fifo_suma) * zakres_kurs(y, 1)
fifo_suma = zakres_cr(n, 1)
Else
fifo_kurs = fifo_kurs + zakres_dt(y, 1) * zakres_kurs(y, 1)
fifo_suma = fifo_suma + zakres_dt(y, 1)
End If
Else
If (suma_wplywy - suma_wyplywy) > (zakres_cr(n, 1) - fifo_suma) Then
fifo_kurs = fifo_kurs + (zakres_cr(n, 1) - fifo_suma) * zakres_kurs(y, 1)
fifo_suma = zakres_cr(n, 1)
Else
fifo_kurs = fifo_kurs + (suma_wplywy - suma_wyplywy - fifo_suma) * zakres_kurs(y, 1)
fifo_suma = (suma_wplywy - suma_wyplywy)
End If
End If
End If
Next y

If zakres_cr(n, 1) > 0 Then
Fifo_fx = fifo_kurs / fifo_suma
Else
Fifo_fx = 0
End If

End Function
Open Office 4.0.1
ODPOWIEDZ