Code: Alles auswählen.
PROGRAM zliefervolu.
*---------------------------------------------------------------------*
* Definition *
*---------------------------------------------------------------------*
TABLES: likp, "Vertriebsbeleg: Lieferung: Kopfdaten
lips, "Vertriebsbeleg: Lieferung: Positionsdaten
kna1, "Kundenstamm (allgemeiner Teil)
marm. "Mengeneinheiten zum Material
FIELD-SYMBOLS: <fs_data> TYPE REF TO data,
<fs_1> TYPE ANY TABLE,
<fs_2> TYPE ANY,
<fs_3>,
<fs_4>.
DATA: BEGIN OF i_vbeln OCCURS 1,
faktor(5) TYPE n,
END OF i_vbeln.
DATA: BEGIN OF v_lief OCCURS 1,
faktor TYPE string,
END OF v_lief.
DATA: ok_code LIKE sy-ucomm, "Bildschirmbilder, Funktionscode, der PAI ausgelöst hat
i_lieferdatenn TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2, "Interne Tabelle speichern von Hauptdaten
i_lieferdaten TYPE TABLE OF zvoludata WITH HEADER LINE INITIAL SIZE 2, "Interne Tabelle2 speichern von Hauptdaten
v_debittext TYPE string, "Kundentext
v_debitnulltext TYPE string,"Kundennummer ohne führende Nullen
v_debit TYPE kunnr, "Kundennummer zum vergleichen
v_umvkz TYPE string,
v_lifg TYPE i,
v_datumkl TYPE wadat,
v_datumgr TYPE wadat,
v_faktor(5) TYPE n,
v_tabix TYPE sy-tabix,
v_volurech TYPE string, "Volumenberechnung
v_faktors TYPE string,
v_datum TYPE string,
v_count TYPE i,
lt_fieldcatalog TYPE lvc_t_fcat,
ls_fieldcatalog TYPE lvc_s_fcat,
new_table TYPE REF TO data,
new_line TYPE REF TO data,
lt_data TYPE REF TO data,
v_datumlow(10) TYPE c,
v_datumhigh(10) TYPE c,
v_text TYPE string,
name_catolog TYPE lvc_t_fcat, "Ändern von Spaltenname
g_container TYPE scrfname VALUE 'BCALV_GRID_CONTROL',
grid1 TYPE REF TO cl_gui_alv_grid, "ALV Grid Definition
g_fieldname(100) TYPE c,
g_custom_container TYPE REF TO cl_gui_custom_container.
SELECT-OPTIONS: s_kunnr FOR likp-kunnr, "Lieferung
s_wadat FOR likp-wadat OBLIGATORY, "Geplantes Datum der Warenbewegung
s_vbeln FOR likp-vbeln. "Warenempfänger
*---------------------------------------------------------------------*
* Main Program *
*---------------------------------------------------------------------*
START-OF-SELECTION.
CLEAR: likp.
REFRESH: i_lieferdaten.
* Selektion Vertriebsbeleg: Lieferung: Kopfdaten
SELECT * FROM likp WHERE vbeln IN s_vbeln
AND wadat IN s_wadat
AND kunnr IN s_kunnr
ORDER BY vbeln.
CLEAR: i_lieferdaten.
MOVE likp-kunnr TO i_lieferdaten-kunnr.
CLEAR: lips.
* Selektion Vertriebsbeleg: Lieferung: Positionsdaten
SELECT * FROM lips WHERE vbeln EQ likp-vbeln.
CLEAR: marm.
* Selektion Mengeneinheiten zum Material
SELECT SINGLE * FROM marm WHERE matnr EQ lips-matnr
AND meinh EQ lips-vrkme.
CLEAR: v_volurech.
* Volumen = Zähler für die Umrechnung in Basismengeneinheiten * Tatsächlich gelieferte Menge in VME * Höhe
v_volurech = lips-lfimg * marm-hoehe.
MOVE v_volurech TO i_lieferdaten-volomen.
MOVE lips-lfimg TO i_lieferdaten-lfimg.
MOVE lips-umvkz TO i_lieferdaten-umvkz.
APPEND i_lieferdaten.
* Vorhandene Faktor abspeichern
MOVE lips-umvkz TO i_vbeln-faktor.
APPEND i_vbeln.
ENDSELECT.
* MOVE likp-vbeln TO lieferschein-vbeln.
* APPEND lieferschein.
ENDSELECT.
CLEAR: i_vbeln, i_lieferdaten.
SORT i_vbeln BY faktor.
SORT i_lieferdaten BY kunnr umvkz ASCENDING.
*------------------------*
* Matrixdaten füllen *
*------------------------*
LOOP AT i_lieferdaten.
IF i_lieferdaten-kunnr NE v_debit.
IF v_count NE 0.
APPEND i_lieferdatenn.
ENDIF.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-kunnr TO v_debit.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
v_count = v_count + 1.
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz EQ v_umvkz.
ADD i_lieferdaten-lfimg TO i_lieferdatenn-lfimg.
ADD i_lieferdaten-volomen TO i_lieferdatenn-volomen.
ELSEIF i_lieferdaten-kunnr EQ v_debit AND i_lieferdaten-umvkz NE v_umvkz.
APPEND i_lieferdatenn.
CLEAR: i_lieferdatenn.
MOVE i_lieferdaten-umvkz TO v_umvkz.
MOVE-CORRESPONDING i_lieferdaten TO i_lieferdatenn.
ENDIF.
ENDLOOP.
APPEND i_lieferdatenn.
*------------------------*
* Datumsfeld *
*------------------------*
MOVE s_wadat-low TO v_datumkl.
v_datumlow = v_datumkl+6.
WRITE '.' TO v_datumlow+2.
WRITE v_datumkl+4(2) TO v_datumlow+3.
WRITE '.' TO v_datumlow+5.
WRITE v_datumkl(4) TO v_datumlow+6.
LOOP AT s_wadat WHERE high IS NOT INITIAL.
MOVE s_wadat-high TO v_datumgr.
ENDLOOP.
v_datumhigh = v_datumgr+6.
WRITE '.' TO v_datumhigh+2.
WRITE v_datumgr+4(2) TO v_datumhigh+3.
WRITE '.' TO v_datumhigh+5.
WRITE v_datumgr(4) TO v_datumhigh+6.
IF v_datumgr IS NOT INITIAL.
CONCATENATE v_datumlow '-' v_datumhigh INTO v_datum.
ELSE.
MOVE v_datumlow TO v_datum.
ENDIF.
CLEAR v_text.
v_text = 'DATUM'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
*------------------------*
* Faktorfelder *
*------------------------*
CLEAR: v_count.
LOOP AT i_vbeln.
IF i_vbeln-faktor NE v_faktor.
MOVE i_vbeln-faktor TO v_faktor.
PACK i_vbeln-faktor TO v_faktors.
CONDENSE v_faktors.
MOVE v_faktors TO v_lief-faktor.
v_count = v_count + 1.
APPEND v_lief.
ENDIF.
ENDLOOP.
CLEAR v_text.
v_text = 'VOLUMEN'.
MOVE v_text TO v_lief-faktor.
APPEND v_lief.
CLEAR: v_lief.
*-----------------------------*
* Erstellen von Dym. Struktur *
*-----------------------------*
LOOP AT v_lief.
IF v_lief-faktor EQ 'DATUM' OR v_lief-faktor EQ 'VOLUMEN'.
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
IF v_lief-faktor EQ 'DATUM'.
ls_fieldcatalog-coltext = v_datum.
* ls_fieldcatalog-inttype = .
ls_fieldcatalog-outputlen = '30'.
ELSEIF v_lief-faktor EQ 'VOLUMEN'.
ls_fieldcatalog-coltext = 'Volumen'.
ls_fieldcatalog-outputlen = '10'.
ENDIF.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ELSE.
CLEAR: ls_fieldcatalog.
ls_fieldcatalog-fieldname = v_lief-faktor.
ls_fieldcatalog-coltext = v_lief-faktor.
ls_fieldcatalog-outputlen = '6'.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ENDIF.
ENDLOOP.
ASSIGN lt_data TO <fs_data>.
IF v_count NE 0.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fieldcatalog
IMPORTING
ep_table = <fs_data>
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2.
IF sy-subrc <> 0.
*
*
*
ENDIF.
*-----------------------------*
* Matrix füllen *
*-----------------------------*
ASSIGN <fs_data>->* TO <fs_1>.
CREATE DATA new_line LIKE LINE OF <fs_1>.
ASSIGN new_line->* TO <fs_2>.
ASSIGN i_lieferdatenn TO <fs_3>.
CLEAR: v_count, v_debit, i_lieferdatenn, v_volurech.
APPEND i_lieferdatenn.
LOOP AT i_lieferdatenn.
CLEAR: kna1.
* Selektion Kundenstamm (allgemeiner Teil)
SELECT SINGLE * FROM kna1 WHERE kunnr EQ i_lieferdatenn-kunnr.
IF i_lieferdatenn-kunnr NE v_debit.
IF v_count NE 0.
CONCATENATE '<FS_2>-' 'VOLUMEN' INTO g_fieldname.
ASSIGN (g_fieldname) TO <fs_3>.
<fs_3> = v_volurech.
INSERT <fs_2> INTO TABLE <fs_1>.
CLEAR:<fs_2>.
ENDIF.
MOVE i_lieferdatenn-kunnr TO v_debit.
v_count = v_count + 1.
CONCATENATE '<FS_2>-' 'DATUM' INTO g_fieldname.
ASSIGN (g_fieldname) TO <fs_3>.
PACK i_lieferdatenn-kunnr TO v_debitnulltext.
CONDENSE v_debitnulltext.
CONCATENATE v_debitnulltext ` ` kna1-name1 INTO v_debittext.
<fs_3> = v_debittext.
v_umvkz = i_lieferdatenn-umvkz.
CONCATENATE '<FS_2>-' v_umvkz INTO g_fieldname.
ASSIGN (g_fieldname) TO <fs_3>.
v_lifg = i_lieferdatenn-lfimg.
<fs_3> = v_lifg.
v_volurech = v_volurech + i_lieferdatenn-volomen.
ELSEIF i_lieferdatenn-kunnr EQ v_debit.
CLEAR v_umvkz.
v_umvkz = i_lieferdatenn-umvkz.
CONCATENATE '<FS_2>-' v_umvkz INTO g_fieldname.
ASSIGN (g_fieldname) TO <fs_3>.
v_lifg = i_lieferdatenn-lfimg.
<fs_3> = v_lifg.
v_volurech = v_volurech + i_lieferdatenn-volomen.
ENDIF.
ENDLOOP.
ELSE.
CALL FUNCTION 'POPUP_TO_DISPLAY_TEXT_LO'
EXPORTING
titel = text-tit
textline1 = text-feh
start_column = 15 "Abstand von Links
start_row = 6. "Abstand von Oben
ENDIF.
CALL SCREEN 100.
END-OF-SELECTION.
*---------------------------------------------------------------------*
* MODULE PBO OUTPUT *
*---------------------------------------------------------------------*
MODULE pbo OUTPUT.
SET PF-STATUS 'MAIN100'.
IF g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING container_name = g_container.
CREATE OBJECT grid1
EXPORTING i_parent = g_custom_container.
* ALV Methode aufruf für Ausgabe
CALL METHOD grid1->set_table_for_first_display
* EXPORTING
* i_structure_name = 'lvc_t_fcat'
CHANGING
it_outtab = <fs_1>
it_fieldcatalog = lt_fieldcatalog.
ENDIF.
ENDMODULE. "PBO OUTPUT
*---------------------------------------------------------------------*
* MODULE PAI INPUT *
*---------------------------------------------------------------------*
MODULE pai INPUT.
* to react on oi_custom_events:
CALL METHOD cl_gui_cfw=>dispatch.
CASE ok_code.
WHEN 'EXIT'.
PERFORM exit_program.
WHEN OTHERS.
* do nothing
ENDCASE.
CLEAR ok_code.
ENDMODULE. "PAI INPUT
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
FORM exit_program.
* CALL METHOD G_CUSTOM_CONTAINER->FREE.
* CALL METHOD CL_GUI_CFW=>FLUSH.
LEAVE PROGRAM.
ENDFORM. "EXIT_PROGRAM
Must du im Fieldcat angeben:kostonstyle hat geschrieben:Noch eine Frage, wie kann ich die spalte datum blau färben?
Code: Alles auswählen.
IF v_lief-faktor EQ 'DATUM'.
ls_fieldcatalog-coltext = v_datum.
ls_fieldcatalog-outputlen = '30'.
ls_fieldcatalog-emphasize = 'CXYZ'.