[ABAP] Übernahme von Dokumenteninfosätzen beim Anlegen von Einkaufsbelegen unterdrücken

Das Beispiel zeigt, wie die Übernahme der Dokumenteninfosätze beim Anlegen einer neuen Bestellung aus einem Kontrakt unterdrückt werden kann.

* Programm: SAPLMEPO
* INCLUDE: LMEPOF7X
* FORM mepo_documents_copy (handles PO, contract and RFQ only; no requisitions)
* Implizites Enhancement
ENHANCEMENT 1  Z_YOUR_ENH_NAME.

* wenn Bestell-Belegart = 'NB' und Quelle ein Kontrakt
IF im_nekko-bsart EQ 'NB' AND NOT im_nekko-konnr IS INITIAL.
* Abbruch der Übernahme der DI in die neue Bestellung
  EXIT.
ENDIF.

ENDENHANCEMENT.

[ABAP] OpenSQL: NULL-Indicator zum Anzeigen von leeren Rückgabemengen

* in OpenSQL ist es ab Rel. 7.55 möglich einen NULL-Indikators anzugeben
* somit ist es möglich, bei SELECTS Spalten zu kennzeichnen, deren Ergebnismenge NULL enthält
* alternativ siehe auch SQL-Expression COALESCE

SELECT FROM scarr
  LEFT OUTER JOIN spfli ON scarr~carrid = spfli~carrid
FIELDS scarr~carrid,
       spfli~distid
INTO TABLE @DATA(it_res) INDICATORS NULL STRUCTURE null_ind.

* Hier Objekte für die Ausgabe hinzufügen
cl_demo_output=>write_data( it_res ).

* HTML-Code vom Demo-Output holen
DATA(lv_html) = cl_demo_output=>get( ).

* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                      html_string = lv_html
                                      container   = cl_gui_container=>default_screen ).

* cl_gui_container=>default_screen erzwingen
WRITE: space.

Links

[ABAP] OpenSQL: Set-Indicator für das Aktualisieren von Spalten

* Set-Indikatoren (ab Rel. 7.55) dienen dem Kennzeichnen von zu aktualisierenden Spalten
* bei Verwendung von Set-Indikatoren werden nur die gekennzeichneten Felder auf der DB aktualisiert

* Datenstruktur mit zusätzlichem Set-Indicator
TYPES: ty_sflight TYPE sflight WITH INDICATORS set_ind.

DATA: it_sflight TYPE STANDARD TABLE OF ty_sflight WITH DEFAULT KEY.

* Daten holen
SELECT FROM sflight
  FIELDS carrid, connid, fldate, price
  WHERE carrid = 'AA'
    AND connid = '0017'
   INTO CORRESPONDING FIELDS OF TABLE @it_sflight.

IF sy-subrc  = 0.
* Daten anpassen
  LOOP AT it_sflight ASSIGNING FIELD-SYMBOL(<f>).
    <f>-price *= '0.1'.
    <f>-set_ind-price = abap_true.
  ENDLOOP.

* nur die Spalten mit Set-Indicator='X' achreiben
  UPDATE sflight FROM TABLE @it_sflight INDICATORS SET STRUCTURE set_ind.
ENDIF.

Links

[ABAP] Repository-Infosystem: Views zu Objekten

Views zu Objekten

Datenelemente

INFO_DTELT (Repository-Infosystem: View über DD04L DD04T TADIR)
DD04VV (View auf Datenelement mit Domäne – Infosystem)
DD04VVT (Repository-Infosystem: View auf Datenelement mit Texten)

Domänen

INFO_DOMAT (Repository-Infosystem: View über DD01l DD01T, TADIR)
DD01VV (View auf Domänen – Infosystem)

Erweiterungsprojekte

MODACTT (Repository-Infosystem: View über MODACT und MODTEXT)

Funktionsbausteine

INFO_FUNCT (Repository-Infostystyem: View ueber ENLFDIR , TFDIR TADIR)

SAP-Erweiterungen

INFO_MODS (Repository-Infosystem: View über MODSAP und MODSAPA)
MODSAPVIEW (Repository-Infosystem:: View über MODSAP und MODSAPT)

Messages

INFO_MSNR (Repository-Infosystem: View über T100 udn TADIR)
T100VV (View über T100A und T100 : Infosystem)

Pakete

INFO_DEVC (Repository-Infosystem: View über TDEVC und TADIR)

Suchhilfen

INFO_SHLPT (Repository-Infosystem: Suchhilfe via Paket/Text)
DD30VV (Repository-Infosystem: Header und Kurztext von Suchhilfen)

Tabellen

