* Siehe Typgruppe SCTSC (Konstanten CTS)
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) lbl1 FOR FIELD p_trkorr.
PARAMETERS: p_trkorr LIKE e070-trkorr OBLIGATORY.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (20) lbl2 FOR FIELD p_tar.
PARAMETERS: p_tar TYPE trheader-tarsystem OBLIGATORY VALUE CHECK DEFAULT 'XYZ'.
SELECTION-SCREEN END OF LINE.
INITIALIZATION.
lbl1 = 'Transport-Auftrag:'.
lbl2 = 'Transportziel:'.
START-OF-SELECTION.
DATA: lv_req TYPE trwbo_request.
* (Nach-)Lesen von Einzelbestandteilen eines Auftrags
CALL FUNCTION 'TR_READ_REQUEST'
EXPORTING
iv_read_e070 = abap_true
iv_read_e07t = abap_true
iv_trkorr = p_trkorr
CHANGING
cs_request = lv_req
EXCEPTIONS
error_occured = 1
no_authorization = 2
OTHERS = 3.
IF sy-subrc = 0.
WRITE: / 'Kopfdaten des Auftrages', p_trkorr, 'gelesen.'.
* Text übernehmen
DATA(lv_as4text) = CONV as4text( |TvK:{ lv_req-h-as4text }| ).
DATA: lv_tvk TYPE trwbo_request_header.
* Auftrag mit Aufgaben anlegen (ohne Dialog)
CALL FUNCTION 'TR_INSERT_REQUEST_WITH_TASKS'
EXPORTING
iv_type = sctsc_type_transport " TvK anlegen
iv_text = lv_as4text
iv_owner = sy-uname
iv_target = p_tar
iv_with_badi_check = abap_true
IMPORTING
es_request_header = lv_tvk
EXCEPTIONS
insert_failed = 1
enqueue_failed = 2
OTHERS = 3.
IF sy-subrc = 0.
WRITE: / 'Ziel-Auftrag', lv_tvk-trkorr, 'angelegt.'.
* Quell-Auftrag kopieren
* Kopieren von Aufträgen/Aufgaben
CALL FUNCTION 'TR_COPY_COMM'
EXPORTING
wi_dialog = abap_false
wi_trkorr_from = p_trkorr
wi_trkorr_to = lv_tvk-trkorr
wi_without_documentation = abap_true
EXCEPTIONS
db_access_error = 1
trkorr_from_not_exist = 2
trkorr_to_is_repair = 3
trkorr_to_locked = 4
trkorr_to_not_exist = 5
trkorr_to_released = 6
user_not_owner = 7
no_authorization = 8
wrong_client = 9
wrong_category = 10
object_not_patchable = 11
OTHERS = 12.
IF sy-subrc = 0.
WRITE: / 'Objekte des Quell-Auftrages', p_trkorr, 'nach', lv_tvk-trkorr, 'kopiert'.
DATA(lv_ok) = abap_true.
* Quell-Aufgaben kopieren
SELECT FROM e070
FIELDS trkorr
WHERE strkorr = @p_trkorr
INTO TABLE @DATA(it_trkorr_aufg).
WRITE: / lines( it_trkorr_aufg ), 'Aufgaben des Quell-Auftrages', p_trkorr, 'gelesen.'.
* alle Quell-Aufgaben des Quell-Auftrages
LOOP AT it_trkorr_aufg ASSIGNING FIELD-SYMBOL(<a>).
* Kopieren von Aufträgen/Aufgaben
CALL FUNCTION 'TR_COPY_COMM'
EXPORTING
wi_dialog = abap_false
wi_trkorr_from = <a>-trkorr
wi_trkorr_to = lv_tvk-trkorr
wi_without_documentation = abap_true
EXCEPTIONS
db_access_error = 1
trkorr_from_not_exist = 2
trkorr_to_is_repair = 3
trkorr_to_locked = 4
trkorr_to_not_exist = 5
trkorr_to_released = 6
user_not_owner = 7
no_authorization = 8
wrong_client = 9
wrong_category = 10
object_not_patchable = 11
OTHERS = 12.
IF sy-subrc = 0.
WRITE: / 'Aufgabe',<a>-trkorr,'des Quell-Auftrages', p_trkorr, 'nach', lv_tvk-trkorr, 'kopiert'.
ELSE.
lv_ok = abap_false.
WRITE: / 'Fehler (', sy-subrc, ') beim Kopieren der Quell-Aufgabe:', <a>-trkorr.
EXIT.
ENDIF.
ENDLOOP.
IF lv_ok = abap_true.
* Objekte und Schlüssel eines Auftrags sortieren
CALL FUNCTION 'TR_SORT_AND_COMPRESS_COMM'
EXPORTING
iv_trkorr = lv_tvk-trkorr
EXCEPTIONS
trkorr_not_found = 1
order_released = 2
error_while_modifying_obj_list = 3
tr_enqueue_failed = 4
no_authorization = 5
OTHERS = 6.
IF sy-subrc = 0.
WRITE: / 'Ziel-Transportauftrag', lv_tvk-trkorr, 'erfolgreich sortiert und verdichtet.'.
ELSE.
WRITE: / 'Fehler (', sy-subrc, ') beim Verdichten von Transportauftrag:', lv_tvk-trkorr.
ENDIF.
ELSE.
WRITE: / 'Fehler beim Kopieren der Quell-Aufgaben in Transportauftrag:', lv_tvk-trkorr.
ENDIF.
ELSE.
WRITE: / 'Fehler (', sy-subrc, ') beim Lesen des Quell-Auftrages:', p_trkorr.
ENDIF.
ELSE.
WRITE: / 'Fehler (', sy-subrc, ') beim Anlegen des Ziel-Auftrages'.
ENDIF.
ELSE.
WRITE: / 'Fehler (', sy-subrc, ') beim Lesen des Quell-Auftrages:', p_trkorr.
ENDIF.