Formular Mahnung in Sapscript

Getting started ... Alles für einen gelungenen Start.
13 Beiträge • Seite 1 von 1
13 Beiträge Seite 1 von 1

Formular Mahnung in Sapscript

Beitrag von Wowa (ForumUser / 11 / 1 / 0 ) » 15.10.2013 15:22
Hallo an alle,
Ich habe eine Frage an euch. Das Thema ist Formulardruck(F150_DUNN_01) in SAPSCRIPT.
Die Aufgabe ist eine Splittung der Mahngebühren auf die einzellnen Mahnstufen(Wenn gleiche Mahnstufe dann Addition der Mahngebühren).

Bsp.
BuKR Belegnummer Position Datum Verzugstage Mahnstufe Betrag
1000 100000021 2013 1 10.08.2013 60 1 1.855,88 EUR
1000 100000026 2013 1 15.08.2013 55 2 185,59 EUR

Zur zeit werden diese Mahnstufen ignoriert und es wird die Gasmtsumme ausgegeben.
Meine Aufgabeist so eine Ausgabe: Mahnstufe 1: 1.855,88 €
Mahnstufe 2: 185,59 €

Weil ich keine Kopie vom Druckprogramm erstellen kann(darf) soll ich es im Formular lösen.
Ich hatte die Idee das man auf das Feld Mahnstufe einen Loop setzt. Leider habe ich ich festgestellt das dieses Feld nicht mit einem Index anzusprechen ist.
Hätte einer von euch einen Tipp, wie ich das Problem vlt. im Formular doch lösen könnte?

Gruß
wowa


Re: Formular Mahnung in Sapscript

Beitrag von ratsnus (Specialist / 352 / 2 / 53 ) » 15.10.2013 17:04
servus wowa,

darfst du denn ein kleines Zprogramm anlegen in dem du aus dem Formular heraus eine eigene Routine aufrufst ?
dann sollte das kein Problem sein. falls ja können wir dir sicher weiterhelfen, falls du nicht weisst wie das aus SAPScript heraus funktioniert.

gruss
<:: XING-Gruppe Tricktresor::>

Re: Formular Mahnung in Sapscript

Beitrag von wreichelt (Expert / 826 / 19 / 142 ) » 15.10.2013 18:14
Hallo,

es gibt in Sapscript den Befehl 'Summing' bitte schaue Dir den mal an.

Gruß
Wolfgang

Re: Formular Mahnung in Sapscript

Beitrag von Wowa (ForumUser / 11 / 1 / 0 ) » 15.10.2013 19:04
Danke für die schnelle Antwort. :up:
Das mit der Funktion klingt zwar gut, kann mir aber nicht vorstellen das sie diese Unterscheidung zwischen Mahnstufen berücksichtigt.
Die erste Antwort finde ich ganz gut, aber in unserem Testsystem(IDIS) kann ich keine Custemizing bzgl. des Druckprogramms durchführen. Falls du aber einen Tipp hast wie man diese umgehen kann oder auch anders lösen kann bin ich dir sehr dankbar. Die Summenfunktion werde ich Morgen früh natürlich auch unter die Lupe nehmen. Wo genau würdest du die Schnittstelle einfügen? :!:

Re: Formular Mahnung in Sapscript

Beitrag von Tron (Top Expert / 1201 / 22 / 286 ) » 15.10.2013 20:36
Moin.
Das Mahndruckprogramm würde ich nicht anfassen, sondern im Formular ein PERFORM einbauen, der eine Formroutine (ABAP) aufruft.
siehe http://scn.sap.com/thread/429881
Die Gemeinheit ist, das der Datentype bei Fließkomma Daten in der Schnittstelle (falls Wert1 z.B. CURR ist) des Perfom verloren geht. Das Unterprogramm sieht nur CHAR (Struktur ITCSY).

Definition im SAPscript:
/: PERFORM GET_VALUE IN PROGRAM YFORM_ROUTINES
/: USING &WERT1&
/: USING &WERT2&
/: CHANGING &SUMME&
/: ENDPERFORM
Das Gegenstück / Definition im ABAP:

Code: Alles auswählen.

REPORT YFORM_ROUTINES.
FORM GET_VALUE TABLES IN_PAR STUCTURE ITCSY
OUT_PAR STRUCTURE ITCSY.

