dyn. Formel aus Tabelle ?!

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
20 Beiträge • Seite 1 von 2 (current) Nächste
20 Beiträge Seite 1 von 2 (current) Nächste

dyn. Formel aus Tabelle ?!

Beitrag von Matthias_L. (Specialist / 226 / 0 / 0 ) »
Hallo zusammen,

wir wollen dem Enduser eine Tabelel zur Verüfung stellen, in der in einem Feld eine Formel hinterlegt werden kann.

In einem ABAP wollen wir den Inhalt des Formelfeldes auslesen und mit dieser Formel dann Berechnungen durchführen.

Beispiel:

erg = netp * FORMELAUSTABELLENFELD

Nehmen wir mal an, im Formelfeld steht "16 * 3 + 0,7" und netp = "100,25". Dann würde ich gern im ABAP folgende berechnung machen lassen:

erg = 100,25 * 16 * 3 + 0,7.

Leider bekommen wir es nicht hin, den Inhalt des Tabellenfeldes als Formel zu interpretieren.

Ist sowas denn general möglich ?

Hintergrund:
Wir wollen die Formel nicht fest im ABAP hinterlegen, da diese sich oft ändern kann. Daher sollte der Endanwender einfach die Tabelle pflegen, wenn eine neue Formel gebraucht wird. Dann müssten wir nicht immer unser ABAP ändern.

Gibt es eine Lösung oder andere Lösungsvorrschläge ?

Danke + Gruß
Matthias

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen.

Guck Dir mal den FuBa EVAL_FORMULA an.

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Re: dyn. Formel aus Tabelle ?!

Beitrag von Gast ( / / 0 / 3 ) »
Matthias_L. hat geschrieben:erg = 100,25 * 16 * 3 + 0,7.
Nicht doch lieber so:

Code: Alles auswählen.

erg = 100,25 * ( 16 * 3 + 0,7 ).
Aber dann könnte der Anwender als "Formel" ja auch gleich 48,7 angeben.

Beitrag von Asaph (Expert / 580 / 6 / 1 ) »
-> der Meinung von Gast schließe ich mich an

bei komplexeren Formeln ( mit Variablen, die zur Laufzeit gefüllt werden )kommst du an GENERATE SUBROUTINE POOL nicht vorbei!

Gruß Andreas

Beitrag von Matthias_L. (Specialist / 226 / 0 / 0 ) »
Hallo zusammen,

vielen Dank für die Info mit dem Fuba !

Ich denke der ist der richtige... ABER:

da muss ich ein Programm und eine Routine mit angeben. Das ist mir aber noch nicht ganz klar...
Was soll denn in der Routine gemacht werden ?

Hat dazu evtl. bitte jemand ein Beispiel ?

Vielen Dank
Grüße
Matthias

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Hi Matthias.

Beim Einzeltest brauchte ich nixhts anzugeben. Ich habe lediglich Deine Werte eingesetzt (Parameter FORMULA) und ausgeführt.

Ich habe jetz leider grad kein System zur Verfügung, ich probier das aber morgen mal aus.

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von ViktorJ ( / / 0 / 3 ) »
Mach ein Verwendungsnachweis zum FB und du findest Beispiele:
RSCALC00
RSCALC01
RSCALC10

Beitrag von Matthias_L. (Specialist / 226 / 0 / 0 ) »
Hallo zusammen,

soooo, habe in einem Testabap mal mit dem Fuba getestet und es funktioniert auch alles wunderbar.

Jetzt habe ich dieses Coding in meine "Preisfindungsformel" (das ist ein Include, TAC VOFM) eingebaut und es rechnet dann auch, aber es rechnet hier falsch.

Als Formel habe ich in einer Tabelle hinterlegt:
BASIS*1.8-10. Als Wert zum Rechnen verwende ich in beiden Fällen 256,00 EUR.

In meinem Testprogramm (siehe Anhang) erhalte ich dann als Ergebnis 450,80 ? (256,00*1,8-10). RICHTIG!!

Im Include hingeben erhalte ich als Ergebnis 460,70 ?. Es werden hier also nicht 10 Euro (wie in der Formel hinterlegt), sondern nru 10 Cent abgezogen.

