UebergeordnetesD.bmp Grundlegende Informationen zum Paket Produktionsplanung und -steuerung finden Sie unter Erste Schritte PPS.


 PPS Makrofunktionen

Falls nicht explizit auf eine Einschränkung der Verwendung von Makrofunktionen hingewiesen wird, stehen diese in allen Modulen zur Verfügung.
 

 Makros für den Report- bzw. Etikettendruck

Früher wurden die Druckaufrufe über jeweils eigene Makrofunktionen gestartet. Mittlerweile werden die Druckaufrufe über die allgemeine Makro-Funktion BMD_STARTPRINTFUNCTION gestartet.

 Druckverarbeitung

Über den Druck-Parameter "Art" kann gesteuert werden, wie automatisch der Druck erfolgen soll. Dabei sind folgende Parameter möglich:
  • Mit Windows-Druckdialog

    '(* Art *):102412=PRINTTODIALOG'; // OpenMode -> rmPrint

  • Vollständig im Hintergrund (ohne Dialog)

    '(* Art *):102412=PRINTTODEFAULT'; // OpenMode -> rmPrintDefault

  • Druckaufbereitung bis zur Druckvorschau

    '(* Art *):102412=PRINTTOPREVIEW'; // OpenMode -> rmPreview

  • Mit BMD-Druckdialog

    '(* Art *):102412=PRINTTOPRINTDLG'; // OpenMode -> rmNormal

 Makroaufruf Produktionsliste

Zusätzlich zu den Parametern, die via BMD_STARTPRINTFUNCTION verfügbar sind, können noch folgende Parameter mitgegeben werden:
  • Druckoptionen
    Es kann eine eindeutige Druckoption mitgeschickt werden.

  • Lieferant
    Falls in der eindeutigen Druckoption die Archivierung des Dokuments ausgelöst wird, kann hier die Personennummer mitgegeben werden, zu der das Dokument zugeordnet wird.

  • Pfad-Generierungsmethode für FTP-Upload
    Falls in den Druckoptionen der FTP-Upload ausgelöst wird, kann hier die Generierungsmethode für den FTP-Pfad ausgewählt werden. Folgende Möglichkeiten stehen hier zur Verfügung:
    - keine Erweiterung (0)
    - Artikel-Nummer/P.-Los x 1000 + KombiNr MOD 1000
    - P.-Los
    - P.-Gruppe
    - Artikel-Sachmerkmal04 / P.-Los x 1000 KombiNr MOD 1000

  • Druckmodus
    Die in den Druckoptionen eingestellte Aufbereitung (Hintergrunddruck etc.) kann hier noch übersteuert werden.

  • Eindeutige Leistungsnummer
    Über den Parameter "LEISTUNGLFDNR" kann der Produktionslistenaufruf auf eine bestimmte Leistung eingeschränkt werden. Dies kann relevant sein, wenn nach Abstempeln eines Vorgangs Detailinformationen zur aufgezeichneten Leistung erfolgen sollen.

  • Eindeutige Vorgangsnummer
    Über den Parameter "ARBEITSGANG_ID" kann der Produktionslistenaufruf auf einen bestimmten Vorgang eingeschränkt werden.
Beispiel 
Beispiel.png
Hier finden Sie einen Makrotext, wie die Archivierung einer Produktionsliste zum Lieferanten "Eigenproduktion" ausgelöst werden kann.
 
// Aufruf Archivierung je Produktionsliste

Params := '(* Drucker *):102410=Microsoft XPS Document Writer,' +
'(* Firma: *):382071=472,' +
'(* Planungsgruppe von: *):382004=' + PLos_Nr + ',' +
'(* Planungsgruppe bis: *):382005=' + PLos_Nr + ',' +
'(* Sortierung: *):382019=1,' +
'(* Produktionsdaten fixieren: *):382015=0,' +
'(* Standard *):102400=0,' +
'(* Report *):102401=5378,' +
'(* Art *):102412=2'+
 
// Ersetzen durch Firmennummer, in welcher der Lieferant "Eigenproduktion" geführt ist
'PPS_DC_FIRMENNR=1,' +
'PPS_DC_PER_FIRMENNR=1,'+
 
// Ersetzen durch Personen_ID, in welcher der Lieferant "Eigenproduktion" geführt ist, diese ist am Lieferantenstamm einsehbar
'PPS_DC_PER_ID=KL2000302001,'+
 
// Eindeutige Nummer (ID) der Druckoptionen, in welcher die Archivierung ausgelöst wird
// Die Druckoption muss zuvor manuell in den Druckoptionen angelegt werden
'PPS_DC_OPT_ID=493572861280481,'+
 
// Pfad-Generierungsmethode:
// 0 = keine Erweiterung
// 1 = ArtikelNr / P.-Los x 1000 + KombiNr MOD 1000
// 2 = P.-Los
// 3 = P.-Gruppe
// 4 = ArtikelSachMerkmal04 / P.-Los x 1000 + KombiNr MOD 1000
'PPS_DC_OPT_PATHGENMODE = 4,'+
 
// PRINTTODIALOG = Hintergrundaufbereitung, Druckerauswahl wird geöffnet
// PRINTTODEFAULT = Druck komplett im Hintergrund, auf Windows-Standarddrucker
'PPS_DC_OPENMODE=PRINTTODEFAULT';
 