DATA: 
WERT1(20),
WERT2(20).

READ TABLE IN_PAR WITH KEY ‘WERT1’.
CHECK SY-SUBRC = 0.
Wert1 = IN_PAR-VALUE.

READ TABLE IN_PAR WITH KEY ‘WERT2’.
CHECK SY-SUBRC = 0.
wert2 = IN_PAR-VALUE.

READ TABLE OUT_PAR WITH KEY ‘SUMME’.
CHECK SY-SUBRC = 0.
OUT_PAR-VALUE = wert1 + wert2.
MODIFY OUT_PAR INDEX SY-TABIX.

ENDFORM.
Deine Aufgabe besteht also nun darin:
1.) eine geeignete Stelle im Formular zu finden, den PERFORM zu platzieren (sollte nur einmal am Anfang als Erstes durchlaufen werden).
2.) ein Programm anzulegen das die Unterscheidung/Wertfestellung vornimmt und in Form eines z.B. Summenwertes zurückgibt.
Da sich Decimals und Floatingpoints schlecht in den Formroutinen verarbeiten lassen, versuch doch mal den Funktionsbaustein
für die Datenbeschaffung innerhalb der Formroutine. Dann wäre das Übergabethema irrelevant.

Code: Alles auswählen.

CALL FUNCTION 'GET_SF_DUNN_DATA'
  EXPORTING
    is_sfparam              = is_sfparam
 IMPORTING
   ES_MHNK                    = mhnk
   ES_T001                    = t001
   ES_KNB5                    = knb5
   ES_LFB5                    = lfb5
   ES_T047                    = t047
   ES_T047C                   = t047c
   ES_T047I                   = t047i
   ES_T056Z                   = t056z
   ES_F150D                   = f150d
   ES_FSABE                   = fsabe
   ES_ADRNR                   = adrnr
   ES_UADRNR                  = uadrnr
   ES_ADRS                    = adrs
   ES_UADRS                   = uadrs
   ES_T047B                   = t047b
   eb_testprint               = testprint
   e_langu                    = langu
   e_lang2                    = lang2
   es_F150d_esr               = f150d_esr
   es_paymi                   = paymi
   es_paymo                   = paymo
 tables
    t_mhnd                    = th_mhnd
 EXCEPTIONS
   NO_PARAMETERS_FOUND       = 1
   OTHERS                    = 2
         .
IF sy-subrc <> 0.
   SY-MSGID = 'FM'.
   SY-MSGTY = 'E'.
   SY-MSGNO = 461.
   raise others.
ENDIF.
gruß Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Formular Mahnung in Sapscript

Beitrag von Wowa (ForumUser / 11 / 1 / 0 ) » 16.10.2013 09:48
Hallo Jens,
ich habe deinen Rat befolgt und in das Formular mein Perfom eingebaut. Nun wollte ich mit Hilfe des Funktionsbausteins('GET_SF_DUNN_DATA') die Daten auslesen. Leider kann ich mit dem Import(Mahnbereich Tabelle MHND, Feld smaber) nicht so viel anfangen. In dem Funktionsbaustein gibt es auch keine Doku. zum nachschauen. Könntest du mir kurz erklären wo ich diesen Importparameter herbekomme?


Gruß
wowa

Re: Formular Mahnung in Sapscript

Beitrag von wreichelt (Expert / 826 / 19 / 142 ) » 16.10.2013 10:44
Hallo Jens,

ich habe eine ergänzende Frage:
ich hole mittels Perform Daten ins Sapscript-Formular.
Das Feld das ich errechne ist ein Num. Feld (Bruttogewicht).
Im Sapscript zurück bekomme ich jedoch ein CHAR-Feld, natürlich kann ich das noch mittels
ABAP-Befehlen behandeln aber niemals so wie das mit einen NUM-Feld in Sapscript und den Aufbereitungen möglich ist.
Gibt's dazu Tipps ?

Hoffe ich konnte das gut erklären.
Danke und Gruß
Wolfgang

Re: Formular Mahnung in Sapscript

