on 11-04-2013 4:30 PM
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)
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
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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'
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
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.
User | Count |
---|---|
108 | |
12 | |
11 | |
6 | |
5 | |
4 | |
3 | |
3 | |
3 | |
3 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.