powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Вопросы по IT [закрыт для гостей] / Чат GPT таки шоколадный друг :)
Модераторы: Шоколадный01
5 сообщений из 5, страница 1 из 1
Чат GPT таки шоколадный друг :)
    #1155642
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
Седня чуть пообщался и слегка охренел.. ГПТ хороший парень[:blink].

Es soll ein kundeneigener Report entwickelt werden, der den Fakturavorrat aus der Tabelle
/1BEA/IPMI_DLI gezielt selektiert und diesen dann gruppiert zur weiteren Verarbeitung an den
Funktionsbaustein /1BEA/IPMI_BD_O_CREATE übergibt

Auf dem Selektionsbildschirm des Reports sollen die folgenden Felder zur Eingabe verfügbar gemacht
werden:
Optional eingebbar:
Vertrags-ID (CRMD_ORDERADM_H-OBJECT_ID)
Positionstyp aus Vertrag (CRMD_ORDERADM_I-ITM_TYPE)
IP (CRMD_ORDERADM_I-ORDERED_PROD)
Pflichteingaben
Fakturadatum (SCAPPTSEG-TST_FROM/-TST_TO)

Das Ergebnis des Reportlaufs wird als ALV Grid dargestellt, das die folgenden Spalten bietet:
Vertragsnummer (CRMD_ORDERADM_H-OBJECT_ID)
Vertragsposition (CRMD_ORDERADM_I-NUMBER_INT)
FAP ID bzw. BRI ID (/1BEA/IPMI_DLI-SRC_ITEMNO)
Fakturanettowert (/1BEA/IPMI_DLI-NET_VALUE)
Fakturasperre (/1BEA/IPMI_DLI-SRC_BILL_BLOCK)
Fakturanummer (/1BEA/IPMI_BDH-HEADNO_EXT)
Fehlermeldung (bitte selbst definieren; max. CHAR(80), sollte genügen)
Der Report soll nur Fakturavorräte ohne Fakturasperre gemäß der gewählten Selektionskriterien (vgl.
oben) verarbeiten, d.h. im Feld /1BEA/IPMI_DLI-BILL_BLOCK darf für die zu verarbeitende
Fakturavorratsposition kein Wert gesetzt sein.
ChatGPT:
ChatGPT
Für die Entwicklung des beschriebenen Reports kann ein ABAP-Report erstellt werden, der folgende Schritte umfasst:

1. Selektionsbildschirm
Auf dem Selektionsbildschirm werden die Felder gemäß der Anforderungen bereitgestellt. Hierzu können SELECT-OPTIONS und PARAMETERS verwendet werden.

Selektionsbildschirm Definition:
abap
Code kopieren
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.

PARAMETERS: p_object_id TYPE crmd_orderadm_h-object_id OBLIGATORY,
p_itm_type TYPE crmd_orderadm_i-itm_type OPTIONAL,
p_prod TYPE crmd_orderadm_i-ordered_prod OPTIONAL.

SELECT-OPTIONS: so_date FOR scapptseg-tst_from.

SELECTION-SCREEN END OF BLOCK blk1.
Erklärungen:

Pflichtfelder: Fakturadatum (Start- und Enddatum) mittels SELECT-OPTIONS.
Optionale Felder: Vertrags-ID, Positionstyp und IP werden durch PARAMETERS bereitgestellt.
2. Daten-Selektion
Die Selektion erfolgt aus der Tabelle /1BEA/IPMI_DLI basierend auf den eingegebenen Kriterien.

Beispielhafte Selektionslogik:
abap
Code kopieren
DATA: lt_dli_data TYPE TABLE OF /1bea/ipmi_dli,
lt_alv_data TYPE TABLE OF <structure_for_alv>.

" Daten aus der Tabelle /1BEA/IPMI_DLI selektieren
SELECT *
INTO TABLE lt_dli_data
FROM /1bea/ipmi_dli
WHERE bill_block IS INITIAL
AND tst_from BETWEEN so_date-low AND so_date-high.

" Daten gruppieren und weitere Informationen ergänzen
LOOP AT lt_dli_data INTO DATA(ls_dli).
DATA(ls_alv) = VALUE <structure_for_alv>(
object_id = ls_dli-object_id
number_int = ls_dli-number_int
src_itemno = ls_dli-src_itemno
net_value = ls_dli-net_value
bill_block = ls_dli-src_bill_block
headno_ext = <fetch_bri_data>(ls_dli-headno_ext)
error_msg = <define_error_handling>(ls_dli)
).
APPEND ls_alv TO lt_alv_data.
ENDLOOP.
3. Übergabe an den Funktionsbaustein
Nach der Selektion der relevanten Daten werden diese an den Funktionsbaustein /1BEA/IPMI_BD_O_CREATE übergeben.

Beispiel:
abap
Code kopieren
CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE'
EXPORTING
it_data = lt_alv_data
IMPORTING
et_errors = lt_error_table.
4. Darstellung des Ergebnisses (ALV Grid)
Für die Ausgabe wird die ALV-Grid-Komponente genutzt. Hierzu wird eine interne Tabelle vorbereitet und an den ALV-Grid übergeben.

ALV-Darstellung:
abap
Code kopieren
DATA: gr_alv TYPE REF TO cl_salv_table.

TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = gr_alv
CHANGING t_table = lt_alv_data ).

gr_alv->display( ).

CATCH cx_salv_msg INTO DATA(lx_msg).
" Fehlerbehandlung
ENDTRY.
Fehlermeldung
Fehlermeldungen können z. B. durch eine Logik ergänzt werden:

abap
Code kopieren
" Fehler definieren, wenn z. B. Daten unvollständig
IF ls_dli-net_value IS INITIAL.
ls_alv-error_msg = 'Netto-Wert fehlt.'.
ENDIF.
5. Zusätzliche Validierungen
Prüfen, ob keine Fakturasperre (/1BEA/IPMI_DLI-BILL_BLOCK) vorhanden ist. Falls dieses Kriterium nicht erfüllt wird, wird der Datensatz ignoriert.

Zusammenfassung
Selektionsbildschirm: Definieren der Eingabemöglichkeiten.
Daten Selektion: Filtern und Validieren der Fakturavorräte.
Funktionsbaustein: Übergabe der Daten für die Weiterverarbeitung.
Ergebnisdarstellung: Ausgabe im ALV-Grid mit Fehlermeldungen.
Benötigen Sie Details zu einem der Schritte, wie z. B. der ALV-Konfiguration oder Fehlerbehandlung?

Du:
ja
ChatGPT:
ChatGPT
Details zur ALV-Konfiguration und Fehlerbehandlung
Die ALV-Ausgabe ermöglicht eine übersichtliche Darstellung der selektierten Daten. Dazu nutzen wir die Klasse CL_SALV_TABLE. Hier sind die wichtigsten Schritte für die Konfiguration und Ausgabe:

