DUMP bei versenden durch SOST

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

DUMP bei versenden durch SOST

Beitrag von h1as (ForumUser / 19 / 0 / 1 ) »
Hi, bin ziemlicher Anfänger und habe ein kleines Program geschrieben, welches alle Materialien die in den nächsten 9 Monaten auslaufen (MSTAV in Vertrieb 1) selektiert und per Mail in einem einer HTML Tabelle ausgeben soll.

Funktioniert soweit und in der SOST erscheint ein Sendeauftrag. Sobald ich den rauschicken will kommt aber ein DUMP.
Das komische ist für einzelne Materialien hat es bereits funktioniert und das mail ist raus, jetzt befinden sich ca. 30 Materialen in it_mara und es kommt folgende Meldung.

Unzulässiger Teilfeldzugriff: Länge 0 In dem laufenden Programm "SAPFSSOA" sollte auf das Feld "SOLI" mit der
Länge 0 zugegriffen werden. Ein Teilfeldzugriff mit Längenangabe 0 ist jedoch nicht erlaubt.

l_param_head = soli(moff).

Code: Alles auswählen.

form objhead_param_get_internal using objhead type soli_tab
                             changing param   type c
                                      value   type c
                                      tabix   type sytabix.

  data soli type soli.
  data found type c.
  data moff type i.
  data l_param_search type soli-line.
  data l_param_head type soli-line.
  data l_tabix type sytabix.

  clear: value, tabix.

  find '=' in param match offset moff.
  if moff > 0.
    param = param(moff).
  endif.
  l_param_search = param.
  translate l_param_search to upper case.                  "#EC SYNTCHAR

  loop at objhead into soli.
    l_tabix = sy-tabix.
    clear moff.
    find '=' in soli-line match offset moff.
    check sy-subrc = 0.
    l_param_head = soli(moff).
    translate l_param_head to upper case.                  "#EC SYNTCHAR
    if l_param_head = l_param_search.
      add 1 to moff.
      value = soli+moff.
      tabix = l_tabix.
      return.
    endif.
  endloop. 



Mein Programm:


Code: Alles auswählen.

 DATA: idate type d,
       edate type d.

parameters d type marc-werks.
parameters e type c length 4.

 TYPES: BEGIN OF t_mara,
     MATNR     LIKE mara-matnr,
     MSTAV     LIKE mara-mstav,
     MSTDV     LIKE mara-MSTDV,
     END OF t_mara.

 DATA it_mara type standard table of t_mara with header line.

* data for send function
DATA: DOC_DATA  LIKE SODOCCHGI1,
OBJECT_ID LIKE SOODK,
mailtxt   LIKE SOLI OCCURS 10 WITH HEADER LINE,
RECEIVER  LIKE SOMLRECI1 OCCURS 1 WITH HEADER LINE,
t_html TYPE STANDARD TABLE OF w3html,
t_fields TYPE STANDARD TABLE OF w3fields WITH HEADER LINE,
t_header TYPE STANDARD TABLE OF w3head WITH HEADER LINE,
lt_mara TYPE lvc_t_fcat WITH HEADER LINE,
w_head TYPE w3head,
wa_header TYPE w3head.

idate = syst-datum.

 CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
   EXPORTING
     DATE      = idate
     DAYS      = 0
     MONTHS    = 9
     SIGNUM    = '+'
     YEARS     = 0
   IMPORTING
     CALC_DATE = edate.


 SELECT MATNR MSTAV MSTDV FROM MARA INTO corresponding fields of table it_mara
 WHERE MSTAV EQ '05'
 AND MSTDV BETWEEN idate AND edate.

CHECK it_mara[] IS NOT INITIAL.

* Mail Text für Überschrift

  wa_header-text = 'Folgende Materialen laufen demnächst aus' .
  wa_header-font = 'Arial'.
  wa_header-size = '2'.

* Tabelle Spalten Header
 lt_mara-coltext = 'Materialnummer'.
  APPEND lt_mara.
  lt_mara-coltext = 'Mat. Status'.
  APPEND lt_mara.
  lt_mara-coltext = 'Auslaufdatum'.


REFRESH t_html.

LOOP AT lt_mara.

w_head-text = lt_mara-coltext.
*-Populate the Column Headings
    CALL FUNCTION 'WWW_ITAB_TO_HTML_HEADERS'
      EXPORTING
        field_nr = sy-tabix
        text     = w_head-text
        fgcolor  = 'black'
        bgcolor  = 'gray'
      TABLES
        header   = t_header.
*-Populate Column Properties
    CALL FUNCTION 'WWW_ITAB_TO_HTML_LAYOUT'
      EXPORTING
        field_nr = sy-tabix
        fgcolor  = 'black'
        size     = '3'
      TABLES
        fields   = t_fields.

     ENDLOOP.



CALL FUNCTION 'WWW_ITAB_TO_HTML' "Convert Internal Table to HTML Table
 EXPORTING

   table_header   = wa_header

  TABLES
   html        = t_html
   fields      = t_fields
   row_header   = t_header
   itable       = it_mara.

* insert receiver (sap name)
  REFRESH RECEIVER.
  CLEAR RECEIVER.
  MOVE: e TO RECEIVER-RECEIVER,
        'X'      TO RECEIVER-EXPRESS,
        'C'      TO RECEIVER-REC_TYPE.
  APPEND RECEIVER.

* insert mail description
  WRITE 'End of Production Material Report'
                 TO DOC_DATA-OBJ_DESCR.

CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
     EXPORTING
          DOCUMENT_DATA              = DOC_DATA
          document_type              = 'HTM'

     IMPORTING
          NEW_OBJECT_ID              = OBJECT_ID
     TABLES
          OBJECT_Header              = t_html
          OBJECT_CONTENT             = t_html
          RECEIVERS                  = RECEIVER
     EXCEPTIONS
          TOO_MANY_RECEIVERS         = 1
          DOCUMENT_NOT_SENT          = 2
          DOCUMENT_TYPE_NOT_EXIST    = 3
          OPERATION_NO_AUTHORIZATION = 4
          PARAMETER_ERROR            = 5
          X_ERROR                    = 6
          ENQUEUE_ERROR              = 7
          OTHERS                     = 8.

    IF sy-subrc EQ 0.

      commit work.

    ENDIF.
Bin für jeden Hinweis dankbar!

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


Re: DUMP bei versenden durch SOST

Beitrag von ralf.wenzel (Top Expert / 3930 / 200 / 281 ) »
[quote="h1as"]Hi, bin ziemlicher Anfänger[/quote="h1as"]

...was an sich kein Problem ist, aber wer auch immer dir gezeigt hat, wie man im SAP programmiert, er macht seinen Job wirklich nicht besonders gut. Kein Vorwurf an dich, aber ich möchte dir zumindest erklären, womit du bei jedem, der dein Programm mal warten soll, zu Haareraufen beiträgst.

Aber zunächst: "find '=' in soli-line match offset moff." scheint moff auf 0 zu setzen, deshalb geht "l_param_head = soli(moff)." in die Hose. Welche Konstellation dazu führt, dass der sy-subrc 0 ist und der Offset auch, kann ich gerade nicht sagen, ich würde vor dem FIND mal einen Breakpoint setzen und mir die Tabellenzeile im Debugger ansehen, da wird dir sicher schnell auffallen, was "krumm" ist.

Die restlichen Hinweise betreffen den Programmierstil:

marc-werks ist kein Typ, sondern ein Feld eines bestimmten Typs. Ich weiß, dass das funktioniert, aber das macht es nicht richtiger. Deklarationen mit LIKE tun mir persönlich im Auge weh, auch da gibt es einen Typ, auf den man referenzieren kann. Richtig übel finde ich, dass selbst die halbautomatische Quelltexterzeugung (per Muster) sowas erzeugt. Die SAP hat dazugelernt und im OO-Kontext einige Sachen verboten, die man auch im prozeduralen Umfeld nicht mehr tun sollte.

"occurs x" hat man in den 80er Jahren geschrieben, "with header line" ist auch gruselig, weil man so eine Struktur erzeugt, die denselben Namen hat wie die Tabelle (dann muss man so "Krücken" bauen wie "clear it_mara[]" in deinem Coding oder die völlig nutzlose Anweisung "refresh" verwenden). Variablennamen in Programmen sollten eindeutig sein, so hat ein APPEND immer eine Quelle und ein Ziel (append struc to tab). Wie es richtig geht, schreibst du in deinem Coding selbst: "type standard table".

Du solltest dich entscheiden, ob du Tabellen t_... oder lt_... schreibst, das zu mischen macht dein Coding nicht lesbarer. Ich persönlich kann grundsätzlich nicht verstehen, was diese Vorsätze sollen -- ein Bekannter von mir sagt immer "sowas schreiben Leute, die nicht programmieren können". Abgesehen von Konstanten (die bei mir praktisch immer global sind, ich benutze sie gern, um eine gewisse Parametrisierbarkeit zu gewährleisten) verwende ich grundsätzlich nur lokale Felder, so kriegt man eine FORM-Routine auch so hin, dass man sie kopieren und woanders einsetzen kann. Selbst da, wo das nicht geht (z. B. user-command-Form-Routine in REUSE-FuBau, die Schnittstelle stellt die ALV-Tabelle nicht zur Verfügung) kopiere ich die globale Tabelle in eine lokale und wieder zurück.

