unterschiedliche Ergebnisse bei 2 Codings

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
19 Beiträge • Seite 1 von 2 (current) Nächste
19 Beiträge Seite 1 von 2 (current) Nächste

unterschiedliche Ergebnisse bei 2 Codings

Beitrag von Alexi ( / / 0 / 3 ) »
Hallo,

was muss ich tun, damit ich mit folgendem Coding...

Code: Alles auswählen.

* Materialtdaten lesen ----------------------------------------------- *
  PERFORM read_mara.

* Preise lesen ------------------------------------------------------- *
  PERFORM read_a006.
  PERFORM read_konp.



* Ausgabe ------------------------------------------------------------ *
  LOOP AT i_mara.

    CLEAR i_a006.
    CLEAR i_konp.

    READ TABLE i_a006 WITH KEY matnr = i_mara-matnr BINARY SEARCH.
    READ TABLE i_konp WITH KEY knumh = i_a006-knumh BINARY SEARCH.
    
    ....
    
  ENDLOOP.
  
  
*&---------------------------------------------------------------------*
*&      Form  read_mara
*&---------------------------------------------------------------------*
FORM read_mara.

* Initialisieren ----------------------------------------------------- *
  CLEAR:   i_mara.
  REFRESH: i_mara.

* MARA lesen --------------------------------------------------------- *

  SELECT * INTO TABLE i_mara
         FROM mara
         WHERE matnr IN i_matnr.
*  SORT i_mara BY matnr.

  IF i_mara[]  IS INITIAL.
    MESSAGE s001.
    EXIT.
  ENDIF.

ENDFORM.                    " read_mara


*&---------------------------------------------------------------------*
*&      Form  read_a006
*&---------------------------------------------------------------------*
FORM read_a006.

* Initialisieren ----------------------------------------------------- *
  CLEAR:   i_a006.
  REFRESH: i_a006.

* A006 lesen --------------------------------------------------------- *

  SELECT * INTO TABLE i_a006
            FROM a006
            FOR ALL ENTRIES IN i_mara
            WHERE matnr = i_mara-matnr
            AND pltyp IN i_pltyp
            AND waerk = 'EUR'
            AND datbi >= sy-datum
            AND datab =< sy-datum.

ENDFORM.                                                    " read_a006

*&---------------------------------------------------------------------*
*&      Form  read_konp
*&---------------------------------------------------------------------*
FORM read_konp.

* Initialisieren ----------------------------------------------------- *
  CLEAR:   i_konp.
  REFRESH: i_konp.

* KONP lesen --------------------------------------------------------- *

  SELECT * INTO TABLE i_konp
            FROM konp
            FOR ALL ENTRIES IN i_a006
            WHERE knumh = i_a006-knumh
            AND konwa = 'EUR'
            AND loevm_ko = ''.

ENDFORM.                    " read_konp
das gleiche Ergebnis erhalte wie mit diesem hier ..

Code: Alles auswählen.

 LOOP AT i_mara.

    CLEAR i_a006.
    CLEAR i_konp.

    SELECT SINGLE knumh FROM a006
          INTO i_a006-knumh
          WHERE matnr = i_mara-matnr
          AND pltyp IN i_pltyp
          AND waerk = 'EUR'
          AND datbi >= sy-datum
          AND datab =< sy-datum.

  SELECT single * from konp INTO i_konp
            WHERE knumh = i_a006-knumh
            AND konwa = 'EUR'
            AND loevm_ko = ''.
            
....

ENDLOOP.           
Im Moment hab ich das Problem, dass ich bei ersterem nicht alle Materialien angezeigt bekomme.

Oder sollte ich das ganz anders machen?? Danke!

sonnige Grüße, Alexi

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


Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Alexi,

weil Du unterstellst, dass die abhängigen Tabellen korrekt sortiert sein. Dies ist aber, gerade auch wegen des FOR ALL ENTRIES, nicht der Fall.