1. Interne Struktur für ALV
Zunächst wird eine interne Struktur definiert, die die Spalten der ALV-Tabelle repräsentiert.

Beispielstruktur:
abap
Code kopieren
TYPES: BEGIN OF ty_alv_data,
object_id TYPE crmd_orderadm_h-object_id,
number_int TYPE crmd_orderadm_i-number_int,
src_itemno TYPE /1bea/ipmi_dli-src_itemno,
net_value TYPE /1bea/ipmi_dli-net_value,
bill_block TYPE /1bea/ipmi_dli-src_bill_block,
headno_ext TYPE /1bea/ipmi_bdh-headno_ext,
error_msg TYPE char80, " Eigene Fehlermeldung
END OF ty_alv_data.

DATA: lt_alv_data TYPE TABLE OF ty_alv_data.
2. Datenaufbereitung für die ALV
Die selektierten Daten werden in die interne Tabelle lt_alv_data übertragen. Fehlermeldungen können pro Datensatz definiert werden.

Beispiel:
abap
Code kopieren
LOOP AT lt_dli_data INTO DATA(ls_dli).
DATA(ls_alv) = VALUE ty_alv_data(
object_id = ls_dli-object_id
number_int = ls_dli-number_int
src_itemno = ls_dli-src_itemno
net_value = ls_dli-net_value
bill_block = ls_dli-src_bill_block
headno_ext = <fetch_headno_ext>(ls_dli)
error_msg = <define_error_msg>(ls_dli)
).
APPEND ls_alv TO lt_alv_data.
ENDLOOP.
3. ALV-Konfiguration
Die Klasse CL_SALV_TABLE wird verwendet, um die Tabelle darzustellen.

Einfaches Beispiel für ALV:
abap
Code kopieren
DATA: gr_alv TYPE REF TO cl_salv_table.

TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = gr_alv
CHANGING t_table = lt_alv_data ).

" Spaltenüberschriften anpassen
gr_alv->get_columns( )->get_column( 'OBJECT_ID' )->set_short_text( 'Vertragsnummer' ).
gr_alv->get_columns( )->get_column( 'NUMBER_INT' )->set_short_text( 'Vertragsposition' ).
gr_alv->get_columns( )->get_column( 'SRC_ITEMNO' )->set_short_text( 'FAP ID/BRI ID' ).
gr_alv->get_columns( )->get_column( 'NET_VALUE' )->set_short_text( 'Faktura Nettowert' ).
gr_alv->get_columns( )->get_column( 'BILL_BLOCK' )->set_short_text( 'Fakturasperre' ).
gr_alv->get_columns( )->get_column( 'HEADNO_EXT' )->set_short_text( 'Fakturanummer' ).
gr_alv->get_columns( )->get_column( 'ERROR_MSG' )->set_short_text( 'Fehlermeldung' ).

" ALV anzeigen
gr_alv->display( ).

CATCH cx_salv_msg INTO DATA(lx_msg).
MESSAGE lx_msg->get_text( ) TYPE 'E'.
ENDTRY.
4. Fehlermeldungslogik
Fehlermeldungen werden individuell pro Datensatz erstellt und in die Spalte error_msg geschrieben.

Beispiel für Fehlerdefinition:
abap
Code kopieren
FORM define_error_msg USING p_dli TYPE /1bea/ipmi_dli
CHANGING p_error_msg TYPE char80.
IF p_dli-net_value IS INITIAL.
p_error_msg = 'Netto-Wert fehlt'.
ELSEIF p_dli-src_itemno IS INITIAL.
p_error_msg = 'SRC_ITEMNO nicht verfügbar'.
ELSE.
p_error_msg = ''.
ENDIF.
ENDFORM.
Die Fehlermeldung wird während der Datenaufbereitung in die ALV-Tabelle geschrieben.

5. Erweiterte Funktionen (z. B. Buttons für Aktionen)
Um Funktionen wie „Export nach Excel“ oder „Drilldown“ hinzuzufügen, können Sie die ALV-Toolbar erweitern.

Beispiel: Export-Button:
abap
Code kopieren
DATA: gr_functions TYPE REF TO cl_salv_functions.
gr_functions = gr_alv->get_functions( ).
gr_functions->set_all( abap_true ).
Zusammenfassung
Struktur erstellen: Die ALV-Datenstruktur enthält alle gewünschten Spalten.
Daten aufbereiten: Füllen Sie die ALV-Daten mit selektierten Informationen und Fehlermeldungen.
ALV-Konfiguration: Verwenden Sie CL_SALV_TABLE, um Spaltennamen und Funktionen zu definieren.
Fehlermeldungen behandeln: Dynamische Fehlerlogik für jeden Datensatz.
Falls Sie Anpassungen wie spezifische Logik oder eine benutzerdefinierte Toolbar benötigen, lassen Sie es mich wissen!

Du:
mch bitte noch check zum Testlauf und ensprechende commit work oder rollback work. oder hier ist BAPI commit muss verwendet werden?
ChatGPT:
ChatGPT
Für die Transaktionsverarbeitung und Konsistenz des Systems sind folgende Schritte wichtig, um sicherzustellen, dass die Datenänderungen korrekt verarbeitet werden. Hier ist, wie das in Ihrem Szenario implementiert werden kann:

1. Verwendung von COMMIT WORK oder ROLLBACK WORK
Wenn der Funktionsbaustein /1BEA/IPMI_BD_O_CREATE keine eigenen Transaktionssteuerungen (z. B. BAPI Commit) implementiert, ist es sinnvoll, die Steuerung über COMMIT WORK und ROLLBACK WORK direkt im Report durchzuführen.
Sollte jedoch der Funktionsbaustein explizit Transaktions-Management erfordern, dann ist die Verwendung des BAPIs BAPI_TRANSACTION_COMMIT bzw. BAPI_TRANSACTION_ROLLBACK notwendig.
2. Prüfung auf Fehler
Vor dem Commit sollten die Rückgabewerte des Funktionsbausteins überprüft werden. Fehlerhafte Datensätze werden in einem separaten Log behandelt, und die Verarbeitung wird abgebrochen, falls kritische Fehler auftreten.

Beispiel für die Fehlerprüfung:
abap
Code kopieren
DATA: lt_error_table TYPE TABLE OF bapiret2,
lv_error_count TYPE i.

CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE'
EXPORTING
it_data = lt_alv_data
IMPORTING
et_errors = lt_error_table.

