# dprod
Archivos de inclusión requerido.
- `functions.dkh`
- `serialize.dkh`
- `dbr.dkh`
- `inventario/movimientos.dkh`
## Producción y manufactura
### Variables globales
#### @erp.dprod.show_log
Imprimir los resultados de las operaciones en la consola/terminal, útil para depurar.
Tipo: `Boolean`, Predeterminado: `true`
#### @erp.dprod.only_log
Indica si únicamente se imprimen los resultados, no realiza operaciones.
Tipo: `Boolean`, Predeterminado: `false`
#### @erp.dprod.SIN_CANTIDADES_SUBJETIVAS
No se considerarán cantidades subjetivas.
Tipo: `Boolean`, Predeterminado: `false`
#### @erp.dprod.NP_SUBRECETAS
No se producirán subrecetas.
Tipo: `Boolean`, Predeterminado: `false`
#### @erp.dprod.PRODUCIR_SIEMPRE_ADICIONALES
Aun en producción por demanda, producirá la receta si tiene adicionales.
Tipo: `Boolean`, Predeterminado: `true`
#### @erp.dprod.DECS_VOLUMEN
Decimales en volúmenes.
Tipo: `integer`, Predeterminado: `5`
**Nota:**
De ser posible, hacer uso de la variable global: `FXCA002` - Precisión de decimales en volúmenes.
```dkl
@erp.dprod.DECS_VOLUMEN = parse.num(dbr.vars.get(db,"FXCA002"))
```
#### @erp.dprod.RESERVAR_VENTAS_PENDIENTES
Considera las cantidades por entregar por ventas para determinar si se debe o no producir una orden en el modo de producción EN DEMANDA.
Tipo: `integer`, Predeterminado: `1`
**Valores aceptados**
- *0. -* No se considera ninguna venta por salir, se consideran las ventas que sacaran producto terminado del mismo almacén.
- *1. -* Solo se consideran ventas posteriores a la que da origen a la orden (con base en su clave primaria).
- *3. -* Se consideran todas las ventas por salir, independientemente de si son previas o posteriores a la que da origen a la orden en proceso.
### Métodos
#### producir
Ejecuta una orden de producción.
```dkl
erp.dprod.producir(&db,¶ms)
```
**Parámetros**
- `object` **db** Referencia a una conexión de base de datos abierta.
- `array` **params** Referencia a un registro con las propiedades necesarias para ejecutar una orden.
**Devoluciones**
`array`
Retorna el array con la información de la orden procesada/ejecutada.
**Excepciones**
10 | No se encontró la orden de producción indicada.
0 | No se pudo completar la orden de producción.
Excepciones de bases de datos.
**Ejemplo**
```dkl
#include "dkli.dkh"
#!
program ""
{
#include "functions.dkh"
#include "serialize.dkh"
#include "dbr.dkh"
#include "dbr.vars.dkl"
#include "inventario/movimientos.dkh"
#include "dprod/dprod.dk"
ref db = dbr.open("miconexion@grupoapps")
new params
{
//REQUERIDOS
@"orden": //(integer) Clave primaria de la orden de producción
@"ref_salida": //(string) Referencia del movimiento de salidas para producción
@"ref_entrada": //(string) Referencia del movimiento de entradas por producción
@"descripcion_salida": //(string) Descripción del movimiento de salidas para producción
@"descripcion_entrada": //(string) Descripción del movimiento de entrada por producción
@"cat_salida": //(integer) Clave primaria de una categoría para el movimiento de salida para producción
@"cat_entrada": //(integer) Clave primaria de una categoría para el movimiento de entrada por producción
@"venta": //(integer) Clave primaria de la venta a la que se relacionarán los movimientos de entrada y salida
//OPCIONALES
@"metodo": //(integer) @erp.dprod.PROD_ENDEMANDA o @erp.dprod.PROD_COMPLETA, si se omite se asume En demanda
@"trans": //(boolean) Si es @true, se incluye una transacción, si se omite se asume @false
@"np_subrecetas": //(boolean) Si es true, no se producen en demanda las sub-recetas
@"preservar_log": //(boolean) Si es true, se guardan los errores en la tabla dprod_log
@"cancel": //(boolean) Si se establece en true, la orden se marcará cancelada si no se realiza ninguna entrada
@"forze": //(boolean) Si se establece en true, aunque el método sea En demanda, producirá las cantidades de los productos de la orden, dejando la producción de sub-recetas en demanda
}
ref orden = erp.dprod.producir(db,params)
}
```