Code: Alles auswählen.

FORM read_a006. 

* Initialisieren ----------------------------------------------------- * 
  CLEAR:   i_a006. 
  REFRESH: i_a006. 

* A006 lesen --------------------------------------------------------- * 

  SELECT * INTO TABLE i_a006 
            FROM a006 
            FOR ALL ENTRIES IN i_mara 
            WHERE matnr = i_mara-matnr 
            AND pltyp IN i_pltyp 
            AND waerk = 'EUR' 
            AND datbi >= sy-datum 
            AND datab =< sy-datum
  ORDER BY PRIMARY KEY. "Sortierung nach Schlüssel erzwingen 

ENDFORM.                                                    " read_a006 
Das bedingt natürlich, dass der READ dann auch nach den Schlüsselfeldern suchen will.

PS:
bei Verwendung von FOR ALL ENTRIES ist auch nur die Sortierung mit ORDER BY PRIMARY KEY zugelassen.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Alexi ( / / 0 / 3 ) »
Hallo,

danke für die Antwort. Ich hatte die Sortierung schonmal mit reingenommen, aber nicht mit "order by primary key" .. dadurch hatte ich noch weniger Ergebnisse und die Sortierung dann rausgenommen (hab nicht an order by primary key gedacht ..)

Wie dem auch sei. Hab das jetzt mal geändert und das gleiche Problem .. ich erhalte, wenn ich mit * suche, nicht alle Materialien.

Ich erhalte z.B. kein Material, dass mit "Z" anfängt.Mir ist aber gerade aufgefallen, dass ich diese erhalte, wenn ich auf "Z*" eingrenze ..

Mit den beiden Select Single erhalte ich auch wenn ich auf * eingrenze alle Materialien

sonnige Grüße, Alexi

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Alexi,

wenn ich Dich richtig verstanden habe, funktioniert jetzt das Lesen der abhängigen Daten korrekt, oder?

Aber Deine Probleme mit der Selektion der Materialien verstehe ich nicht! Bei Verwendung des '*' oder dem Leerlassen der Selektionstabelle sollten eigentlich alle Einträge gefunden werden... :?: :?:
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Alexi ( / / 0 / 3 ) »
Hallo,

ja, du hast mich richtig verstanden; in beiden Punkten :-)

Mit den beiden Select Single erhalte ich eben wirklich alle Materialien. Mit dem Read Table und Co ist irgendwann Schluss (wenn ich mit * "eingrenze")

Gruß, Alexi

Beitrag von Alexi ( / / 0 / 3 ) »
Hallo nochmal,

ich bin ein Stückchen weitergekommen. Ich habe in meiner Selektionsmaske eine Checkbox, um Materialien ohne Preis gar nicht erst anzeigen zu lassen.

Ich hab dann in meinem loop über die i_mara folgendes...

Code: Alles auswählen.

    IF p_price = 'X'.
      CHECK i_konp-kbetr NE ''.
    ENDIF.
Setze ich die Checkbox nicht auf 'X' erhalte ich alle Materialien. Setze ich sie auf 'X' ist irgendwann Schluss??!!

'ne Idee warum das so ist? Es liegt nicht daran, dass nach dem ersten Material ohne Preis rausgesprungen wird; es wird dann schon weitergemacht. In meiner Ergebnisliste tauchen Materialien mit und ohne Preis auf

Gruß, Alexi

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Alexi,

mir fällt bei Deinem Beispielen auf, dass Du SY-SUBRC nach SELECT SINGLE oder auch nach dem READ nicht auswertest.
Wenn Dein SELECT SINGLE auf die A006 oder KONP einen SY-SUBRC ungleich null hat und der letzte Satz, der mit der KONP gefunden wurde, keine Preis hat, werden alle nachfolgenden Materialien wegen des CHECK nicht weiter bearbeitet...
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Alexi ( / / 0 / 3 ) »
Hallo,

