Textkonvertierung von SAP nach .txt

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

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

Textkonvertierung von SAP nach .txt

Beitrag von LostDarkness (ForumUser / 87 / 15 / 6 ) »
Guten Tag liebe ABAP-Menschen,

ich stehe aktuell vor folgendem Problem:

Ich habe ein Programm, welches via Submit + Variante ein GIB-Template aufruft, die Ausgabetabelle des GIB exportiere ich dann in eine Memory ID und importiere diese dann in meinem eigenen Programm.
Dies funktioniert soweit wunderbar.
Ich erhalte wie erwartet meine ~ 23000 Datensätze.
In Folge dessen benötige ich einen kleinen Konvertierungsprozess um die Daten als .txt auf dem Applikationsserver ablegen zu können.

Mit geringen Datenmengen klappt dies absolut problemlos, sobald es aber an Datenmengen im fünfstelligen Bereich rankommt erfolgt immer wieder ein Programmabbruch mit unterschiedlichen Dumps.

Wenn ich ganz entspannt mein Programm debugge erfolgt die Ausführung vollkommen fehlerfrei, ohne jegliche Art von Dump.
Soweit ich es beobachten konnte erhalte ich bei der Ausführung des Funktionsbausteins 'SAP_CONVERT_TO_TEX_FORMAT' immer diese Programmabbrüche.

Ich habe mein Coding auch schon soweit angepasst das ich paketweise die Datensätze verarbeite, quasi so das ich immer nur 5000 Datensätze konvertieren lasse und erst im Anschluss dann das nächste Paket.

Ich hänge meinen aktuellen Programmcode mal an, vielleicht kann mir ja jemand helfen.

PS: Das Programm soll als Job eingeplant werden, also ist Hintergrundverarbeitung absolut notwendig.
PSS: Die gängigen aufgetretenen Dumps sind "MESSAGE_TYPE_X" in CL_GUI_ALV_GRID===============CP oder "Editable Grid not operational Offline" in CL_GUI_CFW====================CP.

Vielen Dank
Liebe Grüße
Gerrit

Code: Alles auswählen.

REPORT zmm_download_wm_best.

CONSTANTS:
  gc_tab  TYPE c VALUE cl_bcs_convert=>gc_tab,
  gc_crlf TYPE c VALUE cl_bcs_convert=>gc_crlf.

TYPES: tw_select_tab TYPE zmm_gib_mm_wm_best_output,
       tt_select_tab TYPE STANDARD TABLE OF tw_select_tab.

TYPES: BEGIN OF tw_grid_tab.
        INCLUDE TYPE tw_select_tab.

TYPES: icon01(30)    TYPE c,
       icon02(30)    TYPE c,
       icon03(30)    TYPE c,
       icon04(30)    TYPE c,
       icon05(30)    TYPE c,
       info(4)       TYPE c,
       colinfo       TYPE lvc_t_scol,
       style         TYPE lvc_t_styl,
       lights(1)     TYPE c,
       checkbox(1)   TYPE c,
       row_index     TYPE sytabix,
       updkz         TYPE char01,
       dnd_std       TYPE lvc_t_drdr,
       dnd_cust      TYPE /gib/tbox_dnd_behavior_field_t,
       edit_rowid    TYPE sytabix,
       edit_updkz(1) TYPE c.

TYPES: END OF tw_grid_tab.
TYPES: tt_grid_tab TYPE STANDARD TABLE OF tw_grid_tab.
DATA: lit_import  TYPE tt_grid_tab,
      lwa_import  LIKE LINE OF lit_import.

DATA: gt_params   TYPE TABLE OF rsparams.
DATA: reportname  TYPE syrepid.

DATA: lit_char    TYPE TABLE OF zmm_gib_mm_wm_best_output,
      lwa_char    LIKE LINE OF lit_char.

DATA: lit_csv     TYPE truxs_t_text_data,
      lwa_csv     LIKE LINE OF lit_csv.

DATA: lit_binary_content TYPE solix_tab,
      lwa_binary_content LIKE LINE OF lit_binary_content.

DATA: lv_size     TYPE so_obj_len.
DATA: lv_string   TYPE string.

DATA: lv_file     TYPE string,
      l_msg       TYPE string.

DATA: ct_fieldcat TYPE slis_t_fieldcat_alv,
      ls_fieldcat LIKE LINE OF ct_fieldcat,
      lv_header   TYPE string.

DATA: gv_lines     TYPE i,
      lv_nr        TYPE i VALUE 5000,
      lv_init      Type i value 0.

lv_file = |/usr/sap/{ sy-sysid(1) }10/trans/BIDATA/ZLO8N_Daten_neu.txt|.

reportname = 'ZMM_GIB_MM_WM_BEST'.

SUBMIT (reportname) USING SELECTION-SET 'DOWNLOAD'
       AND RETURN.

IMPORT lit_export TO lit_import FROM MEMORY ID 'ZMM_DOWNLOAD_WM_BEST'.
DELETE FROM MEMORY ID 'ZMM_DOWNLOAD_WM_BEST'.

OPEN DATASET lv_file FOR OUTPUT IN BINARY MODE MESSAGE l_msg.
IF sy-subrc <> 0.
  MESSAGE l_msg TYPE 'E'.
ENDIF.

gv_lines = lines( lit_import ).

PERFORM fieldcat_merge.

PERFORM import.

CLOSE DATASET lv_file.

FORM conv .
    
  CALL FUNCTION 'SAP_CONVERT_TO_TEX_FORMAT' 
    EXPORTING
      i_field_seperator    = '|'
    TABLES
      i_tab_sap_data       = lit_char
    CHANGING
      i_tab_converted_data = lit_csv
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.
  IF sy-subrc <> 0.
    MESSAGE 'Fehler bei Textkonvertierung' TYPE 'I'.
  ENDIF.

  LOOP AT lit_csv INTO lwa_csv .
    CASE sy-tabix.
      WHEN 1.
        CONCATENATE lwa_csv gc_crlf INTO lv_string .
      WHEN OTHERS.
        CONCATENATE lv_string lwa_csv gc_crlf INTO lv_string .
    ENDCASE.
  ENDLOOP.

  lv_string = lv_header && lv_string.

  TRY. 
      cl_bcs_convert=>string_to_solix(
        EXPORTING
          iv_string   = lv_string
          iv_codepage = ''  "suitable for MS Excel, leave empty
          iv_add_bom  = 'X'     "for other doc types
        IMPORTING
          et_solix  = lit_binary_content
          ev_size   = lv_size ).
    CATCH cx_bcs.
      MESSAGE e445(so).
  ENDTRY.

  LOOP AT lit_binary_content INTO lwa_binary_content.
    TRANSFER lwa_binary_content-line TO lv_file.
  ENDLOOP.

endform.                    " CONV

FORM fieldcat_merge .

  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' 
    EXPORTING
      i_structure_name       = 'ZMM_GIB_MM_WM_BEST_OUTPUT'
    CHANGING
      ct_fieldcat            = ct_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.

  LOOP AT ct_fieldcat INTO ls_fieldcat .
    CASE sy-tabix.
      WHEN 1.
        CONCATENATE lv_header ls_fieldcat-fieldname INTO lv_header.
      WHEN OTHERS.
        CONCATENATE lv_header ls_fieldcat-fieldname INTO lv_header SEPARATED BY '|'.
    ENDCASE.
  ENDLOOP.

ENDFORM.                    " FIELDCAT_MERGE

FORM import .

  LOOP AT lit_import INTO lwa_import.
    IF sy-tabix >= lv_init and sy-tabix <= lv_nr.
      MOVE-CORRESPONDING lwa_import TO lwa_char.
      APPEND lwa_char TO lit_char.
      CLEAR lwa_char.
    ELSE.
      IF lv_init <= gv_lines.
        lv_nr = lv_nr + 5000.
        lv_init = lv_init + 5000.
        PERFORM conv.
        PERFORM import.
      ELSE.
        EXIT.
      ENDIF.
    ENDIF.
  ENDLOOP.

ENDFORM.                    " IMPORT
“You should name a variable using the same care with which you name a first-born child.”
― Robert C. Martin

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


Re: Textkonvertierung von SAP nach .txt

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Da die Fehlermeldungen auf das CFW und ALV-Grid verweisen:
Lass im Batch-Modus (SY-BATCH = 'X') die Instanzierung (CREATE OBJECT) des CL_GUI_CUSTOM_CONTAINER für dein ALV-Grid weg und schon sollte es klappen.
Eventuell schalte auch das Grid auf "nicht eingabebereit"
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Textkonvertierung von SAP nach .txt

Beitrag von LostDarkness (ForumUser / 87 / 15 / 6 ) »
a-dead-trousers hat geschrieben:Da die Fehlermeldungen auf das CFW und ALV-Grid verweisen:
Lass im Batch-Modus (SY-BATCH = 'X') die Instanzierung (CREATE OBJECT) des CL_GUI_CUSTOM_CONTAINER für dein ALV-Grid weg und schon sollte es klappen.
Eventuell schalte auch das Grid auf "nicht eingabebereit"
Guten Tag und vielen Dank schon mal.

Die Instanzierung des CL_GUI_CUSTOM_CONTAINER während eines Hintergrundprozesses wird grundsätzlich schon abgefangen.

