Code: Alles auswählen.
DATA: t_detalle LIKE ti_ped OCCURS 0 WITH HEADER LINE
Code: Alles auswählen.
types: BEGIN OF t_ped,
vbeln LIKE vbak-vbeln, "Documento de ventas"
auart LIKE vbak-auart, "Clase de documento de ventas"
kunnr LIKE vbak-kunnr, "Numero del cliente"
name1 LIKE kna1-name1, "Nombre del cliente"
erdat LIKE vbak-erdat, "Fecha del pedido"
kwmeng LIKE vbap-kwmeng,
"Cantidad de pedido acumulada (en unidades de venta)"
matnr LIKE vbap-matnr, "Numero de material"
maktx LIKE makt-maktx, "Texto breve de material"
entre LIKE likp-vbeln, "Numero de la entrega"
charg LIKE lips-charg,
lfimg LIKE lips-lfimg, "Cantidad entregada efectivamente"
fecha LIKE likp-erdat, "Fecha de la entrega"
factu LIKE vbrk-vbeln, "Numero de la factura"
fkdat LIKE vbrk-fkdat, "Fecha de la factura"
END OF t_ped.
DATA: t_detalle type STANDARD TABLE OF t_ped WITH DEFAULT KEY, "eigentliche Tabelle
wa_detalle LIKE LINE OF t_detalle, "Workarea (eine Zeile) der Tabelle t_detalle
Code: Alles auswählen.
SELECT vbeln auart kunnr erdat
INTO CORRESPONDING FIELDS OF TABLE t_detalle
FROM vbak WHERE erdat IN s_fecha AND auart = p_clvent.
Code: Alles auswählen.
END-OF-SELECTION.
* Armado del catalogo automatico
PERFORM armar_catalogo_automatico.
Code: Alles auswählen.
DATA: g_err TYPE C LENGTH 1. "Fehlerflag, im Fehlerfall G_ERR=X
END-OF-SELECTION.
* Armado del catalogo automatico
PERFORM armar_catalogo_automatico CHANGING ti_catalogo g_err.
if g_err = 'X'.
"bei Fehlern im Feldkatalog wird der ALV nicht ausgegeben
exit.
endif.
* Seteo del layout
...
Code: Alles auswählen.
*&---------------------------------------------------------------------*
*& Form armar_catalogo_automatico
* <-- c_cat Feldkatalog
* <-- c_err Fehlerflag. X = Fehler beim Erzeugen des Feldkatalogs
*&---------------------------------------------------------------------*
FORM armar_catalogo_automatico CHANGING c_cat TYPE slis_t_fieldcat_alv
c_err type c.
v_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = v_repid
i_internal_tabname = 'TI_PED'
i_client_never_display = 'X'
i_inclname = v_repid
CHANGING
ct_fieldcat = c_cat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
c_err = 'X'.
ENDIF.
ENDFORM. "armar_catalogo_automatico
Code: Alles auswählen.
SELECT * FROM lips...
IF sy-subrc EQ 0.
"machwas
ENDIF.
ENDSELECT
Code: Alles auswählen.
SELECT * FROM lips...
"wenn ich hier ankomme, dann konnte SELECT mindestens eine Zeile selektieren
"machwas
ENDSELECT
"findet der SELECT keine Daten, so geht es gleich hier weiter...
Code: Alles auswählen.
FORM seleccion_datos.
...
LOOP AT t_detalle
...
SELECT * FROM vbap
SELECT SINGLE * FROM makt
SELECT SINGLE * FROM kna1
SELECT * FROM lips
SELECT * FROM likp
ENDSELECT
SELECT * FROM vbrp
ENDSELECT
ENDSELECT
ENDSELECT
...
ENDLOOP
Code: Alles auswählen.
LOOP at GT_VBAK INTO WA_VBAK.
READ TABLE GT_LIPS INTO WA_LIPS WITH KEY VGBEL = WA_VBAK-VBELN.
IF sy-subrc = 0.
"verfollständigen der Daten
WA_VBAK-entre = wa_lips-vbeln.
"Tabelle aktualisieren
MODIFY GT_VBAK FROM WA_VBAK.
ENDIF.
ENDLOOP.
Code: Alles auswählen.
SELECT * FROM likp WHERE vbeln EQ wa2_detalle-entre.
IF sy-subrc = 0.
w_detalle-fecha = likp-erdat.
ENDIF.
ENDSELECT.
Code: Alles auswählen.
SELECT entre FROM likp INTO w_detalle-fecha WHERE vbeln EQ wa2_detalle-entre.
ENDSELECT.
Code: Alles auswählen.
SELECT SINGLE entre FROM likp INTO w_detalle-fecha WHERE vbeln EQ wa2_detalle-entre.
Code: Alles auswählen.
SELECT * FROM lips
SELECT * FROM likp WHERE vbeln EQ wa2_detalle-entre.
ENDSELECT.
ENDSELECT.
Code: Alles auswählen.
SELECT likp~vbeln lips~posnr
FROM lips JOIN likp on lips-vbeln = likp-vbeln
APPENDING TABLE GT_LIEFER
WHERE...
Code: Alles auswählen.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
it_fieldcat = ti_catalogo
is_layout = wa_layout
i_save = 'A'
TABLES
t_outtab = w_detalle.
Code: Alles auswählen.
SELECT-OPTIONS: s_fecha FOR v_fecha, "Fecha".
o_clvent FOR vbak-auart. "Clase de venta"
...
SELECT vbeln auart kunnr erdat
INTO CORRESPONDING FIELDS OF TABLE t_detalle
FROM vbak WHERE erdat IN s_fecha
AND auart IN o_clvent.
stimmt, jetzt wo du es sagt macht das alles Sinn. Wenn schon ein Vergleich auf sy-subrc = 0 innerhalb eines SELECT ENDSELECT überflüssig ist, so ist der ELSE-Part einer solchen Abfrage genau so nützlich, wie bei euch zZ eine Regentonne Die Stelle wird ja niemals durchlaufen, weil das Programm davor schon mit sy-subrc = 4 aussteigt. Du müsstest die Abfrage nach ENDLOOP durchführen:suedamer hat geschrieben: das programm gibt mir die rechnung ohne lieferung nicht aus weil er bei lips angekommen mir direkt ins endselct laeuft, ohne if oder else zu passieren. hatte schon oftmals umgebaut und alles, aber nichts..stehe wirklich auf dem schlauch.
Code: Alles auswählen.
SELECT * FROM lips
WHERE vgbel = w_detalle-vbeln
AND matnr EQ w_detalle-matnr
AND charg <> ''.
w_detalle-entre = lips-vbeln.
w_detalle-charg = lips-charg.
w_detalle-lfimg = lips-lfimg.
SELECT * FROM likp WHERE vbeln EQ w_detalle-entre.
w_detalle-fecha = likp-erdat.
ENDSELECT.
SELECT * FROM vbrp WHERE vgbel = w_detalle-entre.
w_detalle-factu = vbrp-vbeln.
SELECT * FROM vbrk WHERE vbeln EQ w_detalle-factu.
w_detalle-fkdat = vbrk-fkdat.
ENDSELECT.
ENDSELECT.
ENDSELECT.
"kein Datensatz in LIPS gefunden
IF sy-subrc = 4.
SELECT * FROM vbrp WHERE aubel = w_detalle-vbeln.
w_detalle-factu = vbrp-vbeln.
SELECT * FROM vbrk WHERE vbeln EQ w_detalle-factu.
w_detalle-fkdat = vbrk-fkdat.
ENDSELECT.
ENDSELECT.
ENDIF.
wenn das Programm so bleibt wie es zZ ist, dann muss man für jede abzufragende Auftragsart eine einzelne Selektion starten. Wenn du es über SELECT-OPTIONS realisierst, so kann man alles in einer Selektion erledigen. Das Ergebnis im ALV kann dann immer noch nach Auftragsarten sortiert, gruppiert und verdichtet werdensuedamer hat geschrieben: wurde von mir verlangt das programm so zu schreiben, das die in meiner firma nach auftragsart und datum ihre bestellungen usw. finden. sind mehrere auftragsarten relevant, deshalb so.