kannst du mir vielleicht noch kurz erläutern, wo und wie ich den sy-subrc abfragen muss und wie ich dann verhindern kann, den Datensatz auszugeben?

Danke!

Gruß, Alexi

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Hallo Alexi,

ich möchte Dir jetzt nicht zu nahe treten, aber da hat jemand einen ziemlich schlechten Job gemacht, wenn Du über die spezielle Bedeutung des Feldes SY-SUBRC nichts gesagt bekommen hat... :?

Also, von vorne:
In ABAP gibt es die Pseudo-Variable (als Struktur) SY bzw. SYST, die eine Reihe von Feldern mit Informationen zum aktuellen Zustand des Programms und des Systems zur Verfügung stellt.
Besonders wichtig ist hierbei das Feld SY-SUBRC, das zu vielen Befehlen die Information beinhaltet, wie erfolgreich der letzte Befehl ausgeführt wurde.
Allgemein gilt, dass ein 'SY-SUBRC = 0' positiv und alles Andere negativ war.
Übertragen auf den SELECT bedeutet das, dass die Leseoperation auf der Datenbank bei einen 'SY-SUBRC <> 0' keinen Satz gefunden hat.

Um die Relevanz von SY-SUBRC je Befehl in Erfahrung zu bringen, musst Du in der Hilfe zum jeweiligen Befahl anchschauen, ob SY-SUBRC gesetzt wird. Dort wird dann auch beschrieben, welche Fehlerwerte denn bekannt sind und welche Bedeutung sie haben.
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Alexi ( / / 0 / 3 ) »
Und nochmal hallo,

also wenn, dann bin ich dieser jemand .. bring mir das ganze selbst bei. Sorry also, wenn die ein oder andere Frage nicht so rüberkommt oder ich mich "ein bissel blöd anstell", ist keine Absicht :D

Das mit dem sy-subrc an sich ist mir schon bewusst. Ich weiß nur nicht, wo ich das Ganze abfragen muss.

Wenn ich z.B. mal bei meinem ersten Ansatz, dem read table bleibe, würde ich zwischen den beiden read table (im loop über i_mara) folgendes machen ..

Code: Alles auswählen.

    IF p_price = 'X'.
      CHECK sy-subrc = '0'.
    ENDIF.
Wenn ich das richtig verstanden habe, bricht der loop sozusagen ab und beginnt von vorne .. das wäre ja das, was ich möchte.

Allerdings funktioniert das so nicht. Ich erhalte immer noch nicht die richtigen Materialien. Deshalb interessiert mich wie und wo ich den sy-subrc genau abfragen muss

dankende Grüße, Alexi

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »

Code: Alles auswählen.

* Materialtdaten lesen ----------------------------------------------- * 
  PERFORM read_mara. 

* Preise lesen ------------------------------------------------------- * 
  PERFORM read_a006. 
  PERFORM read_konp. 



* Ausgabe ------------------------------------------------------------ * 
  LOOP AT i_mara. 

    CLEAR i_a006. 
    CLEAR i_konp. 

    READ TABLE i_a006 WITH KEY matnr = i_mara-matnr BINARY SEARCH. 
    CHECK sy-subrc EQ 0. "sonst, weiter mit nächstem Satz

    READ TABLE i_konp WITH KEY knumh = i_a006-knumh BINARY SEARCH. 
    CHECK sy-subrc EQ 0. "sonst, weiter mit nächstem Satz

    IF p_price EQ 'X'. "oder IF p_price NOT IS INITIAL. ;)
      CHECK i_konp-kbtre NE 0. 
    ENDIF. 
    
    .... 
    
  ENDLOOP. 
  
  
*&---------------------------------------------------------------------* 
*&      Form  read_mara 
*&---------------------------------------------------------------------* 
die CHECK's werden allerdings nicht mehr ganz so gerne gesehen. Dafür kann man auch das Ganze mit IF machen:

Code: Alles auswählen.

