Offene Menge in Lieferplan / Lieferabruf

SAP R/3 Vertrieb: Auftragsverwaltung, Versand und Transport, Fakturierung, Kreditmanagement, Außenhandel/Zoll...
6 Beiträge • Seite 1 von 1
6 Beiträge Seite 1 von 1

Offene Menge in Lieferplan / Lieferabruf

Beitrag von martin (ForumUser / 3 / 0 / 1 ) »
Hallo,

ich habe folgendes Problem:

Im Lieferabruf wird das Feld "offene Menge" von SAP berechnet und soweit ich weiß nicht in einer Tabelle gespeichert. Die offene Menge wird anhand der "bereits gelieferten Menge", der "tatsächlich beim Kunden eingegangenen und rückgemeldeten Menge" und "vom Kunden im aktuellen Lieferabruf gewünschten Menge" errechnet. Da ich die offene Menge in einem ALV anzeigen will und zusätzlich für die Verarbeitung in meinem Programm benötige und diese nicht manuell berechnen will, suche ich nach einem FB / BAPI oder ähnlichem. Könnt ihr mir da weiterhelfen?

THXS Martin :)

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Beitrag von sapler2 ( / / 0 / 3 ) »
Hallo, habe diese Anforderung bei uns mit einem FuBau lösen können:



function z_offene_menge_eintlg.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(VBELV) LIKE VBFA-VBELV
*" VALUE(POSNV) LIKE VBFA-POSNV
*" VALUE(ETENR) LIKE VBEP-ETENR OPTIONAL
*" EXPORTING
*" VALUE(OMENG) LIKE VBEPD-VSMNG
*" VALUE(KZ_NIXOFFEN) TYPE C
*" EXCEPTIONS
*" EINTLG_UNGUELTIG
*" BELEG_UNGUELTIG
*"----------------------------------------------------------------------
************************************************************************
tables: vbap, vbep, vblb.

data: begin of r_vbfa,
vbelv like vbfa-vbelv,
posnv like vbfa-posnv,
vbeln like vbfa-vbeln,
vbtyp_n like vbfa-vbtyp_n,
rfmng like vbfa-rfmng,
erdat like vbfa-erdat,
end of r_vbfa.

data: i_vbfa like r_vbfa occurs 0 with header line.

data: begin of r_vbep,
vbeln like vbep-vbeln,
posnr like vbep-posnr,
etenr like vbep-etenr,
edatu like vbep-edatu,
wmeng like vbep-wmeng,
bmeng like vbep-bmeng,
end of r_vbep.

data: lfmng like vbfa-rfmng,
kwmeng like vbap-kwmeng,
index type i,
summe type p decimals 2,
edatu_eintlg type d,
lfnkd like vblb-lfnkd,
lfdkd like vblb-lfdkd.

************************************************************************

* Kontrolle auf Belegnummer
select single * from vbak
where vbeln = vbelv.
if sy-subrc <> 0.
raise beleg_ungueltig.
exit.
endif.

* gibt es gewählte Eintlg. überhaupt ?
if not etenr is initial.
select single * from vbep
where vbeln = vbelv
and posnr = posnv
and etenr = etenr.
if sy-subrc <> 0.
raise eintlg_ungueltig.
exit.
endif.
endif.

clear: lfnkd, lfdkd.
case vbak-vbtyp.
when 'E'.
clear: vblb, lfnkd.
select * from vblb
where vbeln = vbak-vbeln
order by abrdt ascending.
endselect.
lfnkd = vblb-lfnkd.
lfdkd = vblb-lfdkd.
endcase.

clear: lfmng, kz_nixoffen.
select vbelv posnv vbeln vbtyp_n rfmng erdat
from vbfa into r_vbfa
where vbelv = vbelv
and posnv = posnv.
case r_vbfa-vbtyp_n.
when 'J'.
if vbak-vbtyp = 'E' and r_vbfa-vbeln > lfnkd.
* wenn Korrekturlieferung --> keine Liefermenge, Gautsch, am: 01.07.02
select single * from likp where vbeln = r_vbfa-vbeln.
if sy-subrc <> 0. clear likp. endif.
if likp-lfart <> 'ZLKO'.
add r_vbfa-rfmng to lfmng.
endif.
endif.
if vbak-vbtyp = 'C'.
add r_vbfa-rfmng to lfmng.
endif.
* WHEN 'H' OR 'T'.
* IF vbak-vbtyp = 'E' AND r_vbfa-erdat > lfdkd.
* SUBTRACT r_vbfa-rfmng FROM lfmng.
* ENDIF.
* IF vbak-vbtyp = 'C'.
* SUBTRACT r_vbfa-rfmng FROM lfmng.
* ENDIF.
endcase.
endselect.


