msfox hat geschrieben: ↑22.07.2022 13:40Hinter der Transaktion BP hängt doch das BDT.
Ruf mal das Bereichtsmenü BUPT. Dort hast du alle Einstellungen zum GP auch BDT. Irgendwo gibt es Zeitpunktbausteine (Hab gerade kein SAP zum Schauen). Sichtenübgreifend (also beim Speichern) sollte der Zeitpunkt DCHCK dein Freund sein. Auf alle Fälle nicht im DSAVE, der darf nur Speichern und keine Fehler mehr werfen. DSAVB (oder DSAVC?) macht meines Wissens nur die Nummernvergaben.
--
Wenn du schon beim Wechsel der Sicht prüfen willst, ob alle Felder gefüllt sind, dann muss den SichtenFuba austauschen.
--
Wenn du öfters beim GP was erweitern sollst, solltest du dich mal dringend mit dem BDT beschäftigen. Da kann man auch viel falsch machen.... Oder du fragst hier noch einmal nach. Da kann ich dir etwas helfen.
Ja du muss einen neue Fuba erstellen. Der Fuba selbst hat keine Schnittstellenparameter. Die Funktionsbaustein prüfen nur innerhalb ihrer Funktionsgruppe auf globale Variablen. Aber, (fast) jede Funktionsgruppe hat eine passenden _GET und _SET Fuba. Schau einfach mal in den anderen Fuba's im DCHCK-Zeitpunkt, in welche Funktionsgruppe die liegen und wie die GET/SET - Fubas heißen. Irgendwo in dem Bereichsmenü BUPT gibt es eine Transaktion, wo man zur jeweiligen Tabelle auch die GET und SET-Fubas einrichtet. Dort bekommst du die auch her. Du liest also mit dem _GET-Fuba die Daten, prüfst sie und setzt eine Fehlermeldung mit dem Fuba BUS_MESSAGE_STORE ab. Im BDT dürfen keine harten Meldungen oder Dynpro-spezifische Anweisungen (z.B. CALL SCREEN; POPUP_TO_CONFIRM) verwendet werden, weil das BDT auch im Batch-Modus (z.B. BABI oder DirectInput verwendet wird.
Das wird schwierig. Da muss du schon schreiben, welche Daten du konkret prüfen möchtest.wenn es ein Beitrag dazu gäbe oder mir jemand das Schritt für Schritt erklären könnte. Ich finde online leider wenig dazu..
Definiere alle Felder...Im Badi soll überprüft werden, ob alle Felder auch befüllt worden sind.
Danke!msfox hat geschrieben: ↑25.07.2022 19:14Bin aktuell etwas kurz angebunden (Urlaub) und daher keinen Zugriff auf's SAP. Bin erst in 3 - 4 Wochen wieder richtig am Computer.Ja du muss einen neue Fuba erstellen. Der Fuba selbst hat keine Schnittstellenparameter. Die Funktionsbaustein prüfen nur innerhalb ihrer Funktionsgruppe auf globale Variablen. Aber, (fast) jede Funktionsgruppe hat eine passenden _GET und _SET Fuba. Schau einfach mal in den anderen Fuba's im DCHCK-Zeitpunkt, in welche Funktionsgruppe die liegen und wie die GET/SET - Fubas heißen. Irgendwo in dem Bereichsmenü BUPT gibt es eine Transaktion, wo man zur jeweiligen Tabelle auch die GET und SET-Fubas einrichtet. Dort bekommst du die auch her. Du liest also mit dem _GET-Fuba die Daten, prüfst sie und setzt eine Fehlermeldung mit dem Fuba BUS_MESSAGE_STORE ab. Im BDT dürfen keine harten Meldungen oder Dynpro-spezifische Anweisungen (z.B. CALL SCREEN; POPUP_TO_CONFIRM) verwendet werden, weil das BDT auch im Batch-Modus (z.B. BABI oder DirectInput verwendet wird.
Nebenhinweis:
Wenn du nur Daten prüfen willst, dann reicht der GET-Fuba. Willst duch Daten ändern (NICHT im DCHCK), dann muss du immer erst die Daten mit dem GET lesen und sie dann mit dem SET zurückschreiben.Das wird schwierig. Da muss du schon schreiben, welche Daten du konkret prüfen möchtest.wenn es ein Beitrag dazu gäbe oder mir jemand das Schritt für Schritt erklären könnte. Ich finde online leider wenig dazu..
Wenn du aber nach dem BDT bei der SAP suchst, sollste du eine Übersicht finden, wo die Reihenfolge der Zeitpunkt beschrieben ist.
Definiere alle Felder...Im Badi soll überprüft werden, ob alle Felder auch befüllt worden sind.
Wenn es sich um Pflichtfelder handelt, dann könntest du das vielleicht auch über die Feldgruppensteuerung (Auch im Bereichsmenü BUPT) regeln. Hier kannst du selbst definieren, welche Felder Pflichtfelder sind. Aber Achtung!: Das geht auf verschiedenen Ebene.
- Allgemein
- Pro GP-Rolle
- Pro Benutzer-Berechtigung
Hier such ich auch immer, bis ich das passende gefunden habe...
Kannst du mir bitte weiterhelfen, wie ich im DCHCK überprüfen kann, welche Daten für die Rolle Customer im Bereich Sales&Distribution eingetragen sind?msfox hat geschrieben: ↑25.07.2022 19:14Bin aktuell etwas kurz angebunden (Urlaub) und daher keinen Zugriff auf's SAP. Bin erst in 3 - 4 Wochen wieder richtig am Computer.Ja du muss einen neue Fuba erstellen. Der Fuba selbst hat keine Schnittstellenparameter. Die Funktionsbaustein prüfen nur innerhalb ihrer Funktionsgruppe auf globale Variablen. Aber, (fast) jede Funktionsgruppe hat eine passenden _GET und _SET Fuba. Schau einfach mal in den anderen Fuba's im DCHCK-Zeitpunkt, in welche Funktionsgruppe die liegen und wie die GET/SET - Fubas heißen. Irgendwo in dem Bereichsmenü BUPT gibt es eine Transaktion, wo man zur jeweiligen Tabelle auch die GET und SET-Fubas einrichtet. Dort bekommst du die auch her. Du liest also mit dem _GET-Fuba die Daten, prüfst sie und setzt eine Fehlermeldung mit dem Fuba BUS_MESSAGE_STORE ab. Im BDT dürfen keine harten Meldungen oder Dynpro-spezifische Anweisungen (z.B. CALL SCREEN; POPUP_TO_CONFIRM) verwendet werden, weil das BDT auch im Batch-Modus (z.B. BABI oder DirectInput verwendet wird.
Nebenhinweis:
Wenn du nur Daten prüfen willst, dann reicht der GET-Fuba. Willst duch Daten ändern (NICHT im DCHCK), dann muss du immer erst die Daten mit dem GET lesen und sie dann mit dem SET zurückschreiben.Das wird schwierig. Da muss du schon schreiben, welche Daten du konkret prüfen möchtest.wenn es ein Beitrag dazu gäbe oder mir jemand das Schritt für Schritt erklären könnte. Ich finde online leider wenig dazu..
Wenn du aber nach dem BDT bei der SAP suchst, sollste du eine Übersicht finden, wo die Reihenfolge der Zeitpunkt beschrieben ist.
Definiere alle Felder...Im Badi soll überprüft werden, ob alle Felder auch befüllt worden sind.
Wenn es sich um Pflichtfelder handelt, dann könntest du das vielleicht auch über die Feldgruppensteuerung (Auch im Bereichsmenü BUPT) regeln. Hier kannst du selbst definieren, welche Felder Pflichtfelder sind. Aber Achtung!: Das geht auf verschiedenen Ebene.
- Allgemein
- Pro GP-Rolle
- Pro Benutzer-Berechtigung
Hier such ich auch immer, bis ich das passende gefunden habe...
msfox hat geschrieben: ↑26.08.2022 10:08So, habe heute wieder ein SAP-System vor der Nase und kann mal schauen, was du brauchst:
Zunächst mal die deutsche Übersetzung:
Rolle Customer -> CVI Kunde
Sales&Distribution -> Button "Vertrieb" beim GP (TOC: BP)
--
Variante A (Entwicklung)
Die Daten die du prüfen willst, gehören zur Customer Vendor Integration (CVI). Laut Transaktion BUSG (Tabelle), gehören hier folgende Lesebausteine zu den Tabellen:
KNVA CVIC_BUPA_KNVA_GET
KNVI CVIC_BUPA_KNVI_GET
KNVP CVIC_BUPA_KNVP_GET
KNVV CVIC_BUPA_KNVV_GET
Welche Tabelle hier zu welchen DynproFeld in der Transaktion BP gehört, muss du selbst mal prüfen.
Bei mir im Quellcode arbeite ich - warum auch immer - nicht mit den FuBas, sondern über die Klasse cvi_bdt_adapter und der Methode data_sales_get(). Dieser übergebe ich den Tabellennamen z.B. KNVV und erhalte darüber die Daten. Muss prüfen, ob du mit dem Fubas auskommst oder auch die Klasse nehmen muss.
--
Da du nun den Lesebaustein kennst, kannst du dir im Zeitpunkt DCHCK (TA: BUS7) einen eigenen Fuba einbinden. In dem Fuba liest du die Daten und setzt via Fuba BUS_MESSAGE_STORE eine Fehlermeldung ab, wenn die Daten nicht stimmen.
--------
Variante B (Customzing), wenn du über die Feldgruppen deine Felder als Pflichtfelder setzten willst.
Bereichsmenü "BUPT" -> Geschäftspartner -> Bildaufbau:
Bilder (TOC: BUS5)
- Das sind quasi deine Tabreiter
- z.B. CVIC71 für Aufträge
- Jedes Bild besitzt mehrere Abschnitte
----CVIC00 Kopfdaten (vertriebsbereichsabhängige Bilder)
----CVIC71 Debitor: Auftrag
----CVIC72 Debitor: Preisfind und Statistik
----CVIC73 Debitor: Agenturgeschäft
Abschnitte(TOC: BUS4)
- Jeder Abschnitt besitzt mehrere Sichten
- CVIC71 Debitor: Auftrag
----CVIC71 Debitor: Kundenbezirk, Kundengruppe
----CVIC72 Debitor: Verkaufsbüro, Verkäufergruppe
----CVIC73 Debitor: Berechtigungsgruppe, Konto bei Debitor
----CVIC74 Debitor: Auftragswahrscheinlichkeit, Positionsvors
----CVIC75 Debitor: ABC-Klassen, MengeneinhGrp, Rundung, K.-S
----CVIC76 Debitor: Währung, Kurstyp
Sichten(TOC: BUS3)
- Jede Sicht hat mehrere Feldgruppen
- CVIC71 Debitor: Kundenbezirk, Kundengruppe
----1902 Debitor: Kundengruppe
----1928 Debitor: Kundenbezirk
-> Damit hast du die Feldgruppe für das Feld "Kundengruppe"
Feldgruppen(TOC: BUS2)
- Zur Feldgruppe 1902 kannst du jetzt sagen, welches Feld ein Pflichtfeld sein soll.
--> Feldgruppe --> Felder (KNVV-KDGRP)
msfox hat geschrieben: ↑08.09.2022 22:14Die Transaktion mit den Fubas zum Lesen aus und Schreiben in das BDT hatte ich dir doch geschrieben - BUSG bzw. im Menü.
Ja, das ist das Problem, dass man online dazu nix findet.
Man kann im BDT sehr viel falsch* machen - insb. wenn man Dinge an der falschen Stelle macht. Learning by doing oder durch Kollegen. Man muss das Grundprinzip des BDT verstehen und schauen, wie es die SAP bei sich macht.
Es ist ja nicht nur der BP, sondern auch das Vertragskonto und Vertragsgegenstand, die über das BDT laufen.
*z.B. machen viele erst diverse Prüfungen im DSAVE-Zeitpunkt. Dort ist es allerdings zu spät, da man dort keine Meldungen mehr absetzen oder sogar abbrechen darf. Weiterhin ist im Vorfeld schon der DSAVC gelaufen, welcher bei einer Neuanlegen die Nummervergabe gemacht hat.
Weiterhin wird bei Erweiterungen gern der DirectInput vergessen - Zeitpunkt DINP1, DINP2. Das sind z.T. die Zeitpunkte die die BAPI's oder Fremdpflege (Fubas: BUS_FOREIGN_...) durchlaufen. Wir nutzen diese Zeitpunkte sehr häufig, weil wir Weboberflächen (WD4A) über Fremdpflege angebunden haben.