// Aufruf des Drucks
BMD_STARTPRINTFUNCTION('MCS_FRMPRODPAP_CREATE', Params);
 

 Makrofunktionen für Abfragen und Dialoge

 Fortschrittsanzeige-Init

PROGRESSDISPLAY_INIT(<Startwert>,<Endwert>)

Zum Initialisieren der Progressbar. Beide Parameter sind vom Typ Integer.

 Fortschrittsanzeige

PROGRESSDISPLAY_UP_DATE(<Text>,<Zähler>)

Zur Anzeige der Progressbar: <Text> bezeichnet den Anzeigetext für die n-ten (=<Zähler>) Anzeige.
Der erste Parameter ist eine Zeichenkette, der andere vom Typ Integer.

 Fortschrittsanzeige-Ende

PROGRESSDISPLAY_END()

Zum Entfernen der Progressbar vom Bildschirm.

 Benutzerfehler-Anzeige

SHOW_USER_ERROR_MESSAGE()
 
Anzeige der durch den Benutzer hervorgerufenen Fehlermeldungen.

 Fortschrittsanzeige-Abbruch

ABORT_PROGRESS_BAR()

Überprüft, ob die Fortschrittsanzeige abgebrochen worden ist. Ist der Rückgabewert gleich TRUE, wurde der 'Abbrechen'-Button gedrückt.

 Entscheidungsbox

DECIDING_BOX(<Frage>,<Fenstertitel>,<Alternative1,Alternative2,...>)
 
Falls mehrere Möglichkeiten zur Auswahl stehen, kann über diese Funktion eine Entscheidung eingeleitet werden. Alle drei Parameter sind vom Typ String. Der Rückgabewert identifiziert den x-ten Button (mit 0 beginnend), der gedrückt worden ist. Der Alternative-Parameter ist ein String, wobei die einzelnen Alternativen durch einen Beistrich getrennt sind.

 Pausieren

BMD_SLEEP(<Dauer in Mikrosekunden>)

Mit dieser Prozedur wird die Programmausführung für <Dauer in Mikrosekunden> gestoppt. Der Rückgabewert ist ein String, der jedoch keine Bedeutung hat.

 Makros zur Qualitätskontrolle

 Qualitätswert holen

GET_QMDATA_VALUE(<Qualitätsmerkmal-Nr.>)

Rückgabe des Qualitätswertes für bestimmtes Qualitätsmerkmal in einem Qualitätskontrollschirm (Qualitätskontrolle bzw. Produkte).

 Qualitätswert setzen

SET_QMDATA_VALUE(<Qualitätsmerkmal-Nr.>,<Wert>)

Einen Wert eines Qualitätsmerkmals in einem Qualitätskontrollschirm (Qualitätskontrolle bzw. Produkte) mit <Wert> belegen.

 Makros zur Einheitenumrechnung

 Einheitenumrechnung (Artikel)

GET_QUANTITY_IN_UNIT(<Hauptfirma>, 'Artikel', <Ausgangs-Menge>, 'Ausgangs-Einheit', 'Ziel-Einheit')
 
Diese Methode rechnet eine Menge von der Ausgangs-Einheit in die Ziel-Einheit unter Berücksichtigung der Einheiten-Tabelle des Artikels um.
Beispiel 
Beispiel.png
Für den Artikel 4711 soll die Menge 500.000 g in kg umgeschlüsselt werden.
Result := BMD_GET_QUANTITY_IN_UNIT(1, '4711', 500000, 'g', 'kg');

Liefert den Wert: 500000 (g).

 Einheitenaufstellung

GET_UNITASSEMBLY(<Hauptfirma>, <Einheitentabellen-Nummer>, <Ausgangs-Menge>, 'Ausgangsmengen-Einheit')
oder
GET_ARTICLE_UNITASSEMBLY(<Hauptfirma>, 'Artikel', <Ausgangs-Menge>, 'Ausgangsmengen-Einheit')

Diese Methoden ermöglichen die Aufsplittung der übergebenen Menge in möglichst große, ganzzahlige Einheiten laut der übergebenen Einheitentabelle oder der Einheitentabelle des übergebenen Artikels.
In den Formeln kann diese Funktion ebenfalls unter der Bezeichnung "Einheitenaufstellung" gefunden werden.
 
Zum Beispiel: 13.200 Stk = 13 Paletten (á 1000 Stk) + 2 Karton (á 100 Stk)
Beispiele 
Beispiel.png
Beispiel 1:
 
BMD_SHOWMESSAGE(
'Die Aufstellung für 3000.2 kg in der Einheiten-Tabelle 152 lautet: ' +
BMD_GET_UNITASSEMBLY(50 ,152, 3000.2, 'kg') );

Liefert den Text: "Die Aufstellung für 3000.2 kg in der Einheiten-Tabelle 152 lautet: 3 t 0,2 kg".

Beispiel 2:
BMD_SHOWMESSAGE(
'Die Einheitenaufstellung für 981.9 kg lautet für Artikel "Erdbeeren": ' +
BMD_GET_ARTICLE_UNITASSEMBLY(1,'Erdbeeren', 981.9, 'kg') );
 