" Fehleranalyse
LOOP AT lt_error_table INTO DATA(ls_error).
IF ls_error-type = 'E' OR ls_error-type = 'A'.
WRITE: / 'Fehler:', ls_error-message.
lv_error_count = lv_error_count + 1.
ENDIF.
ENDLOOP.

" Fehlerlogik
IF lv_error_count = 0.
COMMIT WORK. " Erfolgreicher Abschluss
WRITE: / 'Änderungen wurden gespeichert.'.
ELSE.
ROLLBACK WORK. " Fehlerhafte Verarbeitung
WRITE: / 'Änderungen wurden zurückgesetzt.'.
ENDIF.
3. Verwendung von BAPIs für Transaktions-Management
Falls der Funktionsbaustein als Teil eines BAPI-Szenarios implementiert ist, verwenden Sie die BAPIs BAPI_TRANSACTION_COMMIT und BAPI_TRANSACTION_ROLLBACK für eine konsistente Verarbeitung.

Beispiel mit BAPIs:
abap
Code kopieren
CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE'
EXPORTING
it_data = lt_alv_data
IMPORTING
et_errors = lt_error_table.

" Fehleranalyse
LOOP AT lt_error_table INTO ls_error.
IF ls_error-type = 'E' OR ls_error-type = 'A'.
lv_error_count = lv_error_count + 1.
ENDIF.
ENDLOOP.

" Fehlerlogik mit BAPI-Transaktionsmanagement
IF lv_error_count = 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
WRITE: / 'Änderungen wurden gespeichert.'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
WRITE: / 'Änderungen wurden zurückgesetzt.'.
ENDIF.
4. Was sollte getestet werden?
Beim Testlauf sind folgende Punkte wichtig:

Datenvalidierung: Sind die selektierten und übergebenen Daten korrekt?
Fehlerhandling: Werden Fehler korrekt erkannt und in das Log geschrieben?
Transaktionskontrolle: Erfolgt ein COMMIT WORK nur bei erfolgreicher Verarbeitung aller relevanten Datensätze?
Sperren: Sicherstellen, dass keine Datensätze doppelt verarbeitet werden, falls ein ROLLBACK notwendig wird.
5. Simulation ohne Datenänderung
Wenn Sie den Report testen möchten, ohne Änderungen an den Daten vorzunehmen, können Sie den CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE' in den Testmodus versetzen oder einen Dry-Run-Parameter einführen.

Beispiel:
abap
Code kopieren
PARAMETERS: p_test TYPE abap_bool DEFAULT abap_false.

IF p_test = abap_true.
WRITE: / 'Simulation: Daten würden verarbeitet werden, aber keine Änderungen vorgenommen.'.
ELSE.
CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE'
EXPORTING
it_data = lt_alv_data
IMPORTING
et_errors = lt_error_table.
ENDIF.
Zusammenfassung
Einfaches Transaktionsmanagement: Nutzen Sie COMMIT WORK und ROLLBACK WORK, wenn der Funktionsbaustein keine spezielle Steuerung benötigt.
BAPIs verwenden: Wenn der Funktionsbaustein explizit auf BAPI-Standards basiert, verwenden Sie BAPI_TRANSACTION_COMMIT und BAPI_TRANSACTION_ROLLBACK.
Testlauf und Simulation: Implementieren Sie einen optionalen Testmodus, um Änderungen an produktiven Daten zu vermeiden.
Wenn Sie Unterstützung bei der Erstellung eines vollständigen Testplans benötigen, lassen Sie es mich wissen!

Du:
und jetzt mach bitte alles zusammen in einem vollständigen ABAP report
ChatGPT:
ChatGPT
Hier ist der vollständige ABAP-Report basierend auf den Anforderungen und den zuvor besprochenen Elementen:

Vollständiger ABAP-Report
abap
Code kopieren
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
REPORT z_fakturavorrat_report.

* Definition der Texte
TEXT-001 = 'Fakturavorrat Report'.

* Datenstrukturen für ALV und Fehlerhandling
TYPES: BEGIN OF ty_alv_data,
         object_id  TYPE crmd_orderadm_h-object_id,
         number_int TYPE crmd_orderadm_i-number_int,
         src_itemno TYPE /1bea/ipmi_dli-src_itemno,
         net_value  TYPE /1bea/ipmi_dli-net_value,
         bill_block TYPE /1bea/ipmi_dli-src_bill_block,
         headno_ext TYPE /1bea/ipmi_bdh-headno_ext,
         error_msg  TYPE char80,
       END OF ty_alv_data.

DATA: lt_alv_data TYPE TABLE OF ty_alv_data,
      lt_error_table TYPE TABLE OF bapiret2,
      lv_error_count TYPE i.

* Selektionsbildschirm
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.

PARAMETERS: p_object_id TYPE crmd_orderadm_h-object_id OPTIONAL,
            p_itm_type  TYPE crmd_orderadm_i-itm_type OPTIONAL,
            p_prod      TYPE crmd_orderadm_i-ordered_prod OPTIONAL.

SELECT-OPTIONS: so_date FOR scapptseg-tst_from OBLIGATORY.

PARAMETERS: p_test TYPE abap_bool DEFAULT abap_false.

SELECTION-SCREEN END OF BLOCK blk1.

START-OF-SELECTION.

* Daten aus der Tabelle /1BEA/IPMI_DLI selektieren
DATA: lt_dli_data TYPE TABLE OF /1bea/ipmi_dli.

SELECT *
  INTO TABLE lt_dli_data
  FROM /1bea/ipmi_dli
  WHERE bill_block IS INITIAL
    AND tst_from BETWEEN so_date-low AND so_date-high.

* Daten aufbereiten
LOOP AT lt_dli_data INTO DATA(ls_dli).
  DATA(ls_alv) = VALUE ty_alv_data(
    object_id  = ls_dli-object_id
    number_int = ls_dli-number_int
    src_itemno = ls_dli-src_itemno
    net_value  = ls_dli-net_value
    bill_block = ls_dli-src_bill_block
    headno_ext = ls_dli-headno_ext
    error_msg  = '' " Hier könnten weitere Fehlerbehandlungen eingefügt werden
  ).

  " Fehlerprüfung (Beispiel)
  IF ls_alv.net_value IS INITIAL.
    ls_alv-error_msg = 'Netto-Wert fehlt'.
  ENDIF.

  APPEND ls_alv TO lt_alv_data.
ENDLOOP.

* Testmodus: Simulation ohne Änderungen
IF p_test = abap_true.
  WRITE: / 'Testmodus aktiviert: Daten werden nur simuliert.'.
  LOOP AT lt_alv_data INTO DATA(ls_test_alv).
    WRITE: / ls_test_alv-object_id, ls_test_alv-number_int, ls_test_alv-error_msg.
  ENDLOOP.
  RETURN.
ENDIF.

