gelöst Langtexte: Zeilenumbruch bei Excel-Import


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon xGabriel » 13.11.2018, 09:21

Viiiiiiieeeelen vielen Dank a-dead-trousers, du bist der Hammer!! :up:
Jetzt klappts, hätt ich alleine niemals hingekriegt!

2 Kleinigkeiten hab ich noch in meinem Programm, die für dich als Experte sicher kein Problem darstellen, wäre toll wenn du hier noch ne Lösung für mich hast.

Der Textname von Vertriebstexten im Materialstamm (ID: 0001 , Objekt: MVKE) wird je nach Materialnummer auf 2 Arten gebildet. Im Excel soll man natürlich nur die Materialnummer eingeben und das Programm sollte automatisch den richtigen Namen bilden:

1.) Material hat nur Ziffern: zB: 1801 , VkOrg: 1010 , VtWeg 00 --> Material wird auf 18 Stellen mit führenden Nullen aufgefüllt und mit VkOrg+VtWeg mit 24 Stellen dargestellt --> Textname = 000000000000001801101000
Dies habe ich hinbekommen, doch den 2. Fall bekomme ich nicht ganz hin:

2.) Material beinhaltet Buchstaben oder Sonderzeichen (zB: . , - , _) : zB: 45-0800-01 (hat 10 Stellen) VkOrg: 1010 , VtWeg 00 --> nun wird das Material ganz links gestellt und die 18 Stellen werden mit Leerzeichen aufgefüllt --> Textname ist dann: 45-0800-01 101000 (8 Leerzeichen zwischen Material und Vertriebsbereich, in Summe wieder 24 Stellen)

Somit brauche ich hier ein Coding, welches mir dynamisch die Leerzeichen berechnet. Ich habe mir nun mal die Differenz der Materiallänge berechnet und eine Variable mit dem Wert ' ' angelegt. Doch nun müsste ich es noch irgendwie hinkriegen, dass ich sage --> Differenz = Anzahl an ' ' nach der Materialnummer. Oder bin ich hier komplett auf dem Holzweg und es gibt eine viel einfachere Lösung?

Code: Alles auswählen

DATA:
    gv_matsize(2)   TYPE c,
    gv_space(18)    TYPE c VALUE ' ',
    gv_diff(2)      TYPE c.

  gv_matsize = strlen( wa-textname ) .
  gv_diff = 18 - gv_matsize.
  gv_matnr2 = wa-textname.

  CONCATENATE      "funktioniert natürlich so nicht, da mir der Befehl für gv_diff = Anzahl an gv_space fehlt
  gv_matnr2
  gv_space
  gv_vertrieb1
  INTO gv_mvke2.

 



Der Text wird wie gesagt dank dir jetzt im richtigen Format eingefügt, jedoch wird der Text immer in Anführungszeichen gesetzt, sprich vorm ersten Buchstaben des Excel-Text und nach dem letzten erscheint ein " .
Für mein Programm wird die Funktionsgruppe ALSMEX (mit dem FUBA: ALSM_EXCEL_TO_INTERNAL_TABLE) verwendet.

Hier ist im TOP-INCLUDE folgendes deklariert:

Code: Alles auswählen
CONSTANTS:  gc_esc              VALUE '"'.


Ich vermute es hängt damit zusammen. Weiters gibt es dann 3 Forms, welche die Excel aufbauen bzw. für die Konvertierung verantwortlich sind. Hier muss ich vermutlich irgendwas ändern, doch ich habe keinen Plan was.
Habe probiert jede Zeile wo gc_esc vorkommt (und auch gc_esc selbst) auszusternen, aber dies bringt nicht den gewünschten Erfolg.

Dies wären die 3 Forms:

Code: Alles auswählen

FORM separated_to_intern_convert TABLES i_tab       TYPE ty_t_sender
                                        i_intern    TYPE ty_t_itab
                                 USING  i_separator TYPE c.
  DATA: l_sic_tabix LIKE sy-tabix,
        l_sic_col   TYPE kcd_ex_col.
  DATA: l_fdpos     LIKE sy-fdpos.

  REFRESH i_intern.

  LOOP AT i_tab.
    l_sic_tabix = sy-tabix.
    l_sic_col = 0.
    WHILE i_tab CA i_separator.
      l_fdpos = sy-fdpos.
      l_sic_col = l_sic_col + 1.
      PERFORM line_to_cell_separat TABLES i_intern
                                   USING  i_tab l_sic_tabix l_sic_col
                                          i_separator l_fdpos.
    ENDWHILE.
    IF i_tab <> space.
      CLEAR i_intern.
      i_intern-row1 = l_sic_tabix.
      i_intern-col1 = l_sic_col + 1.
      i_intern-value = i_tab.
      APPEND i_intern.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " SEPARATED_TO_INTERN_CONVERT
