on 09-08-2016 12:26 AM
Buenas tardes Comunidad.
Ojala puedan apoyarme tengo una codigo en el transaction notification el cual deve de bloquear linea por linea de un pedido de cliente que dependiendo del dia no permita cierto numero de cajas ejemplo: lunes solo puede vender hasta 1000 cajas de tomate no interesa si pasa las 1000 agregando otra linea solo que si la linea tuviese 1001 no lo dejase crear.
Les adjunto el codigo:
--PROCEDIMIENTO DE PRUEBA PARA QUE EN PEDIDOS SEA NECESARIO LLENAR CAMPO COMENTARIOS
IF @object_type = '17' AND @transaction_type IN ('A') --PEDIDO AL CREAR
BEGIN
IF (SELECT datepart(dw,TaxDate) from ORDR WHERE DOCENTRY = @list_of_cols_val_tab_del) = 1 and --fecha domingo
(select Quantity FROM RDR1 WHERE DOCENTRY = @list_of_cols_val_tab_del and ItemCode like '3%' ) > 1920 SET @error=1
--IF (SELECT datepart(dw,TaxDate) from ORDR WHERE DOCENTRY = @list_of_cols_val_tab_del) = 2 and -- fecha lunes
--(select Quantity FROM RDR1 WHERE DOCENTRY = @list_of_cols_val_tab_del and ItemCode like '3%' ) > 1900 SET @error=2
IF (SELECT datepart(dw,TaxDate) from ORDR WHERE DOCENTRY = @list_of_cols_val_tab_del) = 3 and --fecha martes
(select Quantity FROM RDR1 WHERE DOCENTRY = @list_of_cols_val_tab_del and ItemCode like '3%') > 1680 SET @error=3
IF (SELECT datepart(dw,TaxDate) from ORDR WHERE DOCENTRY = @list_of_cols_val_tab_del) = 4 and --fecha miercoles
(select Quantity FROM RDR1 WHERE DOCENTRY = @list_of_cols_val_tab_del and ItemCode like '3%') > 1680 SET @error=4
IF (SELECT datepart(dw,TaxDate) from ORDR WHERE DOCENTRY = @list_of_cols_val_tab_del) = 5 and --fecha jueves
(select Quantity FROM RDR1 WHERE DOCENTRY = @list_of_cols_val_tab_del and ItemCode like '3%') > 1680 SET @error=5
--IF (SELECT datepart(dw,TaxDate) from ORDR WHERE DOCENTRY = @list_of_cols_val_tab_del) = 6 and -- fecha viernes
--(select Quantity FROM RDR1 WHERE DOCENTRY = @list_of_cols_val_tab_del and ItemCode like '3%') > 741 SET @error=6
IF (SELECT datepart(dw,TaxDate) from ORDR WHERE DOCENTRY = @list_of_cols_val_tab_del) = 7 and -- fecha sabado
(select Quantity FROM RDR1 WHERE DOCENTRY = @list_of_cols_val_tab_del and ItemCode like '3%') > 1920 SET @error=7
END
SET @error_message =
CASE @ERROR
WHEN 1 THEN 'no debe ser mayor a 1920 cajas'
WHEN 2 THEN 'no debe ser mayor a 1900 cajas'
WHEN 3 THEN 'no debe ser mayor a 1680 cajas'
WHEN 4 THEN 'no debe ser mayor a 1680 cajas'
WHEN 5 THEN 'no debe ser mayor a 1680 cajas'
WHEN 6 THEN 'no debe ser mayor a 741 cajas'
WHEN 7 THEN 'no debe ser mayor a 1920 cajas'
END */
----------
El detalle esta en que si agrego una segunda linea esta no la evalua me aparece el error:
Se ha producido un error interno (512) Mensaje 113-183
Ojala puedan ayudarme a saber el error.
Omar, intenta modificar los IF con los que evalúas el día y la cantidad del artículo de manera que se integren en un select. Yo intentaría con esto:
if exists(select 1 from ORDR T0 inner join RDR1 T1 on T0.DocEntry = T1.DocEntry and T0.DOCENTRY = @list_of_cols_val_tab_del
and datepart(dw,T0.TaxDate) = 1 and T1.ItemCode like '3%' and T1.Quantity > 1920)
SET @error=1
Aquí lo que evalúa el IF es si existe algún registro con las condiciones para el día Domingo. Si existe al menos una fila, es donde se setea la variable @error igual a 1.
Si te sirve, replícalo hacia los días restantes con sus cantidades correspondientes.
Saludos y suerte,
JC.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
No puedes usar subquerys sin usar un Select Top 1 en el transaction, aplica Top 1 así te validará línea por línea
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
95 | |
11 | |
11 | |
6 | |
6 | |
4 | |
4 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.