Enterprise Resource Planning Blogs by Members
Gain new perspectives and knowledge about enterprise resource planning in blog posts from community members. Share your own comments and ERP insights today!
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member

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.

2 Comments
Labels in this area