INFO_TABLT (Repository-Infosystem: View über DD02L DD02T TADIR)
INFO_TABTT (Repository-Infosystem: View für technische Einstellungen 2)
INFO_TABLS (View über Tabellenfelder und TADIR: Repository-Infosystem)
DD02VV (View auf Tabelle – Infosystem)
DD03VT (View auf Tabellenfelder – Repository-Infosystem)
DD08VVT (View über Fremdschlüssel – Infosystem)
DD09VVT (Repository-Infosystem: View über techn. Eigenschften Tabelle)

Tabellentypen

INFO_TTYPT (Repository-Infosystem: View über DD40L, TADIR und Text)
DD40VV (Repository-Infosystem: View auf Tabellentypen mit Text)

Transaktionen

INFO_TRANT (Repository-Infosystem: Join über TSTC TSTCT TADIR)
TSTCV (View auf Transaktionscode – Infosystem)
TSTPVT (View auf Parametertransaktionen – Infosystem)

Transportaufträge

E071V (View über Objekte in Aufträgen E070+E071)

Varianten (Reports)

INFO_VARI (Repository-Infosystem: Join über VARID und TADIR)

Views

INFO_VIEFT (Repository-Infosystem: View über DD25L DD27S … TADIR)
INFO_VIEWT (Repository-Infosystem: View über DD25L, DD26S,DD25T, TADIR)
DD25VVT (View über Views mit Texten – Infosystem)

Beispiel: View Suche/Anzeige von Infos zu Datenelementen

* Repository-Infosystem: View über DD04L DD04T TADIR
SELECT FROM info_dtelt
  FIELDS *
  WHERE ddlanguage = 'D'
    AND datatype EQ 'QUAN'
  INTO TABLE @DATA(it_dtelt).

TRY.
* SALV-Table
    DATA: o_salv TYPE REF TO cl_salv_table.

    cl_salv_table=>factory( IMPORTING r_salv_table = o_salv
                            CHANGING  t_table      = it_dtelt ).

* Grundeinstellungen
    o_salv->get_functions( )->set_all( abap_true ).
    o_salv->get_columns( )->set_optimize( abap_true ).
    o_salv->get_display_settings( )->set_list_header( 'Datenelemente' ).
    o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
    o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Spaltenüberschriften: technischer Name und Beschreibungstexte, Short Text und Medium Text leer lassen für Autosize
    LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
      DATA(o_col) = <c>-r_column.
      o_col->set_short_text( || ).
      o_col->set_medium_text( || ).
      o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
    ENDLOOP.

    o_salv->display( ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

[ABAP] SALV-Table – Gruppen für Spaltenvorrat im SALV-Layout

SELECT * FROM sflight INTO TABLE @DATA(it_sflight).

TRY.
* SALV-Table
    DATA: o_salv TYPE REF TO cl_salv_table.

    cl_salv_table=>factory( IMPORTING r_salv_table = o_salv
                            CHANGING  t_table      = it_sflight ).

* Grundeinstellungen
    o_salv->get_functions( )->set_all( abap_true ).
    o_salv->get_columns( )->set_optimize( abap_true ).
    o_salv->get_display_settings( )->set_list_header( 'Aggregationen' ).
    o_salv->get_display_settings( )->set_striped_pattern( abap_true ).
    o_salv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>row_column ).

* Spaltenüberschriften: technischer Name und Beschreibungstexte, Short Text und Medium Text leer lassen für Autosize
    LOOP AT o_salv->get_columns( )->get( ) ASSIGNING FIELD-SYMBOL(<c>).
      DATA(o_col) = <c>-r_column.
      o_col->set_short_text( || ).
      o_col->set_medium_text( || ).
      o_col->set_long_text( |{ o_col->get_columnname( ) } [{ o_col->get_long_text( ) }]| ).
    ENDLOOP.

* Gruppen definieren --> verfügbar im Grid unter Toolbar-Button "Layout ändern ..." --> Spaltenvorrat
    o_salv->get_functional_settings( )->get_specific_groups( )->add_specific_group( id = 'GRP1' text = 'Spaltengruppe 1' ).
    o_salv->get_functional_settings( )->get_specific_groups( )->add_specific_group( id = 'GRP2' text = 'Spaltengruppe 2' ).

* Spalten GRP1 zuordnen
    DATA(o_col_max) = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'SEATSMAX' ) ).
    o_col_max->set_specific_group( id = 'GRP1' ).
    DATA(o_col_occ) = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'SEATSOCC' ) ).
    o_col_occ->set_specific_group( id = 'GRP1' ).