Liefert den Text: "Die Einheitenaufstellung für 981.9 kg lautet für Artikel "Erdbeeren": 1 Container 181,9 kg".

 Makrofunktionen zum Materialfluss in der Produktion

 Chargenmenge

RW_BATCH_QUANTITY(<Artikelnr.>,<Lagerplatz>,<Charge - Rohware>,<Wert-ID>,<Wiegeeinheit>)

Diese Funktion ermöglicht die Abfrage der Lagerdaten eines Artikels und einer RW-Charge. Rück- und Übergabeparameter sind alle vom Typ String.
 
Mögliche Parameter für <Wert-ID>:

Wert-ID
Nur in 5.5 (J/N)
Beschreibung
OVERALL-STOCK
 
Lagermenge
AVAILABLE-STOCK
 
verfügbare Lagermenge
ACQUISITION_DATE
J
Zugangsdatum
STOCK-TAKING-QUANTITY
J
Inventurmenge
RECEIVED_QUANTITY
J
Zugangsmenge
ISSUED-QUANTITY
J
Abgangsmenge
CORRECTED-QUANTITY
J
Korrekturmenge
PLANNED-LEAVING
 
geplanter Abgang
PLANNED-AQUISITION
 
geplanter Zugang
AVERAGE-PRICE
J
Durchschnittspreis
COST-PRICE
J
Einstandspreis
 Seitenanfang StartOfPage.png

 Chargen-Mischfunktion

BMD_PLC_MIX(<Firma>,<Lager-Nr.>,'Lagerplatz','Artikel','Mengeneinheit')

Diese Funktion ermöglicht es, alle Lagerkonten eines Lagerorts/Lagerplatzes zu "mischen". Dabei wird ein neues Produktionslos angelegt und alle Lagerkonten, die sich am Lager/Lagerplatz befinden, werden als Materialeinsatz zum Produktionslos hinzugefügt. Als Ergebnis wird die gesamte Menge mit einer neuen Chargennummer zugebucht. Dabei wird die übergebene Artikelnummer für die Zubuchung verwendet.

Mögliche Parameter:

Parameter Beschreibung 
Firma Firma, in der die Chargenmischung durchgeführt werden soll und in der sich das Lager befindet.
Lager Lagerort, der gemischt werden soll.
Lagerplatz Lagerplatz, der gemischt werden soll.
Artikelnummer Artikelnummer, die für das Ergebnis (= Erzeugnis) der Mischung verwendet werden soll .
Einheit 
Einheit, in welche die Einzelmengen umgerechnet werden. Die Summe der Einzelmengen wird dann als Menge für die Produktzubuchung verwendet.

Beispiel 
Beispiel.png
// ==============================================
// Erstelldatum : 16.03.2020 13:42:21
// Ersteller : BMDWWS#1
// Eingerichtet von/am :
// Beschreibung : Fenstermakro im Fenster Produkte pro Produktionslos (MCS_MDPRODFPMGR_CREATE)
// ==============================================

lProdukt := MacroObject.CreateMacroModel('1');  //CreateMacroModel

lFirmenNr     := lProdukt.GetValue('MCA_PCP_FIRMENNR');
lArtikelNr    := lProdukt.GetValue('MCA_PCP_ARL_ARTIKELNR');
lLager        := lProdukt.GetValue('MCA_PCP_LAGERNR');
lLagerpl      := lProdukt.GetValue('MCA_PCP_LAGERPLATZ');

if (lLager <> '') AND (lLagerpl <> '') then begin
    lAbfragetext := 'Soll die Chargenmischung für Lager ' + BMD_FORMATNUM('0', lLager) + BMD_CONCAT(', Lagerplatz ', lLagerpl) + ' ausgeführt werden? \n\n'
                    + BMD_CONCAT('Es wird Artikel ', lArtikelNr) + ' als Erzeugnis der Mischung zugebucht.';
                   
    lStartChgMix := BMD_TEXTTONUMDEF(BMD_ASKVALUEBOOL(lAbfragetext,'Chargenmischung starten'))
   
    if (lStartChgMix = 1) then begin
        result := BMD_PLC_MIX(lFirmenNr, lLager, lLagerpl, lArtikelNr, 'kg');
    end;
    else begin
        BMD_SHOWMESSAGE('Chargenmischung abgebrochen.');
    end;
end;
else begin
    BMD_SHOWMESSAGE('Es konnte kein gültiger Lagerplatz ermittelt werden.');
end;   

Ausgangszustand am Lager:

1385221939000002780_2.png

Aufruf Chargenmischung:

1385221939000002780_5.png

Meldungsausgabe nach der Mischung:

1385221939000002780_6.png

Es wurde ein neues Produktionslos (ohne Bezug zu einem Auftrag, dh. die Felder "Erf.Kz." und "Erf.Nr" sind leer) angelegt:

→ Als Materialeinsatz wurden die Lagerkonten vom Tank 1 verwendet.

1385221939000002780_7.png

→ Als Produkt wurde die Nougatfülle zugebucht:

1385221939000002780_8.png

 Chargen-Mischfunktion (erweitert)

BMD_PLC_MIX_EXT(<Firma>,<Lager-Nr.>,'Lagerplatz','Artikel','Mengeneinheit',<Q.Status>)
Funktioniert grundsätzlich analog zur oben angeführten einfachen Chargen-Mischung. Der einzige Unterschied ist, dass der Qualitätsstatus für das Ergebnis der Mischung mitgegeben werden kann.

 Produkt erzeugen

