Auftrag ohne Lagerbuchung

Allgemeine Diskussionen um die ERP Software AvERP

Moderator: SYNERPY

Antworten
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Auftrag ohne Lagerbuchung

Beitrag von 2mad »

Hallo @all,

ich habe mal eine - für viele wahrscheinlich ziemlich blöde - Verständnisfrage zum Lagermanagement bzw zum Auftragsablauf.

Ich habe einige Kunden, denen ich zwar eine Auftragsbestätigung schreibe, die Ware wird aber direkt vom Lieferanten an den Kunden gesendet. Ergo sollen diese Waren nicht in meinem Lager abgebucht werden, wenn ich einen Auftrag erzeuge.
Bei allen anderen Kunden soll das aber natürlich passieren.

Hierfür habe ich ein neues Lager angelegt (LIEFERLAGER), welches nicht gepflegt werden soll und immer voll ist.
1. Frage: Wie stelle ich das ein?
2. Frage: Wie kann ich AVERP sagen, daß er bei Aufträgen von bestimmten Kunden automatisch dieses Lieferlager nehmen soll?

Vielen Dank!!!
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Hallo!

ich bin mir nicht ganz sicher, warum keiner schreibt.... ist die Frage zu blöd, oder ist das etwa doch komplitzierter, als ich gedacht habe? Bestimmt nicht, oder? So wie ich AVERP kenne, muss ich bestimmt nur an den richtigen Stellen ein paar Klicks machen und es funktioniert....aber ich finde einfach nicht raus, WO ich diese Klicks machen muss.

Wäre echt prima, wenn mir da jemand auf die Sprünge helfen kann!

Dankeschön!
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Wir haben hier etwas für einen Kunden von uns entwickelt, dass so aber noch nicht in der Standardversion vorhanden ist. Dabei werden aus den Auftragspositionen - ähnlich den Fertigungsaufträgen - Bestellungen erzeugt. Bei der Erzeugung wird gefragt, ob direkt an den Kunden geliefert werden soll.
Der Lieferant sendet dann eine Kopie des Lieferscheins an das eigene Unternehmen. Sobald der Wareneingang verbucht wurde (pro forma), wird ein Lieferschein erzeugt.
Mit dem JobDruckserver kann man dann so weit gehen, dass automatisch der Drucker anläuft und die Kundenrechnung ausgibt.

Von der Programmierung her nciht weiter kompliziert, aber wie gesagt, noch nicht downloadbar. Einen Termin hierfür gibt es auch noch nicht, können wir aber als Testversion zuschicken (ein klein Wenig Programmierkenntnisse sind dabei aber vorausgesetzt).
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Hallo!

Ich bin mir zwar nicht sicher, ob das das ist, was ich suche, aber es wäre sehr nett, wenn Sie mir das mal rüberschicken könnten, damit ich mir das ansehen kann! Ob meine AVERP-Kenntnisse dazu ausreichen es einzubinden, weiß ich noch nicht ;)

WIe gesagt, ich brauche eigentlich nur eine ganz einfache Möglichkeit Aufträge anzulegen, die dann entweder in KEINEM Lager (der Lagerbestand meines Lieferanten interessiert mich eh nicht ;)), oder in einem separaten Endloslager gebucht werden, damit die Artikel nicht von meinem Lagerbestand runtergehen. Und das ganze möchte ich halt dann Auftragsweise angebenen können.

Kann man das nicht irgendwie über die Auftragsart machen, wenn man den Auftrag anlegt?

Vielen Dank für Ihre Hilfe!!
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Nein, dann reden wir nocht vom gleichen. Hier müsste man manuell immer das entsprechende Lager angeben.
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Hallo!

Hmm, dann muss ich aber immer dafür sorgen, daß in dieses Lager auch Ware reinkommt. Wie schaffe ich es dann, daß diese Ware sonst nirgendwo verbucht wird? ALso auch finanziell. Denn ich habe hier in diesem Fall ja weder Rechnungsein-/ausgänge, noch wirkliche Warenein-/ausgänge. Es geht mir nur um das Papier, was ich erstellen muss (Auftragsbest. und Rechnung)

Ich habe mich in den letzten Tagen noch mal mit aller Kraft reingekniet, aber ich schaffe es einfach nicht.

Ich bin ja schon fast kurz davor die entsprechenden Trigger (ich glaube es sind BAUF_AU und BRLS_AU0. Bitte korrigieren, wenn ich falsch liege;)) umzuschreiben, damit diese, falls die Auftragsart = 2 ist, keine Lagerbuchung vornehmen. Aber ganz überzeugt bin ich von der Lösung nicht, da ich keine Ahnung habe, was für "Rattenschwänze" das ganze mit sich zieht.

Vielleicht können Sie mir einen Tip geben, wo ich anfangen kann?
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Kann beim Artikel nicht einfach das Kennzeichen "Lager pflegen" auf Nein gesetzt werden?

Eine Buchung bei der Auftragsart "2" auf Trigger-Ebene zu unterdrücken, ist auch eine Möglichkeit. Dies müsste dann beim Lieferscheindruck und beim Wechsel von Angebot zu Auftrag gemacht werden.
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Hallo!

Das Problem ist, daß dieser Fall eigentlich bei jedem Artikel eintreten kann, d.h. ich müsste jeden Artikel 2x anlegen und pflegen. Einmal mit und einmal ohne "Lagerpflegen"... also extrem unpraktikabel, besonders bei einer großen Anzahl von Artikeln.

Wegen der Trigger:

Verstehe ich das richtig, daß ich dann in BAUF_AU0 die EXECUTES nicht aufrufe, wenn Auftragsart = X ist? Muss ich dort sonst noch etwas berücksichtigen?

Der zweite Trigger BRLS_AU0 führt ja dann die entgültige Lagerbuchung aus, oder? Also von AL -> Kunden (also raus aus dem Lager). Hier ist das Problem, daß ich aus dem Trigger die AUftragsart des dazugehörigen Auftrages nicht bekomme, also nicht unterscheiden kann (oder gibt es irgendeine Beziehung die ich übersehen habe?). Was passiert denn, wenn ich diesen Trigger so lasse, wie er ist und nur den BAUF_AU0 umschreibe? Dann wird ja bei AUftragserstellung nichts ins Ausgangslager gebucht (oder?). Was passiert dann mit dem BRLS_AU0-Trigger? Bucht er dann trotzdem irgendwas, oder merkt er, daß nichts zu buchen ist? Dann könnte ich mir diesen Trigger sparen.

Ich bin Ihnen wirklich sehr dankbar für Ihre Hilfe!

admin hat geschrieben:Kann beim Artikel nicht einfach das Kennzeichen "Lager pflegen" auf Nein gesetzt werden?

Eine Buchung bei der Auftragsart "2" auf Trigger-Ebene zu unterdrücken, ist auch eine Möglichkeit. Dies müsste dann beim Lieferscheindruck und beim Wechsel von Angebot zu Auftrag gemacht werden.
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Der Auftragstrigger macht die Lagerplanung, da die Ware ja reserviert werden muss.

Der Liferscheintrigger entfernt die Planung und bucht die Ware.

Es müssen beide Trigger deaktiviert werden.

Der Lieferschein ist die Tabelle BRLS. Die Lieferscheinpositionen sind die BRRCP, die im Feld BRLS_ID_LSNR die ID des Lieferscheins haben. Weiterhin besteht von den BRRCP eine Verbindung zur BAUFPO (Auftragspositionen) und von dort auf den Auftrag und daher auch zur Auftragsart.

Dieser Teil des Triggers:

Code: Alles auswählen

      FOR SELECT A.ID, A.MENGE, A.BARTLH_ID_LAGERNR, A.BSA_ID_ARTNR, A.ID,
                 A.BMENG_ID_MEINHEIT, A.BAUFPO_ID_AUFNRPOS, B.BMENG_ID_ME_L
      FROM BRRCP A
      LEFT OUTER JOIN BSA B ON A.BSA_ID_ARTNR = B.ID
      WHERE A.BRLS_ID_LSNR = NEW.ID
      INTO :iBRLS_ID, :nMENGE, :iBARTLH_ID, :BSA_ID_ARTNR, :BRRCP_ID,
           :BMENG_ID_MEINHEIT, :BAUFPO_ID, :BMENG_ID_ME_L
      DO
      BEGIN
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', :nMenge);
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', 0);

muss erweitert werden, so dass nur Lieferscheinpositionen aus Aufträge ohne die Auftragsart mit der ID XXX (hier kann dann ein fester Wert eingetragen werden) gebucht werden.

So in etwa (soll heißen funktioniert, ist aber nicht getestet :)):

Code: Alles auswählen

      FOR SELECT A.ID, A.MENGE, A.BARTLH_ID_LAGERNR, A.BSA_ID_ARTNR, A.ID,
                 A.BMENG_ID_MEINHEIT, A.BAUFPO_ID_AUFNRPOS, B.BMENG_ID_ME_L
      FROM BRRCP A
      LEFT OUTER JOIN BSA B ON A.BSA_ID_ARTNR = B.ID
      LEFT OUTER JOIN BAUFPO C ON A.BAUFPO_ID_AUFNRPOS = C.ID
      LEFT OUTER JOIN BAUF D ON C.BAUF_ID_LINKKEY = D.ID
      WHERE A.BRLS_ID_LSNR = NEW.ID AND
            D.BTOUR_ID_TOURKZ = XXX
      INTO :iBRLS_ID, :nMENGE, :iBARTLH_ID, :BSA_ID_ARTNR, :BRRCP_ID,
           :BMENG_ID_MEINHEIT, :BAUFPO_ID, :BMENG_ID_ME_L
      DO
      BEGIN
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', :nMenge);
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', 0);