* Daten an den Funktionsbaustein übergeben
CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE'
  EXPORTING
    it_data = lt_alv_data
  IMPORTING
    et_errors = lt_error_table.

* Fehleranalyse
LOOP AT lt_error_table INTO DATA(ls_error).
  IF ls_error-type = 'E' OR ls_error-type = 'A'.
    lv_error_count = lv_error_count + 1.
    WRITE: / 'Fehler:', ls_error-message.
  ENDIF.
ENDLOOP.

* Transaktionssteuerung
IF lv_error_count = 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = abap_true.
  WRITE: / 'Änderungen wurden erfolgreich gespeichert.'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  WRITE: / 'Änderungen wurden zurückgesetzt wegen Fehlern.'.
ENDIF.

* ALV-Ausgabe
DATA: gr_alv TYPE REF TO cl_salv_table.

TRY.
    cl_salv_table=>factory(
      IMPORTING r_salv_table = gr_alv
      CHANGING  t_table      = lt_alv_data ).

    gr_alv->get_columns( )->get_column( 'OBJECT_ID' )->set_short_text( 'Vertragsnummer' ).
    gr_alv->get_columns( )->get_column( 'NUMBER_INT' )->set_short_text( 'Vertragsposition' ).
    gr_alv->get_columns( )->get_column( 'SRC_ITEMNO' )->set_short_text( 'FAP ID/BRI ID' ).
    gr_alv->get_columns( )->get_column( 'NET_VALUE' )->set_short_text( 'Faktura Nettowert' ).
    gr_alv->get_columns( )->get_column( 'BILL_BLOCK' )->set_short_text( 'Fakturasperre' ).
    gr_alv->get_columns( )->get_column( 'HEADNO_EXT' )->set_short_text( 'Fakturanummer' ).
    gr_alv->get_columns( )->get_column( 'ERROR_MSG' )->set_short_text( 'Fehlermeldung' ).

    gr_alv->display( ).

  CATCH cx_salv_msg INTO DATA(lx_msg).
    WRITE: / 'Fehler bei der Anzeige des ALV:', lx_msg->get_text( ).
ENDTRY.
Wichtigste Funktionen des Reports
Selektionsbildschirm: Ermöglicht die Eingabe von Pflicht- und optionalen Kriterien.
Datenaufbereitung: Liest die Daten aus der Tabelle /1BEA/IPMI_DLI, filtert sie und prüft auf Fehler.
Testmodus: Simuliert die Verarbeitung, ohne Änderungen am System vorzunehmen.
Transaktionsmanagement: Führt BAPI_TRANSACTION_COMMIT oder BAPI_TRANSACTION_ROLLBACK aus, basierend auf der Fehlerprüfung.
ALV-Ausgabe: Zeigt die Ergebnisse in einem übersichtlichen ALV-Grid an.
Falls Sie weitere Anpassungen benötigen, wie z. B. spezifische Filterlogiken oder Erweiterungen, lassen Sie es mich wissen!

Du:
super! ich danke dir
ChatGPT:
ChatGPT
Sehr gerne! 😊 Viel Erfolg mit der Implementierung und dem Testen des Reports. Wenn du später noch Fragen hast oder Anpassungen brauchst, lass es mich wissen. 🚀 Viel Erfolg!
...
Рейтинг: 0 / 0
Чат GPT таки шоколадный друг :)
    #1155772
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
in deinem report parameter sind nicht verwendbar. kannnst du den Report umbauen und die Parameter im lauf bingen?
ChatGPT:
ChatGPT
Danke für den Hinweis! Ich werde den Report so anpassen, dass die Parameter tatsächlich in der Selektion und Verarbeitung verwendet werden. Dabei binde ich die Parameter direkt in die Selektionslogik ein, um sicherzustellen, dass die Eingaben berücksichtigt werden.

Hier ist der überarbeitete und korrigierte ABAP-Report:
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
REPORT z_fakturavorrat_report.

* Definition der Texte
TEXT-001 = 'Fakturavorrat Report'.

* Datenstrukturen für ALV und Fehlerhandling
TYPES: BEGIN OF ty_alv_data,
         object_id  TYPE crmd_orderadm_h-object_id,
         number_int TYPE crmd_orderadm_i-number_int,
         src_itemno TYPE /1bea/ipmi_dli-src_itemno,
         net_value  TYPE /1bea/ipmi_dli-net_value,
         bill_block TYPE /1bea/ipmi_dli-src_bill_block,
         headno_ext TYPE /1bea/ipmi_bdh-headno_ext,
         error_msg  TYPE char80,
       END OF ty_alv_data.

DATA: lt_alv_data TYPE TABLE OF ty_alv_data,
      lt_error_table TYPE TABLE OF bapiret2,
      lv_error_count TYPE i.

* Selektionsbildschirm
SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.

PARAMETERS: p_object_id TYPE crmd_orderadm_h-object_id OPTIONAL,
            p_itm_type  TYPE crmd_orderadm_i-itm_type OPTIONAL,
            p_prod      TYPE crmd_orderadm_i-ordered_prod OPTIONAL.

SELECT-OPTIONS: so_date FOR scapptseg-tst_from OBLIGATORY.

PARAMETERS: p_test TYPE abap_bool DEFAULT abap_false.

SELECTION-SCREEN END OF BLOCK blk1.

START-OF-SELECTION.

* Daten aus der Tabelle /1BEA/IPMI_DLI selektieren
DATA: lt_dli_data TYPE TABLE OF /1bea/ipmi_dli.

SELECT *
  INTO TABLE lt_dli_data
  FROM /1bea/ipmi_dli
  WHERE bill_block IS INITIAL
    AND tst_from BETWEEN so_date-low AND so_date-high.

* Optionale Filter einbauen
IF p_object_id IS NOT INITIAL.
  DELETE lt_dli_data WHERE object_id <> p_object_id.
ENDIF.

IF p_itm_type IS NOT INITIAL.
  DELETE lt_dli_data WHERE itm_type <> p_itm_type.
ENDIF.

IF p_prod IS NOT INITIAL.
  DELETE lt_dli_data WHERE ordered_prod <> p_prod.
ENDIF.

* Daten aufbereiten
LOOP AT lt_dli_data INTO DATA(ls_dli).
  DATA(ls_alv) = VALUE ty_alv_data(
    object_id  = ls_dli-object_id
    number_int = ls_dli-number_int
    src_itemno = ls_dli-src_itemno
    net_value  = ls_dli-net_value
    bill_block = ls_dli-src_bill_block
    headno_ext = ls_dli-headno_ext
    error_msg  = '' " Hier könnten weitere Fehlerbehandlungen eingefügt werden
  ).

  " Fehlerprüfung (Beispiel)
  IF ls_alv.net_value IS INITIAL.
    ls_alv-error_msg = 'Netto-Wert fehlt'.
  ENDIF.

  APPEND ls_alv TO lt_alv_data.
ENDLOOP.

* Testmodus: Simulation ohne Änderungen
IF p_test = abap_true.
  WRITE: / 'Testmodus aktiviert: Daten werden nur simuliert.'.
  LOOP AT lt_alv_data INTO DATA(ls_test_alv).
    WRITE: / ls_test_alv-object_id, ls_test_alv-number_int, ls_test_alv-error_msg.
  ENDLOOP.
  RETURN.
ENDIF.

* Daten an den Funktionsbaustein übergeben
CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE'
  EXPORTING
    it_data = lt_alv_data
  IMPORTING
    et_errors = lt_error_table.

* Fehleranalyse
LOOP AT lt_error_table INTO DATA(ls_error).
  IF ls_error-type = 'E' OR ls_error-type = 'A'.
    lv_error_count = lv_error_count + 1.
    WRITE: / 'Fehler:', ls_error-message.
  ENDIF.
ENDLOOP.

* Transaktionssteuerung
IF lv_error_count = 0.
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = abap_true.
  WRITE: / 'Änderungen wurden erfolgreich gespeichert.'.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  WRITE: / 'Änderungen wurden zurückgesetzt wegen Fehlern.'.
ENDIF.

* ALV-Ausgabe
DATA: gr_alv TYPE REF TO cl_salv_table.

TRY.
    cl_salv_table=>factory(
      IMPORTING r_salv_table = gr_alv
      CHANGING  t_table      = lt_alv_data ).

    gr_alv->get_columns( )->get_column( 'OBJECT_ID' )->set_short_text( 'Vertragsnummer' ).
    gr_alv->get_columns( )->get_column( 'NUMBER_INT' )->set_short_text( 'Vertragsposition' ).
    gr_alv->get_columns( )->get_column( 'SRC_ITEMNO' )->set_short_text( 'FAP ID/BRI ID' ).
    gr_alv->get_columns( )->get_column( 'NET_VALUE' )->set_short_text( 'Faktura Nettowert' ).
    gr_alv->get_columns( )->get_column( 'BILL_BLOCK' )->set_short_text( 'Fakturasperre' ).
    gr_alv->get_columns( )->get_column( 'HEADNO_EXT' )->set_short_text( 'Fakturanummer' ).
    gr_alv->get_columns( )->get_column( 'ERROR_MSG' )->set_short_text( 'Fehlermeldung' ).

    gr_alv->display( ).

  CATCH cx_salv_msg INTO DATA(lx_msg).
    WRITE: / 'Fehler bei der Anzeige des ALV:', lx_msg->get_text( ).
ENDTRY.
...
Рейтинг: 0 / 0
Чат GPT таки шоколадный друг :)
    #1176802
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
Noch eine Version.. тоже GPT шный бред..ну и мой отчасти[:wacko]
Спойлер
Код: Java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
REPORT z_create_faktura_report.

* Daten-Deklaration
TABLES: crmd_orderadm_h,
        crmd_orderadm_i,
        /1bea/ipmi_dli,
        /1bea/ipmi_bdh.

TYPES: BEGIN OF ty_alv_data,
         object_id  TYPE crmd_orderadm_h-object_id,
         src_itemno TYPE /1bea/ipmi_dli-src_itemno,
         net_value  TYPE /1bea/ipmi_dli-net_value,
         bill_block TYPE /1bea/ipmi_dli-src_bill_block,
         headno_ext TYPE /1bea/ipmi_bdh-headno_ext,
         app_guid   TYPE scapptseg-appl_guid,
         error_msg  TYPE char80,
         factura_no TYPE /1bea/ipmi_bdh-headno_ext, " Faktura-Nummer
       END OF ty_alv_data.

DATA: lt_positions   TYPE TABLE OF /1bea/ipmi_dli,
      ls_position    TYPE /1bea/ipmi_dli,
      lt_alv_data    TYPE TABLE OF ty_alv_data,
      ls_alv_data    TYPE ty_alv_data,
      lt_error_table TYPE TABLE OF ty_alv_data,
      lv_error_msg   TYPE char80.

* Selektion
PARAMETERS: p_min_value TYPE /1bea/ipmi_dli-net_value DEFAULT '1000', " Mindestbetrag
            p_test_run  TYPE abap_bool DEFAULT abap_true. " Testlauf

START-OF-SELECTION.
  TRY.
      " Relevante Positionen filtern
      SELECT * FROM /1bea/ipmi_dli
        INTO TABLE lt_positions
        WHERE src_bill_block = ' '   " Nur Positionen ohne Faktura-Sperre
          AND net_value >= p_min_value. " Mindestwert prüfen

      LOOP AT lt_positions INTO ls_position.
        CLEAR ls_alv_data.

        " ALV-Datensatz aufbereiten
        ls_alv_data-src_itemno = ls_position-src_itemno.
        ls_alv_data-net_value  = ls_position-net_value.
        ls_alv_data-bill_block = ls_position-src_bill_block.
        ls_alv_data-app_guid   = ls_position-ref_guid.

        SELECT SINGLE object_id
          INTO ls_alv_data-object_id
          FROM crmd_orderadm_h
          WHERE guid = ls_position-ref_guid.

        SELECT SINGLE headno_ext
          INTO ls_alv_data-headno_ext
          FROM /1bea/ipmi_bdh
          WHERE appl_guid = ls_position-ref_guid.

        APPEND ls_alv_data TO lt_alv_data.
      ENDLOOP.

      " Nur fortfahren, wenn Daten vorhanden sind
      IF lt_alv_data IS INITIAL.
        MESSAGE 'Keine relevanten Positionen gefunden' TYPE 'I'.
        RETURN.
      ENDIF.

      " Verarbeitung: Faktura erstellen
      IF p_test_run = abap_true.
        LOOP AT lt_alv_data INTO ls_alv_data.
          ls_alv_data-error_msg = 'TEST: Keine Buchung durchgeführt'.
          APPEND ls_alv_data TO lt_error_table.
        ENDLOOP.
      ELSE.
        CALL FUNCTION '/1BEA/IPMI_BD_O_CREATE'
          EXPORTING
            it_data = lt_alv_data
          IMPORTING
            et_errors = lt_error_table
          EXCEPTIONS
            others = 1.

        IF sy-subrc <> 0.
          MESSAGE 'Fehler beim Aufruf der Fakturaerstellung' TYPE 'E'.
        ENDIF.

        " Aktualisierung der generierten headno_ext aus der Tabelle /1BEA/IPMI_BDH
        LOOP AT lt_alv_data INTO ls_alv_data WHERE app_guid IS NOT INITIAL.
          SELECT SINGLE headno_ext
            INTO ls_alv_data-factura_no
            FROM /1bea/ipmi_bdh
            WHERE appl_guid = ls_alv_data-app_guid.

          MODIFY lt_alv_data FROM ls_alv_data TRANSPORTING factura_no.
        ENDLOOP.
      ENDIF.

    CATCH cx_root INTO DATA(lx_root).
      lv_error_msg = lx_root->get_text( ).
      MESSAGE lv_error_msg TYPE 'E'.
  ENDTRY.