*---------------------------------------------------------------------*
FORM line_to_cell_separat TABLES i_intern    TYPE ty_t_itab
                          USING  i_line
                                 i_row       LIKE sy-tabix
                                 ch_cell_col TYPE kcd_ex_col
                                 i_separator TYPE c
                                 i_fdpos     LIKE sy-fdpos.
  DATA: l_string   TYPE ty_s_senderline.
  DATA  l_sic_int  TYPE i.

  CLEAR i_intern.
  l_sic_int = i_fdpos.
  i_intern-row1 = i_row.
  l_string = i_line.
  i_intern-col1 = ch_cell_col.
* csv Dateien mit separator in Zelle: --> ;"abc;cd";
  IF ( i_separator = ';' OR  i_separator = ',' )
     AND l_string(1) = gc_esc.
      PERFORM line_to_cell_esc_sep USING l_string
                                         l_sic_int
                                         i_separator
                                         i_intern-value.
  ELSE.
    IF l_sic_int > 0.
      i_intern-value = i_line(l_sic_int).
    ENDIF.
  ENDIF.
  IF l_sic_int > 0.
    APPEND i_intern.
  ENDIF.
  l_sic_int = l_sic_int + 1.
  i_line = i_line+l_sic_int.
ENDFORM.

*---------------------------------------------------------------------*
FORM line_to_cell_esc_sep USING i_string
                                i_sic_int      TYPE i
                                i_separator    TYPE c
                                i_intern_value TYPE ty_d_itabvalue.
  DATA: l_int TYPE i,
        l_cell_end(2).
  FIELD-SYMBOLS: <l_cell>.
  l_cell_end = gc_esc.
  l_cell_end+1 = i_separator .

  IF i_string CS gc_esc.
    i_string = i_string+1.
    IF i_string CS l_cell_end.
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 2.
      i_sic_int = l_int.
      i_string = i_string+l_int.
    ELSEIF i_string CS gc_esc.
*     letzte Celle
      l_int = sy-fdpos.
      ASSIGN i_string(l_int) TO <l_cell>.
      i_intern_value = <l_cell>.
      l_int = l_int + 1.
      i_sic_int = l_int.
      i_string = i_string+l_int.
      l_int = strlen( i_string ).
      IF l_int > 0 . MESSAGE x001(kx) . ENDIF.
    ELSE.
      MESSAGE x001(kx) . "was ist mit csv-Format
    ENDIF.
  ENDIF.

ENDFORM.

 
xGabriel
ForumUser
 
Beiträge: 16
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon a-dead-trousers » 13.11.2018, 13:59

Das mit dem Namen hört sich nach ALPHA-Konvertierung an:
Einfach eine Variable vom selben Typ wie in der Datenbanktabelle anlegen und mit dem Funktionsbaustein CONVERSION_EXIT_ALPHA_INPUT umwandeln lassen.

Das Entfernen der Hochkommas am Anfang oder Ende eines Textes geht auch recht leicht:
Code: Alles auswählen
REPLACE ALL OCCURRENCES OF REGEX '^"|"$' IN lv_string WITH space.
* Einbauen vor:
SPLIT lv_string AT CL_ABAP_CHAR_UTILITIES=>NEWLINE INTO TABLE lt_string.
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.07
Basis: 7.40

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
xGabriel
a-dead-trousers
Top Expert
 
Beiträge: 3090
Registriert: 07.02.2011, 13:40
Dank erhalten: 762 mal
Ich bin: Entwickler/in

Re: Langtexte: Zeilenumbruch bei Excel-Import

Beitragvon xGabriel » 13.11.2018, 16:07

Habs hinbekommen! :)

Kann dir echt gar nicht genug danken! Ohne dich wäre mein Programm wahrscheinlich niemals fertig geworden! :D
xGabriel
ForumUser
 
Beiträge: 16
Registriert: 12.07.2018, 07:28
Dank erhalten: 0 mal
Ich bin: sonstiges

Vorherige

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
s4hana-cloud
vor 10 Minuten von sap_inchen 1 Antw.
500 Internal Server Error
vor 8 Stunden von zzcpak 1 Antw.
Dokumentinformationen lesen vom DVS
vor 10 Stunden von Tron 4 Antw.
Tabs innerhalb von Tabs
vor 11 Stunden von ewx 4 Antw.
Fakturierungsplan in Kontrakten ändern
vor 7 Stunden von DeathAndPain 1 Antw.

  Ähnliche Beiträge beta
Langtexte lesen
25.10.2004, 16:18 von Hermann 1 Antw.
LSMW Langtexte
08.08.2007, 11:53 von tjanosch 0 Antw.
Langtexte einfügen
03.07.2008, 10:04 von errorist 2 Antw.
Langtexte zu Rollen
15.04.2011, 08:18 von a-dead-trousers 13 Antw.
gelöst Langtexte löschen
15.07.2014, 14:51 von PeterPaletti 2 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder