Bloqueio de pedidos vendas cujo cliente tenha títulos vencidos com mais de 7 dias
Pessoal, boa tarde!
Gostaria de compartilhar um procedimento de autorização para pedidos de vendas cujo o cliente tenha algum título vencido a mais de 7 dias.
1.Criar a consulta formatada
Abaixo a SQL utilizada para a consulta que foi intitulada “Titulos em aberto => 7 dias“
‘
SELECT CASE WHEN COUNT(CLIENTE) > 0 THEN ‘True’ else ‘False’ END FROM (
/*
——————————————————————————–
Notas Fiscais Saida
——————————————————————————–
*/
SELECT
‘TipoDoc’ = ‘NF’,
‘Casa DC Imp. Boleto’ = d.QryGroup64,
‘Nota’ = cast(a.serial as char(10)),
‘NroDoc’ = a.DocEntry,
‘NroBoleto’ = ”,
‘Parcela’ = cast(b.InstlmntID as varchar(2)),
‘NroParcela’ = a.Installmnt,
‘Emissao’ = a.DocDate,
‘Vencto’ = b.DueDate,
‘DataPagto’ = ”,
‘DiasAVencer’ = datediff(dd,b.DueDate,getdate()),
‘DiasPagto’ = 0,
‘Cliente’ = a.CardCode,
‘ClienteNome’ = a.CardName,
‘CNPJ’ = Convert(Varchar,c.TaxId0),
‘ValorDoc’ = b.InsTotal,
‘ValorPago’ = 0,
‘Desconto’ = 0,
‘Saldo’ = case when b.PaidToDate <> 0 then (b.InsTotal) – b.PaidToDate else b.InsTotal end,
‘Portador’ = case isnull(a.PeyMethod, ”)
when ” then ‘Carteira’
else a.PeyMethod
end,
‘NroBancario’ = ”,
‘Situacao’ = case b.Status
when ‘O’ then ‘Aberto’
else ‘Cancelado/Devolvido’
end,
‘Status’ = b.status,
‘Fone’ = d.phone1,
‘Fone2’ = d.phone2,
‘Classif.Cli’ = d.paymBlock,
‘LimiteCred’ = d.creditline,
‘Obs’ = ”,
‘Vendedor’ = e.slpname
FROM oinv a
join inv6 b on b.DocEntry = a.DocEntry /* Parcelas */
and b.Status = ‘O’
join ocrd d on d.CardCode = a.CardCode /* Informações do cliente (para pegar o país) */
JOIN CRD7 C ON C.CardCode = D.CardCode AND C.Address = D.ShipToDef
join oslp e on e.SlpCode = a.SlpCode /* Vendedor */
WHERE a.PeyMethod not in (‘Carteira_Vendor’,’Carteira_Export’)
and b.DueDate <= DATEADD(day,-7,getdate())
UNION
/*
——————————————————————————–
Devoluções
——————————————————————————–
*/
SELECT
‘TipoDoc’ = ‘NFDev’,
‘Casa DC Imp. Boleto’ = d.QryGroup64,
‘Nota’ = cast(a.serial as char(10)),
‘NroDoc’ = a.DocEntry,
‘NroBoleto’ = ”,
‘Parcela’ = cast(b.InstlmntID as varchar(2)),
‘NroParcela’ = a.Installmnt,
‘Emissao’ = a.DocDate,
‘Vencto’ = b.DueDate,
‘DataPagto’ = ”,
‘DiasAVencer’ = datediff(dd,b.DueDate,getdate()),
‘DiasPagto’ = 0,
‘Cliente’ = a.CardCode,
‘ClienteNome’ = a.CardName,
‘CNPJ’ = Convert(Varchar,c.TaxId0),
‘ValorDoc’ = (b.InsTotal*-1),
‘ValorPago’ = 0,
‘Desconto’ = 0,
‘Saldo’ = case when b.PaidToDate <> 0 then (b.InsTotal-b.PaidToDate)*-1 else (b.InsTotal)*-1 end,
‘Portador’ = case isnull(a.PeyMethod, ”)
when ” then ‘Carteira’
else a.PeyMethod
end,
‘NroBancario’ = ”,
‘Situacao’ = ‘Aberto’,
‘Status’ = ”,
‘Fone’ = d.phone1,
‘Fone2’ = d.phone2,
‘Classif.Cli’ = d.paymBlock,
‘LimiteCred’ = d.creditline,
‘Obs’ = ”,
‘Vendedor’ = e.slpname
FROM orin a
JOIN rin6 b on b.DocEntry = a.DocEntry /* Parcelas */
and b.Status = ‘O’
JOIN ocrd d on d.CardCode = a.CardCode /* Informações do cliente (para pegar o país) */
JOIN CRD7 C ON C.CardCode = D.CardCode AND C.Address = D.ShipToDef
JOIN oslp e on e.SlpCode = a.SlpCode /* Vendedor */
and b.DueDate <= DATEADD(day,-7,getdate())
UNION
/*
——————————————————————————–
Boletos
——————————————————————————–
*/
SELECT
‘TipoDoc’ = ‘Boleto’,
‘Casa DC Imp. Boleto’ = c.QryGroup64,
‘Nota’ = cast(e.Serial as char(10)),
‘NroDoc’ = a.DocEntry,
‘NroBoleto’ = b.BoeNum,
‘Parcela’ = d.InstID,
‘NroParcela’ = d.InstID,
‘Emissao’ = e.docdate,
‘Vencto’ = b.DueDate,
‘DataPagto’ = ”,
‘DiasAVencer’ = datediff(dd,b.DueDate,getdate()),
‘DiasPagto’ = ”,
‘Cliente’ = b.CardCode,
‘ClienteNome’ = b.CardName,
‘CNPJ’ = Convert(Varchar,h.TaxId0),
‘ValorDoc’ = b.BoeSum,
‘ValorPago’ = 0,
‘Desconto’ = 0,
‘Saldo’ = b.BoeSum,
‘Portador’ = isnull(b.PayMethCod, ”),
‘NroBancario’ = ”,
‘Situacao’ = b.BoeStatus,–‘Aberto’,
‘Status’ = ”,
‘Fone’ = c.phone1,
‘Fone2’ = c.phone2,
‘Classif.Cli’ = c.paymBlock,
‘LimiteCred’ = c.creditline,
‘Obs’ = b.Comments,
‘Vendedor’ = f.slpname
FROM oboe b
JOIN orct a on a.DocEntry = b.PmntNum /* Contas a receber */
JOIN ocrd c on c.CardCode = b.CardCode /* Informações do cliente (para pegar o país) */
JOIN CRD7 H ON H.CardCode = C.CardCode AND H.Address = C.ShipToDef
LEFT JOIN rct2 d on d.DocNum = b.PmntNum
and d.InvType = 13 /* Somente contas a receber originadas de notas fiscais */
and d.InvoiceID = 0
LEFT JOIN oinv e on e.DocEntry = d.DocEntry /* Nota Fiscal */
LEFT JOIN oslp f on f.SlpCode = e.SlpCode /* Vendedor */
LEFT JOIN inv1 g on g.DocEntry = e.DocEntry /* Apenas a primeira linha da nota para pegar a comissão do vendedor */
and g.LineNum = 0
WHERE b.BoeStatus in ( ‘D’,’G’ )
and b.BoeType = ‘I’
and b.DueDate <= DATEADD(day,-7,getdate())
UNION
/*
——————————————————————————–
LCM
——————————————————————————–
*/
SELECT
‘TipoDoc’ = ‘LCM’,
‘Casa DC Imp. Boleto’ = t2.QryGroup64,
‘Nota’ = substring(replace(t1.ref2,’/’,”),1,8),
‘NroDoc’ = t1.number,
‘NroBoleto’ = ”,
‘Parcela’ = 1,
‘NroParcela’ = 1,
‘Emissao’ = t1.refdate,
‘Vencto’ = t1.DueDate,
‘DataPagto’ = null,
‘DiasAVencer’ = datediff(dd,t1.DueDate,getdate()),
‘DiasPagto’ = 0,
‘Cliente’ = t2.CardCode,
‘ClienteNome’ = t2.CardName,
‘CNPJ’ = Convert(Varchar,T3.TaxId0),
‘ValorDoc’ = (T0.Debit-T0.Credit),
‘ValorPago’ = 0,
‘Desconto’ = 0,
‘Saldo’ = (T0.Debit-T0.Credit),
‘Portador’ = ‘Carteira’,
‘NroBancario’ = ”,
‘Situacao’ = ‘A’,
‘Status’ = ”,
‘Fone’ = t2.phone1,
‘Fone2’ = t2.phone2,
‘Classif.Cli’ = t2.paymBlock,
‘LimiteCred’ = t2.creditline,
‘Obs’ = isnull(t0.linememo,”),
‘Vendedor’ = f.slpname
FROM [dbo].[JDT1] T0
JOIN ojdt t1 on t0.transid = t1.transid
JOIN ocrd t2 on t0.ShortName = t2.cardcode and T2.CARDtype = ‘C’
JOIN CRD7 T3 ON T3.CardCode = T2.CardCode AND T3.Address = t2.ShipToDef
LEFT JOIN oslp f on f.SlpCode = t2.SlpCode /* Vendedor */
WHERE ((T0.[TransType] <> ’13’ AND T0.[TransType] <> ‘203’ AND T0.[TransType] <> ‘132’ AND T0.[TransType] <> ‘-2’ AND
T0.[TransType] <> ’24’ AND T0.[TransType] <> ’46’ AND T0.[TransType] <> ’14’ AND T0.[TransType] <> ‘182’ ) OR T0.[BatchNum] > 0 ) AND T0.[ShortName] like ‘%’
AND T0.[Closed] = ‘N’ AND T0.[IntrnMatch] = 0 AND (T0.[Debit] <> 0 OR T0.[Credit] <> 0 ) AND (T0.[SourceLine] <> -14 OR T0.[SourceLine] IS NULL ) AND (T0.[BalDueCred] <> (0) OR T0.[BalDueDeb] <> (0) )
and t1.DueDate <= DATEADD(day,-7,getdate())
UNION
/*
———————————————————-
Pagamento por conta
———————————————————-
*/
SELECT
‘TipoDoc’ = ‘Adiant’,
‘Nota’ = ”,
‘Casa DC Imp. Boleto’ = t7.QryGroup64,
‘NroDoc’ = T0.[DocEntry],
‘NroBoleto’ = ”,
‘Parcela’ = 1,
‘NroParcela’ = 1,
‘Emissao’ = T0.TaxDate,
‘Vencto’ = T0.DocDueDate,
‘DataPagto’ = T0.DocDate,
‘DiasPagto’ = 0,
‘DiasAVencer’ = 0,
‘Cliente’ = T0.[CardCode],
‘ClienteNome’ = T0.[CardName],
‘CNPJ’ = Convert(Varchar,T3.TaxId0),
‘ValorDoc’ = T0.NoDocSum,
‘ValorPago’ = T0.NoDocSum-T0.OpenBal,
‘Desconto’ = 0,
‘Saldo’ = T0.OpenBal*-1,
‘Portador’ = case
when (T0.boeSum)> 0 then T0.PayMth
when (T0.trsfrsum)> 0 then ‘Transferencia-‘+T0.trsfrAcct
when (T0.cashSum)>0 then ‘Dinheiro’
when (T0.CheckSum)>0 then ‘Cheque’
end,
‘NroBancario’ = ”,
‘Situacao’ = ‘P’,
‘Status’ = ”,
‘Fone’ = t7.phone1,
‘Fone2’ = t7.phone2,
‘Classif.Cli’ = t7.paymBlock,
‘LimiteCred’ = t7.creditline,
‘Obs’ = isnull(T0.Comments ,”),
‘Vendedor’ = f.slpname
FROM [dbo].[ORCT] T0
JOIN ocrd t7 on t7.CardCode = t0.CardCode /* Informações do cliente (para pegar o país) */
JOIN CRD7 T3 ON T3.CardCode = T7.CardCode AND T3.Address = t7.ShipToDef
JOIN jdt1 t8 on t8.transid = t0.transid
and t8.IntrnMatch = 0 and t8.closed = ‘N’ and t8.SourceLine IS NULL
LEFT JOIN oslp f on f.SlpCode = t7.SlpCode /* Vendedor */
WHERE T0.[Canceled] = ‘N’
and T0.[BoeStatus] is null
and T0.PayNoDoc = ‘Y’
and T0.OpenBal > 0
and T0.DocDueDate <= DATEADD(day,-7,getdate()) ) A WHERE CLIENTE = N’1′
2.Criar o procedimento de autorização
Defina um nome e descrição para o seu modelo de autorização
Especifique para quais usuários o bloqueio ocorrerá
Marque o documento de marketing “Pedido de Vendas”
Defina o grupo de aprovadores
Especifique a condição para o bloqueio, em nosso caso iremos utilizar a consulta formatada inclusa no item 1
Escolha a opção “Quando se aplica o seguinte”
Selecione a consulta formatada “Condições baseadas em consultas do usuário“
Selecione a consulta,e a tela deverá ficar conforme a imagem abaixo.
3.Validando o procedimento
Checando se o cliente possui títulos vencidos a mais de 7 dias para realização do teste
Neste exemplo o cliente possui títulos com 10 dias em atraso.(Imagem acima)
Emitindo o pedido
Ao gravar o pedido de vendas o SAP emite o alerta que este documento passará por liberação, no exemplo o modelo de autorização “Vendas_001” que criamos no passos acima.
Espero ter contribuído com este documento, caso tenham dúvidas estou a disposição.
Bom dia Marcos Leite!
Para este caso, no momento da geração do boleto, você tem alguma variante que informe que após 7 dias de vencido, este será protestado?
Você teria alguma documentação nesse sentido?
Obrigada!
Marta Loiola
Boa tarde Marcos,
Gostei da ideia. Sou novo no SAP B1. Testei o que postou, fiz três teste com clientes diferentes, mas não vai para aprovação. Poderia me ajudar?
Att.,
Anderson Donola