Écriture de règles de séparation des lots personnalisées
Logique des règles de séparation de lot
Avant de créer des règles de séparation de lot personnalisées et d'écrire les fonctions de séparation de lot correspondantes, vous devez comprendre la logique utilisée par la fonction de séparation de lot. Lorsqu'un OF arrive au niveau d'une opération pour laquelle une fabrication groupée a été indiquée, la fonction de séparation de lot est appelée.
Lorsque la fonction de séparation de lot est appelée, celle-ci détermine, sur la base de caractéristiques telles que le code article, la couleur, etc., dans quel lot en cours de création l'OF qui arrive doit être placé. Si d'autres OF sont en attente de traitement, l'OF qui arrive peut être regroupé avec ceux-ci ; sinon, il créera un nouveau lot en cours de création.
Nom de la fonction
Votre fonction de séparation de lot personnalisée peut porter n'importe quel nom qui n'est pas un nom de fonction standard exécutable par l'utilisateur.
Arguments
#include "factor.h"
FORMBAT *bsrl(ldp, batch)
LOAD *ldp; /* pointer to the load */
BATCHDEF *batch; /* pointer to the batch definition */
Cette fonction accepte deux arguments, un pointeur vers la charge (Type : LOAD *) et un pointeur vers le lot (Type : BATCHDEF *).
Valeur de retour
La fonction retourne un pointeur vers le lot en cours de création dans lequel cet OF doit être placé ou la valeur NULL s'il crée un nouveau lot (Type : FORMBAT *).
Voici ci-dessous un exemple d'une fonction de séparation de lot basée sur l'article :
FORMBAT *bsrl (LOAD *ldp, BATCHDEF *batch)
/*-----------------------------------------------------------------
Batch separation rule which separates arriving jobs into
different batches based on the item number.
ARGS:
ldp - pointer to the arriving load (job)
batch - pointer to the batch that this load will follow
RETURNS: pointer to the forming batch
-----------------------------------------------------------------*/
{
FORMBAT *fb;
for ( fb = (FORMBAT *) csfsls(batch->btfmls);
fb != NULL;
fb = (FORMBAT *) csnxls((CSENTITY *) fb) )
{
/* Return this forming batch if its children have the same
part as the load passed in, and the new quantity will be
less than or equal to the maximum. */
if ((strcmp(fb->fbldp->loordp->orptpt->panum,
ldp->loordp->orptpt->panum) == 0) &&
(fb->fbquant + sequfb(ldp, batch, batch->btqurl)
<_ batch-="batch-">btmax))
{
Return(fb);
}
}
/* return NULL if we couldn't find one */
Return(NULL);
{
</_>
Installation de la fonction personnalisée
Pour rendre votre fonction de séparation de lot personnalisée disponible pour l'ordonnancement, vous devez l'"installer" à partir de ucini1 en appelant la fonction sedfsb. Cette fonction a deux arguments dans l'ordre suivant :
- Le numéro de la règle de séparation de lot pour laquelle votre fonction contient une logique personnalisée.
- L'adresse de votre fonction de séparation de lot.
Par exemple, pour installer la règle exemple "bsrl" ci-dessus dans la position de règle 39 :
sedfsb (39, bsrl);