Das Coding ist in beiden Fällen identisch.

Hat jemand eine Idee, woran das liegen kann ???? Ich bin ratlos.

Danke + Gruß
Matthias

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
Moinsen.

Hab das Programm mal eben ausprobiert, dabei die Formel allerdings fest hinterlegt.

Bei mir kam das korrekte Ergebnis raus.

Guck mal in den Programmeigenschaften, ob "Festpunktarithmetik" aktiviert ist. Falls nicht musst Du Deinen Festwert ("10") mit 10^(Anzahl Nachkommastellen) multiplizieren. Dann klappt's auch mit dem Nachbarn... :wink:

Gruss,
Haubi
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Matthias_L. hat geschrieben:Hallo zusammen,

soooo, habe in einem Testabap mal mit dem Fuba getestet und es funktioniert auch alles wunderbar.

Jetzt habe ich dieses Coding in meine "Preisfindungsformel" (das ist ein Include, TAC VOFM) eingebaut und es rechnet dann auch, aber es rechnet hier falsch.

Als Formel habe ich in einer Tabelle hinterlegt:
BASIS*1.8-10. Als Wert zum Rechnen verwende ich in beiden Fällen 256,00 EUR.

In meinem Testprogramm (siehe Anhang) erhalte ich dann als Ergebnis 450,80 ? (256,00*1,8-10). RICHTIG!!

Im Include hingeben erhalte ich als Ergebnis 460,70 ?. Es werden hier also nicht 10 Euro (wie in der Formel hinterlegt), sondern nru 10 Cent abgezogen.

Das Coding ist in beiden Fällen identisch.

Hat jemand eine Idee, woran das liegen kann ???? Ich bin ratlos.

Danke + Gruß
Matthias
In den Einstellungen zum (Rahmen)Programm gibt es den Schalter 'Festpunktarithmetik'.
Ist der in beiden Fällen gleich?

Formel

Beitrag von Richard_Z1 ( / / 0 / 3 ) »
hallo ich möchte das auch testen
kann mir jemand was für felder in zsdpriceformcn sein sollen

Beitrag von Gast ( / / 0 / 3 ) »
Hi ereglam,

in meinem Testprogramm ist das Flag aktiv, im Rahmenprogramm (SAPLV61A) meines Includes ist dieses Flag nicht aktiv. Hab es jetzt in meinem Testprogramm auch "deaktiviert" und siehe da, jetzt bekomm ich auch hier das falsche Ergebnis.

Was kann ich da jetzt machen ?

Danke + Gruß
Matthias

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Anonymous hat geschrieben:Hi ereglam,

in meinem Testprogramm ist das Flag aktiv, im Rahmenprogramm (SAPLV61A) meines Includes ist dieses Flag nicht aktiv. Hab es jetzt in meinem Testprogramm auch "deaktiviert" und siehe da, jetzt bekomm ich auch hier das falsche Ergebnis.

Was kann ich da jetzt machen ?

Danke + Gruß
Matthias
eine Möglichkeit dürfte sein, in Deiner Formel 'BASIS * 1.8 - 10.0' zu schreiben.
Damit wird zumindestens sichergestellt, dass er immer mit Zehn rechnet.
Hintergrund ist wahrscheinlich die Tatsache, dass Du mit 1.8 bereits eine Zahl definiert hast, die wohl in einen Typ P Decimal 2 konvertiert wird. Und damit wird dann wohl auch 10 gemäß Festpunktarithmetik-Flag in einen entsprechenden Typ gewandelt...