BMD_PCP_INSERT(<Firma>,'Artikel','P.-Los-ID',<Menge>,'Mengeneinheit',<Lager-Nr.>,'Lagerplatz','Chargen-Nr','Zusatzdaten (;-getrennt)')

Diese Funktion ermöglicht es, Produkte für ein Produktionslos hinzuzufügen.

Für den Parameter "Zusatzdaten" können folgende Felder übergeben werden.

Wert Beschreibung 
MCA_PCP_EPEinstandspreis des Produkts 
MCA_PCP_FERT_EP Fertigungseinstandspreis des Produkts 
MCA_PCP_SSCC SSCC des Produkts 
MCA_PCP_WARENEINGKOPFID Verweis auf einen Wareneingangskopf 
MCA_PCP_LEISTUNGSDATUM 
Leistungsdatum des Produkts 
MCA_PCP_QTY_REG_DATUM 
Buchungsdatum des Produkts 
MCA_PCP_MIT_FIRMENNR 
Firmennummer des Mitarbeiters 
MCA_PCP_MITARBEITERID 
Mitarbeiter-ID, die am Produkt gespeichert werden soll 
MCA_AID_STATUS_QUALI
Qualitätsstatus des Produkts 
RECORD_MATERIAL_CONSUMPTION 
Retrograde Materialrückmeldung für das erzeugte Produkt wird gebucht, Achtung nur mit Wert "1" 
sämtliche Freifelder des Produkts - z. B.
MCA_PCP_FREIFELDA01_120 
Freifelder 1 bis 5 des Produkts
TRANSFERMATERIAL_TO_HIGHERLEVEL 
Materialweitergabe (autom. Abbuchung) an das übergeordnete Produktionslos kann mit diesem Parameter unterbunden werden.
Achtung: Nur mit Wert <> "1", z. B. "0". Ist der Parameter nicht in den Zusatzdaten vorhanden, erfolgt die Materialweitergabe und automatische Abbuchung. Gibt es kein übergeordnetes Produktionslos, ist der Parameter nicht relevant.
 Seitenanfang StartOfPage.png
Beispiel 
Beispiel.png
// ==============================================
// Erstelldatum des Ausweises : 19.05.2017 08:49
// Ersteller : BMDWWS#1
// Beschreibung : Übergabe Zusatzdaten für Produktanlage
// ==============================================

Zusatzdaten := 'MCA_PCP_QTY_REG_DATUM=19.05.2017;MCA_PCP_FREIFELDA01_120=via Makro angelegt';
result := BMD_PCP_INSERT(1, 'nb012', 342440848000208, 1, 'Stk', 1, '', '2017-000354', Zusatzdaten);

 Materialeinsatz hinzufügen

BMD_EPS_INSERT(<Firma>,'Artikel','P.-Los-ID',<Menge>,'Mengeneinheit',<Lager-Nr.>,'Lagerplatz','Chargen-Nr','Serien-Nr')
Diese Funktion ermöglicht es, einen Materialeinsatz zu einem Produktionslos hinzuzufügen. Dabei wird die Zeile sofort gebucht.
 

 Materialeinsatz hinzufügen (mit weiteren Übergabe-Parametern)

BMD_EPS_INSERT_EXT(<Firma>,<Firma (Artikel)>,'Artikel',<P.-Los-ID>,<Menge>,'Mengeneinheit',<Firma (Lager)>,<Lager-Nr.>,'Lagerplatz',<Firma (CHG)>,'Chargen-Nr',<Firma (Farbe)>,<Farbe>,<Firma (Größe)>,'Größe')

Mit dieser Funktion können zusätzlich die zu buchende Farbe und Größe bekanntgegeben werden.
 
Beispiele für das Buchen von Materialeinsatz 
Beispiel.png
// ==============================================
// Erstelldatum des Ausweises : 19.05.2017 08:49
// Ersteller : BMDWWS#1
// Beschreibung : Materialeinsatz buchen
// ==============================================

lPLosId  := MCA_PLC_PCHARGENID;
BMD_EPS_INSERT(1, 'dru007', lPLosId, 1, 'Stk', 2, '', '', '');

      // Hinzufügen einer erweiterten Materialeinsatzzeile:
      // Übergabe mit Farbe, Größe
BMD_EPS_INSERT_EXT (    lFirma,
                                lArtikelFirma,
                                lArtikelNr,
                                lPLosId,
                                lMenge,
                                lEh,
                                lLagerFirma,
                                lLagerNr, 
                                lLagerPl,
                                lChargenFirma,
                                lChargenNr,
                                lFarbenFirma,
                                lFarbe,
                                lGroessenFirma,
                                lGroesse   );

 Makro-Objekt für Materialverbrauch

Für das Buchen von Materialverbrauch über Makro gibt es ein eigenes Makro-Objekt namens "MaterialConsumption". Dieses unterstützt unterschiedliche Funktionen, die nachfolgend beschrieben werden.

 Objekt für Materialverbrauch erzeugen

WwsPpsMacroClasses.CreateMaterialConsumption();

