Salidas de inventario¶
Esta sección permite registrar manualmente salidas de inventario que disminuyen el stock disponible sin estar vinculadas a facturas de venta. Almacena información del movimiento incluyendo producto, cantidad (en diferentes unidades de medida), lote de origen, almacén, tipo de salida, estado (bloqueado como completada), entidad relacionada, empleado responsable, puesto de trabajo, ubicación principal, observaciones, numeración/serie, fechas de registro, y movimiento interno asociado que reduce automáticamente el stock. Se utiliza para diversos motivos como rupturas o productos dañados, mermas, muestras gratuitas, consumo interno, robos o pérdidas, donaciones, transferencias a ubicaciones no gestionadas, o destrucción de productos vencidos. Valida límites de stock físico para evitar salidas que excedan existencias reales y mantiene trazabilidad completa del inventario negativo.
Información General¶
| Propiedad | Valor |
|---|---|
| ID | f09b320f-e100-45c4-a677-0954455471d7 |
| Tabla PostgreSQL | tpr_20040105692 |
| Etiqueta Plural | Salidas |
| Texto principal automatico | Sí |
| Sección Base | Base - Salidas de inventario (11c48ca7-9601-4465-90a8-0a294866e199) |
Campos¶
Total de campos: 36 (10 del sistema, 26 personalizados)
Campos del Sistema¶
| Campo | Tipo | Rol | Columna PostgreSQL | Relación | Atributos |
|---|---|---|---|---|---|
| ID | Relación |
- | id |
Salidas de inventario | - |
| Referencia | Texto |
- | nombre |
- | - |
| Fecha Alta Dato | Fecha Y Hora |
- | fecha |
- | - |
| Editado | Fecha Y Hora |
- | fecham |
- | - |
| Eliminado | Sí/No |
- | eliminado |
- | - |
| Usuario Creador del dato | Relación |
- | usuarioid |
Base - Entidades | - |
| Sección (Relación Sistema) | Relación |
- | plantillapid |
- | 🔴 Obligatorio |
| Posición (Orden) | Decimal |
- | posicion |
- | - |
| Modificado | Sí/No |
- | modificado |
- | - |
| Fecha Indice Actividad | Fecha Y Hora |
- | fechaia |
- | - |
Campos Personalizados¶
| Campo | Tipo | Pestaña | Columna | Atributos | Notas |
|---|---|---|---|---|---|
| Empleado | Relación |
Registro | pr_1004010569106 |
🔴 Obligatorio | Autorrellenado (Siempre): Campo (Sesión): La Entidad ( ID* ) |
| Movimiento interno | Relación |
General | pr_40040105741 |
🔒 Bloqueado, 👁 Oculto | - |
| Numeración / Serie | Relación |
Registro | pr_400401056954 |
- | - |
| Ubicación Principal | Relación |
Registro | pr_1004010569107 |
- | Autorrellenado (Siempre): Campo (Sesión): Ubicación Principal |
| Destinador | Relación |
General | pr_1004010569115 |
🔒 Bloqueado, 👁 Oculto | - |
| Hora local | Hora |
Registro | pr_1004010569110 |
🔒 Bloqueado, 👁 Oculto | - |
| Cantidad (Unidades) | Decimal |
General | pr_50040106031 |
👁 Oculto, 📊 Cualquier valor numérico | - |
| Cantidad (Medida Base Por Und.) | Decimal |
General | pr_50040106034 |
🔒 Bloqueado, 👁 Oculto, 📊 Cualquier valor numérico | Autorrellenado (Siempre): Campo : Producto / Cantidad (Medida Base) |
| Observaciones | Texto |
General | pr_400401056960 |
- | - |
| Cantidad (Medida Base) | Decimal |
General | pr_50040106033 |
🔒 Bloqueado, 👁 Oculto, 📊 Cualquier valor numérico | - |
| Autor del alta | Relación |
Registro | pr_1004010569108 |
🔴 Obligatorio | Autorrellenado (Siempre): Campo (Sesión): La Entidad ( ID* ) |
| Puesto de trabajo | Relación |
Registro | pr_400401056953 |
- | Autorrellenado (Siempre): Campo (Sesión): Puesto de trabajo |
| Texto Ticket | Texto |
General | pr_400401056959 |
👁 Oculto | - |
| Entidad Relacionada | Relación |
General | pr_400401056952 |
- | - |
| Referencia Ticket | Entero |
General | pr_400401056957 |
👁 Oculto, 📊 Cualquier valor numérico | Es el número secuencial que el sistema emite cada vez que se realiza una transacción. |
| Fecha Alta del registro | Fecha Y Hora |
Registro | pr_1004010569112 |
🔴 Obligatorio | Autorrellenado (Siempre): Fecha y Hora actual |
| Cantidad | Decimal |
General | pr_50040106035 |
🔴 Obligatorio, 📊 Mayores que 0 | - |
| Fecha Dato | Fecha Y Hora |
General | pr_1004010569109 |
🔴 Obligatorio | Autorrellenado (Siempre): Fecha y Hora actual |
| Medida | Relación |
General | pr_50040106032 |
🔴 Obligatorio | Autorrellenado (Siempre): Campo : Producto / Medida (Accesible) |
| Lote | Relación |
General | pr_10040106052 |
🔴 Obligatorio | Autorrellenado (Siempre): Campo : Producto / Lote por defecto producto |
| Tipo de movimiento | Relación |
General | pr_400401056950 |
🔒 Bloqueado, 👁 Oculto | Autorrellenado (Siempre): Campo (Empresa Actual): Configuración Salidas de inventario |
| Medida (Base) | Relación |
General | pr_50040106036 |
👁 Oculto | Autorrellenado (Siempre): Campo : Producto / Medida (Base) |
| Producto | Relación |
General | pr_40040106021 |
🔴 Obligatorio | - |
| Estado | Relación |
General | pr_60692084 |
🔴 Obligatorio, 🔒 Bloqueado | Autorrellenado (Siempre): Referencia dato: Completada |
| Tipo | Relación |
General | pr_106920812 |
- | - |
| Almacén | Relación |
General | pr_60692071002 |
🔒 Bloqueado | Autorrellenado (Siempre): Campo : Lote / Almacén |
Scripts¶
Total de scripts: 4
Código de Scripts¶
Lógica de negocio ejecutada en los formularios automáticamente
Campo_PreAgregarRelacion¶
F.CopiarAgregarRelacion(S.Fields.LotesDeProductosBase.ReferenciaProducto.ID,C.ReferenciaProducto)
Campos utilizados:
- Salidas de inventario > Lote
Campo_ComboAplicarFiltro¶
if C.ReferenciaProducto = ''
F.CampoDesplegableCancelar('Debe seleccionar un producto.')
else
F.CampoDesplegableAplicarFiltro(S.Fields.LotesDeProductosBase.ReferenciaProducto.ID,'=',C.ReferenciaProducto)
F.CampoDesplegableAplicarFiltro(S.Fields.LotesDeProductosBase.ReferenciaUbicacionPrincipal.ID,'=',C.ReferenciaUbicacionPrincipal)
End If
Campos utilizados:
- Salidas de inventario > Lote
Formulario_TickRecalculo¶
num Unidades = C.CantidadUnidades
C.ReferenciaMovimientoInterno.ModificadorStockInventario = V.Unidades * -1
C.ReferenciaMovimientoInterno.ModificadorStockDisponible = V.Unidades * -1
C.ReferenciaMovimientoInterno.ReferenciaLote = C.ReferenciaLote
C.ReferenciaMovimientoInterno.ReferenciaProducto = C.ReferenciaProducto
C.ReferenciaMovimientoInterno.ReferenciaEntidadRelacionada = C.ReferenciaEntidadRelacionada
@ ____ STOCK FÍSICO ____
@ Limite de stock en inventario
txt Producto = S.Fields.SalidasDeInventario.ReferenciaProducto.ID
txt ProductoStockFisico = S.Fields.ProductosBase.StockEnInventario.ID
txt CantidadSalida = S.Fields.SalidasDeInventario.CantidadUnidades.ID
F.CampoLimitacionCantidadIndirecta(v.Producto,v.ProductoStockFisico,0,999999999,v.CantidadSalida,0,'Stock Inventario',1)
@ Limite de stock en Lote
txt Producto2 = S.Fields.SalidasDeInventario.ReferenciaLote.ID
txt ProductoStockFisico2 = S.Fields.LotesDeProductosBase.StockInventario.ID
txt CantidadSalida2 = S.Fields.SalidasDeInventario.CantidadUnidades.ID
F.CampoLimitacionCantidadIndirecta(v.Producto2,v.ProductoStockFisico2,0,999999999,v.CantidadSalida2,0,'Stock Inventario de lote',1)
@ ____ STOCK DISPONIBLE ____
@ Se limita el stock físico, pero no el stock disponible, por eso cantidad mínima es un número negativo, para que aparezca la representación visual en el desplegable, sin afectar al límite
@ Limite de stock en Lote
txt Producto3 = S.Fields.SalidasDeInventario.ReferenciaLote.ID
txt ProductoStockFisico3 = S.Fields.LotesDeProductosBase.StockDisponible.ID
txt CantidadSalida3 = S.Fields.SalidasDeInventario.CantidadUnidades.ID
F.CampoLimitacionCantidadIndirecta(v.Producto3,v.ProductoStockFisico3,0,0,v.CantidadSalida3,0,'Stock Disponible de lote',2)
@ Limite de stock en inventario
txt Producto4 = S.Fields.SalidasDeInventario.ReferenciaProducto.ID
txt ProductoStockFisico4 = S.Fields.ProductosBase.StockDisponible.ID
txt CantidadSalida4 = S.Fields.SalidasDeInventario.CantidadUnidades.ID
F.CampoLimitacionCantidadIndirecta(v.Producto4,v.ProductoStockFisico4,0,0,v.CantidadSalida,0,'Stock Disponible',2)
Formulario_PreACeptar¶
if C.ReferenciaLote.ReferenciaProducto <> C.ReferenciaProducto
F.MsgBox('El producto de la salida y el del lote debe ser el mismo.',1)
F.CancelarEvento
End If
if C.ReferenciaLote.ReferenciaUbicacionPrincipal <> C.ReferenciaUbicacionPrincipal
F.MsgBox('El lote no puede pertenecer a una ubicación distinta a la de la Salida.',1)
F.CancelarEvento
End If