Cantidades: PICKING filtra lineas sin diferencia; transferencias juntan lotes de todas las lineas del articulo. Versión 2.1.6.0

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
GeorgeandClaude Sonnet 5.5 committed 2026-10-14 17:27:29 -05:00
1 parent e5ea57b673
commit 4ad0754ba0
5 files changed
+33 -13

No files matched your search

+7
View File
@@ -53,6 +53,13 @@ transferencias siempre, sin depender de `Notificacion`. Detalle y tabla en
consumidor no cambia y si el log falla no rompe el flujo. No cubre
`PostActionAsync` (cuerpo `{}`) ni `PostReOpen`/`PostClose`. Los tamaños de las
columnas del log no se verificaron.
- **v2.1.6.0 — cantidades**: (1) la NC de PICKING (estado 13) solo incluye líneas
con `cantidad facturada − CantidadPedida > 0`, igual que DESPACHO (antes una
línea completa generaba una línea de NC con cantidad 0); (2) la transferencia
automática de stock (Picking y Recibo) junta los lotes de **todas** las líneas
del mismo artículo para el par origen/destino (antes solo tomaba los de la
primera línea y la suma no cuadraba con la cantidad). El almacén de la línea de
la NC sigue saliendo de la factura, no del `codigoSubAlmacen` del request.
- Sin probar contra SAP: confirmar con la factura 292410 que SAP devuelve
`BaseType`/`BaseEntry` en las líneas y `BatchNumbers` en las de la Entrega.
@@ -3,9 +3,9 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AssemblyName>ITCA_API_SAP_WMS</AssemblyName>
<Version>2.1.5</Version>
<AssemblyVersion>2.1.5.0</AssemblyVersion>
<FileVersion>2.1.5.0</FileVersion>
<Version>2.1.6</Version>
<AssemblyVersion>2.1.6.0</AssemblyVersion>
<FileVersion>2.1.6.0</FileVersion>
<UserSecretsId>24763424-3300-4c85-87e3-503f8fdebd14</UserSecretsId>
<!-- Antes solo estaba condicionado a Debug|AnyCPU - un "dotnet publish -c Release"
(lo normal para IIS) se quedaba sin este archivo, y Startup.cs revienta con
+10 -7
View File
@@ -318,12 +318,13 @@ namespace Net.Data.WMS.Picking
ListaUnicaArticulo.ForEach(x =>
{
var ListLote = new List<BE_StockTransferLineBatchNumber>();
ListaDetalle_PorAlmacen.Where(t => t.ItemCode == x).FirstOrDefault().BatchNumbers.ForEach(r =>
// Lotes de todas las lineas del articulo (si el mismo lote esta en varias lineas se suma)
ListaDetalle_PorAlmacen.Where(t => t.ItemCode == x).SelectMany(t => t.BatchNumbers).GroupBy(r => r.BatchNumber).ToList().ForEach(g =>
{
ListLote.Add(new BE_StockTransferLineBatchNumber()
{
BatchNumber = r.BatchNumber,
Quantity = r.Quantity
BatchNumber = g.Key,
Quantity = g.Sum(r => r.Quantity)
});
});
Transfer.StockTransferLines.Add(new BE_StockTransferLine()
@@ -549,7 +550,8 @@ namespace Net.Data.WMS.Picking
entidad.Detalle.ForEach(x =>
{
var Item = _invoices.DocumentLines.ToList().FirstOrDefault(t => t.LineNum == x.Item);
if (Item != null)
// Solo lineas con diferencia a devolver (igual que DESPACHO): una linea completa daria cantidad 0
if (Item != null && Item.Quantity - x.CantidadPedida > 0)
{
creditNotesNotes.DocumentLines.Add(new BE_CreditNotesLine()
{
@@ -613,12 +615,13 @@ namespace Net.Data.WMS.Picking
ListaUnicaArticulo.ForEach(x =>
{
var ListLote = new List<BE_StockTransferLineBatchNumber>();
ListaDetalle_PorAlmacen.Where(t => t.ItemCode == x).FirstOrDefault().BatchNumbers.ForEach(r =>
// Lotes de todas las lineas del articulo (si el mismo lote esta en varias lineas se suma)
ListaDetalle_PorAlmacen.Where(t => t.ItemCode == x).SelectMany(t => t.BatchNumbers).GroupBy(r => r.BatchNumber).ToList().ForEach(g =>
{
ListLote.Add(new BE_StockTransferLineBatchNumber()
{
BatchNumber = r.BatchNumber,
Quantity = r.Quantity
BatchNumber = g.Key,
Quantity = g.Sum(r => r.Quantity)
});
});
Transfer.StockTransferLines.Add(new BE_StockTransferLine()
+4 -3
View File
@@ -556,12 +556,13 @@ namespace Net.Data.WMS.Recibo
ListaUnicaArticulo.ForEach(x =>
{
var ListLote = new List<BE_StockTransferLineBatchNumber>();
ListaDetalle_PorAlmacen.Where(t => t.ItemCode == x).FirstOrDefault().BatchNumbers.ForEach(r =>
// Lotes de todas las lineas del articulo (si el mismo lote esta en varias lineas se suma)
ListaDetalle_PorAlmacen.Where(t => t.ItemCode == x).SelectMany(t => t.BatchNumbers).GroupBy(r => r.BatchNumber).ToList().ForEach(g =>
{
ListLote.Add(new BE_StockTransferLineBatchNumber()
{
BatchNumber = r.BatchNumber,
Quantity = r.Quantity
BatchNumber = g.Key,
Quantity = g.Sum(r => r.Quantity)
});
});
Transfer.StockTransferLines.Add(new BE_StockTransferLine()
+9
View File
@@ -53,6 +53,15 @@ enviar lotes incompletos a SAP. Si no hay lotes de origen (artículo sin
control por lote) la línea se envía sin lotes. PICKING (estado 13) no cambia:
genera un lote nuevo por fecha y hora.
## Cantidades de la NC y de las transferencias (versión 2.1.6.0)
- **Cantidad de la línea de NC** (DESPACHO y PICKING estado 13): `cantidad
facturada − CantidadPedida`; solo entran las líneas con resultado mayor a 0.
- **Transferencia automática** (cuando `U_ITC_ALMDES` difiere del almacén de la
línea): una línea por artículo, con la cantidad sumada de las líneas de la NC
de ese par origen/destino y los lotes de todas esas líneas (el mismo lote en
varias líneas se suma).
## Resumen del contrato
| Método | Ruta | Cambia hoy | Qué hace |