* handelt es sich um einen SD-Lieferplan oder Kauftr. ?
case vbak-vbtyp.
when 'E'.
clear kwmeng.
if etenr is initial.
* bilde KW-Meng zu allen Einteilungen
select vbeln posnr etenr edatu wmeng bmeng
from vbep into r_vbep
where vbeln = vbelv
and posnr = posnv.
add r_vbep-wmeng to kwmeng.
endselect.
else.
* hole Einteilungsdatum
select single * from vbep
where vbeln = vbelv
and posnr = posnv
and etenr = etenr.
if sy-subrc = 0.
clear edatu_eintlg.
edatu_eintlg = vbep-edatu.
* bilde KW-Meng bis zu Einteilung
select vbeln posnr etenr edatu wmeng bmeng
from vbep into r_vbep
where vbeln = vbelv
and posnr = posnv
order by edatu ascending.
if r_vbep-edatu > edatu_eintlg.
exit.
endif.
add r_vbep-wmeng to kwmeng.
endselect.
endif.
endif.
***********
when 'C'.
clear kwmeng.
if etenr is initial.
* bilde KW-Meng zu allen Einteilungen
select vbeln posnr etenr edatu wmeng bmeng
from vbep into r_vbep
where vbeln = vbelv
and posnr = posnv.
add r_vbep-bmeng to kwmeng.
endselect.
else.
* hole Einteilungsdatum
select single * from vbep
where vbeln = vbelv
and posnr = posnv
and etenr = etenr.
if sy-subrc = 0.
clear edatu_eintlg.
edatu_eintlg = vbep-edatu.
* bilde KW-Meng bis zu Einteilung
select vbeln posnr etenr edatu wmeng bmeng
from vbep into r_vbep
where vbeln = vbelv
and posnr = posnv
order by edatu ascending.
if r_vbep-edatu > edatu_eintlg.
exit.
endif.
add r_vbep-bmeng to kwmeng.
endselect.
endif.
endif.
endcase.

clear: omeng.
* berechne offene Menge zur Einteilung
omeng = kwmeng - lfmng.

if omeng <= 0.
omeng = 0.
kz_nixoffen = 'X'.
endif.

endfunction.

lG Harald

Beitrag von martin (ForumUser / 3 / 0 / 1 ) »
Hallo Harald,

vielen Dank für Deine schnelle Antwort und Deinen FB. Leider konnte ich mit diesem Funktionsbaustein nicht auf die offenen Mengen meines Lieferplanes kommen. Die offene Menge im Lieferplan (LAB / FAB) errechnet sich folgendermaßen:

Abruf-FZ = EFZ + Auftragsmenge
Offene Menge = Abruf-FZ - Liefer-FZ

Du nimmst in Deinem FB z. B. Alle Auftragsmengen her, obwohl diese nicht Disporelevant (?) sind und somit nicht in die Berechnung mit einfließen (oder?). D. h. bei Dir werden bei kwmeng alle Auftragsmengen der entsprechenden LP-Position zusammengezählt. Außerdem bekomme ich bei der lfmng mit Deinem FB alle Mengen, die im Belegfluß auftauchen, und nicht die tatsächlich im LP vorkommenden Mengen?

Kannst Du mir vielleicht noch ein paar Worte zu dem FB sagen, d. h. wofür dieser genau eingesetzt wird und ob dieser bei Dir die "richtigen" offenen Mengen berechnet. Anbei ein Screenshot von meinem Bsp.-LP mit den offenen Mengen, alle Positionen sind Dispo- und Lieferrelevant.

THXS Martin

P. S. gibt's nicht vielleicht einen SAP-Standard-FB für diese Problematik? Ich hab bisher leider keinen adäquaten gefunden...

