Escribir reglas de separación de lotes personalizadas
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);