Erzeugt den Materialverbrauchsgenerator und weist die Objektreferenz auf eine Variable zu. Mit Hilfe der zugewiesenen Variable kann man sich immer wieder auf den Generator beziehen. Für die nachfolgend beschriebenen Funktionen muss der Materialverbrauchsgenerator bereits erzeugt worden sein.

Achtung: Mit dieser Funktion wird noch kein Materialverbrauch gebucht!

 Informationen zurücksetzen

Objekt.ClearKeys();

Setzt alle übergebenen Informationen am Objekt zurück.

 Optionale Parameter

 Lagerdaten setzen

Objekt.SetStockKey(Firma, Lager, 'Lagerplatz');

Setzt Abgangslager und -lagerplatz für den Materialverbrauch.

 Buchungstext setzen

Objekt.SetAccountingText('Buchungstext');

Setzt den Buchungstext für Stückliste und Lagerbuchung.

 Farbe setzen

Objekt.SetArticleColorKey(Firma, Farbennummer);

Setzt die Farbennummer für den Materialverbrauch.

 Größe setzen

Objekt.SetArticleSizeKey(Firma, 'Größe');

Setzt die Größenkurzbezeichnung für den Materialverbrauch.

 Prozess setzen

Objekt.SetArticleProcessKey(Firma, 'Prozessnummer');

Setzt die Prozessnummer für den Materialverbrauch.

 Qualitätsstatus setzen

Objekt.SetArticleQStatus(QStatus);

Setzt die Q-Status-Nummer für den Materialverbrauch.

 AID-Merkmal 1, 2 setzen

Objekt.SetArticleAttributes('AID-Merkmal 1', 'AID-Merkmal 2');

Setzt AID-Merkmal 1 und 2 für den Materialverbrauch.

 Artikel-Identifikation setzen

Objekt.SetArticleIdentification(AIDFirmenNr, FarbenNr, AIDFirmenNr, 'GroessenKBez', AIDFirmenNr, 'ProzessNr', QStatus, 'AID-Merkmal 1', 'AID-Merkmal 2');

Eine Alternative zu den Methoden oben, die alle AID-Informationen auf einmal setzt.

 Charge setzen

Objekt.SetLotKey(Firma, 'Charge');

Setzt die Charge für den Materialverbrauch.
 

 Seriennummer setzen

Objekt.SetSerialKey(Firma, 'Seriennummer');

Setzt die Seriennummer für den Materialverbrauch.

 SSCC setzen

Objekt.SetSSCC(SSCC);

Setzt die SSCC für den Materialverbrauch.

 Informationen zur Verarbeitung, Vorbereitung setzen

Objekt.SetAssembleUser('Verarbeiter');
Objekt.SetAssembleDate('23.12.2017');
Objekt.SetPreparationUser('Kommissionierer');
Objekt.SetPreparationDate('23.12.2017');

Setzt die Informationen "Verarbeitet am/von" (Assemble) bzw. "Kommissioniert am/von" (Preparation).

 Materialverbrauch buchen

Objekt.RecordMaterialConsumption(Firma, ArtikelFirma, MaterialArtikelNr, PLosId, Menge, Einheit);

Bucht den Materialverbrauch mit den zuvor gesetzten Informationen - bei diesem Aufruf werden die verpflichtenden Parameter übergeben.
 

 Stücklisten-ID für letzte Buchung ermitteln

Objekt.GetLastRecordedPieceListId();

Ermittelt die Stücklisten-Id der zuvor durchgeführten Buchung.
 
Beispiel 
Beispiel.png
// ==============================================
// Erstelldatum : 14.06.2018 09:34:48
// Ersteller : BMDWWS#1
// Eingerichtet von/am :
// Beschreibung : Fenstermakro im Fenster Produktionslose (MCS_MDPPSPRODCHARGEMGR_LIST_CREATE)
// ==============================================  

lFirmenNr     := MCA_PLC_FIRMENNR();
lPLosId   := MCA_PLC_PCHARGENID();

lLagerNr      := 1;
lLagerPl      := '';

lArtikelNr    := 'Roh1';
lFarbenNr     := -1;
lGroessenKBez := '';
lProzessNr    := '';
lQStatus      := 21;
lAIDMerkmal1  := '';
lAIDMerkmal2  := '';
lChargenNr    := ''
lSerienNr     := '';
lMenge        := 10;
lEinheit      := 'kg';

lSSCC            := '';
lVerarbeiter     := 'BMD';
lKommissionierer := 'BMD';
lVerarbeitDatum  := '01.06.2018'; // BMD_DATE();
lKommissDatum    := '01.06.2018'; // BMD_DATE();

lMaterial := WwsPpsMacroClasses.CreateMaterialConsumption();  // Erzeugt ein Objekt zur Nacherfassung von Materialeinsätzen

// alles bisher gesetzte löschen (eig. nur bei einem weiteren Aufruf nötig)
lMaterial.ClearKeys();

// optional: Informationen zum Lager
lMaterial.SetStockKey(lFirmenNr, lLagerNr, lLagerPl); // LagerKey setzen
lMaterial.SetAccountingText('Buchungstext für Stkl-Position und Lagerbuchung'); // Buchungstext setzen

