Você está na página 1de 3

Declare

@Ordem_TP_Venda int = 1,
@Ordem_TP_Custo int = 4;

BEGIN TRAN
/*Busca os produtos e dados iniciais*/
SELECT
custo.Ordem AS ordem_PSP_Custo,
PS.ORDEM ORDEM_PROD_SERV,
ps.codigo,
venda.preco AS venda,
ISNULL(custo.preco, 0) AS custo,
venda.preco * 0.3 AS novo_custo,
@Ordem_TP_Custo ordem_tabela_custo
INTO #TEMP_PRECOS
FROM s9_real..prod_serv PS
LEFT JOIN s9_real..prod_serv_precos Venda
ON ps.ordem = venda.ordem_prod_serv AND
venda.ordem_tabela_preco = @Ordem_TP_Venda
LEFT JOIN s9_real..prod_serv_precos Custo
ON ps.ordem = custo.ordem_prod_serv AND
custo.ordem_tabela_preco = @Ordem_TP_Custo
WHERE ps.inativo = 0
AND venda.preco > 0
AND ( IsNull(Custo.Preco,0) = 0 or Custo.Preco >
Venda.Preco )

/*Realiza o insert dos produtos que nunca receberam um preço


de custo*/
INSERT INTO
S9_REAL..Prod_Serv_Precos(Ordem_Tabela_Preco,Ordem_Prod_Serv,P
reco)
Select
ordem_tabela_custo, ORDEM_PROD_SERV,0
from #TEMP_PRECOS
where 1=1
AND ordem_PSP_Custo is null

/*Deleta os dados iniciais*/


delete from #TEMP_PRECOS

/*Realiza o insert dos dados iniciais atualizados*/


INSERT INTO #TEMP_PRECOS
SELECT
custo.Ordem AS ordem_PSP_Custo,
PS.ORDEM ORDEM_PROD_SERV,
ps.codigo,
venda.preco AS venda,
ISNULL(custo.preco, 0) AS custo,
venda.preco * 0.3 AS novo_custo,
@Ordem_TP_Custo ordem_tabela_custo
FROM s9_real..prod_serv PS
LEFT JOIN s9_real..prod_serv_precos Venda
ON ps.ordem = venda.ordem_prod_serv AND
venda.ordem_tabela_preco = @Ordem_TP_Venda
LEFT JOIN s9_real..prod_serv_precos Custo
ON ps.ordem = custo.ordem_prod_serv AND
custo.ordem_tabela_preco = @Ordem_TP_Custo
WHERE ps.inativo = 0
AND venda.preco > 0
AND (IsNull(Custo.Preco,0) = 0 or Custo.Preco >
Venda.Preco )

/*realiza a atualização dos preços de custo para o novo preço


de custo*/
UPDATE PSP SET
PSP.PRECO = tP.novo_custo
from S9_REAL..Prod_Serv_Precos PSP
INNER JOIN #TEMP_PRECOS tp ON PSP.Ordem_Prod_Serv =
TP.ORDEM_PROD_SERV
AND PSP.Ordem_Tabela_Preco = tp.ordem_tabela_custo
/*Validação*/
Select * from #TEMP_PRECOS
order by codigo
SELECT
ps.Ordem AS ordem_prod_serv,
ps.codigo,
venda.preco AS venda,
ISNULL(custo.preco, 0) AS custo,
venda.preco * 0.3 AS novo_custo
FROM s9_real..prod_serv PS
LEFT JOIN s9_real..prod_serv_precos Venda
ON ps.ordem = venda.ordem_prod_serv AND
venda.ordem_tabela_preco = @Ordem_TP_Venda
LEFT JOIN s9_real..prod_serv_precos Custo
ON ps.ordem = custo.ordem_prod_serv AND
custo.ordem_tabela_preco = @Ordem_TP_Custo
WHERE ps.inativo = 0
-- AND venda.preco > 0
-- AND ISNULL(custo.preco, 0) = 0
--and ( IsNull(Custo.Preco,0) = 0 or
Custo.Preco > Venda.Preco )

AND ps.Ordem IN (SELECT Ordem_Prod_Serv FROM


#TEMP_PRECOS)
order by codigo
--rollback
if @@ERROR = 0 commit else rollback

Você também pode gostar