END-OF-SELECTION.

* ALV-Ausgabe
DATA: lt_display_table TYPE TABLE OF ty_alv_data.

IF p_test_run = abap_false.
  lt_display_table = lt_alv_data. " Tatsächliche Daten ausgeben
ELSE.
  lt_display_table = lt_error_table. " Testdaten ausgeben
ENDIF.

IF lt_display_table IS NOT INITIAL.
  DATA: lt_fieldcat TYPE lvc_t_fcat,
        ls_fieldcat TYPE lvc_s_fcat.

  " ALV-Feldkatalog erstellen
  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'OBJECT_ID'.
  ls_fieldcat-seltext_m = 'Objekt-ID'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'SRC_ITEMNO'.
  ls_fieldcat-seltext_m = 'Quellposition'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'NET_VALUE'.
  ls_fieldcat-seltext_m = 'Nettowert'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'BILL_BLOCK'.
  ls_fieldcat-seltext_m = 'Faktura-Sperre'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'HEADNO_EXT'.
  ls_fieldcat-seltext_m = 'Externe Kopfnummer'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'FACTURA_NO'.
  ls_fieldcat-seltext_m = 'Faktura-Nummer'.
  APPEND ls_fieldcat TO lt_fieldcat.

  CLEAR ls_fieldcat.
  ls_fieldcat-fieldname = 'ERROR_MSG'.
  ls_fieldcat-seltext_m = 'Fehlermeldung'.
  APPEND ls_fieldcat TO lt_fieldcat.

  " ALV anzeigen
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      it_fieldcat = lt_fieldcat
    TABLES
      t_outtab    = lt_display_table
    EXCEPTIONS
      program_error = 1
      others        = 2.

  IF sy-subrc <> 0.
    MESSAGE 'Fehler bei der ALV-Ausgabe' TYPE 'E'.
  ENDIF.
ENDIF.
перегон дерьма в сливочное масло проходит успешно ..уже лутше .. нахлеб уже мажецца .. но ище воняед[:wacko]
Спойлер
Код: JavaScript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
*&---------------------------------------------------------------------*
*& Report Z_FAKTURAVORRAT_REPORT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
report z_fakturavorrat_report.

tables: crmd_orderadm_h, crmd_orderadm_i,  /1bea/ipmi_dli, scapptseg.
*--- Definition der benutzerdefinierten Struktur ---

constants:
  cv_f_ver(1) type c value 'V',  "Verbrauchfakturen,
  cv_f_geb(1) type c value 'G'.  "Gebührenfakturen.

types: begin of ty_vdata,
         header       type crmd_orderadm_h-guid,
         object_id    type crmd_orderadm_h-object_id,
         guid         type crmd_orderadm_i-guid,
         itm_type     type crmd_orderadm_i-itm_type,
         number_int   type crmd_orderadm_i-number_int,
         zcrf_lizref  type crmd_customer_i-zcrf_lizref,
         product_guid type comm_product-product_guid,
         product_id   type comm_product-product_id,
         tst_from     type scapptseg-tst_from,
         tst_to       type scapptseg-tst_to,
         objtype_hi   type crmd_link-objtype_hi,
         objtype_set  type crmd_link-objtype_set,
         stat         type crm_j_status,
       end of ty_vdata.

types: tt_vdata type table of ty_vdata with empty key.

data: lt_vdata  type  tt_vdata.
data: lt_vdata_all  type  tt_vdata.

types: begin of ty_alv_data,
         object_id  type crmd_orderadm_h-object_id,    " Objekt ID aus CRM-Order Header
         number_int type crmd_orderadm_i-number_int,
         itm_type   type crmd_orderadm_i-itm_type,
         "         src_itemno type /1bea/ipmi_dli-src_itemno,    " Artikelnummer der Quellrechnung
         net_value  type /1bea/ipmi_dli-net_value,     " Nettowert der Position
         bill_block type /1bea/ipmi_dli-src_bill_block, " Blockierungsstatus der Rechnung
         headno_ext type /1bea/ipmi_bdh-headno_ext,    " Erweiterte Rechnungsnummer
         "         app_guid   type scapptseg-appl_guid,           " GUID des Vertrags (APPL_GUID statt APP_SEG_ID)
         error_msg  type char80,                        " Fehlernachricht
       end of ty_alv_data.

types: tt_alv_data type table of ty_alv_data.

data:    ls_dlis type  /1bea/ipmi_dli.
data:    gt_fieldcat type slis_t_fieldcat_alv.

types begin of ty_dli.
"include structure /1bea/ipmi_dli.
include structure ls_dlis.
types zcrf_lizref  type crmd_customer_i-zcrf_lizref.
types headno_ext   type bea_headno_ext.
types end of ty_dli.

types: tt_dli type table of ty_dli.

data: lt_dli     type tt_dli,
      lt_dli_all type  tt_dli,
      ls_dli     type ty_dli.

*--- Data Declarations ---
data: lt_header        type table of crmd_orderadm_h, " Header
      lt_positions     type table of crmd_orderadm_i, " Positionen
      lt_filtered_pos  type table of crmd_orderadm_i, " Gefilterte Positionen
      "     lt_dli           type table of /1bea/ipmi_dli,
      "      lt_dli_all       type table of /1bea/ipmi_dli,
      "      ls_dli           type  /1bea/ipmi_dli,
      ls_dli_cntr      type  /1bea/ipmi_dli,
      lt_billing_data  type table of /1bea/ipmi_bdh,   " Fakturadaten
      lt_contract_data type table of scapptseg,        " Vertragsdaten
      gt_output        type table of ty_alv_data,     " ALV-Datenstruktur
      lt_dli_wrk       type  /1bea/t_ipmi_dli_wrk,
      ls_dli_wrk       type  /1bea/s_ipmi_dli_wrk,
      lt_range2        type range of crmd_orderadm_i-itm_type,  " 1. Range-Tabelle
      lt_range14       type range of crmd_orderadm_i-itm_type,  " 2. Range-Tabelle
      lv_error         type string,
      lt_return        type  beat_return,            " Fehlernachricht
      gt_return        type  beat_return,            " Fehlernachricht
      ls_return        type  beas_return.
