Escribir reglas de separación de lotes personalizadas

El programador utiliza reglas de separación para definir cómo van a separarse los trabajos de entrada en lotes.
Nota:  Consulte Escribir una regla de programador personalizada para obtener un resumen de los pasos necesarios para crear reglas personalizadas. Para obtener más detalles acerca de las funciones descritas en este tema, consulte la Guía de personalización de la programación, disponible para su descarga en nuestra página de asistencia.

Lógica de las reglas de separación de lotes

Antes de crear reglas de separación de lotes personalizadas y escribir las correspondientes funciones, debe comprender la lógica que utiliza la función en cuestión. Cuando llega un trabajo a una operación con una definición de lote especificada, se invoca la función de separación de lotes.

Cuando se invoca la función de separación de lotes, esta determina en qué trabajo de entrada debe colocarse el lote en formación en función de algunas características como número de artículo, color, etc. Si existen otros trabajos esperando a que el lote los procese, el trabajo de entrada puede combinarse con ellos; de lo contrario, crea un nuevo lote en formación.

Denominar la función

La función de separación de lote personalizada puede tener cualquier nombre que no sea un nombre de función estándar invocable por el usuario.

Arguments


#include "factor.h"
FORMBAT *bsrl(ldp, batch)
LOAD *ldp;        /* pointer to the load */
BATCHDEF *batch;  /* pointer to the batch definition */

La función acepta dos argumentos, un indicador a la carga (Type: LOAD *) y un indicador al lote (Type: BATCHDEF *).

Valor de devolución

La función devuelve un indicador al lote en formación al de debería añadirse este trabajo, o NULL si inicia un nuevo lote en formación (Type: FORMBAT *).

A continuación presentamos un ejemplo de la función de separación de lotes en función de la cantidad presente en el trabajo:


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);
{
</_>

Instalación de la función personalizada

Para poner la función de separación personalizada a disponibilidad del programador, debe "instalarla" desde ucini1 invocando a la función sedfsb. Esta función tiene dos argumentos en el siguiente orden:

  • El número de la regla de separación de lotes para la que la función contiene lógica personalizada.
  • La dirección de la función de separación de lotes.

Por ejemplo, para instalar la regla del ejemplo anterior "bsrl" en la posición de regla 39:


sedfsb (39, bsrl);