Skip to main content
Skip table of contents

TbePartListBusinessController

TbePartListBusinessController

Business Controller, der für Stücklisten-Bearbeitung zuständig ist.

Eigenschaften

Beschreibung

CbDataModule:O

Datenmodul (TbeDbGet)

CbOptions:O

Einstellungen für die Bearbeitung

Funktionen und Methoden

Funktion

Parameter

Beschreibung

CbClearOptions()

Alle Einstellungen zurücksetzen (CbOptions)

CbInsert()

aPartListBO:TBePartListBO, aMainArticleNo:C, aPositionString:C, aPartArticleNo:C

Neue Stücklisten-Position anlegen

CbCancel()

aPartListBO:TBePartListBO

Abbrechen

CbEdit()

aPartListBO:TBePartListBO

Bearbeiten

CbDelete()

aPartListBO:TBePartListBO

Löschen

CbPost()

aPartListBO:TBePartListBO

Speichern

CbValidate()

aPartListBO:TBePartListBO

Eingaben validieren (wird automatisch in Post aufgerufen)

CbGetProductionOrdersForMainArticle()

aArticleNo:C

Liste der offenen Produktionsaufträge mit dem Artikelnummer holen (Rückgabe: Array)

CbRecalculateProductionOrders()

aOrders:A

Produktionsstücklisten neu berechnen für ausgewählte Aufträge

CbImportFromPartList()

aPartListBO:TBePartListBO
aSourceArticle:C

Importiert die Stückliste von aSourceArticle in den Positionierten aPartListBO.

Folgende aPartListBO.Options sind zu beachten:

  • UseSourceArticleTestPlan - Boolean.
    Default: False
    Prüfplan/Prüfschritte werden kopiert.

  • ImportTakeOverPosNo - Boolean.
    Default: False
    Die ursprünglichen Positionsnummern aus der Stückliste aSourceArticle werden übernommen.

    • ImportStartPosNo - Integer
      Default: 0
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoIncrementBy - Integer
      Default: 5
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird, wird bei jeder neuen Position mit ImportPosNoIncrementBy erhöht.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoLength - Integer
      Default: 4
      Die Minimum Länge der neuen Anfangspositionsnummer. z.B. 0040
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

  • UseSourceArticleFilter - Boolean
    Default: false
    Folgende Zusatzfilter werden beachtet:

    • CondMultiplrForFixedQuant - Boolean
      Default: false
      Multiplikator für Rüstmenge anwenden

    • CondMultiplier - Integer
      Default: 1
      Multiplikator für Rüstmenge.
      Wird nur beachtet wenn CondMultiplrForFixedQuant := true,

    • CondIncludeTypeA - Boolean
      Default: false
      Arbeitswerte auch übernehmen.

    • CondSupplementFilter - String
      Default: '' (Leerstring)
      Codeblock für zusätzlichen Filter

    • CondOnlyReplacementArticle - Boolean
      Default: false
      Nur Ersatzartikel übernehmen

    • CondDissolveSubassembly - Boolean
      Default: false
      Unterbaugruppen auflösen

CbImportFromProdOrder()

aPartListBO:TBePartListBO
aSourceProdOrd:C

Importiert einen Produktionsauftrag mit Auftragsnummer aSourceProdOrder in den Positionierten aPartListBO.

Folgende aPartListBO.Options sind zu beachten:

  • UseSourceArticleTestPlan - Boolean.
    Default: False
    Prüfplan/Prüfschritte werden kopiert.

  • ImportTakeOverPosNo - Boolean.
    Default: False
    Die ursprünglichen Positionsnummern aus der Stückliste aSourceArticle werden übernommen.

    • ImportStartPosNo - Integer
      Default: 0
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoIncrementBy - Integer
      Default: 5
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird, wird bei jeder neuen Position mit ImportPosNoIncrementBy erhöht.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoLength - Integer
      Default: 4
      Die Minimum Länge der neuen Anfangspositionsnummer. z.B. 0040
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

CbImportFromDBaseFile()

aPartListBO:TBePartListBO
aImportFileName:C