"data: lv_prod_mode      type c length 1.               " Modus: 'P' für Produktiv, 'T' für Test
data: lv_commit_status type string.

data: ls_alv type ty_alv_data.

data: lv_fakt_art(1) type c.

data: lv_tst_from type timestampl,
      lv_tst_to   type timestampl.

data: lv_base_from type timestampl,
      lv_base_to   type timestampl.
*--- Selection Screen ---

"PARAMETERS: obj_id TYPE  crmd_orderadm_h DEFAULT '0006000312'.

*
*parameters: p_vbeg type d,
*            p_vend type d . " Vertragsende

select-options: so_objid for crmd_orderadm_h-object_id default '0010000002',   " Header Object ID
                so_itmtp for crmd_orderadm_i-itm_type, " default 'ZVM2' no intervals,
                so_prod  for crmd_orderadm_i-ordered_prod." default 'TESTIP'. " Ordered Product

parameters: p_dt_vfr type d default '20000110', "OBLIGATORY,
            p_dt_vto type d default '20241130'. " OBLIGATORY.

parameters: p_minval type /1bea/ipmi_dli-net_value default 5.
parameters:  p_test   type abap_bool default abap_true.
*--- START-OF-SELECTION: Hauptlogik ---

initialization.

  append value #( sign = 'I' option = 'EQ' low = 'ZVM1' ) to so_itmtp.
  append value #( sign = 'I' option = 'EQ' low = 'ZVM2' ) to so_itmtp.
  append value #( sign = 'I' option = 'EQ' low = 'ZVM4' ) to so_itmtp.
  append value #( sign = 'I' option = 'EQ' low = 'ZVA1' ) to so_itmtp.

start-of-selection.

  clear lt_range2.
  clear lt_range14.

  loop at so_prod assigning field-symbol(<fs_prod>).
    <fs_prod>-low = |{ <fs_prod>-low alpha = in }|.
    <fs_prod>-high = |{ <fs_prod>-high alpha = in }|.
  endloop.

  loop at so_objid assigning field-symbol(<fs_objid>).
    <fs_objid>-low = |{ <fs_objid>-low alpha = in }|.
    <fs_objid>-high = |{ <fs_objid>-high alpha = in }|.
  endloop.

  loop at so_itmtp.
    case so_itmtp-sign.
      when 'I'.
        case so_itmtp-option.
          when 'EQ'.
            if so_itmtp-low = 'ZVM2'.
              " ZVM1 in die erste Range-Tabelle
              append value #( sign = 'I' option = 'EQ' low = so_itmtp-low ) to lt_range2.
            else.
              " Alle anderen in die zweite Range-Tabelle
              append value #( sign = 'I' option = 'EQ' low = so_itmtp-low ) to lt_range14.
            endif.
        endcase.
    endcase.
  endloop.

  " Modus festlegen
  "lv_prod_mode =  p_test.

* CONVERT DATE p_dat_fr TIME '000000' INTO TIME STAMP lv_tst_from TIME ZONE sy-zonlo.
* CONVERT DATE p_dat_to TIME '235959' INTO TIME STAMP lv_tst_to TIME ZONE sy-zonlo.

  convert date p_dt_vfr time '000000' into time stamp lv_base_from time zone sy-zonlo.
  convert date p_dt_vto time '235959' into time stamp lv_base_to time zone sy-zonlo.

  " Selektiere  ZVM2 Positionen mit Verknüpfung und zusätzlichen Select-Options
  if lt_range2 is not initial.
    lt_vdata = zcl_dli_util=>get_contr_positions(
                 it_objid = so_objid[]
                 it_itmtp = lt_range2
                 it_prod  = so_prod[] ).

    if lt_vdata is not initial.
      perform create_fakturen using lt_vdata cv_f_ver.
    endif.
  endif.

  refresh lt_vdata.

  " Selektiere  ZVM1,ZVM4 Positionen mit Verknüpfung und zusätzlichen Select-Options
  if lt_range14 is not initial.
    lt_vdata = zcl_dli_util=>get_contr_positions(
                 it_objid = so_objid[]
                 it_itmtp = lt_range14
                 it_prod  = so_prod[] ).

    if lt_vdata is not initial.
      perform create_fakturen using lt_vdata cv_f_geb.
    endif.
  endif.

  perform create_fieldcat.

  perform display_alv.

  free lt_dli_wrk.

end-of-selection.

