Proceso de PEPS
Objetivo
Desarrollar una guía sobre el proceso del método de valoración de inventarios PEPS ( Primero en entrar, primero en salir ).
Antecedentes
Antes de agregar la valoración de inventarios con método PEPS, el sistema lo realizaba con costo promedio, el cual se manejaba en la tabla INV23ARC ( Artículos por bodega) que es donde se almacenan cuántos artículos hay en existencias para una bodega en específico.Cada vez que se realizaba una salida de inventario, el sistema obtenía el costo promedio y cuenta contable por bodega, ese era el costo y cuenta que se utilizaba para los asientos contables y la valoración de los auxiliares.
Cambio
Lotes
El cambio requería que se registrara por lotes de compras, entonces cada vez que se realizará una entrada de mercadería, esta se tomaría como un lote y este lote tendría el costo ( que se toma del costo de compra ). Para tratar de hacer menos cambios en el sistema, los lotes se manejan por medio de la tabla INV27ARC, que es la tabla de artículos por documento ( ya existente en el sistema). Cada vez que se registre una entrada de documento es porque se está creando un lote nuevo, al menos que sea un traslado entre bodegas, en ese caso el # de lote y fecha en que ingreso al sistema se deberá mantener.
La imagen anterior, se explica de la siguiente manera: existe un documento de entrada de mercadería, dicho documento tiene un código de lote que sería E-25672 ese es el nuevo código de entrada o lote. Todos los artículos que pertenecen a esta entrada tienen ese mismo código de lote, aunque pueden ir a diferentes bodegas.
Campos de la tabla INV27ARC agregados en el proceso.
- INV27FEC DATETIME – Fecha del Lote : Esta fecha se utilizará para determinar el orden de salida.
- INV27CSA DECIMAL(18,6) – Cantidad de Salida: La cantidad que va saliendo del lote, igual sirve de control para determinar de qué lote se puede sacar de inventario y las existencias.
- INV27EST VARCHAR (1) – Este estado sirve para saber que cuales existencias se encuentran en tránsito ( ver documento de entradas provisional o definitivas ).
- INV27CEN VARCHAR(20) – Este es el # de lote.
Procesos de Requisición
Obtener los lotes por medio de PEPS.
Existen varios procesos del sistema que se encarga de realizar las requisiciones o salidas de inventario.
- Traslados.
- Requisiciones y Despachos.
- Ventas.
- Costos de Producción.
- Requisiciones de producto terminado.
El sistema permite hacer las salidas del inventario básicamente por bodega y unidad, por lo que el usuario indica artículo, bodega y cantidad ( No códigos de entrada ).
Por ejemplo: Si el usuario registra una requisición de artículo 001, bodega 03, unidad 0001, cantidad 200. El sistema debe según la fecha de registro decidir de cuáles lotes va a tomar esas 200 unidades, pueden estar en un único lote o en varios.
Existe un método que se utiliza desde todos los procesos de requisición que es el encargado según bodega, unidad y fecha seleccionar cuales lotes van formar parte del proceso de requisición. INV46ARC.RegistroRequisicion, más adelante se detalla.
Para utilizar los mismos métodos de Eliminar, Registrar Requisición y obtener las líneas de los lotes que se van a tomar para requisar se crea una clase y una tabla INV46ARC, la cual contará con el detalle de lote y el tipo de movimiento de requisición que ejecuta el sistema, puede traslados, requisiciones, despachos, ventas, costos de producción etc, estos procesos y como es el funcionamiento se detalla a continuación:
Detalle de Tabla: La tabla cuenta con la relación de cada uno de los procesos antes mencionados, Traslados, requisiciones, despachos, ventas, costos de producción.
INV46TIP: Tipo se identifican los procesos de la siguiente manera.
- INV33ARC - Requisiciones - Despachos
- VTA33ARC - Requisiciones de producto terminado
- INV29ARC- Traslados
- CPR22ARC- Costos de Producción
- VTA10ARC- Ventas
- CPR42ARC- Costos de Semoviente
- COM42ARC- Devoluciones
Relación con el documento de Débito, este es el documento de donde estoy obteniendo las existencias.
- INV20COD_REL
- INV21COD_REL
- INV27CON_REL
Relación con el documento de Crédito, este es el documento se registra con la requisición. Se registra vacio hasta que se aplique el procesos o el despacho como tal, hasta que se registra el documento INV21ARC,INV22ARC,INV27ARC.
- INV20COD
- INV21COD
- INV27CON
INV46COS: Costo es el monto con el que entró la existencia, sale directo de la tabla INV27ARC.INV27MLO
INV46CEN: Código de Entrada, es el código de entrada o número de lote, sale directo de la tabla INV27ARC.INV27CEN
CNT10INV: Cuenta contable de inventario, esta es la cuenta contable de la entrada del inventario, sale de la tabla INV27ARC.CNT10COD
D |
Código de Compañía |
INV46TIP |
Tipo, [INV33ARC,INV29ARC,VTA10ARC,VTA33ARC,CPR22ARC] |
INV46CON |
Consecutivo |
INV32COD |
Consecutivo Requisición |
INV33COD |
Consecutivo Requisición |
INV28COD |
Consecutivo Traslados |
INV29COD |
Consecutivo Traslados |
VTA09CON |
Consecutivo Venta |
VTA10CON |
Consecutivo Venta |
VTA32COD |
Consecutivo Requisición por lote |
VTA33COD |
Consecutivo Requisición por lote |
CPR20COD |
Consecutivo Orden de Producción |
CPR11COD |
Consecutivo Detalle receta |
CPR22CON |
Consecutivo Insumos por orden de Producción |
COM41COD |
Consecutivo DEVOLUCIÓN COMPRA |
COM42COD |
Consecutivo DEVOLUCIÓN COMPRA |
INV20COD |
Relación con el documento de Crédito |
INV21COD |
Relación con el documento de Crédito |
INV27CON |
Relación con el documento de Crédito |
INV02COD |
Artículo |
INV05COD |
Bodega |
CNT10INV |
Cuenta Inventario |
CNT10TRA |
Cuenta Transitoria |
INV46CAN |
Cantidad |
INV46EST |
Estado |
INV20COD_REL |
Relación con el documento de Débito |
INV21COD_REL |
Relación con el documento de Débito |
INV27CON_REL |
Relación con el documento de Débito |
CPR41COD |
Orden de Semoviente |
CPR42COD |
Orden de Semoviente |
INV30COD |
Despacho |
INV31COD |
Despacho |
INV46COS |
Costo |
INV46CEN |
Código de Entrada |
Procesos de la clase INV46ARC:
RegistroRequisicion: Este método recibe el tipo INV46TIP , y la Cantidad Solicitada, esta cantidad siendo la cantidad indicada por el usuario. Además recibe desde cualquiera de los procesos.
- INV02COD : Artículo
- INV05COD: Bodega
- R12COD: Unidad
En caso de que la requisición sea de producto terminado, también recibe:
- CPR20COD
- INV49CON
- INV49TIP
- CPR41COD
El proceso como tal se encarga, basados en los filtros anteriormente mencionados hacer una consulta a la tabla INV27ARC, para obtener los lotes, estos lotes se obtienen de orden ascendente, primero los lotes más antiguos. Como la cantidad solicitada no necesariamente sale de 1 único lote, por medio de este método recursivo se va tomando 1 lote a la vez, cada iteración se guarda la información en la tabla INV46ARC y se resta dicha cantidad de la cantidad solicitada, esto se hace hasta que la cantidad sea cero.
LiberoRequisicion:
- El proceso de libero requisición, recibe el tipo INV46ARC , basado en este tipo decide la relación con la tabla INV33ARC,VTA10ARC,VTA33ARC,COM42ARC etc.
- Realiza la consulta y actualiza la cantidad en la relación con el documento Débito para devolver esa cantidad a disponible en la tabla INV27ARC.INV27CSA.
- Luego actualiza el estado en la tabla INV46ARC.INV46EST pendiente.
EliminoRequisicion:
- El proceso de eliminar requisición, recibe el tipo INV46ARC , basado en este tipo decide la relación con la tabla INV33ARC,VTA10ARC,VTA33ARC,COM42ARC etc.
- Realiza la consulta y actualiza la cantidad en la relación con el documento Débito para devolver esa cantidad a disponible en la tabla INV27ARC.INV27CSA.
- Luego elimina de la tabla INV46ARC la relación.
CreoRelacionINV27ARC:
- Este método es el encargado de registrar la relación de la tabla INV46ARC con el crédito, este método es utilizado cada que se registra el movimiento de salida en las tablas INV21ARC,INV22ARC,INV27ARC
Traslados de Inventario:
El proceso de registro del traslado quedó funcionando normalmente, el cambio se realizó al momento de la aplicación.
El método de RegistroRequisición, básicamente hace una consulta a la tabla detalle del traslado y llama al método INV46ARC.RegistroRequisición.
El registro de la requisición se llama en el método Aplicar, justo después de las validaciones.
Luego del registro en la tabla INV46ARC, más adelante dentro del mismo método aplicar, se realiza la consulta directa a la tabla INV46ARC justo antes de registrar las líneas en INV27ARC. Recordando que por una línea en la tabla INV29ARC detalle de traslado, pueden existir varias en INV46ARC.
Cuando se realiza un proceso de traslado el código de lote y fecha se hereda. De la tabla INV46ARC, se toma el costo, cuenta contable, número de lote, y fecha del lote.
Además se puede observar que luego del registro de la tabla INV27ARC, se llama al método INV46ARC.CreoRelacionINV27ARC el cual se detallo anteriormente.
Requisición de Inventario
La requisición de inventario se basa en 2 procesos, el primero la solicitud de la requisición que la registra el usuario, este proceso continúa funcionando normalmente.
El cambio principal se realiza en el despacho, que es donde se realiza la aprobación de dicha requisición y la hace oficial.
En el método Aplicar del despacho INV30ARC_Ctrl.Aplicar() es donde se afecta el cambio PEPS.
El método INV46ARC.RegistroRequisicion se llama luego de las validaciones.
Luego del registro en la tabla INV46ARC, más adelante dentro del mismo método aplicar, se realiza la consulta directa a la tabla INV46ARC justo antes de registrar la relación con la INV27ARC. Recordando que por una línea en la tabla INV33ARC detalle del despacho, pueden existir varias en INV46ARC.
De la tabla INV46ARC, se toma el costo, cuenta contable, número de lote, y fecha del lote.
Además se puede observar que luego del registro de la tabla INV27ARC, se llama al método INV46ARC.CreoRelacionINV27ARC el cual se detallo anteriormente.
Requisiciones de Producto Terminado
En el proceso de Requisición de Producto terminado cambia un poco de los anteriores, el registro de la requisición se realiza al momento de generar el asiento. Porque en ese momento se necesitan las cuentas contables.
Al generar el asiento método VTA32ARC_Ctrl.GenerarAsientoDetalle()
Se llama al método de registrar requisición, para luego utilizar la información de la tabla INV46ARC para registrar el asiento contable.
Como el proceso de requisición termina o registra el movimiento de salida del inventario hasta que se aplica el despacho, el registro de la INV27ARC se realiza en INV30ARC_Ctrl.Aplicar()
Además se puede observar que luego del registro de la tabla INV27ARC, se llama al método INV46ARC.CreoRelacionINV27ARC el cual se detallo anteriormente.
Ventas
En el proceso Ventas es similar al de Requisición de producto terminado, el registro de la requisición se realiza al momento de generar el asiento. Porque en ese momento se necesitan las cuentas contables.
Al generar el asiento método VTA09ARC_Ctrl.GenerarAsientoDetalle()
Se llama al método de registrar requisición, para luego utilizar la información de la tabla INV46ARC para registrar el asiento contable.
Como el proceso de requisición por venta termina o registra el movimiento de salida del inventario hasta que se aplica el despacho, el registro de la INV27ARC se realiza en INV30ARC_Ctrl.Aplicar()
Además se puede observar que luego del registro de la tabla INV27ARC, se llama al método INV46ARC.CreoRelacionINV27ARC el cual se detallo anteriormente.
Costos de producción
En el proceso Costos de Producción es similar al de Requisición de producto terminado, el registro de la requisición se realiza al momento de generar el asiento. Porque en ese momento se necesitan las cuentas contables.
Al generar el asiento método CPR20ARC_Ctrl.GeneroAsientoDetalle()
Se llama al método de registrar requisición, para luego utilizar la información de la tabla INV46ARC para registrar el asiento contable.
En el método aplicar de la Orden de producción CPR20ARC_Ctrl.Aplicar(), es donde se realiza el registro de la requisición de los Insumos en las tablas INV20ARC,INV21ARC,INV27ARC.
Recordemos que por una línea de Insumos, es posible que existan salidas por varios lotes, es por esto que se debe hacer la consulta en la tabla INV46ARC.
Además se puede observar que luego del registro de la tabla INV27ARC, se llama al método INV46ARC.CreoRelacionINV27ARC el cual se detallo anteriormente.