Importiert eine DBF/ADT Datei mit Namen aImportFileName in den Positionierten aPartListBO.

Folgende aPartListBO.Options sind zu beachten:

  • UseSourceArticleTestPlan - Boolean.
    Default: False
    Prüfplan/Prüfschritte werden kopiert.

  • ImportTakeOverPosNo - Boolean.
    Default: False
    Die ursprünglichen Positionsnummern aus der Stückliste aSourceArticle werden übernommen.

    • ImportStartPosNo - Integer
      Default: 0
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoIncrementBy - Integer
      Default: 5
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird, wird bei jeder neuen Position mit ImportPosNoIncrementBy erhöht.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoLength - Integer
      Default: 4
      Die Minimum Länge der neuen Anfangspositionsnummer. z.B. 0040
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

CbImportFromTextFile()

aPartListBO:TBePartListBO
aImportFileName:C

Importiert eine CSV Datei mit Namen aImportFileName in den Positionierten aPartListBO.

Folgende aPartListBO.Options sind zu beachten:

  • UseSourceArticleTestPlan - Boolean.
    Default: False
    Prüfplan/Prüfschritte werden kopiert.

  • ImportTakeOverPosNo - Boolean.
    Default: False
    Die ursprünglichen Positionsnummern aus der Stückliste aSourceArticle werden übernommen.

    • ImportStartPosNo - Integer
      Default: 0
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoIncrementBy - Integer
      Default: 5
      Die Anfangspositionsnummer die für die Positionsnummern der Stückliste aSourceArticle benutzt wird, wird bei jeder neuen Position mit ImportPosNoIncrementBy erhöht.
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

    • ImportPosNoLength - Integer
      Default: 4
      Die Minimum Länge der neuen Anfangspositionsnummer. z.B. 0040
      Wird nur beachtet wenn ImportTakeOverPosNo := false,

Beispiel

CODE
|
   oDM:O, oPL_BC:O, oPL_BO:O, oArt_BC:O, oArt_BO:O, cAssembly:C,

   cPart1:C, cPart2:C, cPart2Ex:C, cPart3:C, cRecursionArticle:C,

   cPart1Order:C, cPart2Order:C, cPart3Order:C, cRecursionArticleOrder:C,
   cAssemblyInRecursionOrder:C
|
//#typesafety

cAssembly         := 'BAUGRUPPE',
cPart1            := 'MUTTER M4',
cPart2            := 'KLEBSTOFF',
cPart2Ex          := 'B-1',
cPart3            := 'A_MONTAGE',
cRecursionArticle := 'B-4',

cPart1Order               := '000',
cPart2Order               := '001',
cPart3Order               := '002',
cRecursionArticleOrder    := '003',
cAssemblyInRecursionOrder := '999',

//******************************************************************************
function DeleteAllPartListPos(cArticle:C, cPartOrder:C, cPart:C)
|aArr:O, i:N|
   aArr := oPL_BO.CbAsArray(cArticle),
   for i := 0 to aArr.Count() - 1 do
     oPL_BO.CbGoToID(aArr.getInteger({i, 'id'})),
     oPL_BC.CbDelete(oPL_BO),
   next,
end,

//******************************************************************************
function CleanUp()
|oQuery:O|
   oQuery := CreateObject('TbeADSQuery'),
   startseq
      oQuery.SQL := 'DELETE FROM "DAB035.ADT" WHERE ARTNR=' + "'" + cAssembly + "'",
      oQuery.CbExecSQL(),
      oQuery.SQL := 'DELETE FROM "DAB240.ADT" WHERE ARTNR1=' + "'" + cAssembly + "'",
      oQuery.CbExecSQL(),
   always
      DestroyObject(oQuery),
   stopseq,

   oDM.Transaction_Begin(),

   DeleteAllPartListPos(cAssembly, cPart1Order, cPart1),
   DeleteAllPartListPos(cAssembly, cPart2Order, cPart2),
   DeleteAllPartListPos(cAssembly, cPart3Order, cPart3),

   DeleteAllPartListPos(cRecursionArticle, cAssemblyInRecursionOrder, cAssembly),
   DeleteAllPartListPos(cAssembly,         cRecursionArticleOrder,    cRecursionArticle),

   oDM.Transaction_Commit(),

   oDM.Transaction_Begin(),
   startseq
      oArt_BO.CbGoToArticleNo(cAssembly),
      oArt_BC.CbDelete(oArt_BO),
   onerror
   stopseq,
   oDM.Transaction_Commit(),

