El asociado ingresa uno de cada uno en el POS y no le aplica el descuento y tiene que llevar X de mismo sku para aplicar, esto sucede porque negocio configuro de esta forma las promociones.
Procedemos a identificar el campo typeid y esta es la regla para cada una
DECLARE @SKU nvarchar(6) = 154951
-- Promocion Vigente en ItemDetail - PMA
Select 'Vigentes' 'ItemDetail',ph.PromoID,ph.Description,ph.TypeID,pt.[Description], ph.StartDate,ph.EndDate,PH.StatusID,CASE PH.StatusID WHEN 0 THEN 'Vacia' WHEN 1 THEN 'Con Planes' WHEN 2 THEN 'Bines Asignados' WHEN 3 THEN 'Tiendas Activadas' WHEN 4 THEN 'Articulos asignados' WHEN 5 THEN 'Tiendas y Articulos asignados' WHEN 6 THEN 'Finalizada' WHEN 7 THEN 'Peticion por autorizacion' WHEN 8 THEN 'Autorizada' WHEN 9 THEN 'Modificada despues de autorizar' WHEN 10 THEN 'Reautorizada' WHEN 11 THEN 'Cancelada' ELSE 'UNKNOWN - No existe tipo de Estatus' END as 'ESTATUS',CASE PH.CustomerTypeID WHEN 0 THEN 'No aplica tienda' WHEN 1 THEN 'PISO' WHEN 2 THEN 'PRO' WHEN 3 THEN 'PISO Y PRO' ELSE '? - No existe tipo - ' + CAST(PH.CustomerTypeID AS CHAR) END AS 'TIPO CTE' ,ph.Created,ph.Modified,id.SKU,Case When pdp.promoid is null then d.[description] else d2.[description] end 'Tipo',Case When id.DiscountTypeID = 2 then id.quantity else pd.TriggerQuantity end 'Compra',Case When id.DiscountTypeID = 2 then '-' else pd.TargetQuantity end 'Regalo',Case When pdp.promoid is null then id.Discount else pdp.Amount end 'Monto',Case When pdp.promoid is null then id.IsActive else pdp.IsActive end 'ID/PDP Active',Ph.IsActive 'PH Active',pd.triggergroupid,Pd.IsActive 'PD Active',IGH.IsActive 'IGH Active' from ItemDetail id (NoLock) LEFT JOIN ItemGroupHeader igh (NoLock) on id.groupid = igh.GroupID LEFT JOIN PromotionHeader ph (Nolock) on ph.promoid = igh.promoid LEFT JOIN PromotionDetail pd (Nolock) on pd.promoid = igh.promoid and pd.TriggerGroupID = igh.GroupID LEFT JOIN PromotionDetailPrice pdp (Nolock) ON pdp.promoid = pd.promoid and pd.sequence = pdp.sequence LEFT JOIN DiscountType d (NoLock) on d.DiscountTypeID = id.DiscountTypeID LEFT JOIN DiscountType d2 (NoLock) on d2.DiscountTypeID = pdp.DiscountTypeID LEFT JOIN PromoType pt (Nolock) on ph.typeid = pt.PromoType where sku = @sku and CONVERT(DATE, GETDATE()) BETWEEN convert(date,ph.startdate) AND convert(date,ph.enddate )
-- Promocion COMBO Vigente en ItemDetail
Select 'COMBOS Activos' 'Estatus',id.sku,id.GroupID,kh.kitnum, kh.KitPrice,kd.SKU,kd.ComponentPrice,ph.PromoID,ph.[Description],ph.StartDate,ph.EndDate,ph.StatusID,ph.TypeID,ph.IsActive,ph.Created,ph.Modified,ph.Deleted from ItemDetail id (NoLock)LEFT JOIN ItemKitHdr kh (NoLock) on kh.kitnum = id.sku LEFT JOIN ItemKitdtl kd (NoLock) on kd.kitnum = id.sku LEFT JOIN PromotionDetail pd (NoLock) on pd.triggergroupid = id.groupid LEFT JOIN PromotionHeader ph (NoLock) on pd.promoid = ph.Promoid Where convert(date,getdate()) between convert(date,ph.startdate) AND convert(date,ph.enddate ) and id.IsActive = 1 and pd.isactive = 1 and ph.isactive = 1 and id.sku = @sku and ph.typeid = 4
-- Promocion COMBO VENCIDO en ItemDetail
-- Select 'COMBOS Vencidos' 'Estatus',id.sku,id.GroupID,kh.kitnum, kh.KitPrice,kd.SKU,kd.ComponentPrice,ph.PromoID,ph.[Description],ph.StartDate,ph.EndDate,ph.StatusID,ph.TypeID,ph.IsActive,ph.Created,ph.Modified,ph.Deleted from ItemDetail id (NoLock)LEFT JOIN ItemKitHdr kh (NoLock) on kh.kitnum = id.sku LEFT JOIN ItemKitdtl kd (NoLock) on kd.kitnum = id.sku LEFT JOIN PromotionDetail pd (NoLock) on pd.triggergroupid = id.groupid LEFT JOIN PromotionHeader ph (NoLock) on pd.promoid = ph.Promoid Where NOT convert(date,getdate()) between ph.StartDate and ph.EndDate and id.IsActive = 1 and pd.isactive = 1 and ph.isactive = 1 and id.sku = @sku and ph.typeid = 4
--SKU esta en una promocion de Precio (TAB, ROP, Clearance). NOTA: Estas bajan del AdManager.
SELECT 'APTHDR/DET',ah.AdNumber, ah.AdType, ah.PromoID, ah.BeginDate, ah.EndingDate, ad.SKU, ad.ItemRetail,ad.itemstatus, ip.PromoPrc, ip.PromoStart, ip.PromoEnd, ip.PromoType FROM aptdet ad INNER JOIN apthdr ah ON ah.AdNumber = ad.AdNumber INNER JOIN ItemPLU ip ON ip.SKU = ad.SKU WHERE ad.SKU = @SKU AND CONVERT(DATE, GETDATE()) BETWEEN ah.BeginDate AND ah.EndingDate
--SKU esta en una promoción de POS. NOTA: Estas bajan del Sistema de Promociones.--nota fallo con algun sku
SELECT 'IN' 'Vigentes',substring(pf.recordlist,CharIndex(@sku,pf.recordlist),19)'Promo',pf.CreateDateTime,ph.PromoID,ph.[Description], ph.PromoType,CASE ph.PromoType WHEN 1 THEN 'Meses Sin Intereses' WHEN 2 THEN 'NxM' WHEN 3 THEN 'Producto Gratis' WHEN 4 THEN 'Paquetes' WHEN 5 THEN 'Porcentaje de Descuento' WHEN 6 THEN 'Monto de Descuento' WHEN 7THEN 'Mercancia al Mismo Precio' WHEN 8 THEN 'Regalo Gratis' WHEN 9 THEN 'Descuento por Tender' WHEN 10 THEN 'Porcentaje de Descuento' WHEN 12 THEN 'Ahorrapack' WHEN 14 THEN 'NLP' WHEN 15 THEN 'Inmejorable' ELSE 'No Identificada' END AS PromoTypeDesc, ph.StartDate, ph.EndDate, pf.TableName, pf.RecordList FROM PromoFiles pf INNER JOIN PromoHdr ph ON ph.PromoID = pf.PromoID WHERE pf.RecordList LIKE CONCAT('%', CONVERT(NVARCHAR(20),@SKU),'%') AND CONVERT(DATE, GETDATE()) BETWEEN ph.StartDate AND ph.EndDate
Select 'PromoPack',* from PromoPack (NoLock) where Item = @sku and Promoid in (Select pf.Promoid FROM PromoFiles pf INNER JOIN PromoHdr ph ON ph.PromoID = pf.PromoID WHERE pf.RecordList LIKE CONCAT('%', CONVERT(NVARCHAR(20),@SKU),'%') AND CONVERT(DATE, GETDATE()) BETWEEN ph.StartDate AND ph.EndDate)
--Promociones no Activas en año en curso
SELECT 'OUT' 'Vigencia',substring(pf.recordlist,CharIndex(@sku,pf.recordlist),19)'Promo',pf.CreateDateTime,ph.PromoID,ph.[Description], ph.PromoType,CASE ph.PromoType WHEN 1 THEN 'Meses Sin Intereses' WHEN 2 THEN 'NxM' WHEN 3 THEN 'Producto Gratis' WHEN 4 THEN 'Paquetes' WHEN 5 THEN 'Porcentaje de Descuento' WHEN 6 THEN 'Monto de Descuento' WHEN 7THEN 'Mercancia al Mismo Precio' WHEN 8 THEN 'Regalo Gratis' WHEN 9 THEN 'Descuento por Tender' WHEN 10 THEN 'Porcentaje de Descuento' WHEN 12 THEN 'Ahorrapack' WHEN 14 THEN 'NLP' WHEN 15 THEN 'Inmejorable' ELSE 'No Identificada' END AS PromoTypeDesc, ph.StartDate, ph.EndDate, pf.TableName, pf.RecordList FROM PromoFiles pf INNER JOIN PromoHdr ph ON ph.PromoID = pf.PromoID WHERE pf.RecordList LIKE CONCAT('%', CONVERT(NVARCHAR(20),@SKU),'%') AND CONVERT(DATE, GETDATE()) NOT BETWEEN ph.StartDate AND ph.EndDate and year(pf.createdatetime) >= year(getdate())
--SKU Precios Aplicados 'ITEMPLU'
select 'Itemplu', Description, UOM, Warranty, TaxCode, proprice, pronivel1, pronivel2, Warranty, sku,retailprice, Case When Taxcode = 1 then retailprice * 1.16 when Taxcode = 2 then retailprice * 1.08 else retailprice end as retailiva, promoprc , Case When Taxcode = 1 then promoprc * 1.16 when Taxcode = 2 then promoprc * 1.08 else promoprc end as promoiva,PromoStart,PromoEnd,promonumb,RestrictCode,family1,family2,family3,family4,family5,ExceptType12,* from itemplu (NoLock) where sku in (@SKU)
If ((Select [type] From Itemplu (NoLock) where sku = @sku)='G')
Begin
select 'Itemplu - Hijos',sku,retailprice, Case When Taxcode = 1 then retailprice * 1.16 when Taxcode = 2 then retailprice * 1.08 else retailprice end as retailiva ,promoprc, Case When Taxcode = 1 then promoprc * 1.16 when Taxcode = 2 then promoprc * 1.08 else promoprc end as promoiva,PromoStart,PromoEnd,promonumb,RestrictCode,family1,family2,family3,family4,family5,ExceptType12,* from itemplu (NoLock) where sku in (SELECT sku FROM ItemKitDtl WHERE KitNum = @sku)
End
--SKU Cantidades 'ITEMREPLEN'
Select CurQOH,QtyReserved,OnOrderQty,LabelType,* from Itemreplen where sku = @sku
PROMOS NXM
«TypeID 19» no se pueden mezclar
«TypeID 2» si pueden mezclar
Dependiendo el caso podemos cancelar el incidente.
Promocion pasa pero no en todos los articulos
Si los SKU son TypeID 2 y asociados cometnan que aún no pasan probablemente sea desconocimiento de como funcionan la promocion NxM ya que sin improtar los SKU, por definición de negocio, siempre se aplicara proprocinalmente la promoción conel SKU de menor precio.
Es decir, si llevamos dos promociones de NxM,
en este caso 6 piezas (dos promociones de 2×3), nos tendrian que hacer descuento de 2 piezas, por lo que se estaria descontando dos piezas de la lampara de $299 como podemos apreciar abajo

NO es falla ya que asi esta configurado este tipo de promociones. Ticket se cancela.
Si asociado no entiende podemos sugerirle que borre el articulo más barato e intente nuevamente.
–Si asociado insiste que cliente desean que se haga el descuento por SKU de mayor precio será necesario que hagan la compra por separado, de no ser posible que realicen solución operativa.