// optional: AID
if lFarbenNr <> ''     then lMaterial.SetArticleColorKey(lFirmenNr, lFarbenNr); // Farbe setzen
if lGroessenKBez <> '' then lMaterial.SetArticleSizeKey(lFirmenNr,  lGroessenKBez); // Groesse setzen
if lProzessNr <> ''    then lMaterial.SetArticleProcessKey(lFirmenNr, lProzessNr); // Prozess setzen
if lQStatus <> ''      then lMaterial.SetArticleQStatus(lQStatus); // Q.Status

if (lAIDMerkmal1 <> '') OR (lAIDMerkmal2 <> '') then begin
 lMaterial.SetArticleAttributes(lAIDMerkmal1, lAIDMerkmal2); // M1+M2
end;

// optional: Alternative zum Setzen der AID-Informationen
{lMaterial.SetArticleIdentification(
  lFirmenNr, lFarbenNr, // Farbe
  lFirmenNr, lGroessenKBez, // Groesse
  lFirmenNr, lProzessNr, // Prozess 
  lQStatus, // Q.Status
  lAIDMerkmal1, lAIDMerkmal2);}

// optional: Charge
lMaterial.SetLotKey(lFirmenNr, lChargenNr);

// optional: Seriennummer
lMaterial.SetSerialKey(lFirmenNr, lSerienNr);

// optional: SSCC
lMaterial.SetSSCC(lSSCC);

// optional: Verarbeiter und Vorbereiter
lMaterial.SetAssembleUser(lVerarbeiter);
lMaterial.SetAssembleDate(lVerarbeitDatum);
lMaterial.SetPreparationUser(lKommissionierer);
lMaterial.SetPreparationDate(lKommissDatum);

// Aufruf der Erzeugung/Rückmeldung, die folgenden Übergaben sind zwingend.
//  auf lOk wird TRUE/FALSE (1/0), je nach Erfolg der Methode zugewiesen
lOk := lMaterial.RecordMaterialConsumption(lFirmenNr, lFirmenNr, lArtikelNr, lPLosId, lMenge, lEinheit); 

if lOk = 1 then begin
 // Liefert die zuletzt erzeugte EPSId, falls man damit weiterarbeiten möchte/muss
 lEpsId := lMaterial.GetLastRecordedPieceListId()
 BMD_SHOWMESSAGE(BMD_CONCAT('Buchung erfolgreich ausgeführt - gebuchte Stücklisten-Id: ', lEpsId ) );
end;

 Makros zur Gewichtsaufzeichnung

 Gewichtsaufzeichnung

REGISTER_WEIGHT('Registrierungswerte')
 
Der Parameter "Registrierungswerte" stellt einen String dar, dessen Inhalt sich durch Strichpunkt getrennte Name/Werte-Paare zusammensetzt. Den jeweiligen Namen (siehe unten) können bestimmte Werte zugeordnet werden. Die Reihenfolge bzw. Anzahl der Paare ist nicht relevant, jedoch sollten die Namen nicht mehrfach vorkommen. Zu beachten ist, dass die Namen/Werte-Paare nur durch ein ';' Zeichen bzw. die Paare selbst durch ein '=' Zeichen getrennt sind, d. h. zwischen Namen und Wert ist kein Leerzeichen erlaubt.

Diese Makrofunktion ist nur in den Fenstern Produkte, Materialeinsatz und in BDE-Gewicht (Waageninterface) verfügbar.
Seitenanfang StartOfPage.png
Registrierungswert
Typ
Beschreibung
NETTO
Float
 
BRUTTO
Float
TARA
Float
 
UNIT
String
spezifiziert die Mengeneinheit
PROTOKOLL_REG_NR
String
kennzeichnet Registriernummer des Eichprotokolls der Waage
TOOL
String
kennzeichnet eine WerkzeugId
TRANSPORTTYPE-1
String
klassifiziert den Transporttyp 1
QUANT.-TRANSPORTTYPE-1
Integer
Anzahl Transporttypen 1
TRANSPORTTYPE-2
String
klassifiziert den Transporttyp 2
QUANT.-TRANSPORTTYPE-2
Integer
Anzahl Transporttypen 2
PIECE
Float
Zweitmengenangabe
CHARGE
Integer
Chargennummer
SSCC
String
Nummer der Transporteinheit
(Serial Shipping Container Code)

Zusätzlich können Werte mittels MCA-Konstanten direkt in den aktuellen Datensatz geschrieben und mit der Gewichtsaufzeichnung zeitgleich abgespeichert werden (siehe 3. Bsp.). Falls auf ein Datenfeld über den Namen und die MCA-Konstante zugegriffen wird, hat jener Wert, der über den Namen mitgegeben wird, Vorrang.

Der Rückgabewert ist ein Booleanwert, der aussagt, ob die Registrierung erfolgreich war. Die Werte müssen als Zeichenkette eingegeben werden.
Beispiele 
Beispiel.png
Beispiele für die übergebenen Parameter:
REGISTER_WEIGHT(
  • 'NETTO=12,5;BRUTTO=15;TARA=2,5;UNIT=kg'
  • 'NETTO=' + BMD_FORMATNUM('###0.00',Netto) + ';TARA=' + BMD_FORMATNUM('###0.00',Tara)
  • 'NETTO=12,5;' + MCA_xxxx + '=13'
)

 Waagenbefehl-Ausführung

