Skip to Content
Author's profile photo Former Member

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

Print_ Mar. 29 13.04_ML.jpg

Especifique para quais usuários o bloqueio ocorrerá

Print_ Mar. 29 13.06_ML.jpg

Marque o documento de marketing “Pedido de Vendas”

Print_ Mar. 29 13.07_ML.jpg

Defina o grupo de aprovadores

Print_ Mar. 29 13.09_ML.jpg

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”

Print_ Mar. 29 13.11_ML.jpg

Selecione a consulta formatada “Condições baseadas em consultas do usuário

Print_ Mar. 29 13.16_ML.jpg

Selecione a consulta,e a tela deverá ficar conforme a imagem abaixo.

Print_ Mar. 29 13.14_ML.jpg

3.Validando o procedimento

Checando se o cliente possui títulos vencidos a mais de 7 dias para realização do teste

Print_ Mar. 29 13.17_ML.jpg

Print_ Mar. 29 13.18_ML.jpg

Neste exemplo o cliente possui títulos com 10 dias em atraso.(Imagem acima)

Emitindo o pedido

Print_ Mar. 29 13.20_ML.jpg

Print_90 Mar. 29 13.20_ML.jpg

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.

Print_ Mar. 29 13.21_ML.jpg

Espero ter contribuído com este documento, caso tenham dúvidas estou a disposição.

Assigned Tags

      2 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Marta Loiola
      Marta Loiola

      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

      Author's profile photo Anderson Donola
      Anderson Donola

      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