Andererseits muss es auch noch eine andere Lösung geben, die ich aber leider nicht kenne :(

PS: meines Wissens gibt es gerade im FI etliche Programme, die ohne Festpunktarithmethik arbeiten, weil ja z.B. CURR-Felder bzgl. Nachkommastellen von der Währung abhängen.

Beitrag von Haubi (Expert / 625 / 20 / 30 ) »
ereglam hat geschrieben: eine Möglichkeit dürfte sein, in Deiner Formel 'BASIS * 1.8 - 10.0' zu schreiben.
Damit wird zumindestens sichergestellt, dass er immer mit Zehn rechnet.
Funzt net, habe ich auch probiert. Warum? 42. :roll:
Das ABAP Kochbuch ab sofort bei Amazon...

I'd rather write code that writes code than write code...

Beitrag von Matthias_L. (Specialist / 226 / 0 / 0 ) »
Soo..... danke für eure Hilfe, hab es jetzt wie folgt gelöst.

In meinem Include rufe ich jetzt mit SUBMIT ein anderes ABAP (zsd_preisformel_cn) auf, bei dem die Festpunktar. eingeschaltet ist. Ich übergebe díesem Abap meinen Preis. In diesem ABAP ermittle ich die Formel aus der Tabelle und dann füll ich eine Struktur mit dem errechneten Preis. Dieser Preis (das Endergebnis) erhalte ich nun in meinem Include zurück und dann stimmt alles.

AUFRUF IM INCLUDE:

Code: Alles auswählen.

DATA: ls_preisformel TYPE ZSD_PREISFORMEL.
CONSTANTS: lc_memid_preisformel TYPE char15 VALUE 'ZSD_PREISFORMEL'.

 SUBMIT zsd_preisformel_cn AND RETURN
                      WITH p_pltyp EQ group
                      WITH p_preis EQ kbetr_new.

* Importieren aus Speicher
    IMPORT zsd_preisformel = ls_preisformel
                             FROM MEMORY ID lc_memid_preisformel.

    FREE MEMORY ID lc_memid_preisformel.

     xkomv-kbetr = ls_preisformel-ergeb.
DAS AUFGERUFENE ABAP:

Code: Alles auswählen.

tables: zsdpriceformcn.

data : result type f,
       basis like vbak-netwr,
       formel(40),
       progr like sy-repid,
       netp like vbak-netwr,
       result2 like vbak-netwr.

data: zsd_preisformel type zsd_preisformel.


CONSTANTS: lc_memid_preisformel TYPE char15 VALUE 'ZSD_PREISFORMEL'.

parameters:   p_pltyp like VBKD-pltyp,
              p_preis like komv-kwert.



* Mit Formel aus Tabelle selektieren anhand Preisliste
  SELECT SINGLE * FROM zsdpriceformcn WHERE zzpltyp = p_pltyp.


formel = zsdpriceformcn-zzformel.

basis = p_preis.

progr = sy-repid.


call function 'EVAL_FORMULA'
     exporting
          formula          = formel
          program          = progr
          routine          = 'GET_EVAL_VALUES'
     importing
          value            = result
     exceptions
          division_by_zero = 4
          exp_error        = 8
          log_error        = 12
          sqrt_error       = 16
          other            = 99.


* aus Float wird "normales" Betragsfeld
result2 = result.

*Ergebnis in Struktur schieben
zsd_preisformel-ergeb = result2.

*exportieren in Speicher
export zsd_preisformel to memory id lc_memid_preisformel.





*******************
form get_eval_values  using   bitch
                      changing wert
                               subrc.

  field-symbols:
    <p>.

  assign (bitch) to <p>.
  if sy-subrc = 0.
    wert = <p>.
  endif.
endform.
*******************
Grüße
Matthias

Vergleichbare Themen

0
Antw.
1868
Views
BW Fortschreibungsregel, Formel und Währungsumrechnung
von manuk » 11.05.2006 09:39 • Verfasst in Sonstige Module
1
Antw.
5686
Views
Konditionsarten - Rechenregel G (Formel) ?
von Matthias_L. » 08.03.2005 11:11 • Verfasst in Sales and Distribution
0
Antw.
2048
Views
Zusätzliche Felder für den Formel Editor
von sebjo » 02.03.2009 17:07 • Verfasst in ABAP® für Anfänger
0
Antw.
2097
Views
BW-Integrierte Planung Fox-Formel testen
von bakky » 13.01.2009 10:03 • Verfasst in Sonstige Module
1
Antw.
2687
Views
Massenänderung MASS LFA1 Formel
von thr74 » 11.02.2011 12:51 • Verfasst in ABAP® für Anfänger

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.