TOOL_COMMAND_EXECUTE(<WerkzeugID>,<Befehl>,<Befehlsparameter>)

Die Befehlausführung des Befehls <Befehl> auf dem Werkzeug, spezifiziert durch <WerkzeugID> wird eingeleitet. Alle 3 Parameter sind vom Typ String. Siehe dazu Waageninterface. Die daraus erzielten Ergebnisse können über die Makrofunktion 'Wiegeergebnisverarbeitung' abgefragt werden.
Seitenanfang StartOfPage.png

 Waagenstatus-Beschreibung

TOOL_STATUS_DESCRIPTION(<Waagenstatus>)
 
Diese Funktion liefert eine Beschreibung des Waagenstatus, der durch <Waagenstatus> (Typ Integer) spezifiziert wird.

 Wiegeergebnisverarbeitung

GET_WEIGHT_RESULT(<Wert-ID>)
 
Die Ergebnisse aus der Wiegung bzw. aus der Ausführung eines Waagenbefehles können anhand des Parameters <Wert-ID> abgefragt werden. Die Über- und Rückgabeparameter sind vom Typ String.
 
Wert-ID
Beschreibung
NETTO
Gibt das Nettogewicht nach einer Wiegung zurück.
BRUTTO
Gibt das Bruttogewicht nach einer Wiegung zurück.
TARA
Gibt das Taragewicht (aufgrund der Eingabe in BDE-Gewicht) zurück.
UNIT
Bezeichnet die Maßeinheit, in der die Wiegung vorgenommen wird.
STATUS
Liefert den augenblicklichen Waagenstatus zurück.
Entweder 'stable' oder 'dynamic'.
Seitenanfang StartOfPage.png

 Auswahl von Waage und Transporttyp

SCREEN_WEIGH()
 
Der Eingabeschirm für Wiegung wird gestartet. Rückgabewert ist ein Booleanwert, ist dieser False, würde die Eingabe abgebrochen werden. Die Eingabe-Werte werden in einer Liste abgespeichert (siehe Wertübergabe).

 Wertübergabe

PASS_VALUE(<Wert-ID>)
 
Liefert anhand der übergebenen - ist vom Typ String - einen Wert von Typ String zurück, der aus der Ausführung der Makrofunktion 'Auswahl von Waage und Transporttyp' oder 'Waagenbefehl-Ausführung' resultiert.

 Erlaubte Wert-IDs - Auswahl von Waage und Transporttyp

Wert-ID
Beschreibung
TOOL
kennzeichnet eine WerkzeugId
TOOL-UNIT
spezifiziert die Waageneinheit
TRANSPORTTYPE-1
klassifiziert den Transporttyp-1
QUANT.-TRANSPORTTYPE-1
Anzahl - Transporttyp-1
TRANSPORTTYPE-2
klassifiziert den Transporttyp-2
QUANT.-TRANSPORTTYPE-2
Anzahl - Transporttyp-2
NUMBER-OF-WEIGHING
spezifiziert die Anzahl der automat. Wiegungen
 

 Erlaubte Wert-IDs - Waagenbefehl-Ausführung

Wert-ID
Beschreibung
COMMAND
Bezeichnet den letzten durchgeführten Befehl.
COMMAND-PARAM
Beschreibt den Parameter für den letzten durchgeführten Befehl.
STATUS
Beschreibt den Status der Befehlsausführung.
ERROR
Liefert Fehlerbeschreibung, falls Befehlsausführung fehlgeschlagen ist
 Seitenanfang StartOfPage.png

 Transporttyp-Daten

TRANSPORTTYPE_PROPERTY(<Werkzeug>,<Wert-ID>)

Diese Funktion ermöglicht die Datenabfrage aus den Transporttypen. Beide Übergabeparameter sowie der Rückgabewert sind vom Typ String.

Mögliche Wert-IDs:
 
Wert-ID
Beschreibung
TRANSPORTTYP-NAME
Bezeichnung des Transporttyps, der durch <Werkzeug> identifiziert wird
WIDTH
Breite der Transporttype
HEIGHT
Höhe der Transporttype
LENGTH
Länge der Transporttype
MAX-WEIGHT
Höchsterlaubtes Gewicht, mit der die Transporttype beladen werden darf
TARA
Taragewicht der Transporttype
 Seitenanfang StartOfPage.png

 Weitere Makrofunktionen

 Snapshot-Druck

Ein Snapshot (Bildschirmdruck) Makro kann überall als Fenstermakro eingefügt werden.

BMD_FORM_SNAP();  //Fenster-Bildschirmkopie erstellen 

BMD_FORM_PRINT();  //Fenster drucken am aktuellen Drucker, Ausrichtung wird anhand vom Seitenverhältnis automatisch bestimmt, der Ausdruck wird auf das aktuelle Papierformat füllend skaliert.

 Runden

ROUNDING(<Wert>,<Präzision>,<Rundungsmodus>)
 
Diese Makrofunktion realisiert eine Rundungsfunktion. <Rundungsmodus> bezeichnet die Rundungsart und ist eine Zeichenkette. Die restlichen Parameter sind vom Typ Float.

Mögliche Rundungsmodi:
Rundungsmodus
Beschreibung
ARITHMETIC
kaufmännisches Runden
UP
Aufrunden
DOWN
Abrunden
 Seitenanfang StartOfPage.png

 Vorgang einlasten