IF sy-subrc NE 0. "nicht gleich !!!
  CONTINUE. "weiter mit nächsten Satz
ENDIF.
PS:
es gibt den TYPE-POOL 'abap', der die Konstanten 'abap_true' und 'abap_false', sowie den Typ 'abap_bool' (Typ C(1)) zur Verfügung stellt.
Damit ist dann eine Prüfung

Code: Alles auswählen.

IF p_price EQ abap_true.
möglich...
Um ihn zu benutzen, muss bei den globalen Variablenvereinbarungen ein

Code: Alles auswählen.

TYPE-POOLS: abap
eingefügt werden. ;)
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von babap (Expert / 681 / 1 / 1 ) »
Hallo,

wenn ich das ganze so betrachte, würde ich mal einen Blick in die BAPIs empfehlen um die Preise für bestimmte Materialien herauszufinen.

Gruß
babap

Beitrag von Alexi ( / / 0 / 3 ) »
Mahlzeit 8),

@ereglam .. hab's grad ausprobiert, Ergebnis bleibt aber gleich, ich erhalte, wenn ich mit * suche, nicht alle Materialien

@babap .. oh ja, BAPI hab ich schonmal gehört. Nur damit beschäftigt hab ich mich noch nicht. Wenn du also irgendwo nähere Infos hast, nur her damit :D

Grüßle, Alexi

Beitrag von ereglam (Top Expert / 1829 / 2 / 7 ) »
Selber Mahlzeit... :twisted:

häng mal das ganze Coding rein. Ich versteh' das nicht... :?
Gruß
Ereglam


May the Force be with your code
|| .| |.|| | .... . ..|. ||| .|. |.|. . |... . .|| .. | .... |.|| ||| ..| .|. |.|. ||| |.. .

Beitrag von Alexi (ForumUser / 15 / 0 / 0 ) »
hi,
ereglam hat geschrieben:Selber Mahlzeit... :twisted:
*ups*, da scheint jemand kein Mittag zu machen bzw. machen zu dürfen *s*.
häng mal das ganze Coding rein. Ich versteh' das nicht... :?
Hier isser .. so wie ich mich kenne hängt's sicherlich an irgendeiner anderen Stelle. Aber wer Zeit und Lust hat, kann den Code gerne mal auseinander pflücken und mir sagen, was er/sie anders /besser machen würde. Würde mir enorm weiterhelfen!

satte Grüße, Alexi

Code: Alles auswählen.

REPORT  z_meiner.

*******************************************************************
* DEKLARATIONEN
*******************************************************************

* TYPE POOLS ---------------------------------------------------- *

TYPE-POOLS: abap.

* TABLES -------------------------------------------------------- *

tables: mara,               "Materialstamm
        konp,               "Konditionen (Position)
        a006,               "Preislistentyp/Währung/Material
        t189.               "Konditionen: Preislistentypen

* INTERNE TABELLEN ---------------------------------------------- *

DATA: i_mara LIKE STANDARD TABLE OF mara WITH HEADER LINE,
      i_konp LIKE STANDARD TABLE OF konp WITH HEADER LINE,
      i_a006 LIKE STANDARD TABLE OF a006 WITH HEADER LINE.

DATA: i_vtexte TYPE STANDARD TABLE OF tline WITH HEADER LINE.

* HILFSFELDER --------------------------------------------------- *

DATA: vtext(100).           "Vertriebstext
DATA: count(2).             "Zähler

*******************************************************************
* SELECTION-SCREEN
*******************************************************************

* Info-Block ---------------------------------------------------- *

SELECTION-SCREEN BEGIN OF BLOCK info
                          WITH FRAME TITLE text-001.

SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN COMMENT 1(79) text-002.
SELECTION-SCREEN SKIP.

SELECTION-SCREEN END OF BLOCK info.


* Selektions Block ---------------------------------------------- *