* Spalten GRP2 zuordnen
    DATA(o_col_max_b) = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'SEATSMAX_B' ) ).
    o_col_max_b->set_specific_group( id = 'GRP2' ).
    DATA(o_col_occ_b) = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'SEATSOCC_B' ) ).
    o_col_occ_b->set_specific_group( id = 'GRP2' ).
    DATA(o_col_max_f) = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'SEATSMAX_F' ) ).
    o_col_max_f->set_specific_group( id = 'GRP2' ).
    DATA(o_col_occ_f) = CAST cl_salv_column_list( o_salv->get_columns( )->get_column( 'SEATSOCC_F' ) ).
    o_col_occ_f->set_specific_group( id = 'GRP2' ).

* Anzeige
    o_salv->display( ).
  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.

[ABAP] Retourenumlagerungsbestellungen lesen

* Bestellung
PARAMETERS: p_ebeln TYPE ekko-ebeln.

START-OF-SELECTION.

* Retourenumlagerungsbestellungen zur Bestellung lesen
  SELECT FROM ekko AS e
    INNER JOIN ekpo AS p ON ( e~ebeln EQ p~ebeln )
* Verwendung von CAST und substring, da Belegposition unterschiedliche Typen (NUMC5 und NUMC10) verwendet
    INNER JOIN msr_d_executed AS r ON ( p~ebeln EQ r~ref_doc_nr ) AND ( CAST( p~ebelp AS CHAR ) EQ substring( CAST( r~ref_doc_item AS CHAR ), 6, 5 ) )
  FIELDS DISTINCT
      e~ebeln,
      p~ebelp,
      p~matnr,
      p~txz01,
      p~menge,
      p~meins,
      p~netpr,
      r~doc_nr,
      r~doc_item
  WHERE e~ebeln EQ @p_ebeln
  INTO TABLE @DATA(it_ebeln).

  IF sy-subrc = 0.
    cl_demo_output=>write_data( it_ebeln ).
    DATA(lv_html) = cl_demo_output=>get( ).
    cl_abap_browser=>show_html( EXPORTING title       = 'Daten'
                                          html_string = lv_html
                                          container   = cl_gui_container=>default_screen ).

    WRITE: space.
  ENDIF.

Links

[SAP] Fabrikkalender / Feiertagskalender einrichten

Transaktionen

SCAL (Fabrikkalender mit CUA-Oberfläche)
OX10 (Werk einrichten Customize)

Tabellen

TFACD (Fabrikkalenderdefinitionen)
TFACT (Texte der Fabrikkalender)
THOC (Feiertagskalender)
THOCD (Feiertagsdefinitionen)
THOL (Feiertage)
THOLT (Feiertagstexte)
T001W (Werke/Niederlassungen)

Funktionsbausteine

DATE_CONVERT_TO_FACTORYDATE (Kalenderfunktion Fabrikkalenderdatum zu einem Datum geben)
FACTORYDATE_CONVERT_TO_DATE (Kalenderfunktion Datum zu einem Fabrikkalenderdatum geben)

Links

[ABAP] ABAP2XLSX: CSV-Datei schreiben

TRY.
* Daten holen
    SELECT * FROM sflight INTO TABLE @DATA(it_sflight).

* ABAP2XLSX-Objekt
    DATA: o_xl TYPE REF TO zcl_excel.

* Converter itab->ABAP2XLSX
    DATA(o_xl_conv) = NEW zcl_excel_converter( ).
    o_xl_conv->convert( EXPORTING it_table = it_sflight
                        CHANGING  co_excel = o_xl ).

* CSV-Writer-Objekt erzeugen
    DATA(o_csv) = NEW zcl_excel_writer_csv( ).
    o_csv->set_delimiter( ip_value = ';' ).
    o_csv->set_enclosure( ip_value = '''' ).
    o_csv->set_endofline( ip_value = cl_abap_char_utilities=>cr_lf ).
    o_csv->set_active_sheet_index( i_active_worksheet = 1 ).

* Excel-Writer-Objekt erzeugen
    DATA(o_writer) = CAST zif_excel_writer( o_csv ).
* Excel-Writer-Objekt->xstring
    DATA(lv_xstr) = o_writer->write_file( o_xl ).

* xstring -> solix
    DATA(it_solix_data) = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_xstr ).

* CSV-Daten lokal speichern (binär übertragen)
    cl_gui_frontend_services=>gui_download( EXPORTING filename     = 'Test.csv'
                                                      filetype     = 'BIN'
                                                      bin_filesize = xstrlen( lv_xstr )
                                            CHANGING  data_tab     = it_solix_data ).

  CATCH cx_root INTO DATA(e_txt).
    WRITE: / e_txt->get_text( ).
ENDTRY.