cancel
Showing results for 
Search instead for 
Did you mean: 

Autorização para custo de compra

fbio_bilicki
Active Contributor
0 Kudos

Boa tarde pessoal,

Atualmente tenho a seguinte trava via "transaction" no sistema, toda vez que o comprador tentar fazer um pedido de compra com o custo maior que a lista de preço "CUSTO_COMPRA", o sistema trava.

Pra fazer essa trava criei uma lista de preço chamada CUSTO_COMPRA, onde tenho o preço sem impostos + IPI (Valor - ICMS - PIS - COFINS + IPI).

A trava que eu utilizo é a seguinte:

....

....

-- Se nao tiver tabela, trava tabela de custo de compra mas não deve existir a tabela do PN.

SET @vTmp = null

SET @sTmp = null          

SELECT TOP 1

    @sTmp = T0.ItemCode,

    @vTmp = MAX(T4.Price)

FROM POR1 T0

INNER JOIN POR4 T1 ON (T1.DocEntry = T0.DocEntry and T1.LineNum = T0.LineNum)

INNER JOIN OPOR T5 ON (T5.Docentry = T0.Docentry)

INNER JOIN OUSG T7 ON T0.Usage = T7.ID

LEFT JOIN OPLN T3 ON (T3.ListName like 'COMPRA%CUSTO')  -- tabela de custo

LEFT JOIN ITM1 T4 ON (T4.ItemCode = T0.ItemCode and T4.PriceList = T3.ListNum)

LEFT JOIN OSPP T6 ON (T6.CardCode = T5.CardCode and T6.ItemCode = T0.ItemCode)  -- tabela do PN

WHERE T0.Docentry = @sKeyVal and ISNULL(T6.Price,0) = 0 and T4.Price > 0 and T0.LineStatus = 'O' AND T7.Usage like 'ECo%'

      and T0.Itemcode like '11%' -- Travar inicialmente somente código começado por 11

GROUP BY

T0.ItemCode

HAVING ROUND((MAX(T0.Price) - (SUM(T1.TaxSum)/MAX(T0.Quantity))),3) > ROUND(MAX(T4.Price),3)           

IF @vTmp > 0

BEGIN

    SET @error=1

    SET @error_message = 'SIPTI: Pedido ' + @sKeyVal + ', Item ' + LTRIM(@sTmp) + ', vlr.compra não pode ser superior à TAB.CUSTO: ' + LTRIM(STR(@vTmp,10,3))

END

...

Esse esquema está funcionando perfeito, meu problema é que eu quero transformar isso em uma "autorização".

Eu até consegui fazer uma autorização simples, mas não consigo fazer o calculo para conseguir o custo da linha do pedido de compra pra comparar com a tabela.

Alguém tem alguma dica para que eu consiga fazer essa trava com autorização?

Abraço,

Fabio.

SAP 8.82 PL13 / SAP 9.0 PL6 (Test)

Accepted Solutions (1)

Accepted Solutions (1)

fbio_bilicki
Active Contributor
0 Kudos

Boa tarde pessoal, após muito trabalho consegui resolver meu caso com a consulta abaixo,

felizmente o SAP tem o preço bruto (com todos os impostos) e o valor da taxa (impostos que não são embutidos no preço), assim consegui pegar o valor do custo que eu queria.

Com ajuda do "How to Define and Use User-DefinedValues" que encontrei no link http://pt.scribd.com/doc/105874709/SAP-B1-UDF (não encontrei ainda dentro do site da SAP, quem souber onde está favor postar o link), consegui fazer a seguinte query para autorização.

SELECT DISTINCT 'TRUE'

FROM ITM1 T0

INNER JOIN OPLN T2 ON (T2.ListName like 'COMPRA%CUSTO')

INNER JOIN OUSG T3 ON T3.ID = $[POR1.Usage] AND T3.Usage like 'ECo%'

LEFT JOIN OSPP T4 ON (T4.CardCode = $[OPOR.Cardcode] and T6.ItemCode = T0.ItemCode) -- tabela do PN

WHERE T0.PriceList = T2.ListNum AND

T0.Itemcode = $[POR1.Itemcode] AND

T0.Price > 0 AND -- Trava somente se tiver preço na tabela de custo

ISNULL(T4.Price,0) = 0 AND -- Trava somente se o fornecedor não tiver preço

($[$38.17.NUMBER] - ($[$38.20.NUMBER] - $[$38.17.NUMBER] - ($[$38.82.NUMBER] / $[$38.11.NUMBER])) ) > T0.Price

A formula que usei pra pegar o custo foi.

Custo = Preço Unit.Pedido - ( Preço Bruto - Preço Unit.Pedido - (TotalTaxa/Quantidade))

$[$38.17.NUMBER] - ($[$38.20.NUMBER] - $[$38.17.NUMBER] - ($[$38.82.NUMBER] / $[$38.11.NUMBER]))

Abraço a todos

Fabio.

SAP 8.82 PL13, SAP 9.0 PL6

Answers (1)

Answers (1)

Former Member
0 Kudos

Olá Fábio

Como esta tentando pegar o Custo da Linha? ou o calculo que esteja utilizando. Pelo que entendi, o mais trabalhoso já esta pronto na sua consulta, seria apenas pegar o valor das linhas do pedido e comparar com a tabela de preços Custos, jogando na sua query... a unica diferença é que nas consultas para disparar a Autorizaçao tem que estar de acordo com o abaixo, utilizando o TRUE (Exemplo):

SELECT distinct 'true' FROM

POR1 T1

inner join OITM T2 ON T1.ItemCode = T2.ItemCode AND T2.ItemCode = $[$38.1.0] and t2.ItmsGrpCod = '118'

fbio_bilicki
Active Contributor
0 Kudos

Bom dia,

eu consegui pegar o custo da linha lendo o valor total, e descontando os impostos da tabela POR4, mas como a tabela POR4 só tem total, dividi pela quantidade pra encontrar o unitário.

O problema do seu select é pegar o valor de custo da tabela POR4, não consigo pegar referente ao documento que estou incluindo (no transaction tenho o DocKey, aqui na autorização não tenho a chave, só consigo fazer testes com campos da tela usando $[$.. )

Abraço

Fabio.