SELECTION-SCREEN BEGIN OF BLOCK selection
                          WITH FRAME TITLE text-003.

SELECTION-SCREEN SKIP.

SELECT-OPTIONS i_matnr FOR mara-matnr.
PARAMETERS p_spras TYPE thead-tdspras DEFAULT sy-langu.
SELECT-OPTIONS i_pltyp FOR t189-pltyp DEFAULT '01' NO INTERVALS
                                                   NO-EXTENSION.

SELECTION-SCREEN SKIP.

PARAMETERS p_price AS CHECKBOX.

SELECTION-SCREEN SKIP.

SELECTION-SCREEN END OF BLOCK selection.


*******************************************************************
* INITIALIZATION
*******************************************************************

INITIALIZATION.

*******************************************************************
* START-OF-SELECTION
*******************************************************************

START-OF-SELECTION.

* Fehlermeldung, wenn Selektion nicht eingeschränkt wurde ------------ *
  IF i_matnr[]  IS INITIAL.
    MESSAGE s009.
    EXIT.
  ENDIF.

* Materialtdaten lesen ----------------------------------------------- *
  PERFORM read_mara.

* Preise lesen ------------------------------------------------------- *
  PERFORM read_a006.
  PERFORM read_konp.

************************************************************************
* END-OF-SELECTION
************************************************************************

END-OF-SELECTION.

* Ausgabe auf Bildschirm --------------------------------------------- *
  PERFORM ausgabe_screen.


*&---------------------------------------------------------------------*
*&      Form  read_mara
*&---------------------------------------------------------------------*
FORM read_mara.

* Initialisieren ----------------------------------------------------- *
  CLEAR:   i_mara.
  REFRESH: i_mara.

* MARA lesen --------------------------------------------------------- *

  SELECT * INTO TABLE i_mara
         FROM mara
         WHERE matnr IN i_matnr.
  SORT i_mara BY matnr.

  IF i_mara[]  IS INITIAL.
    MESSAGE s001.
    EXIT.
  ENDIF.

ENDFORM.                    " read_mara

*&---------------------------------------------------------------------*
*&      Form  ausgabe_screen
*&---------------------------------------------------------------------*
FORM ausgabe_screen.

  LOOP AT i_mara.

    CLEAR i_a006.
    CLEAR i_konp.
    CLEAR i_vtexte.
    CLEAR count.
    CLEAR vtext.

    READ TABLE i_a006 WITH KEY matnr = i_mara-matnr BINARY SEARCH.

    IF sy-subrc NE 0.
      CONTINUE. "weiter mit nächsten Satz
    ENDIF.


    READ TABLE i_konp WITH KEY knumh = i_a006-knumh BINARY SEARCH.

    IF sy-subrc NE 0.
      CONTINUE.
    ENDIF.

*    IF p_price EQ abap_true.
    IF p_price EQ 'X'. "oder IF p_price NOT IS INITIAL.
      CHECK i_konp-kbetr NE 0.
    ENDIF.
*
*    SELECT SINGLE knumh FROM a006
*          INTO i_a006-knumh
*          WHERE matnr = i_mara-matnr
*          AND pltyp IN i_pltyp
*         AND waerk = 'EUR'
*          AND datbi >= sy-datum
*          AND datab =< sy-datum.
*
*  SELECT single * from konp INTO i_konp
*            WHERE knumh = i_a006-knumh
*            AND konwa = 'EUR'
*            AND loevm_ko = ''.

    IF p_price = 'X'.
     CHECK i_konp-kbetr NE ''.
    ENDIF.

    LOOP AT i_vtexte WHERE tdformat = '*'.
      count = count + 2.
    ENDLOOP.

    RESERVE count LINES.
    SKIP.

    WRITE AT 001 i_mara-matnr.
    WRITE AT 127 i_mara-spart.

    IF i_konp-kbetr = ''.
      WRITE: AT 95 'Kein Preis!' COLOR 6 INVERSE INTENSIFIED.
    ELSE.
      WRITE AT 90  i_konp-kbetr.
    ENDIF.
    WRITE AT 113 i_konp-kznep.
    NEW-LINE.

