Versión 2.0.0: validar contra Consignación (suma de OpenInvQty) en lugar del stock

DP_Stock (v2) suma PDN1.OpenInvQty de las Entradas de Consignación abiertas del almacén,
lo mismo que usa el FIFO. La columna se muestra como Consignación.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
georgeandClaude Sonnet 5.5 committed 2026-10-19 15:40:19 -05:00
1 parent 3f6395bfb0
commit 2182147adb
11 files changed
+32 -21

No files matched your search

@@ -107,7 +107,7 @@ export class PlanificacionesService {
for (const { fila, stock } of consultas) {
if (!stock) {
errores.push(`${fila.itemCode}: el artículo no existe o no tiene stock registrado en el almacén ${whsCode}.`);
errores.push(`${fila.itemCode}: el artículo no existe.`);
continue;
}
const articulo: ArticuloADevolver = {
@@ -15,17 +15,28 @@ export interface ConsultaGuardada {
hana: string;
}
/**
* "Stock" = lo que realmente se puede devolver: la suma de PDN1.OpenInvQty de las líneas abiertas de
* Entradas de mercancías de Consignación (U_DOT_TipoRecepcion = 'C') del almacén, las mismas que usa el
* FIFO. No es OITW.OnHand: el stock físico incluye mercancía que no es devolvible por esta vía.
* Devuelve fila (con 0) si el artículo existe pero no tiene consignación; ninguna si no existe.
* La columna se sigue llamando OnHand porque así se guarda en el UDO (U_OnHand).
*/
export const CONSULTA_STOCK: ConsultaGuardada = {
codigo: 'DP_Stock',
version: 1,
version: 2,
mssql:
'SELECT T0.[ItemCode], T0.[ItemName], T1.[OnHand] ' +
'FROM OITM T0 INNER JOIN OITW T1 ON T1.[ItemCode] = T0.[ItemCode] ' +
'WHERE T1.[WhsCode] = :whs AND T0.[ItemCode] = :item',
'SELECT T0.[ItemCode], T0.[ItemName], ' +
'COALESCE((SELECT SUM(T2.[OpenInvQty]) FROM OPDN T1 INNER JOIN PDN1 T2 ON T2.[DocEntry] = T1.[DocEntry] ' +
"WHERE T1.[U_DOT_TipoRecepcion] = 'C' AND T2.[LineStatus] = 'O' " +
'AND T2.[ItemCode] = T0.[ItemCode] AND T2.[WhsCode] = :whs), 0) AS [OnHand] ' +
'FROM OITM T0 WHERE T0.[ItemCode] = :item',
hana:
'SELECT T0."ItemCode", T0."ItemName", T1."OnHand" ' +
'FROM OITM T0 INNER JOIN OITW T1 ON T1."ItemCode" = T0."ItemCode" ' +
'WHERE T1."WhsCode" = :whs AND T0."ItemCode" = :item',
'SELECT T0."ItemCode", T0."ItemName", ' +
'COALESCE((SELECT SUM(T2."OpenInvQty") FROM OPDN T1 INNER JOIN PDN1 T2 ON T2."DocEntry" = T1."DocEntry" ' +
"WHERE T1.\"U_DOT_TipoRecepcion\" = 'C' AND T2.\"LineStatus\" = 'O' " +
'AND T2."ItemCode" = T0."ItemCode" AND T2."WhsCode" = :whs), 0) AS "OnHand" ' +
'FROM OITM T0 WHERE T0."ItemCode" = :item',
};
/**