Richtig konfus ist das bei einem Kunden, der für Feldsymbole verbindlich <fs_...> vorschreibt. Erstens sehe ich an den spitzen Klammern, dass es sich um ein Feldsymbol handelt und WENN ich schon ein Präfix nehme, dann eines, das darauf hinweist, worauf es zeigt, also <ls_...> für ein lokales Feldsymbol, das auf eine Struktur zeigt, <lt_...> für eines, das auf eine Tabelle zeigt. Seit fünf Jahren weise ich auf diesen Schwachsinn in den Programmierrichtlinien hin.

Und zum Abschluss: Literale im Programm sind nicht übersetzbar. Das ist bei der Schriftart OK, beim Mailbetreff auf gar keinen Fall. Es ist dabei vollkommen egal, ob das notwendig ist oder nicht, aber ein kurzes Anhängen von "(xxx)" für das Textsymbol sollte immer möglich sein, es macht nix kaputt und glaub mir, ich kenne eine hohe DREIstellige Zahl von Programmen, die ich in meinen 15 Jahren SAP kennengelernt habe, die dann wider Erwarten DOCH übersetzt werden mussten, auch wenn das Programm schon zehn Jahre alt war und neun Jahre davon ganz sicher war, dass dies nie passieren würde.

In diesem Sinne: Viel Spaß bei der Entwicklung in ABAP (und das macht sie meistens wirklich!) und herzlich willkommen in der SAP-Entwicklergemeinde....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: DUMP bei versenden durch SOST

Beitrag von h1as (ForumUser / 19 / 0 / 1 ) »
Hallo Ralf,

Danke für deinen Input. Ich bin kein Programmierer und werde wohl auch nie einer werden :). Werde in Zukunft versuchen deine Ratschläge zu beherzigen.


soli-line hat folgenden Inhalt
="0" ><font color=black size=3 >05</font></td><td tabindex="0" ><font color=black size=3 >01.04.2014</font></td><td tabindex="0" ><font color=black size=3 >5040</font></td><td tabindex="0" ><font
color=black size=3 >AM</font></td></tr><tr><td tabindex="

find '=' in soli-line match offset moff.
check sy-subrc = 0.
l_param_head = soli(moff).

Die Ursache ist mir damit klar, aber wie kann ich das abfangen ? Objhead enhält Zeile für Zeile den gesamten konvertierten HTML Text und da wird zufällig immer wieder eine Zeile mit = beginnen.

Re: DUMP bei versenden durch SOST

Beitrag von ralf.wenzel (Top Expert / 3930 / 200 / 281 ) »
HTML in Mails gehört verboten. Das war immer richtig und wird immer richtig sein. Schon, weil es eine Sicherheitslücke ist.

Ich würde versuchen, den Text umzuformatieren, also das Gleichheitszeichen in die Zeile davor zu verschieben oder dem letzten Wort der vorigen Zeile umzubrechen.

Im Moment frage ich mich, warum die SAP Gleichheitszeichen im Text sucht....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Seite 1 von 1

Vergleichbare Themen

1
Antw.
772
Views
Job mit RSCONN01 versenden SOST
von Manfred K. » 07.12.2021 10:30 • Verfasst in ABAP® für Anfänger
2
Antw.
1264
Views
Mail versenden in ABAP - Status in SOST
von PeterPaletti » 12.09.2024 08:31 • Verfasst in ABAP® für Anfänger
3
Antw.
1786
Views
Einträge in SOST zu unterschiedlichen Zeiten versenden
von wehrda » 03.03.2022 16:34 • Verfasst in ABAP Objects®
0
Antw.
1129
Views
[Sost] Fax
von RockyAM » 14.09.2011 16:49 • Verfasst in ABAP® Core
5
Antw.
3768
Views
Transaktion SOST
von JohnLocklay » 05.06.2019 10:40 • Verfasst in ABAP® Core

Über diesen Beitrag


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

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor einer Stunde von ralf.wenzel 21 / 11227
Dialog-Container mit Toolbar/Status
vor 22 Stunden von black_adept gelöst 27 / 4328
IT0024 Qualifikationen CP-ID
Gestern von ArjenR 1 / 219

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.

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor einer Stunde von ralf.wenzel 21 / 11227
Dialog-Container mit Toolbar/Status
vor 22 Stunden von black_adept gelöst 27 / 4328
IT0024 Qualifikationen CP-ID
Gestern von ArjenR 1 / 219

Unbeantwortete Forenbeiträge

IT0024 Qualifikationen CP-ID
Gestern von ArjenR 1 / 219
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 3150
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9743