select distinct forn.pessoa as PESSOA_FORN
, forn.nome_completo as NOME_FORNECEDOR
, nome_estabelecimento as ESTABELECIMENTO
, prod.id as produto_id
, prod.produto
, prod.descricao
, estoque_atual
, ordem_compra
, pedido_venda
, estoque_minimo
, quantidade_repor
, rpp.*
from(
select prod_id
, estabelecimento_id as estab_id
   , produto
   , descricao_produto
   , descricao_detalhada
   , marca
   , referencia_produto
   , tipo_produto
   , simbolo
   , sum(estoque_atual) as estoque_atual
   , sum(oc) as ordem_compra
   , sum(pv) as pedido_venda
   , sum(minimo) as estoque_minimo
   , sum(minimo - (estoque_atual - pv)) as quantidade_repor
   , (select sum(ip.quantidade)
           from itens_pedidos ip
           join pedidos p on p.id = ip.pedido_id
           where p.situacao not in ('C')
           and ip.produto_id = prod_id
           and p.data_conclusao between current_date - interval '30 day' 
                 and current_date) as venda_30
   , (select sum(ip.quantidade)
           from itens_pedidos ip
           join pedidos p on p.id = ip.pedido_id
           where p.situacao not in ('C')
           and ip.produto_id = prod_id
           and p.data_conclusao between current_date - interval '90 day'
                 and current_date) as venda_90
   from (
       select    ep.id
       , ep.estabelecimento_id as estabelecimento_id
       ,    p.id as prod_id
       ,    p.produto
       ,    p.descricao as descricao_produto
       ,    p.descricao_detalhada
       ,    p.referencia_fabricante as referencia_produto
       ,    m.marca
       ,    tp.tipo_produto
       ,    um.simbolo
       ,    ep.estoque_atual
       ,    0 as oc
       ,    0 as pv
       ,    case when (ep.estoque_minimo < 0) then 0 else ep.estoque_minimo end as minimo
       from estoques_produtos ep
       join tipos_estoques te on te.id = ep.tipo_estoque_id
       join produtos p on (p.id = ep.produto_id)
       join unidades_medidas um on (um.id = p.unidade_medida_id)
       left join marcas m on m.id = p.marca_id
       join tipos_produtos tp on tp.id = p.tipo_produto_id
       where p.situacao <> 'C'
       
       union
       
       select     i.id
       ,   ped.estabelecimento_id as estabelecimento_id
       ,  p.id as prod_id
       ,    p.produto
       ,    p.descricao as descricao_produto
       ,    p.descricao_detalhada
       ,    p.referencia_fabricante as referencia
       ,    m.marca
       ,    tprod.tipo_produto
       ,    um.simbolo
       ,    0 as estoque_atual
       ,    i.quantidade_pendente as oc
       ,    0 as pv
       ,    0 as minimo
       from itens_pedidos i
       join pedidos ped on (ped.id = i.pedido_id)
       join tipos_pedidos tp on (tp.id = ped.tipo_pedido_id)
       join produtos p on (p.id = i.produto_id)
       left join marcas m on m.id = p.marca_id
       join tipos_produtos tprod on tprod.id = p.tipo_produto_id
       join unidades_medidas um on (um.id = p.unidade_medida_id)
       where tp.categoria = 'C' and p.situacao in ('M', 'P')
       and p.situacao <> 'C'
       
       union
       
       select    i.id
       , ped.estabelecimento_id as estabelecimento_id
       , p.id as prod_id
       ,   p.produto
       ,   p.descricao as descricao_produto
       ,   p.descricao_detalhada
       ,   p.referencia_fabricante as referencia
       ,   m.marca
       ,   tprod.tipo_produto
       ,   um.simbolo
       ,   0 as estoque_atual
       ,   0 as oc
       ,   case when (i.quantidade_efetiva = null) 
          then i.quantidade_pendente 
          else i.quantidade_efetiva end as pv
       ,   0 as minimo
       from itens_pedidos i
       join pedidos ped on (ped.id = i.pedido_id)
       join tipos_pedidos tp on (tp.id = ped.tipo_pedido_id)
       join produtos p on (p.id = i.produto_id)
       left join marcas m on m.id = p.marca_id
       join tipos_produtos tprod on tprod.id = p.tipo_produto_id
       join unidades_medidas um on (um.id = p.unidade_medida_id)
       where tp.categoria in ('V', 'S')
       and ped.situacao in ('M', 'P')
       and tprod.servico = 'N'
       and p.situacao <> 'C'
   
   ) query
   group by produto
   , descricao_produto
   , descricao_detalhada
   , referencia_produto
   , marca
   , tipo_produto
   , simbolo
   , prod_id
   , estabelecimento_id
   having sum(coalesce(minimo,0) - (coalesce(estoque_atual,0) - coalesce(pv,0)) ) >= 0
)q
join referencias_produtos_pessoas rpp on rpp.produto_id = q.prod_id 
join pessoas forn on forn.id = rpp.empresa_id
join estabelecimentos estab on estab.id = estab_id
join produtos prod on prod.id = rpp.produto_id
order by prod.produto, forn.nome_completo
ORCCOM.PRO_GERAR_ITENS_COMPRA.ADITIONAL_ITEMS: Deverá conter uma relação de nome/dominio/label de colunas adicionais (definidas no CUSTOM_SQL) e que devem ser apresentadas na tela. 
marca: ADSRT.TEXT :Marca estoque_atual: ADSRT.DOUBLE : Estoque atual estoque_minimo: ADSRT.DOUBLE :Estoque mínimo quantidade_repor: ADSRT.DOUBLE :Qtd reporORCCOM.PRO_GERAR_ITENS_COMPRA.ATRIBUTOS_ORDEM_COMPRA: Atributos que devem ser preenchidos na capa da ordem de compra durante o processo.
ATRIBUTO=VALORQualquer atributo existente na entidade PEDIDOS pode ser utilizado.
VENDEDOR_ID=12345 REPRESENTANTE_ID=93984 DATA_PROGRAMADA=[SYSDATE+14]
| Código de identificação do produto. Calculado automaticamente ou informado conforme parametrização da respectiva engenharia de produto. | |
| Texto que descreve o produto. Este é o texto utilizado por padrão em todos os documentos fiscais e interfaces de uso interno. | |
| Código (único) de identificação da pessoa (física ou jurídica). | |
| Nome completo da pessoa física ou razão social da pessoa jurídica. Razão social é o nome devidamente registrado sob o qual uma pessoa jurídica se individualiza e exerce suas atividades. A razão social diferencia-se do nome dado a um estabelecimento ou do nome comercial com que a empresa pode ser reconhecida junto ao público, o qual é conhecido como nome fantasia.  | |
| Estabelecimento para o qual deverá ser criada a ordem de compra. | |
| Apresenta os campos criados dinamicamente a partir do SQL, que estejam informadas na preferência [ORCCOM.PRO_GERAR_ITENS_COMPRA.ADITIONAL_ITEMS] | |
| Caso informado indica a quantidade de produtos a ser solicitada. | |
| Quando informado indica o preço do produto. | |
| Número de dias para o qual se deseja ter estoque. Quando informado pode ser utilizado na pesquisa pelo SQL customizado. | |
| Link para a ordem de compra | 
marca: ADSRT.TEXT :Marca estoque_atual: ADSRT.DOUBLE : Estoque atual estoque_minimo: ADSRT.DOUBLE :Estoque mínimo quantidade_repor: ADSRT.DOUBLE :Qtd repor
Tipo: TEXT_LONG
Atributos que devem ser preenchidos na capa da ordem de compra durante o processo.
Deve ser informado um atributo por linha no formato:
ATRIBUTO=VALORQualquer atributo existente na entidade PEDIDOS pode ser utilizado.
VENDEDOR_ID=12345 REPRESENTANTE_ID=93984 DATA_PROGRAMADA=[SYSDATE+14]
Tipo: TEXT_LONG
select distinct forn.pessoa as PESSOA_FORN
, forn.nome_completo as NOME_FORNECEDOR
, nome_estabelecimento as ESTABELECIMENTO
, prod.id as produto_id
, prod.produto
, prod.descricao
, estoque_atual
, ordem_compra
, pedido_venda
, estoque_minimo
, quantidade_repor
, rpp.*
from(
select prod_id
, estabelecimento_id as estab_id
   , produto
   , descricao_produto
   , descricao_detalhada
   , marca
   , referencia_produto
   , tipo_produto
   , simbolo
   , sum(estoque_atual) as estoque_atual
   , sum(oc) as ordem_compra
   , sum(pv) as pedido_venda
   , sum(minimo) as estoque_minimo
   , sum(minimo - (estoque_atual - pv)) as quantidade_repor
   , (select sum(ip.quantidade)
           from itens_pedidos ip
           join pedidos p on p.id = ip.pedido_id
           where p.situacao not in ('C')
           and ip.produto_id = prod_id
           and p.data_conclusao between current_date - interval '30 day' 
                 and current_date) as venda_30
   , (select sum(ip.quantidade)
           from itens_pedidos ip
           join pedidos p on p.id = ip.pedido_id
           where p.situacao not in ('C')
           and ip.produto_id = prod_id
           and p.data_conclusao between current_date - interval '90 day'
                 and current_date) as venda_90
   from (
       select    ep.id
       , ep.estabelecimento_id as estabelecimento_id
       ,    p.id as prod_id
       ,    p.produto
       ,    p.descricao as descricao_produto
       ,    p.descricao_detalhada
       ,    p.referencia_fabricante as referencia_produto
       ,    m.marca
       ,    tp.tipo_produto
       ,    um.simbolo
       ,    ep.estoque_atual
       ,    0 as oc
       ,    0 as pv
       ,    case when (ep.estoque_minimo < 0) then 0 else ep.estoque_minimo end as minimo
       from estoques_produtos ep
       join tipos_estoques te on te.id = ep.tipo_estoque_id
       join produtos p on (p.id = ep.produto_id)
       join unidades_medidas um on (um.id = p.unidade_medida_id)
       left join marcas m on m.id = p.marca_id
       join tipos_produtos tp on tp.id = p.tipo_produto_id
       where p.situacao <> 'C'
       
       union
       
       select     i.id
       ,   ped.estabelecimento_id as estabelecimento_id
       ,  p.id as prod_id
       ,    p.produto
       ,    p.descricao as descricao_produto
       ,    p.descricao_detalhada
       ,    p.referencia_fabricante as referencia
       ,    m.marca
       ,    tprod.tipo_produto
       ,    um.simbolo
       ,    0 as estoque_atual
       ,    i.quantidade_pendente as oc
       ,    0 as pv
       ,    0 as minimo
       from itens_pedidos i
       join pedidos ped on (ped.id = i.pedido_id)
       join tipos_pedidos tp on (tp.id = ped.tipo_pedido_id)
       join produtos p on (p.id = i.produto_id)
       left join marcas m on m.id = p.marca_id
       join tipos_produtos tprod on tprod.id = p.tipo_produto_id
       join unidades_medidas um on (um.id = p.unidade_medida_id)
       where tp.categoria = 'C' and p.situacao in ('M', 'P')
       and p.situacao <> 'C'
       
       union
       
       select    i.id
       , ped.estabelecimento_id as estabelecimento_id
       , p.id as prod_id
       ,   p.produto
       ,   p.descricao as descricao_produto
       ,   p.descricao_detalhada
       ,   p.referencia_fabricante as referencia
       ,   m.marca
       ,   tprod.tipo_produto
       ,   um.simbolo
       ,   0 as estoque_atual
       ,   0 as oc
       ,   case when (i.quantidade_efetiva = null) 
          then i.quantidade_pendente 
          else i.quantidade_efetiva end as pv
       ,   0 as minimo
       from itens_pedidos i
       join pedidos ped on (ped.id = i.pedido_id)
       join tipos_pedidos tp on (tp.id = ped.tipo_pedido_id)
       join produtos p on (p.id = i.produto_id)
       left join marcas m on m.id = p.marca_id
       join tipos_produtos tprod on tprod.id = p.tipo_produto_id
       join unidades_medidas um on (um.id = p.unidade_medida_id)
       where tp.categoria in ('V', 'S')
       and ped.situacao in ('M', 'P')
       and tprod.servico = 'N'
       and p.situacao <> 'C'
   
   ) query
   group by produto
   , descricao_produto
   , descricao_detalhada
   , referencia_produto
   , marca
   , tipo_produto
   , simbolo
   , prod_id
   , estabelecimento_id
   having sum(coalesce(minimo,0) - (coalesce(estoque_atual,0) - coalesce(pv,0)) ) >= 0
)q
join referencias_produtos_pessoas rpp on rpp.produto_id = q.prod_id 
join pessoas forn on forn.id = rpp.empresa_id
join estabelecimentos estab on estab.id = estab_id
join produtos prod on prod.id = rpp.produto_id
order by prod.produto, forn.nome_completo
Tipo: SOURCE_CODE