execute block (
  departamento integer = :departamento,
  afinidade integer = :afinidade,
  marca integer = :marca,
  meses integer = :meses,
  data date = :data_cadastro
) returns (
  item integer,
  nome varchar(100),
  saldo integer,
  custo numeric(11,2),
  custo_total numeric(11,2),
  preco_pago numeric(11,2),
  preco_atual numeric(11,2),
  data_cadastro date,
  ultima_venda date
) as
begin
  for select
        i.item,
        i.nome,
        i.preco,
        i.data_inclusao
      from
        itens i
      where
        i.obsoleto = 'N'
        and i.estoque = 'S'
        and i.indisponivel = 'N'
        and (i.departamento = :departamento or :departamento = 0)
        and (i.afinidade = :afinidade or :afinidade = 0)
        and (i.marca = :marca or :marca = 0)
        and i.data_inclusao <= :data
      order by
        1
      into
        :item,
        :nome,
        :preco_atual,
        :data_cadastro
      do
  begin
    select
      max(ie.data_nota)
    from
      itens_emitidos ie
    where
      ie.tipo = 'A'
      and ie.cancelada = 'N'
      and ie.item = :item
    into
      :ultima_venda;
    if (ultima_venda is null or ultima_venda < current_date - (30 * :meses)) then
    begin
      select cast(saldo_total as integer) from saldo(:item, 1, 0, 'now') into :saldo;
      if (saldo > 0) then
      begin
        select custo, preco from custo(:item,'now') into :custo, preco_pago;
        custo_total = custo * saldo;
        suspend;
      end
    end
  end
end