end,

//******************************************************************************
function Setup()
   oDM.Transaction_Begin(),

   oArt_BC.CbInsertArticle(oArt_BO, cAssembly),
   oArt_BO.CbArticleType := 'B',
   oArt_BO.CbDecimals    := 0,
   oArt_BC.CbPost(oArt_BO),

   oDM.Transaction_Commit(),
end,

//******************************************************************************
function SimplePL(lTest:L:=False)
   oDM.Transaction_Begin(),

   oPL_BC.CbInsert(oPL_BO, cAssembly, cPart1Order, cPart1),
   oPL_BO.CbQuantity := 15,
   oPL_BC.CbPost(oPL_BO),

   oPL_BC.CbInsert(oPL_BO, cAssembly, cPart2Order, cPart2),
   oPL_BO.CbQuantity := 5,
   oPL_BC.CbPost(oPL_BO),

   oPL_BC.CbInsert(oPL_BO, cAssembly, cPart3Order, cPart3),
   oPL_BO.CbQuantity := 30,
   oPL_BC.CbPost(oPL_BO),

   oDM.Transaction_Commit(),

   if lTest then
      meld('BAUGRUPPE-Stückliste erzeugt'),
      browse(,oPL_BO.CbTable),
   endif,
end,

//******************************************************************************
function EditPL(lTest:L:=False)
|aArr:O, oObj:O|

   oDM.Transaction_Begin(),

   // Mengen ändern
   aArr := oPL_BO.CbAsArrayFiltered(cAssembly, cPart1),
   if aArr.Count() > 0 then
     oPL_BO.CbGoToID(aArr.getInteger({0, 'id'})),
     oPL_BC.CbEdit(oPL_BO),
     oPL_BO.CbQuantity      := 0,
     oPL_BO.CbFixedQuantity := 10,
     oPL_BC.CbPost(oPL_BO),
   endif,

   // Artikel ändern
   aArr := oPL_BO.CbAsArrayFiltered(cAssembly, cPart2),
   if not Empty(aArr) then
     oPL_BO.CbGoToID(aArr.getInteger({0, 'id'})),
     oPL_BC.CbEdit(oPL_BO),
     oPL_BO.CbPartArticleNo := cPart2Ex,
     oPL_BC.CbPost(oPL_BO),
   endif,

   oDM.Transaction_Commit(),

   if lTest then
      meld('BAUGRUPPE-Stückliste editiert'),
      browse(,oPL_BO.CbTable),
   endif,

   // Artikel zurücksetzen
   oDM.Transaction_Begin(),
   aArr := oPL_BO.CbAsArrayFiltered(cAssembly, cPart2Ex),
   if not Empty(aArr) then
     oPL_BO.CbGoToID(aArr.getInteger({0, 'id'})),
     oPL_BC.CbEdit(oPL_BO),
     oPL_BO.CbPartArticleNo := cPart2,
     oPL_BC.CbPost(oPL_BO),
   endif,
   oDM.Transaction_Commit(),
end,