*-----------------------------------------------------*
*&      Form  CREATE_FAKTUREN
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_VDATA  text
*----------------------------------------------------------------------*
form create_fakturen  using  pt_vdata type tt_vdata pv_fkt_art.
  data: lv_headno_ext type bea_headno_ext.
  data: lv_src_headno    type bea_src_headno,
        lv_src_item_type type crmt_item_type,
        lv_zcrf_lizref   type crmd_customer_i-zcrf_lizref.
  check lt_vdata is not initial.
  sort lt_vdata by header guid. "tst_from tst_to.

  "delete adjacent duplicates from lt_vdata comparing  header guid. "tst_from tst_to.
  "  " Rechnungsdaten filtern nach Select-Options und src_bill_block IS NULL
  lt_dli = zcl_dli_util=>get_dli_positions(
             it_vdata      = lt_vdata
             iv_minval     = p_minval
             iv_bill_date_from = p_dt_vfr
             iv_bill_date_to =  p_dt_vto ).
  "             iv_base_from  = lv_base_from
  "             iv_base_to    = lv_base_to ).

  if  lt_dli is not initial.

    case  pv_fkt_art.
      when cv_f_ver.

        loop at lt_dli into ls_dli
            group by ( src_headno = ls_dli-src_headno zcrf_lizref = ls_dli-zcrf_lizref ) into data(cntrv).
          lv_src_headno = cntrv-src_headno.
          lv_zcrf_lizref = cntrv-zcrf_lizref.
          clear: lv_headno_ext.
          refresh: lt_dli_wrk.

          loop at group cntrv into ls_dli_cntr.
            move-corresponding ls_dli_cntr to ls_dli_wrk.
            append ls_dli_wrk to lt_dli_wrk.
          endloop.

          zcl_dli_util=>create_faktura(
         exporting
           iv_testlauf = p_test
           it_dli_wrk  = lt_dli_wrk
             importing
           ev_headno_ext = lv_headno_ext
        receiving
           rt_return   = lt_return ).

          if lv_headno_ext is not initial.
            loop at lt_dli assigning field-symbol(<fs_dli>) where src_headno = lv_src_headno and
                                                              zcrf_lizref = lv_zcrf_lizref.
              if sy-subrc = 0.
                <fs_dli>-headno_ext = lv_headno_ext.
                "      exit.
              endif.
            endloop.

          endif.
          append lines of lt_return to gt_return.
          clear: lv_src_headno, lv_zcrf_lizref.
        endloop.

        append lines of lt_dli to lt_dli_all.
      when cv_f_geb.

        loop at lt_dli into ls_dli
            group by ( src_headno = ls_dli-src_headno src_item_type = ls_dli-src_item_type ) into data(cntrg).
          lv_src_headno = cntrg-src_headno.
          lv_src_item_type = cntrg-src_item_type.
          clear: lv_headno_ext.
          refresh: lt_dli_wrk.
          loop at group cntrg into ls_dli_cntr.
            move-corresponding ls_dli_cntr to ls_dli_wrk.
            append ls_dli_wrk to lt_dli_wrk.
          endloop.

          zcl_dli_util=>create_faktura(
         exporting
           iv_testlauf = p_test
           it_dli_wrk  = lt_dli_wrk
           importing
           ev_headno_ext = lv_headno_ext
        receiving
           rt_return   = lt_return ).

          if lv_headno_ext is not initial.
            loop at lt_dli assigning field-symbol(<fs_dli1>) where src_headno = lv_src_headno and
                                                              src_item_type = lv_src_item_type.
              if sy-subrc = 0.
                <fs_dli1>-headno_ext = lv_headno_ext.

              endif.
                " exit.
            endloop.

          endif.
          append lines of lt_return to gt_return.
          clear: lv_src_headno, lv_src_item_type.

        endloop.
        append lines of lt_dli to lt_dli_all.
      when others.
    endcase.

    "BREAK-POINT.
    "  rollback work.

    loop at lt_dli_all into  ls_dli.
      "loop at lt_dli into  ls_dli.
      move-corresponding ls_dli to ls_alv.
      "    " ALV-Daten aufbereiten
      data(ls_output) = value ty_alv_data(
  "        object_id   = ls_alv-object_id
  "      src_itemno  = ls_alv-src_itemno
        net_value   = ls_dli-net_value
        bill_block  = ls_alv-bill_block
        headno_ext  = ls_dli-headno_ext
      "  app_guid    = ls_alv-appl_guid
        error_msg   = ls_alv-error_msg ).

      read table lt_vdata into data(ls_data) with key
                          guid = ls_dli-src_guid
                          product_guid = ls_dli-product.
      ls_output-object_id =  ls_data-object_id.
      ls_output-number_int = ls_data-number_int.
      ls_output-itm_type   = ls_data-itm_type.
      read table gt_return into ls_return with key
                           src_itemno = ls_data-number_int
                           src_headno = ls_data-object_id.
      if sy-subrc = 0.
        ls_output-error_msg = ls_return-message.
      endif.
      append ls_output to gt_output.
    endloop.

  endif.
endform.
*&---------------------------------------------------------------------*
*&      Form  CREATE_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form create_fieldcat .

  data: ls_fieldcat type slis_fieldcat_alv.
  if gt_fieldcat is initial.
    " ALV-Feldkatalog erstellen
    clear ls_fieldcat.
    ls_fieldcat-outputlen = 20.
    ls_fieldcat-fieldname = 'OBJECT_ID'.
    ls_fieldcat-seltext_m  = 'Objekt-ID'.
    append ls_fieldcat to gt_fieldcat.

    clear ls_fieldcat.
    ls_fieldcat-outputlen = 20.
    ls_fieldcat-fieldname = 'NUMBER_INT'.
    ls_fieldcat-seltext_m = 'Vertragsposition'.
    append ls_fieldcat to gt_fieldcat.

    clear ls_fieldcat.
    ls_fieldcat-outputlen = 20.
    ls_fieldcat-fieldname = 'ITM_TYPE'.
    ls_fieldcat-seltext_m = 'Item-Type'.
    append ls_fieldcat to gt_fieldcat.

    clear ls_fieldcat.
    ls_fieldcat-outputlen = 20.
    ls_fieldcat-fieldname = 'NET_VALUE'.
    ls_fieldcat-seltext_m = 'Nettowert'.
    append ls_fieldcat to gt_fieldcat.

    clear ls_fieldcat.
    ls_fieldcat-outputlen = 20.
    ls_fieldcat-fieldname = 'BILL_BLOCK'.
    ls_fieldcat-seltext_m = 'Faktura-Sperre'.
    append ls_fieldcat to gt_fieldcat.

    clear ls_fieldcat.
    ls_fieldcat-outputlen = 20.
    ls_fieldcat-fieldname = 'HEADNO_EXT'.
    ls_fieldcat-seltext_m = 'Faktura-Nummer'.
    append ls_fieldcat to gt_fieldcat.

    clear ls_fieldcat.
    ls_fieldcat-fieldname = 'ERROR_MSG'.
    ls_fieldcat-outputlen = 20.
    ls_fieldcat-seltext_m = 'Fehlermeldung'.
    append ls_fieldcat to gt_fieldcat.

  endif.
endform.

*&---------------------------------------------------------------------*
*&      Form  DISPLAY_ALV
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_GT_OUTPUT  text
*----------------------------------------------------------------------*
form display_alv.

  sort gt_output by object_id itm_type number_int.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat   = gt_fieldcat
    tables
      t_outtab      = gt_output
    exceptions
      program_error = 1
      others        = 2.

endform.

*  delete adjacent duplicates from lt_dli comparing all fields.
*  loop at lt_dli into ls_dli
*        group by ls_dli-src_headno  into data(cntr).
*
*    loop at group cntr into ls_dli_cntr.
*      move-corresponding ls_dli_cntr to ls_dli_wrk.
*      append ls_dli_wrk to lt_dli_wrk.
*    endloop.
*  endloop.
*&----------------

*  loop at gt_return into data(ls_return).
*    if ls_return-type = 'S'.
*      find 'Fakturanummer' in ls_return-message.
*      if sy-subrc = 0.
*        "WRITE: / 'Erstellte Fakturanummer:', ls_return-message.
*
*
*      endif.
*    endif.
*  endloop.
код без класса утилит дырка от бублека.
gpt часто пездит.. но извиняецца когда его обзываю
Спойлер
111.png
...
Изменено: Вчера, 20:45 - Шоколадный01
Рейтинг: 0 / 0
Чат GPT таки шоколадный друг :)
    #1176812
Шоколадный01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор темы
гринка дай модера.
...
Рейтинг: 0 / 0
Чат GPT таки шоколадный друг :)
    #1179507
Администратор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Администратор
Пользователь назначен модератором темы: Шоколадный01.
...
Администратор:
Пользователь назначен модератором темы: Шоколадный01.
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Вопросы по IT [закрыт для гостей] / Чат GPT таки шоколадный друг :)
Модераторы: Шоколадный01
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]