Die Funktion Einlasten eines Vorgangs kann auch über Makro aufgerufen werden. Die dafür notwendigen Parameter können aus dem Dialogfenster "Einlasten" über das Funktionsmenü unter "Extras" in die Zwischenablage kopiert werden. Diese werden dann als Einlastparameter der Makrofunktion übergeben.

Der Aufruf ist beispielsweise möglich als Aktionsmakro nach Bearbeiten eines Vorgangs/Einsatzes. Der Vorgang/Einsatz darf sich nicht im Neuanlage- oder Bearbeiten-Modus befinden.

Alternativ kann mit WwsPpsMacroClasses.CreateVorgang(/*MC_ des Modells*/) ein Vorgangsmodell erzeugt werden. Nachdem ein entsprechender Dataset geladen worden ist, kann DsDisptach auf diesen aufgerufen werden, damit kann man die Funktion auch unabhängig von einem Fenster ausführen.

Beispiel als Fenstermakro im Fenster "Einsätze" 
Beispiel.png

Für den folgenden Einsatz wird die Funktion "Einlasten" aufgerufen:

1473186422000004380_4.png

1473186422000004380_0.png

Ergebnis in der Zwischenablage:

"DispatchFunction=pdfPlc;DispatchMode=5;DispatchDateType=pddNone;DispatchDate=44986;DispatchDateRev=-1;
SingleVgElTyp=-1;DispatchRelative=pdrNone;ApplyOn=1;ConcatDate=False;Manual=False;DispatchCombined=False;
ResetOverride=True;DispatchUnplaned=False;DispatchDateRel=0;DispatchDateRevRel=0;DispatchPpc=True;
DispatchOp=True;SaveToExpected=False;ResetFixed=False;DispatchActive=True"

Im Fenster "Einsätze" wurde dann dieses Fenstermakro erstellt, das dann im Anschluss für den ausgewählten Einsatz ausgeführt wird.

Anmerkung: Unten wurde aus Gründen der einfacheren Lesbarkeit, die Definition der Einlastparameter auf mehrere Zeilen aufgeteilt.

// ==============================================
// MacroNo : 249544014346809
// Erstelldatum : 29.12.20XX
// Ersteller : BMDWWS
// Eingerichtet von/am : BMDWWS, 29.12.20XX
// Beschreibung : Fenstermakro im Fenster Einsätze (MCS_FRMPEPEEAGMGR_CREATE)
// ==============================================

lDispatchParams := 'DispatchFunction=pdfSingle;DispatchMode=5;DispatchDateType=pddNone;';
lDispatchParams := lDispatchParams + 'DispatchDate=44986;DispatchDateRev=-1;SingleVgElTyp=-1;DispatchRelative=pdrVp;
ApplyOn=0;';
lDispatchParams := lDispatchParams + 'ConcatDate=False;Manual=False;DispatchCombined=False;ResetOverride=True;
DispatchUnplaned=False;';
lDispatchParams := lDispatchParams + 'DispatchDateRel=0;DispatchDateRevRel=0;DispatchPpc=True;DispatchOp=True;
SaveToExpected=False;';
lDispatchParams := lDispatchParams + 'ResetFixed=False;DispatchActive=True';

lEinsatz := MacroObject.CreateMacroModel('TBMDMDPepEeAgMgr');
lVorgang := WwsPpsMacroClasses.CreateVorgang2(lEinsatz);
lVorgang.DsDispatch(lDispatchParams);

Das Ergebnis am Einsatz nach Ausführen des Makros:

1473186422000004380_5.png

"SAnfang-Tg" sowie "SEnde-Tg" wurden durch die Einlastung neu bestimmt.

 Globale Variablen innerhalb eines Reports

Für das Speichern eines Wertes innerhalb eines Reports können in den BMD Reports die Variablen VAR1 bis VAR10 und in den WWS/PPS Formularen die Makro-Funktionen BMD_C_X_R('Register','Ausprägung') bzw. BMD_C_X_ADD('Register','Ausprägung') verwendet werden.
 
Großer Unterschied in diesen Varianten ist, dass die Variablen VAR1 bis VAR10 vor dem endgültigen Aufbereiten nochmals zurückgesetzt werden. Aus diesem Grund können Sie für Zähler verwendet werden, die je angedruckter Zeile erhöht werden.
 
Die PPS-Zähler werden im Laufe der Druckaufbereitung bereits mehrfach erhöht. Diese dienen dazu, einmalig gesetzte Informationen abzuspeichern und diese wiederholt auszugeben (etwa bei Benutzerabfragen).
Beispiel 
Beispiel.png
Mit dem Ausdruck eines PPS-Produktetiketts soll der Unterschied verdeutlicht werden. Auf Seite 1 des Produktetiketts beginnt der PPS-Zähler bereits bei 3, obwohl bei beiden als Startwert 0 angenommen wurde.

1178722686000206860_0.png
 
Makrotexte der beiden Zähler:
 
// für VAR1
var1 := BMD_TEXTTONUMDEF(var1) + 1;
result := var1;
 
// für PPS-Zähler
BMD_C_X_ADD('zaehler','1');
result := BMD_C_X_R('zaehler','1'); 

1097582601000001570.png
Siehe auch: