15.2 Caso de Uso: Cotação para Pedido de venda
No manual de como "Cadastrar e visualizar" seu kanban, vimos que é possível criarmos diversos cenários flexiveis de acordo com o fluxo e alvo da empresa.
5. Estrutura básica
O cenário que disponibilizaremos abaixo, consiste em um Kanban de Cotações (OQUT), que trata vínculos com o Pedidos de Venda (ORDR). O objetivo foi:
-
Mostrar as últimas cotações de cada cliente.
-
Calcular valores de conversão em pedidos.
-
Exibir saldos, progresso e status da conversão.
-
Usar cores e prioridades dinâmicas para destacar casos críticos.
-
Mostrar, em Campo 1, se a cotação já virou pedido (com número do PV) ou não.
Query inicial
WITH Cot AS (
SELECT
OQ."DocEntry",
OQ."DocNum",
OQ."CardCode",
OQ."CardName",
OQ."SlpCode",
OQ."DocDate",
OQ."DocDueDate", -- vencimento
OQ."DocTotal",
ROW_NUMBER() OVER (
PARTITION BY OQ."CardCode"
ORDER BY OQ."DocDate" DESC, OQ."DocEntry" DESC
) AS rn
FROM OQUT OQ
WHERE OQ."DocDate" BETWEEN '{[Data1CRMOne][Data inicial]}' AND '{[Data2CRMOne][Data final]}'
),
OrdFromCot AS (
SELECT
D."BaseEntry" AS "DocEntryCot",
SUM(O."DocTotal") AS "OrderTotal",
STRING_AGG(CAST(O."DocNum" AS NVARCHAR), ', ') AS "OrderNums"
FROM (
SELECT DISTINCT R1."BaseEntry", R1."DocEntry"
FROM RDR1 R1
WHERE R1."BaseType" = 23
) D
JOIN ORDR O ON O."DocEntry" = D."DocEntry"
GROUP BY D."BaseEntry"
)
SELECT
C."CardCode" || ' - ' || C."CardName" AS "Agrupador",
'#E6F6FE' AS "CorAgrupador",
C."DocEntry" AS "IdDoc",
'23' AS "TipoObjeto",
'Cotação ' || C."DocNum" AS "Titulo",
C."DocDate" AS "Data1",
CURRENT_DATE AS "Data2",
C."DocDueDate" AS "Data3",
'Origem: Cotação → Pedido' AS "Observacao",
S."SlpName" AS "Responsavel",
CASE
WHEN C."DocTotal" > 20000 THEN 'Prioritário'
WHEN C."DocTotal" > 10000 THEN 'Elevada'
WHEN C."DocTotal" > 5000 THEN 'Normal'
ELSE 'Baixa'
END AS "Prioridade",
CASE
WHEN C."DocTotal" > 20000 THEN '#FF0000'
WHEN C."DocTotal" > 10000 THEN '#FFA500'
WHEN C."DocTotal" > 5000 THEN '#00CED1'
ELSE '#808080'
END AS "CorPrioridade",
'Cotação' AS "Classificacao",
'#0ea5e9' AS "CorClassificacao",
CAST(C."DocTotal" AS DECIMAL(19,2)) AS "Valor1",
CAST(COALESCE(O."OrderTotal",0) AS DECIMAL(19,2)) AS "Valor2",
CAST(COALESCE(O."OrderTotal",0) - C."DocTotal" AS DECIMAL(19,2)) AS "Valor3",
CASE WHEN COALESCE(O."OrderTotal",0) = 0 THEN 50 ELSE 100 END AS "Progresso",
CASE
WHEN COALESCE(O."OrderTotal",0) = 0 THEN 'Pedido não gerado'
ELSE 'PV(s): ' || O."OrderNums"
END AS "CampoUsuario1",
'' AS "CampoUsuario2",
CASE
WHEN COALESCE(O."OrderTotal",0) = 0 THEN '#EF4444'
WHEN COALESCE(O."OrderTotal",0) < C."DocTotal" THEN '#F59E0B'
ELSE '#16A34A'
END AS "CorDoCard",
CASE
WHEN COALESCE(O."OrderTotal",0) = 0 THEN '#F9D9D9'
WHEN COALESCE(O."OrderTotal",0) < C."DocTotal" THEN '#FFECCC'
ELSE '#D7FDDE'
END AS "CorDoCardTotal"
FROM Cot C
LEFT JOIN OrdFromCot O ON O."DocEntryCot" = C."DocEntry"
LEFT JOIN OSLP S ON S."SlpCode" = C."SlpCode"
WHERE C.rn <= 5
ORDER BY C."CardCode", C."DocDate" DESC, C."DocEntry" DESC;
3. Explicação dos recursos
Filtros
-
Você pode usar filtros no formato:
WHERE DocDate BETWEEN '{[Data1CRMOne][Data Inicial]}' AND '{[Data2CRMOne][Data Final]}'
-
Também há suporte para texto, checkbox e combobox.
Cores dinâmicas
Exemplo de lógica para mudar cor do card:
CASE
WHEN COALESCE(O."OrderTotal",0) = 0 THEN '#EF4444'
WHEN COALESCE(O."OrderTotal",0) < C."DocTotal" THEN '#F59E0B'
ELSE '#16A34A'
END AS "CorDoCard"
Prioridade
-
Baseada no valor total da cotação.
-
Com cor vinculada ao nível:
-
> 20.000
→ Prioritário (vermelho) -
> 10.000
→ Elevada (laranja) -
> 5.000
→ Normal (azul) -
≤ 5.000
→ Baixa (cinza)
-
Progresso
-
Se sem pedido vinculado → 50.
-
Se com pedido vinculado → 100.
Campo 1
Mostra o status do vínculo:
-
“Pedido não gerado” se não houver pedido.
-
“PV(s): nº do pedido” quando houver.
Campo 2
Livre para uso adicional (ex.: origem, status interno, área responsável, campos de usuário).
4. Cenário criado
No exemplo final, montamos um Kanban de Cotações → Pedidos de Venda com os seguintes objetivos:
-
Monitorar as últimas 5 cotações por cliente.
-
Comparar o valor da cotação com os pedidos vinculados.
-
Mostrar saldos positivos/negativos.
-
Definir prioridade automática com cores.
-
Exibir progresso (50/100).
-
Indicar no Campo 1 se já houve conversão para pedido.
Esse modelo pode ser adaptado para qualquer tabela do SAP B1 (ex.: OCRD para PN, OINV para NF, etc.), tornando o Kanban altamente flexível.
Nenhum comentário para exibir
Nenhum comentário para exibir