Beitrag von sapler2 ( / / 0 / 3 ) »
Hallo, bei uns klappt dieser FuBau, wichtig bei SD-LPA´s ist die VBLB und aus der den letzten Abruf zu ermitteln.

Danach wird die Sollmenge bis zu einer Einteilung gebildet und die Liefermengen nach dem letzten Abruf bestimmt.

Ist diese gesamt grösser als die Sollmenge dann ist auch nichts mehr offen, wurde eine Einteilung erst teilgeliefert so wird die offene Menge wie in der SAP-Sicht ermittelt.

Bei uns gibt es auch noch Korrekturlieferungen die entsprechend behandelt werden müssen.

Hatte hier keinen FuBau finden können, es gibt vielleicht eine Möglichkeit über den Belegfluss zu gehen, hier gibt es allerdings FuBau wo zuvor einige Strukturen über andere FuBau versorgt werden müssen.

MfG Harald

Offene Menge wir dynamisch errechent

Beitrag von LogistikProfessor ( / / 0 / 3 ) »
Hallo,
die offene Menge wird zum Zeitpunkt des Ausführens einer Transaktion (z.B. VL10E) dynamisch errechnet....die SAP benutzt den FB RV_SCHEDULE_CHECK_DELIVERIES.....und dann klappt auch mit den offenen Mengen
Mit freundlichen Grüßen
Der LogistikProfessor

Beitrag von martin (ForumUser / 3 / 0 / 1 ) »
Hallo LogistikProfessor,

vielen lieben Dank für Deine Hilfe!!! :D
Der Funktionsbaustein hat mir sehr weitergeholfen.
Für alle, die das gleiche Problem haben:
Ein Beispielprogramm zum Aufruf des FB:

Code: Alles auswählen.

  DATA: lv_vbeln TYPE vbak-vbeln,
        lv_vbelp TYPE vbap-posnr.

  DATA: lt_vbap TYPE TABLE OF vbapvb,
        lt_vbup TYPE TABLE OF vbupvb,
        lt_vbep TYPE TABLE OF vbepvb,
        lt_vbfa TYPE TABLE OF vbfavb.

  lv_vbeln = '0030000103'.
  lv_vbelp = '20'.

  SELECT * FROM vbap INTO TABLE lt_vbap WHERE vbeln = lv_vbeln
                                        AND   posnr = lv_vbelp.
  SELECT * FROM vbup INTO TABLE lt_vbup WHERE vbeln = lv_vbeln.
  SELECT * FROM vbfa INTO TABLE lt_vbfa WHERE vbelv = lv_vbeln
                                         ORDER BY PRIMARY KEY.
  SORT lt_vbfa BY mandt vbelv posnv vbeln posnn vbtyp_n.
  SELECT * FROM vbep INTO TABLE lt_vbep WHERE vbeln = lv_vbeln
                                        AND   posnr = lv_vbelp.
  
  CALL FUNCTION 'RV_SCHEDULE_CHECK_DELIVERIES'
       EXPORTING
            fbeleg = lv_vbeln
            fposnr = lv_vbelp
       TABLES
            fvbfa  = lt_vbfa
            fvbup  = lt_vbup
            fxvbep = lt_vbep
            fvbap  = lt_vbap
       EXCEPTIONS
            OTHERS = 3.  

Die offene Menge steht anschließend in der Tabelle lt_vbep im Feld OLFMNG.

Folgende Benutzer bedankten sich beim Autor martin für den Beitrag:
Legxis


Seite 1 von 1

Vergleichbare Themen

2
Antw.
3303
Views
BAPI bapi_sales_del_schedule_create neuer Lieferabruf
von Daniel123 » 01.09.2015 16:05 • Verfasst in ABAP® Core
0
Antw.
1838
Views
Lieferplan, Einteilungen, Feinabrufe
von bapimueller » 20.03.2019 20:27 • Verfasst in Sales and Distribution
0
Antw.
2855
Views
0
Antw.
2142
Views
1
Antw.
2551
Views
Auftrag mit Referenz zu Lieferplan via EDI anlegen
von Melanie » 15.04.2005 13:43 • Verfasst in Sales and Distribution

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 1670
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8272