//******************************************************************************
function Recursion(lTest:L:=False)
|lRecursionBlocked:L|
   startseq
      oDM.Transaction_Begin(),

      oPL_BC.CbInsert(oPL_BO, cRecursionArticle, cAssemblyInRecursionOrder, cAssembly),
      oPL_BO.CbQuantity := 1,
      oPL_BC.CbPost(oPL_BO),

      oDM.Transaction_Commit(),
      oDM.Transaction_Begin(),

      lRecursionBlocked := False,
      startseq
         oPL_BC.CbInsert(oPL_BO, cAssembly, cRecursionArticleOrder, cRecursionArticle),
         oPL_BO.CbQuantity := 1,
         oPL_BC.CbPost(oPL_BO),
      onerror
         oPL_BC.CbCancel(oPL_BO),
         lRecursionBlocked := true,
      stopseq,

      if not lRecursionBlocked then
         SetError('Recursion was not blocked and it should be!!'),
      endif,

      oPL_BC.Options.AllowRecursion := true,
      oPL_BC.CbInsert(oPL_BO, cAssembly, cRecursionArticleOrder, cRecursionArticle),
      oPL_BO.CbQuantity := 1,
      oPL_BC.CbPost(oPL_BO),

      oDM.Transaction_Commit(),

      if lTest then
         meld('BAUGRUPPE-Rekursion'),
         browse(,oPL_BO.CbTable),
      endif,
   always
      oDM.Transaction_TryRollback(),
      oDM.Transaction_Begin(),
      DeleteAllPartListPos(cRecursionArticle, cAssemblyInRecursionOrder, cAssembly),
      DeleteAllPartListPos(cAssembly,         cRecursionArticleOrder,    cRecursionArticle),
      oDM.Transaction_Commit(),
   stopseq,
end,

//******************************************************************************
function CreateProductionOrder(lTest:L:=False)
|oProdDispo_BC:O, oProdDispo_BO:O, oDM2:O, oDab240:O|
   oDM2 := CreateObject('TbeDbGet'),
   startseq
      oProdDispo_BC := CreateObject('TBeProductionDispositionBC',,oDM2),
      oProdDispo_BO := CreateObject('TBeProductionDispositionBO',,oDM2),

      oProdDispo_BC.CbDataModule := oDM2,
      oProdDispo_BO.CbDataModule := oDM2,

      oDM2.Transaction_Begin(),

      oProdDispo_BC.CbDispoCreate(oProdDispo_BO, cAssembly),
      oProdDispo_BO.CbQuantity := 3,
      oProdDispo_BO.CbCommiss  := 'T' + Str(Randomrange(-99999, 99999)),
      oProdDispo_BC.CbDispoPost(oProdDispo_BO, true, true, true, true, false),

      oDM2.Transaction_Commit(),

      oProdDispo_BC.CbDispoRelease(oProdDispo_BO, true),
      oProdDispo_BC.CbDispoToProductionOrder(oProdDispo_BO),

      if lTest then
         meld('Produktionsauftrag angelegt'),
         oDab240 := BeOpen(waDAB240),
         startseq
            DbLocate('ARTNR1', {cAssembly}, 0, oDab240),
            browse(,oDab240),
         always
            BeClose(oDab240),
         stopseq,
      endif,
   always
      DestroyObject(oDM2),
   stopseq,
end,

//******************************************************************************
function EditProductionOrder(lTest:L:=False)
|aArr:A, oDab240:O|
   aArr := oPL_BC.CbGetProductionOrdersForMainArticle(cAssembly),
   writeln(ArrToStr(aArr)),
   oPL_BC.CbRecalculateProductionOrders(aArr),

   if lTest then
      meld('Produktionsauftrag editiert'),
      oDab240 := BeOpen(waDAB240),
      startseq
         DbLocate('ARTNR1', {cAssembly}, 0, oDab240),
         browse(,oDab240),
      always
         BeClose(oDab240),
      stopseq,
   endif,
end,

oDM := CreateObject('TbeDbGet'),
startseq
   oArt_BC := CreateObject('TbeArticleBusinessController',,oDM),
   oArt_BO := CreateObject('TbeArticleBO',,oDM),
   oPL_BC  := CreateObject('TbePartListBusinessController',,oDM),
   oPL_BO  := CreateObject('TbePartListBO',,oDM),

   oArt_BC.CbDataModule := oDM,
   oArt_BO.CbDataModule := oDM,
   oPL_BC.CbDataModule  := oDM,
   oPL_BO.CbDataModule  := oDM,

   CleanUp(),
   Setup(),

   SimplePL(true),
   CreateProductionOrder(true),
   EditPL(true),
   Recursion(true),
   EditProductionOrder(true),
always
   oDM.Transaction_TryRollback(),
   DestroyObject(oDM),
stopseq,

Weitere Verknüpfungen

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.