Beitrag von Tron (Top Expert / 1201 / 22 / 286 ) » 16.10.2013 14:35
Moin.
Die Schnittstelle zu GET_SF_DUNN_DATA ist ganz schön knifflig...geb ich zu. Selbst meine Google suche ergab keine rechten Antworten zur Versorgung des Importparameters is_sfparam.
hier nun meine Lösung zum Testen (ich habe keine Daten zum Mahnen, was nicht heißen soll, das wir nicht mahnen müssen ). :)

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*& Report  Z_MAHN_SF_DUNN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Z_MAHN_SF_DUNN.

data ls_mhnk type mhnk.

data ls_SFPARAM type SFPARAM.
data ES_MHNK type mhnk.
data T_MHND type table of MHND.

select single * from mhnk into ls_mhnk where
laufi = 'JP2' and LAUFD = '20130415' and kunnr = '0000002729'.

* The following statement is equivalent to: h_mhnk = is_sfparam-content.
 class CL_ABAP_CONTAINER_UTILITIES definition load.

CALL METHOD cl_abap_container_utilities=>fill_container_c
  EXPORTING
    im_value               = ls_mhnk
  IMPORTING
    ex_container           = ls_SFPARAM-CONTENT
  EXCEPTIONS
    illegal_parameter_type = 1
    others                 = 2
        .
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.


CALL FUNCTION 'GET_SF_DUNN_DATA'
  EXPORTING
    is_sfparam                = ls_SFPARAM
 IMPORTING
   ES_MHNK                   = ES_MHNK
*   ES_T001                   =
*   ES_KNB5                   =
*   ES_LFB5                   =
*   ES_T047                   =
*   ES_T047C                  =
*   ES_T047I                  =
*   ES_T056Z                  =
*   ES_F150D                  =
*   ES_FSABE                  =
*   ES_ADRNR                  =
*   ES_UADRNR                 =
*   ES_ADRS                   =
*   ES_UADRS                  =
*   ES_T047B                  =
*   EB_TESTPRINT              =
*   E_LANGU                   =
*   E_LANG2                   =
*   ES_F150D_ESR              =
*   ES_PAYMI                  =
*   ES_PAYMO                  =
*   ES_F150D2                 =
  tables
    t_mhnd                    = T_MHND
 EXCEPTIONS
   NO_PARAMETERS_FOUND       = 1
   OTHERS                    = 2.

IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
lg Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Formular Mahnung in Sapscript

Beitrag von Tron (Top Expert / 1201 / 22 / 286 ) » 16.10.2013 15:30
Moin Wolfgang.
wreichelt hat geschrieben:Das Feld das ich errechne ist ein Num. Feld (Bruttogewicht).
Also numerisches Feld ?
Bei mir ist BRGEW vom Typ QUAN und damit genau wie CURR ein Kandidat, den man wenns geht, nachliest.
Das kann man ggf. aus einer DB-Tabelle, oder mit "Dirty-Assign" aus dem Druckprogramm ;-)
lg Jens
<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Formular Mahnung in Sapscript

Beitrag von wreichelt (Expert / 826 / 19 / 142 ) » 16.10.2013 15:59
Hallo Jens,

ja das mit dem Typ ist richtig, aber auch nur ein Beispiel.
In dem Fall konnte das Gewicht nicht direkt gelesen werden und musste errechnet werden (Kundenwunsch !!).

Im Treiberprogramm wollte ich es nicht machen und habs mit Sapscript/Perform gemacht.
Leider mit dem unschönen Effekt, daß das Feld nicht wie &VBDKL-BRGEW& mittels Sapscripr Aufbereitung
behandelt werden konnte (zurück kam ja ein CHAR-Feld).

Noch Ideen ?
Gruß und Danke
Wolfgang

Re: Formular Mahnung in Sapscript

Beitrag von Tron (Top Expert / 1201 / 22 / 286 ) » 17.10.2013 22:39
Moin,
hier mal ein konkretes Beispiel wie man an die "sensiblen" CURR / QUAN etc. bequem herankommt, am Beispiel einer
Lieferung mit dem Sapscriptformular des Lieferscheins.
Ziel: Beschaffen des Bruttogewichts aus den Kopfdaten und nachrechnen des Nettogewichts aus den Positionen.
Bild

Wir suchen uns im Formular ein geeignetes "Plätzchen" ganz zu Anfang des Formularprozessierens.
Bild

Der Report, der unser Formular mit Daten versorgt, ist in diesem Fall RVADDN01 (siehe Nachrichtenart LD00 in der Transaktion NACE).
Der Aufbau des Druckprogramms ist für die meisten Sapscript Formulare identisch. (Nur Einkauf kriegt hier mal wieder ´ne Sonderlocke)
Am Anfang sind die Datendeklarationen.Alle Globalen Daten stehen auch dem Formular zur Verfügung.
Bild

In der Formroutine GET_DATA ist der eigentliche Baustein der das Formular mit Daten versorgt.
Das Ergebnis, Kopf und Positionsdaten, wollen wir einer Formroutine 1:1 zur verfügung stellen, um Berechnungen etc. durchzuführen.
Bild

Die Formroutine, welche die Daten direkt aus dem Druckprogramm holt und eine Verfälschung der "QUAN" Werte umgeht.
Sie wird aus dem Sapscript Formular aufgerufen. Wichtig ist, daß man hier möglichst genau Typisiert !
Das gilt insbesondere für die Feldsymbole und das Summenfeld !
Bild

Der Aufruf der Formroutine aus dem Formular. (der USING Parameter ist hier unnötig, war nur ein Test)
Bild

Das Ergebnis
Bild

falls Fragen sind, nur Mut...

gruß Jens

Folgende Benutzer bedankten sich beim Autor Tron für den Beitrag (Insgesamt 2):
wreicheltbadi_builder

<:: XING-Gruppe Tricktresor::>
Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen –
Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Re: Formular Mahnung in Sapscript

Beitrag von shapoc (ForumUser / 52 / 3 / 0 ) » 05.11.2013 12:27
Hallo zusammen,

ich habe ein weiterführendes Problem zum Mahnformular. Und zwar sollen nicht nur einzelnen Mahnstufen summiert werden, sondern da pro Mahnstufe unterschiedliche Währungen auftreten können, sollen diese wiederum pro Mahnstufe jeweils summiert unterhalb aufgelistet werden.

Die Daten habe ich mir über ein "PERFORM" im Formular selbst zusammensummiert und diese erstmal in einer internen Tabelle global gespeichert. Die Frage ist nun, wie ich diese im Formular ausgeben kann? Da die Anzahl der Währungen pro Mahnstufe dynamisch ist, weiß ich nicht, wie ich das über den Changing-Parameter des Performs machen könnte?? :?

Habe dann versucht ein weiteres Textelement zu definieren, das mir jeweils Mahnstufe-Währung-Summe ausgibt und wollte das dann aus meinem Perfom in einem Loop jeweils mit WRITE_FORM aufrufen. Leider wird das Textelement aber nicht angezeigt.

Ich bin etwas ratlos, wo ich ansetzen muss? Könnt ihr mir weiterhelfen?

Edit: Das Druckprogramm ist weiterhin das SAP Original und darf nicht geändert werden!

Danke und Grüße,
Shapoc

Re: Formular Mahnung in Sapscript

Beitrag von ratsnus (Specialist / 352 / 2 / 53 ) » 06.11.2013 09:35
hmm also das Textelement wird ja vom Druckprogramm mit Daten versorgt und aufgerufen,
daher kannst du soviele Textelemente definieren wie du willst wenn sie das Druckprogramm nicht kennt passiert, da genau nullkommanix.

nun ja das hilft dir jetzt nicht wirklich :D

wahrscheinlich musst du dich mal mit den BTE's beim Mahnen vertraut machen

Transaktion BERE

Attributtyp = A
Selektionsattribut = FI-AR-AR-DU

dort mal die Info's etc und google dazu fragen wie man damit umgeht.

gruss
ratsnus
<:: XING-Gruppe Tricktresor::>

Seite 1 von 1

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und besseren Inhalt:

Aktuelle Forenbeiträge

Last erzeugen im SAPGui?
vor 2 Tagen von tm987456 23 / 335
Neue Felder cji5
vor 2 Tagen von Rabea1103 1 / 33

Vergleichbare Themen

Smartforms Formular nach SAPscript Formular aufrufen
von walda33 » 26.01.2014 10:14
Konvertieren im Formular (SAPScript)
von Fredi » 15.06.2005 13:18
SAPSCRIPT Problem mit DIN A6 Formular
von strobbel » 22.07.2008 13:42
SAPSCRIPT Formular erweitern
von JORDAN » 09.03.2005 10:34
Logo auf SapScript-Formular
von acki-bm » 18.08.2004 09:19