====== COBI.ppc ====== COBI.ppc ist eine Produktionsprozesssteuerungslösung – auch bekannt als Manufacturing Execution System (MES) – für SAP Business One, die hauptsächlich in Form einer Android-App angeboten wird. Sie ist ähnlich aufgebaut wie COBI.wms und basiert technisch darauf, wurde jedoch speziell für komplexe Produktionsabläufe entwickelt. ===== Einstellungen ===== Die folgenden UDTs und UDFs werden von COBI.ppc verwendet. WICHTIG: Alle Tabellen müssen vom Typ „Kein Objekt mit Auto-Inkrement“ sein. ==== Attribute ==== In COBI.ppc verwenden wir den Begriff „Attribute“, um Informationen über Fertigungsaufträge zu bezeichnen, die dem Benutzer angezeigt werden. Diese Attribute können aus verschiedenen Quellen stammen (siehe ''Origin'') und werden in der Produktionsübersicht, in den Details/der Ausführungsansicht eines Fertigungsauftrags sowie in bestimmten Schritttypen angezeigt (siehe unten die Erklärung zu „Schritten“). ^ ''PPC_ATTRIBUTES'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Department | Alphanumerisch | 20 | | RouteStage | Alphanumerisch | 50 | | Title | Alphanumerisch | 20 | | Origin | Alphanumerisch | 20 | | FieldName | Alphanumerisch | 254 | | PositionInOverview | Numerisch | 2 | | PositionInDetails | Numerisch | 2 | | PositionInSteps | Numerisch | 2 | Der Wert ''Origin'' kann die folgenden Bedeutungen haben: ^ Wert ^ Bedeutung ^ | RDR | Kundenauftrag, auf dem der Fertigungsauftrag basiert | | RDR_LINE | Positionszeile des Kundenauftrags mit dem zu fertigenden Artikel | | WOR | Der Fertigungsauftrag selbst | | ITM | Stammdaten des zu fertigenden Artikels | | CUSTOM | Benutzerdefiniert / Speziell | Das Feld „FieldName“ muss den Namen eines SAP Business One Objektfeldes enthalten — in der Schreibweise aus DI-API / Service Layer, nicht den Datenbankspaltennamen. Beispiel: Wenn die Herkunft (Origin) „RDR“ ist, kann der Feldname „DocNum“ verwendet werden, da dieser sowohl in der Datenbank als auch in der DI-API / dem Service Layer gleich heißt. Wenn die Herkunft jedoch „WOR“ ist, muss „DocumentNumber“ verwendet werden, da das Feld zwar in der Datenbank „DocNum“, in der DI-API bzw. im Service Layer jedoch „DocumentNumber“ heißt. Wenn die Herkunft (Origin) „CUSTOM“ ist, werden die folgenden Werte für das Feld „FieldName“ unterstützt: ^ Wert ^ Bedeutung ^ | ''__QUANTITY'' | Abgeschlossene und geplante Menge, angezeigt als „X / Y“ | | ''__QUANTITY_WTR_PROD'' | Übertragene und geplante Menge, angezeigt als „X / Y“ | Das Feld ''__QUANTITY_WTR_PROD'' ist besonders nützlich, wenn eine Menge erst dann als vollständig abgeschlossen gelten soll, nachdem sie in das Ziel­lager übertragen wurde. Siehe hierzu den Schritt mit dem Aktionstyp „ProdWTR“ weiter unten. ==== Knöpfe ==== Wenn der Benutzer in der Übersicht einen Fertigungsauftrag auswählt, wird der Detail- bzw. Ausführungsbildschirm für diesen Auftrag geöffnet. In diesem Bildschirm können bis zu fünf Schaltflächen mit unterschiedlichen Aktionen angezeigt werden. Zu Beginn befinden sich alle Schaltflächen im „Start“-Status. Wenn eine Schaltfläche einen ''TimeType''-Wert ungleich ''None'' besitzt, wird beim Betätigen die Schaltfläche in den „Stop“-Status versetzt und ein Timer gestartet. Dieser Timer endet entweder, wenn dieselbe Schaltfläche erneut gedrückt wird, oder wenn eine Schaltfläche des Typs ''Fault'' betätigt wird. ^ ''PPC_BUTTONS'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Id | Alphanumerisch | 20 | | Department | Alphanumerisch | 20 | | RouteStage | Alphanumerisch | 50 | | Position | Numerisch | 1 | | StartTitle | Alphanumerisch | 20 | | StopTitle | Alphanumerisch | 20 | | TimeType | Alphanumerisch | 20 | Der Wert ''TimeType'' kann die folgenden Bedeutungen haben: ^ Wert ^ Bedeutung ^ | Normal | Reguläre Produktionszeit | | Preparation | Vorbereitungszeit für die Produktion | | Fault | Dauer einer Störungssituation | | None | Schaltfläche misst keine Zeit | Wenn ''None'' verwendet wird, bleibt die Schaltfläche immer im „Start“-Status. ==== Schritte ==== Wir verwenden den Begriff „Schritte“ (steps), um eine oder mehrere Aktionen zu beschreiben, die mit dem Klicken einer Schaltfläche in einem bestimmten Status verknüpft werden können. Auf diese Weise lassen sich Aktionen wie Warenausgabe, Wareneingang usw. in den Produktionsablauf integrieren. Beispiel: Es könnte eine einfache Schaltfläche „Produktion starten / Produktion beenden“ geben. Wird sie im „Start“-Status gedrückt, wird ein Warenausgabe-Schritt ausgelöst. Wird sie im „Stop“-Status gedrückt, wird ein Wareneingangs-Schritt ausgeführt. ^ ''PPC_STEPS'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Department | Alphanumerisch | 20 | | RouteStage | Alphanumerisch | 50 | | FirstStageOnly | Alphanumerisch | 1 | | LastStageOnly | Alphanumerisch | 1 | | ButtonId | Alphanumerisch | 20 | | ButtonState | Alphanumerisch | 20 | | Position | Numerisch | 2 | | Title | Alphanumerisch | 50 | | ShowAttrs | Alphanumerisch | 1 | | ActionType | Alphanumerisch | 20 | | ActionParam | Alphanumerisch | 254 | Die Felder ''Department'' und ''RouteStage'' begrenzen – sofern sie ausgefüllt sind – den jeweiligen Schritt auf die entsprechende Abteilung (Ressourcengruppe) und/oder Routenstufe. Die Felder ''FirstStageOnly'' und ''LastStageOnly'' können den Wert ''Y'' oder ''N'' annehmen und sind nur relevant, wenn das Feld ''RouteStage'' leer bleibt. Sie schränken den Schritt automatisch auf die erste bzw. letzte Routenstufe eines Fertigungsauftrags ein, ohne dass diese explizit benannt werden muss. Die Kombination aus ''ButtonId'' und ''ButtonState'' bestimmt, wann der Schritt ausgelöst wird. Der Wert ''ButtonState'' muss entweder ''Start'' oder ''Stop'' sein. (Eine Schaltfläche mit ''TimeType = None'' befindet sich stets im ''Start''-Status.) Das Feld ''Position'' legt die Reihenfolge fest, in der mehrere Schritte ausgeführt werden, falls sie beide nach einem Button-Ereignis aktiviert würden. Das Feld ''ShowAttrs'' kann ''Y'' oder ''N'' sein und bestimmt, ob die Anzeigattribute des Fertigungsauftrags im Bildschirm des Schritts dargestellt werden sollen. Das Feld ''ActionType'' legt fest, welche Art von Schritt ausgeführt wird, und kann die folgenden Werte annehmen: ^ Wert ^ Bedeutung ^ | AllItems | Listet alle Komponentenartikel des Fertigungsauftrags auf | | MatsWTR | Umlagerung der auszugebenden Komponentenartikel | | IGE | Warenausgabe der Komponentenartikel | | CompletedQty | Eingabe der fertiggestellten Menge für die aktuelle Routenstufe | | SimpleIGN | Wareneingang der fertigen Erzeugnisse | | IGN | Wareneingang mit optionaler Erfassung von Ausschuss- oder Retourenartikeln | | ProdWTR | Umlagerung der produzierten und empfangenen Waren | | FillParams | Eingabemaske für Parameter (siehe unten) | | Text | Zeigt dem Benutzer statischen Text an (z. B. Anweisungen) | | Close | Bietet an, die Routenstufe oder den gesamten Fertigungsauftrag zu schließen | Das Feld ''ActionParam'' kann – abhängig vom jeweiligen ''ActionType'' – unterschiedliche Bedeutungen haben. Die folgende Tabelle beschreibt die möglichen Bedeutungen. Wenn mehrere Optionen verwendet werden sollen, können diese durch Kommas getrennt kombiniert werden. ^ Aktionstyp ^ Bedeutung von ''ActionParam'' ^ | IGE | Kommagetrennte Liste von Artikelgruppen, die eingeschlossen werden sollen | | ::: | Beginnt der Eintrag mit „!“, werden die angegebenen Gruppen ausgeschlossen | | MatsWTR | Kommagetrennte Liste von genau zwei Lagercodes | | ::: | Bestimmt das Quell- und Ziellager | | CompletedQty | ''IGNIfLast'' ruft während der letzten Routenstufe automatisch ''SimpleIGN'' auf | | ::: | ''PreFillQty'' füllt das Mengenfeld vorab aus | | ::: | ''OverwriteQty'' sorgt dafür, dass die eingegebene Menge den bisherigen Wert überschreibt | | ProdWTR | Gleiche Logik wie bei MatsWTR | | FillParams | Kommagetrennte Liste von Parameter-IDs | | Text | Der Text, der im Bildschirm angezeigt wird | | Close | ''CloseDocIfLast'' schließt den Fertigungsauftrag in der letzten Routenstufe | (Hinweis: Das Feld ''ActionParam'' steht nicht in direktem Zusammenhang mit dem unten beschriebenen Parameter-Mechanismus mit Ausnahme des Aktionstyps ''FillParams'', bei dem es eine Liste von Parameter-IDs enthält.) ==== Parameter ==== Wir verwenden den Begriff „Parameter“ (nicht zu verwechseln mit „Attributen“), um spezialisierte Werte zu bezeichnen, die Benutzer in einem ''FillParams''-Schritt eingeben können. Damit lassen sich Informationen erfassen, die in keine Standardlogik von SAP Business One passen. Beispiel: Sie könnten einen Parameter „Werkzeugzustand“ definieren und einen ''FillParams''-Schritt einer „Produktion beenden“-Schaltfläche hinzufügen, bei dem der Benutzer angeben muss, in welchem Zustand sich das Werkzeug befindet (z. B. in Ordnung, beschädigt, defekt). ^ ''PPC_PARAMS'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Id | Alphanumerisch | 20 | | Name | Alphanumerisch | 50 | | DataType | Alphanumerisch | 20 | | ValidValues | Alphanumerisch | 254 | | DefaultValue | Alphanumerisch | 254 | | Mandatory | Alphanumerisch | 1 | | MultiValue | Alphanumerisch | 1 | Der Wert ''DataType'' kann ''Text'' oder ''Number'' sein. Das Feld ''ValidValues'' enthält eine kommagetrennte Liste zulässiger Werte. Die Felder ''Mandatory'' und ''MultiValue'' können jeweils den Wert ''Y'' oder ''N'' annehmen. Wenn ein ''FillParams''-Schritt ausgeführt wird, werden die vom Benutzer eingegebenen Werte in der folgenden UDT gespeichert: ^ ''PPC_PARAM_INPUTS'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Timestamp | Alphanumerisch | 12 | | Resource | Alphanumerisch | 50 | | EmployeeId | Numerisch | 11 | | UserInfo | Alphanumerisch | 20 | | WORDocEntry | Numerisch | 11 | | RDRDocEntry | Numerisch | 11 | | ParamId | Alphanumerisch | 20 | | ParamValue | Alphanumerisch | 254 | ==== Störungs- und Ausschussgründe ==== Die Störungsgründe werden in einem Dropdown-Menü angezeigt, sobald ein Benutzer eine Schaltfläche mit dem Wert ''TimeType = Fault'' betätigt. Der Benutzer muss einen der Gründe auswählen, bevor der Störungsstatus beendet werden kann. Der ausgewählte Störungsgrund wird im Feld ''Comment'' der Tabelle ''PPC_WORSTATUS'' gespeichert (siehe unten). ^ ''PPC_FAULT_REASONS'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Reason | Alphanumerisch | 254 | Die Ausschussgründe werden in einem Dropdown angezeigt, wenn ein Benutzer bei einem Wareneingang ausgeschiedene Mengen erfassen möchte – also Waren, die produziert, aber aufgrund eines Defekts oder anderer Gründe wieder verworfen werden. ^ ''PPC_REJECT_REASONS'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Reason | Alphanumerisch | 254 | ==== Produktionsstatus / Zeitachse ==== Die folgende Tabelle protokolliert alle Start-/Stopp-Ereignisse von Schaltflächen, damit nachvollzogen werden kann, in welchem Status sich ein Fertigungsauftrag befindet und wie lange dieser Status aktiv war. ^ ''PPC_WORSTATUS'' ^^^ ^ Spalte ^ Typ ^ Größe ^ | Timestamp | Alphanumerisch | 12 | | Resource | Alphanumerisch | 50 | | EmployeeId | Numerisch | 11 | | UserInfo | Alphanumerisch | 20 | | WORDocEntry | Numerisch | 11 | | WORDocLine | Numerisch | 11 | | RDRDocEntry | Numerisch | 11 | | PrevStatus | Alphanumerisch | 20 | | Status | Alphanumerisch | 20 | | ResourceGroup | Alphanumerisch | 20 | | RouteStage | Alphanumerisch | 50 | | ButtonId | Alphanumerisch | 20 | | Comment | Alphanumerisch | 254 | Zusätzlich zu den Feldern wird empfohlen, folgende Indizes (Keys) anzulegen, um die Performance zu verbessern: ^ ''PPC_WORSTATUS Keys'' ^^ ^ Schlüssel ^ Spalten ^ | IX_0 | ''WORDocEntry'' | | | ''WORDocLine'' | | IX_1 | ''ResourceGroup'' | | IX_2 | ''UserInfo'' | (Um Schlüssel zu einer benutzerdefinierten Tabelle in SAP Business One hinzuzufügen, öffnen Sie das Fenster Benutzerdefinierte Felder – Verwaltung, suchen Sie die Tabelle unter Benutzerdefinierte Tabellen, wählen Sie ''PPC_WORSTATUS'' aus und klicken Sie anschließend unten rechts auf „Schlüssel“.) ==== Benutzerdefinierte Felder ==== Ressourcen können über das folgende UDF einer bestimmten Routenstufe (auch Unterabteilung genannt) zugeordnet werden: ^ Ressourcen-Stammdaten ^^^ ^ Spalte ^ Typ ^ Größe ^ | PPC_RouteStage | Alphanumerisch | 20 | Artikel können in verschiedene Typen klassifiziert werden: ''Tool'', ''RawMaterial'', ''IntermediateProduct'', ''FinalProduct'', ''ByProduct''. Aktuell wird jedoch nur der Typ ''Tool'' verwendet. Artikel dieses Typs werden bei einem Wareneingang automatisch als **Rückgabeartikel** hinzugefügt. ^ Artikel-Stammdaten ^^^ ^ Spalte ^ Typ ^ Größe ^ | PPC_ItemType | Alphanumerisch | 20 | Da Umlagerungsbelege nicht direkt auf einem Fertigungsauftrag basieren können, wird das folgende UDF verwendet, um anzugeben, zu welchem Fertigungsauftrag sie gehören: ^ Belege ^^^ ^ Spalte ^ Typ ^ Größe ^ | PPC_WORDocId | Numerisch | 11 | | PPC_User | Alphanumerisch | 20 | Von COBI.ppc gemessene Zeiten werden als Warenausgabe mit einer Ressourcenposition gebucht. Das folgende UDF beschreibt, um welchen Zeittyp es sich handelt (Normal, Preparation, Fault): ^ Belegzeilen ^^^ ^ Spalte ^ Typ ^ Größe ^ | PPC_TimeType | Alphanumerisch | 20 | In den folgenden UDFs speichert COBI.ppc Informationen über den Status einer Routenstufe innerhalb eines Fertigungsauftrags. Das Feld ''PPC_CompletedQty'' gibt die Menge der Artikel an, deren Bearbeitung innerhalb dieser Routenstufe abgeschlossen wurde – auch wenn sie möglicherweise noch weitere Stufen durchlaufen müssen, bevor sie als Wareneingang aus der Produktion gebucht werden können. Das Feld ''PPC_Closed'' kann auf **Y** gesetzt werden, um anzuzeigen, dass keine weitere Bearbeitung innerhalb dieser Routenstufe erfolgt. ^ Fertigungsauftrag – Routenstufenzeilen ^^^^^ ^ Spalte ^ Typ / Struktur ^ Größe ^ Gültige Werte ^ Standard ^ | PPC_CompletedQty | Einheiten und Summen / Menge | | | | | PPC_DiscardedQty | Einheiten und Summen / Menge | | | | | PPC_User | Alphanumerisch | 254 | | | | PPC_Closed | Alphanumerisch | 1 | Y / N | N |