Haben Sie möglicherweise eine Idee wie ich die Eingabebereitschaft abgeschaltet kriege, ohne das GIB selbst dauerhaft einzuschränken?

Herzlichsten Dank.
Gerrit

EDIT:
Ich habe die Eingabebereitschaft für die Felder nun auch via sy-batch = 'X' abgefangen, falls jemand eine sauberere Möglichkeit kennt, nehme ich diese gerne an.
Dump erfolgt aber nach wie vor.
Informationen zur Abbruchstelle
Der Abbruch trat im ABAP-Programm "CL_GUI_ALV_GRID===============CP" auf, und
zwar in
"SET_READY_FOR_INPUT". Das Hauptprogramm war "ZMM_GIB_MM_WM_BEST ".

Im Quelltext befindet sich die Abbruchstelle in Zeile 8
des (Include-)Programms "CL_GUI_ALV_GRID===============CM03J".
Das Programm "CL_GUI_ALV_GRID===============CP" wurde in einem Hintergrund-Job
gestartet.

Code: Alles auswählen.

method set_ready_for_input .

  data: l_lines type i.
  field-symbols <l_tab> type standard table.

  if not ( offline( ) is initial ) .
    if ( not i_ready_for_input is initial ).
 >>>>>>>>>>>   message x000(0k) with 'Editable Grid not operational Offline'. " HIER ERFOLGT DER DUMP
                                                            "#EC NOTEXT
    endif.
    m_edit_global = space.
    m_init_toolbar = 'X'.
    exit.
  endif.

  m_edit_global  = i_ready_for_input.
  m_init_toolbar = 'X'.

  call method me->set_ready_for_input_internal.

  if me->m_performance eq 'X' and
     me->m_roids_sent eq space.
    call method me->set_row_id
      exporting
        row_id_table = mt_roid.

    m_roids_sent = 'X'.
EDIT2:
Weitere Fehlermeldung:
Fehleranalyse
In dem Programm "CL_GUI_CFW====================CP" wurde durch eine
RAISE-Anweisung die Exception
(Ausnahmebedingung) "CNTL_ERROR" ausgelöst.
Da die Exception nicht durch ein in der Aufrufhierarchie darüber-
liegendes Programm abgefangen ist, wurde die Verarbeitung abgebrochen.

Code: Alles auswählen.

METHOD UPDATE_VIEW.
* ...
  CALL FUNCTION 'AC_SYSTEM_FLUSH'
       exporting CALLED_BY_SYSTEM = called_by_system
       EXCEPTIONS
            CNTL_SYSTEM_ERROR = 1
            CNTL_ERROR        = 2
            OTHERS            = 3.

  CASE SY-SUBRC.
    WHEN 0.
    WHEN 1.                            "// system_error
      RAISE CNTL_SYSTEM_ERROR.
    WHEN 2.                            "// method_call_error
      RAISE CNTL_ERROR.
    WHEN 3.                            "// property_set_error
      RAISE CNTL_ERROR.
    WHEN 4.                            "// property_get_error
      RAISE CNTL_ERROR.
    WHEN OTHERS.
      RAISE CNTL_ERROR.
  ENDCASE.

ENDMETHOD.
“You should name a variable using the same care with which you name a first-born child.”
― Robert C. Martin

Re: Textkonvertierung von SAP nach .txt

Beitrag von a-dead-trousers (Top Expert / 4271 / 213 / 1140 ) »
Du musst beim SET_READY_FOR_INPUT einen leeren Wert übergeben.
Im Feldkatalog darf auch kein Feld enthalten sein, dass EDIT aktiviert hat.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
LostDarkness

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Textkonvertierung von SAP nach .txt

Beitrag von LostDarkness (ForumUser / 87 / 15 / 6 ) »
a-dead-trousers hat geschrieben:Du musst beim SET_READY_FOR_INPUT einen leeren Wert übergeben.
Im Feldkatalog darf auch kein Feld enthalten sein, dass EDIT aktiviert hat.
Das hat funktioniert, vielen Dank! :)
“You should name a variable using the same care with which you name a first-born child.”
― Robert C. Martin

Seite 1 von 1

Ü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

Aktuelle Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

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

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Interne Tabelle
vor 5 Tagen von black_adept 2 / 133
MaLo-Checker in ABAP
vor einer Woche von A6272 6 / 254

Unbeantwortete Forenbeiträge

Zwischensumme Adobe Forms
vor 2 Tagen von Lucyalison 1 / 64
Group Items auf einer Filterbar
vor einer Woche von Bright4.5 1 / 107
tRFC Transaktionen SM58
vor 4 Wochen von A6272 1 / 140