Sonstige Dinge müssen nicht beachtet werden.
Gast

Beitrag von Gast »

....wobei XXX dann die ID der Auftragsart wäre, bei der GEBUCHT wird, richtig? oder halt <> XXX für die bei der nicht gebucht wird
admin hat geschrieben:Der Auftragstrigger macht die Lagerplanung, da die Ware ja reserviert werden muss.

Der Liferscheintrigger entfernt die Planung und bucht die Ware.

Es müssen beide Trigger deaktiviert werden.

Der Lieferschein ist die Tabelle BRLS. Die Lieferscheinpositionen sind die BRRCP, die im Feld BRLS_ID_LSNR die ID des Lieferscheins haben. Weiterhin besteht von den BRRCP eine Verbindung zur BAUFPO (Auftragspositionen) und von dort auf den Auftrag und daher auch zur Auftragsart.

Dieser Teil des Triggers:

Code: Alles auswählen

      FOR SELECT A.ID, A.MENGE, A.BARTLH_ID_LAGERNR, A.BSA_ID_ARTNR, A.ID,
                 A.BMENG_ID_MEINHEIT, A.BAUFPO_ID_AUFNRPOS, B.BMENG_ID_ME_L
      FROM BRRCP A
      LEFT OUTER JOIN BSA B ON A.BSA_ID_ARTNR = B.ID
      WHERE A.BRLS_ID_LSNR = NEW.ID
      INTO :iBRLS_ID, :nMENGE, :iBARTLH_ID, :BSA_ID_ARTNR, :BRRCP_ID,
           :BMENG_ID_MEINHEIT, :BAUFPO_ID, :BMENG_ID_ME_L
      DO
      BEGIN
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', :nMenge);
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', 0);

muss erweitert werden, so dass nur Lieferscheinpositionen aus Aufträge ohne die Auftragsart mit der ID XXX (hier kann dann ein fester Wert eingetragen werden) gebucht werden.

So in etwa (soll heißen funktioniert, ist aber nicht getestet :)):

Code: Alles auswählen

      FOR SELECT A.ID, A.MENGE, A.BARTLH_ID_LAGERNR, A.BSA_ID_ARTNR, A.ID,
                 A.BMENG_ID_MEINHEIT, A.BAUFPO_ID_AUFNRPOS, B.BMENG_ID_ME_L
      FROM BRRCP A
      LEFT OUTER JOIN BSA B ON A.BSA_ID_ARTNR = B.ID
      LEFT OUTER JOIN BAUFPO C ON A.BAUFPO_ID_AUFNRPOS = C.ID
      LEFT OUTER JOIN BAUF D ON C.BAUF_ID_LINKKEY = D.ID
      WHERE A.BRLS_ID_LSNR = NEW.ID AND
            D.BTOUR_ID_TOURKZ = XXX
      INTO :iBRLS_ID, :nMENGE, :iBARTLH_ID, :BSA_ID_ARTNR, :BRRCP_ID,
           :BMENG_ID_MEINHEIT, :BAUFPO_ID, :BMENG_ID_ME_L
      DO
      BEGIN
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', :nMenge);
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BRRCP_ID, 'LS', 0);


Sonstige Dinge müssen nicht beachtet werden.
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Super, das könnte sogar funktionieren ;)... ich werd es gleich mal testen.

Eine Frage noch:

Jetzt habe ich ja das wichtigste geschafft, also die Lager in Ruhe zu lassen.
Kann ich denn die Rechnungsbeträge, die durch diese Auftragsart entstanden sind irgendwie von meinen üblichen Finanzen trennen? Also zB eine separate Kostenstelle für alle Aufträge der Auftragsart X?

Danke schonmal!
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Entweder über die Abteilung, die gibt es in Auftrag und Rechnung, oder über die Kostenstelle (bzw. ja eigentlich Kostenträger). Letztere ist aber positionsspezifisch und muss daher mehr als einmal angegeben werden.

Bei Auswertungen ist es aber auch möglich, den Umsatz nur für bestimmte Auftragsarten anzuzeigen. Hier muss man wieder den

BRRC -> BRRCP -> BAUFPO -> BAUF

Weg gehen.
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Hallo!

Es ist leider doch nicht so einfach, wie ich gedacht habe:

Da ich im BAUF_AU0-Trigger bei Auftragsart X die Executes nicht laufen lasse, werden auch keine Rechnungsrückstände generiert, d.h. ich kann jetzt zwar einen Auftrag anlegen, ohne daß er mir die Artikel vom Lager abzieht, aber ich kann jetzt auch keine Rechnung für diesen Auftrag mehr erfassen, da er keine Positionen findet.

Kann ich einen Rechnungsrückstand ohne einen Lieferrückstand erzeugen?
admin
Site Admin
Beiträge: 2673
Registriert: Di Feb 10, 2004 5:48 am
Wohnort: Bayreuth

Beitrag von admin »

Lieferrückstand, Lieferscheinposition, Rechnungsrückstand und Rechnungsposition sind DERSELBE Datensatz. Das eine ohne das andere ist also nicht möglich.

Angepasst werden muss folgender Teil im After-Insert-Trigger der BRRCP:

Code: Alles auswählen

  IF (USER <> 'WORSTCASE') THEN
  BEGIN
    /* Leere Lagerbuchung machen */
    /* Nur für Positionen, die von einem Auftrag kommen (Gutschriften)
       und die noch keinen Lieferschein haben (gesplittete LS-Positionen) */
    IF (NEW.BAUFPO_ID_AUFNRPOS IS NOT NULL) THEN
    BEGIN
      EXECUTE PROCEDURE P_BARTLHBU01 (NEW.BARTLH_ID_LAGERNR,NEW.ID,'LS',0);

      /* Packungen buchen */
      FOR SELECT HA.BARTLH_ID, HA.FAKTOR, HA.ID
      FROM BAUFPOST HA
      LEFT OUTER JOIN BSA HB ON HA.BSA_ID = HB.ID
      WHERE HA.BAUFPO_ID = NEW.BAUFPO_ID_AUFNRPOS
      INTO :iBARTLH_ID, :FAKTOR, :BAUFPOST_ID
      DO
      BEGIN
        /* Lagerbuchen */
        EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BAUFPOST_ID, 'AP', 0);
      END
    END
  END
Hier dürfen nur Datensätze eingeplant werden, die nicht eine bestimmte Auftragsart haben.

Das schaut dann ungefähr so aus (wie immer: nicht getestet, funktioniert aber ;)):

Code: Alles auswählen


  IF (USER <> 'WORSTCASE') THEN
  BEGIN
    /* Leere Lagerbuchung machen */
    /* Nur für Positionen, die von einem Auftrag kommen (Gutschriften)
       und die noch keinen Lieferschein haben (gesplittete LS-Positionen) */
    IF (NEW.BAUFPO_ID_AUFNRPOS IS NOT NULL) THEN
    BEGIN
      MyDUMMY = NULL;
      SELECT B.ID
      FROM BAUFPO A
      LEFT OUTER JOIN BAUF B ON A.BAUF_ID_LINKKEY = B.ID
      WHERE A.ID = NEW.BAUFPO_ID_AUFNRPOS AND
            B.BTOUR_ID_TOURKZ = XXX
      INTO :MyDUMMY;

      /* Nur reservieren, wenn Auf.Pos. auf einer anderen Auftragsart als
         mit der ID XXX basiert */
      IF (MyDUMMY IS NULL) THEN
        BEGIN
        EXECUTE PROCEDURE P_BARTLHBU01 (NEW.BARTLH_ID_LAGERNR,NEW.ID,'LS',0);
  
        /* Packungen buchen */
        FOR SELECT HA.BARTLH_ID, HA.FAKTOR, HA.ID
        FROM BAUFPOST HA
        LEFT OUTER JOIN BSA HB ON HA.BSA_ID = HB.ID
        WHERE HA.BAUFPO_ID = NEW.BAUFPO_ID_AUFNRPOS
        INTO :iBARTLH_ID, :FAKTOR, :BAUFPOST_ID
        DO
        BEGIN
          /* Lagerbuchen */
          EXECUTE PROCEDURE P_BARTLHBU01(:iBARTLH_ID, :BAUFPOST_ID, 'AP', 0);
      END
      END
    END
  END
Oben noch die Variabel deklarieren:

Code: Alles auswählen


DECLARE VARIABLE MyDummy INTEGER ;
2mad
Beiträge: 79
Registriert: Fr Apr 15, 2005 8:52 am

Beitrag von 2mad »

Hallo!

Bei der AUftragerstellung funktioniert es nun, aber sobald ich die Rechnung dazu erstelle und mir die Auftragspositionen reinziehe, zieht er die Menge wieder vom Ausgangslager ab.
Welcher Trigger könnte das denn sein?
Antworten