Modelos de autorização no nível da linha do documento de marketing
Olá pessoal,
Hoje vou escrever um pouco sobre modelos de autorização. Passei por uma situação recente com essa funcionalidade e gostaria de compartilhar minha experiência.
Recentemente no espaço do SAP B1 SDK, surgiu uma questão solicitando uma ajuda para fazer uma query para modelo de autorização no nível da linha do documento. Ao ler um pouco sobre procedimento de autorização, vi em muitas outras questões nos espaços de SAP B1, comentários de que não é possível utilizar informações do nível da linha para modelos de autorização. Na empresa onde trabalho, sabia que já haviam feito modelos de autorização no nível da linha, então fui verificar esta recurso e cheguei nas seguintes considerações:
É possível usar modelos de autorização no nível da linha?
Sim, é possível.
É possível fazer uma query para modelo de autorização usando informações de cabeçalho e linha?
Sim, é possível.
Um exemplo real: Modelo de autorização para pedido de venda
Ex.: Nivel da linha
Nessa query não quero que seja permitido a efetivação de documentos que contenham alguma linha onde o desconto é maior que 20%
SELECT CASE WHEN $[$38.15.NUMBER] > 20 THEN 'TRUE' ELSE 'FALSE' END
Ex.: Nivel de cabeçalho
Nessa query não quero que seja permitido a efetivação de documentos que desconto maior que 20%
SELECT CASE WHEN $[$24.0.NUMBER] > 20 THEN 'TRUE' ELSE 'FALSE' END
Ex.: Nivel de linha e cabeçalho
Nessa query não quero que seja permitido a efetivação de documentos que contenham alguma linha onde o desconto é maior que 20% para o parceiro C00001
SELECT CASE WHEN $[$38.15.NUMBER] > 20 AND $[$4.0.0] = 'C00001' THEN 'TRUE' ELSE 'FALSE' END
É possível agrupar valores das linhas nas queries de modelos de autorização?
Não. A query será executada uma vez para cada linha, e se alguma delas retornar ‘TRUE’, o procedimento será iniciado. Devido a essa execução linha a linha, não é possível a execução da funcionalidade como SUM(valor), por exemplo.
Obs.: Com alguns testes, pude notar também que a sintaxe $[TABELA.CAMPO] não funciona corretamente em modelos de autorização no nível da linha, nesse cenários que mencionei, deve sempre usar a sintaxe $[$ITEM.COL].
As informações compartilhadas foram testadas no SAP B1 9.0 PL 11 e 9.1 PL 12.
Era isso pessoal, espero que possa ser útil!
Não deixe de registrar seu feedback e compartilhar suas experiências sobre este assunto.
Atenciosamente,
Diego Lother
Diego, achei interessante o post e gostaria de ver com você o seguinte:
Você fez testes baseados nas linhas em documentos com mais de uma linha?
Abraço,
Rodrigo da Costa Feula
Olá Rodrigo,
Efetuei sim. Se você criar uma modelo de aprovação com essa query que olha o campo desconto da linha:
SELECT CASE WHEN $[$38.15.NUMBER] > 20 THEN 'TRUE' ELSE 'FALSE' END
e criar um documento de 5 linhas por exemplo.Se uma ou mais linhas independente da posição tiver um desconto maior que 20% o procedimento de aprovação será iniciado.
O que percebi e não funciona realmente é usar a sintaxe $[TABELA.CAMPO], nesse caso realmente não sei dizer o que acontece, mas o modelo não funciona.
Abraço,
Diego Lother
Muito bom Diego, você fez os testes em qual versão?
Se tiver a oportunidade de verificar entre as versões 9.0, 9.1 e 9.2 seria legal, pois não lembro da query usada à época mas eu e o "pessoal das antigas" já tentamos de várias formas e até então não haviamos conseguido, então seria muito interessante descobrirmos se isto foi ajustado a partir de determinada versão.
Abraços,
Rodrigo da Costa Feula
Rodrigo,
As versões que tinha em mão para teste eram:
9.0 PL 11
9.1 PL 12
Em ambas funcionaram corretamente. Não saberia dizer se na 9.0 em PL anterior a 11 funcionaria. Também no momento não tenho nenhuma instalação na versão 9.2, mas quando tiver farei o teste.
P.S: O tópico que motivou o texto foi esse aqui Approval template query for GRPO Qty greater than PO Qty e a query passada como solução para o tópico também funcionou sem problemas no meu ambiente e no do Danilo(9.1 PL 8) outro membro da SCN.
Abraço,
Diego Lother
Bom dia Diego!
Assim como voce, busquei informações sobre PA para linhas do grid, e só achei negativas. Mas por sorte encontrei seu post.
Fiz um PA baseado no grupo do item, no grupo do PN, e na condiçao de pagamento do pedido de venda. Funcionou, sem que tenha inserido nenhum documento anterior. FUNCIONA!
select distinct case Temp.Name when ‘Cimento’ then ‘True’ else ‘false’ end
FROM (Select T3.ItmsGrpNam as ‘Name’ From OITM T2 INNER JOIN
OITB T3 ON T3.ItmsGrpCod = T2.ItmsGrpCod and T3.ItmsGrpNam = ‘Cimento’
WHERE T2.ItemCode = $[$38.1.text] and T2.ItemName Not Like ‘%Branco%’ and (Select Left(PymntGroup, 2) From OCTG Where GroupNum = $[$47.1.0]) > 1 and (SELECT T2.GroupName
FROM OCRD T1 INNER JOIN
OCRG T2 ON T2.GroupCode = T1.GroupCode
WHERE T1.CardCode = $[$4.1.0]) = ‘Revenda’) Temp
SAP 9.1 PL11
Bom dia !!!
Teste na 9.2 PL 8 e funcionou perfeitamente .
Att,
Wisley Brito
Bom dia Diego.
Como faço para fazer este procedimento de autorização funcionar quando insiro um pedido de vendas por exemplo, via um portal que utiliza DI API?
Tem como?
Oi Paulo,
Espero que você esteja bem.
Você pode dar uma olhada nesse link aqui https://answers.sap.com/questions/103375/sdk---create-sales-order-and-send-for-approval.html?childToView=115469#answer-115469 que irá mostrar o que você consegue fazer com procedimento de aprovação de di api.
Att,
Diego Lother