Exemplos em HANA
Importante ressaltar que o ID da chamada dos critérios deve corresponder com o cadastro na tela do SAP e que o script deve ser inserido dentro do parâmetro BEGIN, que por sua vez é chamado dentro da função criada, conforme exemplificado no tópico Critérios automáticos.
Segue abaixo exemplos de critérios automáticos para bancos HANA:
Atraso na entrega
(Quantidade de peças em atraso (Data de lançamento do pedido - Data programada para chegada))/ Quantidade total de peças recebidas no mês
IF :id = 1 THEN
SELECT
CASE
WHEN COUNT("dias_atraso") > 0 THEN 'Sim'
ELSE 'Não'
END
INTO :valorEncontrado
FROM (
SELECT
DAYS_BETWEEN("TaxDate", "ShipDate") AS "dias_atraso"
FROM
ORDR T0
INNER JOIN RDR1 T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN PCH1 T2 ON T0."DocEntry" = T2."BaseEntry"
INNER JOIN OPCH T3 ON T3."DocEntry" = T2."DocEntry"
WHERE
T2."BaseType" = 22
AND DAYS_BETWEEN(T3."TaxDate", T1."ShipDate") >= 0
AND EXTRACT(MONTH FROM CURRENT_DATE) = EXTRACT(MONTH FROM T3."CreateDate")
AND T3."CardCode" = :fornecedor
) AS T0;
END IF;
Material avariado maior que 71% do total
(Quantidade de peças avariadas identificadas no momento da inspeção / Quantidade total de peças recebidas no mês)
IF :ID = 2 THEN
SELECT
CASE
WHEN COUNT(*) > 0 THEN 'Sim'
ELSE 'Não'
END
INTO valorEncontrado
FROM (
SELECT
T0."U_UPItmQty",
T2."qtd_recebida",
SUM(T0."U_UPItmQty") * 100 / IFNULL(T2."qtd_recebida", 1) AS "qtd_reprovada",
T0."U_UPCrdCod"
FROM
"@UPQ_OFCA" T0
INNER JOIN "@UPQ_FCA1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN (
SELECT
SUM(T0."Quantity") AS "qtd_recebida",
T0."ItemCode",
T1."CardCode"
FROM
PCH1 T0
INNER JOIN OPCH T1 ON T0.DOCENTRY = T1.DOCENTRY
WHERE
T1.DOCDATE = MONTH(NOW())
GROUP BY
T0."ItemCode", T1."CardCode"
) AS T2 ON T2."CardCode" = T0."U_UPCrdCod"
WHERE
T1."U_UPAprovd" = 'N'
AND T1."U_UPNCnfrm" = 2
AND T0."CreateDate" = MONTH(NOW())
AND T0."U_UPCrdCod" = :fornecedor
GROUP BY
T2."qtd_recebida", T0."U_UPCrdCod", T0."U_UPItmQty"
) AS T0;
END IF;
Material incorreto maior que 71% do total
Quantidade de peças incorretas identificadas no momento da inspeção / Quantidade total de peças recebidas no mês
IF :id = 3 THEN
SELECT
CASE
WHEN COUNT(*) > 0 THEN 'Sim'
ELSE 'Não'
END
INTO valorEncontrado
FROM (
SELECT
SUM(T0."U_UPItmQty") * 100 / IFNULL(T2."qtd_recebida", 1) AS "qtd_reprovada",
T0."U_UPCrdCod"
FROM
"@UPQ_OFCA" T0
INNER JOIN "@UPQ_FCA1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN (
SELECT
SUM(T0."Quantity") AS "qtd_recebida",
T0."ItemCode",
T1."CardCode"
FROM
PCH1 T0
INNER JOIN OPCH T1 ON T0.DOCENTRY = T1.DOCENTRY
WHERE
T1.DOCDATE = MONTH(NOW())
GROUP BY
T0."ItemCode", T1."CardCode"
) AS T2 ON T2."CardCode" = T0."U_UPCrdCod"
WHERE
T1."U_UPAprovd" = 'N'
AND T1."U_UPNCnfrm" = 3
AND T0."U_UPCrdCod" = :fornecedor
GROUP BY
T2."qtd_recebida", T0."U_UPCrdCod"
) AS T0;
END IF;
Quantidade não conforme maior que 71% do total
Quantidade de peças em quantidade não conforme identificadas no momento da inspeção / Quantidade total de peças recebidas no mês
IF :id = 4 THEN
SELECT
CASE
WHEN COUNT(*) > 0 THEN 'Sim'
ELSE 'Não'
END
INTO valorEncontrado
FROM (
SELECT
SUM(T0."U_UPItmQty") * 100 / IFNULL(T2.qtd_recebida, 1) AS "qtd_reprovada",
T0.U_UPCrdCod
FROM
"@UPQ_OFCA" T0
INNER JOIN "@UPQ_FCA1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN (
SELECT
SUM(T0.Quantity) AS "qtd_recebida",
T0.ItemCode,
T1.CardCode
FROM
PCH1 T0
INNER JOIN OPCH T1 ON T0.DOCENTRY = T1.DOCENTRY
WHERE
T1.DOCDATE = MONTH(NOW())
GROUP BY
T0.ItemCode, T1.CardCode
) AS T2 ON T2.CardCode = T0.U_UPCrdCod
WHERE
T1."U_UPAprovd" = 'N'
AND T1."U_UPNCnfrm" = 4
AND T0.U_UPCrdCod = :fornecedor
GROUP BY
T2.qtd_recebida, T0.U_UPCrdCod
) AS T0;
END IF;
Dimensional fora do especificado entre 1% e 10% do total
Quantidade de peças com dimensional fora do especificado identificadas no momento da inspeção / Quantidade total de peças recebidas no mês
IF :id = 5 THEN
SELECT
CASE
WHEN COUNT(*) > 0 THEN 'Sim'
ELSE 'Não'
END INTO valorEncontrado
FROM (
SELECT
SUM(T0."U_UPItmQty") * 100 / IFNULL(T2.qtd_recebida, 1) AS "qtd_reprovada",
T0.U_UPCrdCod
FROM
"@UPQ_OFCA" T0
INNER JOIN "@UPQ_FCA1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN (
SELECT
SUM(T0.Quantity) AS "qtd_recebida", T0.ItemCode, T1.CardCode
FROM
PCH1 T0
INNER JOIN OPCH T1 ON T0.DOCENTRY = T1.DOCENTRY
WHERE
T1.DOCDATE = MONTH(NOW())
GROUP BY
T0.ItemCode, T1.CardCode
) AS T2 ON T2.CardCode = T0.U_UPCrdCod
WHERE
T1."U_UPAprovd" = 'N'
AND T1."U_UPNCnfrm" = 1
AND T0.U_UPCrdCod = :fornecedor
GROUP BY
T2.qtd_recebida, T0.U_UPCrdCod
) AS T0;
END IF;
Tratamento superficial fora do especificado entre 11% e 25% do total
Quantidade de peças com tratamento superficial fora do especificado identificadas no momento da inspeção / Quantidade total de peças recebidas no mês
IF :id = 6 THEN
SELECT
CASE
WHEN COUNT(*) > 0 THEN 'Sim'
ELSE 'Não'
END INTO valorEncontrado
FROM (
SELECT
SUM(T0."U_UPItmQty") * 100 / IFNULL(T2.qtd_recebida, 1) AS "qtd_reprovada",
T0.U_UPCrdCod
FROM
"@UPQ_OFCA" T0
INNER JOIN "@UPQ_FCA1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN (
SELECT
SUM(T0.Quantity) AS "qtd_recebida", T0.ItemCode, T1.CardCode
FROM
PCH1 T0
INNER JOIN OPCH T1 ON T0.DOCENTRY = T1.DOCENTRY
WHERE
T1.DOCDATE = MONTH(NOW())
GROUP BY
T0.ItemCode, T1.CardCode
) AS T2 ON T2.CardCode = T0.U_UPCrdCod
WHERE
T1."U_UPAprovd" = 'N'
AND T1."U_UPNCnfrm" = 5
AND T0.U_UPCrdCod = :fornecedor
GROUP BY
T2.qtd_recebida, T0.U_UPCrdCod
) AS T0;
END IF;