* Vertriebstexte lesen ----------------------------------------------- *

    PERFORM vtext_lesen USING i_mara-matnr.

    IF sy-subrc = 4.
      NEW-LINE.
      WRITE: AT 21 'Kein Text vorhanden!' COLOR 6 INVERSE INTENSIFIED.
    ELSE.

      LOOP AT i_vtexte.

        IF i_vtexte-tdformat = '*' OR i_vtexte-tdformat = '/'
           AND sy-tabix > 1.
          WRITE: AT 20 vtext, / ' '.
          CLEAR vtext.
        ENDIF.

        CONCATENATE vtext i_vtexte-tdline INTO vtext SEPARATED BY space
.

      ENDLOOP.

      IF NOT vtext IS INITIAL.
        WRITE: AT 20 vtext.
        CLEAR vtext.
      ENDIF.

    ENDIF.



  ENDLOOP.

ENDFORM.                    " ausgabe_screen

*&---------------------------------------------------------------------*
*&      Form  read_a006
*&---------------------------------------------------------------------*
FORM read_a006.

* Initialisieren ----------------------------------------------------- *
  CLEAR:   i_a006.
  REFRESH: i_a006.

* A006 lesen --------------------------------------------------------- *

  SELECT * INTO TABLE i_a006
            FROM a006
            FOR ALL ENTRIES IN i_mara
            WHERE matnr = i_mara-matnr
            AND pltyp IN i_pltyp
            AND waerk = 'EUR'
            AND datbi >= sy-datum
            AND datab =< sy-datum

ORDER BY PRIMARY KEY.

*  SORT i_a006 BY knumh.


ENDFORM.                                                    " read_a006

*&---------------------------------------------------------------------*
*&      Form  read_konp
*&---------------------------------------------------------------------*
FORM read_konp.

* Initialisieren ----------------------------------------------------- *
  CLEAR:   i_konp.
  REFRESH: i_konp.

* KONP lesen --------------------------------------------------------- *

  SELECT * INTO TABLE i_konp
            FROM konp
            FOR ALL ENTRIES IN i_a006
            WHERE knumh = i_a006-knumh
            AND konwa = 'EUR'
            AND loevm_ko = ''.

  APPEND i_konp.

ENDFORM.                    " read_konp
*&---------------------------------------------------------------------*
*&      Form  vtext_lesen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_MARA_MATNR  Materialnummer
*----------------------------------------------------------------------*
FORM vtext_lesen USING    p_i_mara_matnr.

  DATA: name TYPE thead-tdname.

  MOVE p_i_mara_matnr TO name.
  MOVE '10' TO name+18.
  MOVE '10' TO name+22.

  CALL FUNCTION 'READ_TEXT'
       EXPORTING
            client                  = sy-mandt
            id                      = '0001'
            language                = p_spras  "sy-langu
            name                    = name
            object                  = 'MVKE'
       TABLES
            lines                   = i_vtexte
       EXCEPTIONS
            id                      = 1
            language                = 2
            name                    = 3
            not_found               = 4
            object                  = 5
            reference_check         = 6
            wrong_access_to_archive = 7
            OTHERS                  = 8.


ENDFORM.                    " vtext_lesen
[/code]

Vergleichbare Themen

5
Antw.
2566
Views
Auslesen des ABAP Codings
von Eddi » 24.07.2006 18:52 • Verfasst in ABAP® Core
0
Antw.
2816
Views
Ergebnisse Preisfindung
von SAP_ENTWICKLER » 05.06.2018 13:15 • Verfasst in SAP HANA für Anfänger
0
Antw.
1199
Views
kumulierte Ergebnisse - Wiedereintritt
von Fluff » 17.12.2007 15:55 • Verfasst in Human Resources

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.